summary refs log tree commit diff
path: root/pkgs/tools
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/tools')
-rw-r--r--pkgs/tools/X11/alttab/default.nix28
-rw-r--r--pkgs/tools/X11/arandr/default.nix6
-rw-r--r--pkgs/tools/X11/autocutsel/default.nix15
-rw-r--r--pkgs/tools/X11/bgs/default.nix6
-rw-r--r--pkgs/tools/X11/bumblebee/default.nix10
-rw-r--r--pkgs/tools/X11/caffeine-ng/default.nix19
-rw-r--r--pkgs/tools/X11/ckbcomp/default.nix10
-rw-r--r--pkgs/tools/X11/devour/default.nix28
-rw-r--r--pkgs/tools/X11/dex/default.nix4
-rw-r--r--pkgs/tools/X11/dispad/default.nix4
-rw-r--r--pkgs/tools/X11/dragon-drop/default.nix6
-rw-r--r--pkgs/tools/X11/ffcast/default.nix4
-rw-r--r--pkgs/tools/X11/find-cursor/default.nix26
-rw-r--r--pkgs/tools/X11/go-sct/default.nix8
-rw-r--r--pkgs/tools/X11/grobi/default.nix12
-rw-r--r--pkgs/tools/X11/hsetroot/default.nix50
-rw-r--r--pkgs/tools/X11/icon-slicer/default.nix29
-rw-r--r--pkgs/tools/X11/imwheel/default.nix4
-rw-r--r--pkgs/tools/X11/keynav/default.nix6
-rw-r--r--pkgs/tools/X11/ksuperkey/default.nix6
-rw-r--r--pkgs/tools/X11/libstrangle/default.nix20
-rw-r--r--pkgs/tools/X11/libstrangle/nixos.patch44
-rw-r--r--pkgs/tools/X11/ncview/default.nix4
-rw-r--r--pkgs/tools/X11/nitrogen/default.nix14
-rw-r--r--pkgs/tools/X11/numlockx/default.nix4
-rw-r--r--pkgs/tools/X11/nx-libs/default.nix24
-rw-r--r--pkgs/tools/X11/obconf/default.nix10
-rw-r--r--pkgs/tools/X11/opentabletdriver/default.nix172
-rw-r--r--pkgs/tools/X11/opentabletdriver/deps.nix462
-rw-r--r--pkgs/tools/X11/opentabletdriver/shell.nix12
-rwxr-xr-xpkgs/tools/X11/opentabletdriver/update.sh72
-rw-r--r--pkgs/tools/X11/primus/lib.nix4
-rw-r--r--pkgs/tools/X11/ratmen/default.nix10
-rw-r--r--pkgs/tools/X11/run-scaled/default.nix8
-rw-r--r--pkgs/tools/X11/runningx/default.nix14
-rw-r--r--pkgs/tools/X11/screen-message/default.nix14
-rw-r--r--pkgs/tools/X11/sct/default.nix4
-rw-r--r--pkgs/tools/X11/setroot/default.nix8
-rw-r--r--pkgs/tools/X11/skippy-xd/default.nix15
-rw-r--r--pkgs/tools/X11/srandrd/default.nix4
-rw-r--r--pkgs/tools/X11/sselp/default.nix12
-rw-r--r--pkgs/tools/X11/sx/default.nix30
-rw-r--r--pkgs/tools/X11/vdpauinfo/default.nix6
-rw-r--r--pkgs/tools/X11/virtualgl/default.nix2
-rw-r--r--pkgs/tools/X11/virtualgl/lib.nix24
-rw-r--r--pkgs/tools/X11/wayv/default.nix9
-rw-r--r--pkgs/tools/X11/wmctrl/default.nix14
-rw-r--r--pkgs/tools/X11/wmutils-core/default.nix10
-rw-r--r--pkgs/tools/X11/wmutils-libwm/default.nix4
-rw-r--r--pkgs/tools/X11/wmutils-opt/default.nix4
-rw-r--r--pkgs/tools/X11/wpgtk/default.nix12
-rw-r--r--pkgs/tools/X11/x11spice/default.nix11
-rw-r--r--pkgs/tools/X11/x11vnc/default.nix16
-rw-r--r--pkgs/tools/X11/x2vnc/default.nix4
-rw-r--r--pkgs/tools/X11/x2x/default.nix4
-rw-r--r--pkgs/tools/X11/xannotate/default.nix11
-rw-r--r--pkgs/tools/X11/xautomation/default.nix15
-rw-r--r--pkgs/tools/X11/xbanish/default.nix8
-rw-r--r--pkgs/tools/X11/xbindkeys-config/default.nix12
-rw-r--r--pkgs/tools/X11/xbindkeys/default.nix15
-rw-r--r--pkgs/tools/X11/xbrightness/default.nix6
-rw-r--r--pkgs/tools/X11/xcalib/default.nix4
-rw-r--r--pkgs/tools/X11/xcape/default.nix6
-rw-r--r--pkgs/tools/X11/xchainkeys/default.nix6
-rw-r--r--pkgs/tools/X11/xcwd/default.nix4
-rw-r--r--pkgs/tools/X11/xdg-user-dirs/default.nix9
-rw-r--r--pkgs/tools/X11/xdg-utils/default.nix21
-rw-r--r--pkgs/tools/X11/xdotool/default.nix10
-rw-r--r--pkgs/tools/X11/xgeometry-select/default.nix6
-rw-r--r--pkgs/tools/X11/xidlehook/default.nix26
-rw-r--r--pkgs/tools/X11/xinput_calibrator/default.nix10
-rw-r--r--pkgs/tools/X11/xkb-switch-i3/default.nix34
-rw-r--r--pkgs/tools/X11/xkb-switch/default.nix8
-rw-r--r--pkgs/tools/X11/xkbset/default.nix4
-rw-r--r--pkgs/tools/X11/xkeysnail/browser-emacs-bindings.py55
-rw-r--r--pkgs/tools/X11/xkeysnail/default.nix42
-rw-r--r--pkgs/tools/X11/xlayoutdisplay/default.nix4
-rw-r--r--pkgs/tools/X11/xloadimage/default.nix14
-rw-r--r--pkgs/tools/X11/xmacro/default.nix6
-rw-r--r--pkgs/tools/X11/xmagnify/default.nix6
-rw-r--r--pkgs/tools/X11/xmousepasteblock/default.nix8
-rw-r--r--pkgs/tools/X11/xnee/default.nix12
-rw-r--r--pkgs/tools/X11/xob/default.nix6
-rw-r--r--pkgs/tools/X11/xosview2/default.nix4
-rw-r--r--pkgs/tools/X11/xpointerbarrier/default.nix8
-rw-r--r--pkgs/tools/X11/xpra/default.nix68
-rw-r--r--pkgs/tools/X11/xpra/fix-paths.patch13
-rw-r--r--pkgs/tools/X11/xpra/libfakeXinerama.nix4
-rw-r--r--pkgs/tools/X11/xpra/nvenc.pc11
-rwxr-xr-xpkgs/tools/X11/xpra/update.sh5
-rw-r--r--pkgs/tools/X11/xprintidle-ng/default.nix16
-rw-r--r--pkgs/tools/X11/xrectsel/default.nix4
-rw-r--r--pkgs/tools/X11/xrestop/default.nix8
-rw-r--r--pkgs/tools/X11/xsecurelock/default.nix4
-rw-r--r--pkgs/tools/X11/xsettingsd/SConstruct.patch13
-rw-r--r--pkgs/tools/X11/xsettingsd/default.nix27
-rw-r--r--pkgs/tools/X11/xtrace/default.nix4
-rw-r--r--pkgs/tools/X11/xtruss/default.nix4
-rw-r--r--pkgs/tools/X11/xvkbd/default.nix4
-rw-r--r--pkgs/tools/X11/xwallpaper/default.nix29
-rw-r--r--pkgs/tools/X11/xwinmosaic/default.nix20
-rw-r--r--pkgs/tools/X11/xwinwrap/default.nix11
-rw-r--r--pkgs/tools/X11/xzoom/default.nix9
-rw-r--r--pkgs/tools/admin/acme.sh/default.nix20
-rw-r--r--pkgs/tools/admin/adtool/default.nix4
-rw-r--r--pkgs/tools/admin/afterburn/default.nix37
-rw-r--r--pkgs/tools/admin/amazon-ec2-utils/default.nix53
-rw-r--r--pkgs/tools/admin/amazon-ecr-credential-helper/default.nix4
-rw-r--r--pkgs/tools/admin/analog/default.nix9
-rw-r--r--pkgs/tools/admin/ansible/default.nix28
-rw-r--r--pkgs/tools/admin/aws-google-auth/default.nix14
-rw-r--r--pkgs/tools/admin/aws-lambda-runtime-interface-emulator/default.nix25
-rw-r--r--pkgs/tools/admin/aws-mfa/default.nix34
-rw-r--r--pkgs/tools/admin/aws-nuke/default.nix36
-rw-r--r--pkgs/tools/admin/aws-rotate-key/default.nix4
-rw-r--r--pkgs/tools/admin/aws-vault/default.nix31
-rw-r--r--pkgs/tools/admin/awscli/default.nix32
-rw-r--r--pkgs/tools/admin/awscli2/default.nix57
-rw-r--r--pkgs/tools/admin/awslogs/default.nix18
-rw-r--r--pkgs/tools/admin/awsweeper/default.nix20
-rw-r--r--pkgs/tools/admin/azure-cli/default.nix41
-rw-r--r--pkgs/tools/admin/azure-cli/python-packages.nix306
-rw-r--r--pkgs/tools/admin/bash-my-aws/default.nix10
-rw-r--r--pkgs/tools/admin/berglas/default.nix4
-rw-r--r--pkgs/tools/admin/bluemix-cli/default.nix2
-rw-r--r--pkgs/tools/admin/boulder/default.nix7
-rw-r--r--pkgs/tools/admin/bubblewrap/default.nix4
-rw-r--r--pkgs/tools/admin/certigo/default.nix4
-rw-r--r--pkgs/tools/admin/chamber/default.nix17
-rw-r--r--pkgs/tools/admin/chkcrontab/default.nix8
-rw-r--r--pkgs/tools/admin/cjdns-tools/default.nix46
-rw-r--r--pkgs/tools/admin/cjdns-tools/wrapper.sh29
-rw-r--r--pkgs/tools/admin/clair/default.nix7
-rw-r--r--pkgs/tools/admin/cli53/default.nix2
-rw-r--r--pkgs/tools/admin/cli53/deps.nix93
-rw-r--r--pkgs/tools/admin/credhub-cli/default.nix52
-rw-r--r--pkgs/tools/admin/daemontools/default.nix10
-rw-r--r--pkgs/tools/admin/dehydrated/default.nix10
-rw-r--r--pkgs/tools/admin/docker-credential-gcr/default.nix8
-rw-r--r--pkgs/tools/admin/docker-credential-helpers/default.nix8
-rw-r--r--pkgs/tools/admin/eksctl/default.nix8
-rw-r--r--pkgs/tools/admin/exoscale-cli/default.nix10
-rw-r--r--pkgs/tools/admin/fastlane/Gemfile.lock97
-rw-r--r--pkgs/tools/admin/fastlane/default.nix6
-rw-r--r--pkgs/tools/admin/fastlane/gemset.nix175
-rw-r--r--pkgs/tools/admin/fbvnc/default.nix8
-rw-r--r--pkgs/tools/admin/fioctl/default.nix28
-rw-r--r--pkgs/tools/admin/gixy/default.nix12
-rw-r--r--pkgs/tools/admin/google-cloud-sdk/cloud_sql_proxy_path.patch36
-rw-r--r--pkgs/tools/admin/google-cloud-sdk/default.nix34
-rw-r--r--pkgs/tools/admin/google-cloud-sdk/gsutil-disable-updates.patch14
-rw-r--r--pkgs/tools/admin/gtk-vnc/default.nix28
-rw-r--r--pkgs/tools/admin/iamy/default.nix4
-rw-r--r--pkgs/tools/admin/intecture/agent.nix6
-rw-r--r--pkgs/tools/admin/intecture/auth.nix6
-rw-r--r--pkgs/tools/admin/intecture/cli.nix6
-rw-r--r--pkgs/tools/admin/lego/default.nix10
-rw-r--r--pkgs/tools/admin/lexicon/default.nix74
-rw-r--r--pkgs/tools/admin/lxd/default.nix36
-rw-r--r--pkgs/tools/admin/mycli/default.nix29
-rw-r--r--pkgs/tools/admin/netplan/default.nix65
-rw-r--r--pkgs/tools/admin/nomachine-client/default.nix29
-rw-r--r--pkgs/tools/admin/oci-cli/default.nix59
-rw-r--r--pkgs/tools/admin/oxidized/default.nix2
-rw-r--r--pkgs/tools/admin/oxidized/gemset.nix2
-rw-r--r--pkgs/tools/admin/pebble/default.nix5
-rw-r--r--pkgs/tools/admin/procs/default.nix23
-rw-r--r--pkgs/tools/admin/pulumi/data.nix186
-rw-r--r--pkgs/tools/admin/pulumi/default.nix2
-rwxr-xr-xpkgs/tools/admin/pulumi/update.sh64
-rw-r--r--pkgs/tools/admin/rset/default.nix48
-rw-r--r--pkgs/tools/admin/rset/paths.patch131
-rw-r--r--pkgs/tools/admin/s3bro/default.nix4
-rw-r--r--pkgs/tools/admin/salt/default.nix13
-rw-r--r--pkgs/tools/admin/salt/pepper/default.nix13
-rw-r--r--pkgs/tools/admin/scaleway-cli/default.nix4
-rw-r--r--pkgs/tools/admin/sec/default.nix14
-rw-r--r--pkgs/tools/admin/sewer/default.nix4
-rw-r--r--pkgs/tools/admin/simp_le/default.nix8
-rw-r--r--pkgs/tools/admin/ssh-import-id/default.nix10
-rw-r--r--pkgs/tools/admin/ssl-cert-check/default.nix48
-rw-r--r--pkgs/tools/admin/ssmsh/default.nix26
-rw-r--r--pkgs/tools/admin/stripe-cli/default.nix26
-rw-r--r--pkgs/tools/admin/swiftclient/default.nix4
-rw-r--r--pkgs/tools/admin/tigervnc/default.nix42
-rw-r--r--pkgs/tools/admin/tigervnc/u_xorg-server-1.20.7-ddxInputThreadInit.patch21
-rw-r--r--pkgs/tools/admin/tightvnc/default.nix6
-rw-r--r--pkgs/tools/admin/trivy/default.nix44
-rw-r--r--pkgs/tools/admin/turbovnc/default.nix115
-rw-r--r--pkgs/tools/admin/virtscreen/default.nix27
-rw-r--r--pkgs/tools/admin/vncdo/default.nix33
-rw-r--r--pkgs/tools/archivers/7zz/default.nix47
-rw-r--r--pkgs/tools/archivers/afio/default.nix6
-rw-r--r--pkgs/tools/archivers/arc_unpacker/default.nix58
-rw-r--r--pkgs/tools/archivers/arj/default.nix150
-rw-r--r--pkgs/tools/archivers/atool/default.nix6
-rw-r--r--pkgs/tools/archivers/bomutils/default.nix9
-rw-r--r--pkgs/tools/archivers/cabextract/default.nix4
-rw-r--r--pkgs/tools/archivers/corearchiver/default.nix33
-rw-r--r--pkgs/tools/archivers/cpio/default.nix4
-rw-r--r--pkgs/tools/archivers/cromfs/default.nix6
-rw-r--r--pkgs/tools/archivers/ctrtool/default.nix13
-rw-r--r--pkgs/tools/archivers/fsarchiver/default.nix20
-rw-r--r--pkgs/tools/archivers/gnutar/default.nix21
-rw-r--r--pkgs/tools/archivers/innoextract/default.nix17
-rw-r--r--pkgs/tools/archivers/lha/default.nix27
-rw-r--r--pkgs/tools/archivers/maxcso/default.nix4
-rw-r--r--pkgs/tools/archivers/ndstool/default.nix6
-rw-r--r--pkgs/tools/archivers/p7zip/default.nix34
-rw-r--r--pkgs/tools/archivers/pax/default.nix30
-rw-r--r--pkgs/tools/archivers/pxattr/default.nix8
-rw-r--r--pkgs/tools/archivers/quickbms/default.nix23
-rw-r--r--pkgs/tools/archivers/rpm2targz/default.nix50
-rw-r--r--pkgs/tools/archivers/rpmextract/default.nix6
-rw-r--r--pkgs/tools/archivers/runzip/default.nix8
-rw-r--r--pkgs/tools/archivers/s-tar/default.nix6
-rw-r--r--pkgs/tools/archivers/sharutils/default.nix4
-rw-r--r--pkgs/tools/archivers/snzip/default.nix6
-rw-r--r--pkgs/tools/archivers/unar/default.nix18
-rw-r--r--pkgs/tools/archivers/unarj/default.nix23
-rw-r--r--pkgs/tools/archivers/undmg/default.nix4
-rw-r--r--pkgs/tools/archivers/unp/default.nix5
-rw-r--r--pkgs/tools/archivers/unrar/default.nix4
-rw-r--r--pkgs/tools/archivers/unshield/default.nix4
-rw-r--r--pkgs/tools/archivers/unzip/default.nix14
-rw-r--r--pkgs/tools/archivers/wimlib/default.nix14
-rw-r--r--pkgs/tools/archivers/xarchive/default.nix10
-rw-r--r--pkgs/tools/archivers/xarchiver/default.nix22
-rw-r--r--pkgs/tools/archivers/xtrt/default.nix36
-rw-r--r--pkgs/tools/archivers/zip/default.nix10
-rw-r--r--pkgs/tools/archivers/zpaq/default.nix6
-rw-r--r--pkgs/tools/archivers/zpaq/zpaqd.nix12
-rw-r--r--pkgs/tools/audio/abcm2ps/default.nix12
-rw-r--r--pkgs/tools/audio/abcmidi/default.nix11
-rw-r--r--pkgs/tools/audio/accuraterip-checksum/default.nix4
-rw-r--r--pkgs/tools/audio/acousticbrainz-client/default.nix41
-rw-r--r--pkgs/tools/audio/acoustid-fingerprinter/default.nix19
-rw-r--r--pkgs/tools/audio/acoustid-fingerprinter/ffmpeg.patch26
-rw-r--r--pkgs/tools/audio/alsaequal/default.nix8
-rw-r--r--pkgs/tools/audio/aucdtect/default.nix33
-rw-r--r--pkgs/tools/audio/audiowaveform/default.nix38
-rw-r--r--pkgs/tools/audio/beets/alternatives-plugin.nix25
-rw-r--r--pkgs/tools/audio/beets/badfiles-plugin-nix-paths.patch21
-rw-r--r--pkgs/tools/audio/beets/bash-completion-always-print.patch43
-rw-r--r--pkgs/tools/audio/beets/beet-check-tests.patch17
-rw-r--r--pkgs/tools/audio/beets/check-plugin.nix35
-rw-r--r--pkgs/tools/audio/beets/compatibility-with-breaking-changes-to-the-ast-module.patch55
-rw-r--r--pkgs/tools/audio/beets/convert-plugin-ffmpeg-path.patch43
-rw-r--r--pkgs/tools/audio/beets/default.nix243
-rw-r--r--pkgs/tools/audio/beets/keyfinder-default-bin.patch20
-rw-r--r--pkgs/tools/audio/beets/mutagen-1.43.patch29
-rw-r--r--pkgs/tools/audio/beets/plugins/alternatives.nix32
-rw-r--r--pkgs/tools/audio/beets/plugins/copyartifacts.nix (renamed from pkgs/tools/audio/beets/copyartifacts-plugin.nix)13
-rw-r--r--pkgs/tools/audio/beets/plugins/extrafiles.nix32
-rw-r--r--pkgs/tools/audio/beets/replaygain-default-bs1770gain.patch17
-rw-r--r--pkgs/tools/audio/beets/replaygain-default-ffmpeg.patch26
-rw-r--r--pkgs/tools/audio/botamusique/default.nix155
-rw-r--r--pkgs/tools/audio/botamusique/no-runtime-update.patch12
-rw-r--r--pkgs/tools/audio/botamusique/node-packages.nix5237
-rw-r--r--pkgs/tools/audio/botamusique/src.json10
-rw-r--r--pkgs/tools/audio/botamusique/unconditional-relative-state-paths.patch22
-rw-r--r--pkgs/tools/audio/bpm-tools/default.nix22
-rw-r--r--pkgs/tools/audio/darkice/default.nix12
-rw-r--r--pkgs/tools/audio/dir2opus/default.nix4
-rw-r--r--pkgs/tools/audio/essentia-extractor/default.nix10
-rw-r--r--pkgs/tools/audio/ezstream/default.nix8
-rw-r--r--pkgs/tools/audio/glyr/default.nix8
-rw-r--r--pkgs/tools/audio/google-music-scripts/default.nix59
-rw-r--r--pkgs/tools/audio/gvolicon/default.nix12
-rw-r--r--pkgs/tools/audio/isrcsubmit/default.nix24
-rw-r--r--pkgs/tools/audio/kaldi/default.nix88
-rw-r--r--pkgs/tools/audio/liquidsoap/full.nix34
-rw-r--r--pkgs/tools/audio/midicsv/default.nix10
-rw-r--r--pkgs/tools/audio/mididings/default.nix10
-rw-r--r--pkgs/tools/audio/mp3cat/default.nix4
-rw-r--r--pkgs/tools/audio/mpd-mpris/default.nix12
-rw-r--r--pkgs/tools/audio/mpdas/default.nix14
-rw-r--r--pkgs/tools/audio/mpdcron/default.nix54
-rw-r--r--pkgs/tools/audio/mpdcron/gemset.nix2
-rw-r--r--pkgs/tools/audio/mpdris2/default.nix4
-rw-r--r--pkgs/tools/audio/mpris-scrobbler/default.nix60
-rw-r--r--pkgs/tools/audio/opl3bankeditor/0001-opl3bankeditor-Look-for-system-installed-Rt-libs.patch200
-rw-r--r--pkgs/tools/audio/opl3bankeditor/0001-opn2bankeditor-Look-for-system-installed-Rt-libs.patch200
-rw-r--r--pkgs/tools/audio/opl3bankeditor/common.nix69
-rw-r--r--pkgs/tools/audio/opl3bankeditor/default.nix30
-rw-r--r--pkgs/tools/audio/opl3bankeditor/opn2bankeditor.nix21
-rw-r--r--pkgs/tools/audio/pa-applet/default.nix9
-rw-r--r--pkgs/tools/audio/pasystray/default.nix18
-rw-r--r--pkgs/tools/audio/patray/default.nix43
-rw-r--r--pkgs/tools/audio/picotts/default.nix10
-rw-r--r--pkgs/tools/audio/playerctl/default.nix10
-rw-r--r--pkgs/tools/audio/pnmixer/default.nix8
-rw-r--r--pkgs/tools/audio/pulsemixer/default.nix4
-rw-r--r--pkgs/tools/audio/qastools/default.nix8
-rw-r--r--pkgs/tools/audio/spotdl/default.nix52
-rw-r--r--pkgs/tools/audio/stt/default.nix34
-rw-r--r--pkgs/tools/audio/trx/default.nix6
-rw-r--r--pkgs/tools/audio/tts/default.nix121
-rw-r--r--pkgs/tools/audio/video2midi/default.nix6
-rw-r--r--pkgs/tools/audio/volctl/default.nix48
-rw-r--r--pkgs/tools/audio/volumeicon/default.nix8
-rw-r--r--pkgs/tools/audio/yabridge/default.nix146
-rw-r--r--pkgs/tools/audio/yabridge/hardcode-wine.patch13
-rw-r--r--pkgs/tools/audio/yabridgectl/default.nix39
-rw-r--r--pkgs/tools/audio/yabridgectl/libyabridge-from-nix-profiles.patch70
-rw-r--r--pkgs/tools/backup/amazon-glacier-cmd-interface/default.nix33
-rw-r--r--pkgs/tools/backup/automysqlbackup/default.nix6
-rw-r--r--pkgs/tools/backup/bacula/default.nix25
-rw-r--r--pkgs/tools/backup/bareos/default.nix8
-rw-r--r--pkgs/tools/backup/bdsync/default.nix10
-rw-r--r--pkgs/tools/backup/borg/default.nix71
-rw-r--r--pkgs/tools/backup/borgbackup/default.nix128
-rw-r--r--pkgs/tools/backup/borgmatic/default.nix46
-rw-r--r--pkgs/tools/backup/btar/default.nix27
-rw-r--r--pkgs/tools/backup/btrbk/default.nix19
-rw-r--r--pkgs/tools/backup/bup/default.nix17
-rw-r--r--pkgs/tools/backup/bupstash/default.nix33
-rw-r--r--pkgs/tools/backup/burp/default.nix8
-rw-r--r--pkgs/tools/backup/chunksync/default.nix6
-rw-r--r--pkgs/tools/backup/dar/default.nix26
-rw-r--r--pkgs/tools/backup/dedup/default.nix4
-rw-r--r--pkgs/tools/backup/dirvish/default.nix8
-rw-r--r--pkgs/tools/backup/discordchatexporter-cli/default.nix87
-rw-r--r--pkgs/tools/backup/discordchatexporter-cli/deps.nix72
-rwxr-xr-xpkgs/tools/backup/discordchatexporter-cli/updater.sh44
-rw-r--r--pkgs/tools/backup/diskrsync/default.nix6
-rw-r--r--pkgs/tools/backup/dump/default.nix24
-rw-r--r--pkgs/tools/backup/duplicacy/default.nix4
-rw-r--r--pkgs/tools/backup/duplicacy/deps.nix190
-rw-r--r--pkgs/tools/backup/duplicati/default.nix16
-rw-r--r--pkgs/tools/backup/duplicity/default.nix72
-rw-r--r--pkgs/tools/backup/duplicity/gnutar-in-test.patch10
-rw-r--r--pkgs/tools/backup/duplicity/linux-disable-timezone-test.patch14
-rw-r--r--pkgs/tools/backup/duplicity/use-installed-scripts-in-test.patch58
-rw-r--r--pkgs/tools/backup/duply/default.nix17
-rw-r--r--pkgs/tools/backup/easysnap/default.nix4
-rw-r--r--pkgs/tools/backup/flockit/default.nix4
-rw-r--r--pkgs/tools/backup/gamerbackup/default.nix30
-rw-r--r--pkgs/tools/backup/gphotos-sync/default.nix44
-rw-r--r--pkgs/tools/backup/grab-site/default.nix36
-rw-r--r--pkgs/tools/backup/hpe-ltfs/default.nix8
-rw-r--r--pkgs/tools/backup/httrack/default.nix6
-rw-r--r--pkgs/tools/backup/httrack/qt.nix8
-rw-r--r--pkgs/tools/backup/iceshelf/default.nix18
-rw-r--r--pkgs/tools/backup/kopia/default.nix19
-rw-r--r--pkgs/tools/backup/luckybackup/default.nix16
-rw-r--r--pkgs/tools/backup/lvmsync/default.nix6
-rw-r--r--pkgs/tools/backup/lvmsync/gemset.nix2
-rw-r--r--pkgs/tools/backup/mastodon-archive/default.nix32
-rw-r--r--pkgs/tools/backup/monolith/default.nix19
-rw-r--r--pkgs/tools/backup/mt-st/default.nix8
-rw-r--r--pkgs/tools/backup/mtx/default.nix8
-rw-r--r--pkgs/tools/backup/mydumper/default.nix12
-rw-r--r--pkgs/tools/backup/ori/default.nix10
-rw-r--r--pkgs/tools/backup/partclone/default.nix22
-rw-r--r--pkgs/tools/backup/partimage/default.nix16
-rw-r--r--pkgs/tools/backup/percona-xtrabackup/generic.nix6
-rw-r--r--pkgs/tools/backup/pyznap/default.nix6
-rw-r--r--pkgs/tools/backup/rdedup/default.nix16
-rw-r--r--pkgs/tools/backup/rdiff-backup/default.nix37
-rw-r--r--pkgs/tools/backup/rdiff-backup/fix-librsync-rs_default_strong_len.patch20
-rw-r--r--pkgs/tools/backup/rdup/default.nix10
-rw-r--r--pkgs/tools/backup/restic/0001-Skip-testing-restore-with-permission-failure.patch25
-rw-r--r--pkgs/tools/backup/restic/default.nix21
-rw-r--r--pkgs/tools/backup/restic/rest-server.nix19
-rw-r--r--pkgs/tools/backup/rotate-backups/default.nix27
-rw-r--r--pkgs/tools/backup/rsbep/default.nix29
-rw-r--r--pkgs/tools/backup/rsnapshot/default.nix6
-rw-r--r--pkgs/tools/backup/s3ql/default.nix14
-rw-r--r--pkgs/tools/backup/sanoid/default.nix39
-rw-r--r--pkgs/tools/backup/stenc/default.nix27
-rw-r--r--pkgs/tools/backup/store-backup/default.nix17
-rw-r--r--pkgs/tools/backup/tarsnap/default.nix12
-rw-r--r--pkgs/tools/backup/tarsnapper/default.nix2
-rw-r--r--pkgs/tools/backup/ugarit-manifest-maker/default.nix4
-rw-r--r--pkgs/tools/backup/ugarit/default.nix4
-rw-r--r--pkgs/tools/backup/wal-e/default.nix20
-rw-r--r--pkgs/tools/backup/wal-g/default.nix17
-rw-r--r--pkgs/tools/backup/zbackup/default.nix6
-rw-r--r--pkgs/tools/backup/zfs-prune-snapshots/default.nix4
-rw-r--r--pkgs/tools/backup/zfs-replicate/default.nix12
-rw-r--r--pkgs/tools/backup/zfsbackup/default.nix6
-rw-r--r--pkgs/tools/backup/zfsbackup/deps.nix1171
-rw-r--r--pkgs/tools/backup/zfsnap/default.nix4
-rw-r--r--pkgs/tools/backup/znapzend/default.nix35
-rw-r--r--pkgs/tools/backup/zrepl/default.nix42
-rw-r--r--pkgs/tools/bluetooth/blueberry/default.nix16
-rw-r--r--pkgs/tools/bluetooth/blueman/default.nix28
-rw-r--r--pkgs/tools/bluetooth/bluez-alsa/default.nix14
-rw-r--r--pkgs/tools/bluetooth/bluez-tools/default.nix8
-rw-r--r--pkgs/tools/bluetooth/obex-data-server/default.nix6
-rw-r--r--pkgs/tools/bluetooth/obexd/default.nix6
-rw-r--r--pkgs/tools/bluetooth/obexfs/default.nix6
-rw-r--r--pkgs/tools/bluetooth/obexftp/default.nix10
-rw-r--r--pkgs/tools/bluetooth/openobex/default.nix10
-rw-r--r--pkgs/tools/bootloaders/refind/default.nix16
-rw-r--r--pkgs/tools/cd-dvd/bashburn/default.nix8
-rw-r--r--pkgs/tools/cd-dvd/bchunk/default.nix6
-rw-r--r--pkgs/tools/cd-dvd/bootiso/default.nix47
-rw-r--r--pkgs/tools/cd-dvd/brasero/default.nix8
-rw-r--r--pkgs/tools/cd-dvd/brasero/wrapper.nix2
-rw-r--r--pkgs/tools/cd-dvd/ccd2iso/default.nix4
-rw-r--r--pkgs/tools/cd-dvd/cdi2iso/default.nix14
-rw-r--r--pkgs/tools/cd-dvd/cdimgtools/default.nix4
-rw-r--r--pkgs/tools/cd-dvd/cdrdao/default.nix6
-rw-r--r--pkgs/tools/cd-dvd/cdrkit/default.nix11
-rw-r--r--pkgs/tools/cd-dvd/cdrtools/default.nix4
-rw-r--r--pkgs/tools/cd-dvd/cue2pops/default.nix12
-rw-r--r--pkgs/tools/cd-dvd/cuetools/default.nix4
-rw-r--r--pkgs/tools/cd-dvd/dvd+rw-tools/default.nix4
-rw-r--r--pkgs/tools/cd-dvd/dvd-vr/default.nix4
-rw-r--r--pkgs/tools/cd-dvd/dvdisaster/default.nix10
-rw-r--r--pkgs/tools/cd-dvd/ecm-tools/default.nix4
-rw-r--r--pkgs/tools/cd-dvd/isolyzer/default.nix4
-rw-r--r--pkgs/tools/cd-dvd/isomd5sum/default.nix8
-rw-r--r--pkgs/tools/cd-dvd/lsdvd/default.nix13
-rw-r--r--pkgs/tools/cd-dvd/mdf2iso/default.nix4
-rw-r--r--pkgs/tools/cd-dvd/mkcue/default.nix4
-rw-r--r--pkgs/tools/cd-dvd/nrg2iso/default.nix4
-rw-r--r--pkgs/tools/cd-dvd/sacd/default.nix4
-rw-r--r--pkgs/tools/cd-dvd/srt-to-vtt-cl/default.nix4
-rw-r--r--pkgs/tools/cd-dvd/uif2iso/default.nix9
-rw-r--r--pkgs/tools/cd-dvd/unetbootin/default.nix12
-rw-r--r--pkgs/tools/cd-dvd/vobcopy/default.nix8
-rw-r--r--pkgs/tools/cd-dvd/vobsub2srt/default.nix12
-rw-r--r--pkgs/tools/cd-dvd/xorriso/default.nix6
-rw-r--r--pkgs/tools/compression/advancecomp/default.nix6
-rw-r--r--pkgs/tools/compression/brotli/default.nix43
-rw-r--r--pkgs/tools/compression/bsc/default.nix21
-rw-r--r--pkgs/tools/compression/bsdiff/default.nix14
-rw-r--r--pkgs/tools/compression/bzip2/1_1.nix43
-rw-r--r--pkgs/tools/compression/bzip2/default.nix16
-rw-r--r--pkgs/tools/compression/dejsonlz4/default.nix50
-rw-r--r--pkgs/tools/compression/dtrx/default.nix17
-rw-r--r--pkgs/tools/compression/flips/default.nix31
-rw-r--r--pkgs/tools/compression/flips/use-system-libdivsufsort.patch15
-rw-r--r--pkgs/tools/compression/gzip/default.nix6
-rw-r--r--pkgs/tools/compression/gzrt/default.nix14
-rw-r--r--pkgs/tools/compression/hacpack/default.nix30
-rw-r--r--pkgs/tools/compression/hactool/default.nix6
-rw-r--r--pkgs/tools/compression/imagelol/default.nix29
-rw-r--r--pkgs/tools/compression/kzipmix/default.nix21
-rw-r--r--pkgs/tools/compression/lbzip2/default.nix9
-rw-r--r--pkgs/tools/compression/lhasa/default.nix19
-rw-r--r--pkgs/tools/compression/lrzip/default.nix22
-rw-r--r--pkgs/tools/compression/lz4/default.nix30
-rw-r--r--pkgs/tools/compression/lzbench/default.nix8
-rw-r--r--pkgs/tools/compression/lzfse/default.nix4
-rw-r--r--pkgs/tools/compression/lzham/default.nix8
-rw-r--r--pkgs/tools/compression/lzip/default.nix12
-rw-r--r--pkgs/tools/compression/lzop/default.nix11
-rw-r--r--pkgs/tools/compression/mozlz4a/default.nix9
-rw-r--r--pkgs/tools/compression/ncompress/default.nix15
-rw-r--r--pkgs/tools/compression/ncompress/makefile.patch31
-rw-r--r--pkgs/tools/compression/nx2elf/default.nix37
-rw-r--r--pkgs/tools/compression/pbzip2/default.nix6
-rw-r--r--pkgs/tools/compression/pbzx/default.nix8
-rw-r--r--pkgs/tools/compression/pigz/default.nix34
-rw-r--r--pkgs/tools/compression/pixz/default.nix50
-rw-r--r--pkgs/tools/compression/pxz/_SC_ARG_MAX.patch36
-rw-r--r--pkgs/tools/compression/pxz/default.nix38
-rw-r--r--pkgs/tools/compression/rzip/default.nix17
-rw-r--r--pkgs/tools/compression/upx/default.nix4
-rw-r--r--pkgs/tools/compression/xar/0001-Add-useless-descriptions-to-AC_DEFINE.patch95
-rw-r--r--pkgs/tools/compression/xar/0002-Use-pkg-config-for-libxml2.patch89
-rw-r--r--pkgs/tools/compression/xar/default.nix20
-rw-r--r--pkgs/tools/compression/xdelta/default.nix6
-rw-r--r--pkgs/tools/compression/xdelta/unstable.nix6
-rw-r--r--pkgs/tools/compression/xz/default.nix10
-rw-r--r--pkgs/tools/compression/zdelta/builder.sh8
-rw-r--r--pkgs/tools/compression/zdelta/default.nix24
-rw-r--r--pkgs/tools/compression/zopfli/default.nix6
-rw-r--r--pkgs/tools/compression/zstd/default.nix56
-rw-r--r--pkgs/tools/compression/zstd/mcfgthreads-no-pthread.patch13
-rw-r--r--pkgs/tools/compression/zstd/playtests-darwin.patch23
-rw-r--r--pkgs/tools/compression/zsync/default.nix15
-rw-r--r--pkgs/tools/filesystems/9pfs/default.nix6
-rw-r--r--pkgs/tools/filesystems/9pfs/fix-darwin-build.patch47
-rw-r--r--pkgs/tools/filesystems/aefs/default.nix23
-rw-r--r--pkgs/tools/filesystems/afpfs-ng/default.nix4
-rw-r--r--pkgs/tools/filesystems/android-file-transfer/darwin-dont-vendor-dependencies.patch21
-rw-r--r--pkgs/tools/filesystems/android-file-transfer/default.nix36
-rw-r--r--pkgs/tools/filesystems/apfs-fuse/default.nix16
-rw-r--r--pkgs/tools/filesystems/apfsprogs/default.nix38
-rw-r--r--pkgs/tools/filesystems/archivemount/default.nix8
-rw-r--r--pkgs/tools/filesystems/avfs/default.nix12
-rw-r--r--pkgs/tools/filesystems/bashmount/default.nix8
-rw-r--r--pkgs/tools/filesystems/bcache-tools/default.nix10
-rw-r--r--pkgs/tools/filesystems/bcachefs-tools/default.nix73
-rw-r--r--pkgs/tools/filesystems/bees/default.nix45
-rw-r--r--pkgs/tools/filesystems/bindfs/default.nix16
-rw-r--r--pkgs/tools/filesystems/blobfuse/default.nix33
-rw-r--r--pkgs/tools/filesystems/blobfuse/install-adls.patch14
-rw-r--r--pkgs/tools/filesystems/bonnie/default.nix6
-rw-r--r--pkgs/tools/filesystems/boxfs/default.nix13
-rw-r--r--pkgs/tools/filesystems/btrfs-heatmap/default.nix20
-rw-r--r--pkgs/tools/filesystems/btrfs-progs/default.nix14
-rw-r--r--pkgs/tools/filesystems/catcli/default.nix12
-rw-r--r--pkgs/tools/filesystems/ceph-csi/default.nix33
-rw-r--r--pkgs/tools/filesystems/ceph/default.nix104
-rw-r--r--pkgs/tools/filesystems/chunkfs/default.nix6
-rw-r--r--pkgs/tools/filesystems/ciopfs/default.nix8
-rw-r--r--pkgs/tools/filesystems/convoy/default.nix6
-rw-r--r--pkgs/tools/filesystems/cpcfs/default.nix10
-rw-r--r--pkgs/tools/filesystems/cryfs/default.nix24
-rw-r--r--pkgs/tools/filesystems/cryfs/use-macfuse.patch207
-rw-r--r--pkgs/tools/filesystems/curlftpfs/default.nix39
-rw-r--r--pkgs/tools/filesystems/curlftpfs/fix-rpl_malloc.patch13
-rw-r--r--pkgs/tools/filesystems/darling-dmg/default.nix24
-rw-r--r--pkgs/tools/filesystems/davfs2/0002-Make-sure-that-the-setuid-wrapped-umount-is-invoked.patch42
-rw-r--r--pkgs/tools/filesystems/davfs2/default.nix28
-rw-r--r--pkgs/tools/filesystems/dduper/default.nix50
-rw-r--r--pkgs/tools/filesystems/dislocker/default.nix27
-rw-r--r--pkgs/tools/filesystems/disorderfs/default.nix10
-rw-r--r--pkgs/tools/filesystems/djmount/default.nix10
-rw-r--r--pkgs/tools/filesystems/dosfstools/default.nix10
-rw-r--r--pkgs/tools/filesystems/duff/default.nix4
-rw-r--r--pkgs/tools/filesystems/duperemove/default.nix12
-rw-r--r--pkgs/tools/filesystems/e2fsprogs/default.nix19
-rw-r--r--pkgs/tools/filesystems/e2tools/default.nix22
-rw-r--r--pkgs/tools/filesystems/encfs/default.nix14
-rw-r--r--pkgs/tools/filesystems/exfat/default.nix8
-rw-r--r--pkgs/tools/filesystems/exfatprogs/default.nix23
-rw-r--r--pkgs/tools/filesystems/ext4magic/default.nix6
-rw-r--r--pkgs/tools/filesystems/extundelete/default.nix4
-rw-r--r--pkgs/tools/filesystems/f2fs-tools/default.nix10
-rw-r--r--pkgs/tools/filesystems/f3/default.nix57
-rw-r--r--pkgs/tools/filesystems/fatresize/default.nix38
-rw-r--r--pkgs/tools/filesystems/fatresize/fatresize_parted_nix.patch74
-rw-r--r--pkgs/tools/filesystems/fatsort/default.nix5
-rw-r--r--pkgs/tools/filesystems/file-rename/default.nix12
-rw-r--r--pkgs/tools/filesystems/fsfs/default.nix4
-rw-r--r--pkgs/tools/filesystems/fuse-7z-ng/default.nix11
-rw-r--r--pkgs/tools/filesystems/fuse-overlayfs/default.nix8
-rw-r--r--pkgs/tools/filesystems/fuseiso/default.nix6
-rw-r--r--pkgs/tools/filesystems/fwanalyzer/default.nix39
-rw-r--r--pkgs/tools/filesystems/gcsfuse/default.nix4
-rw-r--r--pkgs/tools/filesystems/genext2fs/default.nix6
-rw-r--r--pkgs/tools/filesystems/genimage/default.nix6
-rw-r--r--pkgs/tools/filesystems/genromfs/default.nix4
-rw-r--r--pkgs/tools/filesystems/gitfs/default.nix16
-rw-r--r--pkgs/tools/filesystems/glusterfs/default.nix81
-rw-r--r--pkgs/tools/filesystems/glusterfs/glusterfs-fix-bug-1489610-glusterfind-var-data-under-prefix.patch27
-rw-r--r--pkgs/tools/filesystems/go-mtpfs/default.nix4
-rw-r--r--pkgs/tools/filesystems/gocryptfs/default.nix56
-rw-r--r--pkgs/tools/filesystems/gocryptfs/deps.nix75
-rw-r--r--pkgs/tools/filesystems/goofys/default.nix34
-rw-r--r--pkgs/tools/filesystems/gpart/default.nix4
-rw-r--r--pkgs/tools/filesystems/grive2/default.nix6
-rw-r--r--pkgs/tools/filesystems/hfsprogs/default.nix10
-rw-r--r--pkgs/tools/filesystems/httpfs/default.nix10
-rw-r--r--pkgs/tools/filesystems/hubicfuse/default.nix17
-rw-r--r--pkgs/tools/filesystems/idsk/default.nix12
-rw-r--r--pkgs/tools/filesystems/ifuse/default.nix14
-rw-r--r--pkgs/tools/filesystems/irods/common.nix19
-rw-r--r--pkgs/tools/filesystems/irods/default.nix16
-rw-r--r--pkgs/tools/filesystems/jfsutils/default.nix4
-rw-r--r--pkgs/tools/filesystems/jmtpfs/default.nix23
-rw-r--r--pkgs/tools/filesystems/lizardfs/default.nix41
-rw-r--r--pkgs/tools/filesystems/mergerfs/default.nix19
-rw-r--r--pkgs/tools/filesystems/mergerfs/tools.nix6
-rw-r--r--pkgs/tools/filesystems/mhddfs/default.nix8
-rw-r--r--pkgs/tools/filesystems/mkspiffs/default.nix4
-rw-r--r--pkgs/tools/filesystems/moosefs/default.nix34
-rw-r--r--pkgs/tools/filesystems/mp3fs/default.nix8
-rw-r--r--pkgs/tools/filesystems/mtdutils/default.nix23
-rw-r--r--pkgs/tools/filesystems/mtools/default.nix15
-rw-r--r--pkgs/tools/filesystems/mtpfs/default.nix6
-rw-r--r--pkgs/tools/filesystems/netatalk/default.nix14
-rw-r--r--pkgs/tools/filesystems/nilfs-utils/default.nix6
-rw-r--r--pkgs/tools/filesystems/nixpart/0.4/blivet.nix14
-rw-r--r--pkgs/tools/filesystems/nixpart/0.4/cryptsetup.nix16
-rw-r--r--pkgs/tools/filesystems/nixpart/0.4/default.nix32
-rw-r--r--pkgs/tools/filesystems/nixpart/0.4/dmraid.nix8
-rw-r--r--pkgs/tools/filesystems/nixpart/0.4/lvm2.nix12
-rw-r--r--pkgs/tools/filesystems/nixpart/0.4/multipath-tools.nix10
-rw-r--r--pkgs/tools/filesystems/nixpart/0.4/parted.nix24
-rw-r--r--pkgs/tools/filesystems/nixpart/0.4/pyblock.nix6
-rw-r--r--pkgs/tools/filesystems/nixpart/0.4/pykickstart.nix6
-rw-r--r--pkgs/tools/filesystems/nixpart/0.4/pyparted.nix12
-rw-r--r--pkgs/tools/filesystems/nixpart/default.nix8
-rw-r--r--pkgs/tools/filesystems/ntfs-3g/default.nix24
-rw-r--r--pkgs/tools/filesystems/orangefs/default.nix10
-rw-r--r--pkgs/tools/filesystems/rar2fs/default.nix8
-rw-r--r--pkgs/tools/filesystems/rdfind/default.nix6
-rw-r--r--pkgs/tools/filesystems/reiser4progs/default.nix9
-rw-r--r--pkgs/tools/filesystems/reiserfsprogs/default.nix9
-rw-r--r--pkgs/tools/filesystems/rmfuse/default.nix26
-rw-r--r--pkgs/tools/filesystems/rmfuse/poetry-git-overlay.nix14
-rw-r--r--pkgs/tools/filesystems/rmfuse/poetry.lock548
-rw-r--r--pkgs/tools/filesystems/rmfuse/pyproject.toml15
-rwxr-xr-xpkgs/tools/filesystems/rmfuse/update5
-rw-r--r--pkgs/tools/filesystems/rmount/default.nix8
-rw-r--r--pkgs/tools/filesystems/romdirfs/default.nix10
-rw-r--r--pkgs/tools/filesystems/s3backer/default.nix20
-rw-r--r--pkgs/tools/filesystems/s3fs/default.nix14
-rw-r--r--pkgs/tools/filesystems/sandboxfs/Cargo.lock.patch640
-rw-r--r--pkgs/tools/filesystems/sandboxfs/default.nix37
-rw-r--r--pkgs/tools/filesystems/sasquatch/default.nix50
-rw-r--r--pkgs/tools/filesystems/securefs/add-macfuse-support.patch188
-rw-r--r--pkgs/tools/filesystems/securefs/default.nix19
-rw-r--r--pkgs/tools/filesystems/sftpman/default.nix25
-rw-r--r--pkgs/tools/filesystems/simg2img/default.nix4
-rw-r--r--pkgs/tools/filesystems/smbnetfs/default.nix15
-rw-r--r--pkgs/tools/filesystems/snapraid/default.nix8
-rw-r--r--pkgs/tools/filesystems/squashfs-tools-ng/default.nix27
-rw-r--r--pkgs/tools/filesystems/squashfs/4k-align.patch62
-rw-r--r--pkgs/tools/filesystems/squashfs/default.nix50
-rw-r--r--pkgs/tools/filesystems/squashfuse/default.nix28
-rw-r--r--pkgs/tools/filesystems/sshfs-fuse/common.nix61
-rw-r--r--pkgs/tools/filesystems/sshfs-fuse/default.nix76
-rw-r--r--pkgs/tools/filesystems/sshfs-fuse/fix-fuse-darwin-h.patch14
-rw-r--r--pkgs/tools/filesystems/supertag/default.nix41
-rw-r--r--pkgs/tools/filesystems/svnfs/default.nix28
-rw-r--r--pkgs/tools/filesystems/tmsu/default.nix14
-rw-r--r--pkgs/tools/filesystems/tmsu/deps.nix4
-rw-r--r--pkgs/tools/filesystems/u3-tool/default.nix4
-rw-r--r--pkgs/tools/filesystems/ubidump/default.nix40
-rw-r--r--pkgs/tools/filesystems/udftools/default.nix4
-rw-r--r--pkgs/tools/filesystems/unionfs-fuse/default.nix30
-rw-r--r--pkgs/tools/filesystems/vmfs-tools/default.nix8
-rw-r--r--pkgs/tools/filesystems/wdfs/default.nix25
-rw-r--r--pkgs/tools/filesystems/wiimms-iso-tools/default.nix4
-rw-r--r--pkgs/tools/filesystems/xfsprogs/default.nix48
-rw-r--r--pkgs/tools/filesystems/xtreemfs/default.nix3
-rw-r--r--pkgs/tools/filesystems/yandex-disk/default.nix17
-rw-r--r--pkgs/tools/filesystems/zerofree/default.nix23
-rw-r--r--pkgs/tools/filesystems/zfstools/default.nix7
-rw-r--r--pkgs/tools/filesystems/zkfuse/default.nix28
-rw-r--r--pkgs/tools/games/ajour/default.nix81
-rw-r--r--pkgs/tools/games/gamemode/default.nix104
-rw-r--r--pkgs/tools/games/gamemode/preload-nix-workaround.patch12
-rw-r--r--pkgs/tools/games/joystickwake/default.nix26
-rw-r--r--pkgs/tools/games/minecraft/amidst/default.nix34
-rw-r--r--pkgs/tools/games/minecraft/fabric-installer/default.nix35
-rw-r--r--pkgs/tools/games/minecraft/optifine/default.nix39
-rw-r--r--pkgs/tools/games/weidu/default.nix65
-rw-r--r--pkgs/tools/graphics/adriconf/default.nix41
-rw-r--r--pkgs/tools/graphics/agi/default.nix69
-rw-r--r--pkgs/tools/graphics/amber/default.nix95
-rw-r--r--pkgs/tools/graphics/appleseed/default.nix14
-rw-r--r--pkgs/tools/graphics/argyllcms/default.nix10
-rw-r--r--pkgs/tools/graphics/astc-encoder/default.nix71
-rw-r--r--pkgs/tools/graphics/asymptote/default.nix28
-rw-r--r--pkgs/tools/graphics/asymptote/default.upstream4
-rw-r--r--pkgs/tools/graphics/barcode/default.nix4
-rw-r--r--pkgs/tools/graphics/blockhash/default.nix8
-rw-r--r--pkgs/tools/graphics/blur-effect/default.nix6
-rw-r--r--pkgs/tools/graphics/briss/default.nix17
-rw-r--r--pkgs/tools/graphics/cfdg/default.nix6
-rw-r--r--pkgs/tools/graphics/cfdg/src-for-default.nix4
-rw-r--r--pkgs/tools/graphics/cfdg/src-info-for-default.nix2
-rw-r--r--pkgs/tools/graphics/convchain/default.nix11
-rw-r--r--pkgs/tools/graphics/cuneiform/default.nix6
-rw-r--r--pkgs/tools/graphics/dcraw/default.nix15
-rw-r--r--pkgs/tools/graphics/diagrams-builder/default.nix14
-rw-r--r--pkgs/tools/graphics/directx-shader-compiler/default.nix50
-rw-r--r--pkgs/tools/graphics/ditaa/default.nix14
-rw-r--r--pkgs/tools/graphics/dmtx-utils/default.nix55
-rw-r--r--pkgs/tools/graphics/dmtx-utils/default.upstream4
-rw-r--r--pkgs/tools/graphics/dpic/default.nix8
-rw-r--r--pkgs/tools/graphics/editres/default.nix6
-rw-r--r--pkgs/tools/graphics/enblend-enfuse/default.nix8
-rw-r--r--pkgs/tools/graphics/eplot/default.nix15
-rw-r--r--pkgs/tools/graphics/epstool/default.nix12
-rw-r--r--pkgs/tools/graphics/escrotum/default.nix6
-rw-r--r--pkgs/tools/graphics/exif/default.nix19
-rw-r--r--pkgs/tools/graphics/exifprobe/default.nix31
-rw-r--r--pkgs/tools/graphics/exiftags/default.nix8
-rw-r--r--pkgs/tools/graphics/facedetect/default.nix6
-rw-r--r--pkgs/tools/graphics/fbv/default.nix23
-rw-r--r--pkgs/tools/graphics/feedgnuplot/default.nix15
-rw-r--r--pkgs/tools/graphics/fgallery/default.nix9
-rw-r--r--pkgs/tools/graphics/fim/default.nix16
-rw-r--r--pkgs/tools/graphics/flam3/default.nix8
-rw-r--r--pkgs/tools/graphics/ggobi/default.nix6
-rw-r--r--pkgs/tools/graphics/gifsicle/default.nix15
-rw-r--r--pkgs/tools/graphics/gifski/default.nix12
-rw-r--r--pkgs/tools/graphics/glee/default.nix8
-rw-r--r--pkgs/tools/graphics/glmark2/default.nix52
-rw-r--r--pkgs/tools/graphics/glxinfo/default.nix4
-rw-r--r--pkgs/tools/graphics/gmic-qt/default.nix6
-rw-r--r--pkgs/tools/graphics/gmic/default.nix12
-rw-r--r--pkgs/tools/graphics/gnuplot/default.nix8
-rw-r--r--pkgs/tools/graphics/goverlay/default.nix108
-rw-r--r--pkgs/tools/graphics/goverlay/find-xdg-data-files.patch40
-rw-r--r--pkgs/tools/graphics/graph-cli/default.nix31
-rw-r--r--pkgs/tools/graphics/graph-easy/default.nix4
-rw-r--r--pkgs/tools/graphics/graphviz/base.nix31
-rw-r--r--pkgs/tools/graphics/graphviz/default.nix6
-rw-r--r--pkgs/tools/graphics/grim/default.nix10
-rw-r--r--pkgs/tools/graphics/gromit-mpx/default.nix11
-rw-r--r--pkgs/tools/graphics/guff/default.nix4
-rw-r--r--pkgs/tools/graphics/ibniz/default.nix4
-rw-r--r--pkgs/tools/graphics/icoutils/default.nix9
-rw-r--r--pkgs/tools/graphics/imageworsener/default.nix4
-rw-r--r--pkgs/tools/graphics/imgur-screenshot/default.nix12
-rw-r--r--pkgs/tools/graphics/imgurbash2/default.nix8
-rw-r--r--pkgs/tools/graphics/jbig2enc/default.nix6
-rw-r--r--pkgs/tools/graphics/jhead/default.nix27
-rw-r--r--pkgs/tools/graphics/kst/default.nix32
-rw-r--r--pkgs/tools/graphics/ldgallery/compiler/default.nix37
-rwxr-xr-xpkgs/tools/graphics/ldgallery/compiler/generate.sh19
-rw-r--r--pkgs/tools/graphics/ldgallery/default.nix53
-rw-r--r--pkgs/tools/graphics/ldgallery/viewer/default.nix54
-rwxr-xr-xpkgs/tools/graphics/ldgallery/viewer/generate.sh30
-rw-r--r--pkgs/tools/graphics/ldgallery/viewer/node-composition.nix17
-rw-r--r--pkgs/tools/graphics/ldgallery/viewer/node-packages.nix13281
-rw-r--r--pkgs/tools/graphics/leela/default.nix10
-rw-r--r--pkgs/tools/graphics/lepton/default.nix6
-rw-r--r--pkgs/tools/graphics/logstalgia/default.nix6
-rw-r--r--pkgs/tools/graphics/lprof/default.nix37
-rw-r--r--pkgs/tools/graphics/lprof/keep-environment.patch16
-rw-r--r--pkgs/tools/graphics/lprof/lcms-1.17.patch13
-rw-r--r--pkgs/tools/graphics/lsix/default.nix36
-rw-r--r--pkgs/tools/graphics/luxcorerender/default.nix97
-rw-r--r--pkgs/tools/graphics/maim/default.nix21
-rw-r--r--pkgs/tools/graphics/mangohud/default.nix149
-rw-r--r--pkgs/tools/graphics/mangohud/hardcode-dependencies.patch57
-rw-r--r--pkgs/tools/graphics/mangohud/opengl32-nix-workaround.patch12
-rw-r--r--pkgs/tools/graphics/mesa-demos/default.nix5
-rw-r--r--pkgs/tools/graphics/metapixel/default.nix33
-rw-r--r--pkgs/tools/graphics/mscgen/default.nix15
-rw-r--r--pkgs/tools/graphics/netpbm/default.nix52
-rw-r--r--pkgs/tools/graphics/nifskope/default.nix6
-rw-r--r--pkgs/tools/graphics/nip2/default.nix10
-rw-r--r--pkgs/tools/graphics/optar/default.nix8
-rw-r--r--pkgs/tools/graphics/optipng/default.nix9
-rw-r--r--pkgs/tools/graphics/oxipng/default.nix19
-rw-r--r--pkgs/tools/graphics/pdf2svg/default.nix6
-rw-r--r--pkgs/tools/graphics/pdfread/default.nix50
-rw-r--r--pkgs/tools/graphics/pdfredacttools/default.nix8
-rw-r--r--pkgs/tools/graphics/pdftag/default.nix6
-rw-r--r--pkgs/tools/graphics/perceptualdiff/default.nix6
-rw-r--r--pkgs/tools/graphics/pfstools/default.nix22
-rw-r--r--pkgs/tools/graphics/pgf/default.nix16
-rw-r--r--pkgs/tools/graphics/piglit/default.nix77
-rw-r--r--pkgs/tools/graphics/pikchr/default.nix38
-rw-r--r--pkgs/tools/graphics/ploticus/builder.sh33
-rw-r--r--pkgs/tools/graphics/ploticus/default.nix70
-rw-r--r--pkgs/tools/graphics/ploticus/set-prefabs-dir.patch11
-rw-r--r--pkgs/tools/graphics/ploticus/use-gd-package.patch34
-rw-r--r--pkgs/tools/graphics/plotutils/default.nix8
-rw-r--r--pkgs/tools/graphics/pngcheck/default.nix10
-rw-r--r--pkgs/tools/graphics/pngcrush/default.nix8
-rw-r--r--pkgs/tools/graphics/pngnq/default.nix6
-rw-r--r--pkgs/tools/graphics/pngout/default.nix8
-rw-r--r--pkgs/tools/graphics/pngquant/default.nix17
-rw-r--r--pkgs/tools/graphics/pngtoico/default.nix6
-rw-r--r--pkgs/tools/graphics/povray/default.nix4
-rw-r--r--pkgs/tools/graphics/pstoedit/default.nix6
-rw-r--r--pkgs/tools/graphics/puppeteer-cli/default.nix21
-rw-r--r--pkgs/tools/graphics/puppeteer-cli/package.json18
-rw-r--r--pkgs/tools/graphics/puppeteer-cli/yarn.lock490
-rw-r--r--pkgs/tools/graphics/puppeteer-cli/yarn.nix605
-rw-r--r--pkgs/tools/graphics/qrcode/default.nix10
-rw-r--r--pkgs/tools/graphics/quirc/default.nix60
-rw-r--r--pkgs/tools/graphics/resvg/default.nix27
-rw-r--r--pkgs/tools/graphics/rocket/default.nix4
-rw-r--r--pkgs/tools/graphics/s2png/default.nix10
-rw-r--r--pkgs/tools/graphics/scanbd/default.nix12
-rw-r--r--pkgs/tools/graphics/scrot/default.nix12
-rw-r--r--pkgs/tools/graphics/shotgun/default.nix4
-rw-r--r--pkgs/tools/graphics/snapdragon-profiler/default.nix91
-rw-r--r--pkgs/tools/graphics/sng/default.nix4
-rw-r--r--pkgs/tools/graphics/spirv-cross/default.nix11
-rw-r--r--pkgs/tools/graphics/structure-synth/default.nix8
-rw-r--r--pkgs/tools/graphics/svgbob/default.nix20
-rw-r--r--pkgs/tools/graphics/svgcleaner/default.nix6
-rw-r--r--pkgs/tools/graphics/syntex/default.nix11
-rw-r--r--pkgs/tools/graphics/timg/default.nix33
-rw-r--r--pkgs/tools/graphics/transfig/default.nix4
-rw-r--r--pkgs/tools/graphics/twilight/default.nix12
-rw-r--r--pkgs/tools/graphics/unpaper/default.nix8
-rw-r--r--pkgs/tools/graphics/vips/default.nix17
-rw-r--r--pkgs/tools/graphics/viu/default.nix9
-rw-r--r--pkgs/tools/graphics/vkBasalt/default.nix42
-rw-r--r--pkgs/tools/graphics/vulkan-extension-layer/default.nix39
-rw-r--r--pkgs/tools/graphics/vulkan-tools-lunarg/default.nix85
-rw-r--r--pkgs/tools/graphics/vulkan-tools/default.nix35
-rw-r--r--pkgs/tools/graphics/waifu2x-converter-cpp/default.nix22
-rw-r--r--pkgs/tools/graphics/wavefunctioncollapse/default.nix11
-rw-r--r--pkgs/tools/graphics/wdisplays/default.nix22
-rw-r--r--pkgs/tools/graphics/welkin/default.nix11
-rw-r--r--pkgs/tools/graphics/xcftools/default.nix6
-rw-r--r--pkgs/tools/graphics/xcolor/default.nix34
-rw-r--r--pkgs/tools/graphics/xcur2png/default.nix6
-rw-r--r--pkgs/tools/graphics/yafaray-core/default.nix15
-rw-r--r--pkgs/tools/graphics/yaxg/default.nix10
-rw-r--r--pkgs/tools/graphics/zbar/default.nix8
-rw-r--r--pkgs/tools/graphics/zxing/default.nix11
-rw-r--r--pkgs/tools/inputmethods/anthy/default.nix6
-rw-r--r--pkgs/tools/inputmethods/evdevremapkeys/default.nix18
-rw-r--r--pkgs/tools/inputmethods/evscript/default.nix23
-rw-r--r--pkgs/tools/inputmethods/fcitx-engines/fcitx-anthy/default.nix12
-rw-r--r--pkgs/tools/inputmethods/fcitx-engines/fcitx-chewing/default.nix8
-rw-r--r--pkgs/tools/inputmethods/fcitx-engines/fcitx-cloudpinyin/default.nix8
-rw-r--r--pkgs/tools/inputmethods/fcitx-engines/fcitx-hangul/default.nix8
-rw-r--r--pkgs/tools/inputmethods/fcitx-engines/fcitx-libpinyin/default.nix10
-rw-r--r--pkgs/tools/inputmethods/fcitx-engines/fcitx-m17n/default.nix8
-rw-r--r--pkgs/tools/inputmethods/fcitx-engines/fcitx-mozc/default.nix8
-rw-r--r--pkgs/tools/inputmethods/fcitx-engines/fcitx-rime/default.nix9
-rw-r--r--pkgs/tools/inputmethods/fcitx-engines/fcitx-skk/default.nix6
-rw-r--r--pkgs/tools/inputmethods/fcitx-engines/fcitx-table-extra/default.nix7
-rw-r--r--pkgs/tools/inputmethods/fcitx-engines/fcitx-table-other/default.nix7
-rw-r--r--pkgs/tools/inputmethods/fcitx-engines/fcitx-unikey/default.nix10
-rw-r--r--pkgs/tools/inputmethods/fcitx/default.nix4
-rw-r--r--pkgs/tools/inputmethods/fcitx/fcitx-configtool.nix10
-rw-r--r--pkgs/tools/inputmethods/fcitx/fcitx-qt5.nix4
-rw-r--r--pkgs/tools/inputmethods/fcitx/unwrapped.nix15
-rw-r--r--pkgs/tools/inputmethods/fcitx/wrapper.nix2
-rw-r--r--pkgs/tools/inputmethods/fcitx5/default.nix102
-rw-r--r--pkgs/tools/inputmethods/fcitx5/fcitx5-chinese-addons.nix76
-rw-r--r--pkgs/tools/inputmethods/fcitx5/fcitx5-configtool.nix62
-rw-r--r--pkgs/tools/inputmethods/fcitx5/fcitx5-gtk.nix81
-rw-r--r--pkgs/tools/inputmethods/fcitx5/fcitx5-lua.nix40
-rw-r--r--pkgs/tools/inputmethods/fcitx5/fcitx5-m17n.nix46
-rw-r--r--pkgs/tools/inputmethods/fcitx5/fcitx5-mozc.nix106
-rw-r--r--pkgs/tools/inputmethods/fcitx5/fcitx5-qt.nix53
-rw-r--r--pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix46
-rw-r--r--pkgs/tools/inputmethods/fcitx5/fcitx5-table-extra.nix38
-rw-r--r--pkgs/tools/inputmethods/fcitx5/fcitx5-table-other.nix38
-rwxr-xr-xpkgs/tools/inputmethods/fcitx5/update.py28
-rw-r--r--pkgs/tools/inputmethods/fcitx5/with-addons.nix26
-rw-r--r--pkgs/tools/inputmethods/fusuma/default.nix2
-rw-r--r--pkgs/tools/inputmethods/fusuma/gemset.nix2
-rw-r--r--pkgs/tools/inputmethods/gebaar-libinput/default.nix4
-rw-r--r--pkgs/tools/inputmethods/hime/default.nix47
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-anthy/default.nix12
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-bamboo/default.nix55
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix12
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-kkc/default.nix8
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-libpinyin/default.nix14
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-libthai/default.nix24
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-m17n/default.nix12
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix86
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-rime/default.nix44
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-table-chinese/default.nix7
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-table-others/default.nix10
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix16
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix6
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/default.nix8
-rw-r--r--pkgs/tools/inputmethods/ibus/default.nix16
-rw-r--r--pkgs/tools/inputmethods/ibus/ibus-qt.nix10
-rw-r--r--pkgs/tools/inputmethods/ibus/wrapper.nix8
-rw-r--r--pkgs/tools/inputmethods/interception-tools/caps2esc.nix11
-rw-r--r--pkgs/tools/inputmethods/interception-tools/default.nix39
-rw-r--r--pkgs/tools/inputmethods/interception-tools/dual-function-keys.nix34
-rw-r--r--pkgs/tools/inputmethods/interception-tools/fix-udevmon-configuration-job-path.patch32
-rw-r--r--pkgs/tools/inputmethods/keyfuzz/default.nix6
-rw-r--r--pkgs/tools/inputmethods/kime/default.nix113
-rw-r--r--pkgs/tools/inputmethods/libinput-gestures/default.nix2
-rw-r--r--pkgs/tools/inputmethods/libkkc/default.nix8
-rw-r--r--pkgs/tools/inputmethods/lisgd/default.nix49
-rw-r--r--pkgs/tools/inputmethods/m17n-db/default.nix10
-rw-r--r--pkgs/tools/inputmethods/m17n-lib/default.nix8
-rw-r--r--pkgs/tools/inputmethods/m17n-lib/otf.nix8
-rw-r--r--pkgs/tools/inputmethods/nabi/default.nix6
-rw-r--r--pkgs/tools/inputmethods/netevent/default.nix41
-rw-r--r--pkgs/tools/inputmethods/remote-touchpad/default.nix33
-rw-r--r--pkgs/tools/inputmethods/skk/skk-dicts/default.nix35
-rw-r--r--pkgs/tools/inputmethods/skk/skktools/default.nix18
-rw-r--r--pkgs/tools/inputmethods/tegaki-zinnia-japanese/default.nix6
-rw-r--r--pkgs/tools/inputmethods/touchegg/default.nix6
-rw-r--r--pkgs/tools/inputmethods/triggerhappy/default.nix6
-rw-r--r--pkgs/tools/inputmethods/uim/default.nix10
-rw-r--r--pkgs/tools/inputmethods/zinnia/default.nix4
-rw-r--r--pkgs/tools/misc/0x0/default.nix9
-rw-r--r--pkgs/tools/misc/3llo/gemset.nix2
-rw-r--r--pkgs/tools/misc/3mux/default.nix32
-rw-r--r--pkgs/tools/misc/abduco/default.nix20
-rw-r--r--pkgs/tools/misc/adafruit-ampy/default.nix8
-rw-r--r--pkgs/tools/misc/aescrypt/default.nix8
-rw-r--r--pkgs/tools/misc/afetch/default.nix28
-rw-r--r--pkgs/tools/misc/agedu/default.nix16
-rw-r--r--pkgs/tools/misc/alarm-clock-applet/default.nix8
-rw-r--r--pkgs/tools/misc/android-tools/default.nix46
-rw-r--r--pkgs/tools/misc/antimicroX/default.nix8
-rw-r--r--pkgs/tools/misc/anystyle-cli/Gemfile37
-rw-r--r--pkgs/tools/misc/anystyle-cli/Gemfile.lock99
-rw-r--r--pkgs/tools/misc/anystyle-cli/anystyle.gemspec52
-rw-r--r--pkgs/tools/misc/anystyle-cli/default.nix43
-rw-r--r--pkgs/tools/misc/anystyle-cli/gemset.nix1570
-rw-r--r--pkgs/tools/misc/apparix/default.nix8
-rw-r--r--pkgs/tools/misc/apt-offline/default.nix31
-rw-r--r--pkgs/tools/misc/aptly/default.nix10
-rw-r--r--pkgs/tools/misc/archi/default.nix66
-rw-r--r--pkgs/tools/misc/argtable/default.nix41
-rw-r--r--pkgs/tools/misc/arp-scan/default.nix12
-rw-r--r--pkgs/tools/misc/as-tree/cargo-lock.patch13
-rw-r--r--pkgs/tools/misc/as-tree/default.nix27
-rw-r--r--pkgs/tools/misc/asciinema-scenario/default.nix23
-rw-r--r--pkgs/tools/misc/asdf-vm/default.nix85
-rw-r--r--pkgs/tools/misc/aspcud/default.nix11
-rw-r--r--pkgs/tools/misc/atuin/default.nix31
-rw-r--r--pkgs/tools/misc/autojump/default.nix6
-rw-r--r--pkgs/tools/misc/automirror/default.nix4
-rw-r--r--pkgs/tools/misc/autorandr/default.nix114
-rw-r--r--pkgs/tools/misc/autorevision/default.nix8
-rw-r--r--pkgs/tools/misc/aws-mturk-clt/default.nix4
-rw-r--r--pkgs/tools/misc/azure-vhd-utils/default.nix6
-rw-r--r--pkgs/tools/misc/bandwidth/default.nix35
-rw-r--r--pkgs/tools/misc/barman/default.nix29
-rw-r--r--pkgs/tools/misc/bash_unit/default.nix10
-rw-r--r--pkgs/tools/misc/bashcards/default.nix8
-rw-r--r--pkgs/tools/misc/bashplotlib/default.nix4
-rw-r--r--pkgs/tools/misc/bat-extras/default.nix25
-rw-r--r--pkgs/tools/misc/bat/default.nix47
-rw-r--r--pkgs/tools/misc/bbe/default.nix6
-rw-r--r--pkgs/tools/misc/bc/default.nix13
-rw-r--r--pkgs/tools/misc/bcunit/default.nix9
-rw-r--r--pkgs/tools/misc/bdf2psf/default.nix18
-rw-r--r--pkgs/tools/misc/bdf2sfd/default.nix8
-rw-r--r--pkgs/tools/misc/beats/default.nix23
-rw-r--r--pkgs/tools/misc/bepasty/default.nix2
-rw-r--r--pkgs/tools/misc/betterdiscord-installer/default.nix32
-rw-r--r--pkgs/tools/misc/betterdiscordctl/default.nix42
-rw-r--r--pkgs/tools/misc/bfetch/default.nix29
-rw-r--r--pkgs/tools/misc/bfr/default.nix6
-rw-r--r--pkgs/tools/misc/bibtex2html/default.nix6
-rw-r--r--pkgs/tools/misc/bibtool/default.nix4
-rw-r--r--pkgs/tools/misc/bibutils/default.nix24
-rw-r--r--pkgs/tools/misc/birdfont/default.nix19
-rw-r--r--pkgs/tools/misc/birdfont/xmlbird.nix16
-rw-r--r--pkgs/tools/misc/bitwise/default.nix24
-rw-r--r--pkgs/tools/misc/bkyml/default.nix45
-rw-r--r--pkgs/tools/misc/blflash/default.nix22
-rw-r--r--pkgs/tools/misc/blink1-tool/default.nix10
-rw-r--r--pkgs/tools/misc/bmap-tools/default.nix15
-rw-r--r--pkgs/tools/misc/bmon/default.nix15
-rw-r--r--pkgs/tools/misc/bogofilter/default.nix6
-rw-r--r--pkgs/tools/misc/boltbrowser/default.nix25
-rw-r--r--pkgs/tools/misc/bonfire/default.nix6
-rw-r--r--pkgs/tools/misc/bottom-rs/cargo-lock.patch791
-rw-r--r--pkgs/tools/misc/bottom-rs/default.nix23
-rw-r--r--pkgs/tools/misc/brltty/default.nix91
-rw-r--r--pkgs/tools/misc/broadlink-cli/default.nix21
-rw-r--r--pkgs/tools/misc/broot/default.nix42
-rw-r--r--pkgs/tools/misc/bsp-layout/default.nix30
-rw-r--r--pkgs/tools/misc/buildtorrent/default.nix16
-rw-r--r--pkgs/tools/misc/bunnyfetch/default.nix26
-rw-r--r--pkgs/tools/misc/byobu/default.nix65
-rw-r--r--pkgs/tools/misc/calamares/default.nix23
-rw-r--r--pkgs/tools/misc/capture/default.nix8
-rw-r--r--pkgs/tools/misc/castty/default.nix28
-rw-r--r--pkgs/tools/misc/catimg/default.nix8
-rw-r--r--pkgs/tools/misc/ccze/default.nix6
-rw-r--r--pkgs/tools/misc/chafa/default.nix19
-rw-r--r--pkgs/tools/misc/chelf/default.nix4
-rw-r--r--pkgs/tools/misc/chezmoi/default.nix10
-rw-r--r--pkgs/tools/misc/chrome-export/default.nix4
-rw-r--r--pkgs/tools/misc/cht.sh/default.nix18
-rw-r--r--pkgs/tools/misc/cicero-tui/default.nix41
-rw-r--r--pkgs/tools/misc/ckb-next/default.nix16
-rw-r--r--pkgs/tools/misc/ckb-next/install-dirs.patch6
-rw-r--r--pkgs/tools/misc/ckb-next/modprobe.patch10
-rw-r--r--pkgs/tools/misc/clac/default.nix18
-rw-r--r--pkgs/tools/misc/clasp/default.nix12
-rw-r--r--pkgs/tools/misc/claws/default.nix4
-rw-r--r--pkgs/tools/misc/clex/default.nix8
-rw-r--r--pkgs/tools/misc/clickclack/default.nix33
-rw-r--r--pkgs/tools/misc/clipbuzz/default.nix31
-rw-r--r--pkgs/tools/misc/clipnotify/default.nix4
-rw-r--r--pkgs/tools/misc/clipster/default.nix6
-rw-r--r--pkgs/tools/misc/cloc/default.nix19
-rw-r--r--pkgs/tools/misc/cloud-sql-proxy/default.nix4
-rw-r--r--pkgs/tools/misc/cloud-utils/default.nix44
-rw-r--r--pkgs/tools/misc/clpeak/clpeak-clhpp2.diff72
-rw-r--r--pkgs/tools/misc/clpeak/default.nix12
-rw-r--r--pkgs/tools/misc/cod/default.nix26
-rw-r--r--pkgs/tools/misc/code-minimap/default.nix29
-rw-r--r--pkgs/tools/misc/codebraid/default.nix10
-rw-r--r--pkgs/tools/misc/colord-gtk/default.nix8
-rw-r--r--pkgs/tools/misc/colord/default.nix12
-rw-r--r--pkgs/tools/misc/colorpicker/default.nix4
-rw-r--r--pkgs/tools/misc/complete-alias/default.nix43
-rw-r--r--pkgs/tools/misc/contacts/default.nix8
-rw-r--r--pkgs/tools/misc/convbin/default.nix42
-rw-r--r--pkgs/tools/misc/convfont/default.nix29
-rw-r--r--pkgs/tools/misc/convimg/default.nix43
-rw-r--r--pkgs/tools/misc/convmv/default.nix4
-rw-r--r--pkgs/tools/misc/coreboot-utils/default.nix19
-rw-r--r--pkgs/tools/misc/coreutils/avoid-false-positive-in-date-debug-test.patch52
-rw-r--r--pkgs/tools/misc/coreutils/coreutils-8.31-android-cross.patch51
-rw-r--r--pkgs/tools/misc/coreutils/coreutils-8.31-musl-cross.patch1153
-rw-r--r--pkgs/tools/misc/coreutils/default.nix39
-rw-r--r--pkgs/tools/misc/coreutils/fix-gnulib-tests-arm.patch45
-rw-r--r--pkgs/tools/misc/coreutils/sys-getdents-undeclared.patch100
-rw-r--r--pkgs/tools/misc/cowsay/default.nix42
-rw-r--r--pkgs/tools/misc/cp437/default.nix27
-rw-r--r--pkgs/tools/misc/cpufetch/default.nix34
-rw-r--r--pkgs/tools/misc/cpulimit/default.nix8
-rw-r--r--pkgs/tools/misc/cpuminer-multi/default.nix16
-rw-r--r--pkgs/tools/misc/cpuminer/default.nix4
-rw-r--r--pkgs/tools/misc/crex/default.nix4
-rw-r--r--pkgs/tools/misc/crudini/default.nix21
-rw-r--r--pkgs/tools/misc/csv2latex/default.nix4
-rw-r--r--pkgs/tools/misc/cunit/default.nix6
-rw-r--r--pkgs/tools/misc/cutecom/default.nix19
-rw-r--r--pkgs/tools/misc/cyclonedx-python/default.nix47
-rw-r--r--pkgs/tools/misc/czkawka/default.nix45
-rw-r--r--pkgs/tools/misc/dashing/default.nix4
-rw-r--r--pkgs/tools/misc/dasht/default.nix6
-rw-r--r--pkgs/tools/misc/datamash/default.nix4
-rw-r--r--pkgs/tools/misc/dateutils/default.nix8
-rw-r--r--pkgs/tools/misc/dbacl/default.nix6
-rw-r--r--pkgs/tools/misc/dbus-map/default.nix4
-rw-r--r--pkgs/tools/misc/ddate/default.nix25
-rw-r--r--pkgs/tools/misc/ddccontrol/default.nix56
-rw-r--r--pkgs/tools/misc/ddcutil/default.nix15
-rw-r--r--pkgs/tools/misc/ddcutil/nixos-paths.diff30
-rw-r--r--pkgs/tools/misc/debian-devscripts/default.nix9
-rw-r--r--pkgs/tools/misc/debianutils/default.nix9
-rw-r--r--pkgs/tools/misc/debootstrap/default.nix12
-rw-r--r--pkgs/tools/misc/depotdownloader/default.nix49
-rw-r--r--pkgs/tools/misc/depotdownloader/deps.nix88
-rw-r--r--pkgs/tools/misc/desktop-file-utils/default.nix11
-rw-r--r--pkgs/tools/misc/detox/default.nix4
-rw-r--r--pkgs/tools/misc/dgoss/default.nix48
-rw-r--r--pkgs/tools/misc/dialog/default.nix42
-rw-r--r--pkgs/tools/misc/diffoscope/default.nix46
-rw-r--r--pkgs/tools/misc/diffoscope/skip-failing-test.patch12
-rw-r--r--pkgs/tools/misc/digitemp/default.nix53
-rw-r--r--pkgs/tools/misc/dijo/default.nix12
-rw-r--r--pkgs/tools/misc/ding-libs/default.nix8
-rw-r--r--pkgs/tools/misc/direnv/default.nix18
-rw-r--r--pkgs/tools/misc/discocss/default.nix28
-rw-r--r--pkgs/tools/misc/disfetch/default.nix29
-rw-r--r--pkgs/tools/misc/diskonaut/default.nix10
-rw-r--r--pkgs/tools/misc/diskscan/default.nix5
-rw-r--r--pkgs/tools/misc/diskus/default.nix8
-rw-r--r--pkgs/tools/misc/disper/default.nix14
-rw-r--r--pkgs/tools/misc/dmg2img/default.nix8
-rw-r--r--pkgs/tools/misc/docbook2mdoc/default.nix4
-rw-r--r--pkgs/tools/misc/docker-ls/default.nix12
-rw-r--r--pkgs/tools/misc/docker-sync/gemset.nix2
-rw-r--r--pkgs/tools/misc/docui/default.nix4
-rw-r--r--pkgs/tools/misc/doitlive/default.nix4
-rw-r--r--pkgs/tools/misc/dpt-rp1-py/default.nix16
-rw-r--r--pkgs/tools/misc/dtach/default.nix6
-rw-r--r--pkgs/tools/misc/dua/default.nix10
-rw-r--r--pkgs/tools/misc/duc/default.nix12
-rw-r--r--pkgs/tools/misc/duf/default.nix25
-rw-r--r--pkgs/tools/misc/dumptorrent/default.nix6
-rw-r--r--pkgs/tools/misc/dupd/default.nix4
-rw-r--r--pkgs/tools/misc/dust/default.nix15
-rw-r--r--pkgs/tools/misc/dvtm/default.nix2
-rw-r--r--pkgs/tools/misc/dvtm/dvtm.nix8
-rw-r--r--pkgs/tools/misc/dylibbundler/default.nix22
-rw-r--r--pkgs/tools/misc/dynamic-colors/default.nix4
-rw-r--r--pkgs/tools/misc/edid-decode/default.nix15
-rw-r--r--pkgs/tools/misc/edid-generator/default.nix17
-rw-r--r--pkgs/tools/misc/edir/default.nix19
-rw-r--r--pkgs/tools/misc/elfcat/Cargo.lock7
-rw-r--r--pkgs/tools/misc/elfcat/default.nix22
-rw-r--r--pkgs/tools/misc/empty/0.6-Makefile.patch13
-rw-r--r--pkgs/tools/misc/empty/default.nix46
-rw-r--r--pkgs/tools/misc/emv/default.nix8
-rw-r--r--pkgs/tools/misc/ent/default.nix8
-rw-r--r--pkgs/tools/misc/entr/default.nix23
-rw-r--r--pkgs/tools/misc/envchain/default.nix32
-rw-r--r--pkgs/tools/misc/envdir-go/default.nix6
-rw-r--r--pkgs/tools/misc/eot-utilities/default.nix10
-rw-r--r--pkgs/tools/misc/esphome/dashboard.nix27
-rw-r--r--pkgs/tools/misc/esphome/default.nix99
-rw-r--r--pkgs/tools/misc/esphome/fix-src-permissions.patch46
-rw-r--r--pkgs/tools/misc/esptool-ck/default.nix4
-rw-r--r--pkgs/tools/misc/esptool/default.nix28
-rw-r--r--pkgs/tools/misc/etcher/default.nix44
-rw-r--r--pkgs/tools/misc/ethminer/default.nix26
-rw-r--r--pkgs/tools/misc/ethtool/default.nix4
-rw-r--r--pkgs/tools/misc/eva/default.nix14
-rw-r--r--pkgs/tools/misc/exa/default.nix49
-rw-r--r--pkgs/tools/misc/exa/update-cargo-lock.diff13
-rw-r--r--pkgs/tools/misc/execline/default.nix9
-rw-r--r--pkgs/tools/misc/execline/execlineb-wrapper.c5
-rw-r--r--pkgs/tools/misc/expect/default.nix40
-rw-r--r--pkgs/tools/misc/fasd/default.nix6
-rw-r--r--pkgs/tools/misc/fbcat/default.nix33
-rw-r--r--pkgs/tools/misc/fcp/default.nix33
-rw-r--r--pkgs/tools/misc/fd/default.nix10
-rw-r--r--pkgs/tools/misc/fdtools/default.nix6
-rw-r--r--pkgs/tools/misc/fdtools/new-skalibs.patch223
-rw-r--r--pkgs/tools/misc/fdupes/default.nix4
-rw-r--r--pkgs/tools/misc/fend/default.nix28
-rw-r--r--pkgs/tools/misc/fet-sh/default.nix14
-rw-r--r--pkgs/tools/misc/fetchutils/default.nix29
-rw-r--r--pkgs/tools/misc/ffsend/default.nix23
-rw-r--r--pkgs/tools/misc/figlet/default.nix6
-rw-r--r--pkgs/tools/misc/file/default.nix10
-rw-r--r--pkgs/tools/misc/filebench/default.nix4
-rw-r--r--pkgs/tools/misc/fileschanged/default.nix6
-rw-r--r--pkgs/tools/misc/findutils/default.nix13
-rw-r--r--pkgs/tools/misc/findutils/fix-gnulib-tests-arm.patch45
-rw-r--r--pkgs/tools/misc/flameshot/default.nix52
-rw-r--r--pkgs/tools/misc/flashrom/default.nix24
-rw-r--r--pkgs/tools/misc/flexoptix-app/default.nix47
-rw-r--r--pkgs/tools/misc/fltrdr/default.nix7
-rw-r--r--pkgs/tools/misc/fluent-bit/default.nix23
-rw-r--r--pkgs/tools/misc/fluent-bit/fix-luajit-darwin.patch14
-rw-r--r--pkgs/tools/misc/fluentd/gemset.nix2
-rw-r--r--pkgs/tools/misc/foma/default.nix37
-rw-r--r--pkgs/tools/misc/fondu/default.nix6
-rw-r--r--pkgs/tools/misc/fontfor/default.nix41
-rw-r--r--pkgs/tools/misc/fontforge/default.nix38
-rw-r--r--pkgs/tools/misc/fortune/default.nix15
-rw-r--r--pkgs/tools/misc/fpart/default.nix4
-rw-r--r--pkgs/tools/misc/fpp/default.nix6
-rw-r--r--pkgs/tools/misc/freshfetch/Cargo.lock587
-rw-r--r--pkgs/tools/misc/freshfetch/default.nix49
-rw-r--r--pkgs/tools/misc/fsearch/default.nix58
-rw-r--r--pkgs/tools/misc/fselect/default.nix13
-rw-r--r--pkgs/tools/misc/fsmark/default.nix4
-rw-r--r--pkgs/tools/misc/fsmon/default.nix8
-rw-r--r--pkgs/tools/misc/fsql/default.nix5
-rw-r--r--pkgs/tools/misc/fwup/default.nix66
-rw-r--r--pkgs/tools/misc/fwup/fix-testrunner-darwin.patch25
-rw-r--r--pkgs/tools/misc/fx_cast/default.nix115
-rw-r--r--pkgs/tools/misc/fx_cast/node-env.nix567
-rw-r--r--pkgs/tools/misc/fx_cast/node-packages.nix1706
-rw-r--r--pkgs/tools/misc/fx_cast/package-lock.json1327
-rw-r--r--pkgs/tools/misc/fx_cast/package.json41
-rw-r--r--pkgs/tools/misc/fxlinuxprintutil/default.nix2
-rw-r--r--pkgs/tools/misc/fzf/default.nix15
-rw-r--r--pkgs/tools/misc/fzy/default.nix4
-rw-r--r--pkgs/tools/misc/g203-led/default.nix43
-rw-r--r--pkgs/tools/misc/g933-utils/default.nix8
-rw-r--r--pkgs/tools/misc/gammy/default.nix17
-rw-r--r--pkgs/tools/misc/gams/default.nix9
-rw-r--r--pkgs/tools/misc/gawp/default.nix6
-rw-r--r--pkgs/tools/misc/gbdfed/default.nix14
-rw-r--r--pkgs/tools/misc/geekbench/default.nix10
-rw-r--r--pkgs/tools/misc/geteltorito/default.nix4
-rw-r--r--pkgs/tools/misc/getopt/default.nix4
-rw-r--r--pkgs/tools/misc/gh-ost/default.nix40
-rw-r--r--pkgs/tools/misc/gibo/default.nix14
-rw-r--r--pkgs/tools/misc/gif-for-cli/default.nix14
-rw-r--r--pkgs/tools/misc/git-fire/default.nix6
-rw-r--r--pkgs/tools/misc/git-town/default.nix19
-rw-r--r--pkgs/tools/misc/github-backup/default.nix30
-rw-r--r--pkgs/tools/misc/gitlint/default.nix75
-rw-r--r--pkgs/tools/misc/gnokii/default.nix8
-rw-r--r--pkgs/tools/misc/gnuvd/default.nix17
-rw-r--r--pkgs/tools/misc/go.rice/default.nix12
-rw-r--r--pkgs/tools/misc/goaccess/default.nix26
-rw-r--r--pkgs/tools/misc/godu/default.nix24
-rw-r--r--pkgs/tools/misc/godu/go-mod.patch33
-rw-r--r--pkgs/tools/misc/goreleaser/default.nix33
-rw-r--r--pkgs/tools/misc/goss/default.nix34
-rw-r--r--pkgs/tools/misc/gosu/default.nix6
-rw-r--r--pkgs/tools/misc/gotify-cli/default.nix12
-rw-r--r--pkgs/tools/misc/gparted/default.nix21
-rw-r--r--pkgs/tools/misc/gpick/default.nix25
-rw-r--r--pkgs/tools/misc/graylog/default.nix14
-rw-r--r--pkgs/tools/misc/graylog/plugins.nix16
-rw-r--r--pkgs/tools/misc/grc/default.nix29
-rw-r--r--pkgs/tools/misc/grex/default.nix35
-rw-r--r--pkgs/tools/misc/gringo/default.nix18
-rw-r--r--pkgs/tools/misc/grit/default.nix23
-rw-r--r--pkgs/tools/misc/grub/2.0x.nix68
-rw-r--r--pkgs/tools/misc/grub/default.nix10
-rw-r--r--pkgs/tools/misc/grub/pvgrub_image/default.nix6
-rw-r--r--pkgs/tools/misc/grub/trusted.nix6
-rw-r--r--pkgs/tools/misc/grub4dos/default.nix4
-rw-r--r--pkgs/tools/misc/gsmartcontrol/default.nix14
-rw-r--r--pkgs/tools/misc/gti/default.nix10
-rw-r--r--pkgs/tools/misc/gtklp/default.nix52
-rw-r--r--pkgs/tools/misc/gtklp/patches/autoconf.patch23
-rw-r--r--pkgs/tools/misc/gtklp/patches/mdv-fix-str-fmt.patch22
-rw-r--r--pkgs/tools/misc/gwe/default.nix89
-rw-r--r--pkgs/tools/misc/h/default.nix4
-rw-r--r--pkgs/tools/misc/hackertyper/default.nix4
-rw-r--r--pkgs/tools/misc/hacksaw/default.nix25
-rw-r--r--pkgs/tools/misc/hakuneko/default.nix5
-rw-r--r--pkgs/tools/misc/handlr/default.nix35
-rw-r--r--pkgs/tools/misc/hashit/default.nix6
-rw-r--r--pkgs/tools/misc/haste-client/Gemfile (renamed from pkgs/tools/text/kramdown-rfc2629/Gemfile)2
-rw-r--r--pkgs/tools/misc/haste-client/Gemfile.lock19
-rw-r--r--pkgs/tools/misc/haste-client/default.nix19
-rw-r--r--pkgs/tools/misc/haste-client/gemset.nix491
-rw-r--r--pkgs/tools/misc/hdaps-gl/default.nix39
-rw-r--r--pkgs/tools/misc/hddtemp/default.nix36
-rw-r--r--pkgs/tools/misc/hdf4/darwin-aarch64.patch11
-rw-r--r--pkgs/tools/misc/hdf4/default.nix85
-rw-r--r--pkgs/tools/misc/hdf5/1.10.nix57
-rw-r--r--pkgs/tools/misc/hdf5/1_8.nix75
-rw-r--r--pkgs/tools/misc/hdf5/default.nix37
-rw-r--r--pkgs/tools/misc/hdfjava/default.nix27
-rw-r--r--pkgs/tools/misc/hdfview/default.nix59
-rw-r--r--pkgs/tools/misc/hdl-dump/default.nix34
-rw-r--r--pkgs/tools/misc/heatseeker/default.nix6
-rw-r--r--pkgs/tools/misc/hebcal/default.nix8
-rw-r--r--pkgs/tools/misc/heimdall/default.nix16
-rw-r--r--pkgs/tools/misc/hexd/default.nix4
-rw-r--r--pkgs/tools/misc/hexyl/default.nix25
-rw-r--r--pkgs/tools/misc/hhpc/default.nix8
-rw-r--r--pkgs/tools/misc/hid-listen/default.nix4
-rw-r--r--pkgs/tools/misc/hidrd/default.nix23
-rw-r--r--pkgs/tools/misc/homesick/gemset.nix2
-rw-r--r--pkgs/tools/misc/hpcg/default.nix6
-rw-r--r--pkgs/tools/misc/hpl/default.nix4
-rw-r--r--pkgs/tools/misc/html-proofer/Gemfile.lock20
-rw-r--r--pkgs/tools/misc/html-proofer/default.nix6
-rw-r--r--pkgs/tools/misc/html-proofer/gemset.nix46
-rw-r--r--pkgs/tools/misc/hyperfine/default.nix18
-rw-r--r--pkgs/tools/misc/hyperledger-fabric/default.nix4
-rw-r--r--pkgs/tools/misc/i3cat/default.nix4
-rw-r--r--pkgs/tools/misc/i3minator/default.nix12
-rw-r--r--pkgs/tools/misc/i3nator/default.nix22
-rw-r--r--pkgs/tools/misc/ical2org/default.nix6
-rw-r--r--pkgs/tools/misc/ideviceinstaller/default.nix14
-rw-r--r--pkgs/tools/misc/idevicerestore/default.nix19
-rw-r--r--pkgs/tools/misc/idutils/default.nix29
-rw-r--r--pkgs/tools/misc/ili2c/default.nix9
-rw-r--r--pkgs/tools/misc/inav-blackbox-tools/default.nix34
-rw-r--r--pkgs/tools/misc/infracost/default.nix58
-rw-r--r--pkgs/tools/misc/ink/default.nix28
-rw-r--r--pkgs/tools/misc/interactsh/default.nix39
-rw-r--r--pkgs/tools/misc/intermodal/default.nix14
-rw-r--r--pkgs/tools/misc/iotools/default.nix35
-rw-r--r--pkgs/tools/misc/ipad_charge/default.nix4
-rw-r--r--pkgs/tools/misc/ipbt/default.nix8
-rw-r--r--pkgs/tools/misc/ipxe/default.nix30
-rw-r--r--pkgs/tools/misc/ised/default.nix8
-rw-r--r--pkgs/tools/misc/ix/default.nix10
-rw-r--r--pkgs/tools/misc/jdiskreport/default.nix12
-rw-r--r--pkgs/tools/misc/jdupes/default.nix12
-rw-r--r--pkgs/tools/misc/journaldriver/default.nix6
-rw-r--r--pkgs/tools/misc/jstest-gtk/default.nix29
-rw-r--r--pkgs/tools/misc/jugglinglab/default.nix6
-rw-r--r--pkgs/tools/misc/kak-lsp/default.nix12
-rw-r--r--pkgs/tools/misc/kalker/default.nix38
-rw-r--r--pkgs/tools/misc/kargo/default.nix8
-rw-r--r--pkgs/tools/misc/kcollectd/default.nix56
-rw-r--r--pkgs/tools/misc/kdecoration-viewer/default.nix28
-rw-r--r--pkgs/tools/misc/kepubify/default.nix11
-rw-r--r--pkgs/tools/misc/kermit/default.nix9
-rw-r--r--pkgs/tools/misc/keychain/default.nix29
-rw-r--r--pkgs/tools/misc/kisslicer/default.nix8
-rw-r--r--pkgs/tools/misc/kodi-cli/default.nix12
-rw-r--r--pkgs/tools/misc/krapslog/default.nix24
-rw-r--r--pkgs/tools/misc/kt/default.nix4
-rw-r--r--pkgs/tools/misc/latex2html/default.nix8
-rw-r--r--pkgs/tools/misc/lazydocker/default.nix10
-rw-r--r--pkgs/tools/misc/lbdb/default.nix45
-rw-r--r--pkgs/tools/misc/lcdf-typetools/default.nix4
-rw-r--r--pkgs/tools/misc/ldapvi/default.nix10
-rw-r--r--pkgs/tools/misc/ldmtool/default.nix6
-rw-r--r--pkgs/tools/misc/less/default.nix14
-rw-r--r--pkgs/tools/misc/lesspipe/default.nix8
-rw-r--r--pkgs/tools/misc/lf/default.nix10
-rw-r--r--pkgs/tools/misc/libbitcoin/libbitcoin-client.nix8
-rw-r--r--pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix8
-rw-r--r--pkgs/tools/misc/libbitcoin/libbitcoin-network.nix6
-rw-r--r--pkgs/tools/misc/libbitcoin/libbitcoin-protocol.nix6
-rw-r--r--pkgs/tools/misc/libbitcoin/libbitcoin.nix8
-rw-r--r--pkgs/tools/misc/libcpuid/default.nix8
-rw-r--r--pkgs/tools/misc/librespeed-cli/default.nix28
-rw-r--r--pkgs/tools/misc/lice/default.nix25
-rw-r--r--pkgs/tools/misc/licensor/default.nix17
-rw-r--r--pkgs/tools/misc/lifecycled/default.nix31
-rw-r--r--pkgs/tools/misc/lilo/default.nix20
-rw-r--r--pkgs/tools/misc/linuxquota/default.nix6
-rw-r--r--pkgs/tools/misc/livedl/default.nix25
-rw-r--r--pkgs/tools/misc/lnav/default.nix18
-rw-r--r--pkgs/tools/misc/lnch/default.nix15
-rw-r--r--pkgs/tools/misc/loadlibrary/default.nix6
-rw-r--r--pkgs/tools/misc/lockfile-progs/default.nix8
-rw-r--r--pkgs/tools/misc/logstash/6.x.nix23
-rw-r--r--pkgs/tools/misc/logstash/7.x.nix21
-rw-r--r--pkgs/tools/misc/logstash/contrib.nix8
-rw-r--r--pkgs/tools/misc/logtop/default.nix35
-rw-r--r--pkgs/tools/misc/lokalise2-cli/default.nix12
-rw-r--r--pkgs/tools/misc/lolcat/gemset.nix2
-rw-r--r--pkgs/tools/misc/loop/default.nix6
-rw-r--r--pkgs/tools/misc/lorri/default.nix44
-rw-r--r--pkgs/tools/misc/lottieconverter/default.nix4
-rw-r--r--pkgs/tools/misc/lrzsz/default.nix14
-rw-r--r--pkgs/tools/misc/lsd/default.nix18
-rw-r--r--pkgs/tools/misc/ltunify/default.nix23
-rw-r--r--pkgs/tools/misc/macchina/default.nix31
-rw-r--r--pkgs/tools/misc/makebootfat/default.nix4
-rw-r--r--pkgs/tools/misc/man-db/default.nix17
-rw-r--r--pkgs/tools/misc/mandoc/default.nix4
-rw-r--r--pkgs/tools/misc/markdown-anki-decks/default.nix45
-rw-r--r--pkgs/tools/misc/marlin-calc/default.nix4
-rw-r--r--pkgs/tools/misc/mathpix-snipping-tool/default.nix31
-rw-r--r--pkgs/tools/misc/mbuffer/default.nix24
-rw-r--r--pkgs/tools/misc/mc/default.nix26
-rw-r--r--pkgs/tools/misc/mcfly/default.nix11
-rw-r--r--pkgs/tools/misc/mcrypt/default.nix9
-rwxr-xr-xpkgs/tools/misc/mcrypt/malloc_to_stdlib.patch26
-rw-r--r--pkgs/tools/misc/mdbtools/default.nix22
-rw-r--r--pkgs/tools/misc/me_cleaner/default.nix6
-rw-r--r--pkgs/tools/misc/megacli/default.nix9
-rw-r--r--pkgs/tools/misc/memtest86+/default.nix4
-rw-r--r--pkgs/tools/misc/memtest86-efi/default.nix12
-rw-r--r--pkgs/tools/misc/mht2htm/default.nix4
-rw-r--r--pkgs/tools/misc/microplane/default.nix30
-rw-r--r--pkgs/tools/misc/mimeo/default.nix6
-rw-r--r--pkgs/tools/misc/minicom/default.nix10
-rw-r--r--pkgs/tools/misc/minipro/default.nix35
-rw-r--r--pkgs/tools/misc/miniserve/default.nix29
-rw-r--r--pkgs/tools/misc/ministat/default.nix6
-rw-r--r--pkgs/tools/misc/mktorrent/default.nix10
-rw-r--r--pkgs/tools/misc/mlocate/default.nix6
-rw-r--r--pkgs/tools/misc/mmake/default.nix4
-rw-r--r--pkgs/tools/misc/mmv-go/default.nix24
-rw-r--r--pkgs/tools/misc/mmv/default.nix55
-rw-r--r--pkgs/tools/misc/mongodb-compass/default.nix47
-rw-r--r--pkgs/tools/misc/mongodb-tools/default.nix9
-rw-r--r--pkgs/tools/misc/mons/default.nix26
-rw-r--r--pkgs/tools/misc/mons/xrandr.patch14
-rw-r--r--pkgs/tools/misc/moreutils/default.nix13
-rw-r--r--pkgs/tools/misc/most/default.nix4
-rw-r--r--pkgs/tools/misc/mpdscribble/default.nix38
-rw-r--r--pkgs/tools/misc/mrtg/default.nix8
-rw-r--r--pkgs/tools/misc/ms-sys/default.nix4
-rw-r--r--pkgs/tools/misc/mslink/default.nix33
-rw-r--r--pkgs/tools/misc/mstflint/default.nix5
-rw-r--r--pkgs/tools/misc/mtm/default.nix4
-rw-r--r--pkgs/tools/misc/multitail/default.nix10
-rw-r--r--pkgs/tools/misc/multitime/default.nix6
-rw-r--r--pkgs/tools/misc/mutagen/default.nix22
-rw-r--r--pkgs/tools/misc/mutt-wizard/default.nix26
-rw-r--r--pkgs/tools/misc/mysql2pgsql/default.nix8
-rw-r--r--pkgs/tools/misc/mysqltuner/default.nix31
-rw-r--r--pkgs/tools/misc/nagstamon/default.nix8
-rw-r--r--pkgs/tools/misc/nbench/default.nix6
-rw-r--r--pkgs/tools/misc/ncdu/default.nix10
-rw-r--r--pkgs/tools/misc/neo-cowsay/default.nix2
-rw-r--r--pkgs/tools/misc/neofetch/default.nix27
-rw-r--r--pkgs/tools/misc/nginx-config-formatter/default.nix4
-rw-r--r--pkgs/tools/misc/nix-direnv/default.nix26
-rw-r--r--pkgs/tools/misc/nms/default.nix4
-rw-r--r--pkgs/tools/misc/nncp/default.nix71
-rw-r--r--pkgs/tools/misc/noteshrink/default.nix4
-rw-r--r--pkgs/tools/misc/noti/default.nix6
-rw-r--r--pkgs/tools/misc/notify-desktop/default.nix6
-rw-r--r--pkgs/tools/misc/notify/default.nix37
-rw-r--r--pkgs/tools/misc/ntfy/default.nix14
-rw-r--r--pkgs/tools/misc/nvfancontrol/default.nix31
-rw-r--r--pkgs/tools/misc/nvimpager/default.nix54
-rw-r--r--pkgs/tools/misc/nyancat/default.nix6
-rw-r--r--pkgs/tools/misc/ocz-ssd-guru/default.nix53
-rw-r--r--pkgs/tools/misc/odroid-xu3-bootloader/default.nix2
-rw-r--r--pkgs/tools/misc/odyssey/default.nix4
-rw-r--r--pkgs/tools/misc/onefetch/default.nix33
-rw-r--r--pkgs/tools/misc/opencorsairlink/default.nix8
-rw-r--r--pkgs/tools/misc/opentelemetry-collector/default.nix30
-rw-r--r--pkgs/tools/misc/opentsdb/default.nix16
-rw-r--r--pkgs/tools/misc/oppai-ng/default.nix8
-rw-r--r--pkgs/tools/misc/os-prober/default.nix12
-rw-r--r--pkgs/tools/misc/osinfo-db-tools/default.nix14
-rw-r--r--pkgs/tools/misc/osm2pgsql/default.nix20
-rw-r--r--pkgs/tools/misc/ostree/default.nix22
-rw-r--r--pkgs/tools/misc/otfcc/default.nix8
-rw-r--r--pkgs/tools/misc/ovh-ttyrec/default.nix29
-rw-r--r--pkgs/tools/misc/page/default.nix6
-rw-r--r--pkgs/tools/misc/pal/default.nix10
-rw-r--r--pkgs/tools/misc/pandoc-lua-filters/default.nix33
-rw-r--r--pkgs/tools/misc/pandoc-plantuml-filter/default.nix2
-rw-r--r--pkgs/tools/misc/paperlike-go/default.nix28
-rw-r--r--pkgs/tools/misc/paps/default.nix8
-rw-r--r--pkgs/tools/misc/parallel/default.nix15
-rw-r--r--pkgs/tools/misc/parcellite/default.nix8
-rw-r--r--pkgs/tools/misc/parted/default.nix28
-rw-r--r--pkgs/tools/misc/partition-manager/default.nix62
-rw-r--r--pkgs/tools/misc/past-time/default.nix39
-rw-r--r--pkgs/tools/misc/pastebinit/default.nix31
-rw-r--r--pkgs/tools/misc/patdiff/default.nix4
-rw-r--r--pkgs/tools/misc/pazi/default.nix8
-rw-r--r--pkgs/tools/misc/pb_cli/default.nix14
-rw-r--r--pkgs/tools/misc/pcb2gcode/default.nix46
-rw-r--r--pkgs/tools/misc/pdd/default.nix10
-rw-r--r--pkgs/tools/misc/pdf-parser/default.nix6
-rw-r--r--pkgs/tools/misc/peep/default.nix2
-rw-r--r--pkgs/tools/misc/pferd/default.nix32
-rw-r--r--pkgs/tools/misc/pfsshell/default.nix30
-rw-r--r--pkgs/tools/misc/pg_flame/default.nix2
-rw-r--r--pkgs/tools/misc/pg_top/default.nix8
-rw-r--r--pkgs/tools/misc/pgbadger/default.nix31
-rw-r--r--pkgs/tools/misc/pgcenter/default.nix19
-rw-r--r--pkgs/tools/misc/pgmetrics/default.nix10
-rw-r--r--pkgs/tools/misc/phoronix-test-suite/default.nix10
-rw-r--r--pkgs/tools/misc/phraseapp-client/default.nix8
-rw-r--r--pkgs/tools/misc/pick/default.nix6
-rw-r--r--pkgs/tools/misc/picocom/default.nix48
-rw-r--r--pkgs/tools/misc/pipelight/default.nix11
-rw-r--r--pkgs/tools/misc/pipelight/wine-6.13-new-args.patch42
-rw-r--r--pkgs/tools/misc/pipreqs/default.nix11
-rw-r--r--pkgs/tools/misc/pistol/default.nix20
-rw-r--r--pkgs/tools/misc/piston-cli/default.nix24
-rw-r--r--pkgs/tools/misc/pixd/default.nix4
-rw-r--r--pkgs/tools/misc/pk2cmd/default.nix7
-rw-r--r--pkgs/tools/misc/pkgdiff/default.nix2
-rw-r--r--pkgs/tools/misc/plantuml-server/default.nix70
-rw-r--r--pkgs/tools/misc/plantuml/default.nix10
-rw-r--r--pkgs/tools/misc/plocate/default.nix45
-rw-r--r--pkgs/tools/misc/plotinus/default.nix8
-rw-r--r--pkgs/tools/misc/plowshare/default.nix14
-rw-r--r--pkgs/tools/misc/pmbootstrap/default.nix95
-rw-r--r--pkgs/tools/misc/pod2mdoc/default.nix4
-rw-r--r--pkgs/tools/misc/polar/Gemfile7
-rw-r--r--pkgs/tools/misc/polar/Gemfile.lock27
-rw-r--r--pkgs/tools/misc/polar/default.nix73
-rw-r--r--pkgs/tools/misc/polar/gemset.nix75
-rw-r--r--pkgs/tools/misc/ponysay/default.nix28
-rw-r--r--pkgs/tools/misc/poweralertd/default.nix42
-rw-r--r--pkgs/tools/misc/powerline-go/default.nix19
-rw-r--r--pkgs/tools/misc/powerline-rs/default.nix10
-rw-r--r--pkgs/tools/misc/profile-cleaner/default.nix12
-rw-r--r--pkgs/tools/misc/profile-sync-daemon/default.nix12
-rw-r--r--pkgs/tools/misc/progress/default.nix10
-rw-r--r--pkgs/tools/misc/proxytunnel/default.nix6
-rw-r--r--pkgs/tools/misc/pspg/default.nix10
-rw-r--r--pkgs/tools/misc/psw/default.nix25
-rw-r--r--pkgs/tools/misc/pubs/default.nix8
-rw-r--r--pkgs/tools/misc/pv/default.nix8
-rw-r--r--pkgs/tools/misc/pws/default.nix9
-rw-r--r--pkgs/tools/misc/pws/gemset.nix2
-rw-r--r--pkgs/tools/misc/q-text-as-data/default.nix28
-rw-r--r--pkgs/tools/misc/qdl/default.nix29
-rw-r--r--pkgs/tools/misc/qjoypad/default.nix10
-rw-r--r--pkgs/tools/misc/qmk/default.nix62
-rw-r--r--pkgs/tools/misc/quich/default.nix30
-rw-r--r--pkgs/tools/misc/radeon-profile/default.nix4
-rw-r--r--pkgs/tools/misc/rargs/default.nix8
-rw-r--r--pkgs/tools/misc/rauc/default.nix51
-rw-r--r--pkgs/tools/misc/rcm/default.nix15
-rw-r--r--pkgs/tools/misc/recoverjpeg/default.nix6
-rw-r--r--pkgs/tools/misc/recutils/default.nix6
-rw-r--r--pkgs/tools/misc/remind/default.nix39
-rw-r--r--pkgs/tools/misc/rename/default.nix14
-rw-r--r--pkgs/tools/misc/renameutils/default.nix6
-rw-r--r--pkgs/tools/misc/reredirect/default.nix4
-rw-r--r--pkgs/tools/misc/riemann-c-client/default.nix6
-rw-r--r--pkgs/tools/misc/riemann-tools/gemset.nix2
-rw-r--r--pkgs/tools/misc/rig/default.nix12
-rw-r--r--pkgs/tools/misc/rkflashtool/default.nix4
-rw-r--r--pkgs/tools/misc/rlwrap/default.nix32
-rw-r--r--pkgs/tools/misc/rmlint/default.nix45
-rw-r--r--pkgs/tools/misc/rmtrash/default.nix12
-rw-r--r--pkgs/tools/misc/rockbox-utility/default.nix12
-rw-r--r--pkgs/tools/misc/roundup/default.nix4
-rw-r--r--pkgs/tools/misc/routino/default.nix19
-rw-r--r--pkgs/tools/misc/rpcsvc-proto/default.nix35
-rw-r--r--pkgs/tools/misc/rpi-imager/default.nix56
-rw-r--r--pkgs/tools/misc/rpi-imager/lsblkCheckFix.patch16
-rw-r--r--pkgs/tools/misc/rpm-ostree/default.nix18
-rw-r--r--pkgs/tools/misc/rrdtool/default.nix12
-rw-r--r--pkgs/tools/misc/rw/default.nix6
-rw-r--r--pkgs/tools/misc/s6-portable-utils/default.nix11
-rw-r--r--pkgs/tools/misc/sacad/default.nix39
-rw-r--r--pkgs/tools/misc/sam-ba/default.nix6
-rw-r--r--pkgs/tools/misc/savepagenow/default.nix25
-rw-r--r--pkgs/tools/misc/scanmem/default.nix4
-rw-r--r--pkgs/tools/misc/screen/default.nix19
-rw-r--r--pkgs/tools/misc/sd-mux-ctrl/default.nix28
-rw-r--r--pkgs/tools/misc/sdate/default.nix8
-rw-r--r--pkgs/tools/misc/sdl-jstest/default.nix8
-rw-r--r--pkgs/tools/misc/semiphemeral/default.nix26
-rw-r--r--pkgs/tools/misc/sfeed/default.nix32
-rw-r--r--pkgs/tools/misc/shadowenv/default.nix8
-rw-r--r--pkgs/tools/misc/shallot/default.nix8
-rw-r--r--pkgs/tools/misc/shell-hist/default.nix2
-rw-r--r--pkgs/tools/misc/shelldap/default.nix6
-rw-r--r--pkgs/tools/misc/shunit2/default.nix6
-rw-r--r--pkgs/tools/misc/silicon/default.nix20
-rw-r--r--pkgs/tools/misc/sixpair/default.nix8
-rw-r--r--pkgs/tools/misc/skim/default.nix16
-rw-r--r--pkgs/tools/misc/sl/default.nix4
-rw-r--r--pkgs/tools/misc/slop/default.nix14
-rw-r--r--pkgs/tools/misc/slsnif/default.nix8
-rw-r--r--pkgs/tools/misc/smc/default.nix4
-rw-r--r--pkgs/tools/misc/smenu/default.nix25
-rw-r--r--pkgs/tools/misc/snapper/default.nix27
-rw-r--r--pkgs/tools/misc/snore/default.nix4
-rw-r--r--pkgs/tools/misc/somafm-cli/default.nix34
-rw-r--r--pkgs/tools/misc/spigot/default.nix10
-rw-r--r--pkgs/tools/misc/sta/default.nix15
-rw-r--r--pkgs/tools/misc/starship/default.nix42
-rw-r--r--pkgs/tools/misc/staruml/default.nix13
-rw-r--r--pkgs/tools/misc/statserial/default.nix6
-rw-r--r--pkgs/tools/misc/stow/default.nix6
-rw-r--r--pkgs/tools/misc/subberthehut/default.nix6
-rw-r--r--pkgs/tools/misc/sutils/default.nix8
-rw-r--r--pkgs/tools/misc/svtplay-dl/default.nix33
-rw-r--r--pkgs/tools/misc/swaglyrics/default.nix48
-rw-r--r--pkgs/tools/misc/sweep-visualizer/default.nix12
-rw-r--r--pkgs/tools/misc/system-config-printer/default.nix29
-rw-r--r--pkgs/tools/misc/systrayhelper/default.nix12
-rw-r--r--pkgs/tools/misc/systrayhelper/deps.nix102
-rw-r--r--pkgs/tools/misc/t/gemset.nix2
-rw-r--r--pkgs/tools/misc/t1utils/default.nix4
-rw-r--r--pkgs/tools/misc/tab-rs/default.nix27
-rw-r--r--pkgs/tools/misc/tagref/default.nix22
-rw-r--r--pkgs/tools/misc/td/default.nix2
-rw-r--r--pkgs/tools/misc/td/gemset.nix2
-rw-r--r--pkgs/tools/misc/tea/default.nix23
-rw-r--r--pkgs/tools/misc/tealdeer/default.nix10
-rw-r--r--pkgs/tools/misc/teamocil/default.nix2
-rw-r--r--pkgs/tools/misc/teamocil/gemset.nix2
-rw-r--r--pkgs/tools/misc/teleconsole/default.nix15
-rw-r--r--pkgs/tools/misc/teleconsole/deps.nix13
-rw-r--r--pkgs/tools/misc/tensorman/default.nix10
-rw-r--r--pkgs/tools/misc/termplay/default.nix4
-rw-r--r--pkgs/tools/misc/tewisay/default.nix6
-rw-r--r--pkgs/tools/misc/texi2mdoc/default.nix4
-rw-r--r--pkgs/tools/misc/tfk8s/default.nix50
-rw-r--r--pkgs/tools/misc/tfk8s/tests/sample1/default.nix11
-rw-r--r--pkgs/tools/misc/tfk8s/tests/sample1/input.yaml7
-rw-r--r--pkgs/tools/misc/tfk8s/tests/sample1/output.tf12
-rw-r--r--pkgs/tools/misc/thefuck/default.nix26
-rw-r--r--pkgs/tools/misc/thin-provisioning-tools/default.nix22
-rw-r--r--pkgs/tools/misc/time/default.nix6
-rw-r--r--pkgs/tools/misc/timidity/default.nix8
-rw-r--r--pkgs/tools/misc/tio/default.nix4
-rw-r--r--pkgs/tools/misc/tldr/default.nix8
-rw-r--r--pkgs/tools/misc/tlp/default.nix6
-rw-r--r--pkgs/tools/misc/tmate/default.nix7
-rw-r--r--pkgs/tools/misc/tmpwatch/default.nix4
-rw-r--r--pkgs/tools/misc/tmux-cssh/default.nix10
-rw-r--r--pkgs/tools/misc/tmux-mem-cpu-load/default.nix23
-rw-r--r--pkgs/tools/misc/tmux-xpanes/default.nix8
-rw-r--r--pkgs/tools/misc/tmux/default.nix37
-rw-r--r--pkgs/tools/misc/tmuxinator/default.nix4
-rw-r--r--pkgs/tools/misc/tmuxp/default.nix34
-rw-r--r--pkgs/tools/misc/togglesg-download/default.nix46
-rw-r--r--pkgs/tools/misc/toilet/default.nix6
-rw-r--r--pkgs/tools/misc/topgrade/default.nix18
-rw-r--r--pkgs/tools/misc/toybox/default.nix12
-rw-r--r--pkgs/tools/misc/trash-cli/default.nix56
-rw-r--r--pkgs/tools/misc/trash-cli/nix-paths.patch26
-rw-r--r--pkgs/tools/misc/tremor-rs/default.nix47
-rw-r--r--pkgs/tools/misc/trillian/default.nix32
-rw-r--r--pkgs/tools/misc/ttf2pt1/default.nix8
-rw-r--r--pkgs/tools/misc/ttfautohint/default.nix8
-rw-r--r--pkgs/tools/misc/ttmkfdir/default.nix8
-rw-r--r--pkgs/tools/misc/ttwatch/default.nix16
-rw-r--r--pkgs/tools/misc/tty-clock/default.nix8
-rw-r--r--pkgs/tools/misc/ttygif/default.nix10
-rw-r--r--pkgs/tools/misc/ttylog/default.nix4
-rw-r--r--pkgs/tools/misc/ttyplot/default.nix4
-rw-r--r--pkgs/tools/misc/ttyrec/clang-fixes.patch21
-rw-r--r--pkgs/tools/misc/ttyrec/default.nix31
-rw-r--r--pkgs/tools/misc/tvnamer/default.nix47
-rw-r--r--pkgs/tools/misc/twurl/Gemfile3
-rw-r--r--pkgs/tools/misc/twurl/Gemfile.lock15
-rw-r--r--pkgs/tools/misc/twurl/default.nix17
-rw-r--r--pkgs/tools/misc/twurl/gemset.nix23
-rw-r--r--pkgs/tools/misc/txr/default.nix6
-rw-r--r--pkgs/tools/misc/txt2man/default.nix8
-rw-r--r--pkgs/tools/misc/txtw/default.nix4
-rw-r--r--pkgs/tools/misc/tydra/default.nix8
-rw-r--r--pkgs/tools/misc/tz/default.nix22
-rw-r--r--pkgs/tools/misc/ugtrain/default.nix28
-rw-r--r--pkgs/tools/misc/uhubctl/default.nix12
-rw-r--r--pkgs/tools/misc/ultrastar-creator/default.nix4
-rw-r--r--pkgs/tools/misc/ultrastar-manager/default.nix7
-rw-r--r--pkgs/tools/misc/umlet/default.nix6
-rw-r--r--pkgs/tools/misc/unclutter-xfixes/default.nix11
-rw-r--r--pkgs/tools/misc/unclutter/default.nix8
-rw-r--r--pkgs/tools/misc/unicode/default.nix4
-rw-r--r--pkgs/tools/misc/units/default.nix6
-rw-r--r--pkgs/tools/misc/up/default.nix8
-rw-r--r--pkgs/tools/misc/up/gomod.patch23
-rw-r--r--pkgs/tools/misc/upower-notify/default.nix4
-rw-r--r--pkgs/tools/misc/upterm/default.nix39
-rw-r--r--pkgs/tools/misc/urjtag/default.nix68
-rw-r--r--pkgs/tools/misc/urn-timer/default.nix66
-rw-r--r--pkgs/tools/misc/usbmuxd/default.nix14
-rw-r--r--pkgs/tools/misc/usbview/default.nix36
-rw-r--r--pkgs/tools/misc/uucp/default.nix6
-rw-r--r--pkgs/tools/misc/uudeview/default.nix8
-rw-r--r--pkgs/tools/misc/uutils-coreutils/default.nix49
-rw-r--r--pkgs/tools/misc/uwuify/default.nix23
-rw-r--r--pkgs/tools/misc/vcs_query/default.nix4
-rw-r--r--pkgs/tools/misc/vector/default.nix93
-rw-r--r--pkgs/tools/misc/veikk-linux-driver-gui/default.nix32
-rw-r--r--pkgs/tools/misc/venus/default.nix53
-rw-r--r--pkgs/tools/misc/via/default.nix41
-rw-r--r--pkgs/tools/misc/vial/default.nix33
-rw-r--r--pkgs/tools/misc/vimer/default.nix6
-rw-r--r--pkgs/tools/misc/vimpager/build.nix4
-rw-r--r--pkgs/tools/misc/vimv/default.nix27
-rw-r--r--pkgs/tools/misc/vimwiki-markdown/default.nix8
-rw-r--r--pkgs/tools/misc/vivid/default.nix19
-rw-r--r--pkgs/tools/misc/vix/default.nix24
-rw-r--r--pkgs/tools/misc/vmtouch/default.nix8
-rw-r--r--pkgs/tools/misc/void/default.nix6
-rw-r--r--pkgs/tools/misc/vorbisgain/default.nix8
-rw-r--r--pkgs/tools/misc/vsh/default.nix26
-rw-r--r--pkgs/tools/misc/vttest/default.nix8
-rw-r--r--pkgs/tools/misc/wacomtablet/default.nix10
-rw-r--r--pkgs/tools/misc/wagyu/default.nix6
-rw-r--r--pkgs/tools/misc/wakatime/default.nix4
-rw-r--r--pkgs/tools/misc/watchexec/default.nix13
-rw-r--r--pkgs/tools/misc/websocat/default.nix28
-rw-r--r--pkgs/tools/misc/wemux/default.nix38
-rw-r--r--pkgs/tools/misc/wimboot/default.nix17
-rw-r--r--pkgs/tools/misc/wlc/default.nix36
-rw-r--r--pkgs/tools/misc/woeusb/default.nix47
-rw-r--r--pkgs/tools/misc/woeusb/remove-workaround.patch15
-rw-r--r--pkgs/tools/misc/woof/default.nix33
-rw-r--r--pkgs/tools/misc/wootility/default.nix6
-rw-r--r--pkgs/tools/misc/wsl-open/default.nix28
-rw-r--r--pkgs/tools/misc/wv/default.nix8
-rw-r--r--pkgs/tools/misc/wv2/default.nix8
-rw-r--r--pkgs/tools/misc/wyrd/default.nix4
-rw-r--r--pkgs/tools/misc/x11idle/default.nix4
-rw-r--r--pkgs/tools/misc/xburst-tools/default.nix14
-rw-r--r--pkgs/tools/misc/xcd/default.nix29
-rw-r--r--pkgs/tools/misc/xclip/default.nix6
-rw-r--r--pkgs/tools/misc/xcp/default.nix25
-rw-r--r--pkgs/tools/misc/xdaliclock/default.nix6
-rw-r--r--pkgs/tools/misc/xdo/default.nix4
-rw-r--r--pkgs/tools/misc/xdummy/default.nix9
-rw-r--r--pkgs/tools/misc/xdxf2slob/default.nix5
-rw-r--r--pkgs/tools/misc/xflux/default.nix10
-rw-r--r--pkgs/tools/misc/xflux/gui.nix10
-rw-r--r--pkgs/tools/misc/xfstests/default.nix6
-rw-r--r--pkgs/tools/misc/xiccd/default.nix6
-rw-r--r--pkgs/tools/misc/xilinx-bootgen/default.nix4
-rw-r--r--pkgs/tools/misc/xjobs/default.nix65
-rw-r--r--pkgs/tools/misc/xmonad-log/default.nix4
-rw-r--r--pkgs/tools/misc/xprite-editor/default.nix12
-rw-r--r--pkgs/tools/misc/xsel/default.nix9
-rw-r--r--pkgs/tools/misc/xtitle/default.nix6
-rw-r--r--pkgs/tools/misc/xvfb-run/default.nix19
-rw-r--r--pkgs/tools/misc/xxv/default.nix2
-rw-r--r--pkgs/tools/misc/yad/default.nix10
-rw-r--r--pkgs/tools/misc/yafetch/default.nix30
-rw-r--r--pkgs/tools/misc/yajsv/default.nix28
-rw-r--r--pkgs/tools/misc/yank/default.nix12
-rw-r--r--pkgs/tools/misc/yle-dl/default.nix25
-rw-r--r--pkgs/tools/misc/you-get/default.nix8
-rw-r--r--pkgs/tools/misc/youtube-dl/default.nix6
-rw-r--r--pkgs/tools/misc/ytfzf/default.nix51
-rw-r--r--pkgs/tools/misc/ytfzf/no-update.patch29
-rw-r--r--pkgs/tools/misc/ytmdl/default.nix66
-rw-r--r--pkgs/tools/misc/ytree/default.nix21
-rw-r--r--pkgs/tools/misc/yubico-piv-tool/default.nix6
-rw-r--r--pkgs/tools/misc/yubikey-manager-qt/default.nix60
-rw-r--r--pkgs/tools/misc/yubikey-manager/default.nix9
-rw-r--r--pkgs/tools/misc/yubikey-neo-manager/default.nix28
-rw-r--r--pkgs/tools/misc/yubikey-neo-manager/fix-pyside-requirement.diff17
-rw-r--r--pkgs/tools/misc/yubikey-personalization-gui/default.nix6
-rw-r--r--pkgs/tools/misc/yubikey-personalization/default.nix6
-rw-r--r--pkgs/tools/misc/z-lua/default.nix14
-rw-r--r--pkgs/tools/misc/zabbixctl/default.nix4
-rw-r--r--pkgs/tools/misc/zalgo/default.nix25
-rw-r--r--pkgs/tools/misc/zellij/default.nix45
-rw-r--r--pkgs/tools/misc/zoxide/default.nix30
-rw-r--r--pkgs/tools/misc/zsh-autoenv/default.nix12
-rw-r--r--pkgs/tools/misc/zsh-navigation-tools/default.nix4
-rw-r--r--pkgs/tools/misc/zthrottle/default.nix27
-rw-r--r--pkgs/tools/networking/6tunnel/default.nix2
-rw-r--r--pkgs/tools/networking/acme-client/default.nix15
-rw-r--r--pkgs/tools/networking/ahcpd/default.nix6
-rw-r--r--pkgs/tools/networking/aircrack-ng/default.nix12
-rw-r--r--pkgs/tools/networking/airfield/default.nix7
-rw-r--r--pkgs/tools/networking/airfield/node-packages.nix174
-rw-r--r--pkgs/tools/networking/airfield/node.nix10
-rw-r--r--pkgs/tools/networking/altermime/default.nix17
-rw-r--r--pkgs/tools/networking/amass/default.nix17
-rw-r--r--pkgs/tools/networking/anevicon/default.nix43
-rw-r--r--pkgs/tools/networking/argus-clients/default.nix12
-rw-r--r--pkgs/tools/networking/argus/default.nix12
-rw-r--r--pkgs/tools/networking/aria2/default.nix10
-rw-r--r--pkgs/tools/networking/arping/default.nix8
-rw-r--r--pkgs/tools/networking/arpoison/default.nix4
-rw-r--r--pkgs/tools/networking/assh/default.nix19
-rw-r--r--pkgs/tools/networking/atftp/default.nix7
-rw-r--r--pkgs/tools/networking/atinout/default.nix10
-rw-r--r--pkgs/tools/networking/autossh/default.nix13
-rw-r--r--pkgs/tools/networking/axel/default.nix12
-rw-r--r--pkgs/tools/networking/babeld/default.nix18
-rw-r--r--pkgs/tools/networking/bacnet-stack/default.nix31
-rw-r--r--pkgs/tools/networking/badvpn/default.nix22
-rw-r--r--pkgs/tools/networking/bandwhich/default.nix14
-rw-r--r--pkgs/tools/networking/bgpdump/default.nix10
-rw-r--r--pkgs/tools/networking/bgpq3/default.nix4
-rw-r--r--pkgs/tools/networking/bgpq4/default.nix25
-rw-r--r--pkgs/tools/networking/biosdevname/default.nix4
-rw-r--r--pkgs/tools/networking/bore/default.nix47
-rw-r--r--pkgs/tools/networking/boringtun/default.nix8
-rw-r--r--pkgs/tools/networking/boundary/default.nix66
-rwxr-xr-xpkgs/tools/networking/boundary/update.sh39
-rw-r--r--pkgs/tools/networking/brook/default.nix4
-rw-r--r--pkgs/tools/networking/bsd-finger/default.nix6
-rw-r--r--pkgs/tools/networking/bud/default.nix10
-rw-r--r--pkgs/tools/networking/bukubrow/default.nix8
-rw-r--r--pkgs/tools/networking/bully/default.nix4
-rw-r--r--pkgs/tools/networking/burpsuite/default.nix47
-rw-r--r--pkgs/tools/networking/bwm-ng/default.nix6
-rw-r--r--pkgs/tools/networking/cadaver/configure.patch20
-rw-r--r--pkgs/tools/networking/cadaver/default.nix10
-rw-r--r--pkgs/tools/networking/calendar-cli/default.nix34
-rw-r--r--pkgs/tools/networking/cantoolz/default.nix62
-rw-r--r--pkgs/tools/networking/carddav-util/default.nix12
-rw-r--r--pkgs/tools/networking/cassowary/default.nix6
-rw-r--r--pkgs/tools/networking/ccnet/default.nix25
-rw-r--r--pkgs/tools/networking/cdpr/default.nix25
-rw-r--r--pkgs/tools/networking/chaos/default.nix29
-rw-r--r--pkgs/tools/networking/chisel/default.nix36
-rw-r--r--pkgs/tools/networking/chrony/allow-clock_adjtime.patch26
-rw-r--r--pkgs/tools/networking/chrony/default.nix23
-rw-r--r--pkgs/tools/networking/chrony/fix-seccomp-build.patch13
-rw-r--r--pkgs/tools/networking/circus/default.nix15
-rw-r--r--pkgs/tools/networking/cjdns/default.nix14
-rw-r--r--pkgs/tools/networking/cksfv/default.nix8
-rw-r--r--pkgs/tools/networking/clash/default.nix14
-rw-r--r--pkgs/tools/networking/cloud-custodian/default.nix4
-rw-r--r--pkgs/tools/networking/cntlm/default.nix6
-rw-r--r--pkgs/tools/networking/cocom/default.nix32
-rw-r--r--pkgs/tools/networking/connect/default.nix12
-rw-r--r--pkgs/tools/networking/connman/connman-gtk/default.nix6
-rw-r--r--pkgs/tools/networking/connman/connman-ncurses/default.nix6
-rw-r--r--pkgs/tools/networking/connman/connman-notify/default.nix4
-rw-r--r--pkgs/tools/networking/connman/connman.nix22
-rw-r--r--pkgs/tools/networking/connman/connman_dmenu/default.nix8
-rw-r--r--pkgs/tools/networking/corerad/default.nix12
-rw-r--r--pkgs/tools/networking/corkscrew/default.nix11
-rw-r--r--pkgs/tools/networking/crackle/default.nix24
-rw-r--r--pkgs/tools/networking/croc/default.nix25
-rw-r--r--pkgs/tools/networking/croc/test-local-relay.nix19
-rw-r--r--pkgs/tools/networking/curl-unix-socket/default.nix4
-rw-r--r--pkgs/tools/networking/curl/CVE-2021-22897.patch64
-rw-r--r--pkgs/tools/networking/curl/CVE-2021-22898.patch25
-rw-r--r--pkgs/tools/networking/curl/CVE-2021-22901.patch437
-rw-r--r--pkgs/tools/networking/curl/default.nix42
-rw-r--r--pkgs/tools/networking/curlie/default.nix8
-rw-r--r--pkgs/tools/networking/darkstat/default.nix4
-rw-r--r--pkgs/tools/networking/davix/default.nix14
-rw-r--r--pkgs/tools/networking/dd-agent/5.nix19
-rw-r--r--pkgs/tools/networking/dd-agent/datadog-agent-deps.nix2
-rw-r--r--pkgs/tools/networking/dd-agent/datadog-agent.nix10
-rw-r--r--pkgs/tools/networking/dd-agent/datadog-process-agent-deps.nix2
-rw-r--r--pkgs/tools/networking/dd-agent/datadog-process-agent.nix4
-rw-r--r--pkgs/tools/networking/dd-agent/integrations-core.nix2
-rw-r--r--pkgs/tools/networking/ddclient/default.nix27
-rw-r--r--pkgs/tools/networking/dhcp/default.nix21
-rw-r--r--pkgs/tools/networking/dhcpcd/default.nix11
-rw-r--r--pkgs/tools/networking/dhcpdump/default.nix4
-rw-r--r--pkgs/tools/networking/dhcping/default.nix6
-rw-r--r--pkgs/tools/networking/dibbler/default.nix6
-rw-r--r--pkgs/tools/networking/dirb/default.nix8
-rw-r--r--pkgs/tools/networking/djbdns/default.nix4
-rw-r--r--pkgs/tools/networking/dnscrypt-proxy2/default.nix8
-rw-r--r--pkgs/tools/networking/dnscrypt-wrapper/default.nix6
-rw-r--r--pkgs/tools/networking/dnsmasq/default.nix20
-rw-r--r--pkgs/tools/networking/dnsperf/default.nix21
-rw-r--r--pkgs/tools/networking/dnsproxy/default.nix8
-rw-r--r--pkgs/tools/networking/dnstop/default.nix8
-rw-r--r--pkgs/tools/networking/dnstracer/default.nix10
-rw-r--r--pkgs/tools/networking/dnstwist/default.nix37
-rw-r--r--pkgs/tools/networking/dnsviz/default.nix51
-rw-r--r--pkgs/tools/networking/dnsviz/fix-path.patch18
-rw-r--r--pkgs/tools/networking/dogdns/default.nix38
-rw-r--r--pkgs/tools/networking/driftnet/default.nix69
-rw-r--r--pkgs/tools/networking/driftnet/fix-darwin-build.patch61
-rw-r--r--pkgs/tools/networking/drill/default.nix18
-rw-r--r--pkgs/tools/networking/dropbear/default.nix10
-rw-r--r--pkgs/tools/networking/dsniff/default.nix23
-rw-r--r--pkgs/tools/networking/easyrsa/2.x.nix4
-rw-r--r--pkgs/tools/networking/easyrsa/default.nix13
-rw-r--r--pkgs/tools/networking/easyrsa/fix-paths.patch48
-rw-r--r--pkgs/tools/networking/eggdrop/default.nix4
-rw-r--r--pkgs/tools/networking/email/default.nix2
-rw-r--r--pkgs/tools/networking/eternal-terminal/default.nix23
-rw-r--r--pkgs/tools/networking/evillimiter/default.nix53
-rw-r--r--pkgs/tools/networking/fakeroute/default.nix4
-rw-r--r--pkgs/tools/networking/fastd/default.nix52
-rw-r--r--pkgs/tools/networking/fdm/default.nix24
-rw-r--r--pkgs/tools/networking/ferm/default.nix16
-rw-r--r--pkgs/tools/networking/filegive/default.nix4
-rw-r--r--pkgs/tools/networking/findomain/default.nix13
-rw-r--r--pkgs/tools/networking/flannel/default.nix4
-rw-r--r--pkgs/tools/networking/flvstreamer/default.nix12
-rw-r--r--pkgs/tools/networking/fping/default.nix4
-rw-r--r--pkgs/tools/networking/freebind/default.nix4
-rw-r--r--pkgs/tools/networking/frp/default.nix8
-rw-r--r--pkgs/tools/networking/gandi-cli/default.nix30
-rw-r--r--pkgs/tools/networking/getmail/default.nix9
-rw-r--r--pkgs/tools/networking/getmail6/default.nix35
-rw-r--r--pkgs/tools/networking/gftp/default.nix8
-rw-r--r--pkgs/tools/networking/ghostunnel/default.nix29
-rw-r--r--pkgs/tools/networking/globalprotect-openconnect/default.nix43
-rw-r--r--pkgs/tools/networking/gmrender-resurrect/default.nix14
-rw-r--r--pkgs/tools/networking/gmvault/default.nix31
-rw-r--r--pkgs/tools/networking/gmvault/gmvault.py4
-rw-r--r--pkgs/tools/networking/gnirehtet/default.nix27
-rw-r--r--pkgs/tools/networking/gnirehtet/paths.patch48
-rw-r--r--pkgs/tools/networking/go-shadowsocks2/default.nix14
-rw-r--r--pkgs/tools/networking/go-shadowsocks2/deps.nix30
-rw-r--r--pkgs/tools/networking/gobgp/default.nix33
-rw-r--r--pkgs/tools/networking/goimapnotify/default.nix8
-rw-r--r--pkgs/tools/networking/goklp/default.nix4
-rw-r--r--pkgs/tools/networking/goreplay/default.nix26
-rw-r--r--pkgs/tools/networking/gping/default.nix33
-rw-r--r--pkgs/tools/networking/grpcui/default.nix6
-rw-r--r--pkgs/tools/networking/grpcurl/default.nix27
-rw-r--r--pkgs/tools/networking/grpcurl/deps.nix183
-rw-r--r--pkgs/tools/networking/guardian-agent/default.nix7
-rw-r--r--pkgs/tools/networking/gupnp-tools/default.nix17
-rw-r--r--pkgs/tools/networking/gvpe/default.nix6
-rw-r--r--pkgs/tools/networking/hans/default.nix4
-rw-r--r--pkgs/tools/networking/haproxy/default.nix13
-rw-r--r--pkgs/tools/networking/hey/default.nix6
-rw-r--r--pkgs/tools/networking/horst/default.nix6
-rw-r--r--pkgs/tools/networking/hping/default.nix57
-rw-r--r--pkgs/tools/networking/htpdate/default.nix4
-rw-r--r--pkgs/tools/networking/http-prompt/default.nix4
-rw-r--r--pkgs/tools/networking/httperf/default.nix8
-rw-r--r--pkgs/tools/networking/httpie/default.nix48
-rw-r--r--pkgs/tools/networking/httpie/strip-venv.patch13
-rw-r--r--pkgs/tools/networking/httping/default.nix4
-rw-r--r--pkgs/tools/networking/httplab/default.nix4
-rw-r--r--pkgs/tools/networking/httplz/default.nix10
-rw-r--r--pkgs/tools/networking/httpstat/default.nix42
-rw-r--r--pkgs/tools/networking/httptunnel/default.nix4
-rw-r--r--pkgs/tools/networking/hue-cli/gemset.nix2
-rw-r--r--pkgs/tools/networking/hurl/default.nix40
-rw-r--r--pkgs/tools/networking/hyenae/default.nix10
-rw-r--r--pkgs/tools/networking/i2p/default.nix14
-rw-r--r--pkgs/tools/networking/i2p/i2p.patch2
-rw-r--r--pkgs/tools/networking/i2pd/default.nix19
-rw-r--r--pkgs/tools/networking/ifstat-legacy/default.nix6
-rw-r--r--pkgs/tools/networking/iftop/default.nix6
-rw-r--r--pkgs/tools/networking/igmpproxy/default.nix26
-rw-r--r--pkgs/tools/networking/imapproxy/default.nix6
-rw-r--r--pkgs/tools/networking/imapsync/default.nix4
-rw-r--r--pkgs/tools/networking/inadyn/default.nix8
-rw-r--r--pkgs/tools/networking/inetutils/default.nix23
-rw-r--r--pkgs/tools/networking/innernet/default.nix53
-rw-r--r--pkgs/tools/networking/iodine/default.nix6
-rw-r--r--pkgs/tools/networking/iouyap/default.nix4
-rw-r--r--pkgs/tools/networking/ip2location/default.nix4
-rw-r--r--pkgs/tools/networking/ip2unix/default.nix14
-rw-r--r--pkgs/tools/networking/ipcalc/default.nix6
-rw-r--r--pkgs/tools/networking/iperf/2.nix4
-rw-r--r--pkgs/tools/networking/iperf/3.nix10
-rw-r--r--pkgs/tools/networking/ipgrep/default.nix16
-rw-r--r--pkgs/tools/networking/ipinfo/default.nix28
-rw-r--r--pkgs/tools/networking/ipv6calc/default.nix10
-rw-r--r--pkgs/tools/networking/isync/default.nix14
-rw-r--r--pkgs/tools/networking/iwgtk/default.nix28
-rw-r--r--pkgs/tools/networking/jnettop/default.nix10
-rw-r--r--pkgs/tools/networking/junkie/default.nix10
-rw-r--r--pkgs/tools/networking/jwhois/default.nix6
-rw-r--r--pkgs/tools/networking/kail/default.nix5
-rw-r--r--pkgs/tools/networking/kail/deps.nix2
-rw-r--r--pkgs/tools/networking/kapp/default.nix32
-rw-r--r--pkgs/tools/networking/kea/default.nix47
-rw-r--r--pkgs/tools/networking/kea/dont-create-var.patch18
-rw-r--r--pkgs/tools/networking/keepalived/default.nix12
-rw-r--r--pkgs/tools/networking/lftp/default.nix12
-rw-r--r--pkgs/tools/networking/libnids/default.nix6
-rw-r--r--pkgs/tools/networking/libreswan/default.nix152
-rw-r--r--pkgs/tools/networking/linkchecker/default.nix33
-rw-r--r--pkgs/tools/networking/lldpd/default.nix8
-rw-r--r--pkgs/tools/networking/logmein-hamachi/default.nix8
-rw-r--r--pkgs/tools/networking/lsh/default.nix4
-rw-r--r--pkgs/tools/networking/lxi-tools/default.nix34
-rw-r--r--pkgs/tools/networking/lychee/default.nix35
-rw-r--r--pkgs/tools/networking/maildrop/default.nix6
-rw-r--r--pkgs/tools/networking/mailsend/default.nix10
-rw-r--r--pkgs/tools/networking/mailutils/default.nix30
-rw-r--r--pkgs/tools/networking/maphosts/default.nix5
-rw-r--r--pkgs/tools/networking/maphosts/gemset.nix2
-rw-r--r--pkgs/tools/networking/maxscale/default.nix12
-rw-r--r--pkgs/tools/networking/mcrcon/default.nix8
-rw-r--r--pkgs/tools/networking/mdk4/default.nix33
-rw-r--r--pkgs/tools/networking/megatools/default.nix10
-rw-r--r--pkgs/tools/networking/memtier-benchmark/default.nix12
-rw-r--r--pkgs/tools/networking/minidlna/default.nix10
-rw-r--r--pkgs/tools/networking/minio-client/default.nix19
-rw-r--r--pkgs/tools/networking/minissdpd/default.nix4
-rw-r--r--pkgs/tools/networking/miniupnpc/default.nix8
-rw-r--r--pkgs/tools/networking/miniupnpd/default.nix15
-rw-r--r--pkgs/tools/networking/miredo/default.nix6
-rw-r--r--pkgs/tools/networking/mitmproxy/default.nix55
-rw-r--r--pkgs/tools/networking/mmsd/default.nix8
-rw-r--r--pkgs/tools/networking/modem-manager/default.nix48
-rw-r--r--pkgs/tools/networking/moodle-dl/default.nix34
-rw-r--r--pkgs/tools/networking/mosh/default.nix26
-rw-r--r--pkgs/tools/networking/mosh/mosh-client_path.patch22
-rw-r--r--pkgs/tools/networking/mozwire/default.nix14
-rw-r--r--pkgs/tools/networking/mpack/default.nix4
-rw-r--r--pkgs/tools/networking/mtr/default.nix40
-rw-r--r--pkgs/tools/networking/mu/default.nix27
-rw-r--r--pkgs/tools/networking/mubeng/default.nix25
-rw-r--r--pkgs/tools/networking/n2n/default.nix32
-rw-r--r--pkgs/tools/networking/nat-traverse/default.nix4
-rw-r--r--pkgs/tools/networking/nbd/default.nix18
-rw-r--r--pkgs/tools/networking/ncftp/default.nix6
-rw-r--r--pkgs/tools/networking/ndisc6/default.nix4
-rw-r--r--pkgs/tools/networking/ndjbdns/default.nix6
-rw-r--r--pkgs/tools/networking/nebula/default.nix10
-rw-r--r--pkgs/tools/networking/netboot/default.nix8
-rw-r--r--pkgs/tools/networking/netcat/default.nix4
-rw-r--r--pkgs/tools/networking/nethogs/default.nix4
-rw-r--r--pkgs/tools/networking/netifd/default.nix19
-rw-r--r--pkgs/tools/networking/netkit/tftp/default.nix8
-rw-r--r--pkgs/tools/networking/netmask/default.nix4
-rw-r--r--pkgs/tools/networking/netrw/default.nix10
-rw-r--r--pkgs/tools/networking/netselect/default.nix4
-rw-r--r--pkgs/tools/networking/netsniff-ng/default.nix64
-rw-r--r--pkgs/tools/networking/nettee/default.nix2
-rw-r--r--pkgs/tools/networking/network-manager/fix-paths.patch100
-rw-r--r--pkgs/tools/networking/networkmanager/0.9.8/default.nix (renamed from pkgs/tools/networking/network-manager/0.9.8/default.nix)8
-rw-r--r--pkgs/tools/networking/networkmanager/0.9.8/libnl-3.2.25.patch (renamed from pkgs/tools/networking/network-manager/0.9.8/libnl-3.2.25.patch)0
-rw-r--r--pkgs/tools/networking/networkmanager/0.9.8/nixos-purity.patch (renamed from pkgs/tools/networking/network-manager/0.9.8/nixos-purity.patch)0
-rw-r--r--pkgs/tools/networking/networkmanager/applet/default.nix (renamed from pkgs/tools/networking/network-manager/applet/default.nix)21
-rw-r--r--pkgs/tools/networking/networkmanager/default.nix (renamed from pkgs/tools/networking/network-manager/default.nix)26
-rw-r--r--pkgs/tools/networking/networkmanager/dmenu/default.nix (renamed from pkgs/tools/networking/network-manager/dmenu/default.nix)16
-rw-r--r--pkgs/tools/networking/networkmanager/fix-install-paths.patch (renamed from pkgs/tools/networking/network-manager/fix-install-paths.patch)0
-rw-r--r--pkgs/tools/networking/networkmanager/fix-paths.patch92
-rw-r--r--pkgs/tools/networking/networkmanager/fortisslvpn/default.nix (renamed from pkgs/tools/networking/network-manager/fortisslvpn/default.nix)13
-rw-r--r--pkgs/tools/networking/networkmanager/fortisslvpn/fix-paths.patch (renamed from pkgs/tools/networking/network-manager/fortisslvpn/fix-paths.patch)0
-rw-r--r--pkgs/tools/networking/networkmanager/iodine/default.nix (renamed from pkgs/tools/networking/network-manager/iodine/default.nix)12
-rw-r--r--pkgs/tools/networking/networkmanager/iodine/fix-paths.patch (renamed from pkgs/tools/networking/network-manager/iodine/fix-paths.patch)0
-rw-r--r--pkgs/tools/networking/networkmanager/l2tp/default.nix (renamed from pkgs/tools/networking/network-manager/l2tp/default.nix)8
-rw-r--r--pkgs/tools/networking/networkmanager/l2tp/fix-paths.patch (renamed from pkgs/tools/networking/network-manager/l2tp/fix-paths.patch)0
-rw-r--r--pkgs/tools/networking/networkmanager/libnma/default.nix (renamed from pkgs/tools/networking/network-manager/libnma/default.nix)14
-rw-r--r--pkgs/tools/networking/networkmanager/libnma/hardcode-gsettings.patch (renamed from pkgs/tools/networking/network-manager/libnma/hardcode-gsettings.patch)0
-rw-r--r--pkgs/tools/networking/networkmanager/openconnect/default.nix (renamed from pkgs/tools/networking/network-manager/openconnect/default.nix)17
-rw-r--r--pkgs/tools/networking/networkmanager/openconnect/fix-paths.patch (renamed from pkgs/tools/networking/network-manager/openconnect/fix-paths.patch)0
-rw-r--r--pkgs/tools/networking/networkmanager/openvpn/default.nix (renamed from pkgs/tools/networking/network-manager/openvpn/default.nix)15
-rw-r--r--pkgs/tools/networking/networkmanager/openvpn/fix-paths.patch (renamed from pkgs/tools/networking/network-manager/openvpn/fix-paths.patch)0
-rw-r--r--pkgs/tools/networking/networkmanager/sstp/default.nix64
-rw-r--r--pkgs/tools/networking/networkmanager/strongswan/default.nix (renamed from pkgs/tools/networking/network-manager/strongswan/default.nix)8
-rw-r--r--pkgs/tools/networking/networkmanager/tray.nix (renamed from pkgs/tools/networking/network-manager/tray.nix)0
-rw-r--r--pkgs/tools/networking/networkmanager/vpnc/default.nix (renamed from pkgs/tools/networking/network-manager/vpnc/default.nix)15
-rw-r--r--pkgs/tools/networking/networkmanager/vpnc/fix-paths.patch (renamed from pkgs/tools/networking/network-manager/vpnc/fix-paths.patch)0
-rw-r--r--pkgs/tools/networking/nfdump/default.nix12
-rw-r--r--pkgs/tools/networking/nfstrace/default.nix17
-rw-r--r--pkgs/tools/networking/ngrep/default.nix2
-rw-r--r--pkgs/tools/networking/ngrok-2/default.nix11
-rwxr-xr-xpkgs/tools/networking/ngrok-2/update.sh1
-rw-r--r--pkgs/tools/networking/ngrok-2/versions.json36
-rw-r--r--pkgs/tools/networking/nikto/NIKTODIR-nix-wrapper-fix.patch26
-rw-r--r--pkgs/tools/networking/nikto/default.nix64
-rw-r--r--pkgs/tools/networking/noip/default.nix8
-rw-r--r--pkgs/tools/networking/notemap/default.nix37
-rw-r--r--pkgs/tools/networking/nss-mdns/default.nix8
-rw-r--r--pkgs/tools/networking/nss-pam-ldapd/default.nix8
-rw-r--r--pkgs/tools/networking/ntopng/default.nix12
-rw-r--r--pkgs/tools/networking/ntp/default.nix8
-rw-r--r--pkgs/tools/networking/nuttcp/default.nix4
-rw-r--r--pkgs/tools/networking/nxdomain/default.nix29
-rw-r--r--pkgs/tools/networking/nylon/default.nix4
-rw-r--r--pkgs/tools/networking/nzbget/default.nix6
-rw-r--r--pkgs/tools/networking/oapi-codegen/default.nix25
-rw-r--r--pkgs/tools/networking/ocproxy/default.nix4
-rw-r--r--pkgs/tools/networking/ocserv/default.nix10
-rw-r--r--pkgs/tools/networking/offlineimap/default.nix6
-rw-r--r--pkgs/tools/networking/ofono/default.nix20
-rw-r--r--pkgs/tools/networking/olsrd/default.nix27
-rw-r--r--pkgs/tools/networking/oneshot/default.nix6
-rw-r--r--pkgs/tools/networking/ookla-speedtest/default.nix43
-rw-r--r--pkgs/tools/networking/openapi-generator-cli/default.nix22
-rw-r--r--pkgs/tools/networking/openapi-generator-cli/example.nix31
-rw-r--r--pkgs/tools/networking/openapi-generator-cli/unstable.nix24
-rw-r--r--pkgs/tools/networking/openconnect/default.nix63
-rw-r--r--pkgs/tools/networking/openconnect_pa/default.nix40
-rw-r--r--pkgs/tools/networking/openfortivpn/default.nix48
-rw-r--r--pkgs/tools/networking/openntpd/default.nix8
-rw-r--r--pkgs/tools/networking/openresolv/default.nix14
-rw-r--r--pkgs/tools/networking/opensm/default.nix4
-rw-r--r--pkgs/tools/networking/opensnitch/daemon.nix50
-rw-r--r--pkgs/tools/networking/opensnitch/ui.nix46
-rw-r--r--pkgs/tools/networking/openssh/common.nix127
-rw-r--r--pkgs/tools/networking/openssh/copyid.nix11
-rw-r--r--pkgs/tools/networking/openssh/default.nix176
-rw-r--r--pkgs/tools/networking/openssh/ssh-copy-id-fix-eof.patch21
-rw-r--r--pkgs/tools/networking/openssh/ssh-keysign-8.4.patch (renamed from pkgs/tools/networking/openssh/ssh-keysign.patch)0
-rw-r--r--pkgs/tools/networking/openssh/ssh-keysign-8.5.patch24
-rw-r--r--pkgs/tools/networking/openvpn/default.nix117
-rw-r--r--pkgs/tools/networking/openvpn/openvpn-auth-ldap.nix61
-rw-r--r--pkgs/tools/networking/openvpn/openvpn_learnaddress.nix11
-rw-r--r--pkgs/tools/networking/openvpn/update-resolv-conf.nix2
-rw-r--r--pkgs/tools/networking/openvpn/update-systemd-resolved.nix6
-rw-r--r--pkgs/tools/networking/p2p/amule/default.nix75
-rw-r--r--pkgs/tools/networking/p2p/azureus/default.nix6
-rw-r--r--pkgs/tools/networking/p2p/gtk-gnutella/default.nix20
-rw-r--r--pkgs/tools/networking/p2p/libtorrent-jesec/default.nix38
-rw-r--r--pkgs/tools/networking/p2p/libtorrent/default.nix6
-rw-r--r--pkgs/tools/networking/p2p/rtorrent-jesec/default.nix57
-rw-r--r--pkgs/tools/networking/p2p/rtorrent/default.nix8
-rw-r--r--pkgs/tools/networking/p2p/seeks/default.nix69
-rw-r--r--pkgs/tools/networking/packetdrill/default.nix34
-rw-r--r--pkgs/tools/networking/packetdrill/nix.patch24
-rw-r--r--pkgs/tools/networking/pacparser/default.nix4
-rw-r--r--pkgs/tools/networking/par2cmdline/default.nix4
-rw-r--r--pkgs/tools/networking/pcapc/default.nix6
-rw-r--r--pkgs/tools/networking/pcapfix/default.nix6
-rw-r--r--pkgs/tools/networking/pdnsd/default.nix4
-rw-r--r--pkgs/tools/networking/pdsh/default.nix12
-rw-r--r--pkgs/tools/networking/persepolis/default.nix8
-rw-r--r--pkgs/tools/networking/philter/default.nix6
-rw-r--r--pkgs/tools/networking/phodav/default.nix14
-rw-r--r--pkgs/tools/networking/photon/default.nix8
-rw-r--r--pkgs/tools/networking/pingtcp/default.nix6
-rw-r--r--pkgs/tools/networking/pirate-get/default.nix4
-rw-r--r--pkgs/tools/networking/pixiecore/default.nix8
-rw-r--r--pkgs/tools/networking/pixiewps/default.nix10
-rw-r--r--pkgs/tools/networking/pmacct/default.nix15
-rw-r--r--pkgs/tools/networking/polygraph/default.nix6
-rw-r--r--pkgs/tools/networking/polysh/default.nix4
-rw-r--r--pkgs/tools/networking/ppp/default.nix73
-rw-r--r--pkgs/tools/networking/ppp/musl-fix-headers.patch137
-rw-r--r--pkgs/tools/networking/ppp/nix-purity.patch34
-rw-r--r--pkgs/tools/networking/pptp/default.nix6
-rw-r--r--pkgs/tools/networking/pptpd/default.nix4
-rw-r--r--pkgs/tools/networking/pritunl-ssh/default.nix29
-rw-r--r--pkgs/tools/networking/privoxy/default.nix31
-rw-r--r--pkgs/tools/networking/proxify/default.nix31
-rw-r--r--pkgs/tools/networking/proxychains/default.nix27
-rw-r--r--pkgs/tools/networking/pssh/default.nix4
-rw-r--r--pkgs/tools/networking/pwnat/default.nix6
-rw-r--r--pkgs/tools/networking/pykms/default.nix57
-rw-r--r--pkgs/tools/networking/pykms/log-to-current-directory-by-default.patch20
-rw-r--r--pkgs/tools/networking/qr-filetransfer/default.nix30
-rw-r--r--pkgs/tools/networking/qr-filetransfer/deps.nix66
-rw-r--r--pkgs/tools/networking/qrcp/default.nix44
-rw-r--r--pkgs/tools/networking/quickserve/default.nix6
-rw-r--r--pkgs/tools/networking/quicktun/default.nix4
-rw-r--r--pkgs/tools/networking/radsecproxy/default.nix10
-rw-r--r--pkgs/tools/networking/radvd/default.nix15
-rw-r--r--pkgs/tools/networking/ratools/default.nix4
-rw-r--r--pkgs/tools/networking/rcon/default.nix30
-rw-r--r--pkgs/tools/networking/rdrview/default.nix26
-rw-r--r--pkgs/tools/networking/reaver-wps-t6x/default.nix4
-rw-r--r--pkgs/tools/networking/reaver-wps/default.nix4
-rw-r--r--pkgs/tools/networking/redfang/default.nix35
-rw-r--r--pkgs/tools/networking/redir/default.nix8
-rw-r--r--pkgs/tools/networking/redsocks/default.nix8
-rw-r--r--pkgs/tools/networking/ripmime/default.nix7
-rw-r--r--pkgs/tools/networking/rp-pppoe/default.nix4
-rw-r--r--pkgs/tools/networking/rshijack/default.nix8
-rw-r--r--pkgs/tools/networking/s3cmd/default.nix6
-rw-r--r--pkgs/tools/networking/s3gof3r/default.nix4
-rw-r--r--pkgs/tools/networking/s3rs/default.nix26
-rw-r--r--pkgs/tools/networking/s4cmd/default.nix4
-rw-r--r--pkgs/tools/networking/s5cmd/default.nix22
-rw-r--r--pkgs/tools/networking/s6-dns/default.nix4
-rw-r--r--pkgs/tools/networking/s6-networking/default.nix15
-rw-r--r--pkgs/tools/networking/saldl/default.nix14
-rw-r--r--pkgs/tools/networking/samplicator/default.nix6
-rw-r--r--pkgs/tools/networking/shadowfox/default.nix8
-rw-r--r--pkgs/tools/networking/shadowsocks-libev/default.nix8
-rw-r--r--pkgs/tools/networking/shadowsocks-rust/default.nix19
-rw-r--r--pkgs/tools/networking/shncpd/default.nix4
-rw-r--r--pkgs/tools/networking/shorewall/default.nix20
-rw-r--r--pkgs/tools/networking/siege/default.nix28
-rw-r--r--pkgs/tools/networking/simpleproxy/default.nix4
-rw-r--r--pkgs/tools/networking/sipcalc/default.nix4
-rw-r--r--pkgs/tools/networking/sipsak/default.nix6
-rw-r--r--pkgs/tools/networking/sish/default.nix25
-rw-r--r--pkgs/tools/networking/slirp4netns/default.nix9
-rw-r--r--pkgs/tools/networking/smartdns/default.nix11
-rw-r--r--pkgs/tools/networking/smokeping/default.nix8
-rw-r--r--pkgs/tools/networking/snabb/default.nix10
-rw-r--r--pkgs/tools/networking/sniffglue/default.nix12
-rw-r--r--pkgs/tools/networking/socat/2.x.nix6
-rw-r--r--pkgs/tools/networking/socat/default.nix26
-rw-r--r--pkgs/tools/networking/spiped/default.nix27
-rw-r--r--pkgs/tools/networking/spoofer/default.nix16
-rw-r--r--pkgs/tools/networking/srelay/default.nix6
-rw-r--r--pkgs/tools/networking/ssh-askpass-fullscreen/default.nix31
-rw-r--r--pkgs/tools/networking/ssh-ident/default.nix21
-rw-r--r--pkgs/tools/networking/sshoogr/default.nix10
-rw-r--r--pkgs/tools/networking/sshpass/default.nix4
-rw-r--r--pkgs/tools/networking/sshping/default.nix6
-rw-r--r--pkgs/tools/networking/ssldump/default.nix8
-rw-r--r--pkgs/tools/networking/sslsplit/default.nix4
-rw-r--r--pkgs/tools/networking/ssmtp/default.nix10
-rw-r--r--pkgs/tools/networking/sstp/default.nix16
-rw-r--r--pkgs/tools/networking/stevenblack-blocklist/default.nix20
-rw-r--r--pkgs/tools/networking/strongswan/default.nix8
-rw-r--r--pkgs/tools/networking/stubby/default.nix6
-rw-r--r--pkgs/tools/networking/stun/default.nix4
-rw-r--r--pkgs/tools/networking/stunnel/default.nix12
-rw-r--r--pkgs/tools/networking/subfinder/default.nix25
-rw-r--r--pkgs/tools/networking/subfinder/deps.nix165
-rw-r--r--pkgs/tools/networking/surfraw/default.nix6
-rw-r--r--pkgs/tools/networking/swagger-codegen/default.nix16
-rw-r--r--pkgs/tools/networking/swagger-codegen3/default.nix33
-rw-r--r--pkgs/tools/networking/swaks/default.nix13
-rw-r--r--pkgs/tools/networking/swec/default.nix9
-rw-r--r--pkgs/tools/networking/tayga/default.nix4
-rw-r--r--pkgs/tools/networking/tcp-cutter/default.nix (renamed from pkgs/tools/networking/cutter/default.nix)9
-rw-r--r--pkgs/tools/networking/tcpdump/default.nix18
-rw-r--r--pkgs/tools/networking/tcpflow/default.nix14
-rw-r--r--pkgs/tools/networking/tcpreplay/default.nix20
-rw-r--r--pkgs/tools/networking/tcptraceroute/default.nix6
-rw-r--r--pkgs/tools/networking/tdns-cli/default.nix6
-rw-r--r--pkgs/tools/networking/telepresence/default.nix8
-rw-r--r--pkgs/tools/networking/telepresence2/default.nix28
-rw-r--r--pkgs/tools/networking/tendermint/default.nix20
-rw-r--r--pkgs/tools/networking/termshark/default.nix12
-rw-r--r--pkgs/tools/networking/tftp-hpa/default.nix4
-rw-r--r--pkgs/tools/networking/tgt/default.nix12
-rw-r--r--pkgs/tools/networking/tinc/default.nix6
-rw-r--r--pkgs/tools/networking/tinc/pre.nix20
-rw-r--r--pkgs/tools/networking/tinyfecvpn/default.nix6
-rw-r--r--pkgs/tools/networking/tinyproxy/default.nix46
-rw-r--r--pkgs/tools/networking/tlspool/default.nix8
-rw-r--r--pkgs/tools/networking/tnat64/default.nix37
-rw-r--r--pkgs/tools/networking/toss/default.nix20
-rw-r--r--pkgs/tools/networking/tox-node/default.nix24
-rw-r--r--pkgs/tools/networking/toxvpn/default.nix6
-rw-r--r--pkgs/tools/networking/tracebox/default.nix8
-rw-r--r--pkgs/tools/networking/traceroute/default.nix6
-rw-r--r--pkgs/tools/networking/trickle/default.nix11
-rw-r--r--pkgs/tools/networking/tridactyl-native/default.nix8
-rw-r--r--pkgs/tools/networking/tunnelto/default.nix14
-rw-r--r--pkgs/tools/networking/twa/default.nix2
-rw-r--r--pkgs/tools/networking/ua/default.nix12
-rw-r--r--pkgs/tools/networking/ubridge/default.nix4
-rw-r--r--pkgs/tools/networking/ucspi-tcp/default.nix4
-rw-r--r--pkgs/tools/networking/udptunnel/default.nix8
-rw-r--r--pkgs/tools/networking/uget-integrator/default.nix14
-rw-r--r--pkgs/tools/networking/uget/default.nix12
-rw-r--r--pkgs/tools/networking/unbound/default.nix65
-rw-r--r--pkgs/tools/networking/unbound/python.nix6
-rw-r--r--pkgs/tools/networking/updog/default.nix26
-rw-r--r--pkgs/tools/networking/urlwatch/default.nix28
-rw-r--r--pkgs/tools/networking/userhosts/default.nix23
-rw-r--r--pkgs/tools/networking/uwimap/default.nix16
-rw-r--r--pkgs/tools/networking/v2ray/default.nix79
-rw-r--r--pkgs/tools/networking/v2ray/generic.nix52
-rwxr-xr-xpkgs/tools/networking/v2ray/update.sh12
-rw-r--r--pkgs/tools/networking/vde2/default.nix16
-rw-r--r--pkgs/tools/networking/vegeta/default.nix10
-rw-r--r--pkgs/tools/networking/vegeta/deps.nix9
-rw-r--r--pkgs/tools/networking/vlan/default.nix4
-rw-r--r--pkgs/tools/networking/vpnc-scripts/default.nix41
-rw-r--r--pkgs/tools/networking/vpnc/default.nix9
-rw-r--r--pkgs/tools/networking/vtun/default.nix6
-rw-r--r--pkgs/tools/networking/waitron/default.nix30
-rw-r--r--pkgs/tools/networking/waitron/deps.nix57
-rw-r--r--pkgs/tools/networking/waitron/staticfiles-directory.patch13
-rw-r--r--pkgs/tools/networking/wakelan/default.nix8
-rw-r--r--pkgs/tools/networking/wakeonlan/default.nix29
-rw-r--r--pkgs/tools/networking/wavemon/default.nix16
-rw-r--r--pkgs/tools/networking/wbox/default.nix6
-rw-r--r--pkgs/tools/networking/webalizer/default.nix4
-rw-r--r--pkgs/tools/networking/webwormhole/default.nix22
-rw-r--r--pkgs/tools/networking/weighttp/default.nix11
-rw-r--r--pkgs/tools/networking/wget/default.nix25
-rw-r--r--pkgs/tools/networking/wget2/default.nix100
-rw-r--r--pkgs/tools/networking/whois/default.nix10
-rw-r--r--pkgs/tools/networking/wicd/default.nix14
-rw-r--r--pkgs/tools/networking/wifish/default.nix47
-rw-r--r--pkgs/tools/networking/wifite2/default.nix4
-rw-r--r--pkgs/tools/networking/wireguard-go/default.nix4
-rw-r--r--pkgs/tools/networking/wireguard-tools/default.nix29
-rw-r--r--pkgs/tools/networking/wol/default.nix4
-rw-r--r--pkgs/tools/networking/wolfebin/default.nix6
-rw-r--r--pkgs/tools/networking/wormhole-william/default.nix10
-rw-r--r--pkgs/tools/networking/wrk/default.nix4
-rw-r--r--pkgs/tools/networking/wrk2/default.nix8
-rw-r--r--pkgs/tools/networking/wstunnel/default.nix41
-rw-r--r--pkgs/tools/networking/wuzz/default.nix4
-rw-r--r--pkgs/tools/networking/x11-ssh-askpass/default.nix4
-rw-r--r--pkgs/tools/networking/xh/default.nix50
-rw-r--r--pkgs/tools/networking/xl2tpd/default.nix4
-rw-r--r--pkgs/tools/networking/xnbd/default.nix10
-rw-r--r--pkgs/tools/networking/yggdrasil/default.nix6
-rw-r--r--pkgs/tools/networking/yrd/default.nix4
-rw-r--r--pkgs/tools/networking/ytcc/default.nix36
-rw-r--r--pkgs/tools/networking/zap/default.nix48
-rw-r--r--pkgs/tools/networking/zerotierone/default.nix26
-rw-r--r--pkgs/tools/networking/zs-apc-spdu-ctl/default.nix36
-rw-r--r--pkgs/tools/networking/zs-wait4host/default.nix34
-rw-r--r--pkgs/tools/networking/zssh/default.nix10
-rw-r--r--pkgs/tools/nix/cached-nix-shell/default.nix17
-rw-r--r--pkgs/tools/nix/dnadd/default.nix22
-rw-r--r--pkgs/tools/nix/manix/default.nix25
-rw-r--r--pkgs/tools/nix/nar-serve/default.nix26
-rw-r--r--pkgs/tools/nix/nix-output-monitor/default.nix41
-rw-r--r--pkgs/tools/nix/nix-query-tree-viewer/default.nix6
-rw-r--r--pkgs/tools/nix/nix-script/default.nix15
-rw-r--r--pkgs/tools/nix/nixdoc/default.nix8
-rw-r--r--pkgs/tools/nix/nixos-generators/default.nix6
-rw-r--r--pkgs/tools/nix/nixos-install-tools/default.nix67
-rw-r--r--pkgs/tools/nix/nixos-option/CMakeLists.txt8
-rw-r--r--pkgs/tools/nix/nixos-option/default.nix12
-rw-r--r--pkgs/tools/nix/nixos-option/libnix-copy-paste.cc83
-rw-r--r--pkgs/tools/nix/nixos-option/libnix-copy-paste.hh9
-rw-r--r--pkgs/tools/nix/nixos-option/nixos-option.cc643
-rw-r--r--pkgs/tools/nix/nixpkgs-fmt/default.nix8
-rw-r--r--pkgs/tools/nix/rnix-hashes/default.nix13
-rw-r--r--pkgs/tools/package-management/apk-tools/default.nix26
-rw-r--r--pkgs/tools/package-management/appimage-run/default.nix4
-rw-r--r--pkgs/tools/package-management/appimage-run/test.nix24
-rw-r--r--pkgs/tools/package-management/appimagekit/default.nix56
-rw-r--r--pkgs/tools/package-management/appimagekit/nix.patch222
-rw-r--r--pkgs/tools/package-management/apt-dater/default.nix8
-rw-r--r--pkgs/tools/package-management/apt/default.nix10
-rw-r--r--pkgs/tools/package-management/auditwheel/default.nix56
-rw-r--r--pkgs/tools/package-management/bunny/default.nix4
-rw-r--r--pkgs/tools/package-management/cargo-about/default.nix12
-rw-r--r--pkgs/tools/package-management/cargo-audit/default.nix36
-rw-r--r--pkgs/tools/package-management/cargo-deb/default.nix21
-rw-r--r--pkgs/tools/package-management/cargo-deps/default.nix2
-rw-r--r--pkgs/tools/package-management/cargo-download/Cargo.nix6
-rw-r--r--pkgs/tools/package-management/cargo-download/crates-io.nix48
-rw-r--r--pkgs/tools/package-management/cargo-edit/default.nix27
-rw-r--r--pkgs/tools/package-management/cargo-graph/default.nix2
-rw-r--r--pkgs/tools/package-management/cargo-kcov/default.nix26
-rw-r--r--pkgs/tools/package-management/cargo-license/default.nix2
-rw-r--r--pkgs/tools/package-management/cargo-outdated/default.nix12
-rw-r--r--pkgs/tools/package-management/cargo-release/default.nix12
-rw-r--r--pkgs/tools/package-management/cargo-update/0001-Generate-lockfile-for-cargo-update-v4.1.2.patch (renamed from pkgs/tools/package-management/cargo-update/0001-Generate-lockfile-for-cargo-update-v4.1.1.patch)80
-rw-r--r--pkgs/tools/package-management/cargo-update/default.nix16
-rw-r--r--pkgs/tools/package-management/cde/default.nix27
-rw-r--r--pkgs/tools/package-management/checkinstall/default.nix13
-rw-r--r--pkgs/tools/package-management/clib/default.nix4
-rw-r--r--pkgs/tools/package-management/conda/default.nix2
-rw-r--r--pkgs/tools/package-management/createrepo_c/default.nix22
-rw-r--r--pkgs/tools/package-management/createrepo_c/fix-bash-completion-path.patch22
-rw-r--r--pkgs/tools/package-management/createrepo_c/fix-python-install-path.patch14
-rw-r--r--pkgs/tools/package-management/disnix/DisnixWebService/default.nix18
-rw-r--r--pkgs/tools/package-management/disnix/default.nix22
-rw-r--r--pkgs/tools/package-management/disnix/disnixos/default.nix18
-rw-r--r--pkgs/tools/package-management/disnix/dydisnix/default.nix32
-rw-r--r--pkgs/tools/package-management/disnix/dysnomia/default.nix64
-rw-r--r--pkgs/tools/package-management/dpkg/default.nix15
-rw-r--r--pkgs/tools/package-management/elm-github-install/default.nix2
-rw-r--r--pkgs/tools/package-management/elm-github-install/gemset.nix2
-rw-r--r--pkgs/tools/package-management/emplace/default.nix10
-rw-r--r--pkgs/tools/package-management/fpm/Gemfile.lock32
-rw-r--r--pkgs/tools/package-management/fpm/gemset.nix73
-rw-r--r--pkgs/tools/package-management/gx/default.nix12
-rw-r--r--pkgs/tools/package-management/gx/go/default.nix12
-rw-r--r--pkgs/tools/package-management/holo-build/default.nix59
-rw-r--r--pkgs/tools/package-management/home-manager/default.nix12
-rw-r--r--pkgs/tools/package-management/libdnf/default.nix64
-rw-r--r--pkgs/tools/package-management/librepo/default.nix20
-rw-r--r--pkgs/tools/package-management/licensee/Gemfile.lock28
-rw-r--r--pkgs/tools/package-management/licensee/gemset.nix66
-rw-r--r--pkgs/tools/package-management/microdnf/default.nix24
-rw-r--r--pkgs/tools/package-management/micromamba/default.nix49
-rw-r--r--pkgs/tools/package-management/morph/default.nix15
-rw-r--r--pkgs/tools/package-management/morph/deps.nix2
-rw-r--r--pkgs/tools/package-management/mynewt-newt/default.nix6
-rw-r--r--pkgs/tools/package-management/nfpm/default.nix6
-rw-r--r--pkgs/tools/package-management/niff/default.nix6
-rw-r--r--pkgs/tools/package-management/nix-bundle/default.nix4
-rw-r--r--pkgs/tools/package-management/nix-doc/default.nix14
-rw-r--r--pkgs/tools/package-management/nix-du/default.nix16
-rw-r--r--pkgs/tools/package-management/nix-index/default.nix12
-rw-r--r--pkgs/tools/package-management/nix-pin/default.nix5
-rw-r--r--pkgs/tools/package-management/nix-prefetch-scripts/default.nix14
-rw-r--r--pkgs/tools/package-management/nix-prefetch/default.nix28
-rw-r--r--pkgs/tools/package-management/nix-serve/default.nix31
-rw-r--r--pkgs/tools/package-management/nix-simple-deploy/default.nix6
-rw-r--r--pkgs/tools/package-management/nix-template/default.nix51
-rw-r--r--pkgs/tools/package-management/nix-top/default.nix3
-rw-r--r--pkgs/tools/package-management/nix-universal-prefetch/default.nix4
-rw-r--r--pkgs/tools/package-management/nix-update-source/default.nix15
-rw-r--r--pkgs/tools/package-management/nix-update/default.nix12
-rw-r--r--pkgs/tools/package-management/nix/aws-sdk-cpp-TransferManager-ContentEncoding.patch127
-rw-r--r--pkgs/tools/package-management/nix/default.nix145
-rw-r--r--pkgs/tools/package-management/nixops/azure-storage/default.nix4
-rw-r--r--pkgs/tools/package-management/nixops/default.nix64
-rw-r--r--pkgs/tools/package-management/nixops/generic.nix55
-rw-r--r--pkgs/tools/package-management/nixops/nixops-v1_6_1.nix32
-rw-r--r--pkgs/tools/package-management/nixops/optional-virtd.patch24
-rw-r--r--pkgs/tools/package-management/nixops/unstable.nix13
-rw-r--r--pkgs/tools/package-management/nixpkgs-review/default.nix15
-rw-r--r--pkgs/tools/package-management/nixui/default.nix8
-rw-r--r--pkgs/tools/package-management/nixui/nixui.nix10
-rw-r--r--pkgs/tools/package-management/nixui/node-packages.nix22
-rw-r--r--pkgs/tools/package-management/nvd/default.nix32
-rw-r--r--pkgs/tools/package-management/opkg-utils/default.nix4
-rw-r--r--pkgs/tools/package-management/opkg/default.nix12
-rw-r--r--pkgs/tools/package-management/packagekit/default.nix4
-rw-r--r--pkgs/tools/package-management/packagekit/qt.nix10
-rw-r--r--pkgs/tools/package-management/pacman/default.nix8
-rw-r--r--pkgs/tools/package-management/protontricks/default.nix65
-rw-r--r--pkgs/tools/package-management/protontricks/steam-run.patch349
-rw-r--r--pkgs/tools/package-management/python2nix/default.nix19
-rw-r--r--pkgs/tools/package-management/reuse/default.nix14
-rw-r--r--pkgs/tools/package-management/rpm/default.nix40
-rw-r--r--pkgs/tools/package-management/smlpkg/default.nix42
-rw-r--r--pkgs/tools/package-management/xbps/default.nix6
-rw-r--r--pkgs/tools/security/1password-gui/default.nix68
-rw-r--r--pkgs/tools/security/2fa/default.nix8
-rw-r--r--pkgs/tools/security/acsccid/default.nix12
-rw-r--r--pkgs/tools/security/aespipe/default.nix8
-rw-r--r--pkgs/tools/security/afl/default.nix8
-rw-r--r--pkgs/tools/security/afl/libdislocator.nix8
-rw-r--r--pkgs/tools/security/afl/qemu.nix8
-rw-r--r--pkgs/tools/security/aflplusplus/default.nix14
-rw-r--r--pkgs/tools/security/aflplusplus/libdislocator.nix8
-rw-r--r--pkgs/tools/security/aflplusplus/libtokencap.nix8
-rw-r--r--pkgs/tools/security/aflplusplus/qemu.nix8
-rw-r--r--pkgs/tools/security/age/default.nix13
-rw-r--r--pkgs/tools/security/agebox/default.nix27
-rw-r--r--pkgs/tools/security/aide/default.nix12
-rw-r--r--pkgs/tools/security/aiodnsbrute/default.nix45
-rw-r--r--pkgs/tools/security/apg/default.nix12
-rw-r--r--pkgs/tools/security/asc-key-to-qr-code-gif/default.nix10
-rw-r--r--pkgs/tools/security/authoscope/default.nix50
-rw-r--r--pkgs/tools/security/aws-iam-authenticator/default.nix20
-rw-r--r--pkgs/tools/security/aws-okta/default.nix13
-rw-r--r--pkgs/tools/security/b2sum/default.nix4
-rw-r--r--pkgs/tools/security/b3sum/add-cargo-lock.patch501
-rw-r--r--pkgs/tools/security/b3sum/default.nix20
-rw-r--r--pkgs/tools/security/badchars/default.nix32
-rw-r--r--pkgs/tools/security/bash-supergenpass/default.nix27
-rw-r--r--pkgs/tools/security/bettercap/default.nix17
-rw-r--r--pkgs/tools/security/bitwarden/default.nix11
-rw-r--r--pkgs/tools/security/bitwarden_rs/vault.nix28
-rw-r--r--pkgs/tools/security/bmrsa/11.nix6
-rw-r--r--pkgs/tools/security/bruteforce-luks/default.nix4
-rw-r--r--pkgs/tools/security/brutespray/default.nix24
-rw-r--r--pkgs/tools/security/bundler-audit/Gemfile.lock6
-rw-r--r--pkgs/tools/security/bundler-audit/gemset.nix10
-rw-r--r--pkgs/tools/security/bypass403/default.nix25
-rw-r--r--pkgs/tools/security/ccid/default.nix10
-rw-r--r--pkgs/tools/security/ccrypt/default.nix8
-rw-r--r--pkgs/tools/security/certmgr/default.nix4
-rw-r--r--pkgs/tools/security/certstrap/default.nix4
-rw-r--r--pkgs/tools/security/cewl/Gemfile8
-rw-r--r--pkgs/tools/security/cewl/Gemfile.lock31
-rw-r--r--pkgs/tools/security/cewl/default.nix33
-rw-r--r--pkgs/tools/security/cewl/gemset.nix104
-rw-r--r--pkgs/tools/security/cfssl/default.nix8
-rw-r--r--pkgs/tools/security/chaps/default.nix8
-rw-r--r--pkgs/tools/security/chipsec/compile-ko.diff13
-rw-r--r--pkgs/tools/security/chipsec/default.nix53
-rw-r--r--pkgs/tools/security/chipsec/ko-path.diff13
-rw-r--r--pkgs/tools/security/chkrootkit/default.nix20
-rw-r--r--pkgs/tools/security/chntpw/default.nix12
-rw-r--r--pkgs/tools/security/chrome-token-signing/default.nix10
-rw-r--r--pkgs/tools/security/cipherscan/default.nix6
-rw-r--r--pkgs/tools/security/clamav/default.nix28
-rw-r--r--pkgs/tools/security/clevis/default.nix26
-rw-r--r--pkgs/tools/security/cloudbrute/default.nix30
-rw-r--r--pkgs/tools/security/corsmisc/default.nix25
-rw-r--r--pkgs/tools/security/cosign/default.nix36
-rw-r--r--pkgs/tools/security/cowpatty/default.nix4
-rw-r--r--pkgs/tools/security/crackxls/default.nix13
-rw-r--r--pkgs/tools/security/creddump/default.nix7
-rw-r--r--pkgs/tools/security/credslayer/default.nix42
-rw-r--r--pkgs/tools/security/crlfuzz/default.nix27
-rw-r--r--pkgs/tools/security/crowbar/default.nix4
-rw-r--r--pkgs/tools/security/crunch/default.nix9
-rw-r--r--pkgs/tools/security/cryptomator/default.nix91
-rw-r--r--pkgs/tools/security/ctmg/default.nix4
-rw-r--r--pkgs/tools/security/deepsea/default.nix30
-rw-r--r--pkgs/tools/security/dirmngr/default.nix6
-rw-r--r--pkgs/tools/security/dnsenum/default.nix4
-rw-r--r--pkgs/tools/security/dnsrecon/default.nix16
-rw-r--r--pkgs/tools/security/dnsx/default.nix31
-rw-r--r--pkgs/tools/security/doas/default.nix12
-rw-r--r--pkgs/tools/security/doona/default.nix4
-rw-r--r--pkgs/tools/security/doppler/default.nix6
-rw-r--r--pkgs/tools/security/duo-unix/default.nix8
-rw-r--r--pkgs/tools/security/earlybird/default.nix26
-rw-r--r--pkgs/tools/security/ecdsatool/default.nix6
-rw-r--r--pkgs/tools/security/ecdsautils/default.nix6
-rw-r--r--pkgs/tools/security/ecryptfs/default.nix18
-rw-r--r--pkgs/tools/security/ecryptfs/helper.nix8
-rw-r--r--pkgs/tools/security/efitools/default.nix4
-rw-r--r--pkgs/tools/security/eid-mw/default.nix77
-rw-r--r--pkgs/tools/security/enchive/default.nix8
-rw-r--r--pkgs/tools/security/encryptr/default.nix12
-rw-r--r--pkgs/tools/security/enpass/data.json10
-rw-r--r--pkgs/tools/security/enpass/default.nix19
-rw-r--r--pkgs/tools/security/enum4linux-ng/default.nix41
-rw-r--r--pkgs/tools/security/enum4linux/default.nix6
-rw-r--r--pkgs/tools/security/eschalot/default.nix10
-rw-r--r--pkgs/tools/security/expliot/default.nix72
-rw-r--r--pkgs/tools/security/exploitdb/default.nix26
-rw-r--r--pkgs/tools/security/fail2ban/default.nix41
-rw-r--r--pkgs/tools/security/fcrackzip/default.nix4
-rw-r--r--pkgs/tools/security/ffuf/default.nix30
-rw-r--r--pkgs/tools/security/fido2luks/default.nix18
-rw-r--r--pkgs/tools/security/fierce/default.nix14
-rw-r--r--pkgs/tools/security/flare-floss/default.nix46
-rw-r--r--pkgs/tools/security/fpm2/default.nix8
-rw-r--r--pkgs/tools/security/fprintd/default.nix62
-rw-r--r--pkgs/tools/security/fprot/default.nix4
-rw-r--r--pkgs/tools/security/fulcio/default.nix42
-rw-r--r--pkgs/tools/security/fwknop/default.nix16
-rw-r--r--pkgs/tools/security/galer/default.nix25
-rw-r--r--pkgs/tools/security/gau/default.nix29
-rw-r--r--pkgs/tools/security/gen-oath-safe/default.nix12
-rw-r--r--pkgs/tools/security/gencfsm/default.nix42
-rw-r--r--pkgs/tools/security/genpass/default.nix25
-rw-r--r--pkgs/tools/security/gfshare/default.nix28
-rw-r--r--pkgs/tools/security/ghidra/default.nix35
-rw-r--r--pkgs/tools/security/git-hound/default.nix30
-rw-r--r--pkgs/tools/security/gitjacker/default.nix43
-rw-r--r--pkgs/tools/security/gitleaks/default.nix33
-rw-r--r--pkgs/tools/security/gnome-keysign/default.nix4
-rw-r--r--pkgs/tools/security/gnu-pw-mgr/default.nix6
-rw-r--r--pkgs/tools/security/gnupg-pkcs11-scd/default.nix10
-rw-r--r--pkgs/tools/security/gnupg/1.nix4
-rw-r--r--pkgs/tools/security/gnupg/22.nix21
-rw-r--r--pkgs/tools/security/go-cve-search/default.nix32
-rw-r--r--pkgs/tools/security/gobuster/default.nix6
-rw-r--r--pkgs/tools/security/gopass/default.nix53
-rw-r--r--pkgs/tools/security/gopass/git-credential.nix41
-rw-r--r--pkgs/tools/security/gopass/jsonapi.nix42
-rw-r--r--pkgs/tools/security/gorilla-bin/default.nix9
-rw-r--r--pkgs/tools/security/gosh/default.nix31
-rw-r--r--pkgs/tools/security/gospider/default.nix33
-rw-r--r--pkgs/tools/security/gpg-tui/default.nix53
-rw-r--r--pkgs/tools/security/gpgstats/default.nix6
-rw-r--r--pkgs/tools/security/grype/default.nix39
-rw-r--r--pkgs/tools/security/haka/default.nix11
-rw-r--r--pkgs/tools/security/hakrawler/default.nix30
-rw-r--r--pkgs/tools/security/hash-identifier/default.nix27
-rw-r--r--pkgs/tools/security/hash-slinger/default.nix10
-rw-r--r--pkgs/tools/security/hash_extender/default.nix4
-rw-r--r--pkgs/tools/security/hashcash/default.nix10
-rw-r--r--pkgs/tools/security/hashcat-utils/default.nix6
-rw-r--r--pkgs/tools/security/hashcat/default.nix16
-rw-r--r--pkgs/tools/security/hashdeep/default.nix20
-rw-r--r--pkgs/tools/security/haveged/default.nix8
-rw-r--r--pkgs/tools/security/hcxdumptool/default.nix6
-rw-r--r--pkgs/tools/security/hcxtools/default.nix9
-rw-r--r--pkgs/tools/security/hfinger/default.nix36
-rw-r--r--pkgs/tools/security/hologram/default.nix10
-rw-r--r--pkgs/tools/security/hologram/deps.nix110
-rw-r--r--pkgs/tools/security/honeytrap/default.nix28
-rw-r--r--pkgs/tools/security/honggfuzz/default.nix18
-rw-r--r--pkgs/tools/security/httpdump/default.nix29
-rw-r--r--pkgs/tools/security/httpx/default.nix30
-rw-r--r--pkgs/tools/security/ibm-sw-tpm2/default.nix4
-rw-r--r--pkgs/tools/security/ic-keysmith/default.nix22
-rw-r--r--pkgs/tools/security/ifdnfc/default.nix6
-rw-r--r--pkgs/tools/security/ike-scan/default.nix54
-rw-r--r--pkgs/tools/security/ipscan/default.nix13
-rw-r--r--pkgs/tools/security/jadx/default.nix10
-rw-r--r--pkgs/tools/security/jd-gui/default.nix16
-rw-r--r--pkgs/tools/security/john/default.nix6
-rw-r--r--pkgs/tools/security/jwt-cli/default.nix15
-rw-r--r--pkgs/tools/security/kbs2/default.nix22
-rw-r--r--pkgs/tools/security/keybase/default.nix12
-rw-r--r--pkgs/tools/security/keybase/gui.nix18
-rw-r--r--pkgs/tools/security/keybase/kbfs.nix4
-rw-r--r--pkgs/tools/security/keycard-cli/default.nix8
-rw-r--r--pkgs/tools/security/keysmith/default.nix17
-rw-r--r--pkgs/tools/security/kiterunner/default.nix39
-rw-r--r--pkgs/tools/security/knockknock/default.nix4
-rw-r--r--pkgs/tools/security/knockpy/default.nix38
-rw-r--r--pkgs/tools/security/kpcli/default.nix17
-rw-r--r--pkgs/tools/security/kubei/default.nix31
-rw-r--r--pkgs/tools/security/kubesec/default.nix29
-rw-r--r--pkgs/tools/security/kwalletcli/default.nix8
-rw-r--r--pkgs/tools/security/lastpass-cli/default.nix32
-rw-r--r--pkgs/tools/security/ldeep/default.nix38
-rw-r--r--pkgs/tools/security/lesspass-cli/default.nix8
-rw-r--r--pkgs/tools/security/lethe/default.nix29
-rw-r--r--pkgs/tools/security/libacr38u/default.nix11
-rw-r--r--pkgs/tools/security/libmodsecurity/default.nix10
-rw-r--r--pkgs/tools/security/libtpms/default.nix41
-rw-r--r--pkgs/tools/security/logkeys/default.nix4
-rw-r--r--pkgs/tools/security/lynis/default.nix12
-rw-r--r--pkgs/tools/security/masscan/default.nix35
-rw-r--r--pkgs/tools/security/mbox/default.nix6
-rw-r--r--pkgs/tools/security/medusa/default.nix4
-rw-r--r--pkgs/tools/security/meo/default.nix10
-rw-r--r--pkgs/tools/security/metasploit/Gemfile2
-rw-r--r--pkgs/tools/security/metasploit/Gemfile.lock372
-rw-r--r--pkgs/tools/security/metasploit/default.nix23
-rw-r--r--pkgs/tools/security/metasploit/gemset.nix656
-rwxr-xr-xpkgs/tools/security/metasploit/update.sh17
-rw-r--r--pkgs/tools/security/mfcuk/default.nix6
-rw-r--r--pkgs/tools/security/mfoc/default.nix6
-rw-r--r--pkgs/tools/security/minica/default.nix34
-rw-r--r--pkgs/tools/security/minio-certgen/default.nix22
-rw-r--r--pkgs/tools/security/minisign/default.nix4
-rw-r--r--pkgs/tools/security/mkpasswd/default.nix4
-rw-r--r--pkgs/tools/security/mkrand/default.nix6
-rw-r--r--pkgs/tools/security/mktemp/default.nix4
-rw-r--r--pkgs/tools/security/modsecurity/default.nix8
-rw-r--r--pkgs/tools/security/monkeysphere/default.nix14
-rw-r--r--pkgs/tools/security/monsoon/default.nix32
-rw-r--r--pkgs/tools/security/mpw/default.nix4
-rw-r--r--pkgs/tools/security/munge/default.nix4
-rw-r--r--pkgs/tools/security/naabu/default.nix38
-rw-r--r--pkgs/tools/security/nasty/default.nix4
-rw-r--r--pkgs/tools/security/nbtscanner/default.nix29
-rw-r--r--pkgs/tools/security/ncrack/default.nix23
-rw-r--r--pkgs/tools/security/neopg/default.nix9
-rw-r--r--pkgs/tools/security/nitrokey-app/default.nix15
-rw-r--r--pkgs/tools/security/nitrokey-app/udev-rules.nix11
-rw-r--r--pkgs/tools/security/nmap-unfree/default.nix65
-rw-r--r--pkgs/tools/security/nmap/default.nix6
-rw-r--r--pkgs/tools/security/nmap/qt.nix28
-rw-r--r--pkgs/tools/security/nosqli/default.nix25
-rw-r--r--pkgs/tools/security/notary/default.nix6
-rw-r--r--pkgs/tools/security/nsjail/001-fix-bison-link-error.patch30
-rw-r--r--pkgs/tools/security/nsjail/default.nix13
-rw-r--r--pkgs/tools/security/ntlmrecon/default.nix35
-rw-r--r--pkgs/tools/security/nuclei/default.nix40
-rw-r--r--pkgs/tools/security/nwipe/default.nix38
-rw-r--r--pkgs/tools/security/oath-toolkit/default.nix44
-rwxr-xr-xpkgs/tools/security/oath-toolkit/update.sh50
-rw-r--r--pkgs/tools/security/omapd/default.nix4
-rw-r--r--pkgs/tools/security/onesixtyone/default.nix4
-rw-r--r--pkgs/tools/security/onioncircuits/default.nix10
-rw-r--r--pkgs/tools/security/onlykey-cli/default.nix24
-rw-r--r--pkgs/tools/security/open-ecard/default.nix10
-rw-r--r--pkgs/tools/security/opencryptoki/default.nix4
-rw-r--r--pkgs/tools/security/opensc/default.nix20
-rw-r--r--pkgs/tools/security/ossec/default.nix19
-rw-r--r--pkgs/tools/security/p0f/default.nix8
-rw-r--r--pkgs/tools/security/pamtester/default.nix4
-rw-r--r--pkgs/tools/security/paperkey/default.nix4
-rw-r--r--pkgs/tools/security/pass/clip-wayland-support.patch113
-rw-r--r--pkgs/tools/security/pass/default.nix62
-rw-r--r--pkgs/tools/security/pass/extensions/audit/default.nix7
-rw-r--r--pkgs/tools/security/pass/extensions/checkup.nix26
-rw-r--r--pkgs/tools/security/pass/extensions/default.nix4
-rw-r--r--pkgs/tools/security/pass/extensions/genphrase.nix8
-rw-r--r--pkgs/tools/security/pass/extensions/import.nix73
-rw-r--r--pkgs/tools/security/pass/extensions/otp.nix4
-rw-r--r--pkgs/tools/security/pass/extensions/tomb.nix4
-rw-r--r--pkgs/tools/security/pass/extensions/update.nix6
-rw-r--r--pkgs/tools/security/pass/no-darwin-getopt.patch14
-rw-r--r--pkgs/tools/security/pass/rofi-pass.nix12
-rw-r--r--pkgs/tools/security/pass/set-correct-program-name-for-sleep.patch19
-rw-r--r--pkgs/tools/security/passff-host/default.nix4
-rw-r--r--pkgs/tools/security/passphrase2pgp/default.nix27
-rw-r--r--pkgs/tools/security/pbis/default.nix8
-rw-r--r--pkgs/tools/security/pcsc-cyberjack/default.nix8
-rw-r--r--pkgs/tools/security/pcsc-safenet/default.nix96
-rw-r--r--pkgs/tools/security/pcsc-scm-scl011/default.nix10
-rw-r--r--pkgs/tools/security/pcsclite/default.nix49
-rw-r--r--pkgs/tools/security/pcsctools/default.nix39
-rw-r--r--pkgs/tools/security/pdfcrack/default.nix2
-rw-r--r--pkgs/tools/security/pgpdump/default.nix6
-rw-r--r--pkgs/tools/security/phrasendrescher/default.nix6
-rw-r--r--pkgs/tools/security/pinentry/default.nix10
-rw-r--r--pkgs/tools/security/pinentry/mac.nix15
-rw-r--r--pkgs/tools/security/pius/default.nix8
-rw-r--r--pkgs/tools/security/plasma-pass/default.nix41
-rw-r--r--pkgs/tools/security/polkit-gnome/default.nix10
-rw-r--r--pkgs/tools/security/proxmark3/default.nix8
-rw-r--r--pkgs/tools/security/proxmark3/proxmark3-rrg.nix38
-rw-r--r--pkgs/tools/security/prs/default.nix55
-rw-r--r--pkgs/tools/security/pwdsafety/default.nix25
-rw-r--r--pkgs/tools/security/pwgen/default.nix4
-rw-r--r--pkgs/tools/security/pwncat/default.nix24
-rw-r--r--pkgs/tools/security/pyrit/default.nix4
-rw-r--r--pkgs/tools/security/qdigidoc/default.nix15
-rw-r--r--pkgs/tools/security/qdigidoc/qt5.15.patch39
-rw-r--r--pkgs/tools/security/quill-qr/default.nix45
-rw-r--r--pkgs/tools/security/quill/default.nix46
-rw-r--r--pkgs/tools/security/radamsa/default.nix8
-rw-r--r--pkgs/tools/security/rage/default.nix26
-rw-r--r--pkgs/tools/security/rarcrack/default.nix9
-rw-r--r--pkgs/tools/security/rbw/default.nix83
-rw-r--r--pkgs/tools/security/rekor/default.nix43
-rw-r--r--pkgs/tools/security/rhash/default.nix19
-rw-r--r--pkgs/tools/security/ripasso/cursive.nix26
-rw-r--r--pkgs/tools/security/ripasso/fix-tests.patch77
-rw-r--r--pkgs/tools/security/rng-tools/default.nix10
-rw-r--r--pkgs/tools/security/rnp/default.nix56
-rw-r--r--pkgs/tools/security/rustscan/default.nix38
-rw-r--r--pkgs/tools/security/safe/default.nix4
-rw-r--r--pkgs/tools/security/saml2aws/default.nix16
-rw-r--r--pkgs/tools/security/sammler/default.nix30
-rw-r--r--pkgs/tools/security/sbsigntool/default.nix8
-rw-r--r--pkgs/tools/security/scallion/default.nix6
-rw-r--r--pkgs/tools/security/scilla/default.nix26
-rw-r--r--pkgs/tools/security/scrypt/default.nix22
-rw-r--r--pkgs/tools/security/seccure/default.nix10
-rw-r--r--pkgs/tools/security/secp256k1/default.nix49
-rw-r--r--pkgs/tools/security/secretscanner/default.nix37
-rw-r--r--pkgs/tools/security/sedutil/default.nix4
-rw-r--r--pkgs/tools/security/sequoia/default.nix64
-rw-r--r--pkgs/tools/security/sha1collisiondetection/default.nix4
-rw-r--r--pkgs/tools/security/shc/default.nix6
-rw-r--r--pkgs/tools/security/sheesy-cli/default.nix37
-rw-r--r--pkgs/tools/security/shhgit/default.nix26
-rw-r--r--pkgs/tools/security/signify/default.nix10
-rw-r--r--pkgs/tools/security/signing-party/default.nix32
-rw-r--r--pkgs/tools/security/sigurlx/default.nix25
-rw-r--r--pkgs/tools/security/simple-tpm-pk11/default.nix4
-rw-r--r--pkgs/tools/security/sipvicious/default.nix27
-rw-r--r--pkgs/tools/security/slowhttptest/default.nix26
-rw-r--r--pkgs/tools/security/sn0int/default.nix26
-rw-r--r--pkgs/tools/security/snallygaster/default.nix38
-rw-r--r--pkgs/tools/security/snow/default.nix25
-rw-r--r--pkgs/tools/security/snowcrash/default.nix33
-rw-r--r--pkgs/tools/security/softhsm/default.nix6
-rw-r--r--pkgs/tools/security/sonar-scanner-cli/default.nix47
-rw-r--r--pkgs/tools/security/sops/default.nix11
-rw-r--r--pkgs/tools/security/spectre-meltdown-checker/default.nix10
-rw-r--r--pkgs/tools/security/srm/default.nix4
-rw-r--r--pkgs/tools/security/ssb/default.nix25
-rw-r--r--pkgs/tools/security/ssdeep/default.nix8
-rw-r--r--pkgs/tools/security/ssh-audit/default.nix27
-rw-r--r--pkgs/tools/security/ssh-to-pgp/default.nix29
-rw-r--r--pkgs/tools/security/sshchecker/default.nix29
-rw-r--r--pkgs/tools/security/sshguard/default.nix12
-rw-r--r--pkgs/tools/security/sshuttle/default.nix25
-rw-r--r--pkgs/tools/security/sslscan/default.nix19
-rw-r--r--pkgs/tools/security/ssss/default.nix53
-rw-r--r--pkgs/tools/security/steghide/default.nix30
-rw-r--r--pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc34.patch42
-rw-r--r--pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc4.patch46
-rw-r--r--pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc43.patch349
-rw-r--r--pkgs/tools/security/stegseek/default.nix44
-rw-r--r--pkgs/tools/security/step-ca/default.nix46
-rw-r--r--pkgs/tools/security/step-ca/deps.nix291
-rw-r--r--pkgs/tools/security/step-cli/default.nix26
-rw-r--r--pkgs/tools/security/step-cli/deps.nix453
-rw-r--r--pkgs/tools/security/stoken/default.nix8
-rw-r--r--pkgs/tools/security/stricat/default.nix10
-rw-r--r--pkgs/tools/security/su-exec/default.nix4
-rw-r--r--pkgs/tools/security/subjs/default.nix32
-rw-r--r--pkgs/tools/security/sudo/default.nix52
-rw-r--r--pkgs/tools/security/sudolikeaboss/default.nix10
-rw-r--r--pkgs/tools/security/super/0001-Remove-references-to-dropped-sys_nerr-sys_errlist-fo.patch51
-rw-r--r--pkgs/tools/security/super/default.nix5
-rw-r--r--pkgs/tools/security/swtpm/default.nix76
-rw-r--r--pkgs/tools/security/swtpm/python-installation.patch60
-rw-r--r--pkgs/tools/security/tboot/default.nix23
-rw-r--r--pkgs/tools/security/tboot/tboot-add-well-known-secret-option-to-lcp_writepol.patch50
-rw-r--r--pkgs/tools/security/tcpcrypt/default.nix6
-rw-r--r--pkgs/tools/security/teler/default.nix37
-rw-r--r--pkgs/tools/security/terrascan/default.nix33
-rw-r--r--pkgs/tools/security/thc-hydra/default.nix10
-rw-r--r--pkgs/tools/security/thc-ipv6/default.nix31
-rw-r--r--pkgs/tools/security/theharvester/default.nix52
-rw-r--r--pkgs/tools/security/tor/default.nix42
-rw-r--r--pkgs/tools/security/tor/tor-arm.nix8
-rw-r--r--pkgs/tools/security/tor/torsocks.nix12
-rw-r--r--pkgs/tools/security/tpm-luks/default.nix5
-rw-r--r--pkgs/tools/security/tpm-quote-tools/default.nix10
-rw-r--r--pkgs/tools/security/tpm-tools/default.nix4
-rw-r--r--pkgs/tools/security/tpm2-abrmd/default.nix6
-rw-r--r--pkgs/tools/security/tpm2-tools/default.nix16
-rw-r--r--pkgs/tools/security/traitor/default.nix30
-rw-r--r--pkgs/tools/security/trousers/allow-non-tss-config-file-owner.patch4
-rw-r--r--pkgs/tools/security/trousers/default.nix12
-rw-r--r--pkgs/tools/security/truecrack/default.nix40
-rw-r--r--pkgs/tools/security/uddup/default.nix35
-rw-r--r--pkgs/tools/security/urlhunter/default.nix29
-rw-r--r--pkgs/tools/security/vault/default.nix22
-rw-r--r--pkgs/tools/security/vault/vault-bin.nix31
-rw-r--r--pkgs/tools/security/vaultwarden/default.nix (renamed from pkgs/tools/security/bitwarden_rs/default.nix)29
-rw-r--r--pkgs/tools/security/vaultwarden/vault.nix28
-rw-r--r--pkgs/tools/security/volatility/default.nix18
-rw-r--r--pkgs/tools/security/vulnix/default.nix10
-rw-r--r--pkgs/tools/security/wad/default.nix43
-rw-r--r--pkgs/tools/security/wafw00f/default.nix34
-rw-r--r--pkgs/tools/security/wapiti/default.nix106
-rw-r--r--pkgs/tools/security/wipe/default.nix6
-rw-r--r--pkgs/tools/security/wprecon/default.nix27
-rw-r--r--pkgs/tools/security/wpscan/Gemfile.lock72
-rw-r--r--pkgs/tools/security/wpscan/default.nix8
-rw-r--r--pkgs/tools/security/wpscan/gemset.nix105
-rwxr-xr-xpkgs/tools/security/wpscan/update.sh11
-rw-r--r--pkgs/tools/security/xcat/default.nix50
-rw-r--r--pkgs/tools/security/xorex/default.nix38
-rw-r--r--pkgs/tools/security/xortool/default.nix35
-rw-r--r--pkgs/tools/security/yarGen/default.nix58
-rw-r--r--pkgs/tools/security/yara/default.nix33
-rw-r--r--pkgs/tools/security/yubikey-agent/default.nix23
-rw-r--r--pkgs/tools/security/yubikey-agent/use-piv-go-75.patch22
-rw-r--r--pkgs/tools/security/yubikey-agent/yubikey-agent.service35
-rw-r--r--pkgs/tools/security/zdns/default.nix28
-rw-r--r--pkgs/tools/security/zgrab2/default.nix28
-rw-r--r--pkgs/tools/security/zmap/default.nix6
-rw-r--r--pkgs/tools/security/zsteg/Gemfile2
-rw-r--r--pkgs/tools/security/zsteg/Gemfile.lock19
-rw-r--r--pkgs/tools/security/zsteg/default.nix16
-rw-r--r--pkgs/tools/security/zsteg/gemset.nix44
-rw-r--r--pkgs/tools/security/zzuf/default.nix8
-rw-r--r--pkgs/tools/system/acct/default.nix4
-rw-r--r--pkgs/tools/system/acpica-tools/default.nix4
-rw-r--r--pkgs/tools/system/actkbd/default.nix4
-rw-r--r--pkgs/tools/system/amtterm/default.nix4
-rw-r--r--pkgs/tools/system/at/default.nix8
-rw-r--r--pkgs/tools/system/augeas/default.nix6
-rw-r--r--pkgs/tools/system/auto-cpufreq/default.nix39
-rw-r--r--pkgs/tools/system/auto-cpufreq/prevent-install-and-copy.patch168
-rw-r--r--pkgs/tools/system/awstats/default.nix10
-rw-r--r--pkgs/tools/system/bar/default.nix8
-rw-r--r--pkgs/tools/system/bfs/default.nix12
-rw-r--r--pkgs/tools/system/bottom/default.nix52
-rw-r--r--pkgs/tools/system/bpytop/default.nix17
-rw-r--r--pkgs/tools/system/chase/default.nix6
-rw-r--r--pkgs/tools/system/clinfo/default.nix25
-rw-r--r--pkgs/tools/system/cm-rgb/default.nix14
-rw-r--r--pkgs/tools/system/collectd/data.nix2
-rw-r--r--pkgs/tools/system/collectd/default.nix14
-rw-r--r--pkgs/tools/system/collectd/plugins.nix30
-rw-r--r--pkgs/tools/system/colorls/Gemfile.lock4
-rw-r--r--pkgs/tools/system/colorls/gemset.nix18
-rw-r--r--pkgs/tools/system/consul-template/default.nix23
-rw-r--r--pkgs/tools/system/cron/default.nix4
-rw-r--r--pkgs/tools/system/ctop/default.nix10
-rw-r--r--pkgs/tools/system/daemon/default.nix29
-rw-r--r--pkgs/tools/system/daemonize/default.nix4
-rw-r--r--pkgs/tools/system/das_watchdog/default.nix6
-rw-r--r--pkgs/tools/system/datefudge/default.nix4
-rw-r--r--pkgs/tools/system/dcfldd/default.nix4
-rw-r--r--pkgs/tools/system/dd_rescue/default.nix5
-rw-r--r--pkgs/tools/system/ddrescue/default.nix4
-rw-r--r--pkgs/tools/system/ddrescueview/default.nix23
-rw-r--r--pkgs/tools/system/ddrutility/default.nix4
-rw-r--r--pkgs/tools/system/dfc/default.nix8
-rw-r--r--pkgs/tools/system/di/default.nix8
-rw-r--r--pkgs/tools/system/disk-filltest/default.nix4
-rw-r--r--pkgs/tools/system/dog/default.nix4
-rw-r--r--pkgs/tools/system/efibootmgr/default.nix6
-rw-r--r--pkgs/tools/system/efivar/default.nix11
-rw-r--r--pkgs/tools/system/envconsul/default.nix4
-rw-r--r--pkgs/tools/system/evemu/default.nix10
-rw-r--r--pkgs/tools/system/facter/default.nix16
-rw-r--r--pkgs/tools/system/fakechroot/default.nix22
-rw-r--r--pkgs/tools/system/fakeroot/default.nix42
-rw-r--r--pkgs/tools/system/fancy-motd/default.nix47
-rw-r--r--pkgs/tools/system/fcron/default.nix6
-rw-r--r--pkgs/tools/system/fdisk/default.nix6
-rw-r--r--pkgs/tools/system/fio/default.nix20
-rw-r--r--pkgs/tools/system/foreman/gemset.nix2
-rw-r--r--pkgs/tools/system/foremost/default.nix4
-rw-r--r--pkgs/tools/system/freeipmi/default.nix13
-rw-r--r--pkgs/tools/system/gdmap/default.nix6
-rw-r--r--pkgs/tools/system/gdu/default.nix52
-rw-r--r--pkgs/tools/system/go-audit/default.nix29
-rw-r--r--pkgs/tools/system/gotop/default.nix18
-rw-r--r--pkgs/tools/system/gptfdisk/default.nix17
-rw-r--r--pkgs/tools/system/gptman/default.nix24
-rw-r--r--pkgs/tools/system/gt5/default.nix10
-rw-r--r--pkgs/tools/system/hardinfo/default.nix6
-rw-r--r--pkgs/tools/system/hardlink/default.nix4
-rw-r--r--pkgs/tools/system/hiera-eyaml/gemset.nix2
-rw-r--r--pkgs/tools/system/honcho/default.nix11
-rw-r--r--pkgs/tools/system/hostctl/default.nix36
-rw-r--r--pkgs/tools/system/htop/default.nix34
-rw-r--r--pkgs/tools/system/hwinfo/default.nix12
-rw-r--r--pkgs/tools/system/idle3tools/default.nix8
-rw-r--r--pkgs/tools/system/illum/default.nix10
-rw-r--r--pkgs/tools/system/incron/default.nix6
-rw-r--r--pkgs/tools/system/inxi/default.nix23
-rw-r--r--pkgs/tools/system/ioping/default.nix4
-rw-r--r--pkgs/tools/system/iops/default.nix4
-rw-r--r--pkgs/tools/system/ior/default.nix10
-rw-r--r--pkgs/tools/system/ipmitool/default.nix15
-rw-r--r--pkgs/tools/system/ipmiutil/default.nix5
-rw-r--r--pkgs/tools/system/java-service-wrapper/default.nix8
-rw-r--r--pkgs/tools/system/journalwatch/default.nix4
-rw-r--r--pkgs/tools/system/jsvc/default.nix40
-rw-r--r--pkgs/tools/system/jump/default.nix8
-rw-r--r--pkgs/tools/system/kmon/default.nix10
-rw-r--r--pkgs/tools/system/ledmon/default.nix6
-rw-r--r--pkgs/tools/system/loadwatch/default.nix6
-rw-r--r--pkgs/tools/system/localtime/default.nix4
-rw-r--r--pkgs/tools/system/logcheck/default.nix10
-rw-r--r--pkgs/tools/system/logrotate/default.nix35
-rw-r--r--pkgs/tools/system/lr/default.nix4
-rw-r--r--pkgs/tools/system/lshw/default.nix6
-rw-r--r--pkgs/tools/system/mcron/default.nix6
-rw-r--r--pkgs/tools/system/memtester/default.nix8
-rw-r--r--pkgs/tools/system/minijail/default.nix4
-rw-r--r--pkgs/tools/system/mlc/default.nix30
-rw-r--r--pkgs/tools/system/monit/default.nix20
-rw-r--r--pkgs/tools/system/mq-cli/default.nix2
-rw-r--r--pkgs/tools/system/nats-top/default.nix25
-rw-r--r--pkgs/tools/system/natscli/default.nix25
-rw-r--r--pkgs/tools/system/netdata/default.nix45
-rw-r--r--pkgs/tools/system/netdata/go.d.plugin.nix8
-rw-r--r--pkgs/tools/system/netdata/ipc-socket-in-run.patch13
-rw-r--r--pkgs/tools/system/netdata/no-files-in-etc-and-var.patch58
-rw-r--r--pkgs/tools/system/nkeys/default.nix25
-rw-r--r--pkgs/tools/system/nq/default.nix10
-rw-r--r--pkgs/tools/system/nvtop/default.nix22
-rw-r--r--pkgs/tools/system/opencl-info/default.nix12
-rw-r--r--pkgs/tools/system/opencl-info/opencl-info-clhpp2.diff22
-rw-r--r--pkgs/tools/system/pciutils/default.nix30
-rw-r--r--pkgs/tools/system/pcstat/default.nix6
-rw-r--r--pkgs/tools/system/plan9port/darwin-cfframework.patch24
-rw-r--r--pkgs/tools/system/plan9port/darwin-sw_vers.patch47
-rw-r--r--pkgs/tools/system/plan9port/default.nix33
-rw-r--r--pkgs/tools/system/procodile/gemset.nix2
-rw-r--r--pkgs/tools/system/proot/default.nix8
-rw-r--r--pkgs/tools/system/ps_mem/default.nix6
-rw-r--r--pkgs/tools/system/psensor/default.nix4
-rw-r--r--pkgs/tools/system/psstop/default.nix6
-rw-r--r--pkgs/tools/system/r10k/gemset.nix2
-rw-r--r--pkgs/tools/system/retry/default.nix23
-rw-r--r--pkgs/tools/system/rocm-smi/default.nix46
-rw-r--r--pkgs/tools/system/rofi-systemd/default.nix21
-rw-r--r--pkgs/tools/system/rowhammer-test/default.nix6
-rw-r--r--pkgs/tools/system/rsyslog/default.nix10
-rw-r--r--pkgs/tools/system/runit/default.nix12
-rw-r--r--pkgs/tools/system/s-tui/default.nix4
-rw-r--r--pkgs/tools/system/s6-rc/default.nix8
-rw-r--r--pkgs/tools/system/s6/default.nix4
-rw-r--r--pkgs/tools/system/safe-rm/default.nix34
-rw-r--r--pkgs/tools/system/safecopy/default.nix8
-rw-r--r--pkgs/tools/system/setserial/default.nix6
-rw-r--r--pkgs/tools/system/sg3_utils/default.nix4
-rw-r--r--pkgs/tools/system/sleuthkit/default.nix15
-rw-r--r--pkgs/tools/system/smartmontools/default.nix26
-rw-r--r--pkgs/tools/system/snooze/default.nix19
-rw-r--r--pkgs/tools/system/socklog/default.nix8
-rw-r--r--pkgs/tools/system/stress-ng/default.nix12
-rw-r--r--pkgs/tools/system/stress/default.nix6
-rw-r--r--pkgs/tools/system/stressapptest/default.nix27
-rw-r--r--pkgs/tools/system/suid-chroot/default.nix4
-rw-r--r--pkgs/tools/system/supervise/default.nix6
-rw-r--r--pkgs/tools/system/symlinks/default.nix4
-rw-r--r--pkgs/tools/system/syslog-ng-incubator/default.nix8
-rw-r--r--pkgs/tools/system/syslog-ng/default.nix8
-rw-r--r--pkgs/tools/system/systemd-journal2gelf/default.nix10
-rw-r--r--pkgs/tools/system/taskspooler/default.nix31
-rw-r--r--pkgs/tools/system/testdisk/default.nix20
-rw-r--r--pkgs/tools/system/thermald/default.nix59
-rw-r--r--pkgs/tools/system/thinkfan/default.nix73
-rw-r--r--pkgs/tools/system/throttled/default.nix10
-rw-r--r--pkgs/tools/system/tm/default.nix30
-rw-r--r--pkgs/tools/system/tre-command/default.nix10
-rw-r--r--pkgs/tools/system/tree/default.nix14
-rw-r--r--pkgs/tools/system/ts/default.nix4
-rw-r--r--pkgs/tools/system/tuptime/default.nix12
-rw-r--r--pkgs/tools/system/uefitool/common.nix6
-rw-r--r--pkgs/tools/system/uefitool/variants.nix4
-rw-r--r--pkgs/tools/system/undaemonize/default.nix8
-rw-r--r--pkgs/tools/system/uptimed/default.nix12
-rw-r--r--pkgs/tools/system/uroboros/default.nix26
-rw-r--r--pkgs/tools/system/vbetool/default.nix6
-rw-r--r--pkgs/tools/system/vboot_reference/default.nix8
-rw-r--r--pkgs/tools/system/which/default.nix4
-rw-r--r--pkgs/tools/system/wslu/default.nix23
-rw-r--r--pkgs/tools/system/wsmancli/default.nix7
-rw-r--r--pkgs/tools/system/yeshup/default.nix4
-rw-r--r--pkgs/tools/system/ytop/default.nix27
-rw-r--r--pkgs/tools/system/zenith/default.nix30
-rw-r--r--pkgs/tools/text/a2ps/default.nix4
-rw-r--r--pkgs/tools/text/agrep/default.nix6
-rw-r--r--pkgs/tools/text/aha/default.nix4
-rw-r--r--pkgs/tools/text/amber/default.nix14
-rw-r--r--pkgs/tools/text/angle-grinder/default.nix25
-rw-r--r--pkgs/tools/text/ansifilter/default.nix10
-rw-r--r--pkgs/tools/text/ascii/default.nix4
-rw-r--r--pkgs/tools/text/asciigraph/default.nix22
-rw-r--r--pkgs/tools/text/bcat/gemset.nix2
-rw-r--r--pkgs/tools/text/boxes/default.nix6
-rw-r--r--pkgs/tools/text/catdoc/default.nix4
-rw-r--r--pkgs/tools/text/catdocx/default.nix2
-rw-r--r--pkgs/tools/text/cconv/default.nix17
-rw-r--r--pkgs/tools/text/chars/default.nix28
-rw-r--r--pkgs/tools/text/choose/default.nix25
-rw-r--r--pkgs/tools/text/chroma/default.nix42
-rw-r--r--pkgs/tools/text/cmigemo/default.nix35
-rw-r--r--pkgs/tools/text/cmigemo/no-http-tool-check.patch23
-rw-r--r--pkgs/tools/text/codesearch/default.nix12
-rw-r--r--pkgs/tools/text/codesearch/deps.nix3
-rw-r--r--pkgs/tools/text/colordiff/default.nix38
-rw-r--r--pkgs/tools/text/coloursum/default.nix8
-rw-r--r--pkgs/tools/text/convertlit/default.nix6
-rw-r--r--pkgs/tools/text/copyright-update/default.nix4
-rw-r--r--pkgs/tools/text/csvkit/default.nix31
-rw-r--r--pkgs/tools/text/dadadodo/default.nix8
-rw-r--r--pkgs/tools/text/dcs/default.nix46
-rw-r--r--pkgs/tools/text/dfmt/default.nix27
-rw-r--r--pkgs/tools/text/diction/default.nix6
-rw-r--r--pkgs/tools/text/diffr/default.nix8
-rw-r--r--pkgs/tools/text/diffstat/default.nix8
-rw-r--r--pkgs/tools/text/diffutils/default.nix13
-rw-r--r--pkgs/tools/text/dirdiff/default.nix59
-rw-r--r--pkgs/tools/text/dirdiff/dirdiff-2.1-vars.patch32
-rw-r--r--pkgs/tools/text/discount/default.nix8
-rw-r--r--pkgs/tools/text/dos2unix/default.nix9
-rw-r--r--pkgs/tools/text/each/default.nix25
-rw-r--r--pkgs/tools/text/ebook-tools/default.nix13
-rw-r--r--pkgs/tools/text/enca/default.nix6
-rw-r--r--pkgs/tools/text/enscript/default.nix6
-rw-r--r--pkgs/tools/text/epubcheck/default.nix4
-rw-r--r--pkgs/tools/text/esh/default.nix4
-rw-r--r--pkgs/tools/text/fanficfare/default.nix7
-rw-r--r--pkgs/tools/text/fastmod/default.nix13
-rw-r--r--pkgs/tools/text/frangipanni/default.nix22
-rw-r--r--pkgs/tools/text/fst/0001-cargo-lockfile.patch935
-rw-r--r--pkgs/tools/text/fst/default.nix45
-rw-r--r--pkgs/tools/text/gawk/default.nix7
-rw-r--r--pkgs/tools/text/gawk/gawk-with-extensions.nix3
-rw-r--r--pkgs/tools/text/gawk/gawkextlib.nix10
-rw-r--r--pkgs/tools/text/gist/default.nix4
-rw-r--r--pkgs/tools/text/gjo/default.nix6
-rw-r--r--pkgs/tools/text/glogg/default.nix8
-rw-r--r--pkgs/tools/text/gnugrep/default.nix8
-rw-r--r--pkgs/tools/text/gnupatch/default.nix8
-rw-r--r--pkgs/tools/text/gnused/422.nix8
-rw-r--r--pkgs/tools/text/gnused/default.nix8
-rw-r--r--pkgs/tools/text/gpt2tc/0001-add-python-shebang.patch10
-rw-r--r--pkgs/tools/text/gpt2tc/default.nix44
-rw-r--r--pkgs/tools/text/grin/default.nix6
-rw-r--r--pkgs/tools/text/grip-search/default.nix6
-rw-r--r--pkgs/tools/text/groff/default.nix44
-rw-r--r--pkgs/tools/text/groff/site.tmac3
-rw-r--r--pkgs/tools/text/gtranslator/default.nix20
-rw-r--r--pkgs/tools/text/gucci/default.nix4
-rw-r--r--pkgs/tools/text/highlight/default.nix14
-rw-r--r--pkgs/tools/text/hottext/default.nix100
-rw-r--r--pkgs/tools/text/html-tidy/default.nix8
-rw-r--r--pkgs/tools/text/html2text/default.nix8
-rw-r--r--pkgs/tools/text/icdiff/default.nix20
-rw-r--r--pkgs/tools/text/invoice2data/default.nix6
-rw-r--r--pkgs/tools/text/ispell/default.nix6
-rw-r--r--pkgs/tools/text/jbofihe/default.nix29
-rw-r--r--pkgs/tools/text/jsawk/default.nix14
-rw-r--r--pkgs/tools/text/jumanpp/default.nix14
-rw-r--r--pkgs/tools/text/kakasi/default.nix6
-rw-r--r--pkgs/tools/text/kdiff3/default.nix6
-rw-r--r--pkgs/tools/text/kramdown-rfc2629/Gemfile.lock17
-rw-r--r--pkgs/tools/text/kramdown-rfc2629/default.nix18
-rw-r--r--pkgs/tools/text/kramdown-rfc2629/gemset.nix33
-rw-r--r--pkgs/tools/text/kytea/default.nix6
-rw-r--r--pkgs/tools/text/l2md/default.nix32
-rw-r--r--pkgs/tools/text/languagetool/default.nix19
-rw-r--r--pkgs/tools/text/ledger2beancount/default.nix59
-rw-r--r--pkgs/tools/text/link-grammar/default.nix55
-rw-r--r--pkgs/tools/text/lv/default.nix4
-rw-r--r--pkgs/tools/text/m2r/default.nix32
-rw-r--r--pkgs/tools/text/mairix/default.nix8
-rw-r--r--pkgs/tools/text/mark/default.nix24
-rw-r--r--pkgs/tools/text/markdown-pp/default.nix14
-rw-r--r--pkgs/tools/text/mawk/default.nix4
-rw-r--r--pkgs/tools/text/mb2md/default.nix4
-rw-r--r--pkgs/tools/text/mdbook-mermaid/default.nix24
-rw-r--r--pkgs/tools/text/mdbook/default.nix12
-rw-r--r--pkgs/tools/text/mdcat/default.nix54
-rw-r--r--pkgs/tools/text/mecab/default.nix4
-rw-r--r--pkgs/tools/text/miller/default.nix10
-rw-r--r--pkgs/tools/text/mpage/default.nix7
-rw-r--r--pkgs/tools/text/multitran/data/default.nix6
-rw-r--r--pkgs/tools/text/multitran/libbtree/default.nix6
-rw-r--r--pkgs/tools/text/multitran/libfacet/default.nix8
-rw-r--r--pkgs/tools/text/multitran/libmtquery/default.nix6
-rw-r--r--pkgs/tools/text/multitran/libmtsupport/default.nix6
-rw-r--r--pkgs/tools/text/multitran/mtutils/default.nix8
-rw-r--r--pkgs/tools/text/namazu/default.nix30
-rw-r--r--pkgs/tools/text/nawk/default.nix28
-rw-r--r--pkgs/tools/text/nkf/default.nix8
-rw-r--r--pkgs/tools/text/num-utils/default.nix29
-rw-r--r--pkgs/tools/text/numdiff/default.nix9
-rw-r--r--pkgs/tools/text/ocrmypdf/0001-Make-compatible-with-pdfminer.six-version-20200720.patch52
-rw-r--r--pkgs/tools/text/ocrmypdf/default.nix25
-rw-r--r--pkgs/tools/text/odt2txt/default.nix6
-rw-r--r--pkgs/tools/text/opencc/default.nix15
-rw-r--r--pkgs/tools/text/papertrail/default.nix6
-rw-r--r--pkgs/tools/text/papertrail/gemset.nix2
-rw-r--r--pkgs/tools/text/par/default.nix9
-rw-r--r--pkgs/tools/text/patchutils/generic.nix4
-rw-r--r--pkgs/tools/text/pbgopy/default.nix22
-rw-r--r--pkgs/tools/text/peco/default.nix17
-rw-r--r--pkgs/tools/text/peco/deps.nix57
-rw-r--r--pkgs/tools/text/platinum-searcher/default.nix6
-rw-r--r--pkgs/tools/text/pn/default.nix24
-rw-r--r--pkgs/tools/text/podiff/default.nix12
-rw-r--r--pkgs/tools/text/poedit/default.nix32
-rw-r--r--pkgs/tools/text/popfile/default.nix9
-rw-r--r--pkgs/tools/text/proselint/default.nix4
-rw-r--r--pkgs/tools/text/qgrep/default.nix12
-rw-r--r--pkgs/tools/text/qprint/default.nix8
-rw-r--r--pkgs/tools/text/qshowdiff/default.nix6
-rw-r--r--pkgs/tools/text/reckon/Gemfile.lock12
-rw-r--r--pkgs/tools/text/reckon/default.nix6
-rw-r--r--pkgs/tools/text/reckon/gemset.nix35
-rw-r--r--pkgs/tools/text/recode/default.nix12
-rw-r--r--pkgs/tools/text/replace/default.nix13
-rw-r--r--pkgs/tools/text/rgxg/default.nix18
-rw-r--r--pkgs/tools/text/ripgrep-all/default.nix9
-rw-r--r--pkgs/tools/text/ripgrep/default.nix35
-rw-r--r--pkgs/tools/text/robodoc/default.nix48
-rw-r--r--pkgs/tools/text/rpl/default.nix4
-rw-r--r--pkgs/tools/text/rs/default.nix4
-rw-r--r--pkgs/tools/text/rst2html5/default.nix21
-rw-r--r--pkgs/tools/text/ruby-zoom/gemset.nix2
-rw-r--r--pkgs/tools/text/ruplacer/default.nix10
-rw-r--r--pkgs/tools/text/schema2ldif/default.nix6
-rw-r--r--pkgs/tools/text/sd/default.nix19
-rw-r--r--pkgs/tools/text/sgml/jade/default.nix6
-rw-r--r--pkgs/tools/text/sgml/openjade/default.nix6
-rw-r--r--pkgs/tools/text/sgml/opensp/default.nix10
-rw-r--r--pkgs/tools/text/shfmt/default.nix23
-rw-r--r--pkgs/tools/text/shocco/default.nix4
-rw-r--r--pkgs/tools/text/sift/default.nix2
-rw-r--r--pkgs/tools/text/silver-searcher/default.nix10
-rw-r--r--pkgs/tools/text/snippetpixie/default.nix16
-rw-r--r--pkgs/tools/text/source-highlight/default.nix37
-rw-r--r--pkgs/tools/text/tab/default.nix18
-rw-r--r--pkgs/tools/text/transifex-client/default.nix6
-rw-r--r--pkgs/tools/text/txt2tags/default.nix8
-rw-r--r--pkgs/tools/text/ucg/default.nix40
-rw-r--r--pkgs/tools/text/ugrep/default.nix26
-rw-r--r--pkgs/tools/text/uni2ascii/default.nix10
-rw-r--r--pkgs/tools/text/unoconv/default.nix6
-rw-r--r--pkgs/tools/text/unrtf/default.nix18
-rw-r--r--pkgs/tools/text/untex/default.nix4
-rw-r--r--pkgs/tools/text/uwc/default.nix24
-rw-r--r--pkgs/tools/text/vale/default.nix16
-rw-r--r--pkgs/tools/text/vgrep/default.nix32
-rw-r--r--pkgs/tools/text/wdiff/default.nix20
-rw-r--r--pkgs/tools/text/wgetpaste/default.nix12
-rw-r--r--pkgs/tools/text/wrap/default.nix36
-rw-r--r--pkgs/tools/text/xidel/default.nix4
-rw-r--r--pkgs/tools/text/xml/basex/default.nix31
-rw-r--r--pkgs/tools/text/xml/html-xml-utils/default.nix8
-rw-r--r--pkgs/tools/text/xml/jing-trang/default.nix4
-rw-r--r--pkgs/tools/text/xml/rnv/default.nix4
-rw-r--r--pkgs/tools/text/xml/rxp/default.nix6
-rw-r--r--pkgs/tools/text/xml/xml2/default.nix6
-rw-r--r--pkgs/tools/text/xml/xmldiff/default.nix41
-rw-r--r--pkgs/tools/text/xml/xmlformat/default.nix6
-rw-r--r--pkgs/tools/text/xml/xmloscopy/default.nix2
-rw-r--r--pkgs/tools/text/xml/xmlstarlet/default.nix10
-rw-r--r--pkgs/tools/text/xml/xpf/default.nix8
-rw-r--r--pkgs/tools/text/xsv/default.nix8
-rw-r--r--pkgs/tools/text/xurls/default.nix4
-rw-r--r--pkgs/tools/text/yaml-merge/default.nix6
-rw-r--r--pkgs/tools/text/zimreader/default.nix38
-rw-r--r--pkgs/tools/text/zimwriterfs/default.nix16
-rw-r--r--pkgs/tools/text/zoekt/default.nix29
-rw-r--r--pkgs/tools/text/zstxtns-utils/default.nix39
-rw-r--r--pkgs/tools/typesetting/asciidoc/default.nix55
-rw-r--r--pkgs/tools/typesetting/asciidoctor/Gemfile1
-rw-r--r--pkgs/tools/typesetting/asciidoctor/Gemfile.lock118
-rw-r--r--pkgs/tools/typesetting/asciidoctor/default.nix7
-rw-r--r--pkgs/tools/typesetting/asciidoctor/gemset.nix207
-rw-r--r--pkgs/tools/typesetting/asciidoctorj/default.nix20
-rw-r--r--pkgs/tools/typesetting/bibclean/default.nix5
-rw-r--r--pkgs/tools/typesetting/biber/default.nix26
-rw-r--r--pkgs/tools/typesetting/biblatex-check/default.nix8
-rw-r--r--pkgs/tools/typesetting/djvu2pdf/default.nix11
-rw-r--r--pkgs/tools/typesetting/docbook2odf/default.nix9
-rw-r--r--pkgs/tools/typesetting/docbook2x/default.nix7
-rw-r--r--pkgs/tools/typesetting/docbookrx/default.nix2
-rw-r--r--pkgs/tools/typesetting/docbookrx/gemset.nix2
-rw-r--r--pkgs/tools/typesetting/fop/default.nix19
-rw-r--r--pkgs/tools/typesetting/git-latexdiff/default.nix4
-rw-r--r--pkgs/tools/typesetting/halibut/default.nix4
-rw-r--r--pkgs/tools/typesetting/hevea/default.nix8
-rw-r--r--pkgs/tools/typesetting/htmldoc/default.nix33
-rw-r--r--pkgs/tools/typesetting/kindlegen/default.nix51
-rw-r--r--pkgs/tools/typesetting/kramdown-asciidoc/default.nix7
-rw-r--r--pkgs/tools/typesetting/kramdown-asciidoc/gemset.nix2
-rw-r--r--pkgs/tools/typesetting/lout/CVE-2019-19917-and-CVE-2019-19918.patch95
-rw-r--r--pkgs/tools/typesetting/lout/default.nix11
-rw-r--r--pkgs/tools/typesetting/lowdown/default.nix41
-rw-r--r--pkgs/tools/typesetting/lowdown/shared.patch41
-rw-r--r--pkgs/tools/typesetting/mmark/default.nix8
-rw-r--r--pkgs/tools/typesetting/multimarkdown/default.nix66
-rw-r--r--pkgs/tools/typesetting/odpdown/default.nix4
-rw-r--r--pkgs/tools/typesetting/pdf2djvu/default.nix17
-rw-r--r--pkgs/tools/typesetting/pdf2htmlEX/add-glib-cmake.patch17
-rw-r--r--pkgs/tools/typesetting/pdf2htmlEX/default.nix48
-rw-r--r--pkgs/tools/typesetting/pdf2odt/default.nix3
-rw-r--r--pkgs/tools/typesetting/pdfchain/default.nix56
-rw-r--r--pkgs/tools/typesetting/pdfgrep/default.nix10
-rw-r--r--pkgs/tools/typesetting/pdfsandwich/default.nix9
-rw-r--r--pkgs/tools/typesetting/pdftk/default.nix24
-rw-r--r--pkgs/tools/typesetting/pdftk/legacy.nix9
-rw-r--r--pkgs/tools/typesetting/psutils/default.nix4
-rw-r--r--pkgs/tools/typesetting/rubber/default.nix22
-rw-r--r--pkgs/tools/typesetting/satysfi/default.nix39
-rw-r--r--pkgs/tools/typesetting/scdoc/default.nix14
-rw-r--r--pkgs/tools/typesetting/sile/default.nix18
-rw-r--r--pkgs/tools/typesetting/skribilo/default.nix90
-rw-r--r--pkgs/tools/typesetting/sshlatex/default.nix12
-rw-r--r--pkgs/tools/typesetting/tectonic/default.nix47
-rw-r--r--pkgs/tools/typesetting/ted/default.nix11
-rw-r--r--pkgs/tools/typesetting/tex/auctex/default.nix24
-rw-r--r--pkgs/tools/typesetting/tex/dblatex/default.nix27
-rw-r--r--pkgs/tools/typesetting/tex/latexrun/default.nix4
-rw-r--r--pkgs/tools/typesetting/tex/lkproof/default.nix6
-rw-r--r--pkgs/tools/typesetting/tex/mftrace/default.nix63
-rw-r--r--pkgs/tools/typesetting/tex/nix/default.nix2
-rw-r--r--pkgs/tools/typesetting/tex/nix/run-latex.sh25
-rw-r--r--pkgs/tools/typesetting/tex/pgf/1.x.nix4
-rw-r--r--pkgs/tools/typesetting/tex/pgf/2.x.nix4
-rw-r--r--pkgs/tools/typesetting/tex/pgf/3.x.nix6
-rw-r--r--pkgs/tools/typesetting/tex/pgfplots/default.nix6
-rw-r--r--pkgs/tools/typesetting/tex/pplatex/default.nix6
-rw-r--r--pkgs/tools/typesetting/tex/tetex/default.nix8
-rw-r--r--pkgs/tools/typesetting/tex/tex-match/default.nix27
-rw-r--r--pkgs/tools/typesetting/tex/texlive/UPGRADING.md11
-rw-r--r--pkgs/tools/typesetting/tex/texlive/bin.nix243
-rw-r--r--pkgs/tools/typesetting/tex/texlive/combine.nix72
-rw-r--r--pkgs/tools/typesetting/tex/texlive/default.nix129
-rw-r--r--pkgs/tools/typesetting/tex/texlive/dvisvgm-fix.patch16
-rw-r--r--pkgs/tools/typesetting/tex/texlive/fixedHashes.nix6571
-rw-r--r--pkgs/tools/typesetting/tex/texlive/pkgs.nix11141
-rw-r--r--pkgs/tools/typesetting/tex/texlive/poppler84.patch43
-rw-r--r--pkgs/tools/typesetting/tex/texlive/tl2nix.sed4
-rw-r--r--pkgs/tools/typesetting/tikzit/default.nix10
-rw-r--r--pkgs/tools/typesetting/xmlroff/default.nix8
-rw-r--r--pkgs/tools/typesetting/xmlto/default.nix13
-rw-r--r--pkgs/tools/video/atomicparsley/default.nix50
-rw-r--r--pkgs/tools/video/bento4/default.nix16
-rw-r--r--pkgs/tools/video/dvgrab/default.nix8
-rw-r--r--pkgs/tools/video/flvtool2/default.nix17
-rw-r--r--pkgs/tools/video/gopro/default.nix10
-rw-r--r--pkgs/tools/video/harvid/default.nix42
-rw-r--r--pkgs/tools/video/mjpegtools/default.nix6
-rw-r--r--pkgs/tools/video/play-with-mpv/default.nix35
-rw-r--r--pkgs/tools/video/rav1e/default.nix45
-rw-r--r--pkgs/tools/video/rtmpdump/default.nix6
-rw-r--r--pkgs/tools/video/svt-av1/default.nix39
-rw-r--r--pkgs/tools/video/swfmill/default.nix10
-rw-r--r--pkgs/tools/video/swftools/default.nix27
-rw-r--r--pkgs/tools/video/untrunc-anthwlock/default.nix6
-rw-r--r--pkgs/tools/video/untrunc/default.nix39
-rw-r--r--pkgs/tools/video/vcsi/default.nix31
-rw-r--r--pkgs/tools/video/vnc2flv/default.nix4
-rw-r--r--pkgs/tools/video/vncrec/default.nix6
-rw-r--r--pkgs/tools/video/xjadeo/default.nix48
-rw-r--r--pkgs/tools/video/yamdi/default.nix6
-rw-r--r--pkgs/tools/virtualization/alpine-make-vm-image/default.nix8
-rw-r--r--pkgs/tools/virtualization/amazon-ecs-cli/default.nix10
-rw-r--r--pkgs/tools/virtualization/awless/default.nix4
-rw-r--r--pkgs/tools/virtualization/aws/default.nix12
-rw-r--r--pkgs/tools/virtualization/awsebcli/default.nix11
-rw-r--r--pkgs/tools/virtualization/cloud-init/0001-add-nixos-support.patch (renamed from pkgs/tools/virtualization/cloud-init/add-nixos-support.patch)50
-rw-r--r--pkgs/tools/virtualization/cloud-init/default.nix119
-rw-r--r--pkgs/tools/virtualization/cloudmonkey/default.nix26
-rw-r--r--pkgs/tools/virtualization/cri-tools/default.nix8
-rw-r--r--pkgs/tools/virtualization/distrobuilder/default.nix51
-rw-r--r--pkgs/tools/virtualization/ec2-ami-tools/default.nix8
-rw-r--r--pkgs/tools/virtualization/ec2-api-tools/default.nix6
-rw-r--r--pkgs/tools/virtualization/ec2instanceconnectcli/default.nix25
-rw-r--r--pkgs/tools/virtualization/euca2ools/default.nix6
-rw-r--r--pkgs/tools/virtualization/google-compute-engine-oslogin/default.nix10
-rw-r--r--pkgs/tools/virtualization/google-compute-engine/default.nix15
-rw-r--r--pkgs/tools/virtualization/govc/default.nix4
-rw-r--r--pkgs/tools/virtualization/linode-cli/default.nix47
-rw-r--r--pkgs/tools/virtualization/marathonctl/default.nix4
-rw-r--r--pkgs/tools/virtualization/nixos-container/default.nix8
-rwxr-xr-xpkgs/tools/virtualization/nixos-container/nixos-container.pl6
-rw-r--r--pkgs/tools/virtualization/nixos-shell/default.nix10
-rw-r--r--pkgs/tools/virtualization/ovftool/default.nix230
-rw-r--r--pkgs/tools/virtualization/rootlesskit/default.nix4
-rw-r--r--pkgs/tools/virtualization/shipyard/default.nix29
-rw-r--r--pkgs/tools/virtualization/udocker/default.nix4
-rw-r--r--pkgs/tools/virtualization/vpsfree-client/gemset.nix2
-rw-r--r--pkgs/tools/virtualization/xe-guest-utilities/default.nix8
-rw-r--r--pkgs/tools/virtualization/xva-img/default.nix24
-rw-r--r--pkgs/tools/wayland/clipman/default.nix (renamed from pkgs/tools/misc/clipman/default.nix)17
-rw-r--r--pkgs/tools/wayland/kanshi/default.nix (renamed from pkgs/tools/misc/kanshi/default.nix)19
-rw-r--r--pkgs/tools/wayland/oguri/default.nix39
-rw-r--r--pkgs/tools/wayland/slurp/default.nix (renamed from pkgs/tools/misc/slurp/default.nix)27
-rw-r--r--pkgs/tools/wayland/swaycwd/default.nix45
-rw-r--r--pkgs/tools/wayland/swaykbdd/default.nix24
-rw-r--r--pkgs/tools/wayland/swayr/default.nix30
-rw-r--r--pkgs/tools/wayland/swayr/icon-paths.patch17
-rw-r--r--pkgs/tools/wayland/wayland-proxy-virtwl/default.nix37
-rw-r--r--pkgs/tools/wayland/wayland-utils/default.nix8
-rw-r--r--pkgs/tools/wayland/wdomirror/default.nix38
-rw-r--r--pkgs/tools/wayland/wev/default.nix (renamed from pkgs/tools/misc/wev/default.nix)30
-rw-r--r--pkgs/tools/wayland/wl-clipboard/default.nix (renamed from pkgs/tools/misc/wl-clipboard/default.nix)20
-rw-r--r--pkgs/tools/wayland/wlogout/default.nix54
-rw-r--r--pkgs/tools/wayland/wlr-randr/default.nix (renamed from pkgs/tools/misc/wlr-randr/default.nix)20
-rw-r--r--pkgs/tools/wayland/wlrctl/default.nix26
-rw-r--r--pkgs/tools/wayland/wlsunset/default.nix32
-rw-r--r--pkgs/tools/wayland/wob/default.nix (renamed from pkgs/tools/misc/wob/default.nix)32
-rw-r--r--pkgs/tools/wayland/wshowkeys/default.nix41
-rw-r--r--pkgs/tools/wayland/wtype/default.nix34
-rw-r--r--pkgs/tools/wayland/ydotool/default.nix28
-rw-r--r--pkgs/tools/wayland/ydotool/fixup-cmakelists.patch58
3178 files changed, 89973 insertions, 30651 deletions
diff --git a/pkgs/tools/X11/alttab/default.nix b/pkgs/tools/X11/alttab/default.nix
index 7917ad5215e..591edff2add 100644
--- a/pkgs/tools/X11/alttab/default.nix
+++ b/pkgs/tools/X11/alttab/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchFromGitHub, autoconf, automake, pkgconfig, ronn, libpng, uthash
-, xorg }:
+{ lib, stdenv, coreutils, fetchFromGitHub, autoconf, automake, pkg-config, procps, ronn,
+libpng, uthash , which, xnee, xorg, python3Packages }:
 
 stdenv.mkDerivation rec {
-  version = "1.5.0";
+  version = "1.6.0";
 
   pname = "alttab";
 
@@ -10,13 +10,13 @@ stdenv.mkDerivation rec {
     owner = "sagb";
     repo = pname;
     rev = "v${version}";
-    sha256 = "026xd1bkg10fj2q1n6xx797xk1grpby25qj1pnw2lp4f3vc19qn6";
+    sha256 = "sha256-G4tu008IC3RCeCRZVKFPY2+ioLuUa9hDDKUx1q5C5FQ=";
   };
 
-  nativeBuildInputs = [ 
+  nativeBuildInputs = [
     autoconf
     automake
-    pkgconfig
+    pkg-config
     ronn
   ];
 
@@ -35,10 +35,22 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  doCheck = true;
+
+  checkInputs = [
+    coreutils
+    procps
+    python3Packages.xvfbwrapper
+    which
+    xnee
+    xorg.xeyes
+    xorg.xprop
+  ];
+
+  meta = with lib; {
     homepage = "https://github.com/sagb/alttab";
     description = "X11 window switcher designed for minimalistic window managers or standalone X11 session";
-    license = licenses.gpl3;
+    license = licenses.gpl3Plus;
     platforms = platforms.all;
     maintainers = [ maintainers.sgraf ];
   };
diff --git a/pkgs/tools/X11/arandr/default.nix b/pkgs/tools/X11/arandr/default.nix
index 94e3ac36d07..e6f4b5f6ff1 100644
--- a/pkgs/tools/X11/arandr/default.nix
+++ b/pkgs/tools/X11/arandr/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, python3Packages
+{ lib, fetchurl, python3Packages
 , gobject-introspection, gsettings-desktop-schemas, gtk3
 , wrapGAppsHook, xrandr
 }:
@@ -34,7 +34,7 @@ in buildPythonApplication rec {
   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 ];
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.domenkozar ];
   };
 }
diff --git a/pkgs/tools/X11/autocutsel/default.nix b/pkgs/tools/X11/autocutsel/default.nix
index ece42502d81..036ba8bc4e9 100644
--- a/pkgs/tools/X11/autocutsel/default.nix
+++ b/pkgs/tools/X11/autocutsel/default.nix
@@ -1,14 +1,14 @@
-{stdenv, fetchurl, libX11, libXaw}:
+{lib, stdenv, fetchurl, libX11, libXaw}:
 
 stdenv.mkDerivation rec {
-  version = "0.10.0";
+  version = "0.10.1";
   pname = "autocutsel";
- 
+
   src = fetchurl {
     url = "https://github.com/sigmike/autocutsel/releases/download/${version}/${pname}-${version}.tar.gz";
-    sha256 = "0gsys2dzh4az51ndcsabhlbbrjn2nm75lnjr45kg6r8sm8q66dx2";
+    sha256 = "sha256-8X4G1C90lENtSyb0vgtrDaOUgcBADJZ3jkuQW2NB6xc=";
   };
- 
+
   buildInputs = [ libX11 libXaw ];
   installPhase = ''
     mkdir -p $out/bin
@@ -16,11 +16,10 @@ stdenv.mkDerivation rec {
   '';
 
   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;
+    license = lib.licenses.gpl2Plus;
+    platforms = with lib.platforms; all;
     updateWalker = true;
   };
 }
diff --git a/pkgs/tools/X11/bgs/default.nix b/pkgs/tools/X11/bgs/default.nix
index 66d845b0587..fc6f7752a3a 100644
--- a/pkgs/tools/X11/bgs/default.nix
+++ b/pkgs/tools/X11/bgs/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, pkgconfig, libX11, libXinerama, imlib2}:
+{lib, stdenv, fetchurl, pkg-config, libX11, libXinerama, imlib2}:
 
 stdenv.mkDerivation rec {
 
@@ -10,13 +10,13 @@ stdenv.mkDerivation rec {
     sha256 = "1rw9ingkkpvvr2dixx126ziim67a54r8k49918h1mbph0fjj08n5";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   buildInputs = [ libX11 libXinerama imlib2 ];
 
   preConfigure = ''sed -i "s@PREFIX = /usr/local@PREFIX = $out@g" config.mk'';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Extremely fast and small background setter for X";
     license = licenses.mit;
     platforms = platforms.linux;
diff --git a/pkgs/tools/X11/bumblebee/default.nix b/pkgs/tools/X11/bumblebee/default.nix
index 8540cf6975d..48d28562c20 100644
--- a/pkgs/tools/X11/bumblebee/default.nix
+++ b/pkgs/tools/X11/bumblebee/default.nix
@@ -16,7 +16,7 @@
 #
 # To use at startup, see hardware.bumblebee options.
 
-{ stdenv, lib, fetchurl, fetchpatch, pkgconfig, help2man, makeWrapper
+{ stdenv, lib, fetchurl, fetchpatch, pkg-config, help2man, makeWrapper
 , glib, libbsd
 , libX11, xorgserver, kmod, xf86videonouveau
 , nvidia_x11, virtualgl, libglvnd
@@ -33,8 +33,6 @@
 }:
 
 let
-  version = "3.2.1";
-
   nvidia_x11s = [ nvidia_x11 ]
                 ++ lib.optional nvidia_x11.useGLVND libglvnd
                 ++ lib.optionals (nvidia_x11_i686 != null)
@@ -57,7 +55,7 @@ let
 
 in stdenv.mkDerivation rec {
   pname = "bumblebee";
-  inherit version;
+  version = "3.2.1";
 
   src = fetchurl {
     url = "https://bumblebee-project.org/${pname}-${version}.tar.gz";
@@ -103,7 +101,7 @@ in stdenv.mkDerivation rec {
   # 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 ];
+  nativeBuildInputs = [ makeWrapper pkg-config help2man automake111x autoconf ];
 
   # The order of LDPATH is very specific: First X11 then the host
   # environment then the optional sub architecture paths.
@@ -133,7 +131,7 @@ in stdenv.mkDerivation rec {
       --prefix PATH : "${virtualgl}/bin"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/Bumblebee-Project/Bumblebee";
     description = "Daemon for managing Optimus videocards (power-on/off, spawns xservers)";
     platforms = platforms.linux;
diff --git a/pkgs/tools/X11/caffeine-ng/default.nix b/pkgs/tools/X11/caffeine-ng/default.nix
index c161a7c7737..cadfa2c9997 100644
--- a/pkgs/tools/X11/caffeine-ng/default.nix
+++ b/pkgs/tools/X11/caffeine-ng/default.nix
@@ -1,5 +1,5 @@
 { gdk-pixbuf, glib, gobject-introspection, gtk3, lib, libnotify,
-  python3Packages, wrapGAppsHook
+  procps, xset, xautolock, xscreensaver, python3Packages, wrapGAppsHook
 }:
 
 python3Packages.buildPythonApplication rec {
@@ -12,17 +12,25 @@ python3Packages.buildPythonApplication rec {
   };
 
   nativeBuildInputs = [ wrapGAppsHook glib ];
-  buildInputs = [ 
-    gdk-pixbuf gobject-introspection libnotify gtk3 
-    python3Packages.setuptools_scm
+  buildInputs = [
+    gdk-pixbuf gobject-introspection libnotify gtk3
+    python3Packages.setuptools-scm
   ];
   pythonPath = with python3Packages; [
     dbus-python docopt ewmh pygobject3 pyxdg
-    setproctitle 
+    setproctitle
   ];
 
   doCheck = false; # There are no tests.
 
+  postPatch = ''
+    substituteInPlace caffeine/inhibitors.py \
+      --replace 'os.system("xset' 'os.system("${xset}/bin/xset' \
+      --replace 'os.system("xautolock' 'os.system("${xautolock}/bin/xautolock' \
+      --replace 'os.system("pgrep' 'os.system("${procps}/bin/pgrep' \
+      --replace 'os.system("xscreensaver-command' 'os.system("${xscreensaver}/bin/xscreensaver-command'
+  '';
+
   postInstall = ''
     mkdir -p $out/share
     cp -r share $out/
@@ -35,6 +43,7 @@ python3Packages.buildPythonApplication rec {
   '';
 
   meta = with lib; {
+    mainProgram = "caffeine";
     maintainers = with maintainers; [ marzipankaiser ];
     description = "Status bar application to temporarily inhibit screensaver and sleep mode";
     homepage = "https://github.com/caffeine-ng/caffeine-ng";
diff --git a/pkgs/tools/X11/ckbcomp/default.nix b/pkgs/tools/X11/ckbcomp/default.nix
index 74a6777d949..471dc80979a 100644
--- a/pkgs/tools/X11/ckbcomp/default.nix
+++ b/pkgs/tools/X11/ckbcomp/default.nix
@@ -1,15 +1,15 @@
-{ stdenv, fetchFromGitLab, perl, xkeyboard_config }:
+{ lib, stdenv, fetchFromGitLab, perl, xkeyboard_config }:
 
 stdenv.mkDerivation rec {
   pname = "ckbcomp";
-  version = "1.195";
+  version = "1.199";
 
   src = fetchFromGitLab {
     domain = "salsa.debian.org";
     owner = "installer-team";
     repo = "console-setup";
     rev = version;
-    sha256 = "0d0xagigs5k3appzz5lzxdjncvnkgz4amz6ks7imiq8kkjixvmfy";
+    sha256 = "0jvnxmqhfmj4aywskr2bk1q5p5fl8s4k4bch89965vcwi9bplalf";
   };
 
   buildInputs = [ perl ];
@@ -26,11 +26,11 @@ stdenv.mkDerivation rec {
     install -Dm0444 -t $out/share/man/man1 man/ckbcomp.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = with lib.maintainers; [ dezgeg ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/X11/devour/default.nix b/pkgs/tools/X11/devour/default.nix
new file mode 100644
index 00000000000..016ffa6215d
--- /dev/null
+++ b/pkgs/tools/X11/devour/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "devour";
+  version = "12";
+
+  src = fetchFromGitHub {
+    owner = "salman-abedin";
+    repo = "devour";
+    rev = version;
+    sha256 = "1qq5l6d0fn8azg7sj7a4m2jsmhlpswl5793clcxs1p34vy4wb2lp";
+  };
+
+  installPhase = ''
+    install -Dm555 -t $out/bin devour
+  '';
+
+  buildInputs = [ libX11 ];
+
+  meta = with lib; {
+    description = "Devour hides your current window when launching an external program";
+    longDescription = "Devour hides your current window before launching an external program and unhides it after quitting";
+    homepage = "https://github.com/salman-abedin/devour";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ mazurel ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/X11/dex/default.nix b/pkgs/tools/X11/dex/default.nix
index 22d6c1bfdec..dd1953d783a 100644
--- a/pkgs/tools/X11/dex/default.nix
+++ b/pkgs/tools/X11/dex/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python3 }:
+{ lib, stdenv, fetchFromGitHub, python3 }:
 
 stdenv.mkDerivation rec {
   program = "dex";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ python3.pkgs.sphinx ];
   makeFlags = [ "PREFIX=$(out)" "VERSION=$(version)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A program to generate and execute DesktopEntry files of the Application type";
     homepage = "https://github.com/jceb/dex";
     platforms = platforms.linux;
diff --git a/pkgs/tools/X11/dispad/default.nix b/pkgs/tools/X11/dispad/default.nix
index fccb28489ef..fbb7b117d29 100644
--- a/pkgs/tools/X11/dispad/default.nix
+++ b/pkgs/tools/X11/dispad/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libX11, libXi, libconfuse }:
+{ lib, stdenv, fetchFromGitHub, libX11, libXi, libconfuse }:
 
 stdenv.mkDerivation rec {
   pname = "dispad";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ libX11 libXi libconfuse ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A small daemon for disabling trackpads while typing";
     homepage = "https://github.com/BlueDragonX/dispad";
     license = licenses.gpl2;
diff --git a/pkgs/tools/X11/dragon-drop/default.nix b/pkgs/tools/X11/dragon-drop/default.nix
index 86c867b16ba..adf43ae8c08 100644
--- a/pkgs/tools/X11/dragon-drop/default.nix
+++ b/pkgs/tools/X11/dragon-drop/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, gtk, pkgconfig, fetchFromGitHub }:
+{ lib, stdenv, gtk, pkg-config, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "dragon-drop";
@@ -11,14 +11,14 @@ stdenv.mkDerivation rec {
     sha256 = "0fgzz39007fdjwq72scp0qygp2v3zc5f1xkm0sxaa8zxm25g1bra";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ gtk ];
 
   installPhase = ''
     install -D dragon -t $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Simple drag-and-drop source/sink for X";
     homepage = "https://github.com/mwh/dragon";
     maintainers = with maintainers; [ jb55 markus1189 ];
diff --git a/pkgs/tools/X11/ffcast/default.nix b/pkgs/tools/X11/ffcast/default.nix
index 1378d5e6b98..3f6122e4093 100644
--- a/pkgs/tools/X11/ffcast/default.nix
+++ b/pkgs/tools/X11/ffcast/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, perl, libX11 }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, perl, libX11 }:
 
 stdenv.mkDerivation rec {
   pname = "ffcast";
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
     make install
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Run commands on rectangular screen regions";
     homepage = "https://github.com/lolilolicon/FFcast";
     license = licenses.gpl3;
diff --git a/pkgs/tools/X11/find-cursor/default.nix b/pkgs/tools/X11/find-cursor/default.nix
new file mode 100644
index 00000000000..3f330c63b0f
--- /dev/null
+++ b/pkgs/tools/X11/find-cursor/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, libX11, libXdamage, libXrender, libXcomposite, libXext, installShellFiles, git }:
+
+stdenv.mkDerivation rec {
+  pname = "find-cursor";
+  version = "1.7";
+
+  src = fetchFromGitHub {
+    owner = "arp242";
+    repo = "find-cursor";
+    rev = "v${version}";
+    sha256 = "sha256-cFvhoEPDFLw6rsPYUF9gqAFzINewnszJEzxRK064NEU=";
+  };
+
+  nativeBuildInputs = [ installShellFiles git ];
+  buildInputs = [ libX11 libXdamage libXrender libXcomposite libXext ];
+  preInstall = "mkdir -p $out/share/man/man1";
+  installFlags = "PREFIX=${placeholder "out"}";
+
+  meta = with lib; {
+    description = "Simple XLib program to highlight the cursor position";
+    homepage = "https://github.com/arp242/find-cursor";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.yanganto ];
+  };
+}
diff --git a/pkgs/tools/X11/go-sct/default.nix b/pkgs/tools/X11/go-sct/default.nix
index 01d82b4a112..801ddc96c4a 100644
--- a/pkgs/tools/X11/go-sct/default.nix
+++ b/pkgs/tools/X11/go-sct/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, xorg, buildGoPackage, fetchFromGitHub }:
+{ lib, xorg, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "go-sct";
-  version = "20180605-${stdenv.lib.strings.substring 0 7 rev}";
+  version = "20180605-${lib.strings.substring 0 7 rev}";
   rev = "eb1e851f2d5017038d2b8e3653645c36d3a279f4";
 
   goPackagePath = "github.com/d4l3k/go-sct";
@@ -18,10 +18,10 @@ buildGoPackage rec {
 
   buildInputs = [ xorg.libX11 xorg.libXrandr ];
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = with maintainers; [ cstrahan ];
     platforms = platforms.linux ++ platforms.windows;
   };
 }
diff --git a/pkgs/tools/X11/grobi/default.nix b/pkgs/tools/X11/grobi/default.nix
index 111d064ad88..3071ef31781 100644
--- a/pkgs/tools/X11/grobi/default.nix
+++ b/pkgs/tools/X11/grobi/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, buildGoModule }:
+{ lib, fetchFromGitHub, buildGoModule, fetchpatch }:
 
 buildGoModule rec {
   version = "0.6.0";
@@ -13,7 +13,15 @@ buildGoModule rec {
 
   vendorSha256 = "1ibwx5rbxkygfx78j3g364dmbwwa5b34qmzq3sqcbrsnv8rzrwvj";
 
-  meta = with stdenv.lib; {
+  patches = [
+    # fix failing test on go 1.15
+    (fetchpatch {
+      url = "https://github.com/fd0/grobi/commit/176988ab087ff92d1408fbc454c77263457f3d7e.patch";
+      sha256 = "0j8y3gns4lm0qxqxzmdn2ll0kq34mmfhf83lvsq13iqhp5bx3y31";
+    })
+  ];
+
+  meta = with lib; {
     homepage = "https://github.com/fd0/grobi";
     description = "Automatically configure monitors/outputs for Xorg via RANDR";
     license = with licenses; [ bsd2 ];
diff --git a/pkgs/tools/X11/hsetroot/default.nix b/pkgs/tools/X11/hsetroot/default.nix
index 3bfe98a7a21..95ccd9586d9 100644
--- a/pkgs/tools/X11/hsetroot/default.nix
+++ b/pkgs/tools/X11/hsetroot/default.nix
@@ -1,36 +1,44 @@
-{ stdenv, fetchurl, autoconf, automake, imlib2, libtool, libX11, pkgconfig, xorgproto }:
+{ lib, stdenv
+, fetchFromGitHub
+, pkg-config
+, imlib2
+, libX11
+, libXinerama
+}:
 
 stdenv.mkDerivation rec {
   pname = "hsetroot";
-  version = "1.0.2";
+  version = "1.0.5";
 
-  # 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";
+  src = fetchFromGitHub {
+    owner = "himdel";
+    repo = "hsetroot";
+    rev = version;
+    sha256 = "1jbk5hlxm48zmjzkaq5946s58rqwg1v1ds2sdyd2ba029hmvr722";
   };
 
-  # 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 ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    imlib2
+    libX11
+    libXinerama
+  ];
 
-  patches = [ underlinkingPatch ];
+  postPatch = lib.optionalString (!stdenv.cc.isGNU) ''
+    sed -i -e '/--no-as-needed/d' Makefile
+  '';
 
-  patchFlags = [ "-p0" ];
+  makeFlags = [ "PREFIX=$(out)" ];
 
-  preConfigure = "./autogen.sh";
+  preInstall = ''
+    mkdir -p "$out/bin"
+  '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Allows you to compose wallpapers ('root pixmaps') for X";
-    homepage = "https://thegraveyard.org/hsetroot.html";
+    homepage = "https://github.com/himdel/hsetroot";
     license = licenses.gpl2Plus;
-    maintainers = [ maintainers.henrytill ];
+    maintainers = with maintainers; [ henrytill shamilton ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/X11/icon-slicer/default.nix b/pkgs/tools/X11/icon-slicer/default.nix
new file mode 100644
index 00000000000..37b309c54b7
--- /dev/null
+++ b/pkgs/tools/X11/icon-slicer/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, pkg-config, gdk-pixbuf, popt }:
+stdenv.mkDerivation rec {
+  pname = "icon-slicer";
+  version = "0.3";
+
+  src = fetchurl {
+    url = "https://freedesktop.org/software/icon-slicer/releases/icon-slicer-${version}.tar.gz";
+    sha256 = "0kdnc08k2rs8llfg7xgvnrsk60x59pv5fqz6kn2ifnn2s1nj3w05";
+  };
+
+  patches = [
+    # Fixes hotspot `y` coordinate. The `x` coordinate is used on the y-axis.
+    (fetchurl {
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/hotspotfix.patch?h=icon-slicer";
+      sha256 = "1l1dc1x5p4hys02arkmq3x6b1xdi510969d25g928zr4gf4an03h";
+    })
+  ];
+
+  nativeBuildInputs = [ popt pkg-config ];
+  buildInputs = [ gdk-pixbuf ];
+
+  meta = with lib; {
+    description = "Utility for generating icon themes and libXcursor cursor themes";
+    homepage = "https://www.freedesktop.org/wiki/Software/icon-slicer/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zaninime ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/X11/imwheel/default.nix b/pkgs/tools/X11/imwheel/default.nix
index efed00f9639..27a545a95cd 100644
--- a/pkgs/tools/X11/imwheel/default.nix
+++ b/pkgs/tools/X11/imwheel/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libX11, libXext, libXi, libXmu, libXt, libXtst }:
+{ lib, stdenv, fetchurl, libX11, libXext, libXi, libXmu, libXt, libXtst }:
 
 stdenv.mkDerivation rec {
   name = "imwheel-1.0.0pre12";
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
     "ETCDIR=${placeholder "out"}/etc"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://imwheel.sourceforge.net/";
     description = "Mouse wheel configuration tool for XFree86/Xorg";
     maintainers = with maintainers; [ jhillyerd ];
diff --git a/pkgs/tools/X11/keynav/default.nix b/pkgs/tools/X11/keynav/default.nix
index 64684cf73df..75b5bc2356a 100644
--- a/pkgs/tools/X11/keynav/default.nix
+++ b/pkgs/tools/X11/keynav/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, libX11, xorgproto, libXtst, libXi, libXext
+{ lib, stdenv, fetchFromGitHub, pkg-config, libX11, xorgproto, libXtst, libXi, libXext
 , libXinerama, libXrandr, glib, cairo, xdotool }:
 
 let release = "20180821"; in
@@ -12,7 +12,7 @@ stdenv.mkDerivation {
     sha256 = "0hmc14fj612z5h7gjgk95zyqab3p35c4a99snnblzxfg0p3x2f1d";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libX11 xorgproto libXtst libXi libXext libXinerama libXrandr
                   glib cairo xdotool ];
 
@@ -29,7 +29,7 @@ stdenv.mkDerivation {
       cp keynavrc $out/share/keynav/doc
     '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Generate X11 mouse clicks from keyboard";
     homepage = "https://www.semicomplete.com/projects/keynav/";
     license = licenses.bsd3;
diff --git a/pkgs/tools/X11/ksuperkey/default.nix b/pkgs/tools/X11/ksuperkey/default.nix
index d5c2232dce1..14484120930 100644
--- a/pkgs/tools/X11/ksuperkey/default.nix
+++ b/pkgs/tools/X11/ksuperkey/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libX11, libXtst, pkgconfig, xorgproto, libXi }:
+{ lib, stdenv, fetchFromGitHub, libX11, libXtst, pkg-config, xorgproto, libXi }:
 
 stdenv.mkDerivation rec {
   pname = "ksuperkey";
@@ -13,10 +13,10 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=${placeholder "out"}" ];
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libX11 libXtst xorgproto libXi ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tool to be able to bind the super key as a key rather than a modifier";
     homepage = "https://github.com/hanschen/ksuperkey";
     license = licenses.gpl3;
diff --git a/pkgs/tools/X11/libstrangle/default.nix b/pkgs/tools/X11/libstrangle/default.nix
index d24654ce3ad..2d7f6b456c4 100644
--- a/pkgs/tools/X11/libstrangle/default.nix
+++ b/pkgs/tools/X11/libstrangle/default.nix
@@ -1,14 +1,16 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitLab, libGL, libX11 }:
 
 stdenv.mkDerivation rec {
   pname = "libstrangle";
-  version = "2017-02-22";
+  version = "0.1.1";
 
-  src = fetchFromGitHub {
-    owner = "milaq";
+  buildInputs = [ libGL libX11 ];
+
+  src = fetchFromGitLab {
+    owner = "torkel104";
     repo = pname;
-    rev = "6020f9e375ba747c75eb7996b7d5f0214ac3221e";
-    sha256 = "04ikacbjcq9phdc8q5y1qjjpa1sxmzfm0idln9ys95prg289zp4h";
+    rev = version;
+    sha256 = "135icr544w5ynlxfnxqgjn794bsm9i703rh9jfnracjb7jgnha4w";
   };
 
   makeFlags = [ "prefix=" "DESTDIR=$(out)" ];
@@ -17,13 +19,15 @@ stdenv.mkDerivation rec {
 
   postPatch = ''
     substituteAllInPlace src/strangle.sh
+    substituteAllInPlace src/stranglevk.sh
   '';
 
-  meta = with stdenv.lib; {
-    homepage = "https://github.com/milaq/libstrangle";
+  meta = with lib; {
+    homepage = "https://gitlab.com/torkel104/libstrangle";
     description = "Frame rate limiter for Linux/OpenGL";
     license = licenses.gpl3;
     platforms = [ "x86_64-linux" ];
     maintainers = with maintainers; [ aske ];
+    mainProgram = "strangle";
   };
 }
diff --git a/pkgs/tools/X11/libstrangle/nixos.patch b/pkgs/tools/X11/libstrangle/nixos.patch
index 03c8c19b54c..05364028e3e 100644
--- a/pkgs/tools/X11/libstrangle/nixos.patch
+++ b/pkgs/tools/X11/libstrangle/nixos.patch
@@ -1,29 +1,43 @@
 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)
+@@ -86,10 +86,6 @@ install-common:
+ 	install -m 0755 -D -T $(SOURCEDIR)/stranglevk.sh $(DESTDIR)$(bindir)/stranglevk
+ 	install -m 0644 -D -T $(SOURCEDIR)/vulkan/libstrangle_vk.json $(DESTDIR)$(datarootdir)/vulkan/implicit_layer.d/libstrangle_vk.json
  
- 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
+-install-ld: ld
+-	install -m 0644 -D -T $(BUILDDIR)/libstrangle.conf $(DESTDIR)/etc/ld.so.conf.d/libstrangle.conf
 -	ldconfig
+-
+ install-32: 32-bit
+ 	install -m 0755 -D -T $(BUILDDIR)/libstrangle32.so $(DESTDIR)$(LIB32_PATH)/libstrangle.so
+ 	install -m 0755 -D -T $(BUILDDIR)/libstrangle32_nodlsym.so $(DESTDIR)$(LIB32_PATH)/libstrangle_nodlsym.so
+@@ -109,8 +105,7 @@ install: \
+ 	all \
+ 	install-common \
+ 	install-32 \
+-	install-64 \
+-	install-ld
++	install-64
  
  clean:
- 	rm -f $(BUILDDIR)libstrangle64.so
+ 	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
+@@ -130,6 +130,5 @@ if [ "$STRANGLE_VKONLY" != "1" ]; then
+ 	fi
  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}${LD_LIBRARY_PATH:+:}@out@/lib/libstrangle/lib64:@out@/lib/libstrangle/lib32" LD_PRELOAD="${LD_PRELOAD}:libstrangle.so" exec "$@"
+-exec env ENABLE_VK_LAYER_TORKEL104_libstrangle=1 LD_PRELOAD="${LD_PRELOAD}" "$@"
++ENABLE_VK_LAYER_TORKEL104_libstrangle=1 XDG_DATA_DIRS="${XDG_DATA_DIRS}${XDG_DATA_DIRS:+:}@out@/share" LD_LIBRARY_PATH="${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}@out@/lib/libstrangle/lib64:@out@/lib/libstrangle/lib32" LD_PRELOAD="${LD_PRELOAD}" exec "$@"
+diff --git a/src/stranglevk.sh b/src/stranglevk.sh
+--- a/src/stranglevk.sh
++++ b/src/stranglevk.sh
+@@ -1,3 +1,3 @@
+ #!/bin/sh
+
+-ENABLE_VK_LAYER_TORKEL104_libstrangle=1 STRANGLE_VKONLY=1 strangle "$@"
++ENABLE_VK_LAYER_TORKEL104_libstrangle=1 STRANGLE_VKONLY=1 @out@/bin/strangle "$@"
diff --git a/pkgs/tools/X11/ncview/default.nix b/pkgs/tools/X11/ncview/default.nix
index 1f793aa6c4c..c22c6c0eb38 100644
--- a/pkgs/tools/X11/ncview/default.nix
+++ b/pkgs/tools/X11/ncview/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl
+{ lib, stdenv, fetchurl
 , netcdf, xlibsWrapper, xorg, udunits, expat
 }:
 
@@ -16,7 +16,7 @@ in stdenv.mkDerivation {
 
   buildInputs = [ netcdf xlibsWrapper xorg.libXaw udunits expat ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Visual browser for netCDF format files";
     homepage    = "http://meteora.ucsd.edu/~pierce/ncview_home_page.html";
     license = licenses.gpl3;
diff --git a/pkgs/tools/X11/nitrogen/default.nix b/pkgs/tools/X11/nitrogen/default.nix
index 057288fbaa3..deefddf23ce 100644
--- a/pkgs/tools/X11/nitrogen/default.nix
+++ b/pkgs/tools/X11/nitrogen/default.nix
@@ -1,17 +1,15 @@
-{ stdenv, fetchurl, pkgconfig, glib, gtkmm2 }:
+{ lib, stdenv, fetchurl, pkg-config, glib, gtkmm2 }:
 
-let version = "1.6.1";
-in
 stdenv.mkDerivation rec {
   pname = "nitrogen";
-  inherit version;
+  version = "1.6.1";
 
   src = fetchurl {
     url = "http://projects.l3ib.org/nitrogen/files/${pname}-${version}.tar.gz";
     sha256 = "0zc3fl1mbhq0iyndy4ysmy8vv5c7xwf54rbgamzfhfvsgdq160pl";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   buildInputs = [ glib gtkmm2 ];
 
@@ -28,8 +26,8 @@ stdenv.mkDerivation rec {
       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 ];
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.auntie ];
   };
 }
diff --git a/pkgs/tools/X11/numlockx/default.nix b/pkgs/tools/X11/numlockx/default.nix
index b59e9dc30ac..5cd23a81f30 100644
--- a/pkgs/tools/X11/numlockx/default.nix
+++ b/pkgs/tools/X11/numlockx/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libX11, libXext, autoconf }:
+{ lib, stdenv, fetchFromGitHub, libX11, libXext, autoconf }:
 
 stdenv.mkDerivation rec {
   version = "1.2";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ libX11 libXext autoconf ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Allows to start X with NumLock turned on";
     license = licenses.mit;
     platforms = platforms.all;
diff --git a/pkgs/tools/X11/nx-libs/default.nix b/pkgs/tools/X11/nx-libs/default.nix
index ceb2534e07a..022111e4b31 100644
--- a/pkgs/tools/X11/nx-libs/default.nix
+++ b/pkgs/tools/X11/nx-libs/default.nix
@@ -1,23 +1,27 @@
-{ stdenv, autoconf, automake, fetchFromGitHub, libgcc, libjpeg_turbo,
-  libpng, libtool, libxml2, pkgconfig, which, xorg }:
+{ lib, stdenv, autoconf, automake, fetchFromGitHub, libgcc, libjpeg_turbo
+, libpng, libtool, libxml2, pkg-config, which, xorg
+, libtirpc
+}:
 stdenv.mkDerivation rec {
   pname = "nx-libs";
-  version = "3.5.99.24";
+  version = "3.5.99.26";
   src = fetchFromGitHub {
     owner = "ArcticaProject";
     repo = "nx-libs";
     rev = version;
-    sha256 = "0knx4phya90ahjxaflkvnnb7w22vdwjf7r78dhzmbmlccnlvwi7q";
+    sha256 = "sha256-qVOdD85sBMxKYx1cSLAGKeODsKKAm9UPBmYzPBbBOzQ=";
   };
 
-  nativeBuildInputs = [ autoconf automake libtool pkgconfig which
+  nativeBuildInputs = [ autoconf automake libtool pkg-config 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 ];
+    xorg.xkbcomp xorg.xkeyboardconfig libtirpc
+  ];
 
-  enableParallelBuilding = true;
+  NIX_CFLAGS_COMPILE = [ "-I${libtirpc.dev}/include/tirpc" ];
+  NIX_LDFLAGS = [ "-ltirpc" ];
 
   postPatch = ''
     patchShebangs .
@@ -37,8 +41,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/X11/obconf/default.nix b/pkgs/tools/X11/obconf/default.nix
index 809e3614f0b..5cbcec63c59 100644
--- a/pkgs/tools/X11/obconf/default.nix
+++ b/pkgs/tools/X11/obconf/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, gtk2, libglade, openbox,
+{ lib, stdenv, fetchurl, pkg-config, gtk2, libglade, openbox,
   imlib2, libstartup_notification, makeWrapper, libSM }:
 
 stdenv.mkDerivation rec {
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
     sha256 = "1fanjdmd8727kk74x5404vi8v7s4kpq48l583d12fsi4xvsfb8vi";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [
     gtk2 libglade libSM openbox imlib2 libstartup_notification
     makeWrapper
@@ -23,8 +23,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.lhvwb ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/X11/opentabletdriver/default.nix b/pkgs/tools/X11/opentabletdriver/default.nix
new file mode 100644
index 00000000000..2d1ce4a4e33
--- /dev/null
+++ b/pkgs/tools/X11/opentabletdriver/default.nix
@@ -0,0 +1,172 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchurl
+, linkFarmFromDrvs
+, dotnet-netcore
+, dotnet-sdk
+, dotnetPackages
+, dpkg
+, gtk3
+, libX11
+, libXrandr
+, libappindicator
+, libevdev
+, libnotify
+, udev
+, copyDesktopItems
+, makeDesktopItem
+, makeWrapper
+, nixosTests
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "OpenTabletDriver";
+  version = "0.5.3.2";
+
+  src = fetchFromGitHub {
+    owner = "InfinityGhost";
+    repo = "OpenTabletDriver";
+    rev = "v${version}";
+    sha256 = "qRc/9Edp3x7/XVEWgBbPush76MSQz4biYSk+E9Gt68w=";
+  };
+
+  debPkg = fetchurl {
+    url = "https://github.com/InfinityGhost/OpenTabletDriver/releases/download/v${version}/OpenTabletDriver.deb";
+    sha256 = "14k06iyc642x42yadyfmmf8ky84y8rc6kgd63b4ipskkcxyl1gvl";
+  };
+
+  nativeBuildInputs = [
+    dotnet-sdk
+    dotnetPackages.Nuget
+    dpkg
+    copyDesktopItems
+    makeWrapper
+    wrapGAppsHook
+  ];
+
+  nugetDeps = linkFarmFromDrvs "${pname}-nuget-deps" (import ./deps.nix {
+    fetchNuGet = { name, version, sha256 }: fetchurl {
+      name = "nuget-${name}-${version}.nupkg";
+      url = "https://www.nuget.org/api/v2/package/${name}/${version}";
+      inherit sha256;
+    };
+  });
+
+  runtimeDeps = [
+    gtk3
+    libX11
+    libXrandr
+    libappindicator
+    libevdev
+    libnotify
+    udev
+  ];
+
+  configurePhase = ''
+    runHook preConfigure
+
+    export HOME=$(mktemp -d)
+    export DOTNET_CLI_TELEMETRY_OPTOUT=1
+    export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
+
+    nuget sources Add -Name nixos -Source "$PWD/nixos"
+    nuget init "$nugetDeps" "$PWD/nixos"
+
+    # FIXME: https://github.com/NuGet/Home/issues/4413
+    mkdir -p $HOME/.nuget/NuGet
+    cp $HOME/.config/NuGet/NuGet.Config $HOME/.nuget/NuGet
+
+    for project in OpenTabletDriver.{Console,Daemon,UX.Gtk}; do
+        dotnet restore --source "$PWD/nixos" $project
+    done
+
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    for project in OpenTabletDriver.{Console,Daemon,UX.Gtk}; do
+        dotnet build $project \
+            --no-restore \
+            --configuration Release \
+            --framework net5
+    done
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    for project in OpenTabletDriver.{Console,Daemon,UX.Gtk}; do
+      dotnet publish $project \
+          --no-build \
+          --no-self-contained \
+          --configuration Release \
+          --framework net5 \
+          --output $out/lib
+    done
+
+    # Give a more "*nix" name to the binaries
+    makeWrapper $out/lib/OpenTabletDriver.Console $out/bin/otd \
+        "''${gappsWrapperArgs[@]}" \
+        --prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}/" \
+        --set DOTNET_ROOT "${dotnet-netcore}" \
+        --suffix LD_LIBRARY_PATH : "${lib.makeLibraryPath runtimeDeps}"
+
+    makeWrapper $out/lib/OpenTabletDriver.Daemon $out/bin/otd-daemon \
+        "''${gappsWrapperArgs[@]}" \
+        --prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}/" \
+        --set DOTNET_ROOT "${dotnet-netcore}" \
+        --suffix LD_LIBRARY_PATH : "${lib.makeLibraryPath runtimeDeps}"
+
+    makeWrapper $out/lib/OpenTabletDriver.UX.Gtk $out/bin/otd-gui \
+        "''${gappsWrapperArgs[@]}" \
+        --prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}/" \
+        --set DOTNET_ROOT "${dotnet-netcore}" \
+        --suffix LD_LIBRARY_PATH : "${lib.makeLibraryPath runtimeDeps}"
+
+    mkdir -p $out/lib/OpenTabletDriver
+    cp -rv ./OpenTabletDriver/Configurations $out/lib/OpenTabletDriver
+    install -Dm644 $src/OpenTabletDriver.UX/Assets/otd.png -t $out/share/pixmaps
+
+    # TODO: Ideally this should be build from OpenTabletDriver/OpenTabletDriver-udev instead
+    dpkg-deb --fsys-tarfile ${debPkg} | tar xf - ./usr/lib/udev/rules.d/99-opentabletdriver.rules
+    install -Dm644 ./usr/lib/udev/rules.d/99-opentabletdriver.rules -t $out/lib/udev/rules.d
+
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      desktopName = "OpenTabletDriver";
+      name = "OpenTabletDriver";
+      exec = "otd-gui";
+      icon = "otd";
+      comment = meta.description;
+      type = "Application";
+      categories = "Utility;";
+    })
+  ];
+
+  dontWrapGApps = true;
+  dontStrip = true;
+
+  passthru = {
+    updateScript = ./update.sh;
+    tests = {
+      otd-runs = nixosTests.opentabletdriver;
+    };
+  };
+
+  meta = with lib; {
+    description = "Open source, cross-platform, user-mode tablet driver";
+    homepage = "https://github.com/InfinityGhost/OpenTabletDriver";
+    license = licenses.lgpl3Plus;
+    maintainers = with maintainers; [ thiagokokada ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/X11/opentabletdriver/deps.nix b/pkgs/tools/X11/opentabletdriver/deps.nix
new file mode 100644
index 00000000000..45ded855587
--- /dev/null
+++ b/pkgs/tools/X11/opentabletdriver/deps.nix
@@ -0,0 +1,462 @@
+{ fetchNuGet }: [
+  (fetchNuGet {
+    name = "AtkSharp";
+    version = "3.24.24.34";
+    sha256 = "1jn1vgi9xm0jp7769k6sbdi8d273kigjrsh93i6s4c03hqxv7cqs";
+  })
+  (fetchNuGet {
+    name = "CairoSharp";
+    version = "3.24.24.34";
+    sha256 = "0pydn1k0cam1gclg9sc1sbnmbyzh28qlc5qanyxcylwghink3kgz";
+  })
+  (fetchNuGet {
+    name = "Eto.Forms";
+    version = "2.5.10";
+    sha256 = "1d71wglk4ixfqfbm6sxmj753x5iwbar8i9zzjy3bh64fy1dn8lz7";
+  })
+  (fetchNuGet {
+    name = "Eto.Forms";
+    version = "2.5.11";
+    sha256 = "0h86jc19wy3ssj7pb34w1h02v92mg29gdipszwjs3y15piy66z3s";
+  })
+  (fetchNuGet {
+    name = "Eto.Platform.Gtk";
+    version = "2.5.11";
+    sha256 = "1s9njz7l9zghrbzli7lbiav5ss3glqf17npj07f3jldd933nb95j";
+  })
+  (fetchNuGet {
+    name = "GdkSharp";
+    version = "3.24.24.34";
+    sha256 = "0r0x0yib7chwsyrbpvicrfwldwqx5lyqq4p86zaxpmzd6zdaj0x5";
+  })
+  (fetchNuGet {
+    name = "GioSharp";
+    version = "3.24.24.34";
+    sha256 = "02hxvgjd4w9jpzbkk7qf9q9bkvyp5hfzwxfqp10vg5lpl9yl3xpx";
+  })
+  (fetchNuGet {
+    name = "GLibSharp";
+    version = "3.24.24.34";
+    sha256 = "0kvp033fgdwc8p2abfp5z9pzq66cvwbnjfvr4v4bkpy5s5h181kq";
+  })
+  (fetchNuGet {
+    name = "GtkSharp";
+    version = "3.24.24.34";
+    sha256 = "0028hzmmqyfx87qqmaf9cgb5psn7gkbmqvixcid67x1d6mzxjicb";
+  })
+  (fetchNuGet {
+    name = "HidSharpCore";
+    version = "1.2.1.1";
+    sha256 = "1zkndglmz0s8rblfhnqcvv90rkq2i7lf4bc380g7z8h1avf2ikll";
+  })
+  (fetchNuGet {
+    name = "MessagePack.Annotations";
+    version = "2.1.194";
+    sha256 = "1jkhq3hiy4brvzsywl4p4jb9jrnzs3vmgr3s8fxpb1dzafadw8b0";
+  })
+  (fetchNuGet {
+    name = "MessagePack";
+    version = "2.1.194";
+    sha256 = "1v2gyd9sd6hppfhlzngmzzhnpr39b95rwrqq0r9zzp480b6vzaj0";
+  })
+  (fetchNuGet {
+    name = "Microsoft.Bcl.AsyncInterfaces";
+    version = "1.1.1";
+    sha256 = "0a1ahssqds2ympr7s4xcxv5y8jgxs7ahd6ah6fbgglj4rki1f1vw";
+  })
+  (fetchNuGet {
+    name = "Microsoft.CSharp";
+    version = "4.4.1";
+    sha256 = "0z6d1i6xcf0c00z6rs75rgw4ncs9q2m8amasf6mmbf40fm02ry7g";
+  })
+  (fetchNuGet {
+    name = "Microsoft.NETCore.Platforms";
+    version = "1.1.0";
+    sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm";
+  })
+  (fetchNuGet {
+    name = "Microsoft.NETCore.Platforms";
+    version = "1.1.1";
+    sha256 = "164wycgng4mi9zqi2pnsf1pq6gccbqvw6ib916mqizgjmd8f44pj";
+  })
+  (fetchNuGet {
+    name = "Microsoft.NETCore.Platforms";
+    version = "3.0.0";
+    sha256 = "1bk8r4r3ihmi6322jmcag14jmw11mjqys202azqjzglcx59pxh51";
+  })
+  (fetchNuGet {
+    name = "Microsoft.NETCore.Targets";
+    version = "1.1.0";
+    sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh";
+  })
+  (fetchNuGet {
+    name = "Microsoft.VisualStudio.Threading.Analyzers";
+    version = "16.7.56";
+    sha256 = "04v9df0k7bsc0rzgkw4mnvi43pdrh42vk6xdcwn9m6im33m0nnz2";
+  })
+  (fetchNuGet {
+    name = "Microsoft.VisualStudio.Threading";
+    version = "16.7.56";
+    sha256 = "13x0xrsjxd86clf9cjjwmpzlyp8pkrf13riya7igs8zy93zw2qap";
+  })
+  (fetchNuGet {
+    name = "Microsoft.VisualStudio.Validation";
+    version = "15.5.31";
+    sha256 = "1ah99rn922qa0sd2k3h64m324f2r32pw8cn4cfihgvwx4qdrpmgw";
+  })
+  (fetchNuGet {
+    name = "Microsoft.Win32.Primitives";
+    version = "4.3.0";
+    sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq";
+  })
+  (fetchNuGet {
+    name = "Microsoft.Win32.Registry";
+    version = "4.6.0";
+    sha256 = "0i4y782yrqqyx85pg597m20gm0v126w0j9ddk5z7xb3crx4z9f2s";
+  })
+  (fetchNuGet {
+    name = "Nerdbank.Streams";
+    version = "2.6.77";
+    sha256 = "13dnfwxa8syx7vfjmd5pcrqz31k0q8y3mmh6yz6bmljhjri65q5c";
+  })
+  (fetchNuGet {
+    name = "Newtonsoft.Json";
+    version = "12.0.2";
+    sha256 = "0w2fbji1smd2y7x25qqibf1qrznmv4s6s0jvrbvr6alb7mfyqvh5";
+  })
+  (fetchNuGet {
+    name = "Octokit";
+    version = "0.50.0";
+    sha256 = "1ignj5i6a1c19qqrw00wlr9fdjmwrxkxz7gdxj0x653w84gbv7qq";
+  })
+  (fetchNuGet {
+    name = "PangoSharp";
+    version = "3.24.24.34";
+    sha256 = "1r0h14cklglfpv1lhv93cxmzi2w7d5s03gzpq3j5dmrz43flg9zw";
+  })
+  (fetchNuGet {
+    name = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl";
+    version = "4.3.2";
+    sha256 = "0rwpqngkqiapqc5c2cpkj7idhngrgss5qpnqg0yh40mbyflcxf8i";
+  })
+  (fetchNuGet {
+    name = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl";
+    version = "4.3.2";
+    sha256 = "1n06gxwlinhs0w7s8a94r1q3lwqzvynxwd3mp10ws9bg6gck8n4r";
+  })
+  (fetchNuGet {
+    name = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl";
+    version = "4.3.2";
+    sha256 = "0404wqrc7f2yc0wxv71y3nnybvqx8v4j9d47hlscxy759a525mc3";
+  })
+  (fetchNuGet {
+    name = "runtime.native.System.Net.Http";
+    version = "4.3.0";
+    sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk";
+  })
+  (fetchNuGet {
+    name = "runtime.native.System.Security.Cryptography.Apple";
+    version = "4.3.0";
+    sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q";
+  })
+  (fetchNuGet {
+    name = "runtime.native.System.Security.Cryptography.OpenSsl";
+    version = "4.3.2";
+    sha256 = "0zy5r25jppz48i2bkg8b9lfig24xixg6nm3xyr1379zdnqnpm8f6";
+  })
+  (fetchNuGet {
+    name = "runtime.native.System";
+    version = "4.3.0";
+    sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4";
+  })
+  (fetchNuGet {
+    name = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl";
+    version = "4.3.2";
+    sha256 = "096ch4n4s8k82xga80lfmpimpzahd2ip1mgwdqgar0ywbbl6x438";
+  })
+  (fetchNuGet {
+    name = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl";
+    version = "4.3.2";
+    sha256 = "1dm8fifl7rf1gy7lnwln78ch4rw54g0pl5g1c189vawavll7p6rj";
+  })
+  (fetchNuGet {
+    name = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple";
+    version = "4.3.0";
+    sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi";
+  })
+  (fetchNuGet {
+    name = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl";
+    version = "4.3.2";
+    sha256 = "1m9z1k9kzva9n9kwinqxl97x2vgl79qhqjlv17k9s2ymcyv2bwr6";
+  })
+  (fetchNuGet {
+    name = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl";
+    version = "4.3.2";
+    sha256 = "1cpx56mcfxz7cpn57wvj18sjisvzq8b5vd9rw16ihd2i6mcp3wa1";
+  })
+  (fetchNuGet {
+    name = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl";
+    version = "4.3.2";
+    sha256 = "15gsm1a8jdmgmf8j5v1slfz8ks124nfdhk2vxs2rw3asrxalg8hi";
+  })
+  (fetchNuGet {
+    name = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl";
+    version = "4.3.2";
+    sha256 = "0q0n5q1r1wnqmr5i5idsrd9ywl33k0js4pngkwq9p368mbxp8x1w";
+  })
+  (fetchNuGet {
+    name = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl";
+    version = "4.3.2";
+    sha256 = "1x0g58pbpjrmj2x2qw17rdwwnrcl0wvim2hdwz48lixvwvp22n9c";
+  })
+  (fetchNuGet {
+    name = "SharpZipLib";
+    version = "1.3.1";
+    sha256 = "09zypjfils38143da507s5fi4hzvdlz32wfav219hksnpl35y8x0";
+  })
+  (fetchNuGet {
+    name = "StreamJsonRpc";
+    version = "2.6.121";
+    sha256 = "0xzvpk17w2skndzdg47j7gkrrvw6521db4mv8lc3v8hm97vs9m76";
+  })
+  (fetchNuGet {
+    name = "System.Collections.Concurrent";
+    version = "4.3.0";
+    sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8";
+  })
+  (fetchNuGet {
+    name = "System.Collections.Immutable";
+    version = "1.7.1";
+    sha256 = "1nh4nlxfc7lbnbl86wwk1a3jwl6myz5j6hvgh5sp4krim9901hsq";
+  })
+  (fetchNuGet {
+    name = "System.Collections";
+    version = "4.3.0";
+    sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9";
+  })
+  (fetchNuGet {
+    name = "System.CommandLine";
+    version = "2.0.0-beta1.20253.1";
+    sha256 = "16saf1fm9q80bb624fkqz0ksrwpnbw9617d7xg3jib7a2wgagm2r";
+  })
+  (fetchNuGet {
+    name = "System.ComponentModel.Annotations";
+    version = "4.7.0";
+    sha256 = "06x1m46ddxj0ng28d7gry9gjkqdg2kp89jyf480g5gznyybbs49z";
+  })
+  (fetchNuGet {
+    name = "System.Diagnostics.Debug";
+    version = "4.3.0";
+    sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y";
+  })
+  (fetchNuGet {
+    name = "System.Diagnostics.DiagnosticSource";
+    version = "4.3.0";
+    sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq";
+  })
+  (fetchNuGet {
+    name = "System.Diagnostics.Tracing";
+    version = "4.3.0";
+    sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4";
+  })
+  (fetchNuGet {
+    name = "System.Globalization.Calendars";
+    version = "4.3.0";
+    sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq";
+  })
+  (fetchNuGet {
+    name = "System.Globalization.Extensions";
+    version = "4.3.0";
+    sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls";
+  })
+  (fetchNuGet {
+    name = "System.Globalization";
+    version = "4.3.0";
+    sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki";
+  })
+  (fetchNuGet {
+    name = "System.IO.FileSystem.Primitives";
+    version = "4.3.0";
+    sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c";
+  })
+  (fetchNuGet {
+    name = "System.IO.FileSystem";
+    version = "4.3.0";
+    sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw";
+  })
+  (fetchNuGet {
+    name = "System.IO.Pipelines";
+    version = "4.7.2";
+    sha256 = "16v4qaypm72cfsfqr8z3k6yrpzn0m3apgkh6aljfwpycdk150sf9";
+  })
+  (fetchNuGet {
+    name = "System.IO";
+    version = "4.3.0";
+    sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f";
+  })
+  (fetchNuGet {
+    name = "System.Linq";
+    version = "4.3.0";
+    sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7";
+  })
+  (fetchNuGet {
+    name = "System.Memory";
+    version = "4.5.3";
+    sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a";
+  })
+  (fetchNuGet {
+    name = "System.Memory";
+    version = "4.5.4";
+    sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y";
+  })
+  (fetchNuGet {
+    name = "System.Net.Http";
+    version = "4.3.4";
+    sha256 = "0kdp31b8819v88l719j6my0yas6myv9d1viql3qz5577mv819jhl";
+  })
+  (fetchNuGet {
+    name = "System.Net.Primitives";
+    version = "4.3.0";
+    sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii";
+  })
+  (fetchNuGet {
+    name = "System.Net.WebSockets";
+    version = "4.3.0";
+    sha256 = "1gfj800078kggcgl0xyl00a6y5k4wwh2k2qm69rjy22wbmq7fy4p";
+  })
+  (fetchNuGet {
+    name = "System.Reflection.Emit.Lightweight";
+    version = "4.6.0";
+    sha256 = "0hry2k6b7kicg4zxnq0hhn0ys52711pxy7l9v5sp7gvp9cicwpgp";
+  })
+  (fetchNuGet {
+    name = "System.Reflection.Emit";
+    version = "4.7.0";
+    sha256 = "121l1z2ypwg02yz84dy6gr82phpys0njk7yask3sihgy214w43qp";
+  })
+  (fetchNuGet {
+    name = "System.Reflection.Primitives";
+    version = "4.3.0";
+    sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276";
+  })
+  (fetchNuGet {
+    name = "System.Reflection";
+    version = "4.3.0";
+    sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m";
+  })
+  (fetchNuGet {
+    name = "System.Resources.ResourceManager";
+    version = "4.3.0";
+    sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49";
+  })
+  (fetchNuGet {
+    name = "System.Runtime.CompilerServices.Unsafe";
+    version = "4.5.2";
+    sha256 = "1vz4275fjij8inf31np78hw50al8nqkngk04p3xv5n4fcmf1grgi";
+  })
+  (fetchNuGet {
+    name = "System.Runtime.CompilerServices.Unsafe";
+    version = "4.7.1";
+    sha256 = "119br3pd85lq8zcgh4f60jzmv1g976q1kdgi3hvqdlhfbw6siz2j";
+  })
+  (fetchNuGet {
+    name = "System.Runtime.Extensions";
+    version = "4.3.0";
+    sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60";
+  })
+  (fetchNuGet {
+    name = "System.Runtime.Handles";
+    version = "4.3.0";
+    sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8";
+  })
+  (fetchNuGet {
+    name = "System.Runtime.InteropServices";
+    version = "4.3.0";
+    sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j";
+  })
+  (fetchNuGet {
+    name = "System.Runtime.Numerics";
+    version = "4.3.0";
+    sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z";
+  })
+  (fetchNuGet {
+    name = "System.Runtime";
+    version = "4.3.0";
+    sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7";
+  })
+  (fetchNuGet {
+    name = "System.Security.AccessControl";
+    version = "4.6.0";
+    sha256 = "1wl1dyghi0qhpap1vgfhg2ybdyyhy9vc2a7dpm1xb30vfgmlkjmf";
+  })
+  (fetchNuGet {
+    name = "System.Security.Cryptography.Algorithms";
+    version = "4.3.0";
+    sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml";
+  })
+  (fetchNuGet {
+    name = "System.Security.Cryptography.Cng";
+    version = "4.3.0";
+    sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv";
+  })
+  (fetchNuGet {
+    name = "System.Security.Cryptography.Csp";
+    version = "4.3.0";
+    sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1";
+  })
+  (fetchNuGet {
+    name = "System.Security.Cryptography.Encoding";
+    version = "4.3.0";
+    sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32";
+  })
+  (fetchNuGet {
+    name = "System.Security.Cryptography.OpenSsl";
+    version = "4.3.0";
+    sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc";
+  })
+  (fetchNuGet {
+    name = "System.Security.Cryptography.Primitives";
+    version = "4.3.0";
+    sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby";
+  })
+  (fetchNuGet {
+    name = "System.Security.Cryptography.X509Certificates";
+    version = "4.3.0";
+    sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h";
+  })
+  (fetchNuGet {
+    name = "System.Security.Principal.Windows";
+    version = "4.6.0";
+    sha256 = "1jmfzfz1n8hp63s5lja5xxpzkinbp6g59l3km9h8avjiisdrg5wm";
+  })
+  (fetchNuGet {
+    name = "System.Text.Encoding";
+    version = "4.3.0";
+    sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr";
+  })
+  (fetchNuGet {
+    name = "System.Threading.Tasks.Dataflow";
+    version = "4.11.1";
+    sha256 = "09fbfsiay1xcbpvnq2j38b6mb2scvf0s8mpn78bcqsldidg7k2vw";
+  })
+  (fetchNuGet {
+    name = "System.Threading.Tasks.Extensions";
+    version = "4.5.4";
+    sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153";
+  })
+  (fetchNuGet {
+    name = "System.Threading.Tasks";
+    version = "4.3.0";
+    sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7";
+  })
+  (fetchNuGet {
+    name = "System.Threading";
+    version = "4.3.0";
+    sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34";
+  })
+  (fetchNuGet {
+    name = "WaylandNET";
+    version = "0.2.0";
+    sha256 = "1qjpvra08vdqdw4j1gamz6451x5sd5r1j86lsvrl8akq4nymfr8k";
+  })
+]
diff --git a/pkgs/tools/X11/opentabletdriver/shell.nix b/pkgs/tools/X11/opentabletdriver/shell.nix
new file mode 100644
index 00000000000..4367d22e9df
--- /dev/null
+++ b/pkgs/tools/X11/opentabletdriver/shell.nix
@@ -0,0 +1,12 @@
+{ pkgs ? import ../../../../. { } }:
+
+with pkgs;
+
+mkShell {
+  packages = [
+    common-updater-scripts
+    curl
+    dotnetCorePackages.sdk_5_0
+    jq
+  ];
+}
diff --git a/pkgs/tools/X11/opentabletdriver/update.sh b/pkgs/tools/X11/opentabletdriver/update.sh
new file mode 100755
index 00000000000..9944bb0b6de
--- /dev/null
+++ b/pkgs/tools/X11/opentabletdriver/update.sh
@@ -0,0 +1,72 @@
+#!/usr/bin/env nix-shell
+#!nix-shell shell.nix -i bash
+
+set -eo pipefail
+
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+deps_file="$(realpath "./deps.nix")"
+
+new_version="$(curl -s "https://api.github.com/repos/OpenTabletDriver/OpenTabletDriver/releases" | jq -r '.[0].tag_name' | sed 's|[^0-9.]||g')"
+old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
+if [[ "$new_version" == "$old_version" ]]; then
+  echo "Up to date"
+  [[ "${1}" != "--force" ]] && exit 0
+fi
+
+# Updating the hash of deb package manually since there seems to be no way to do it automatically
+oldDebPkgUrl="https://github.com/OpenTabletDriver/OpenTabletDriver/releases/download/v${old_version}/OpenTabletDriver.deb";
+newDebPkgUrl="https://github.com/OpenTabletDriver/OpenTabletDriver/releases/download/v${new_version}/OpenTabletDriver.deb";
+oldDebSha256=$(nix-prefetch-url "$oldDebPkgUrl")
+newDebSha256=$(nix-prefetch-url "$newDebPkgUrl")
+echo "oldDebSha256: $oldDebSha256 newDebSha256: $newDebSha256"
+sed -i ./default.nix -re "s|\"$oldDebSha256\"|\"$newDebSha256\"|"
+
+cd ../../../..
+update-source-version opentabletdriver "$new_version"
+store_src="$(nix-build . -A opentabletdriver.src --no-out-link)"
+src="$(mktemp -d /tmp/opentabletdriver-src.XXX)"
+echo "Temp src dir: $src"
+cp -rT "$store_src" "$src"
+chmod -R +w "$src"
+
+pushd "$src"
+
+# Setup empty nuget package folder to force reinstall.
+mkdir ./nuget_tmp.packages
+cat >./nuget_tmp.config <<EOF
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <packageSources>
+    <add key="nuget" value="https://api.nuget.org/v3/index.json" />
+  </packageSources>
+  <config>
+    <add key="globalPackagesFolder" value="$(realpath ./nuget_tmp.packages)" />
+  </config>
+</configuration>
+EOF
+
+export DOTNET_CLI_TELEMETRY_OPTOUT=1
+
+for project in OpenTabletDriver.{Console,Daemon,UX.Gtk}; do
+    dotnet restore $project --configfile ./nuget_tmp.config
+done
+
+echo "{ fetchNuGet }: [" >"$deps_file"
+while read pkg_spec; do
+  { read pkg_name; read pkg_version; } < <(
+    # Build version part should be ignored: `3.0.0-beta2.20059.3+77df2220` -> `3.0.0-beta2.20059.3`
+    sed -nE 's/.*<id>([^<]*).*/\1/p; s/.*<version>([^<+]*).*/\1/p' "$pkg_spec")
+  pkg_sha256="$(nix-hash --type sha256 --flat --base32 "$(dirname "$pkg_spec")"/*.nupkg)"
+  cat >>"$deps_file" <<EOF
+  (fetchNuGet {
+    name = "$pkg_name";
+    version = "$pkg_version";
+    sha256 = "$pkg_sha256";
+  })
+EOF
+done < <(find ./nuget_tmp.packages -name '*.nuspec' | sort)
+echo "]" >>"$deps_file"
+
+popd
+rm -r "$src"
diff --git a/pkgs/tools/X11/primus/lib.nix b/pkgs/tools/X11/primus/lib.nix
index f4c2c9efc49..d2f779ddd72 100644
--- a/pkgs/tools/X11/primus/lib.nix
+++ b/pkgs/tools/X11/primus/lib.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fetchpatch
+{ lib, stdenv, fetchFromGitHub, fetchpatch
 , libX11, libGL, mesa
 , nvidia_x11 ? null
 , libglvnd
@@ -42,7 +42,7 @@ in stdenv.mkDerivation {
 
   passthru.glvnd = if nvidia_x11 != null && nvidia_x11.useGLVND then nvidia_x11 else null;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Low-overhead client-side GPU offloading";
     homepage = "https://github.com/amonakov/primus";
     platforms = [ "i686-linux" "x86_64-linux" ];
diff --git a/pkgs/tools/X11/ratmen/default.nix b/pkgs/tools/X11/ratmen/default.nix
index f6042622674..9c662a638e8 100644
--- a/pkgs/tools/X11/ratmen/default.nix
+++ b/pkgs/tools/X11/ratmen/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, perl, xorgproto, libX11}:
+{lib, stdenv, fetchurl, perl, xorgproto, libX11}:
 let
   s = # Generated upstream information
   rec {
@@ -24,10 +24,10 @@ stdenv.mkDerivation {
   ];
   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;
+    description = "A minimalistic X11 menu creator";
+    license = lib.licenses.free ; # 9menu derivative with 9menu license
+    maintainers = [lib.maintainers.raskin];
+    platforms = 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/pkgs/tools/X11/run-scaled/default.nix b/pkgs/tools/X11/run-scaled/default.nix
index aae09d49b3d..012eedf0779 100644
--- a/pkgs/tools/X11/run-scaled/default.nix
+++ b/pkgs/tools/X11/run-scaled/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, makeWrapper, bc, xorgserver, xpra, xrandr }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper, bc, xorgserver, xpra, xrandr }:
 
 stdenv.mkDerivation {
   version = "git-2018-06-03";
@@ -11,16 +11,16 @@ stdenv.mkDerivation {
     sha256 = "1ma4ax7ydq4xvyzrc4zapihmf7v3d9zl9mbi8bgpps7nlgz544ys";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ 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 ]}
+      ${lib.makeBinPath [ bc xorgserver xpra xrandr ]}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Run an X application scaled via xpra";
     homepage = "https://github.com/kaueraal/run_scaled";
     maintainers = [ maintainers.snaar ];
diff --git a/pkgs/tools/X11/runningx/default.nix b/pkgs/tools/X11/runningx/default.nix
index 55f99c63365..b3b5233564a 100644
--- a/pkgs/tools/X11/runningx/default.nix
+++ b/pkgs/tools/X11/runningx/default.nix
@@ -1,19 +1,19 @@
-{ stdenv, fetchurl, pkgconfig, libX11 }:
+{ lib, stdenv, fetchurl, pkg-config, 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 ];
+  nativeBuildInputs = [ pkg-config ];
 
   buildInputs = [ libX11 ];
 
-  phases = [ "buildPhase" "installPhase" ];
+  dontUnpack = true;
 
   buildPhase = ''
     cc -O2 -o RunningX $(pkg-config --cflags --libs x11) $src
@@ -27,8 +27,8 @@ stdenv.mkDerivation {
   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 ];
+    license = lib.licenses.free;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.romildo ];
   };
 }
diff --git a/pkgs/tools/X11/screen-message/default.nix b/pkgs/tools/X11/screen-message/default.nix
index c57c4f82431..58bac8702b7 100644
--- a/pkgs/tools/X11/screen-message/default.nix
+++ b/pkgs/tools/X11/screen-message/default.nix
@@ -1,15 +1,15 @@
-{ stdenv, fetchurl, autoreconfHook, pkgconfig, gtk3 }:
+{ lib, stdenv, fetchurl, autoreconfHook, pkg-config, gtk3 }:
 
 stdenv.mkDerivation rec {
   pname = "screen-message";
-  version = "0.25";
+  version = "0.26";
 
   src = fetchurl {
     url = "mirror://debian/pool/main/s/screen-message/screen-message_${version}.orig.tar.gz";
-    sha256 = "1lw955qq5pq010lzmaf32ylj2iprgsri9ih4hx672c3f794ilab0";
+    sha256 = "sha256-vBKnuXOEQZDACmlNP9wjJ3NbIdixIx7I72a6Nj6pjzc=";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ gtk3 ];
 
   # screen-message installs its binary in $(prefix)/games per default
@@ -18,8 +18,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2Plus;
+    maintainers = [ lib.maintainers.fpletz ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/X11/sct/default.nix b/pkgs/tools/X11/sct/default.nix
index 3f6291417e5..0d74206155a 100644
--- a/pkgs/tools/X11/sct/default.nix
+++ b/pkgs/tools/X11/sct/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libX11, libXrandr }:
+{ lib, stdenv, fetchurl, libX11, libXrandr }:
 
 stdenv.mkDerivation rec {
   name = "sct";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
 
   installPhase = "install -Dt $out/bin sct";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.tedunangst.com/flak/post/sct-set-color-temperature";
     description = "A minimal utility to set display colour temperature";
     maintainers = [ maintainers.raskin ];
diff --git a/pkgs/tools/X11/setroot/default.nix b/pkgs/tools/X11/setroot/default.nix
index 56c356b20d5..014ac4c54be 100644
--- a/pkgs/tools/X11/setroot/default.nix
+++ b/pkgs/tools/X11/setroot/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libX11, imlib2
+{ lib, stdenv, fetchFromGitHub, libX11, imlib2
 , enableXinerama ? true, libXinerama ? null
 }:
 
@@ -16,13 +16,13 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ libX11 imlib2 ]
-    ++ stdenv.lib.optional enableXinerama libXinerama;
+    ++ lib.optional enableXinerama libXinerama;
 
-  buildFlags = [ "CC=cc" (if enableXinerama then "xinerama=1" else "xinerama=0") ] ;
+  buildFlags = [ "CC=${stdenv.cc.targetPrefix}cc" (if enableXinerama then "xinerama=1" else "xinerama=0") ] ;
 
   installFlags = [ "DESTDIR=$(out)" "PREFIX=" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Simple X background setter inspired by imlibsetroot and feh";
     homepage = "https://github.com/ttzhou/setroot";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/X11/skippy-xd/default.nix b/pkgs/tools/X11/skippy-xd/default.nix
index 4fd9678733d..0519f2c4204 100644
--- a/pkgs/tools/X11/skippy-xd/default.nix
+++ b/pkgs/tools/X11/skippy-xd/default.nix
@@ -1,10 +1,10 @@
-{stdenv, fetchgit, xorgproto, libX11, libXft, libXcomposite, libXdamage
-, libXext, libXinerama, libjpeg, giflib, pkgconfig
+{lib, stdenv, fetchgit, xorgproto, libX11, libXft, libXcomposite, libXdamage
+, libXext, libXinerama, libjpeg, giflib, pkg-config
 }:
 let
   buildInputs = [
     xorgproto libX11 libXft libXcomposite libXdamage libXext
-    libXinerama libjpeg giflib pkgconfig
+    libXinerama libjpeg giflib pkg-config
   ];
 in
 stdenv.mkDerivation rec {
@@ -21,10 +21,9 @@ stdenv.mkDerivation rec {
     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;
+    description = "Expose-style compositing-based standalone window switcher";
+    license = lib.licenses.gpl2Plus ;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/X11/srandrd/default.nix b/pkgs/tools/X11/srandrd/default.nix
index 6d5fa0f3d98..4c79e11765c 100644
--- a/pkgs/tools/X11/srandrd/default.nix
+++ b/pkgs/tools/X11/srandrd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , libX11
 , libXrandr
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/jceb/srandrd";
     description = "Simple randr daemon";
     license = licenses.mit;
diff --git a/pkgs/tools/X11/sselp/default.nix b/pkgs/tools/X11/sselp/default.nix
index 81893fd2be8..d22884270dd 100644
--- a/pkgs/tools/X11/sselp/default.nix
+++ b/pkgs/tools/X11/sselp/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchurl, libX11 }:
+{ lib, 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 = ''
@@ -20,8 +20,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.mit;
+    maintainers = [lib.maintainers.magnetophon ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/X11/sx/default.nix b/pkgs/tools/X11/sx/default.nix
new file mode 100644
index 00000000000..c03d4443fcf
--- /dev/null
+++ b/pkgs/tools/X11/sx/default.nix
@@ -0,0 +1,30 @@
+{ coreutils, fetchFromGitHub, lib, makeWrapper, stdenv, util-linux, xauth, xorgserver }:
+
+stdenv.mkDerivation rec {
+  pname = "sx";
+  version = "2.1.7";
+
+  src = fetchFromGitHub {
+    owner = "earnestly";
+    repo = pname;
+    rev = version;
+    sha256 = "0xv15m30nhcknasqiybj5wwf7l91q4a4jf6xind8x5x00c6br6nl";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/sx \
+      --prefix PATH : ${lib.makeBinPath [ coreutils util-linux xorgserver xauth ]}
+  '';
+
+  meta = with lib; {
+    description = "Simple alternative to both xinit and startx for starting a Xorg server";
+    homepage = "https://github.com/earnestly/sx";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/pkgs/tools/X11/vdpauinfo/default.nix b/pkgs/tools/X11/vdpauinfo/default.nix
index 741043a9e53..35305d44635 100644
--- a/pkgs/tools/X11/vdpauinfo/default.nix
+++ b/pkgs/tools/X11/vdpauinfo/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, libvdpau }:
+{ lib, stdenv, fetchurl, pkg-config, libvdpau }:
 
 stdenv.mkDerivation rec {
   pname = "vdpauinfo";
@@ -9,10 +9,10 @@ stdenv.mkDerivation rec {
     sha256 = "0s6jdadnycyd1agsnfx7hrf17hmipasx1fpmppd4m1z6i9sp1i6g";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libvdpau ];
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/X11/virtualgl/default.nix b/pkgs/tools/X11/virtualgl/default.nix
index aa839e6d684..fe5ac9410a6 100644
--- a/pkgs/tools/X11/virtualgl/default.nix
+++ b/pkgs/tools/X11/virtualgl/default.nix
@@ -18,7 +18,7 @@ stdenv.mkDerivation {
   '';
 
   meta = {
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
     inherit (virtualglLib.meta) license;
   };
 }
diff --git a/pkgs/tools/X11/virtualgl/lib.nix b/pkgs/tools/X11/virtualgl/lib.nix
index a2a7e5e6922..5974b2bd3d5 100644
--- a/pkgs/tools/X11/virtualgl/lib.nix
+++ b/pkgs/tools/X11/virtualgl/lib.nix
@@ -1,12 +1,16 @@
-{ stdenv, fetchurl, cmake, libGL, libGLU, libX11, libXv, libXtst, libjpeg_turbo, fltk }:
+{ lib, stdenv, fetchurl, cmake
+, libGL, libGLU, libXv, libXtst, libXi, libjpeg_turbo, fltk
+, xorg
+, opencl-headers, opencl-clhpp, ocl-icd
+}:
 
 stdenv.mkDerivation rec {
   pname = "virtualgl-lib";
-  version = "2.6.2";
+  version = "2.6.5";
 
   src = fetchurl {
     url = "mirror://sourceforge/virtualgl/VirtualGL-${version}.tar.gz";
-    sha256 = "0ngqwsm9bml6lis0igq3bn92amh04rccd6jhjibj3418hrbzipvr";
+    sha256 = "1giin3jmcs6y616bb44bpz30frsmj9f8pz2vg7jvb9vcfc9456rr";
   };
 
   cmakeFlags = [ "-DVGL_SYSTEMFLTK=1" "-DTJPEG_LIBRARY=${libjpeg_turbo.out}/lib/libturbojpeg.so" ];
@@ -15,11 +19,19 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ cmake ];
 
-  buildInputs = [ libjpeg_turbo libGL libGLU fltk libX11 libXv libXtst ];
+  buildInputs = [ libjpeg_turbo libGL libGLU fltk
+    libXv libXtst libXi xorg.xcbutilkeysyms
+    opencl-headers opencl-clhpp ocl-icd
+  ];
 
-  enableParallelBuilding = true;
+  fixupPhase = ''
+    substituteInPlace $out/bin/vglrun \
+      --replace "LD_PRELOAD=libvglfaker" "LD_PRELOAD=$out/lib/libvglfaker" \
+      --replace "LD_PRELOAD=libdlfaker" "LD_PRELOAD=$out/lib/libdlfaker" \
+      --replace "LD_PRELOAD=libgefaker" "LD_PRELOAD=$out/lib/libgefaker"
+  '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.virtualgl.org/";
     description = "X11 GL rendering in a remote computer with full 3D hw acceleration";
     license = licenses.wxWindows;
diff --git a/pkgs/tools/X11/wayv/default.nix b/pkgs/tools/X11/wayv/default.nix
index 55f6eede0fa..e489ad0237b 100644
--- a/pkgs/tools/X11/wayv/default.nix
+++ b/pkgs/tools/X11/wayv/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchFromGitHub, libX11}:
+{lib, stdenv, fetchFromGitHub, libX11}:
 stdenv.mkDerivation rec {
   pname = "wayv";
   version = "0.3";
@@ -22,11 +22,10 @@ stdenv.mkDerivation rec {
   '';
 
   meta = {
-    inherit version;
     description = "A gesture control for X11";
-    license = stdenv.lib.licenses.gpl2Plus ;
-    maintainers = [stdenv.lib.maintainers.raskin];
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.gpl2Plus ;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
     homepage = "https://github.com/mikemb/wayV";
   };
 }
diff --git a/pkgs/tools/X11/wmctrl/default.nix b/pkgs/tools/X11/wmctrl/default.nix
index 64f8627a2ef..19a464aff72 100644
--- a/pkgs/tools/X11/wmctrl/default.nix
+++ b/pkgs/tools/X11/wmctrl/default.nix
@@ -1,8 +1,8 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , libX11
 , glib
-, pkgconfig
+, pkg-config
 , libXmu
 }:
 
@@ -17,7 +17,9 @@ stdenv.mkDerivation rec {
     sha256 = "1afclc57b9017a73mfs9w7lbdvdipmf9q0xdk116f61gnvyix2np";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  strictDeps = true;
+  depsBuildBuild = [ pkg-config ];
+  nativeBuildInputs = [ glib.dev ];
   buildInputs = [ libX11 libXmu glib ];
 
   patches = [ ./64-bit-data.patch ];
@@ -25,9 +27,9 @@ stdenv.mkDerivation rec {
   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 ];
+    license = lib.licenses.gpl2;
+    platforms = with lib.platforms; all;
+    maintainers = [ lib.maintainers.Anton-Latukha ];
   };
 
 }
diff --git a/pkgs/tools/X11/wmutils-core/default.nix b/pkgs/tools/X11/wmutils-core/default.nix
index fdf805f8099..9250a10064f 100644
--- a/pkgs/tools/X11/wmutils-core/default.nix
+++ b/pkgs/tools/X11/wmutils-core/default.nix
@@ -1,19 +1,19 @@
-{ stdenv, fetchurl, libxcb }:
+{ lib, stdenv, fetchurl, libxcb, xcbutil, xcb-util-cursor }:
 
 stdenv.mkDerivation rec {
   pname = "wmutils-core";
-  version = "1.1";
+  version = "1.5";
 
   src = fetchurl {
     url = "https://github.com/wmutils/core/archive/v${version}.tar.gz";
-    sha256 = "0aq95khs154j004b79w9rgm80vpggxfqynha5rckm2cx20d1fa5s";
+    sha256 = "0wk39aq2lrnc0wjs8pv3cigw3lwy2qzaw0v61bwknd5wabm25bvj";
   };
 
-  buildInputs = [ libxcb ];
+  buildInputs = [ libxcb xcbutil xcb-util-cursor ];
 
   installFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Set of window manipulation tools";
     homepage = "https://github.com/wmutils/core";
     license = licenses.isc;
diff --git a/pkgs/tools/X11/wmutils-libwm/default.nix b/pkgs/tools/X11/wmutils-libwm/default.nix
index 72022621afe..6d2787a96cd 100644
--- a/pkgs/tools/X11/wmutils-libwm/default.nix
+++ b/pkgs/tools/X11/wmutils-libwm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libxcb }:
+{ lib, stdenv, fetchFromGitHub, libxcb }:
 
 stdenv.mkDerivation rec {
   pname = "wmutils-libwm";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
 
   installFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A small library for X window manipulation";
     homepage = "https://github.com/wmutils/libwm";
     license = licenses.isc;
diff --git a/pkgs/tools/X11/wmutils-opt/default.nix b/pkgs/tools/X11/wmutils-opt/default.nix
index 39f26b95cdb..0d847262ea5 100644
--- a/pkgs/tools/X11/wmutils-opt/default.nix
+++ b/pkgs/tools/X11/wmutils-opt/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libxcb }:
+{ lib, stdenv, fetchFromGitHub, libxcb }:
 
 stdenv.mkDerivation rec {
   pname = "wmutils-opt";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
 
   installFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Optional addons to wmutils";
     homepage = "https://github.com/wmutils/opt";
     license = licenses.isc;
diff --git a/pkgs/tools/X11/wpgtk/default.nix b/pkgs/tools/X11/wpgtk/default.nix
index 2aa05935991..66464ae0b53 100644
--- a/pkgs/tools/X11/wpgtk/default.nix
+++ b/pkgs/tools/X11/wpgtk/default.nix
@@ -1,22 +1,22 @@
-{ stdenv, python3Packages, fetchFromGitHub, libxslt,
-  gobject-introspection, gtk3, wrapGAppsHook, gnome3 }:
+{ lib, python3Packages, fetchFromGitHub, libxslt,
+  gobject-introspection, gtk3, wrapGAppsHook, gnome }:
 
 python3Packages.buildPythonApplication rec {
   pname = "wpgtk";
-  version = "6.1.0";
+  version = "6.1.3";
 
   src = fetchFromGitHub {
     owner = "deviantfero";
     repo = "wpgtk";
     rev = version;
-    sha256 = "06z6qbfd9l3acp3wm28rq4vx3m5cxi4lpxgzc2nxvxmiz8rnnmh1";
+    sha256 = "1jv28ygsd6ifjb096w3pm50za6wi62y45ycbizwhv7x56lr6zx1v";
   };
 
   buildInputs = [
     wrapGAppsHook
     gtk3
     gobject-introspection
-    gnome3.adwaita-icon-theme
+    gnome.adwaita-icon-theme
     libxslt
   ];
 
@@ -34,7 +34,7 @@ python3Packages.buildPythonApplication rec {
   # No test exist
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with 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.
diff --git a/pkgs/tools/X11/x11spice/default.nix b/pkgs/tools/X11/x11spice/default.nix
index 23af2ac44ca..4facc365c1e 100644
--- a/pkgs/tools/X11/x11spice/default.nix
+++ b/pkgs/tools/X11/x11spice/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitLab, autoreconfHook, pkgconfig
+{ lib, stdenv, fetchFromGitLab, autoreconfHook, pkg-config
 , xorg, gtk2, spice, spice-protocol
 }:
 
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
     sha256 = "0va5ix14vnqch59gq8wvrhw6q0w0n27sy70xx5kvfj2cl0h1xpg8";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
   buildInputs = [
     xorg.libxcb xorg.xcbutil xorg.utilmacros
@@ -23,11 +23,8 @@ stdenv.mkDerivation rec {
 
   NIX_LDFLAGS = "-lpthread";
 
-  meta = with stdenv.lib; {
-    description = ''
-      x11spice will enable a running X11 desktop to be available
-      via a Spice server
-    '';
+  meta = with lib; {
+    description = "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;
diff --git a/pkgs/tools/X11/x11vnc/default.nix b/pkgs/tools/X11/x11vnc/default.nix
index 2f7b0d7697e..bd10127f729 100644
--- a/pkgs/tools/X11/x11vnc/default.nix
+++ b/pkgs/tools/X11/x11vnc/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub,
+{ lib, stdenv, fetchFromGitHub, fetchpatch,
   openssl, zlib, libjpeg, xorg, coreutils, libvncserver,
-  autoreconfHook, pkgconfig }:
+  autoreconfHook, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "x11vnc";
@@ -13,7 +13,15 @@ stdenv.mkDerivation rec {
     sha256 = "1g652mmi79pfq4p5p7spaswa164rpzjhc5rn2phy5pm71lm0vib1";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  patches = [
+    (fetchpatch {
+      name = "CVE-2020-29074.patch";
+      url = "https://github.com/LibVNC/x11vnc/commit/69eeb9f7baa14ca03b16c9de821f9876def7a36a.patch";
+      sha256 = "0hdhp32g2i5m0ihmaxkxhsn3d5f2qasadvwpgxify4xnzabmyb2d";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
   buildInputs =
     [ xorg.libXfixes xorg.xorgproto openssl xorg.libXdamage
@@ -39,7 +47,7 @@ stdenv.mkDerivation rec {
     configureFlags="--mandir=$out/share/man"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A VNC server connected to a real X11 screen";
     homepage = "https://github.com/LibVNC/x11vnc/";
     platforms = platforms.linux;
diff --git a/pkgs/tools/X11/x2vnc/default.nix b/pkgs/tools/X11/x2vnc/default.nix
index 65d45e23396..10519128a9d 100644
--- a/pkgs/tools/X11/x2vnc/default.nix
+++ b/pkgs/tools/X11/x2vnc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, xorg }:
+{ lib, stdenv, fetchurl, xorg }:
 
 stdenv.mkDerivation {
   name = "x2vnc-1.7.2";
@@ -14,7 +14,7 @@ stdenv.mkDerivation {
 
   hardeningDisable = [ "format" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://fredrik.hubbe.net/x2vnc.html";
     description = "A program to control a remote VNC server";
     platforms = platforms.unix;
diff --git a/pkgs/tools/X11/x2x/default.nix b/pkgs/tools/X11/x2x/default.nix
index deada6ae2d1..01169e68f6e 100644
--- a/pkgs/tools/X11/x2x/default.nix
+++ b/pkgs/tools/X11/x2x/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, imake, libX11, libXtst, libXext, gccmakedep }:
+{ lib, stdenv, fetchurl, imake, libX11, libXtst, libXext, gccmakedep }:
 
 stdenv.mkDerivation {
   name = "x2x-1.27";
@@ -20,7 +20,7 @@ stdenv.mkDerivation {
     install -D x2x.1 $out/man/man1/x2x.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/X11/xannotate/default.nix b/pkgs/tools/X11/xannotate/default.nix
index b1e070673c6..9eafb5e6b49 100644
--- a/pkgs/tools/X11/xannotate/default.nix
+++ b/pkgs/tools/X11/xannotate/default.nix
@@ -1,8 +1,8 @@
-{stdenv, fetchFromBitbucket, libX11}:
+{lib, stdenv, fetchFromBitbucket, libX11}:
 stdenv.mkDerivation rec {
   pname = "xannotate";
   version = "20150301";
-  
+
   src = fetchFromBitbucket {
     owner = "blais";
     repo = pname;
@@ -13,11 +13,10 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2Plus ;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
     homepage = "https://bitbucket.org/blais/xannotate";
   };
 }
diff --git a/pkgs/tools/X11/xautomation/default.nix b/pkgs/tools/X11/xautomation/default.nix
index 0a31d5fb865..a1fb8817632 100644
--- a/pkgs/tools/X11/xautomation/default.nix
+++ b/pkgs/tools/X11/xautomation/default.nix
@@ -1,22 +1,21 @@
-{ stdenv, fetchurl, pkgconfig, libpng, libX11, libXext, libXi, libXtst }:
+{ lib, stdenv, fetchurl, pkg-config, libpng, libX11, libXext, libXi, libXtst }:
 
-let version = "1.09"; in
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "xautomation";
-  inherit version;
+  version = "1.09";
   src = fetchurl {
     url = "https://www.hoopajoo.net/static/projects/xautomation-${version}.tar.gz";
     sha256 = "03azv5wpg65h40ip2kk1kdh58vix4vy1r9bihgsq59jx2rhjr3zf";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   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;
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ vaibhavsagar ];
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/X11/xbanish/default.nix b/pkgs/tools/X11/xbanish/default.nix
index 6267cd1a34c..169f87a50f6 100644
--- a/pkgs/tools/X11/xbanish/default.nix
+++ b/pkgs/tools/X11/xbanish/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchFromGitHub, libX11, libXi, libXt, libXfixes, libXext}:
+{lib, stdenv, fetchFromGitHub, libX11, libXi, libXt, libXfixes, libXext}:
 
 stdenv.mkDerivation rec {
   version = "1.7";
@@ -35,8 +35,8 @@ stdenv.mkDerivation rec {
       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;
+    license = lib.licenses.bsd3;
+    maintainers = [lib.maintainers.choochootrain];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/X11/xbindkeys-config/default.nix b/pkgs/tools/X11/xbindkeys-config/default.nix
index 35961aff178..bdade93329b 100644
--- a/pkgs/tools/X11/xbindkeys-config/default.nix
+++ b/pkgs/tools/X11/xbindkeys-config/default.nix
@@ -1,11 +1,11 @@
-{ stdenv, fetchurl, gtk, pkgconfig, procps, makeWrapper, ... }:
+{ lib, stdenv, fetchurl, gtk, pkg-config, procps, makeWrapper, ... }:
 
 stdenv.mkDerivation rec {
   pname = "xbindkeys-config";
   version = "0.1.3";
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ gtk makeWrapper ];
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [ gtk ];
 
   src = fetchurl {
     url = "mirror://debian/pool/main/x/xbindkeys-config/xbindkeys-config_${version}.orig.tar.gz";
@@ -17,9 +17,9 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [benley];
+    platforms = with lib.platforms; linux;
   };
 
   patches = [ ./xbindkeys-config-patch1.patch ];
diff --git a/pkgs/tools/X11/xbindkeys/default.nix b/pkgs/tools/X11/xbindkeys/default.nix
index 71316bdb36c..17e0ca66e3f 100644
--- a/pkgs/tools/X11/xbindkeys/default.nix
+++ b/pkgs/tools/X11/xbindkeys/default.nix
@@ -1,22 +1,21 @@
-{ stdenv, fetchurl, pkgconfig, libX11, guile }:
+{ lib, stdenv, fetchurl, pkg-config, libX11, guile }:
 
-let version = "1.8.7"; in
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "xbindkeys";
-  inherit version;
+  version = "1.8.7";
   src = fetchurl {
     url = "https://www.nongnu.org/xbindkeys/xbindkeys-${version}.tar.gz";
     sha256 = "1wl2vc5alisiwyk8m07y1ryq8w3ll9ym83j27g4apm4ixjl8d6x2";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   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;
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/X11/xbrightness/default.nix b/pkgs/tools/X11/xbrightness/default.nix
index cbf4d2c9400..1bb95699f64 100644
--- a/pkgs/tools/X11/xbrightness/default.nix
+++ b/pkgs/tools/X11/xbrightness/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, imake, gccmakedep
+{ lib, stdenv, fetchurl, imake, gccmakedep
 , libX11, libXaw, libXext, libXmu, libXpm, libXxf86vm  }:
 
 stdenv.mkDerivation {
@@ -18,7 +18,7 @@ stdenv.mkDerivation {
   meta = {
     description = "X11 brigthness and gamma software control";
     homepage = "http://shallowsky.com/software";
-    license = stdenv.lib.licenses.mit;
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.mit;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/X11/xcalib/default.nix b/pkgs/tools/X11/xcalib/default.nix
index 4e400ee8a24..78804d02791 100644
--- a/pkgs/tools/X11/xcalib/default.nix
+++ b/pkgs/tools/X11/xcalib/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libX11, libXxf86vm, libXext, libXrandr }:
+{ lib, stdenv, fetchFromGitHub, libX11, libXxf86vm, libXext, libXrandr }:
 
 stdenv.mkDerivation rec {
   name = "xcalib-0.10";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
     cp xcalib $out/bin/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit (src.meta) homepage;
     description = "A tiny monitor calibration loader for X and MS-Windows";
     license = licenses.gpl2;
diff --git a/pkgs/tools/X11/xcape/default.nix b/pkgs/tools/X11/xcape/default.nix
index eefaad82b1a..f8d4376017b 100644
--- a/pkgs/tools/X11/xcape/default.nix
+++ b/pkgs/tools/X11/xcape/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, libX11, libXtst, xorgproto,
+{ lib, stdenv, fetchFromGitHub, pkg-config, libX11, libXtst, xorgproto,
 libXi }:
 
 stdenv.mkDerivation rec {
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
     sha256 = "04grs4w9kpfzz25mqw82zdiy51g0w355gpn5b170p7ha5972ykc8";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   buildInputs = [ libX11 libXtst xorgproto libXi ];
 
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
 
   postInstall = "install -Dm444 --target-directory $out/share/doc README.md";
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/X11/xchainkeys/default.nix b/pkgs/tools/X11/xchainkeys/default.nix
index 238b8c7b2b2..06428393b2a 100644
--- a/pkgs/tools/X11/xchainkeys/default.nix
+++ b/pkgs/tools/X11/xchainkeys/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libX11 }:
+{ lib, stdenv, fetchurl, libX11 }:
 
 stdenv.mkDerivation rec {
   name = "xchainkeys-0.11";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/X11/xcwd/default.nix b/pkgs/tools/X11/xcwd/default.nix
index c0e8cf5d35b..fa4ec15b816 100644
--- a/pkgs/tools/X11/xcwd/default.nix
+++ b/pkgs/tools/X11/xcwd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libX11 }:
+{ lib, stdenv, fetchFromGitHub, libX11 }:
 
 stdenv.mkDerivation {
   version = "2019-05-09";
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
     install -D xcwd "$out/bin/xcwd"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = ''
       A simple tool which print the current working directory of the currently focused window
     '';
diff --git a/pkgs/tools/X11/xdg-user-dirs/default.nix b/pkgs/tools/X11/xdg-user-dirs/default.nix
index 9ad3db80805..991b9be2238 100644
--- a/pkgs/tools/X11/xdg-user-dirs/default.nix
+++ b/pkgs/tools/X11/xdg-user-dirs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libxslt, docbook_xsl, makeWrapper }:
+{ lib, stdenv, fetchurl, libxslt, docbook_xsl, makeWrapper }:
 
 stdenv.mkDerivation rec {
   name = "xdg-user-dirs-0.17";
@@ -8,7 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "13216b8rfkzak5k6bvpx6jvqv3cnbgpijnjwj8a8d3kq4cl0a1ra";
   };
 
-  buildInputs = [ libxslt docbook_xsl makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ libxslt docbook_xsl ];
 
   preFixup = ''
     # fallback values need to be last
@@ -16,11 +17,11 @@ stdenv.mkDerivation rec {
       --suffix XDG_CONFIG_DIRS : "$out/etc/xdg"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = with maintainers; [ ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/X11/xdg-utils/default.nix b/pkgs/tools/X11/xdg-utils/default.nix
index ccea6a2233c..f10510051ed 100644
--- a/pkgs/tools/X11/xdg-utils/default.nix
+++ b/pkgs/tools/X11/xdg-utils/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchFromGitHub
+{ lib, stdenv, fetchgit, fetchFromGitHub
 , file, libxslt, docbook_xml_dtd_412, docbook_xsl, xmlto
 , w3m, gnugrep, gnused, coreutils, xset, perlPackages
 , mimiSupport ? false, gawk ? null }:
@@ -22,31 +22,30 @@ in
 
 stdenv.mkDerivation rec {
   pname = "xdg-utils";
-  version = "1.1.3";
+  version = "unstable-2020-10-21";
 
-  src = fetchurl {
-    url = "https://portland.freedesktop.org/download/${pname}-${version}.tar.gz";
-    sha256 = "1nai806smz3zcb2l5iny4x7li0fak0rzmjg6vlyhdqm8z25b166p";
+  src = fetchgit {
+    url = "https://gitlab.freedesktop.org/xdg/${pname}.git";
+    rev = "d11b33ec7f24cfb1546f6b459611d440013bdc72";
+    sha256 = "sha256-8PtXfI8hRneEpnUvIV3M+6ACjlkx0w/NEiJFdGbbHnQ=";
   };
 
   # just needed when built from git
   buildInputs = [ libxslt docbook_xml_dtd_412 docbook_xsl xmlto w3m ];
 
-  postInstall = stdenv.lib.optionalString mimiSupport ''
+  postInstall = 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 "$@"; }\
-    PATH=$PATH:'"$out"'/bin\
+    PATH=$PATH:'$out'/bin:${coreutils}/bin\
     &#' -i "$out"/bin/*
 
     substituteInPlace $out/bin/xdg-open \
@@ -58,10 +57,10 @@ stdenv.mkDerivation rec {
     substituteInPlace $out/bin/xdg-email \
       --replace "/bin/echo" "${coreutils}/bin/echo"
 
-    sed 's# which # type -P #g' -i "$out"/bin/*
+    sed 's|\bwhich\b|type -P|g' -i "$out"/bin/*
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/X11/xdotool/default.nix b/pkgs/tools/X11/xdotool/default.nix
index 6785d10258f..5779f5270f7 100644
--- a/pkgs/tools/X11/xdotool/default.nix
+++ b/pkgs/tools/X11/xdotool/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, libX11, perl, libXtst, xorgproto, libXi, libXinerama, libxkbcommon }:
+{ lib, stdenv, fetchurl, pkg-config, libX11, perl, libXtst, xorgproto, libXi, libXinerama, libxkbcommon }:
 
 stdenv.mkDerivation rec {
   pname = "xdotool";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "1a6c1zr86zb53352yxv104l76l8x21gfl2bgw6h21iphxpv5zgim";
   };
 
-  nativeBuildInputs = [ pkgconfig perl ];
+  nativeBuildInputs = [ pkg-config perl ];
   buildInputs = [ libX11 libXtst xorgproto libXi libXinerama libxkbcommon ];
 
   preBuild = ''
@@ -21,8 +21,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.bsd3;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/X11/xgeometry-select/default.nix b/pkgs/tools/X11/xgeometry-select/default.nix
index ed3b460dcb6..87c643af483 100644
--- a/pkgs/tools/X11/xgeometry-select/default.nix
+++ b/pkgs/tools/X11/xgeometry-select/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libX11 }:
+{ lib, stdenv, fetchurl, libX11 }:
 
 stdenv.mkDerivation rec {
   name     = "${baseName}-${version}";
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
     sha256 = "0s7kirgh5iz91m3qy8xiq0j4gljy8zrcnylf4szl5h0lrsaqj7ya";
   };
 
-  phases = [ "buildPhase" "installPhase" ];
+  dontUnpack = true;
 
   buildInputs = [ libX11 ];
 
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
     mv -v ${baseName} $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/X11/xidlehook/default.nix b/pkgs/tools/X11/xidlehook/default.nix
index 35f0d73ea0b..ac5d6fc964b 100644
--- a/pkgs/tools/X11/xidlehook/default.nix
+++ b/pkgs/tools/X11/xidlehook/default.nix
@@ -1,9 +1,19 @@
-{ lib, stdenv, rustPlatform, fetchFromGitLab, python3
-, xlibsWrapper, xorg, libpulseaudio, pkgconfig, patchelf, Security }:
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitLab
+, python3
+, xlibsWrapper
+, xorg
+, libpulseaudio
+, pkg-config
+, patchelf
+, Security
+}:
 
 rustPlatform.buildRustPackage rec {
   pname = "xidlehook";
-  version = "0.9.1";
+  version = "0.10.0";
 
   doCheck = false;
 
@@ -12,14 +22,14 @@ rustPlatform.buildRustPackage rec {
     repo = "xidlehook";
     rev = version;
 
-    sha256 = "00j2iwp25hz9jlr45qszyipljqdnh7h3ni9bkd2lmk58kkvmhf1s";
+    sha256 = "1pl7f8fhxfcy0c6c08vkagp0x1ak96vc5wgamigrk1nkd6l371lb";
   };
 
-  cargoBuildFlags = lib.optionals (!stdenv.isLinux) ["--no-default-features" "--features" "pulse"];
-  cargoSha256 = "050ihjhg33223x6pgvhqrjprx1clkj2x3jr6acf716vbwm3m0bmz";
+  cargoBuildFlags = lib.optionals (!stdenv.isLinux) [ "--no-default-features" "--features" "pulse" ];
+  cargoSha256 = "1y7m61j07gvqfqz97mda39nc602sv7a826c06m8l22i7z380xfms";
 
   buildInputs = [ xlibsWrapper xorg.libXScrnSaver libpulseaudio ] ++ lib.optional stdenv.isDarwin Security;
-  nativeBuildInputs = [ pkgconfig patchelf python3 ];
+  nativeBuildInputs = [ pkg-config patchelf python3 ];
 
   postFixup = lib.optionalString stdenv.isLinux ''
     RPATH="$(patchelf --print-rpath $out/bin/xidlehook)"
@@ -30,7 +40,7 @@ rustPlatform.buildRustPackage rec {
     description = "xautolock rewrite in Rust, with a few extra features";
     homepage = "https://github.com/jD91mZM2/xidlehook";
     license = licenses.mit;
-    maintainers = with maintainers; [ jD91mZM2 ];
+    maintainers = with maintainers; [ ];
     platforms = platforms.unix;
     badPlatforms = platforms.darwin;
   };
diff --git a/pkgs/tools/X11/xinput_calibrator/default.nix b/pkgs/tools/X11/xinput_calibrator/default.nix
index 9e11c948f40..2f74db17c37 100644
--- a/pkgs/tools/X11/xinput_calibrator/default.nix
+++ b/pkgs/tools/X11/xinput_calibrator/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libXi, xorgproto, autoconf, automake, libtool, m4, xlibsWrapper, pkgconfig }:
+{ lib, stdenv, fetchurl, libXi, xorgproto, autoconf, automake, libtool, m4, xlibsWrapper, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "xinput_calibrator";
@@ -10,14 +10,14 @@ stdenv.mkDerivation rec {
 
   preConfigure = "./autogen.sh --with-gui=X11";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   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;
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.flosse ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/X11/xkb-switch-i3/default.nix b/pkgs/tools/X11/xkb-switch-i3/default.nix
new file mode 100644
index 00000000000..fcb71b5d6d1
--- /dev/null
+++ b/pkgs/tools/X11/xkb-switch-i3/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv
+, cmake
+, fetchFromGitHub
+, i3
+, jsoncpp
+, libsigcxx
+, libX11
+, libxkbfile
+, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xkb-switch-i3";
+  version = "1.8.1";
+
+  src = fetchFromGitHub {
+    owner = "Zebradil";
+    repo = "xkb-switch-i3";
+    rev = version;
+    sha256 = "15c19hp0n1k3w15qn97j6wp5b8hbk0mq6x3xjfn6dkkjfz1fl6cn";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ i3 jsoncpp libsigcxx libX11 libxkbfile ];
+
+  meta = with lib; {
+    description = "Switch your X keyboard layouts from the command line(i3 edition)";
+    homepage = "https://github.com/Zebradil/xkb-switch-i3";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ewok ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/X11/xkb-switch/default.nix b/pkgs/tools/X11/xkb-switch/default.nix
index 3b69ec88054..e2f15d969ed 100644
--- a/pkgs/tools/X11/xkb-switch/default.nix
+++ b/pkgs/tools/X11/xkb-switch/default.nix
@@ -1,20 +1,20 @@
-{ stdenv, fetchFromGitHub, cmake, libX11, libxkbfile }:
+{ lib, stdenv, fetchFromGitHub, cmake, libX11, libxkbfile }:
 
 stdenv.mkDerivation rec {
   pname = "xkb-switch";
-  version = "1.6.0";
+  version = "1.8.5";
 
   src = fetchFromGitHub {
     owner = "ierton";
     repo = "xkb-switch";
     rev = version;
-    sha256 = "11yn0y1kx04rqxh0d81b5q7kbyz58pi48bl7hyhlv7p8yndkfg4b";
+    sha256 = "sha256-DZAIL6+D+Hgs+fkJwRaQb9BHrEjAkxiqhOZyrR+Mpuk=";
   };
 
   nativeBuildInputs = [ cmake ];
   buildInputs = [ libX11 libxkbfile ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Switch your X keyboard layouts from the command line";
     homepage = "https://github.com/ierton/xkb-switch";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/X11/xkbset/default.nix b/pkgs/tools/X11/xkbset/default.nix
index e6f6622f85a..132b7a11122 100644
--- a/pkgs/tools/X11/xkbset/default.nix
+++ b/pkgs/tools/X11/xkbset/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl, libX11 }:
+{ lib, stdenv, fetchurl, perl, libX11 }:
 
 stdenv.mkDerivation rec {
   name = "xkbset-0.5";
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
     rm -f $out/bin/xkbset-gui
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/X11/xkeysnail/browser-emacs-bindings.py b/pkgs/tools/X11/xkeysnail/browser-emacs-bindings.py
new file mode 100644
index 00000000000..697ad87a1b7
--- /dev/null
+++ b/pkgs/tools/X11/xkeysnail/browser-emacs-bindings.py
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+import re
+from xkeysnail.transform import *
+
+aa = False
+def a_setvar(v):
+    def _setvar():
+        transform._mark_set = False
+        global aa; aa = v
+    return _setvar
+def a_ifvar():
+    def _ifvar():
+        transform._mark_set = False
+        global aa
+        if aa:
+            aa = False
+            return K("esc")
+        return K("enter")
+    return _ifvar
+def a_flipmark():
+    def _flipmark():
+        transform._mark_set = not transform._mark_set;
+    return _flipmark
+
+define_keymap(re.compile("Google-chrome|Chromium-browser|Firefox"), {
+    K("C-b"): with_mark(K("left")),
+    K("C-f"): with_mark(K("right")),
+    K("C-p"): with_mark(K("up")),
+    K("C-n"): with_mark(K("down")),
+    K("M-b"): with_mark(K("C-left")),
+    K("M-f"): with_mark(K("C-right")),
+    K("C-a"): with_mark(K("home")),
+    K("C-e"): with_mark(K("end")),
+
+    K("C-w"): [K("C-x"), set_mark(False)],
+    K("M-w"): [K("C-c"), K("right"), set_mark(False)],
+    K("C-y"): [K("C-v"), set_mark(False)],
+    K("C-k"): [K("Shift-end"), K("C-x"), set_mark(False)],
+    K("C-d"): [K("delete"), set_mark(False)],
+    K("M-d"): [K("C-delete"), set_mark(False)],
+    K("M-backspace"): [K("C-backspace"), set_mark(False)],
+
+    K("C-slash"): [K("C-z"), set_mark(False)],
+    K("C-space"): a_flipmark(),
+    K("C-M-space"): with_or_set_mark(K("C-right")),
+
+    # K("C-s"): K("F3"),
+    # K("C-r"): K("Shift-F3"),
+    # K("C-g"): [K("esc"), set_mark(False)]
+
+    K("C-s"): [K("F3"), a_setvar(True)],
+    K("C-r"): [K("Shift-F3"), a_setvar(True)],
+    K("C-g"): [K("esc"), a_setvar(False)],
+    K("enter"): a_ifvar()
+})
diff --git a/pkgs/tools/X11/xkeysnail/default.nix b/pkgs/tools/X11/xkeysnail/default.nix
new file mode 100644
index 00000000000..2d66405904f
--- /dev/null
+++ b/pkgs/tools/X11/xkeysnail/default.nix
@@ -0,0 +1,42 @@
+{ lib, fetchFromGitHub, makeWrapper, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "xkeysnail";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "mooz";
+    repo = pname;
+    rev = "bf3c93b4fe6efd42893db4e6588e5ef1c4909cfb";
+    sha256 = "0plcpb4ndzfsd5hj32m0g32swnhyph9sd759cdhhzmjvlq3j8q6p";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  propagatedBuildInputs = with python3Packages; [
+    evdev
+    xlib
+    inotify-simple
+    appdirs
+  ];
+
+  doCheck = false;
+
+  postInstall = ''
+    mkdir -p $out/share
+    cp ./example/config.py $out/share/example.py
+    cp ${./browser-emacs-bindings.py} $out/share/browser.py
+
+    makeWrapper $out/bin/xkeysnail $out/bin/xkeysnail-example \
+      --add-flags "-q" --add-flags "$out/share/example.py"
+    makeWrapper $out/bin/xkeysnail $out/bin/xkeysnail-browser \
+      --add-flags "-q" --add-flags "$out/share/browser.py"
+  '';
+
+  meta = with lib; {
+    description = "Yet another keyboard remapping tool for X environment";
+    homepage = "https://github.com/mooz/xkeysnail";
+    platforms = platforms.linux;
+    license = licenses.gpl1Only;
+    maintainers = with maintainers; [ bb2020 ];
+  };
+}
diff --git a/pkgs/tools/X11/xlayoutdisplay/default.nix b/pkgs/tools/X11/xlayoutdisplay/default.nix
index 9ca3f24b618..16565296e1e 100644
--- a/pkgs/tools/X11/xlayoutdisplay/default.nix
+++ b/pkgs/tools/X11/xlayoutdisplay/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, xorg, boost, cmake, gtest }:
+{ lib, stdenv, fetchFromGitHub, xorg, boost, cmake, gtest }:
 
 stdenv.mkDerivation rec {
   pname = "xlayoutdisplay";
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
     substituteInPlace CMakeLists.txt --replace "set(Boost_USE_STATIC_LIBS ON)" ""
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/X11/xloadimage/default.nix b/pkgs/tools/X11/xloadimage/default.nix
index 3bd9f525683..e228c8223f4 100644
--- a/pkgs/tools/X11/xloadimage/default.nix
+++ b/pkgs/tools/X11/xloadimage/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , libX11
 , libXt
@@ -35,11 +35,11 @@ stdenv.mkDerivation rec {
 
   buildInputs = [
     libX11 libXt
-  ] ++ stdenv.lib.optionals withJpegSupport [
+  ] ++ lib.optionals withJpegSupport [
     libjpeg
-  ] ++ stdenv.lib.optionals withPngSupport [
+  ] ++ lib.optionals withPngSupport [
     libpng
-  ] ++ stdenv.lib.optionals withTiffSupport [
+  ] ++ lib.optionals withTiffSupport [
     libtiff
   ];
 
@@ -80,9 +80,9 @@ stdenv.mkDerivation rec {
       zoom, brightening/darkening and merging.
     '';
 
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
 
-    maintainers = with stdenv.lib.maintainers; [ andrew-d ];
-    platforms = stdenv.lib.platforms.linux;  # arbitrary choice
+    maintainers = with lib.maintainers; [ andrew-d ];
+    platforms = lib.platforms.linux;  # arbitrary choice
   };
 }
diff --git a/pkgs/tools/X11/xmacro/default.nix b/pkgs/tools/X11/xmacro/default.nix
index 13a18efccba..cf0ef6d8bf8 100644
--- a/pkgs/tools/X11/xmacro/default.nix
+++ b/pkgs/tools/X11/xmacro/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libX11, libXtst, xorgproto, libXi }:
+{ lib, stdenv, fetchurl, libX11, libXtst, xorgproto, libXi }:
 
 stdenv.mkDerivation rec {
   pname = "xmacro";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
   buildInputs = [ libX11 libXtst xorgproto libXi ];
 
   meta = {
-    platforms = stdenv.lib.platforms.linux;
-    license = stdenv.lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl2;
   };
 }
diff --git a/pkgs/tools/X11/xmagnify/default.nix b/pkgs/tools/X11/xmagnify/default.nix
index 710c9b83dbd..b4df0f00342 100644
--- a/pkgs/tools/X11/xmagnify/default.nix
+++ b/pkgs/tools/X11/xmagnify/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitLab, libX11, xorgproto }:
+{ lib, stdenv, fetchFromGitLab, libX11, xorgproto }:
 
 stdenv.mkDerivation {
   name = "xmagnify-0.1.0";
@@ -10,11 +10,11 @@ stdenv.mkDerivation {
     sha256 = "1ngnp5f5zl3v35vhbdyjpymy6mwrs0476fm5nd7dzkba7n841jdh";
   };
 
-  prePatch = ''substituteInPlace ./Makefile --replace /usr $out'';
+  prePatch = "substituteInPlace ./Makefile --replace /usr $out";
 
   buildInputs = [ libX11 xorgproto ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tiny screen magnifier for X11";
     homepage = "https://gitlab.com/amiloradovsky/magnify";
     license = licenses.mit;  # or GPL2+, optionally
diff --git a/pkgs/tools/X11/xmousepasteblock/default.nix b/pkgs/tools/X11/xmousepasteblock/default.nix
index 094b26d1f55..35db8a133a2 100644
--- a/pkgs/tools/X11/xmousepasteblock/default.nix
+++ b/pkgs/tools/X11/xmousepasteblock/default.nix
@@ -1,4 +1,4 @@
-{ xorg, stdenv, libev, fetchFromGitHub, pkgconfig }:
+{ xorg, lib, stdenv, libev, fetchFromGitHub, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "xmousepasteblock";
@@ -11,11 +11,11 @@ stdenv.mkDerivation rec {
   };
   makeFlags = "PREFIX=$(out)";
   buildInputs = with xorg; [ libX11 libXext libXi libev ];
-  nativeBuildInputs = [ pkgconfig ];
-  meta = with stdenv.lib; {
+  nativeBuildInputs = [ pkg-config ];
+  meta = with lib; {
     description = "Middle mouse button primary X selection/clipboard paste disabler";
     homepage = "https://github.com/milaq/XMousePasteBlock";
-    license = stdenv.lib.licenses.gpl2;
+    license = lib.licenses.gpl2;
     maintainers = [ maintainers.petercommand ];
   };
 }
diff --git a/pkgs/tools/X11/xnee/default.nix b/pkgs/tools/X11/xnee/default.nix
index ae057c76984..c3355b80263 100644
--- a/pkgs/tools/X11/xnee/default.nix
+++ b/pkgs/tools/X11/xnee/default.nix
@@ -1,5 +1,5 @@
-{ fetchurl, stdenv, libX11, xorgproto, libXext, libXtst
-, gtk2, libXi, pkgconfig, texinfo }:
+{ fetchurl, lib, stdenv, libX11, xorgproto, libXext, libXtst
+, gtk2, libXi, pkg-config, texinfo }:
 
 stdenv.mkDerivation rec {
   version = "3.19";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
 
   buildInputs =
     [ libX11 xorgproto libXext libXtst gtk2
-      libXi pkgconfig
+      libXi pkg-config
       texinfo
     ];
 
@@ -45,11 +45,11 @@ stdenv.mkDerivation rec {
          "macros", retype a file.
       '';
 
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = 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
+    maintainers = with lib.maintainers; [ ];
+    platforms = lib.platforms.gnu ++ lib.platforms.linux;  # arbitrary choice
   };
 }
diff --git a/pkgs/tools/X11/xob/default.nix b/pkgs/tools/X11/xob/default.nix
index cf74fa3d867..754904449ef 100644
--- a/pkgs/tools/X11/xob/default.nix
+++ b/pkgs/tools/X11/xob/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkg-config, xorg, libconfig }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, xorg, libconfig }:
 
 stdenv.mkDerivation rec {
   pname = "xob";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "prefix=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A lightweight overlay bar for the X Window System";
     longDescription = ''
       A lightweight configurable overlay volume/backlight/progress/anything bar
@@ -30,6 +30,6 @@ stdenv.mkDerivation rec {
     inherit (src.meta) homepage;
     license = licenses.gpl3Plus;
     platforms = platforms.unix;
-    maintainers = with maintainers; [ primeos ];
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/tools/X11/xosview2/default.nix b/pkgs/tools/X11/xosview2/default.nix
index 5dfe74fd373..fbee1e0ef64 100644
--- a/pkgs/tools/X11/xosview2/default.nix
+++ b/pkgs/tools/X11/xosview2/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libX11 }:
+{ lib, stdenv, fetchurl, libX11 }:
 
 stdenv.mkDerivation rec {
   pname = "xosview2";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ libX11 ];
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/X11/xpointerbarrier/default.nix b/pkgs/tools/X11/xpointerbarrier/default.nix
index 6f6d38932df..8cb36cb9141 100644
--- a/pkgs/tools/X11/xpointerbarrier/default.nix
+++ b/pkgs/tools/X11/xpointerbarrier/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, xorg, fetchgit }:
+{ lib, stdenv, xorg, fetchgit }:
 stdenv.mkDerivation rec {
   pname = "xpointerbarrier";
   version = "18.06";
@@ -15,8 +15,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.xzfc ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/X11/xpra/default.nix b/pkgs/tools/X11/xpra/default.nix
index 7f46e017c36..c3cea1ed061 100644
--- a/pkgs/tools/X11/xpra/default.nix
+++ b/pkgs/tools/X11/xpra/default.nix
@@ -1,9 +1,13 @@
-{ stdenv, lib, fetchurl, callPackage, substituteAll, python3, pkgconfig, writeText
-, xorg, gtk3, glib, pango, cairo, gdk-pixbuf, atk
-, wrapGAppsHook, xorgserver, getopt, xauth, utillinux, which
-, ffmpeg, x264, libvpx, libwebp, x265
+{ lib
+, fetchurl
+, fetchpatch
+, substituteAll, python3, pkg-config, runCommand, writeText
+, xorg, gtk3, glib, pango, cairo, gdk-pixbuf, atk, pandoc
+, wrapGAppsHook, xorgserver, getopt, xauth, util-linux, which
+, ffmpeg, x264, libvpx, libwebp, x265, librsvg
 , libfakeXinerama
 , gst_all_1, pulseaudio, gobject-introspection
+, withNvenc ? false, cudatoolkit, nv-codec-headers-10, nvidia_x11 ? null
 , pam }:
 
 with lib;
@@ -13,8 +17,11 @@ let
 
   xf86videodummy = xorg.xf86videodummy.overrideDerivation (p: {
     patches = [
+      # patch provided by Xpra upstream
       ./0002-Constant-DPI.patch
+      # https://github.com/Xpra-org/xpra/issues/349
       ./0003-fix-pointer-limits.patch
+      # patch provided by Xpra upstream
       ./0005-support-for-30-bit-depth-in-dummy-driver.patch
     ];
   });
@@ -28,35 +35,48 @@ let
     EndSection
   '';
 
+  nvencHeaders = runCommand "nvenc-headers" {
+    inherit nvidia_x11;
+  } ''
+    mkdir -p $out/include $out/lib/pkgconfig
+    cp ${nv-codec-headers-10}/include/ffnvcodec/nvEncodeAPI.h $out/include
+    substituteAll ${./nvenc.pc} $out/lib/pkgconfig/nvenc.pc
+  '';
 in buildPythonApplication rec {
   pname = "xpra";
-  version = "4.0.2";
+  version = "4.2";
 
   src = fetchurl {
-    url = "https://xpra.org/src/${pname}-${version}.tar.xz";
-    sha256 = "1cs39jzi59hkl421xmhi549ndmdfzkg0ap45f4nlsn9zr9zwmp3x";
+    url = "https://xpra.org/src/${pname}-${version}.tar.gz";
+    hash = "sha256-KkQw4FJeH4G5jZ4GdP3aXZ3zxu4GALbiOI6POKJW6fk=";
   };
 
   patches = [
-    (substituteAll {
+    (substituteAll {  # correct hardcoded paths
       src = ./fix-paths.patch;
-      inherit (xorg) xkeyboardconfig;
       inherit libfakeXinerama;
     })
-    ./fix-41106.patch
+    ./fix-41106.patch  # https://github.com/NixOS/nixpkgs/issues/41106
+    # Xorg won't start without. Remove on next version!
+    (fetchpatch {
+      url = "https://github.com/Xpra-org/xpra/commit/f9f242abad69363dfa558e1f6f7956ae99164b67.patch";
+      sha256 = "sha256-TOP9RuXPuqxyKY/7LSSrCWnAmJstEE+D5EwjMiVmchM=";
+    })
   ];
 
   postPatch = ''
     substituteInPlace setup.py --replace '/usr/include/security' '${pam}/include/security'
   '';
 
-  nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
+  nativeBuildInputs = [ pkg-config wrapGAppsHook pandoc ]
+    ++ lib.optional withNvenc cudatoolkit;
   buildInputs = with xorg; [
     libX11 xorgproto libXrender libXi
     libXtst libXfixes libXcomposite libXdamage
     libXrandr libxkbfile
     ] ++ [
     cython
+    librsvg
 
     pango cairo gdk-pixbuf atk.out gtk3 glib
 
@@ -70,25 +90,26 @@ in buildPythonApplication rec {
 
     pam
     gobject-introspection
-  ];
+  ] ++ lib.optional withNvenc nvencHeaders;
   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
-  ];
+    ipaddress idna pyinotify
+  ] ++ lib.optionals withNvenc (with python3.pkgs; [pynvml pycuda]);
 
     # error: 'import_cairo' defined but not used
   NIX_CFLAGS_COMPILE = "-Wno-error=unused-function";
 
   setupPyBuildFlags = [
     "--with-Xdummy"
+    "--without-Xdummy_wrapper"
     "--without-strict"
     "--with-gtk3"
     # Override these, setup.py checks for headers in /usr/* paths
     "--with-pam"
     "--with-vsock"
-  ];
+  ] ++ lib.optional withNvenc "--with-nvenc";
 
   dontWrapGApps = true;
   preFixup = ''
@@ -96,8 +117,12 @@ in buildPythonApplication rec {
       "''${gappsWrapperArgs[@]}"
       --set XPRA_INSTALL_PREFIX "$out"
       --set XPRA_COMMAND "$out/bin/xpra"
+      --set XPRA_XKB_CONFIG_ROOT "${xorg.xkeyboardconfig}/share/X11/xkb"
       --prefix LD_LIBRARY_PATH : ${libfakeXinerama}/lib
-      --prefix PATH : ${stdenv.lib.makeBinPath [ getopt xorgserver xauth which utillinux pulseaudio ]}
+      --prefix PATH : ${lib.makeBinPath [ getopt xorgserver xauth which util-linux pulseaudio ]}
+  '' + lib.optionalString withNvenc ''
+      --prefix LD_LIBRARY_PATH : ${nvidia_x11}/lib
+  '' + ''
     )
   '';
 
@@ -110,15 +135,18 @@ in buildPythonApplication rec {
 
   enableParallelBuilding = true;
 
-  passthru = { inherit xf86videodummy; };
+  passthru = {
+    inherit xf86videodummy;
+    updateScript = ./update.sh;
+  };
 
   meta = {
-    homepage = "http://xpra.org/";
+    homepage = "https://xpra.org/";
     downloadPage = "https://xpra.org/src/";
-    downloadURLRegexp = "xpra-.*[.]tar[.]xz$";
+    downloadURLRegexp = "xpra-.*[.]tar[.][gx]z$";
     description = "Persistent remote applications for X";
     platforms = platforms.linux;
     license = licenses.gpl2;
-    maintainers = with maintainers; [ tstrobel offline numinit ];
+    maintainers = with maintainers; [ tstrobel offline numinit mvnetbiz ];
   };
 }
diff --git a/pkgs/tools/X11/xpra/fix-paths.patch b/pkgs/tools/X11/xpra/fix-paths.patch
index 70bd9027a1a..b5a58bb03f8 100644
--- a/pkgs/tools/X11/xpra/fix-paths.patch
+++ b/pkgs/tools/X11/xpra/fix-paths.patch
@@ -16,19 +16,6 @@ index f962330..b02b6dd 100755
              f.write(b"DEF ENABLE_DEVICE_CAPS=%i" % ENABLE_DEVICE_CAPS)
      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/xpra/x11/fakeXinerama.py b/xpra/x11/fakeXinerama.py
 index c867258..617af7c 100755
 --- a/xpra/x11/fakeXinerama.py
diff --git a/pkgs/tools/X11/xpra/libfakeXinerama.nix b/pkgs/tools/X11/xpra/libfakeXinerama.nix
index e43043d78f2..bad43c39eef 100644
--- a/pkgs/tools/X11/xpra/libfakeXinerama.nix
+++ b/pkgs/tools/X11/xpra/libfakeXinerama.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libX11, libXinerama }:
+{ lib, stdenv, fetchurl, libX11, libXinerama }:
 
 stdenv.mkDerivation  rec {
   pname = "libfakeXinerama";
@@ -23,7 +23,7 @@ stdenv.mkDerivation  rec {
     ln -s libXinerama.so.1 $out/lib/libXinerama.so
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://xpra.org/";
     description = "fakeXinerama for Xpra";
     platforms = platforms.linux;
diff --git a/pkgs/tools/X11/xpra/nvenc.pc b/pkgs/tools/X11/xpra/nvenc.pc
new file mode 100644
index 00000000000..6d8d916a025
--- /dev/null
+++ b/pkgs/tools/X11/xpra/nvenc.pc
@@ -0,0 +1,11 @@
+prefix=@out@
+includedir=${prefix}/include
+libdir=@nvidia_x11@/lib
+
+Name: nvenc
+Description: NVENC
+Version: 10
+Requires:
+Conflicts:
+Libs: -L${libdir} -lnvidia-encode
+Cflags: -I${includedir}
diff --git a/pkgs/tools/X11/xpra/update.sh b/pkgs/tools/X11/xpra/update.sh
new file mode 100755
index 00000000000..c1b408a0bee
--- /dev/null
+++ b/pkgs/tools/X11/xpra/update.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl perl common-updater-scripts
+
+version=$(curl https://xpra.org/src/ | perl -ne 'print "$1\n" if /xpra-([[:digit:].]+)\./' | sort -V | tail -n1)
+update-source-version xpra "$version"
diff --git a/pkgs/tools/X11/xprintidle-ng/default.nix b/pkgs/tools/X11/xprintidle-ng/default.nix
index c7bb2bc348b..61e48de7f5e 100644
--- a/pkgs/tools/X11/xprintidle-ng/default.nix
+++ b/pkgs/tools/X11/xprintidle-ng/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub, libX11, libXScrnSaver, libXext, gnulib
-  , autoconf, automake, libtool, gettext, pkgconfig
+{ lib, stdenv, fetchFromGitHub, libX11, libXScrnSaver, libXext, gnulib
+  , autoconf, automake, libtool, gettext, pkg-config
   , git, perl, texinfo, help2man
 }:
 
@@ -16,12 +16,12 @@ stdenv.mkDerivation rec {
 
   postPatch = ''
     substituteInPlace configure.ac \
-      --replace "AC_PREREQ([2.62])" "AC_PREREQ([2.63])"
+      --replace "AC_PREREQ([2.62])" "AC_PREREQ([2.64])"
   '';
 
   nativeBuildInputs = [
     autoconf automake gettext git gnulib
-    help2man libtool perl pkgconfig texinfo
+    help2man libtool perl pkg-config texinfo
   ];
 
   configurePhase = ''
@@ -35,10 +35,10 @@ stdenv.mkDerivation rec {
 
   meta = {
     inherit  version;
-    description = ''A command-line tool to print idle time from libXss'';
+    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;
+    license = lib.licenses.gpl2;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/X11/xrectsel/default.nix b/pkgs/tools/X11/xrectsel/default.nix
index e2f9fdf4a43..0189e52ede9 100644
--- a/pkgs/tools/X11/xrectsel/default.nix
+++ b/pkgs/tools/X11/xrectsel/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, libX11 }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libX11 }:
 
 stdenv.mkDerivation rec {
   pname = "xrectsel";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     make install
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Print the geometry of a rectangular screen region";
     homepage = "https://github.com/lolilolicon/xrectsel";
     license = licenses.gpl3;
diff --git a/pkgs/tools/X11/xrestop/default.nix b/pkgs/tools/X11/xrestop/default.nix
index a28fc50c1e7..e2b87e7380c 100644
--- a/pkgs/tools/X11/xrestop/default.nix
+++ b/pkgs/tools/X11/xrestop/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, xorg, pkgconfig, ncurses }:
+{ lib, stdenv, fetchurl, xorg, pkg-config, ncurses }:
 stdenv.mkDerivation {
 
   pname = "xrestop";
@@ -9,11 +9,11 @@ stdenv.mkDerivation {
     sha256 = "0mz27jpij8am1s32i63mdm58znfijcpfhdqq1npbmvgclyagrhk7";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ xorg.libX11 xorg.libXres xorg.libXext ncurses ];
 
   meta = {
-    platforms = stdenv.lib.platforms.unix;
-    license = stdenv.lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl2;
   };
 }
diff --git a/pkgs/tools/X11/xsecurelock/default.nix b/pkgs/tools/X11/xsecurelock/default.nix
index 99d695df267..5c43dc6dff4 100644
--- a/pkgs/tools/X11/xsecurelock/default.nix
+++ b/pkgs/tools/X11/xsecurelock/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
 , libX11, libXcomposite, libXft, libXmu, libXrandr, libXext, libXScrnSaver
 , pam, apacheHttpd, pamtester, xscreensaver }:
 
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [
-    autoreconfHook pkgconfig
+    autoreconfHook pkg-config
   ];
   buildInputs = [
     libX11 libXcomposite libXft libXmu libXrandr libXext libXScrnSaver
diff --git a/pkgs/tools/X11/xsettingsd/SConstruct.patch b/pkgs/tools/X11/xsettingsd/SConstruct.patch
deleted file mode 100644
index bae8d1efc14..00000000000
--- a/pkgs/tools/X11/xsettingsd/SConstruct.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-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/pkgs/tools/X11/xsettingsd/default.nix b/pkgs/tools/X11/xsettingsd/default.nix
index 10abd957e39..0fe260e3db1 100644
--- a/pkgs/tools/X11/xsettingsd/default.nix
+++ b/pkgs/tools/X11/xsettingsd/default.nix
@@ -1,38 +1,31 @@
-{ stdenv, fetchFromGitHub, scons, pkgconfig, libX11 }:
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, libX11 }:
 
 stdenv.mkDerivation rec {
   pname = "xsettingsd";
-  version = "1.0.0";
+  version = "1.0.2";
 
   src = fetchFromGitHub {
     owner = "derat";
     repo = "xsettingsd";
     rev = "v${version}";
-    sha256 = "05m4jlw0mgwp24cvyklncpziq1prr2lg0cq9c055sh4n9d93d07v";
+    sha256 = "sha256-CIYshZqJICuL8adKHIN4R6nudaqWOCK2UPrGhsKf9pE=";
   };
 
-  patches = [
-    ./SConstruct.patch
-  ];
-
-  nativeBuildInputs = [ scons pkgconfig ];
+  nativeBuildInputs = [ cmake pkg-config ];
 
   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
+  # we end up with symlinked unit files if we don't move them around ourselves
+  postFixup = ''
+    rm -r $out/lib/systemd
+    mv $out/share/systemd $out/lib
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Provides settings to X11 applications via the XSETTINGS specification";
     homepage = "https://github.com/derat/xsettingsd";
     license = licenses.bsd3;
+    maintainers = with maintainers; [ romildo ];
     platforms = platforms.linux;
-    maintainers = [ maintainers.romildo ];
   };
 }
diff --git a/pkgs/tools/X11/xtrace/default.nix b/pkgs/tools/X11/xtrace/default.nix
index aae31d649f4..dfd834e67b8 100644
--- a/pkgs/tools/X11/xtrace/default.nix
+++ b/pkgs/tools/X11/xtrace/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, autoreconfHook, fetchFromGitLab, libX11, xauth, makeWrapper }:
+{ lib, stdenv, autoreconfHook, fetchFromGitLab, libX11, xauth, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "xtrace";
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
         --prefix PATH ':' "${xauth}/bin"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://salsa.debian.org/debian/xtrace";
     description = "Tool to trace X11 protocol connections";
     license = licenses.gpl2;
diff --git a/pkgs/tools/X11/xtruss/default.nix b/pkgs/tools/X11/xtruss/default.nix
index 7d490571f48..1af1ec925e5 100644
--- a/pkgs/tools/X11/xtruss/default.nix
+++ b/pkgs/tools/X11/xtruss/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "xtruss";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "1mm8k92zc318jk71wlf2r4rb723nd9lalhjl0pf48raiajb5ifgd";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "easy-to-use X protocol tracing program";
     homepage = "https://www.chiark.greenend.org.uk/~sgtatham/xtruss";
     license = licenses.mit;
diff --git a/pkgs/tools/X11/xvkbd/default.nix b/pkgs/tools/X11/xvkbd/default.nix
index 6c61133077e..05936d1d1f3 100644
--- a/pkgs/tools/X11/xvkbd/default.nix
+++ b/pkgs/tools/X11/xvkbd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, imake, libXt, libXaw, libXtst
+{ lib, stdenv, fetchurl, imake, libXt, libXaw, libXtst
 , libXi, libXpm, xorgproto, gccmakedep, Xaw3d }:
 
 stdenv.mkDerivation {
@@ -18,7 +18,7 @@ stdenv.mkDerivation {
     "MANPATH=$(out)/man"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Virtual keyboard for X window system";
     longDescription = ''
       xvkbd is a virtual (graphical) keyboard program for X Window System which provides
diff --git a/pkgs/tools/X11/xwallpaper/default.nix b/pkgs/tools/X11/xwallpaper/default.nix
index ad2995b4ca6..d99a6ec8dac 100644
--- a/pkgs/tools/X11/xwallpaper/default.nix
+++ b/pkgs/tools/X11/xwallpaper/default.nix
@@ -1,23 +1,36 @@
-{ stdenv, fetchFromGitHub, pkg-config, autoreconfHook, pixman, xcbutil, xcbutilimage
-, libseccomp, libjpeg, libpng, libXpm }:
+{ lib, stdenv
+, fetchFromGitHub
+, pkg-config
+, autoreconfHook
+, installShellFiles
+, pixman
+, xcbutil
+, xcbutilimage
+, libseccomp
+, libjpeg
+, libpng
+, libXpm
+}:
 
 stdenv.mkDerivation rec {
   pname = "xwallpaper";
-  version = "0.6.5";
+  version = "0.7.0";
 
   src = fetchFromGitHub {
     owner = "stoeckmann";
     repo = "xwallpaper";
     rev = "v${version}";
-    sha256 = "121ai4dc0v65qk12gn9w62ixly8hc8a5qrygkbb82vy8ck4jqxj7";
+    sha256 = "1bpymspnllbscha8j9y67w9ck2l6yv66zdbknv8s13hz5qi1ishk";
   };
 
-  preConfigure = "./autogen.sh";
-
-  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  nativeBuildInputs = [ pkg-config autoreconfHook installShellFiles ];
   buildInputs = [ pixman xcbutilimage xcbutil libseccomp libjpeg libpng libXpm ];
 
-  meta = with stdenv.lib; {
+  postInstall = ''
+    installShellCompletion --zsh _xwallpaper
+  '';
+
+  meta = with lib; {
     homepage = "https://github.com/stoeckmann/xwallpaper";
     description = "Utility for setting wallpapers in X";
     license = licenses.isc;
diff --git a/pkgs/tools/X11/xwinmosaic/default.nix b/pkgs/tools/X11/xwinmosaic/default.nix
index 7b30e5c5815..af17f3ade7d 100644
--- a/pkgs/tools/X11/xwinmosaic/default.nix
+++ b/pkgs/tools/X11/xwinmosaic/default.nix
@@ -1,23 +1,23 @@
-{ stdenv, fetchgit, gtk2, cmake, pkgconfig, libXdamage }:
+{ lib, stdenv, fetchFromGitHub, gtk2, cmake, pkg-config, libXdamage }:
 
 stdenv.mkDerivation rec {
   version = "0.4.2";
   pname = "xwinmosaic";
 
-  src = fetchgit {
-    url = "https://github.com/soulthreads/xwinmosaic/";
-    rev = "refs/tags/v0.4.2";
+  src = fetchFromGitHub {
+    owner = "soulthreads";
+    repo = pname;
+    rev = "refs/tags/v${version}";
     sha256 = "16qhrpgn84fz0q3nfvaz5sisc82zk6y7c0sbvbr69zfx5fwbs1rr";
   };
 
-  nativeBuildInputs = [ pkgconfig cmake ];
+  nativeBuildInputs = [ pkg-config 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;
+    description = "X window switcher drawing a colourful grid";
+    license = lib.licenses.bsd2 ;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/X11/xwinwrap/default.nix b/pkgs/tools/X11/xwinwrap/default.nix
index 89b2fdd3dcf..3921df9fffa 100644
--- a/pkgs/tools/X11/xwinwrap/default.nix
+++ b/pkgs/tools/X11/xwinwrap/default.nix
@@ -1,11 +1,8 @@
-{ stdenv, fetchbzr, xlibsWrapper }:
+{ lib, stdenv, fetchbzr, xlibsWrapper }:
 
-let
-  version = "4";
-in
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "xwinwrap";
-  inherit version;
+  version = "4";
 
   src = fetchbzr {
     url = "https://code.launchpad.net/~shantanu-goel/xwinwrap/devel";
@@ -28,7 +25,7 @@ stdenv.mkDerivation {
     mv */xwinwrap $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/X11/xzoom/default.nix b/pkgs/tools/X11/xzoom/default.nix
index ed7828f37e2..979e2725098 100644
--- a/pkgs/tools/X11/xzoom/default.nix
+++ b/pkgs/tools/X11/xzoom/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libX11, libXext, libXt, imake, gccmakedep}:
+{ lib, stdenv, fetchurl, libX11, libXext, libXt, imake, gccmakedep}:
 
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
@@ -29,10 +29,9 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.free ;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/admin/acme.sh/default.nix b/pkgs/tools/admin/acme.sh/default.nix
index 2254f2e22d9..83d4387bd35 100644
--- a/pkgs/tools/admin/acme.sh/default.nix
+++ b/pkgs/tools/admin/acme.sh/default.nix
@@ -1,36 +1,44 @@
-{ stdenv, lib, fetchFromGitHub, makeWrapper, curl, openssl, socat, iproute, unixtools, dnsutils }:
+{ stdenv, lib, fetchFromGitHub, makeWrapper, curl, openssl, socat, iproute2,
+  unixtools, dnsutils, coreutils, gnugrep, gnused }:
 stdenv.mkDerivation rec {
   pname = "acme.sh";
-  version = "2.8.6";
+  version = "2.9.0";
 
   src = fetchFromGitHub {
     owner = "Neilpang";
     repo = "acme.sh";
     rev = version;
-    sha256 = "0zbs8vzbh89wxf36h9mvhin2p85n3jrsq6l5i40q1zkzgwi3648n";
+    sha256 = "sha256-BSKqfj8idpE4OV8/EJkCFo5i1vq/aEde/moqJcwuDvk=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
 
   installPhase = ''
+    runHook preInstall
+
     mkdir -p $out $out/bin $out/libexec
     cp -R $src/* $_
     makeWrapper $out/libexec/acme.sh $out/bin/acme.sh \
       --prefix PATH : "${
         lib.makeBinPath [
+          coreutils
+          gnugrep
+          gnused
           socat
           openssl
           curl
           dnsutils
-          (if stdenv.isLinux then iproute else unixtools.netstat)
+          (if stdenv.isLinux then iproute2 else unixtools.netstat)
         ]
       }"
+
+    runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A pure Unix shell script implementing ACME client protocol";
     homepage = "https://acme.sh/";
     license = licenses.gpl3;
-    maintainers = [ maintainers.yorickvp ];
+    maintainers = teams.serokell.members;
   };
 }
diff --git a/pkgs/tools/admin/adtool/default.nix b/pkgs/tools/admin/adtool/default.nix
index f239b18aec9..d7f6ffadaca 100644
--- a/pkgs/tools/admin/adtool/default.nix
+++ b/pkgs/tools/admin/adtool/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, openldap }:
+{ lib, stdenv, fetchurl, openldap }:
 
 stdenv.mkDerivation rec {
   pname = "adtool";
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
   # It requires an LDAP server for tests
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Active Directory administration utility for Unix";
     homepage = "https://gp2x.org/adtool";
     license = licenses.gpl2;
diff --git a/pkgs/tools/admin/afterburn/default.nix b/pkgs/tools/admin/afterburn/default.nix
new file mode 100644
index 00000000000..7b522dd93b8
--- /dev/null
+++ b/pkgs/tools/admin/afterburn/default.nix
@@ -0,0 +1,37 @@
+{ lib, openssl, pkg-config, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "afterburn";
+  version = "5.0.0";
+
+  src = fetchFromGitHub {
+    owner = "coreos";
+    repo = "afterburn";
+    rev = "v${version}";
+    sha256 = "sha256-sdgAZuT8bIX4eWN7nLNNyclxazmCBr5kDFS6s6cRXVU=";
+  };
+
+  cargoSha256 = "sha256-IzcaaQjge2z49XwyFcPHX/AMjvrbcOLw0J1qBzHw7Is=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ];
+
+  patchPhase = ''
+    substituteInPlace ./systemd/afterburn-checkin.service --replace /usr/bin $out/bin
+    substituteInPlace ./systemd/afterburn-firstboot-checkin.service --replace /usr/bin $out/bin
+    substituteInPlace ./systemd/afterburn-sshkeys@.service.in --replace /usr/bin $out/bin
+    substituteInPlace ./systemd/afterburn.service --replace /usr/bin $out/bin
+  '';
+
+  postInstall = ''
+    DEFAULT_INSTANCE=root PREFIX= DESTDIR=$out make install-units
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/coreos/ignition";
+    description = "This is a small utility, typically used in conjunction with Ignition, which reads metadata from a given cloud-provider and applies it to the system.";
+    license = licenses.asl20;
+    maintainers = [ maintainers.arianvp ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/pkgs/tools/admin/amazon-ec2-utils/default.nix b/pkgs/tools/admin/amazon-ec2-utils/default.nix
new file mode 100644
index 00000000000..2dc91f037a9
--- /dev/null
+++ b/pkgs/tools/admin/amazon-ec2-utils/default.nix
@@ -0,0 +1,53 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, curl
+, python3
+}:
+stdenv.mkDerivation rec {
+  pname = "amazon-ec2-utils";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "aws";
+    repo = "amazon-ec2-utils";
+    rev = version;
+    hash = "sha256:04dpxaaca144a74r6d93q4lp0d5l32v07rldj7v2v1c6s9nsf4mv";
+  };
+
+  buildInputs = [
+    python3
+  ];
+
+  propagatedBuildInputs = [
+    curl
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin/
+
+    cp ebsnvme-id $out/bin/
+    cp ec2-metadata $out/bin/
+    cp ec2udev-vbd $out/bin/
+    cp ec2udev-vcpu $out/bin/
+
+    chmod +x $out/bin/*
+  '';
+
+  doInstallCheck = true;
+
+  # We cannot run
+  #     ec2-metadata --help
+  # because it actually checks EC2 metadata even if --help is given
+  # so it won't work in the test sandbox.
+  installCheckPhase = ''
+    $out/bin/ebsnvme-id --help
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/aws/amazon-ec2-utils";
+    description = "Contains a set of utilities and settings for Linux deployments in EC2";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ketzacoatl ];
+  };
+}
diff --git a/pkgs/tools/admin/amazon-ecr-credential-helper/default.nix b/pkgs/tools/admin/amazon-ecr-credential-helper/default.nix
index 30d74c14ce5..e661af0f949 100644
--- a/pkgs/tools/admin/amazon-ecr-credential-helper/default.nix
+++ b/pkgs/tools/admin/amazon-ecr-credential-helper/default.nix
@@ -2,7 +2,7 @@
 
 buildGoPackage rec {
   pname = "amazon-ecr-credential-helper";
-  version = "0.4.0";
+  version = "0.5.0";
 
   goPackagePath = "github.com/awslabs/amazon-ecr-credential-helper";
 
@@ -10,7 +10,7 @@ buildGoPackage rec {
     owner = "awslabs";
     repo = "amazon-ecr-credential-helper";
     rev = "v${version}";
-    sha256 = "1whwxjzlyzyvrf2mzbd7my2kdz5fdbr79g18g9h4xrg8xyzk1k5q";
+    sha256 = "sha256-GmGse+N7QeG2sAjCumGkUAWu/KfhnMltzeh+s8o+tiw=";
   };
 
   meta = with lib; {
diff --git a/pkgs/tools/admin/analog/default.nix b/pkgs/tools/admin/analog/default.nix
index 68046be2eee..3d8556d8103 100644
--- a/pkgs/tools/admin/analog/default.nix
+++ b/pkgs/tools/admin/analog/default.nix
@@ -2,19 +2,20 @@
 
 stdenv.mkDerivation rec {
   pname = "analog";
-  version = "6.0.16";
+  version = "6.0.17";
 
   src = fetchFromGitHub {
     owner = "c-amie";
     repo = "analog-ce";
     rev = version;
-    sha256 = "15hi8kfknldwpvm885r9s7zd5h7cirs7x0zazx2nnz62xvz3iymk";
+    sha256 = "sha256-89nNkIUKzlcKKy0TfthA9T27A446Fqv9hYllGjYkDP4=";
   };
 
-  configurePhase = ''
+  postPatch = ''
     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"
+    substituteInPlace src/Makefile --replace "gcc" "${stdenv.cc.targetPrefix}cc"
   '';
 
   installPhase = ''
@@ -32,7 +33,7 @@ stdenv.mkDerivation rec {
     license = lib.licenses.gpl2;
     description = "Powerful tool to generate web server statistics";
     maintainers = [ lib.maintainers.peti ];
-    platforms = lib.platforms.linux;
+    platforms = lib.platforms.all;
   };
 
 }
diff --git a/pkgs/tools/admin/ansible/default.nix b/pkgs/tools/admin/ansible/default.nix
index 58b2852baca..4c66bda06f7 100644
--- a/pkgs/tools/admin/ansible/default.nix
+++ b/pkgs/tools/admin/ansible/default.nix
@@ -1,32 +1,14 @@
 { python3Packages, fetchurl, fetchFromGitHub }:
 
 rec {
-  ansible = ansible_2_10;
+  ansible = ansible_2_11;
 
-  # The python module stays at v2.9.x until the related package set has caught up. Therefore v2.10 gets an override
-  # for now.
-  ansible_2_10 = python3Packages.toPythonApplication (python3Packages.ansible.overridePythonAttrs (old: rec {
-    pname = "ansible";
-    version = "2.10.0";
+  ansible_2_11 = python3Packages.toPythonApplication python3Packages.ansible-core;
 
-    # TODO: migrate to fetchurl, when release becomes available on releases.ansible.com
-    src = fetchFromGitHub {
-      owner = pname;
-      repo = pname;
-      rev = "v${version}";
-      sha256 = "0k9rs5ajx0chaq0xr1cj4x7fr5n8kd4y856miss6k01iv2m7yx42";
-    };
-  }));
+  ansible_2_10 = python3Packages.toPythonApplication python3Packages.ansible-base;
 
+  # End of support 2021/10/02, End of life 2021/12/31
   ansible_2_9 = python3Packages.toPythonApplication python3Packages.ansible;
 
-  ansible_2_8 = python3Packages.toPythonApplication (python3Packages.ansible.overridePythonAttrs (old: rec {
-    pname = "ansible";
-    version = "2.8.14";
-
-    src = fetchurl {
-      url = "https://releases.ansible.com/ansible/${pname}-${version}.tar.gz";
-      sha256 = "19ga0c9qs2b216qjg5k2yknz8ksjn8qskicqspg2d4b8x2nr1294";
-    };
-  }));
+  ansible_2_8 = throw "Ansible 2.8 went end of life on 2021/01/03 and has subsequently been dropped";
 }
diff --git a/pkgs/tools/admin/aws-google-auth/default.nix b/pkgs/tools/admin/aws-google-auth/default.nix
index d96eadf0eab..9330291014d 100644
--- a/pkgs/tools/admin/aws-google-auth/default.nix
+++ b/pkgs/tools/admin/aws-google-auth/default.nix
@@ -4,6 +4,7 @@
 , beautifulsoup4
 , boto3
 , configparser
+, filelock
 , keyring
 , keyrings-alt
 , lxml
@@ -19,7 +20,7 @@
 
 buildPythonApplication rec {
   pname = "aws-google-auth";
-  version = "0.0.34";
+  version = "0.0.37";
 
   # Pypi doesn't ship the tests, so we fetch directly from GitHub
   # https://github.com/cevoaustralia/aws-google-auth/issues/120
@@ -27,13 +28,14 @@ buildPythonApplication rec {
     owner = "cevoaustralia";
     repo = "aws-google-auth";
     rev = version;
-    sha256 = "12c5ssdy870szrizhs4d7dzcpq3hvszjvl8ba60qf1ak5jsr1ay4";
+    sha256 = "1bh733n4m5rsslpbjvhdigx6768nrvacybkakrm9704d2md9vkqd";
   };
 
-  propagatedBuildInputs = [ 
+  propagatedBuildInputs = [
     beautifulsoup4
     boto3
     configparser
+    filelock
     keyring
     keyrings-alt
     lxml
@@ -43,10 +45,10 @@ buildPythonApplication rec {
     tabulate
     tzlocal
   ] ++ lib.optional withU2F python-u2flib-host;
-  
-  checkInputs = [ 
+
+  checkInputs = [
     mock
-    nose 
+    nose
   ];
 
   preCheck = ''
diff --git a/pkgs/tools/admin/aws-lambda-runtime-interface-emulator/default.nix b/pkgs/tools/admin/aws-lambda-runtime-interface-emulator/default.nix
new file mode 100644
index 00000000000..84372423d61
--- /dev/null
+++ b/pkgs/tools/admin/aws-lambda-runtime-interface-emulator/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "aws-lambda-runtime-interface-emulator";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "aws";
+    repo = "aws-lambda-runtime-interface-emulator";
+    rev = "v${version}";
+    sha256 = "sha256-vbVygZzLlJlxaRF/LIqSJP0gZGyu1wSSdeVjILl/OJE=";
+  };
+
+  vendorSha256 = "sha256-WcvYPGgkrK7Zs5IplAoUTay5ys9LrDJHpRN3ywEdWRM=";
+
+  # disabled because I lack the skill
+  doCheck = false;
+
+  meta = with lib; {
+    description = "To locally test their Lambda function packaged as a container image.";
+    homepage = "https://github.com/aws/aws-lambda-runtime-interface-emulator";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ teto ];
+  };
+}
diff --git a/pkgs/tools/admin/aws-mfa/default.nix b/pkgs/tools/admin/aws-mfa/default.nix
new file mode 100644
index 00000000000..53855b6d28d
--- /dev/null
+++ b/pkgs/tools/admin/aws-mfa/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, boto3
+}:
+
+buildPythonApplication rec {
+  pname = "aws-mfa";
+  version = "0.0.12";
+
+  src = fetchFromGitHub {
+    owner = "broamski";
+    repo = "aws-mfa";
+    rev = version;
+    sha256 = "1blcpa13zgyac3v8inc7fh9szxq2avdllx6w5ancfmyh5spc66ay";
+  };
+
+  propagatedBuildInputs = [
+    boto3
+  ];
+
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "awsmfa"
+  ];
+
+  meta = with lib; {
+    description = "Manage AWS MFA Security Credentials";
+    homepage = "https://github.com/broamski/aws-mfa";
+    license = [ licenses.mit ];
+    maintainers = [ maintainers.srapenne ];
+  };
+}
diff --git a/pkgs/tools/admin/aws-nuke/default.nix b/pkgs/tools/admin/aws-nuke/default.nix
new file mode 100644
index 00000000000..901f489fb46
--- /dev/null
+++ b/pkgs/tools/admin/aws-nuke/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "aws-nuke";
+  version = "2.15.0";
+
+  src = fetchFromGitHub {
+    owner = "rebuy-de";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-FntHZi+L0Ti2QFbd8keF1sxcdXc01hs13Np23hF/pVc=";
+  };
+
+  vendorSha256 = "sha256-VtsHUxI5RuKbQOSu55qPCJHsDO5+cNGT92y9dlibXlc=";
+
+  preBuild = ''
+    if [ "x$outputHashAlgo" != "x" ]; then
+      # Only `go generate` when fetching the go mod vendor code
+      go generate ./...
+    fi
+  '';
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Nuke a whole AWS account and delete all its resources";
+    homepage = "https://github.com/rebuy-de/aws-nuke";
+    license = licenses.mit;
+    maintainers = with maintainers; [ grahamc ];
+  };
+}
diff --git a/pkgs/tools/admin/aws-rotate-key/default.nix b/pkgs/tools/admin/aws-rotate-key/default.nix
index 9c2f747e155..82b57739120 100644
--- a/pkgs/tools/admin/aws-rotate-key/default.nix
+++ b/pkgs/tools/admin/aws-rotate-key/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "aws-rotate-key";
@@ -15,7 +15,7 @@ buildGoPackage rec {
 
   goDeps = ./deps.nix;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Easily rotate your AWS key";
     homepage = "https://github.com/Fullscreen/aws-rotate-key";
     license = licenses.mit;
diff --git a/pkgs/tools/admin/aws-vault/default.nix b/pkgs/tools/admin/aws-vault/default.nix
index ef6f760de51..c1716015281 100644
--- a/pkgs/tools/admin/aws-vault/default.nix
+++ b/pkgs/tools/admin/aws-vault/default.nix
@@ -1,16 +1,33 @@
-{ buildGoModule, lib, fetchFromGitHub }:
+{ buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, lib
+, makeWrapper
+, xdg-utils
+}:
 buildGoModule rec {
   pname = "aws-vault";
-  version = "5.4.4";
+  version = "6.3.1";
 
   src = fetchFromGitHub {
     owner = "99designs";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0qmxq2jd7dg5fp9giw6xd96q2l2df3sxksc0rwmrgx2rjx6iyivn";
+    sha256 = "sha256-yNmjoCq9fYzt/lZQlVgxQvxKWCh5Lxd4NSX7c+gE/As=";
   };
 
-  vendorSha256 = "0jlraq480llamns6yw8yjkzxsndyqiyzy120djni8sw5h0bz65j7";
+  vendorSha256 = "sha256-Lb5iiuT/Fd3RMt98AafIi9I0FHJaSpJ8pH7r4yZiiiw=";
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/aws-vault --prefix PATH : ${lib.makeBinPath [ xdg-utils ]}
+    installShellCompletion --cmd aws-vault \
+      --bash $src/contrib/completions/bash/aws-vault.bash \
+      --fish $src/contrib/completions/fish/aws-vault.fish \
+      --zsh $src/contrib/completions/zsh/aws-vault.zsh
+  '';
+
 
   doCheck = false;
 
@@ -22,6 +39,12 @@ buildGoModule rec {
     -X main.Version=v${version}
   '';
 
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    $out/bin/aws-vault --version 2>&1 | grep ${version} > /dev/null
+  '';
+
   meta = with lib; {
     description =
       "A vault for securely storing and accessing AWS credentials in development environments";
diff --git a/pkgs/tools/admin/awscli/default.nix b/pkgs/tools/admin/awscli/default.nix
index 84b5d7ebeb2..0d0d2ec80ff 100644
--- a/pkgs/tools/admin/awscli/default.nix
+++ b/pkgs/tools/admin/awscli/default.nix
@@ -1,33 +1,37 @@
 { lib
+, nixosTests
 , python3
 , groff
 , less
 }:
-
 let
   py = python3.override {
     packageOverrides = self: super: {
-      rsa = super.rsa.overridePythonAttrs (oldAttrs: rec {
-        version = "3.4.2";
+      # TODO: https://github.com/aws/aws-cli/pull/5712
+      colorama = super.colorama.overridePythonAttrs (oldAttrs: rec {
+        version = "0.4.3";
         src = oldAttrs.src.override {
           inherit version;
-          sha256 = "25df4e10c263fb88b5ace923dd84bf9aa7f5019687b5e55382ffcdb8bede9db5";
+          sha256 = "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9";
         };
       });
     };
   };
 
-in with py.pkgs; buildPythonApplication rec {
+in
+with py.pkgs; buildPythonApplication rec {
   pname = "awscli";
-  version = "1.18.109"; # N.B: if you change this, change botocore to a matching version too
+  version = "1.19.97"; # N.B: if you change this, change botocore and boto3 to a matching version too
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "eca463ca5447d7db2eeebd268217b7e73f7e9a22b750505a3efd655dc189ac84";
+    sha256 = "sha256-kecuyQMk4GWH9G0/f4Gi/hWtW4Zme9Q4i7XclcZTlNc=";
   };
 
+  # https://github.com/aws/aws-cli/issues/4837
   postPatch = ''
-    substituteInPlace setup.py --replace "docutils>=0.10,<0.16" "docutils>=0.10"
+    substituteInPlace setup.py \
+      --replace "docutils>=0.10,<0.16" "docutils>=0.10"
   '';
 
   # No tests included
@@ -47,14 +51,20 @@ in with py.pkgs; buildPythonApplication rec {
   ];
 
   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/bash-completion/completions
+    echo "complete -C $out/bin/aws_completer aws" > $out/share/bash-completion/completions/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
+  passthru = {
+    python = py; # for aws_shell
+
+    tests = { inherit (nixosTests) awscli; };
+  };
 
   meta = with lib; {
     homepage = "https://aws.amazon.com/cli/";
diff --git a/pkgs/tools/admin/awscli2/default.nix b/pkgs/tools/admin/awscli2/default.nix
index c264c86260e..d84c1816fec 100644
--- a/pkgs/tools/admin/awscli2/default.nix
+++ b/pkgs/tools/admin/awscli2/default.nix
@@ -1,19 +1,14 @@
-{ lib
-, python3
-, groff
-, less
-, fetchFromGitHub
-}:
+{ lib, python3, groff, less, fetchFromGitHub, fetchpatch }:
 let
   py = python3.override {
     packageOverrides = self: super: {
       botocore = super.botocore.overridePythonAttrs (oldAttrs: rec {
-        version = "2.0.0dev40";
+        version = "2.0.0dev122";
         src = fetchFromGitHub {
           owner = "boto";
           repo = "botocore";
-          rev = "6b3f96c5e985597053850f0c2761d503d4c18bfe";
-          sha256 = "1ffx86m3b592kj331800qbcz5f532z8kzf1wmd04i4bfiqvqn4h8";
+          rev = "8dd916418c8193f56226b7772f263b2435eae27a";
+          sha256 = "sha256-iAZmqnffqrmFuxlQyOpEQzSCcL/hRAjuXKulOXoy4hY=";
         };
       });
       prompt_toolkit = super.prompt_toolkit.overridePythonAttrs (oldAttrs: rec {
@@ -29,26 +24,36 @@ let
 in
 with py.pkgs; buildPythonApplication rec {
   pname = "awscli2";
-  version = "2.0.36"; # N.B: if you change this, change botocore to a matching version too
+  version = "2.2.14"; # N.B: if you change this, change botocore to a matching version too
 
   src = fetchFromGitHub {
     owner = "aws";
     repo = "aws-cli";
     rev = version;
-    hash = "sha256:05c9lss7jg7bwaij1nxwg50grah68zamcixy8jiw3hpc1vdighql";
+    sha256 = "sha256-LU9Tqzdi8ULZ5y3FbfSXdrip4NcxFkXRCTpVGo05LcM=";
   };
 
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/mgorny/aws-cli/commit/85361123d2fa12eaedf912c046ffe39aebdd2bad.patch";
+      sha256 = "sha256-1Rb+/CY7ze1/DbJ6TfqHF01cfI2vixZ1dT91bmHTg/A=";
+    })
+  ];
+
   postPatch = ''
-    substituteInPlace setup.py --replace "cryptography>=2.8.0,<=2.9.0" "cryptography>=2.8.0"
-    substituteInPlace setup.py --replace "docutils>=0.10,<0.16" "docutils>=0.10"
-    substituteInPlace setup.py --replace "ruamel.yaml>=0.15.0,<0.16.0" "ruamel.yaml>=0.15.0"
-    substituteInPlace setup.py --replace "wcwidth<0.2.0" "wcwidth"
+    substituteInPlace setup.py \
+      --replace "awscrt==0.11.13" "awscrt" \
+      --replace "colorama>=0.2.5,<0.4.4" "colorama" \
+      --replace "cryptography>=3.3.2,<3.4.0" "cryptography" \
+      --replace "docutils>=0.10,<0.16" "docutils" \
+      --replace "ruamel.yaml>=0.15.0,<0.16.0" "ruamel.yaml" \
+      --replace "wcwidth<0.2.0" "wcwidth"
   '';
 
-  # No tests included
-  doCheck = false;
+  checkInputs = [ jsonschema mock nose ];
 
   propagatedBuildInputs = [
+    awscrt
     bcdoc
     botocore
     colorama
@@ -66,11 +71,25 @@ with py.pkgs; buildPythonApplication rec {
     wcwidth
   ];
 
+  checkPhase = ''
+    export PATH=$PATH:$out/bin
+
+    # https://github.com/NixOS/nixpkgs/issues/16144#issuecomment-225422439
+    export HOME=$TMP
+
+    AWS_TEST_COMMAND=$out/bin/aws python scripts/ci/run-tests
+  '';
+
   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/${python3.sitePackages}/awscli/data
+    ${python3.interpreter} scripts/gen-ac-index --index-location $out/${python3.sitePackages}/awscli/data/ac.index
+
+    mkdir -p $out/share/bash-completion/completions
+    echo "complete -C $out/bin/aws_completer aws" > $out/share/bash-completion/completions/aws
+
     mkdir -p $out/share/zsh/site-functions
     mv $out/bin/aws_zsh_completer.sh $out/share/zsh/site-functions
+
     rm $out/bin/aws.cmd
   '';
 
diff --git a/pkgs/tools/admin/awslogs/default.nix b/pkgs/tools/admin/awslogs/default.nix
index 4a33d742076..5b61e4828ef 100644
--- a/pkgs/tools/admin/awslogs/default.nix
+++ b/pkgs/tools/admin/awslogs/default.nix
@@ -1,23 +1,27 @@
-{ stdenv, fetchFromGitHub, python3Packages }:
+{ lib, fetchFromGitHub, python3Packages }:
 
 python3Packages.buildPythonApplication rec {
   pname = "awslogs";
-  version = "0.11.0";
+  version = "0.14.0";
 
   src = fetchFromGitHub {
     owner = "jorgebastida";
     repo = "awslogs";
     rev = version;
-    sha256 = "0vdpld7r7y78x1lcd5z3qsx047dwichxb8f3447yzl75fnsm75dc";
+    sha256 = "1gyry8b64psvmjcb2lb3yilpa7b17yllga06svls4hi69arvrd8f";
   };
 
-  doCheck = false;
-
   propagatedBuildInputs = with python3Packages; [
-    boto3 termcolor dateutil docutils setuptools
+    boto3 termcolor python-dateutil docutils setuptools jmespath
+  ];
+
+  checkInputs = [ python3Packages.pytestCheckHook ];
+  disabledTests = [
+    "test_main_get_query"
+    "test_main_get_with_color"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/jorgebastida/awslogs";
     description = "AWS CloudWatch logs for Humans";
     maintainers = with maintainers; [ dbrock ];
diff --git a/pkgs/tools/admin/awsweeper/default.nix b/pkgs/tools/admin/awsweeper/default.nix
index 2417854fcad..0ff42ca20fc 100644
--- a/pkgs/tools/admin/awsweeper/default.nix
+++ b/pkgs/tools/admin/awsweeper/default.nix
@@ -1,29 +1,25 @@
-{ lib, buildGoModule, fetchurl, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "awsweeper";
-  version = "0.7.0";
-
-  # Requires go generate to be run with mockgen, but doesn't check in the results.
-  patches = fetchurl {
-    url = "https://raw.githubusercontent.com/c00w/patches/master/awskeeper.patch";
-    sha256 = "0dz553ffxc37m2iwygrbhxf7pm91hxdriic8a1gjf8q3nyn13npl";
-  };
+  version = "0.11.1";
 
   src = fetchFromGitHub {
-    owner = "cloudetc";
+    owner = "jckuester";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1ybrrpnp6rh7rcwihww43cvhfhzzyy51rdk1hwy9ljpkg37k4y28";
+    sha256 = "sha256-fpWoLFSwSVxaiWyVMSmQTd3o/zOySUXNM2YhxMQ7nsA=";
   };
 
-  vendorSha256 = "0hnpb1xp135z2qpn1b6xad59739hffhs8dfpr3n5drmrvajpn4xp";
+  vendorSha256 = "sha256-1u1mzANLlWduAQF1GUX7BJSyYlSZwNQISqKwbyRlGog=";
+
+  buildFlagsArray = [ "-ldflags=-s -w -X github.com/jckuester/awsweeper/internal.version=${version} -X github.com/jckuester/awsweeper/internal.commit=${src.rev} -X github.com/jckuester/awsweeper/internal.date=unknown" ];
 
   doCheck = false;
 
   meta = with lib; {
     description = "A tool to clean out your AWS account";
-    homepage = "https://github.com/cloudetc/awsweeper/";
+    homepage = "https://github.com/jckuester/awsweeper";
     license = licenses.mpl20;
     maintainers = [ maintainers.marsam ];
   };
diff --git a/pkgs/tools/admin/azure-cli/default.nix b/pkgs/tools/admin/azure-cli/default.nix
index 192a788b935..b93ab0e867b 100644
--- a/pkgs/tools/admin/azure-cli/default.nix
+++ b/pkgs/tools/admin/azure-cli/default.nix
@@ -1,28 +1,35 @@
-{ stdenv, lib, python, fetchFromGitHub, installShellFiles }:
+{ stdenv, lib, python3, fetchFromGitHub, installShellFiles }:
 
 let
-  version = "2.10.1";
+  version = "2.26.1";
+  srcName = "azure-cli-${version}-src";
+
   src = fetchFromGitHub {
+    name = srcName;
     owner = "Azure";
     repo = "azure-cli";
     rev = "azure-cli-${version}";
-    sha256 = "03mard9cyffn109c1p0hrdi4cjxbwyk98677qrira9yvy6rw04bg";
+    sha256 = "sha256-AwchP0o3I2T37dLPNw51wldwYUmcRuWptyzrhOocEaQ=";
   };
 
   # put packages that needs to be overriden in the py package scope
-  py = import ./python-packages.nix { inherit stdenv python lib src version; };
+  py = import ./python-packages.nix {
+    inherit stdenv lib src version;
+    python = python3;
+  };
 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";
+  sourceRoot = "${srcName}/src/azure-cli";
 
   prePatch = ''
     substituteInPlace setup.py \
       --replace "javaproperties==0.5.1" "javaproperties" \
       --replace "pytz==2019.1" "pytz" \
+      --replace "jsondiff==1.2.0" "jsondiff~=1.2" \
+      --replace "antlr4-python3-runtime~=4.7.2" "antlr4-python3-runtime~=4.7" \
       --replace "mock~=4.0" "mock"
 
     # remove namespace hacks
@@ -36,6 +43,7 @@ py.pkgs.toPythonApplication (py.pkgs.buildAzureCliPackage {
   nativeBuildInputs = [ installShellFiles ];
 
   propagatedBuildInputs = with py.pkgs; [
+    azure-appconfiguration
     azure-batch
     azure-cli-core
     azure-cli-telemetry
@@ -43,7 +51,9 @@ py.pkgs.toPythonApplication (py.pkgs.buildAzureCliPackage {
     azure-datalake-store
     azure-functions-devops-build
     azure-graphrbac
+    azure-identity
     azure-keyvault
+    azure-keyvault-administration
     azure-loganalytics
     azure-mgmt-advisor
     azure-mgmt-apimanagement
@@ -62,6 +72,7 @@ py.pkgs.toPythonApplication (py.pkgs.buildAzureCliPackage {
     azure-mgmt-containerregistry
     azure-mgmt-containerservice
     azure-mgmt-cosmosdb
+    azure-mgmt-databoxedge
     azure-mgmt-datalake-analytics
     azure-mgmt-datalake-store
     azure-mgmt-datamigration
@@ -70,6 +81,7 @@ py.pkgs.toPythonApplication (py.pkgs.buildAzureCliPackage {
     azure-mgmt-dns
     azure-mgmt-eventgrid
     azure-mgmt-eventhub
+    azure-mgmt-extendedlocation
     azure-mgmt-hdinsight
     azure-mgmt-imagebuilder
     azure-mgmt-iotcentral
@@ -101,14 +113,19 @@ py.pkgs.toPythonApplication (py.pkgs.buildAzureCliPackage {
     azure-mgmt-security
     azure-mgmt-servicebus
     azure-mgmt-servicefabric
+    azure-mgmt-servicefabricmanagedclusters
     azure-mgmt-signalr
     azure-mgmt-sql
     azure-mgmt-sqlvirtualmachine
     azure-mgmt-storage
+    azure-mgmt-synapse
     azure-mgmt-trafficmanager
     azure-mgmt-web
     azure-multiapi-storage
     azure-storage-blob
+    azure-synapse-accesscontrol
+    azure-synapse-artifacts
+    azure-synapse-spark
     colorama
     cryptography
     Fabric
@@ -117,6 +134,7 @@ py.pkgs.toPythonApplication (py.pkgs.buildAzureCliPackage {
     mock
     paramiko
     pydocumentdb
+    PyGithub
     pygments
     pyopenssl
     pytz
@@ -124,11 +142,12 @@ py.pkgs.toPythonApplication (py.pkgs.buildAzureCliPackage {
     psutil
     requests
     scp
+    semver
     six
     sshtunnel
     urllib3
     vsts-cd-manager
-    websocket_client
+    websocket-client
     xmltodict
     javaproperties
     jsondiff
@@ -138,9 +157,9 @@ py.pkgs.toPythonApplication (py.pkgs.buildAzureCliPackage {
     argcomplete
   ];
 
-  # TODO: make shell completion actually work
-  # uses argcomplete, so completion needs PYTHONPATH to work
   postInstall = ''
+    substituteInPlace az.completion.sh \
+      --replace register-python-argcomplete ${py.pkgs.argcomplete}/bin/register-python-argcomplete
     installShellCompletion --bash --name az.bash az.completion.sh
     installShellCompletion --zsh --name _az az.completion.sh
 
@@ -159,9 +178,7 @@ py.pkgs.toPythonApplication (py.pkgs.buildAzureCliPackage {
   # 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
+    HOME=$TMPDIR $out/bin/az --help > /dev/null
   '';
 
   # ensure these namespaces are able to be accessed
diff --git a/pkgs/tools/admin/azure-cli/python-packages.nix b/pkgs/tools/admin/azure-cli/python-packages.nix
index 1ff74369432..2cde5a1da57 100644
--- a/pkgs/tools/admin/azure-cli/python-packages.nix
+++ b/pkgs/tools/admin/azure-cli/python-packages.nix
@@ -6,7 +6,7 @@ let
     prePatch = (attrs.prePatch or "") + ''
       rm -f azure_bdist_wheel.py tox.ini
       substituteInPlace setup.py \
-        --replace "wheel==0.30.0" "wheel"
+        --replace "cryptography>=3.2,<3.4" "cryptography"
       sed -i "/azure-namespace-package/c\ " setup.cfg
     '';
 
@@ -51,7 +51,7 @@ let
         pname = "azure-cli-core";
         inherit version src;
 
-        sourceRoot = "source/src/azure-cli-core";
+        sourceRoot = "${src.name}/src/azure-cli-core";
 
         propagatedBuildInputs = with self; [
           adal
@@ -61,6 +61,7 @@ let
           azure-mgmt-core
           azure-mgmt-resource
           colorama
+          cryptography
           humanfriendly
           jmespath
           knack
@@ -83,14 +84,21 @@ let
         ++ lib.optionals isPy3k [ antlr4-python3-runtime ]
         ++ lib.optionals (!isPy3k) [ enum34 futures antlr4-python2-runtime ndg-httpsclient ];
 
+        postPatch = ''
+          substituteInPlace setup.py \
+            --replace "azure-mgmt-core>=1.2.0,<1.3.0" "azure-mgmt-core~=1.2" \
+            --replace "cryptography>=3.2,<3.4" "cryptography"
+        '';
+
         doCheck = stdenv.isLinux;
-        # ignore test that does network call
+        # ignore tests 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
+            --ignore=azure/cli/core/tests/test_generic_update.py \
+            -k 'not metadata_url'
         '';
 
         pythonImportsCheck = [
@@ -104,13 +112,19 @@ let
         version = "1.0.4"; # might be wrong, but doesn't really matter
         inherit src;
 
-        sourceRoot = "source/src/azure-cli-telemetry";
+        sourceRoot = "${src.name}/src/azure-cli-telemetry";
 
         propagatedBuildInputs = with super; [
           applicationinsights
           portalocker
         ];
 
+        # upstream doesn't update this requirement probably because they use pip
+        postPatch = ''
+          substituteInPlace setup.py \
+            --replace "portalocker~=1.6" "portalocker"
+        '';
+
         # ignore flaky test
         checkPhase = ''
           cd azure
@@ -118,38 +132,47 @@ let
         '';
       };
 
-      azure-batch = overrideAzureMgmtPackage super.azure-batch "9.0.0" "zip"
-        "112d73gxjqng348mcvi36ska6pxyg8qc3qswvhf5x4a0lr86zjj7";
+      azure-appconfiguration = overrideAzureMgmtPackage super.azure-appconfiguration "1.1.1" "zip"
+        "sha256-uDzSy2PZMiXehOJ6u/wFkhL43id2b0xY3Tq7g53/C+Q=";
+
+      azure-batch = overrideAzureMgmtPackage super.azure-batch "10.0.0" "zip"
+        "83d7a2b0be42ca456ac2b56fa3dc6ce704c130e888d37d924072c1d3718f32d0";
 
-      azure-mgmt-apimanagement = overrideAzureMgmtPackage super.azure-mgmt-apimanagement "0.1.0" "zip"
-        "06bqqkn5mx127x1z7ycm6rl8ajxlrmrm2kcdpgkbl4baii1x6iax";
+      azure-mgmt-apimanagement = overrideAzureMgmtPackage super.azure-mgmt-apimanagement "0.2.0" "zip"
+        "0whx3s8ri9939r3pdvjf8iqcslas1xy6cnccidmp10r5ng0023vr";
 
-      azure-mgmt-batch = overrideAzureMgmtPackage super.azure-mgmt-batch "9.0.0" "zip"
-        "1zn3yqwvm2f3sy8v0xvj4yb7m8kxxm1wpcaccxp91b0zzbn7wh83";
+      azure-mgmt-batch = overrideAzureMgmtPackage super.azure-mgmt-batch "15.0.0" "zip"
+        "9b793bb31a0d4dc8c29186db61db24d83795851a75846aadb187cf95bf853ccb";
+
+      azure-mgmt-billing = overrideAzureMgmtPackage super.azure-mgmt-billing "6.0.0" "zip"
+        "d4f5c5a4188a456fe1eb32b6c45f55ca2069c74be41eb76921840b39f2f5c07f";
+
+      azure-mgmt-botservice = overrideAzureMgmtPackage super.azure-mgmt-botservice "0.3.0" "zip"
+        "f8318878a66a0685a01bf27b7d1409c44eb90eb72b0a616c1a2455c72330f2f1";
 
       azure-mgmt-policyinsights = overrideAzureMgmtPackage super.azure-mgmt-policyinsights "0.5.0" "zip"
         "1wxh7mgrknnhqyafdd7sbwx8plx0zga2af21vs6yhxy48lw9w8pd";
 
-      azure-mgmt-rdbms = overrideAzureMgmtPackage super.azure-mgmt-rdbms "2.2.0" "zip"
-        "1iz1pf28ajrzbq8nab1jbjbgfbv0g6ni036xayy6xylvga4l8czr";
+      azure-mgmt-rdbms = overrideAzureMgmtPackage super.azure-mgmt-rdbms "8.1.0b4" "zip"
+        "sha256-39msNYlZeZdn8cJ4LjZw9oxzy0YrNSPVEIN21wnkMKs=";
 
-      azure-mgmt-recoveryservices = overrideAzureMgmtPackage super.azure-mgmt-recoveryservices "0.4.0" "zip"
-        "0v0ycyjnnx09jqf958hj2q6zfpsn80bxxm98jf59y8rj09v99rz1";
+      azure-mgmt-recoveryservices = overrideAzureMgmtPackage super.azure-mgmt-recoveryservices "1.0.0" "zip"
+        "0v0ycyjnnx09jqf958hj2q6zfpsn80bxxm98jf59y8rj09v99rza";
 
-      azure-mgmt-recoveryservicesbackup = overrideAzureMgmtPackage super.azure-mgmt-recoveryservicesbackup "0.6.0" "zip"
-        "13s2k4jl8570bj6jkqzm0w29z29rl7h5i7czd3kr6vqar5wj9xjd";
+      azure-mgmt-recoveryservicesbackup = overrideAzureMgmtPackage super.azure-mgmt-recoveryservicesbackup "0.12.0" "zip"
+        "sha256-mrw1Gs3LMOPFiL5mSSrm+g1/dxihplA6ItYHbwljJbM=";
 
-      azure-mgmt-resource = overrideAzureMgmtPackage super.azure-mgmt-resource "10.1.0" "zip"
-        "1pgxl2gzc1dm7akcqm6fl0y35sb3jdgcz6d7k6vsq93gb3gzrrwv";
+      azure-mgmt-resource = overrideAzureMgmtPackage super.azure-mgmt-resource "18.0.0" "zip"
+        "551036e592f409ef477d30937ea7cc4dda5126576965d9c816fdb8401bbd774c";
 
-      azure-mgmt-appconfiguration = overrideAzureMgmtPackage super.azure-mgmt-appconfiguration "0.5.0" "zip"
-        "1nh626jg459p9f96glv74dph3vmpybm5cs8rrj1s65kn3m8jf591";
+      azure-mgmt-appconfiguration = overrideAzureMgmtPackage super.azure-mgmt-appconfiguration "2.0.0" "zip"
+        "b58bbe82a7429ba589292024896b58d96fe9fa732c578569cac349928dc2ca5f";
 
-      azure-mgmt-cognitiveservices = overrideAzureMgmtPackage super.azure-mgmt-cognitiveservices "6.2.0" "zip"
-        "1khk9jdfx7706xsqpwrnfsplv6p6wracvpyk9ki8zhc7p83kal4k";
+      azure-mgmt-cognitiveservices = overrideAzureMgmtPackage super.azure-mgmt-cognitiveservices "12.0.0" "zip"
+        "73054bd19866577e7e327518afc8f47e1639a11aea29a7466354b81804f4a676";
 
-      azure-mgmt-compute = overrideAzureMgmtPackage super.azure-mgmt-compute "13.0.0" "zip"
-        "17ik8lfd74ki57rml2piswcanzbladsqy0s2m9jmvwpdrfpincvz";
+      azure-mgmt-compute = overrideAzureMgmtPackage super.azure-mgmt-compute "21.0.0" "zip"
+        "sha256-kifDdVpwvDd9cONeH8bx+rEJ3YiXT9LHEphnzKoQ+BM=";
 
       azure-mgmt-consumption = overrideAzureMgmtPackage super.azure-mgmt-consumption "2.0.0" "zip"
         "12ai4qps73ivawh0yzvgb148ksx02r30pqlvfihx497j62gsi1cs";
@@ -157,29 +180,29 @@ let
       azure-mgmt-containerinstance = overrideAzureMgmtPackage super.azure-mgmt-containerinstance "1.4.0" "zip"
         "1qw6228bia5pimcijr755npli2l33jyfka1s2bzgl1w4h3prsji7";
 
-      azure-mgmt-containerservice = overrideAzureMgmtPackage super.azure-mgmt-containerservice "9.0.1" "zip"
-        "11nqjpi9qypb0xvfy63l98q5m5jfv5iqx15mliksm96vkdkmji3y";
+      azure-mgmt-containerservice = overrideAzureMgmtPackage super.azure-mgmt-containerservice "16.0.0" "zip"
+        "d6aa95951d32fe2cb390b3d8ae4f6459746de51bbaad94b5d1842dd35c4d0c11";
 
-      azure-mgmt-core = overrideAzureMgmtPackage super.azure-mgmt-core "1.0.0" "zip"
-        "0pm565v05480f672l0n8z2sg6zk6iqyi91n0dhscibhdl54sy3si";
+      azure-mgmt-cosmosdb = overrideAzureMgmtPackage super.azure-mgmt-cosmosdb "6.4.0" "zip"
+        "fb6b8ab80ab97214b94ae9e462ba1c459b68a3af296ffc26317ebd3ff500e00b";
 
-      azure-mgmt-cosmosdb = overrideAzureMgmtPackage super.azure-mgmt-cosmosdb "0.15.0" "zip"
-        "03ysr8kx0gavjrxsi9wqrgxpg3g17nvii7z68qfm0k2mv6ryj3z7";
+      azure-mgmt-databoxedge = overrideAzureMgmtPackage super.azure-mgmt-databoxedge "0.2.0" "zip"
+        "sha256-g8BtUpIGOse8Jrws48gQ/o7sgymlgX0XIxl1ThHS3XA=";
 
       azure-mgmt-deploymentmanager = overrideAzureMgmtPackage super.azure-mgmt-deploymentmanager "0.2.0" "zip"
         "0c6pyr36n9snx879vas5r6l25db6nlp2z96xn759mz4kg4i45qs6";
 
-      azure-mgmt-eventgrid = overrideAzureMgmtPackage super.azure-mgmt-eventgrid "3.0.0rc7" "zip"
-        "1m5905mn362pn03sf89zsnylkrbgs4p1lkafrw3nxa2gnwcfpyb8";
+      azure-mgmt-eventgrid = overrideAzureMgmtPackage super.azure-mgmt-eventgrid "9.0.0" "zip"
+        "aecbb69ecb010126c03668ca7c9a2be8e965568f5b560f0e7b5bc152b157b510";
 
       azure-mgmt-imagebuilder = overrideAzureMgmtPackage super.azure-mgmt-imagebuilder "0.4.0" "zip"
         "0cqpjnkpid6a34ifd4vk4fn1h57pa1bg3r756wv082xl2szr34jc";
 
-      azure-mgmt-iothub = overrideAzureMgmtPackage super.azure-mgmt-iothub "0.12.0" "zip"
-        "187z0w5by7d9a2zsz3kidmzjw591akpc6dwhps4jyb4skcmyw86s";
+      azure-mgmt-iothub = overrideAzureMgmtPackage super.azure-mgmt-iothub "2.0.0" "zip"
+        "653a765f0beb6af0c9ecbd290b4101e1b5e0f6450405faf28ab8234c15d8b38b";
 
-      azure-mgmt-iotcentral = overrideAzureMgmtPackage super.azure-mgmt-iotcentral "3.0.0" "zip"
-        "0iq04hvivq3fvg2lhax95gx0x35avk5hps42227z3qna5i2cznpn";
+      azure-mgmt-iotcentral = overrideAzureMgmtPackage super.azure-mgmt-iotcentral "4.1.0" "zip"
+        "e6d4810f454c0d63a5e816eaa7e54a073a3f70b2256162ff1c234cfe91783ae6";
 
       azure-mgmt-kusto = overrideAzureMgmtPackage super.azure-mgmt-kusto "0.3.0" "zip"
         "1pmcdgimd66h964a3d5m2j2fbydshcwhrk87wblhwhfl3xwbgf4y";
@@ -187,26 +210,41 @@ let
       azure-mgmt-devtestlabs = overrideAzureMgmtPackage super.azure-mgmt-devtestlabs "4.0.0" "zip"
         "1397ksrd61jv7400mgn8sqngp6ahir55fyq9n5k69wk88169qm2r";
 
-      azure-mgmt-netapp = overrideAzureMgmtPackage super.azure-mgmt-netapp "0.11.0" "zip"
-        "0193y0w5lcrayf8g0sxaj57w52kixdk3x5b8kga5is4pdjq7c6k2";
+      azure-mgmt-netapp = overrideAzureMgmtPackage super.azure-mgmt-netapp "4.0.0" "zip"
+        "7195e413a0764684cd42bec9e429c13c290db9ab5c465dbed586a6f6d0ec8a42";
+
+      azure-mgmt-dns = overrideAzureMgmtPackage super.azure-mgmt-dns "8.0.0" "zip"
+        "407c2dacb33513ffbe9ca4be5addb5e9d4bae0cb7efa613c3f7d531ef7bf8de8";
+
+      azure-mgmt-loganalytics = overrideAzureMgmtPackage super.azure-mgmt-loganalytics "8.0.0" "zip"
+        "3e7a93186594c328a6f34f0e0d9209a05021228baa85aa4c1c4ffdbf8005a45f";
 
-      azure-mgmt-dns = overrideAzureMgmtPackage super.azure-mgmt-dns "2.1.0" "zip"
-        "1l55py4fzzwhxlmnwa41gpmqk9v2ncc79w7zq11sm9a5ynrv2c1p";
+      azure-mgmt-network = overrideAzureMgmtPackage super.azure-mgmt-network "19.0.0" "zip"
+        "5e39a26ae81fa58c13c02029700f8c7b22c3fd832a294c543e3156a91b9459e8";
 
-      azure-mgmt-loganalytics = overrideAzureMgmtPackage super.azure-mgmt-loganalytics "0.7.0" "zip"
-        "18n2lqvrhq40gdqhlzzg8mc03571i02c7qq7jv771lc58rqpzysh";
+      azure-mgmt-maps = overrideAzureMgmtPackage super.azure-mgmt-maps "0.1.0" "zip"
+        "sha256-wSDiELthdo2ineJNKLgvjUKuJOUjlutlabSZcJ4i8AY=";
 
-      azure-mgmt-network = overrideAzureMgmtPackage super.azure-mgmt-network "11.0.0" "zip"
-        "1g39rl4p88bzhqbn1gi2nn8jyx77idxvpaw8xqz1gjv0qqqwdpvz";
+      azure-mgmt-managedservices = overrideAzureMgmtPackage super.azure-mgmt-managedservices "1.0.0" "zip"
+        "sha256-/tg5n8Z3Oq2jfB0ElqRvWUENd8lJTQyllnxTHDN2rRk=";
 
-      azure-mgmt-media = overrideAzureMgmtPackage super.azure-mgmt-media "2.1.0" "zip"
-        "1py0hch0wghzfxazdrrs7p0kln2zn9jh3fmkzwd2z8qggj38q6gm";
+      azure-mgmt-managementgroups = overrideAzureMgmtPackage super.azure-mgmt-managementgroups "0.1.0" "zip"
+        "sha256-/2LZgu3aY0o2Fgyx0Vo2epVypay0GeXnrTcejIO9R8c=";
+
+      azure-mgmt-marketplaceordering = overrideAzureMgmtPackage super.azure-mgmt-marketplaceordering "1.1.0" "zip"
+        "68b381f52a4df4435dacad5a97e1c59ac4c981f667dcca8f9d04453417d60ad8";
+
+      azure-mgmt-media = overrideAzureMgmtPackage super.azure-mgmt-media "3.0.0" "zip"
+        "sha256-iUR3VyXFJTYU0ldXbYQe5or6NPVwsFwJJKf3Px2yiiQ=";
 
       azure-mgmt-msi = overrideAzureMgmtPackage super.azure-mgmt-msi "0.2.0" "zip"
         "0rvik03njz940x2hvqg6iiq8k0d88gyygsr86w8s0sa12sdbq8l6";
 
-      azure-mgmt-web = overrideAzureMgmtPackage super.azure-mgmt-web "0.47.0" "zip"
-        "1s6c477q2kpyiqkisw6l70ydyjkv3ay6zjjj4jl4ipv05a7356kq";
+      azure-mgmt-privatedns = overrideAzureMgmtPackage super.azure-mgmt-privatedns "1.0.0" "zip"
+        "b60f16e43f7b291582c5f57bae1b083096d8303e9d9958e2c29227a55cc27c45";
+
+      azure-mgmt-web = overrideAzureMgmtPackage super.azure-mgmt-web "2.0.0" "zip"
+        "0040e1c9c795f7bebe43647ff30b62cb0db7175175df5cbfa1e554a6a277b81e";
 
       azure-mgmt-redhatopenshift = overrideAzureMgmtPackage super.azure-mgmt-redhatopenshift "0.1.0" "zip"
         "1g65lbia1i1jw6qkyjz2ldyl3p90rbr78l8kfryg70sj7z3gnnjn";
@@ -217,56 +255,68 @@ let
       azure-mgmt-reservations = overrideAzureMgmtPackage super.azure-mgmt-reservations "0.6.0" "zip"
         "16ycni3cjl9c0mv419gy5rgbrlg8zp0vnr6aj8z8p2ypdw6sgac3";
 
-      azure-mgmt-security = overrideAzureMgmtPackage super.azure-mgmt-security "0.4.1" "zip"
-        "08gf401d40bd1kn9wmpxcjxqdh84cd9hxm8rdjd0918483sqs71r";
+      azure-mgmt-search = overrideAzureMgmtPackage super.azure-mgmt-search "8.0.0" "zip"
+        "a96d50c88507233a293e757202deead980c67808f432b8e897c4df1ca088da7e";
 
-      azure-mgmt-signalr = overrideAzureMgmtPackage super.azure-mgmt-signalr "0.4.0" "zip"
-        "09n12ligh301z4xwixl50n8f1rgd2k6lpsxqzr6n6jvgkpdds0v5";
+      azure-mgmt-security = overrideAzureMgmtPackage super.azure-mgmt-security "0.6.0" "zip"
+        "9f37d0151d730801222af111f0830905634795dbfd59ad1b89c35197421e74d3";
 
-      azure-mgmt-sql = overrideAzureMgmtPackage super.azure-mgmt-sql "0.19.0" "zip"
-        "1iiqc0kh5hygcvr3x1653cpjnf5na3j11v137xa9xy65r7a4jik9";
+      azure-mgmt-signalr = overrideAzureMgmtPackage super.azure-mgmt-signalr "1.0.0b2" "zip"
+        "sha256-FTxY8qoihHG4OZuKT3sRRlKfORbIoqDqug9Ko+6S9dw=";
+
+      azure-mgmt-sql = overrideAzureMgmtPackage super.azure-mgmt-sql "0.29.0" "zip"
+        "sha256-a8epWPoGI4SA01DkjToaHmTx8lSPgwMB7dutI/zaoAA=";
 
       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-synapse = overrideAzureMgmtPackage super.azure-mgmt-synapse "2.0.0" "zip"
+        "bec6bdfaeb55b4fdd159f2055e8875bf50a720bb0fce80a816e92a2359b898c8";
+
+      azure-mgmt-datamigration = overrideAzureMgmtPackage super.azure-mgmt-datamigration "4.1.0" "zip"
+        "c33d1deb0ee173a15c8ec21a1e714ba544fe5f4895d3b1d8b0581f3c1b2e8ce4";
 
       azure-mgmt-relay = overrideAzureMgmtPackage super.azure-mgmt-relay "0.1.0" "zip"
         "1jss6qhvif8l5s0lblqw3qzijjf0h88agciiydaa7f4q577qgyfr";
 
-      azure-mgmt-eventhub = overrideAzureMgmtPackage super.azure-mgmt-eventhub "4.0.0" "zip"
-        "1qisnwn0gqfsa3h5x0fdbsgdjwn92hdbg71gdijrja0kryb328k5";
+      azure-mgmt-eventhub = overrideAzureMgmtPackage super.azure-mgmt-eventhub "4.1.0" "zip"
+        "186g70slb259ybrr69zr2ibbmqgplnpncwxzg0nxp6rd7pml7d85";
 
-      azure-mgmt-keyvault = overrideAzureMgmtPackage super.azure-mgmt-keyvault "2.2.0" "zip"
-        "1r5ww9ndya6sifafrbp4cr5iyyaww2ns7wrbqm6hc6aqxcpf30qq";
+      azure-mgmt-keyvault = overrideAzureMgmtPackage super.azure-mgmt-keyvault "9.0.0" "zip"
+        "2890c489289b8a0bf833852014f2f494eb96873834896910ddfa58cfa97b90da";
 
-      azure-mgmt-cdn = overrideAzureMgmtPackage super.azure-mgmt-cdn "5.0.0" "zip"
-        "0y1bq6lirwx4n8zydi49jx72xfc7dppzhy82x22sx98id8lxgcwm";
+      azure-mgmt-cdn = overrideAzureMgmtPackage super.azure-mgmt-cdn "11.0.0" "zip"
+        "28e7070001e7208cdb6c2ad253ec78851abdd73be482230d2c0874eed5bc0907";
 
-      azure-mgmt-containerregistry = overrideAzureMgmtPackage super.azure-mgmt-containerregistry "3.0.0rc14" "zip"
-        "0w9hnxvk5pcsa21g3xrr089rfwgldghrbj8akzvh0gchqlzfjg6j";
+      azure-mgmt-containerregistry = overrideAzureMgmtPackage super.azure-mgmt-containerregistry "8.0.0" "zip"
+        "480eb5d1bb910da4e87a5d7047e2f3e426083b14911ac64c48badd0218e9e756";
 
-      azure-mgmt-monitor = overrideAzureMgmtPackage super.azure-mgmt-monitor "0.11.0" "zip"
-        "05jhn66d4sl1qi6w34rqd8wl500jndismiwhdmzzmprdvn1zxqf6";
+      azure-mgmt-monitor = overrideAzureMgmtPackage super.azure-mgmt-monitor "2.0.0" "zip"
+        "e7f7943fe8f0efe98b3b1996cdec47c709765257a6e09e7940f7838a0f829e82";
 
-      azure-mgmt-advisor =  overrideAzureMgmtPackage super.azure-mgmt-advisor "2.0.1" "zip"
-        "1wsfkprdrn22mwm24y2zlcms8ppp7jwq3s86r3ymbl29pbaxca8r";
+      azure-mgmt-advisor =  overrideAzureMgmtPackage super.azure-mgmt-advisor "9.0.0" "zip"
+        "fc408b37315fe84781b519124f8cb1b8ac10b2f4241e439d0d3e25fd6ca18d7b";
 
-      azure-mgmt-applicationinsights = overrideAzureMgmtPackage super.azure-mgmt-applicationinsights "0.1.1" "zip"
-        "16raxr5naszrxmgbfhsvh7rqcph5cx6x3f480790m79ykvmjj0pi";
+      azure-mgmt-applicationinsights = overrideAzureMgmtPackage super.azure-mgmt-applicationinsights "1.0.0" "zip"
+        "c287a2c7def4de19f92c0c31ba02867fac6f5b8df71b5dbdab19288bb455fc5b";
 
-      azure-mgmt-authorization = overrideAzureMgmtPackage super.azure-mgmt-authorization "0.52.0" "zip"
-        "0357laxgldb7lvvws81r8xb6mrq9dwwnr1bnwdnyj4bw6p21i9hn";
+      azure-mgmt-authorization = overrideAzureMgmtPackage super.azure-mgmt-authorization "0.61.0" "zip"
+        "0xfvx2dvfj3fbz4ngn860ipi4v6gxqajyjc8x92r8knhmniyxk7m";
 
-      azure-mgmt-storage = overrideAzureMgmtPackage super.azure-mgmt-storage "11.1.0" "zip"
-        "073zybsxk70vg02bflbrx97pwzsxl0xyi48fpxp8dh3d3dy5h8zg";
+      azure-mgmt-storage = overrideAzureMgmtPackage super.azure-mgmt-storage "18.0.0" "zip"
+        "d17beb34273797fa89863632ff0e1eb9b6a55198abb8c7f05d84980762e5f71f";
 
-      azure-mgmt-servicefabric = overrideAzureMgmtPackage super.azure-mgmt-servicefabric "0.4.0" "zip"
-        "1x18grkjf2p2r1ihlwv607sna9yjvsr2jwnkjc55askrgrwx5jx2";
+      azure-mgmt-servicebus = overrideAzureMgmtPackage super.azure-mgmt-servicebus "6.0.0" "zip"
+        "f6c64ed97d22d0c03c4ca5fc7594bd0f3d4147659c10110160009b93f541298e";
 
-      azure-mgmt-hdinsight = overrideAzureMgmtPackage super.azure-mgmt-hdinsight "1.6.0" "zip"
-        "004q3d2kj1i1cx3sad1544n3pkindfm255sw19gdlhbw61wn5l5i";
+      azure-mgmt-servicefabric = overrideAzureMgmtPackage super.azure-mgmt-servicefabric "0.5.0" "zip"
+        "0x6wxb9zrvcayg3yw0nm99p10vvgc0x3zwk9amzs5m682r2z4wap";
+
+      azure-mgmt-hdinsight = overrideAzureMgmtPackage super.azure-mgmt-hdinsight "8.0.0" "zip"
+        "2c43f1a62e5b83304392b0ad7cfdaeef2ef2f47cb3fdfa2577b703b6ea126000";
+
+      azure-multiapi-storage = overrideAzureMgmtPackage super.azure-multiapi-storage "0.6.2" "tar.gz"
+        "74061f99730fa82c54d9b8ab3c7d6e219da3f30912740ecf0456b20cb3555ebc";
 
       azure-graphrbac = super.azure-graphrbac.overrideAttrs(oldAttrs: rec {
         version = "0.60.0";
@@ -297,6 +347,36 @@ let
         };
       });
 
+      azure-synapse-artifacts = super.azure-synapse-artifacts.overrideAttrs(oldAttrs: rec {
+        version = "0.6.0";
+        src = super.fetchPypi {
+          inherit (oldAttrs) pname;
+          inherit version;
+          sha256 = "ec113d37386b8787862baaf9da0318364a008004a377d20fdfca31cfe8d16210";
+          extension = "zip";
+        };
+      });
+
+      azure-synapse-accesscontrol = super.azure-synapse-accesscontrol.overrideAttrs(oldAttrs: rec {
+        version = "0.5.0";
+        src = super.fetchPypi {
+          inherit (oldAttrs) pname;
+          inherit version;
+          sha256 = "sha256-g14ySiByqPgkJGRH8EnIRJO9Q6H2usS5FOeMCQiUuwQ=";
+          extension = "zip";
+        };
+      });
+
+      azure-synapse-spark = super.azure-synapse-spark.overrideAttrs(oldAttrs: rec {
+        version = "0.2.0";
+        src = super.fetchPypi {
+          inherit (oldAttrs) pname;
+          inherit version;
+          sha256 = "1qijqp6llshqas422lnqvpv45iv99n7f13v86znql40y3jp5n3ir";
+          extension = "zip";
+        };
+      });
+
       azure-keyvault = super.azure-keyvault.overrideAttrs(oldAttrs: rec {
         version = "1.1.0";
         src = super.fetchPypi {
@@ -313,6 +393,16 @@ let
         pythonImportsCheck = [ ];
       });
 
+      azure-keyvault-administration = super.azure-keyvault-administration.overridePythonAttrs(oldAttrs: rec {
+        version = "4.0.0b3";
+        src = super.fetchPypi {
+          inherit (oldAttrs) pname;
+          inherit version;
+          extension = "zip";
+          sha256 = "sha256-d3tJWObM3plRurzfqWmHkn5CqVL9ekQfn9AeDc/KxLQ=";
+        };
+      });
+
       # part of azure.mgmt.datalake namespace
       azure-mgmt-datalake-analytics = super.azure-mgmt-datalake-analytics.overrideAttrs(oldAttrs: rec {
         version = "0.2.1";
@@ -331,55 +421,81 @@ let
         '';
       });
 
-      cryptography = super.cryptography.overridePythonAttrs(oldAttrs: rec {
-        version = "2.9.2";
+      azure-mgmt-datalake-store = super.azure-mgmt-datalake-store.overrideAttrs(oldAttrs: rec {
+        version = "0.5.0";
 
         src = super.fetchPypi {
           inherit (oldAttrs) pname;
           inherit version;
-          sha256 = "0af25w5mkd6vwns3r6ai1w5ip9xp0ms9s261zzssbpadzdr05hx0";
+          sha256 = "sha256-k3bTVJVmHRn4rMVgT2ewvFlJOxg1u8SA+aGVL5ABekw=";
+          extension = "zip";
         };
 
-        # prevent cycle with cryptography-vectors
-        doCheck = false;
+        preBuild = ''
+          rm azure_bdist_wheel.py
+          substituteInPlace setup.cfg \
+            --replace "azure-namespace-package = azure-mgmt-datalake-nspkg" ""
+        '';
       });
 
-      knack = super.knack.overridePythonAttrs(oldAttrs: rec {
-        version = "0.7.2";
+      adal = super.adal.overridePythonAttrs(oldAttrs: rec {
+        version = "1.2.7";
 
         src = super.fetchPypi {
           inherit (oldAttrs) pname;
           inherit version;
-          sha256 = "1jh81xyri7wb7vqa049imf6dfy3nc501bq3p0miaka8ffvvaxinz";
+          sha256 = "sha256-109FuBMXRU2W6YL9HFDm+1yZrCIjcorqh2RDOjn1ZvE=";
         };
       });
 
-      msal = super.msal.overridePythonAttrs(oldAttrs: rec {
-        version = "1.0.0";
+      semver = super.semver.overridePythonAttrs(oldAttrs: rec {
+        version = "2.13.0";
 
         src = super.fetchPypi {
           inherit (oldAttrs) pname;
           inherit version;
-          sha256 = "0h33wayvakggr684spdyhiqvrwraavcbk3phmcbavb3zqxd3zgpc";
+          sha256 = "sha256-+g/ici7hw/V+rEeIIMOlri9iSvgmTL35AAyYD/f3Xj8=";
         };
       });
 
-      msal-extensions = super.msal-extensions.overridePythonAttrs(oldAttrs: rec {
-        version = "0.1.3";
+      PyGithub = super.PyGithub.overridePythonAttrs(oldAttrs: rec {
+        version = "1.38";
 
         src = super.fetchPypi {
           inherit (oldAttrs) pname;
           inherit version;
-          sha256 = "1p05cbfksnhijx1il7s24js2ydzgxbpiasf607qdpb5sljlp3qar";
+          sha256 = "sha256-HtCPd17FBnvIRStyveLbuVz05S/yvVDMMsackf+tknI=";
         };
+
+        doCheck = false;
       });
 
-      websocket_client = super.websocket_client.overridePythonAttrs(oldAttrs: rec {
-        version = "0.56.0";
+      knack = super.knack.overridePythonAttrs(oldAttrs: rec {
+        version = "0.8.2";
 
         src = super.fetchPypi {
           inherit (oldAttrs) pname;
           inherit version;
+          sha256 = "sha256-TqpQocXnnRxcjl4XBbZhchsLg6CJaV5Z4inMJsZJY7k=";
+        };
+      });
+
+      sshtunnel = super.sshtunnel.overridePythonAttrs(oldAttrs: rec {
+        name = "sshtunnel-${version}";
+        version = "0.1.5";
+
+        src = super.fetchPypi {
+          inherit (oldAttrs) pname;
+          inherit version;
+          sha256 = "0jcjppp6mdfsqrbfc3ddfxg1ybgvkjv7ri7azwv3j778m36zs4y8";
+        };
+      });
+
+      websocket-client = super.websocket-client.overridePythonAttrs(oldAttrs: rec {
+        version = "0.56.0";
+
+        src = oldAttrs.src.override {
+          inherit version;
           sha256 = "0fpxjyr74klnyis3yf6m54askl0h5dchxcwbfjsq92xng0455m8z";
         };
       });
diff --git a/pkgs/tools/admin/bash-my-aws/default.nix b/pkgs/tools/admin/bash-my-aws/default.nix
index b99f031f416..7d2f878f742 100644
--- a/pkgs/tools/admin/bash-my-aws/default.nix
+++ b/pkgs/tools/admin/bash-my-aws/default.nix
@@ -1,6 +1,8 @@
-{ stdenv
+{ lib, stdenv
+, makeWrapper
 , awscli
 , jq
+, unixtools
 , fetchgit
 , installShellFiles
 , bashInteractive
@@ -22,9 +24,10 @@ stdenv.mkDerivation rec {
   propagatedBuildInputs = [
     awscli
     jq
+    unixtools.column
     bashInteractive
   ];
-  nativeBuildInputs = [ installShellFiles ];
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
 
   checkPhase = ''
     pushd test
@@ -50,6 +53,7 @@ stdenv.mkDerivation rec {
         --replace .bash-my-aws ""
     substituteInPlace bin/bma \
         --replace '~/.bash-my-aws' $out
+    wrapProgram $out/bin/bma --prefix PATH : ${lib.makeBinPath [awscli jq unixtools.column bashInteractive ]}
     installShellCompletion --bash --name bash-my-aws.bash bash_completion.sh
     chmod +x $out/lib/*
     patchShebangs --host $out/lib
@@ -62,7 +66,7 @@ stdenv.mkDerivation rec {
     popd
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://bash-my-aws.org";
     description = "CLI commands for AWS";
     license = licenses.mit;
diff --git a/pkgs/tools/admin/berglas/default.nix b/pkgs/tools/admin/berglas/default.nix
index 050ad9db75d..8a6bb559041 100644
--- a/pkgs/tools/admin/berglas/default.nix
+++ b/pkgs/tools/admin/berglas/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "berglas";
@@ -15,7 +15,7 @@ buildGoModule rec {
 
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tool for managing secrets on Google Cloud";
     homepage = "https://github.com/GoogleCloudPlatform/berglas";
     license = licenses.asl20;
diff --git a/pkgs/tools/admin/bluemix-cli/default.nix b/pkgs/tools/admin/bluemix-cli/default.nix
index f97a6e5df89..b0a5af35def 100644
--- a/pkgs/tools/admin/bluemix-cli/default.nix
+++ b/pkgs/tools/admin/bluemix-cli/default.nix
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
     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/bash-completion/completions" bx/bash_autocomplete
     install -D -t "$out/share/zsh/site-functions" bx/zsh_autocomplete
   '';
 
diff --git a/pkgs/tools/admin/boulder/default.nix b/pkgs/tools/admin/boulder/default.nix
index a21a3ebdde1..706ac84afb3 100644
--- a/pkgs/tools/admin/boulder/default.nix
+++ b/pkgs/tools/admin/boulder/default.nix
@@ -4,13 +4,10 @@
 , lib
 }:
 
-let
-  version = "release-2019-10-13";
-
-in buildGoPackage {
+buildGoPackage rec{
 
   pname = "boulder";
-  inherit version;
+  version = "release-2019-10-13";
 
   goPackagePath = "github.com/letsencrypt/boulder";
 
diff --git a/pkgs/tools/admin/bubblewrap/default.nix b/pkgs/tools/admin/bubblewrap/default.nix
index b98cadd57d1..6441b0782d5 100644
--- a/pkgs/tools/admin/bubblewrap/default.nix
+++ b/pkgs/tools/admin/bubblewrap/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libxslt, docbook_xsl, libcap }:
+{ lib, stdenv, fetchurl, libxslt, docbook_xsl, libcap }:
 
 stdenv.mkDerivation rec {
   pname = "bubblewrap";
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ libxslt docbook_xsl ];
   buildInputs = [ libcap ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Unprivileged sandboxing tool";
     homepage = "https://github.com/containers/bubblewrap";
     license = licenses.lgpl2Plus;
diff --git a/pkgs/tools/admin/certigo/default.nix b/pkgs/tools/admin/certigo/default.nix
index e363df04556..422c6da82d2 100644
--- a/pkgs/tools/admin/certigo/default.nix
+++ b/pkgs/tools/admin/certigo/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "certigo";
@@ -15,7 +15,7 @@ buildGoModule rec {
 
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A utility to examine and validate certificates in a variety of formats";
     homepage = "https://github.com/square/certigo";
     license = licenses.asl20;
diff --git a/pkgs/tools/admin/chamber/default.nix b/pkgs/tools/admin/chamber/default.nix
index fb21bda4150..4a26603a134 100644
--- a/pkgs/tools/admin/chamber/default.nix
+++ b/pkgs/tools/admin/chamber/default.nix
@@ -1,26 +1,25 @@
 { buildGoModule, lib, fetchFromGitHub }:
+
 buildGoModule rec {
   pname = "chamber";
-  version = "2.8.2";
+  version = "2.10.1";
 
   src = fetchFromGitHub {
     owner = "segmentio";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-7L9RaE4LvHRR6MUimze5QpbnfasWJdY4arfS/Usy2q0=";
+    sha256 = "sha256-nIIoU+iz2uOglNaqGIhQ2kUjpFOyOx+flXXwu02UG6Y=";
   };
 
-  vendorSha256 = null;
+  CGO_ENABLED = 0;
+
+  vendorSha256 = "sha256-XpLLolxWu9aMp1cyG4dUQk4YtknbIRMmBUdSeyY4PNk=";
 
-  # set the version. see: chamber's Makefile
-  buildFlagsArray = ''
-    -ldflags=
-    -X main.Version=v${version}
-  '';
+  buildFlagsArray = [ "-ldflags=-s -w -X main.Version=v${version}" ];
 
   meta = with lib; {
     description =
-      "Chamber is a tool for managing secrets by storing them in AWS SSM Parameter Store.";
+      "A tool for managing secrets by storing them in AWS SSM Parameter Store";
     homepage = "https://github.com/segmentio/chamber";
     license = licenses.mit;
     maintainers = with maintainers; [ kalekseev ];
diff --git a/pkgs/tools/admin/chkcrontab/default.nix b/pkgs/tools/admin/chkcrontab/default.nix
index 0740b0c1be6..d91894f0006 100644
--- a/pkgs/tools/admin/chkcrontab/default.nix
+++ b/pkgs/tools/admin/chkcrontab/default.nix
@@ -1,6 +1,6 @@
-{ python, stdenv }:
+{ python3, lib }:
 
-with python.pkgs;
+with python3.pkgs;
 
 buildPythonApplication rec {
   pname = "chkcrontab";
@@ -11,10 +11,10 @@ buildPythonApplication rec {
     sha256 = "0gmxavjkjkvjysgf9cf5fcpk589gb75n1mn20iki82wifi1pk1jn";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tool to detect crontab errors";
     license = licenses.asl20;
-    maintainers = with maintainers; [ ma27 ];
+    maintainers = with maintainers; [ SuperSandro2000 ];
     homepage = "https://github.com/lyda/chkcrontab";
   };
 }
diff --git a/pkgs/tools/admin/cjdns-tools/default.nix b/pkgs/tools/admin/cjdns-tools/default.nix
new file mode 100644
index 00000000000..2468d329548
--- /dev/null
+++ b/pkgs/tools/admin/cjdns-tools/default.nix
@@ -0,0 +1,46 @@
+{ stdenv
+, cjdns
+, nodejs
+, makeWrapper
+, lib
+}:
+
+stdenv.mkDerivation {
+  pname = "cjdns-tools";
+  version = cjdns.version;
+
+  src = cjdns.src;
+
+  buildInputs = [
+    nodejs
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildPhase = ''
+    patchShebangs tools
+
+    sed -e "s|'password': 'NONE'|'password': Fs.readFileSync('/etc/cjdns.keys').toString().split('\\\\n').map(v => v.split('=')).filter(v => v[0] === 'CJDNS_ADMIN_PASSWORD').map(v => v[1])[0]|g" \
+      -i tools/lib/cjdnsadmin/cjdnsadmin.js
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cat ${./wrapper.sh} | sed "s|@@out@@|$out|g" > $out/bin/cjdns-tools
+    chmod +x $out/bin/cjdns-tools
+
+    cp -r tools $out/tools
+    find $out/tools -maxdepth 1 -type f -exec chmod -v a+x {} \;
+    cp -r node_modules $out/node_modules
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/cjdelisle/cjdns";
+    description = "Tools for cjdns managment";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ mkg20001 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/admin/cjdns-tools/wrapper.sh b/pkgs/tools/admin/cjdns-tools/wrapper.sh
new file mode 100644
index 00000000000..2e8d85b1dd9
--- /dev/null
+++ b/pkgs/tools/admin/cjdns-tools/wrapper.sh
@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+
+export PATH="@@out@@/tools:$PATH"
+
+set -eo pipefail
+
+if ! cat /etc/cjdns.keys >/dev/null 2>&1; then
+  echo "ERROR: No permission to read /etc/cjdns.keys (use sudo)" >&2
+  exit 1
+fi
+
+if [[ -z $1 ]]; then
+  echo "Cjdns admin"
+
+  echo "Usage: $0 <command> <args..>"
+
+  echo
+  echo "Commands:" $(find @@out@@/tools -maxdepth 1 -type f | sed -r "s|.+/||g")
+
+  _sh=$(which sh)
+  PATH="@@out@@/tools" PS1="cjdns\$ " "$_sh"
+else
+  if [[ ! -e @@out@@/tools/$1 ]]; then
+    echo "ERROR: '$1' is not a valid tool" >&2
+    exit 2
+  else
+    "$@"
+  fi
+fi
diff --git a/pkgs/tools/admin/clair/default.nix b/pkgs/tools/admin/clair/default.nix
index 565196280ce..0298ca29a7c 100644
--- a/pkgs/tools/admin/clair/default.nix
+++ b/pkgs/tools/admin/clair/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "clair";
-  version = "2.1.4";
+  version = "4.1.1";
 
   src = fetchFromGitHub {
     owner = "quay";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1bvwh3ghxb3ynq8a07ka9i0rzaqg1aikxvqxmpjkwjvhwk63lwqd";
+    sha256 = "sha256-E04G3EJ0JrOVjtTd3nBHZehzuDrvt6t4hfFdGO92uuk=";
   };
 
-  vendorSha256 = "0x31n50vd8660z816as6kms5dkv87b0mhblccpkvd9cbvcv2n37a";
+  vendorSha256 = "sha256-xgP5IhB9eyKOIBlT5jKDJkUy8lz2UrWmGqqeDhqRawY=";
 
   doCheck = false;
 
@@ -25,6 +25,7 @@ buildGoModule rec {
   meta = with lib; {
     description = "Vulnerability Static Analysis for Containers";
     homepage = "https://github.com/quay/clair";
+    changelog = "https://github.com/quay/clair/blob/v${version}/CHANGELOG.md";
     license = licenses.asl20;
     maintainers = with maintainers; [ marsam ];
   };
diff --git a/pkgs/tools/admin/cli53/default.nix b/pkgs/tools/admin/cli53/default.nix
index 0ba4593f6a5..4978603c192 100644
--- a/pkgs/tools/admin/cli53/default.nix
+++ b/pkgs/tools/admin/cli53/default.nix
@@ -14,8 +14,6 @@ buildGoPackage {
     sha256 = "0bhczmzrgf7ypnhhzdrgnvg8cw8ch1x1d0cgajc5kklq9ixv9ygi";
   };
 
-  goDeps = ./deps.nix;
-
   meta = with lib; {
     description = "CLI tool for the Amazon Route 53 DNS service";
     homepage = "https://github.com/barnybug/cli53";
diff --git a/pkgs/tools/admin/cli53/deps.nix b/pkgs/tools/admin/cli53/deps.nix
deleted file mode 100644
index 4742bc00851..00000000000
--- a/pkgs/tools/admin/cli53/deps.nix
+++ /dev/null
@@ -1,93 +0,0 @@
-# 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/pkgs/tools/admin/credhub-cli/default.nix b/pkgs/tools/admin/credhub-cli/default.nix
new file mode 100644
index 00000000000..0c71850f849
--- /dev/null
+++ b/pkgs/tools/admin/credhub-cli/default.nix
@@ -0,0 +1,52 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+
+buildGoModule rec {
+  pname = "credhub-cli";
+  version = "2.9.0";
+
+  src = fetchFromGitHub {
+    owner = "cloudfoundry-incubator";
+    repo = "credhub-cli";
+    rev = version;
+    sha256 = "1j0i0b79ph2i52cj0qln8wvp6gwhl73akkn026h27vvmlw9sndc2";
+  };
+
+  patches = [
+    # Fix test with Go 1.15
+    (fetchpatch {
+        url = "https://github.com/cloudfoundry-incubator/credhub-cli/commit/4bd1accd513dc5e163e155c4b428878ca0bcedbc.patch";
+        sha256 = "180n3q3d19aw02q7xsn7dxck18jgndz5garj2mb056cwa7mmhw0j";
+    })
+  ];
+
+  # these tests require network access that we're not going to give them
+  postPatch = ''
+    rm commands/api_test.go
+    rm commands/socks5_test.go
+  '';
+  __darwinAllowLocalNetworking = true;
+
+  vendorSha256 = null;
+
+  buildFlagsArray = [
+    "-ldflags="
+    "-s"
+    "-w"
+    "-X code.cloudfoundry.org/credhub-cli/version.Version=${version}"
+  ];
+
+  postInstall = ''
+    ln -s $out/bin/credhub-cli $out/bin/credhub
+  '';
+
+  preCheck = ''
+    export HOME=$TMPDIR
+  '';
+
+  meta = with lib; {
+    description = "Provides a command line interface to interact with CredHub servers";
+    homepage = "https://github.com/cloudfoundry-incubator/credhub-cli";
+    maintainers = with maintainers; [ ris ];
+    license = licenses.asl20;
+  };
+}
diff --git a/pkgs/tools/admin/daemontools/default.nix b/pkgs/tools/admin/daemontools/default.nix
index 660563d9757..6fafc1c253a 100644
--- a/pkgs/tools/admin/daemontools/default.nix
+++ b/pkgs/tools/admin/daemontools/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, bash, glibc, stdenv }:
+{ fetchurl, bash, glibc, lib, stdenv }:
 
 stdenv.mkDerivation rec {
   name = "daemontools-0.76";
@@ -34,11 +34,11 @@ stdenv.mkDerivation rec {
   '';
 
   meta = {
-    license = stdenv.lib.licenses.publicDomain;
+    license = lib.licenses.publicDomain;
     homepage = "https://cr.yp.to/daemontools.html";
-    description = "A collection of tools for managing UNIX services.";
+    description = "A collection of tools for managing UNIX services";
 
-    maintainers = with stdenv.lib.maintainers; [ kevincox ];
-    platforms = stdenv.lib.platforms.unix;
+    maintainers = with lib.maintainers; [ kevincox ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/admin/dehydrated/default.nix b/pkgs/tools/admin/dehydrated/default.nix
index 6cc69c2290d..eda7b7ace5f 100644
--- a/pkgs/tools/admin/dehydrated/default.nix
+++ b/pkgs/tools/admin/dehydrated/default.nix
@@ -1,13 +1,13 @@
-{ stdenv, coreutils, curl, diffutils, gawk, gnugrep, gnused, openssl, makeWrapper, fetchFromGitHub, installShellFiles }:
+{ lib, stdenv, coreutils, curl, diffutils, gawk, gnugrep, gnused, openssl, makeWrapper, fetchFromGitHub, installShellFiles }:
 stdenv.mkDerivation rec {
   pname = "dehydrated";
-  version = "0.6.5";
+  version = "0.7.0";
 
   src = fetchFromGitHub {
     owner = "lukas2511";
     repo = "dehydrated";
     rev = "v${version}";
-    sha256 = "14k7ykry16zp09i0bqb5pqaclvnjcb6p3x8knm9v5q0bdvlplkjv";
+    sha256 = "09jhmkjvnj98zbf92qwdr5rr7pc6v63xzyk2fbi177r7szb2yg09";
   };
 
   nativeBuildInputs = [ makeWrapper installShellFiles ];
@@ -22,10 +22,10 @@ stdenv.mkDerivation rec {
 
     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 ]}"
+    wrapProgram "$out/bin/dehydrated" --prefix PATH : "${lib.makeBinPath [ openssl coreutils gnused gnugrep diffutils curl gawk ]}"
     '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit (src.meta) homepage;
     description = "Letsencrypt/acme client implemented as a shell-script";
     license = licenses.mit;
diff --git a/pkgs/tools/admin/docker-credential-gcr/default.nix b/pkgs/tools/admin/docker-credential-gcr/default.nix
index d45a57c3221..ee2efb206af 100644
--- a/pkgs/tools/admin/docker-credential-gcr/default.nix
+++ b/pkgs/tools/admin/docker-credential-gcr/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "docker-credential-gcr";
-  version = "2.0.2";
+  version = "2.0.5";
 
   goPackagePath = "github.com/GoogleCloudPlatform/docker-credential-gcr";
 
@@ -10,10 +10,10 @@ buildGoPackage rec {
     owner = "GoogleCloudPlatform";
     repo = "docker-credential-gcr";
     rev = "v${version}";
-    sha256 = "0m7jx669yf27z2g9gw9vwncpwldrcb3ldlf1xhvbwbijnc2jk866";
+    sha256 = "sha256-WrcGTXy5SMWDHJWddXUuvUvEWjOsJcoB1zBg02p5ggY=";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A Docker credential helper for GCR (https://gcr.io) users";
     longDescription = ''
       docker-credential-gcr is Google Container Registry's Docker credential
diff --git a/pkgs/tools/admin/docker-credential-helpers/default.nix b/pkgs/tools/admin/docker-credential-helpers/default.nix
index 38762b6fd29..0d46eff98b5 100644
--- a/pkgs/tools/admin/docker-credential-helpers/default.nix
+++ b/pkgs/tools/admin/docker-credential-helpers/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub, pkg-config, libsecret }:
+{ lib, stdenv, buildGoPackage, fetchFromGitHub, pkg-config, libsecret }:
 
 buildGoPackage rec {
   pname = "docker-credential-helpers";
@@ -13,9 +13,9 @@ buildGoPackage rec {
     sha256 = "0xgmwjva3j1s0cqkbajbamj13bgzh5jkf2ir54m9a7w8gjnsh6dx";
   };
 
-  nativeBuildInputs = stdenv.lib.optionals stdenv.isLinux [ pkg-config ];
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config ];
 
-  buildInputs = stdenv.lib.optionals stdenv.isLinux [ libsecret ];
+  buildInputs = lib.optionals stdenv.isLinux [ libsecret ];
 
   buildPhase =
     if stdenv.isDarwin
@@ -39,7 +39,7 @@ buildGoPackage rec {
       install -Dm755 -t $out/bin bin/docker-credential-secretservice
     '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/admin/eksctl/default.nix b/pkgs/tools/admin/eksctl/default.nix
index 7c240aa4131..aeeb6b2ca42 100644
--- a/pkgs/tools/admin/eksctl/default.nix
+++ b/pkgs/tools/admin/eksctl/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "eksctl";
-  version = "0.26.0";
+  version = "0.58.0";
 
   src = fetchFromGitHub {
     owner = "weaveworks";
     repo = pname;
     rev = version;
-    sha256 = "1av5w32ia68j2xrw4m16mzm9jn6xlap93kwi8iqw0s6wgihzadds";
+    sha256 = "sha256-g7Lfx8Q2yEFk6/3r8+MUl8jehbRfVGfrZb1+WgA6TYA=";
   };
 
-  vendorSha256 = "13sc4yrzgx2sm98whibfy2kjia3yy9cdvibvhbvg2lz2spprjb9v";
+  vendorSha256 = "sha256-mapok/c3uh7xmLZnN5S9zavgxSOfytqtqxBScv4Ao8w=";
 
   doCheck = false;
 
@@ -36,6 +36,6 @@ buildGoModule rec {
     description = "A CLI for Amazon EKS";
     homepage = "https://github.com/weaveworks/eksctl";
     license = licenses.asl20;
-    maintainers = with maintainers; [ xrelkd ];
+    maintainers = with maintainers; [ xrelkd Chili-Man ];
   };
 }
diff --git a/pkgs/tools/admin/exoscale-cli/default.nix b/pkgs/tools/admin/exoscale-cli/default.nix
index bdde2b8f24c..4fb11de26c3 100644
--- a/pkgs/tools/admin/exoscale-cli/default.nix
+++ b/pkgs/tools/admin/exoscale-cli/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "exoscale-cli";
-  version = "1.16.1";
+  version = "1.37.0";
 
   src = fetchFromGitHub {
     owner  = "exoscale";
     repo   = "cli";
     rev    = "v${version}";
-    sha256 = "0616nvqrcvn2xdmnkr5sjf1r5qg30b24ry87hhiqi4kz9a92qdx5";
+    sha256 = "sha256-ETj14xwCQJv3xNYXFY/Z0FsxjxLrlpcVkap2sRsLzVU=";
   };
 
   goPackagePath = "github.com/exoscale/cli";
@@ -27,7 +27,7 @@ buildGoPackage rec {
   meta = {
     description = "Command-line tool for everything at Exoscale: compute, storage, dns";
     homepage    = "https://github.com/exoscale/cli";
-    license     = stdenv.lib.licenses.asl20;
-    maintainers = with stdenv.lib.maintainers; [ dramaturg ];
+    license     = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ dramaturg ];
   };
 }
diff --git a/pkgs/tools/admin/fastlane/Gemfile.lock b/pkgs/tools/admin/fastlane/Gemfile.lock
index 1bfce860653..19305c7d137 100644
--- a/pkgs/tools/admin/fastlane/Gemfile.lock
+++ b/pkgs/tools/admin/fastlane/Gemfile.lock
@@ -1,75 +1,77 @@
 GEM
   remote: https://rubygems.org/
   specs:
-    CFPropertyList (3.0.2)
+    CFPropertyList (3.0.3)
     addressable (2.7.0)
       public_suffix (>= 2.0.2, < 5.0)
     atomos (0.1.3)
     aws-eventstream (1.1.0)
-    aws-partitions (1.320.0)
-    aws-sdk-core (3.96.1)
+    aws-partitions (1.414.0)
+    aws-sdk-core (3.110.0)
       aws-eventstream (~> 1, >= 1.0.2)
       aws-partitions (~> 1, >= 1.239.0)
       aws-sigv4 (~> 1.1)
       jmespath (~> 1.0)
-    aws-sdk-kms (1.31.0)
-      aws-sdk-core (~> 3, >= 3.71.0)
+    aws-sdk-kms (1.40.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
       aws-sigv4 (~> 1.1)
-    aws-sdk-s3 (1.66.0)
-      aws-sdk-core (~> 3, >= 3.96.1)
+    aws-sdk-s3 (1.87.0)
+      aws-sdk-core (~> 3, >= 3.109.0)
       aws-sdk-kms (~> 1)
       aws-sigv4 (~> 1.1)
-    aws-sigv4 (1.1.3)
-      aws-eventstream (~> 1.0, >= 1.0.2)
-    babosa (1.0.3)
+    aws-sigv4 (1.2.2)
+      aws-eventstream (~> 1, >= 1.0.2)
+    babosa (1.0.4)
     claide (1.0.3)
     colored (1.2)
     colored2 (3.1.2)
     commander-fastlane (4.4.6)
       highline (~> 1.7.2)
-    declarative (0.0.10)
+    declarative (0.0.20)
     declarative-option (0.1.0)
-    digest-crc (0.5.1)
+    digest-crc (0.6.3)
+      rake (>= 12.0.0, < 14.0.0)
     domain_name (0.5.20190701)
       unf (>= 0.0.5, < 1.0.0)
-    dotenv (2.7.5)
-    emoji_regex (1.0.1)
-    excon (0.73.0)
-    faraday (1.0.1)
+    dotenv (2.7.6)
+    emoji_regex (3.2.1)
+    excon (0.78.1)
+    faraday (1.3.0)
+      faraday-net_http (~> 1.0)
       multipart-post (>= 1.2, < 3)
-    faraday-cookie_jar (0.0.6)
-      faraday (>= 0.7.4)
+      ruby2_keywords
+    faraday-cookie_jar (0.0.7)
+      faraday (>= 0.8.0)
       http-cookie (~> 1.0.0)
+    faraday-net_http (1.0.0)
     faraday_middleware (1.0.0)
       faraday (~> 1.0)
-    fastimage (2.1.7)
-    fastlane (2.148.1)
+    fastimage (2.2.1)
+    fastlane (2.171.0)
       CFPropertyList (>= 2.3, < 4.0.0)
       addressable (>= 2.3, < 3.0.0)
       aws-sdk-s3 (~> 1.0)
-      babosa (>= 1.0.2, < 2.0.0)
+      babosa (>= 1.0.3, < 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)
+      emoji_regex (>= 0.1, < 4.0)
       excon (>= 0.71.0, < 1.0.0)
-      faraday (>= 0.17, < 2.0)
+      faraday (~> 1.0)
       faraday-cookie_jar (~> 0.0.6)
-      faraday_middleware (>= 0.13.1, < 2.0)
+      faraday_middleware (~> 1.0)
       fastimage (>= 2.1.0, < 3.0.0)
       gh_inspector (>= 1.1.2, < 2.0.0)
       google-api-client (>= 0.37.0, < 0.39.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)
+      jwt (>= 2.1.0, < 3)
       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.3.0, < 2.0.0)
+      rubyzip (>= 2.0.0, < 3.0.0)
       security (= 0.1.3)
       simctl (~> 1.6.3)
       slack-notifier (>= 2.0.0, < 3.0.0)
@@ -93,17 +95,17 @@ GEM
     google-cloud-core (1.5.0)
       google-cloud-env (~> 1.0)
       google-cloud-errors (~> 1.0)
-    google-cloud-env (1.3.1)
+    google-cloud-env (1.4.0)
       faraday (>= 0.17.3, < 2.0)
-    google-cloud-errors (1.0.0)
-    google-cloud-storage (1.26.1)
+    google-cloud-errors (1.0.1)
+    google-cloud-storage (1.29.2)
       addressable (~> 2.5)
       digest-crc (~> 0.4)
       google-api-client (~> 0.33)
       google-cloud-core (~> 1.2)
       googleauth (~> 0.9)
       mini_mime (~> 1.0)
-    googleauth (0.12.0)
+    googleauth (0.14.0)
       faraday (>= 0.17.3, < 2.0)
       jwt (>= 1.4, < 3.0)
       memoist (~> 0.16)
@@ -115,26 +117,27 @@ GEM
       domain_name (~> 0.5)
     httpclient (2.8.3)
     jmespath (1.4.0)
-    json (2.3.0)
-    jwt (2.1.0)
+    json (2.5.1)
+    jwt (2.2.2)
     memoist (0.16.2)
-    mini_magick (4.10.1)
+    mini_magick (4.11.0)
     mini_mime (1.0.2)
-    multi_json (1.14.1)
-    multi_xml (0.6.0)
+    multi_json (1.15.0)
     multipart-post (2.0.0)
-    nanaimo (0.2.6)
+    nanaimo (0.3.0)
     naturally (2.2.0)
-    os (1.1.0)
-    plist (3.5.0)
-    public_suffix (2.0.5)
+    os (1.1.1)
+    plist (3.6.0)
+    public_suffix (4.0.6)
+    rake (13.0.3)
     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.3.0)
+    ruby2_keywords (0.0.2)
+    rubyzip (2.3.0)
     security (0.1.3)
     signet (0.14.0)
       addressable (~> 2.3)
@@ -149,7 +152,7 @@ GEM
     terminal-table (1.8.0)
       unicode-display_width (~> 1.1, >= 1.1.1)
     tty-cursor (0.7.1)
-    tty-screen (0.7.1)
+    tty-screen (0.8.1)
     tty-spinner (0.9.3)
       tty-cursor (~> 0.7)
     uber (0.1.0)
@@ -158,15 +161,15 @@ GEM
     unf_ext (0.0.7.7)
     unicode-display_width (1.7.0)
     word_wrap (1.0.0)
-    xcodeproj (1.16.0)
+    xcodeproj (1.19.0)
       CFPropertyList (>= 2.3.3, < 4.0)
       atomos (~> 0.1.3)
       claide (>= 1.0.2, < 2.0)
       colored2 (~> 3.1)
-      nanaimo (~> 0.2.6)
+      nanaimo (~> 0.3.0)
     xcpretty (0.3.0)
       rouge (~> 2.0.7)
-    xcpretty-travis-formatter (1.0.0)
+    xcpretty-travis-formatter (1.0.1)
       xcpretty (~> 0.2, >= 0.0.7)
 
 PLATFORMS
@@ -176,4 +179,4 @@ DEPENDENCIES
   fastlane
 
 BUNDLED WITH
-   2.1.4
\ No newline at end of file
+   2.1.4
diff --git a/pkgs/tools/admin/fastlane/default.nix b/pkgs/tools/admin/fastlane/default.nix
index 1093ab9df02..dc8dd1fd7a6 100644
--- a/pkgs/tools/admin/fastlane/default.nix
+++ b/pkgs/tools/admin/fastlane/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, bundlerEnv, ruby, bundlerUpdateScript, makeWrapper }:
+{ lib, stdenv, bundlerEnv, ruby, bundlerUpdateScript, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "fastlane";
@@ -6,7 +6,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ makeWrapper ];
 
-  phases = [ "installPhase" ];
+  dontUnpack = true;
 
   installPhase = let
     env = bundlerEnv {
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
 
   passthru.updateScript = bundlerUpdateScript "fastlane";
 
-  meta = with stdenv.lib; {
+  meta = with 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";
diff --git a/pkgs/tools/admin/fastlane/gemset.nix b/pkgs/tools/admin/fastlane/gemset.nix
index e289bc6f17d..e747537b241 100644
--- a/pkgs/tools/admin/fastlane/gemset.nix
+++ b/pkgs/tools/admin/fastlane/gemset.nix
@@ -35,10 +35,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "011ch85shkb3i3w16jymjx19dmxcgb6jrl6dzwqr4bx16ikdyclc";
+      sha256 = "0dy7y0zgc53cz1qiifx74glixkjd96nk8p6qrq1n5cdylnlpng8k";
       type = "gem";
     };
-    version = "1.320.0";
+    version = "1.414.0";
   };
   aws-sdk-core = {
     dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
@@ -46,10 +46,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0jdnzynjrpp2jyg8vrbfbaad16k8ni1520xah1z2ckl5779x9fi6";
+      sha256 = "1lrxwi9im4bpdcga6w7bmam7hywy5c2yss09377lyqm89whb4kl4";
       type = "gem";
     };
-    version = "3.96.1";
+    version = "3.110.0";
   };
   aws-sdk-kms = {
     dependencies = ["aws-sdk-core" "aws-sigv4"];
@@ -57,10 +57,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1czxr6yi8p9gma4dwgygp1jn0i289hwa2vw69kzfscgbn118c3mm";
+      sha256 = "1pk76w1w9z4dh1sic08jp1j2rbbmnrfci53a6pkxq0g3y4kkx2g4";
       type = "gem";
     };
-    version = "1.31.0";
+    version = "1.40.0";
   };
   aws-sdk-s3 = {
     dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
@@ -68,10 +68,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1x1d1azxwanvm0d7qppw41x5nx2zv0bcz41yk9vqi5lvr7apaq13";
+      sha256 = "0capqhvm08ngq74n33ym0khixkdj342jpikssw57avdmd8g6kaq7";
       type = "gem";
     };
-    version = "1.66.0";
+    version = "1.87.0";
   };
   aws-sigv4 = {
     dependencies = ["aws-eventstream"];
@@ -79,30 +79,30 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0kysxyw1zkvggbmcj4xnscdh15kxli8mx07hv447h74g9x02drsd";
+      sha256 = "1ll9382c1x2hp750cilh01h1cycgyhdr4cmmgx23k94hyyb8chv5";
       type = "gem";
     };
-    version = "1.1.3";
+    version = "1.2.2";
   };
   babosa = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "10nn9bw63i4awpzn5vrx6kmpx1sg7z8r3fhw9r8bvg9pz2wh489g";
+      sha256 = "16dwqn33kmxkqkv51cwiikdkbrdjfsymlnc0rgbjwilmym8a9phq";
       type = "gem";
     };
-    version = "1.0.3";
+    version = "1.0.4";
   };
   CFPropertyList = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1825ll26p28swjiw8n3x2pnh5ygsmg83spf82fnzcjn2p87vc5lf";
+      sha256 = "0ia09r8bj3bjhcfiyr3vlk9zx7vahfypbs2lyrxix9x1jx3lfzq4";
       type = "gem";
     };
-    version = "3.0.2";
+    version = "3.0.3";
   };
   claide = {
     groups = ["default"];
@@ -150,10 +150,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0642xvwzzbgi3kp1bg467wma4g3xqrrn0sk369hjam7w579gnv5j";
+      sha256 = "1yczgnqrbls7shrg63y88g7wand2yp9h6sf56c9bdcksn5nds8c0";
       type = "gem";
     };
-    version = "0.0.10";
+    version = "0.0.20";
   };
   declarative-option = {
     groups = ["default"];
@@ -166,14 +166,15 @@
     version = "0.1.0";
   };
   digest-crc = {
+    dependencies = ["rake"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "10f10yhz7rn31pq859jx47dypsfsxcmx8h482xn7aijfr6vn8yv9";
+      sha256 = "118d5p02kdw6a5pi8af12dxma7q3b77zz5q5xjjf5kgp8qh1930a";
       type = "gem";
     };
-    version = "0.5.1";
+    version = "0.6.3";
   };
   domain_name = {
     dependencies = ["unf"];
@@ -191,41 +192,41 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "17hkd62ig9b0czv192kqdfq7gw0a8hgq07yclri6myc8y5lmfin5";
+      sha256 = "0iym172c5337sm1x2ykc2i3f961vj3wdclbyg1x6sxs3irgfsl94";
       type = "gem";
     };
-    version = "2.7.5";
+    version = "2.7.6";
   };
   emoji_regex = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1jfsv8ik2h1msqf3if1f121pnx3lccp8fqnka9na309mnw3bq532";
+      sha256 = "0qbzlracxw4xwyvrgr0qcl1alk4ijk6pv53ni6f43csi649y3n3s";
       type = "gem";
     };
-    version = "1.0.1";
+    version = "3.2.1";
   };
   excon = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1zvphy60fwycl6z2h7dpsy9lgyfrh27fj16987p7bl1n4xlqkvmw";
+      sha256 = "16ij8617v3js03yj1zd32mmrf7kpi9l96bid5mpqk30c4mzai55r";
       type = "gem";
     };
-    version = "0.73.0";
+    version = "0.78.1";
   };
   faraday = {
-    dependencies = ["multipart-post"];
+    dependencies = ["faraday-net_http" "multipart-post" "ruby2_keywords"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0wwks9652xwgjm7yszcq5xr960pjypc07ivwzbjzpvy9zh2fw6iq";
+      sha256 = "1hmssd8pj4n7yq4kz834ylkla8ryyvhaap6q9nzymp93m1xq21kz";
       type = "gem";
     };
-    version = "1.0.1";
+    version = "1.3.0";
   };
   faraday-cookie_jar = {
     dependencies = ["faraday" "http-cookie"];
@@ -233,10 +234,20 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1di4gx6446a6zdkrpj679m5k515i53wvb4yxcsqvy8d8zacxiiv6";
+      sha256 = "00hligx26w9wdnpgsrf0qdnqld4rdccy8ym6027h5m735mpvxjzk";
       type = "gem";
     };
-    version = "0.0.6";
+    version = "0.0.7";
+  };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kk5d1c5nxbmwawl5gcznwiscjz24nz3vdhxrlzvj7748c1qqr6d";
+      type = "gem";
+    };
+    version = "1.0.0";
   };
   faraday_middleware = {
     dependencies = ["faraday"];
@@ -254,21 +265,21 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "06lgsy1zdkhhgd9w1c0nb7v9d38mljwz13n6gi3acbzkhz1sf642";
+      sha256 = "1vqp53s9vgd28f4l17q0vs7xv32y64af0ny3wb1fgg4i534rzg6j";
       type = "gem";
     };
-    version = "2.1.7";
+    version = "2.2.1";
   };
   fastlane = {
-    dependencies = ["CFPropertyList" "addressable" "aws-sdk-s3" "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"];
+    dependencies = ["CFPropertyList" "addressable" "aws-sdk-s3" "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" "multipart-post" "plist" "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 = "1jss8cpcngwrmpck6ncijksrfcj5csgljwn2rmqv9gx1azj4mlgv";
+      sha256 = "1h921zfck75f5b50z9jxnhanf8q9d58n122ffnpd1980q5w912rp";
       type = "gem";
     };
-    version = "2.148.1";
+    version = "2.171.0";
   };
   gh_inspector = {
     groups = ["default"];
@@ -308,20 +319,20 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0rbascsddvwsq827fj4m2daqh0l3ghmdlbbhy48clgaysapaz685";
+      sha256 = "0bjgxyvagy6hjj8yg7fqq24rwdjxb6hx7fdd1bmn4mwd846lci2i";
       type = "gem";
     };
-    version = "1.3.1";
+    version = "1.4.0";
   };
   google-cloud-errors = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0nl08lhgjvz3g7nsarn9nnsck0k3dg8mwg4awcnklnzpvs62b4ih";
+      sha256 = "1hvs1x39g77hbdqjxmzcl6gq8160pv3kskvzbbch0ww1np6qwm67";
       type = "gem";
     };
-    version = "1.0.0";
+    version = "1.0.1";
   };
   google-cloud-storage = {
     dependencies = ["addressable" "digest-crc" "google-api-client" "google-cloud-core" "googleauth" "mini_mime"];
@@ -329,10 +340,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1wdnd5wisbrlivapdr7bcg8v59hayqz3q5qiqs0628g371lwx30k";
+      sha256 = "0dy5f00jsnd6id7bkc03pl2d6c78rl3lkysdn0f90padys5id1k5";
       type = "gem";
     };
-    version = "1.26.1";
+    version = "1.29.2";
   };
   googleauth = {
     dependencies = ["faraday" "jwt" "memoist" "multi_json" "os" "signet"];
@@ -340,10 +351,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0rsk471ld98pxhvzig3lnw9i13454c9nschvzxvq6vjqnn9ip0yh";
+      sha256 = "0cm60nbmwzf83fzy06f3iyn5a6sw91siw8x9bdvpwwmjsmivana6";
       type = "gem";
     };
-    version = "0.12.0";
+    version = "0.14.0";
   };
   highline = {
     groups = ["default"];
@@ -391,20 +402,20 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0nrmw2r4nfxlfgprfgki3hjifgrcrs3l5zvm3ca3gb4743yr25mn";
+      sha256 = "0lrirj0gw420kw71bjjlqkqhqbrplla61gbv1jzgsz6bv90qr3ci";
       type = "gem";
     };
-    version = "2.3.0";
+    version = "2.5.1";
   };
   jwt = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1w0kaqrbl71cq9sbnixc20x5lqah3hs2i93xmhlfdg2y3by7yzky";
+      sha256 = "14ynyq1q483spj20ffl4xayfqx1a8qr761mqjfxczf8lwlap392n";
       type = "gem";
     };
-    version = "2.1.0";
+    version = "2.2.2";
   };
   memoist = {
     groups = ["default"];
@@ -421,10 +432,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0lpq12z70n10c1qshcddd5nib2pkcbkwzvmiqqzj60l01k3x4fg9";
+      sha256 = "1aj604x11d9pksbljh0l38f70b558rhdgji1s9i763hiagvvx2hs";
       type = "gem";
     };
-    version = "4.10.1";
+    version = "4.11.0";
   };
   mini_mime = {
     groups = ["default"];
@@ -441,20 +452,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0xy54mjf7xg41l8qrg1bqri75agdqmxap9z466fjismc1rn2jwfr";
-      type = "gem";
-    };
-    version = "1.14.1";
-  };
-  multi_xml = {
-    groups = ["default"];
-    platforms = [];
-    source = {
-      remotes = ["https://rubygems.org"];
-      sha256 = "0lmd4f401mvravi1i1yq7b2qjjli0yq7dfc4p1nj5nwajp7r6hyj";
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
       type = "gem";
     };
-    version = "0.6.0";
+    version = "1.15.0";
   };
   multipart-post = {
     groups = ["default"];
@@ -471,10 +472,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0ajfyaqjw3dzykk612yw8sm21savfqy292hgps8h8l4lvxww1lz6";
+      sha256 = "0xi36h3f7nm8bc2k0b6svpda1lyank2gf872lxjbhw3h95hdrbma";
       type = "gem";
     };
-    version = "0.2.6";
+    version = "0.3.0";
   };
   naturally = {
     groups = ["default"];
@@ -491,30 +492,40 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0xnynckvrn9ailkmkrmkldnpv8hmmbdwxr7c7iz27cl1cpcdd49n";
+      sha256 = "12fli64wz5j9868gpzv5wqsingk1jk457qyqksv9ksmq9b0zpc9x";
       type = "gem";
     };
-    version = "1.1.0";
+    version = "1.1.1";
   };
   plist = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0ra0910xxbhfsmdi0ig36pr3q0khdqzwb5da3wg7y3n8d1sh9ffp";
+      sha256 = "1whhr897z6z6av85x2cipyjk46bwh6s4wx6nbrcd3iifnzvbqs7l";
       type = "gem";
     };
-    version = "3.5.0";
+    version = "3.6.0";
   };
   public_suffix = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "040jf98jpp6w140ghkhw2hvc1qx41zvywx5gj7r2ylr1148qnj7q";
+      sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
+      type = "gem";
+    };
+    version = "4.0.6";
+  };
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iik52mf9ky4cgs38fp2m8r6skdkq1yz23vh18lk95fhbcxb6a67";
       type = "gem";
     };
-    version = "2.0.5";
+    version = "13.0.3";
   };
   representable = {
     dependencies = ["declarative" "declarative-option" "uber"];
@@ -547,15 +558,25 @@
     };
     version = "2.0.7";
   };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17pcc0wgvh3ikrkr7bm3nx0qhyiqwidd13ij0fa50k7gsbnr2p0l";
+      type = "gem";
+    };
+    version = "0.0.2";
+  };
   rubyzip = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1qxc2zxwwipm6kviiar4gfhcakpx1jdcs89v6lvzivn5hq1xk78l";
+      sha256 = "0590m2pr9i209pp5z4mx0nb1961ishdiqb28995hw1nln1d1b5ji";
       type = "gem";
     };
-    version = "1.3.0";
+    version = "2.3.0";
   };
   security = {
     groups = ["default"];
@@ -635,10 +656,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1jwgr2i3wilng3mx851xczmkzllbirmsmr42ik4amqyyvry1yzyf";
+      sha256 = "18jr6s1cg8yb26wzkqa6874q0z93rq0y5aw092kdqazk71y6a235";
       type = "gem";
     };
-    version = "0.7.1";
+    version = "0.8.1";
   };
   tty-spinner = {
     dependencies = ["tty-cursor"];
@@ -708,10 +729,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1bkk8y6lzd86w9yx72hd1nil3fkk5f0v3il9vm554gzpl6dhc2bi";
+      sha256 = "1411j6sfnz0cx4fiw52f0yqx4bgcn8cmpgi3i5rwmmahayyjz2fn";
       type = "gem";
     };
-    version = "1.16.0";
+    version = "1.19.0";
   };
   xcpretty = {
     dependencies = ["rouge"];
@@ -730,9 +751,9 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "15b5c0lxz2blmichfdlabzlbyw5nlh1ci898pxwb661m9bahz3ml";
+      sha256 = "14rg4f70klrs910n7rsgfa4dn8s2qyny55194ax2qyyb2wpk7k5a";
       type = "gem";
     };
-    version = "1.0.0";
+    version = "1.0.1";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/admin/fbvnc/default.nix b/pkgs/tools/admin/fbvnc/default.nix
index ec32b5f0a26..2bd46f27ab0 100644
--- a/pkgs/tools/admin/fbvnc/default.nix
+++ b/pkgs/tools/admin/fbvnc/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchFromGitHub}:
+{lib, stdenv, fetchFromGitHub}:
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "fbvnc";
@@ -22,9 +22,9 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Framebuffer VNC client";
-    license = stdenv.lib.licenses.bsd3;
-    maintainers = [stdenv.lib.maintainers.raskin];
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.bsd3;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
     homepage = "https://github.com/zohead/fbvnc/";
   };
 }
diff --git a/pkgs/tools/admin/fioctl/default.nix b/pkgs/tools/admin/fioctl/default.nix
new file mode 100644
index 00000000000..068d87a3bfd
--- /dev/null
+++ b/pkgs/tools/admin/fioctl/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "fioctl";
+  version = "0.18";
+
+  src = fetchFromGitHub {
+    owner = "foundriesio";
+    repo = "fioctl";
+    rev = "v${version}";
+    sha256 = "sha256-uqJ08ftaU39gmhDtl+noVtGscu6utcl42rXz4XaGtWc=";
+  };
+
+  vendorSha256 = "sha256-6a+JMj3hh6GPuqnLknv7/uR8vsUsOgsS+pdxHoMqH5w=";
+
+  runVend = true;
+
+  buildFlagsArray = ''
+    -ldflags=-s -w -X github.com/foundriesio/fioctl/subcommands/version.Commit=${src.rev}
+  '';
+
+  meta = with lib; {
+    description = "A simple CLI to manage your Foundries Factory ";
+    homepage = "https://github.com/foundriesio/fioctl";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nixinator matthewcroughan ];
+  };
+}
diff --git a/pkgs/tools/admin/gixy/default.nix b/pkgs/tools/admin/gixy/default.nix
index 118457d4080..65ca85b463e 100644
--- a/pkgs/tools/admin/gixy/default.nix
+++ b/pkgs/tools/admin/gixy/default.nix
@@ -1,11 +1,11 @@
-{ lib, fetchFromGitHub, python }:
+{ lib, fetchFromGitHub, python3 }:
 
-python.pkgs.buildPythonApplication rec {
+python3.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);
+  disabled = with python3.pkgs; !(pythonAtLeast "3.5" || isPy27);
 
   # fetching from GitHub because the PyPi source is missing the tests
   src = fetchFromGitHub {
@@ -19,9 +19,9 @@ python.pkgs.buildPythonApplication rec {
     sed -ie '/argparse/d' setup.py
   '';
 
-  propagatedBuildInputs = with python.pkgs; [
+  propagatedBuildInputs = with python3.pkgs; [
     cached-property
-    ConfigArgParse
+    configargparse
     pyparsing
     jinja2
     nose
@@ -38,6 +38,6 @@ python.pkgs.buildPythonApplication rec {
     homepage = "https://github.com/yandex/gixy";
     license = licenses.mpl20;
     maintainers = [ maintainers.willibutz ];
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/admin/google-cloud-sdk/cloud_sql_proxy_path.patch b/pkgs/tools/admin/google-cloud-sdk/cloud_sql_proxy_path.patch
new file mode 100644
index 00000000000..aec4be2ec19
--- /dev/null
+++ b/pkgs/tools/admin/google-cloud-sdk/cloud_sql_proxy_path.patch
@@ -0,0 +1,36 @@
+diff --git a/lib/googlecloudsdk/api_lib/sql/instances.py b/lib/googlecloudsdk/api_lib/sql/instances.py
+index 0d88ffe..814a436 100644
+--- a/lib/googlecloudsdk/api_lib/sql/instances.py
++++ b/lib/googlecloudsdk/api_lib/sql/instances.py
+@@ -86,18 +86,19 @@ def GetRegionFromZone(gce_zone):
+ def _GetCloudSqlProxyPath():
+   """Determines the path to the cloud_sql_proxy binary."""
+   sdk_bin_path = config.Paths().sdk_bin_path
+-  if not sdk_bin_path:
+-    # Check if cloud_sql_proxy is located on the PATH.
+-    proxy_path = file_utils.FindExecutableOnPath('cloud_sql_proxy')
+-    if proxy_path:
+-      log.debug(
+-          'Using cloud_sql_proxy found at [{path}]'.format(path=proxy_path))
+-      return proxy_path
+-    else:
+-      raise exceptions.ToolException(
+-          'A Cloud SQL Proxy SDK root could not be found. Please check your '
+-          'installation.')
+-  return os.path.join(sdk_bin_path, 'cloud_sql_proxy')
++  if sdk_bin_path and os.path.isfile(os.path.join(sdk_bin_path, 'cloud_sql_proxy')):
++      return os.path.join(sdk_bin_path, 'cloud_sql_proxy')
++
++  # Check if cloud_sql_proxy is located on the PATH.
++  proxy_path = file_utils.FindExecutableOnPath('cloud_sql_proxy')
++  if proxy_path:
++    log.debug(
++        'Using cloud_sql_proxy found at [{path}]'.format(path=proxy_path))
++    return proxy_path
++
++  raise exceptions.ToolException(
++      'A Cloud SQL Proxy SDK root could not be found. Please check your '
++      'installation.')
+ 
+ 
+ def _RaiseProxyError(error_msg=None):
diff --git a/pkgs/tools/admin/google-cloud-sdk/default.nix b/pkgs/tools/admin/google-cloud-sdk/default.nix
index 5a51ace3b98..f461a5c30ed 100644
--- a/pkgs/tools/admin/google-cloud-sdk/default.nix
+++ b/pkgs/tools/admin/google-cloud-sdk/default.nix
@@ -21,31 +21,42 @@ let
   sources = name: system: {
     x86_64-darwin = {
       url = "${baseUrl}/${name}-darwin-x86_64.tar.gz";
-      sha256 = "1l2r9pgyzih7xgrr2ygm0mcl97kyp1wfvybwhbn1i0kbb72nagk1";
+      sha256 = "1h02pywzjn2d4p07xic1936w5qjbaz33qny8afrgzvgbqnqx7dvs";
+    };
+
+    aarch64-darwin = {
+      url = "${baseUrl}/${name}-darwin-arm.tar.gz";
+      sha256 = "0qrmrxzphslhq3xf01zh91v7fvqn0z4hv8rpd15qwq9q84d2c3gr";
     };
 
     x86_64-linux = {
       url = "${baseUrl}/${name}-linux-x86_64.tar.gz";
-      sha256 = "1qbkdfa7dzysp7crv9ph476hbabl3qiszs067f20dadqssqs1v4r";
+      sha256 = "0lz14d9gs6k0zbnyvrl6zyj8w7f6a5z7q95y48jkizc822rajhc3";
     };
   }.${system};
 
 in stdenv.mkDerivation rec {
   pname = "google-cloud-sdk";
-  version = "306.0.0";
+  version = "348.0.0";
 
   src = fetchurl (sources "${pname}-${version}" stdenv.hostPlatform.system);
 
-  buildInputs = [ python makeWrapper ];
+  buildInputs = [ python ];
 
-  nativeBuildInputs = [ jq ];
+  nativeBuildInputs = [ jq makeWrapper ];
 
   patches = [
+    # For kubectl configs, don't store the absolute path of the `gcloud` binary as it can be garbage-collected
     ./gcloud-path.patch
+    # Disable checking for updates for the package
     ./gsutil-disable-updates.patch
+    # Try to use cloud_sql_proxy from SDK only if it actually exists, otherwise, search for one in PATH
+    ./cloud_sql_proxy_path.patch
   ];
 
   installPhase = ''
+    runHook preInstall
+
     mkdir -p $out/google-cloud-sdk
     cp -R * .install $out/google-cloud-sdk/
 
@@ -74,8 +85,9 @@ in stdenv.mkDerivation rec {
     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
+    mkdir -p $out/share/bash-completion/completions
+    mv $out/google-cloud-sdk/completion.bash.inc $out/share/bash-completion/completions/gcloud
+    ln -s $out/share/bash-completion/completions/gcloud $out/share/bash-completion/completions/gsutil
 
     # This directory contains compiled mac binaries. We used crcmod from
     # nixpkgs instead.
@@ -91,15 +103,17 @@ in stdenv.mkDerivation rec {
       jq -c . $path > $path.min
       mv $path.min $path
     done
+
+    runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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" ];
+    maintainers = with maintainers; [ iammrinal0 pradyuman stephenmw zimbatm ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ];
   };
 }
diff --git a/pkgs/tools/admin/google-cloud-sdk/gsutil-disable-updates.patch b/pkgs/tools/admin/google-cloud-sdk/gsutil-disable-updates.patch
index de44ea7e791..1147668862b 100644
--- a/pkgs/tools/admin/google-cloud-sdk/gsutil-disable-updates.patch
+++ b/pkgs/tools/admin/google-cloud-sdk/gsutil-disable-updates.patch
@@ -1,16 +1,8 @@
 diff --git a/platform/gsutil/gslib/command_runner.py b/platform/gsutil/gslib/command_runner.py
-index 06ca5e5..4a4e225 100644
+index f490bb3..dc6bbcc 100644
 --- a/platform/gsutil/gslib/command_runner.py
 +++ b/platform/gsutil/gslib/command_runner.py
-@@ -61,7 +61,6 @@ from gslib.utils.text_util import InsistAsciiHeaderValue
- from gslib.utils.text_util import print_to_fd
- from gslib.utils.unit_util import SECONDS_PER_DAY
- from gslib.utils.update_util import LookUpGsutilVersion
--from gslib.tests.util import HAS_NON_DEFAULT_GS_HOST
- 
- 
- def HandleHeaderCoding(headers):
-@@ -331,17 +330,6 @@ class CommandRunner(object):
+@@ -330,17 +330,6 @@ class CommandRunner(object):
      Returns:
        Return value(s) from Command that was run.
      """
@@ -28,7 +20,7 @@ index 06ca5e5..4a4e225 100644
      if not args:
        args = []
  
-@@ -414,18 +402,10 @@ class CommandRunner(object):
+@@ -413,18 +402,10 @@ class CommandRunner(object):
        ShutDownGsutil()
      if GetFailureCount() > 0:
        return_code = 1
diff --git a/pkgs/tools/admin/gtk-vnc/default.nix b/pkgs/tools/admin/gtk-vnc/default.nix
index afaa237d342..5e00e487e23 100644
--- a/pkgs/tools/admin/gtk-vnc/default.nix
+++ b/pkgs/tools/admin/gtk-vnc/default.nix
@@ -1,13 +1,13 @@
-{ stdenv
+{ lib
+, stdenv
 , fetchurl
-, fetchpatch
 , meson
 , ninja
 , gobject-introspection
 , gnutls
 , cairo
 , glib
-, pkgconfig
+, pkg-config
 , cyrus_sasl
 , libpulseaudio
 , libgcrypt
@@ -15,34 +15,26 @@
 , vala
 , gettext
 , perl
-, gnome3
+, gnome
 , gdk-pixbuf
 , zlib
 }:
 
 stdenv.mkDerivation rec {
   pname = "gtk-vnc";
-  version = "1.0.0";
+  version = "1.2.0";
 
   outputs = [ "out" "bin" "man" "dev" ];
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1060ws037v556rx1qhfrcg02859rscksrzr8fq11himdg4d1y6m8";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "0jmr6igyzcj2wmx5v5ywaazvdz3hx6a6rys26yb4l4s71l281bvs";
   };
 
-  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
+    pkg-config
     gobject-introspection
     vala
     gettext
@@ -62,13 +54,13 @@ stdenv.mkDerivation rec {
   ];
 
   passthru = {
-    updateScript = gnome3.updateScript {
+    updateScript = gnome.updateScript {
       packageName = pname;
       versionPolicy = "none";
     };
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "GTK VNC widget";
     homepage = "https://wiki.gnome.org/Projects/gtk-vnc";
     license = licenses.lgpl2Plus;
diff --git a/pkgs/tools/admin/iamy/default.nix b/pkgs/tools/admin/iamy/default.nix
index 1a668777e2e..dd35da451ad 100644
--- a/pkgs/tools/admin/iamy/default.nix
+++ b/pkgs/tools/admin/iamy/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "iamy";
@@ -19,7 +19,7 @@ buildGoModule rec {
     -X main.Version=v${version} -s -w
   ''];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A cli tool for importing and exporting AWS IAM configuration to YAML files";
     homepage = "https://github.com/99designs/iamy";
     license = licenses.mit;
diff --git a/pkgs/tools/admin/intecture/agent.nix b/pkgs/tools/admin/intecture/agent.nix
index 1c2d84836eb..33145e0e548 100644
--- a/pkgs/tools/admin/intecture/agent.nix
+++ b/pkgs/tools/admin/intecture/agent.nix
@@ -1,5 +1,5 @@
 { lib, fetchFromGitHub, rustPlatform
-, openssl, zeromq, czmq, pkgconfig, cmake, zlib }:
+, openssl, zeromq, czmq, pkg-config, cmake, zlib }:
 
 with rustPlatform;
 
@@ -14,11 +14,11 @@ buildRustPackage rec {
     sha256 = "0j27qdgyxybaixggh7k57mpm6rifimn4z2vydk463msc8b3kgywj";
   };
 
-  cargoSha256 = "1is1cbbwxf00dc64h76h57s0wxsai0zm5vfrrss7598cim6a4yxb";
+  cargoSha256 = "0j7yv00ipaa60hpakfj60xrblcyzjwi0lp2hpzz41vq3p9bkigvm";
 
   buildInputs = [ openssl zeromq czmq zlib ];
 
-  nativeBuildInputs = [ pkgconfig cmake ];
+  nativeBuildInputs = [ pkg-config cmake ];
 
   meta = with lib; {
     description = "Authentication client/server for Intecture components";
diff --git a/pkgs/tools/admin/intecture/auth.nix b/pkgs/tools/admin/intecture/auth.nix
index 0d7443d3225..5fe81b78c9a 100644
--- a/pkgs/tools/admin/intecture/auth.nix
+++ b/pkgs/tools/admin/intecture/auth.nix
@@ -1,5 +1,5 @@
 { lib, fetchFromGitHub, rustPlatform
-, openssl, zeromq, czmq, pkgconfig, cmake, zlib }:
+, openssl, zeromq, czmq, pkg-config, cmake, zlib }:
 
 with rustPlatform;
 
@@ -14,11 +14,11 @@ buildRustPackage rec {
     sha256 = "0c7ar3pc7n59lzfy74lwz51p09s2bglc870rfr4c0vmc91jl0pj2";
   };
 
-  cargoSha256 = "17k4a3jd7n2fkalx7vvgah62pj77n536jvm17d60sj0yz2fxx799";
+  cargoSha256 = "15f7lb0xxaxvhvj8g3kjmqy5jzy4pyzwk3zfdvykphpg18qgg6qj";
 
   buildInputs = [ openssl zeromq czmq zlib ];
 
-  nativeBuildInputs = [ pkgconfig cmake ];
+  nativeBuildInputs = [ pkg-config cmake ];
 
   meta = with lib; {
     description = "Authentication client/server for Intecture components";
diff --git a/pkgs/tools/admin/intecture/cli.nix b/pkgs/tools/admin/intecture/cli.nix
index 5a841b92040..9b543b40498 100644
--- a/pkgs/tools/admin/intecture/cli.nix
+++ b/pkgs/tools/admin/intecture/cli.nix
@@ -1,5 +1,5 @@
 { lib, fetchFromGitHub, rustPlatform
-, openssl, zeromq, czmq, pkgconfig, cmake, zlib }:
+, openssl, zeromq, czmq, pkg-config, cmake, zlib }:
 
 with rustPlatform;
 
@@ -14,11 +14,11 @@ buildRustPackage rec {
     sha256 = "16a5fkpyqkf8w20k3ircc1d0qmif7nygkzxj6mzk9609dlb0dmxq";
   };
 
-  cargoSha256 = "11r551baz3hrkyf9nv68mdf09nqyvbcfjh2rgy8babmi7jljpzav";
+  cargoSha256 = "09phc0gxz1amrk1bbl5ajg0jmgxcqm4xzbvq3nj58qps991kvgf1";
 
   buildInputs = [ openssl zeromq czmq zlib ];
 
-  nativeBuildInputs = [ pkgconfig cmake ];
+  nativeBuildInputs = [ pkg-config cmake ];
 
   # Needed for tests
   USER = "$(whoami)";
diff --git a/pkgs/tools/admin/lego/default.nix b/pkgs/tools/admin/lego/default.nix
index 4517077ac46..78f4b8cd2cb 100644
--- a/pkgs/tools/admin/lego/default.nix
+++ b/pkgs/tools/admin/lego/default.nix
@@ -1,17 +1,17 @@
-{ lib, fetchFromGitHub, buildGoModule }:
+{ lib, fetchFromGitHub, buildGoModule, nixosTests }:
 
 buildGoModule rec {
   pname = "lego";
-  version = "3.8.0";
+  version = "4.4.0";
 
   src = fetchFromGitHub {
     owner = "go-acme";
     repo = pname;
     rev = "v${version}";
-    sha256 = "02p7zlrz8fp5bsvhk4jrx5x3gxnl00friay1jihlzyk3s400n9jb";
+    sha256 = "sha256-+5uy6zVfC+utXfwBCEo597CRo4di73ff0eqHyDUxxII=";
   };
 
-  vendorSha256 = "0jh7qi422i2114198fain9nwwf8yd8vna0p3g0hvginh59svyagc";
+  vendorSha256 = "sha256-JgGDP5H7zKQ8sk36JtM/FCWXl7oTScHNboQ/mE5AisU=";
 
   doCheck = false;
 
@@ -27,4 +27,6 @@ buildGoModule rec {
     homepage = "https://go-acme.github.io/lego/";
     maintainers = teams.acme.members;
   };
+
+  passthru.tests.lego = nixosTests.acme;
 }
diff --git a/pkgs/tools/admin/lexicon/default.nix b/pkgs/tools/admin/lexicon/default.nix
index 3af266c8175..c183e374142 100644
--- a/pkgs/tools/admin/lexicon/default.nix
+++ b/pkgs/tools/admin/lexicon/default.nix
@@ -1,29 +1,81 @@
 { lib
-, python3Packages
+, python3
 , fetchFromGitHub
 }:
 
-python3Packages.buildPythonApplication rec {
-  pname = "lexicon";
-  version = "3.3.27";
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+      # until https://github.com/ags-slc/localzone/issues/1 gets resolved
+      dnspython = super.dnspython.overridePythonAttrs(oldAttrs: rec {
+        pname = "dnspython";
+        version = "1.16.0";
+        # since name is defined from the previous derivation, need to override
+        # name explicity for correct version to show in drvName
+        name = "${pname}-${version}";
 
-  propagatedBuildInputs = with python3Packages; [ requests tldextract future cryptography pyyaml boto3 zeep xmltodict beautifulsoup4 dnspython pynamecheap softlayer transip localzone ];
+        src = super.fetchPypi {
+          inherit pname version;
+          extension = "zip";
+          sha256 = "00cfamn97w2vhq3id87f10mjna8ag5yz5dw0cy5s0sa3ipiyii9n";
+        };
+      });
 
-  checkInputs = with python3Packages; [ pytest pytestcov pytest_xdist vcrpy mock ];
+      localzone = super.localzone.overridePythonAttrs(oldAttrs: rec {
+        meta = oldAttrs.meta // { broken = false; };
+      });
+    };
+  };
+in
+  with py.pkgs;
 
-  checkPhase = ''
-    pytest --ignore=lexicon/tests/providers/test_auto.py
-  '';
+buildPythonApplication rec {
+  pname = "lexicon";
+  version = "3.5.2";
+  format = "pyproject";
 
   src = fetchFromGitHub {
     owner = "AnalogJ";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0i6grrpdwh7axhnsabb0pfjhpd3prc9ji1afivi7q3c0krgvncmc";
+    sha256 = "1jsc2ybbf3mbvgzkgliria494dpj23mgqnw2lh43cnd9rgsjvzn3";
   };
 
+  nativeBuildInputs = [
+    poetry
+  ];
+
+  propagatedBuildInputs = [
+    beautifulsoup4
+    boto3
+    cryptography
+    dnspython
+    future
+    localzone
+    pynamecheap
+    pyyaml
+    requests
+    softlayer
+    tldextract
+    transip
+    xmltodict
+    zeep
+  ];
+
+  checkInputs = [
+    mock
+    pytest
+    pytest-cov
+    pytest-xdist
+    vcrpy
+  ];
+
+  checkPhase = ''
+    pytest --ignore=lexicon/tests/providers/test_auto.py
+  '';
+
   meta = with lib; {
-    description = "Manipulate DNS records on various DNS providers in a standardized way.";
+    description = "Manipulate DNS records on various DNS providers in a standardized way";
     homepage = "https://github.com/AnalogJ/lexicon";
     maintainers = with maintainers; [ flyfloh ];
     license = licenses.mit;
diff --git a/pkgs/tools/admin/lxd/default.nix b/pkgs/tools/admin/lxd/default.nix
index 2e8ff96d41a..ac831c9da48 100644
--- a/pkgs/tools/admin/lxd/default.nix
+++ b/pkgs/tools/admin/lxd/default.nix
@@ -1,12 +1,13 @@
-{ stdenv, hwdata, pkgconfig, lxc, buildGoPackage, fetchurl
+{ lib, hwdata, pkg-config, lxc, buildGoPackage, fetchurl
 , makeWrapper, acl, rsync, gnutar, xz, btrfs-progs, gzip, dnsmasq
-, squashfsTools, iproute, iptables, ebtables, iptables-nftables-compat, libcap
-, libco-canonical, dqlite, raft-canonical, sqlite-replication, udev
+, squashfsTools, iproute2, iptables, ebtables, iptables-nftables-compat, libcap
+, dqlite, raft-canonical, sqlite-replication, udev
 , writeShellScriptBin, apparmor-profiles, apparmor-parser
 , criu
 , bash
 , installShellFiles
 , nftablesSupport ? false
+, nixosTests
 }:
 
 let
@@ -18,13 +19,13 @@ let
 in
 buildGoPackage rec {
   pname = "lxd";
-  version = "4.4";
+  version = "4.16";
 
   goPackagePath = "github.com/lxc/lxd";
 
   src = fetchurl {
-    url = "https://github.com/lxc/lxd/releases/download/${pname}-${version}/${pname}-${version}.tar.gz";
-    sha256 = "0fk42spz57nfmwy6xn02nnlkq01111x03psjq003k2785ah4xk1h";
+    url = "https://linuxcontainers.org/downloads/lxd/lxd-${version}.tar.gz";
+    sha256 = "1da9avmxs8sy92d9nrdgry2x685ral58zgf89yr88qxc0llbzq7r";
   };
 
   postPatch = ''
@@ -38,31 +39,36 @@ buildGoPackage rec {
     rm _dist/src/github.com/lxc/lxd
     cp -r _dist/src/* ../../..
     popd
-  '';
 
-  buildFlags = [ "-tags libsqlite3" ];
+    # required for go-dqlite. See: https://github.com/lxc/lxd/pull/8939
+    export CGO_LDFLAGS_ALLOW="(-Wl,-wrap,pthread_create)|(-Wl,-z,now)"
+
+    makeFlagsArray+=("-tags libsqlite3")
+  '';
 
   postInstall = ''
     # test binaries, code generation
     rm $out/bin/{deps,macaroon-identity,generate}
 
-    wrapProgram $out/bin/lxd --prefix PATH : ${stdenv.lib.makeBinPath (
+    wrapProgram $out/bin/lxd --prefix PATH : ${lib.makeBinPath (
       networkPkgs
-      ++ [ acl rsync gnutar xz btrfs-progs gzip dnsmasq squashfsTools iproute bash criu ]
+      ++ [ acl rsync gnutar xz btrfs-progs gzip dnsmasq squashfsTools iproute2 bash criu ]
       ++ [ (writeShellScriptBin "apparmor_parser" ''
              exec '${apparmor-parser}/bin/apparmor_parser' -I '${apparmor-profiles}/etc/apparmor.d' "$@"
            '') ]
       )
     }
 
-    installShellCompletion --bash go/src/github.com/lxc/lxd/scripts/bash/lxd-client
+    installShellCompletion --bash --name lxd go/src/github.com/lxc/lxd/scripts/bash/lxd-client
   '';
 
-  nativeBuildInputs = [ installShellFiles pkgconfig makeWrapper ];
-  buildInputs = [ lxc acl libcap libco-canonical.dev dqlite.dev
-                  raft-canonical.dev sqlite-replication udev.dev ];
+  passthru.tests.lxd = nixosTests.lxd;
+
+  nativeBuildInputs = [ installShellFiles pkg-config makeWrapper ];
+  buildInputs = [ lxc acl libcap dqlite.dev raft-canonical.dev
+                  sqlite-replication udev.dev ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Daemon based on liblxc offering a REST API to manage containers";
     homepage = "https://linuxcontainers.org/lxd/";
     license = licenses.asl20;
diff --git a/pkgs/tools/admin/mycli/default.nix b/pkgs/tools/admin/mycli/default.nix
index 4745d065be9..ca845cce145 100644
--- a/pkgs/tools/admin/mycli/default.nix
+++ b/pkgs/tools/admin/mycli/default.nix
@@ -7,15 +7,26 @@ with python3.pkgs;
 
 buildPythonApplication rec {
   pname = "mycli";
-  version = "1.22.2";
+  version = "1.24.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1lq2x95553vdmhw13cxcgsd2g2i32izhsb7hxd4m1iwf9b3msbpv";
+    sha256 = "sha256-dI2Yvj2llI9TlMFbs35ijYeFuGqoTovZyRh+ILhNMmY=";
   };
 
   propagatedBuildInputs = [
-    paramiko pymysql configobj sqlparse prompt_toolkit pygments click pycrypto cli-helpers
+    cli-helpers
+    click
+    configobj
+    importlib-resources
+    paramiko
+    prompt_toolkit
+    pyaes
+    pycrypto
+    pygments
+    pymysql
+    pyperclip
+    sqlparse
   ];
 
   checkInputs = [ pytest mock glibcLocales ];
@@ -28,7 +39,13 @@ buildPythonApplication rec {
       --ignore=mycli/packages/paramiko_stub/__init__.py
   '';
 
-  meta = {
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "sqlparse>=0.3.0,<0.4.0" "sqlparse" \
+      --replace "importlib_resources >= 5.0.0" "importlib_resources"
+  '';
+
+  meta = with lib; {
     inherit version;
     description = "Command-line interface for MySQL";
     longDescription = ''
@@ -36,7 +53,7 @@ buildPythonApplication rec {
       syntax highlighting.
     '';
     homepage = "http://mycli.net";
-    license = lib.licenses.bsd3;
-    maintainers = [ lib.maintainers.jojosch ];
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jojosch ];
   };
 }
diff --git a/pkgs/tools/admin/netplan/default.nix b/pkgs/tools/admin/netplan/default.nix
new file mode 100644
index 00000000000..b9dc2c07073
--- /dev/null
+++ b/pkgs/tools/admin/netplan/default.nix
@@ -0,0 +1,65 @@
+{ stdenv
+, fetchFromGitHub
+, pkg-config
+, glib
+, pandoc
+, systemd
+, libyaml
+, python3
+, libuuid
+, bash-completion
+, lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "netplan";
+  version = "0.101";
+
+  src = fetchFromGitHub {
+    owner = "CanonicalLtd";
+    repo = "netplan";
+    rev = version;
+    hash = "sha256-bCK7J2pCQUwjZu8c1n6jhF6T/gvUGwydqAXpxUMLgMc=";
+    fetchSubmodules = false;
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    glib
+    pandoc
+  ];
+
+  buildInputs = [
+    systemd
+    glib
+    libyaml
+    (python3.withPackages (p: with p; [ pyyaml netifaces ]))
+    libuuid
+    bash-completion
+  ];
+
+  postPatch = ''
+    substituteInPlace netplan/cli/utils.py --replace "/lib/netplan/generate" "$out/lib/netplan/generate"
+    substituteInPlace netplan/cli/utils.py --replace "ctypes.util.find_library('netplan')" "\"$out/lib/libnetplan.so\""
+
+    substituteInPlace Makefile --replace 'SYSTEMD_GENERATOR_DIR=' 'SYSTEMD_GENERATOR_DIR ?= ' \
+        --replace 'SYSTEMD_UNIT_DIR=' 'SYSTEMD_UNIT_DIR ?= ' \
+        --replace 'BASH_COMPLETIONS_DIR=' 'BASH_COMPLETIONS_DIR ?= '
+  '';
+
+  makeFlags = [
+    "PREFIX="
+    "DESTDIR=$(out)"
+    "SYSTEMD_GENERATOR_DIR=lib/systemd/system-generators/"
+    "SYSTEMD_UNIT_DIR=lib/systemd/units/"
+    "BASH_COMPLETIONS_DIR=share/bash-completion/completions"
+  ];
+
+  meta = with lib; {
+    description = "Backend-agnostic network configuration in YAML";
+    homepage = "https://netplan.io";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ mkg20001 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/admin/nomachine-client/default.nix b/pkgs/tools/admin/nomachine-client/default.nix
index 4657c64d330..0daa65cc980 100644
--- a/pkgs/tools/admin/nomachine-client/default.nix
+++ b/pkgs/tools/admin/nomachine-client/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, file, fetchurl, makeWrapper,
+{ lib, stdenv, file, fetchurl, makeWrapper,
   autoPatchelfHook, jsoncpp, libpulseaudio }:
 let
-  versionMajor = "6.11";
-  versionMinor = "2";
+  versionMajor = "7.4";
+  versionMinor = "1";
   versionBuild_x86_64 = "1";
   versionBuild_i686 = "1";
 in
@@ -13,23 +13,18 @@ in
     src =
       if stdenv.hostPlatform.system == "x86_64-linux" then
         fetchurl {
-          urls = [
-            "https://download.nomachine.com/download/${versionMajor}/Linux/nomachine_${version}_${versionBuild_x86_64}_x86_64.tar.gz"
-            "https://web.archive.org/web/https://download.nomachine.com/download/${versionMajor}/Linux/nomachine_${version}_${versionBuild_x86_64}_x86_64.tar.gz"
-          ];
-          sha256 = "1b6r9bwkr8mhaljma19ikxpkmlx8iy5r1vf5hlv27bja2zz1r8xr";
+          url = "https://download.nomachine.com/download/${versionMajor}/Linux/nomachine_${version}_${versionBuild_x86_64}_x86_64.tar.gz";
+          sha256 = "1qir9ii0h5ali87mjzjl72dm1ky626d7y59jfpglakqxzqhjamdz";
         }
       else if stdenv.hostPlatform.system == "i686-linux" then
         fetchurl {
-          urls = [
-            "https://download.nomachine.com/download/${versionMajor}/Linux/nomachine_${version}_${versionBuild_i686}_i686.tar.gz"
-            "https://web.archive.org/web/https://download.nomachine.com/download/${versionMajor}/Linux/nomachine_${version}_${versionBuild_i686}_i686.tar.gz"
-          ];
-          sha256 = "0dl138ry9n1qh651zh0zvp88qhgxrs2kvvnq329jw0py5v70b9pm";
+          url = "https://download.nomachine.com/download/${versionMajor}/Linux/nomachine_${version}_${versionBuild_i686}_i686.tar.gz";
+          sha256 = "1gxiysc09k3jz1pkkyfqgw2fygcnmrnskk6b9vn4fjnvsab4py60";
         }
       else
         throw "NoMachine client is not supported on ${stdenv.hostPlatform.system}";
 
+    # nxusb-legacy is only needed for kernel versions < 3
     postUnpack = ''
       mv $(find . -type f -name nxclient.tar.gz) .
       mv $(find . -type f -name nxplayer.tar.gz) .
@@ -37,6 +32,8 @@ in
       tar xf nxclient.tar.gz
       tar xf nxplayer.tar.gz
       rm $(find . -maxdepth 1 -type f)
+      rm -r NX/share/src/nxusb-legacy
+      rm NX/bin/nxusbd-legacy NX/lib/libnxusb-legacy.so
     '';
 
     nativeBuildInputs = [ file makeWrapper autoPatchelfHook ];
@@ -81,12 +78,12 @@ in
     dontBuild = true;
     dontStrip = true;
 
-    meta = with stdenv.lib; {
+    meta = with 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";
+        fullName = "NoMachine 7 End-User License Agreement";
+        url = "https://www.nomachine.com/licensing-7";
         free = false;
       };
       maintainers = with maintainers; [ talyz ];
diff --git a/pkgs/tools/admin/oci-cli/default.nix b/pkgs/tools/admin/oci-cli/default.nix
new file mode 100644
index 00000000000..729f0aa8fd9
--- /dev/null
+++ b/pkgs/tools/admin/oci-cli/default.nix
@@ -0,0 +1,59 @@
+{ lib, fetchFromGitHub, python3Packages, locale }:
+
+let
+  # https://github.com/oracle/oci-cli/issues/189
+  pinned_click = python3Packages.click.overridePythonAttrs (old: rec {
+    pname = "click";
+    version = "6.7";
+    src = python3Packages.fetchPypi {
+      inherit pname version;
+      hash = "sha256-8VUW30eNWlYYD7+A5o8gYBDm0WD8OfpQi2XgNf11Ews=";
+    };
+
+    postPatch = ''
+      substituteInPlace click/_unicodefun.py \
+      --replace "'locale'" "'${locale}/bin/locale'"
+    '';
+
+    # Issue that wasn't resolved when this version was released:
+    # https://github.com/pallets/click/issues/823
+    doCheck = false;
+  });
+in
+
+python3Packages.buildPythonApplication rec {
+  pname = "oci-cli";
+  version = "2.23.0";
+
+  src = fetchFromGitHub {
+    owner = "oracle";
+    repo = "oci-cli";
+    rev = "v${version}";
+    hash = "sha256-XRkycJrUSOZQAGiSyQZGA/SnlxnFumYL82kOkYd7s2o=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    oci arrow certifi pinned_click configparser cryptography jmespath python-dateutil
+    pytz retrying six terminaltables pyopenssl pyyaml
+  ];
+
+  # https://github.com/oracle/oci-cli/issues/187
+  doCheck = false;
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "configparser==4.0.2" "configparser" \
+      --replace "cryptography==3.2.1" "cryptography" \
+      --replace "pyOpenSSL==19.1.0" "pyOpenSSL" \
+      --replace "PyYAML==5.3.1" "PyYAML" \
+      --replace "six==1.14.0" "six" \
+      --replace "arrow==0.17.0" "arrow"
+  '';
+
+  meta = with lib; {
+    description = "Command Line Interface for Oracle Cloud Infrastructure";
+    homepage = "https://docs.cloud.oracle.com/iaas/Content/API/Concepts/cliconcepts.htm";
+    maintainers = with maintainers; [ ilian ];
+    license = with licenses; [ asl20 upl ];
+  };
+}
diff --git a/pkgs/tools/admin/oxidized/default.nix b/pkgs/tools/admin/oxidized/default.nix
index 01129c5afb1..022b304a845 100644
--- a/pkgs/tools/admin/oxidized/default.nix
+++ b/pkgs/tools/admin/oxidized/default.nix
@@ -11,7 +11,7 @@ bundlerApp {
   passthru.updateScript = bundlerUpdateScript "oxidized";
 
   meta = with lib; {
-    description = "Oxidized is a network device configuration backup tool. It's a RANCID replacement!";
+    description = "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 ];
diff --git a/pkgs/tools/admin/oxidized/gemset.nix b/pkgs/tools/admin/oxidized/gemset.nix
index ff77102af12..f6a3aaa6780 100644
--- a/pkgs/tools/admin/oxidized/gemset.nix
+++ b/pkgs/tools/admin/oxidized/gemset.nix
@@ -301,4 +301,4 @@
     };
     version = "2.0.9";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/admin/pebble/default.nix b/pkgs/tools/admin/pebble/default.nix
index 4813f86ea64..1fb902a8c80 100644
--- a/pkgs/tools/admin/pebble/default.nix
+++ b/pkgs/tools/admin/pebble/default.nix
@@ -1,6 +1,7 @@
 { buildGoPackage
 , fetchFromGitHub
 , lib
+, nixosTests
 }:
 
 let
@@ -17,6 +18,10 @@ in buildGoPackage {
     sha256 = "1piwzzfqsdx6s2niczzp4mf4r3qn9nfdgpn7882g52cmmm0vzks2";
   };
 
+  passthru.tests = {
+    smoke-test = nixosTests.acme;
+  };
+
   meta = {
     homepage = "https://github.com/letsencrypt/pebble";
     description = "A miniature version of Boulder, Pebble is a small RFC 8555 ACME test server not suited for a production CA";
diff --git a/pkgs/tools/admin/procs/default.nix b/pkgs/tools/admin/procs/default.nix
index 54bdf238e3f..0578bb4703c 100644
--- a/pkgs/tools/admin/procs/default.nix
+++ b/pkgs/tools/admin/procs/default.nix
@@ -1,25 +1,34 @@
-{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, installShellFiles, Security, libiconv }:
 
 rustPlatform.buildRustPackage rec {
   pname = "procs";
-  version = "0.10.4";
+  version = "0.11.9";
 
   src = fetchFromGitHub {
     owner = "dalance";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1a28kkxcrdfmrq2mmsfkdxfp3msklwga5nbfhjb7a7s64xh8jmjv";
+    sha256 = "sha256-zqRjMCyFT7knI1/zH+RF1pA/OKaDhJZLLjWJhfmqopE=";
   };
 
-  cargoSha256 = "1xlxjr0pkwlzm7f5xlrsf76in28r9jj41n6gn44vxqbh4x161gs1";
+  cargoSha256 = "sha256-W/ZMDbHC1VsllTSxCt77n4eb8Xgfj9YNx5NG5u+D+qA=";
 
-  buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
+  nativeBuildInputs = [ installShellFiles ];
 
-  meta = with stdenv.lib; {
+  postInstall = ''
+    for shell in bash fish zsh; do
+      $out/bin/procs --completion $shell > procs.$shell
+      installShellCompletion procs.$shell
+    done
+  '';
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security libiconv ];
+
+  meta = with lib; {
     description = "A modern replacement for ps written in Rust";
     homepage = "https://github.com/dalance/procs";
     license = licenses.mit;
-    maintainers = with maintainers; [ dalance filalex77 ];
+    maintainers = with maintainers; [ dalance Br1ght0ne ];
     platforms = with platforms; linux ++ darwin;
   };
 }
diff --git a/pkgs/tools/admin/pulumi/data.nix b/pkgs/tools/admin/pulumi/data.nix
index 77779c39f50..99627b930c2 100644
--- a/pkgs/tools/admin/pulumi/data.nix
+++ b/pkgs/tools/admin/pulumi/data.nix
@@ -1,58 +1,194 @@
 # DO NOT EDIT! This file is generated automatically by update.sh
 { }:
 {
-  version = "2.6.1";
+  version = "3.6.0";
   pulumiPkgs = {
     x86_64-linux = [
       {
-        url = "https://get.pulumi.com/releases/sdk/pulumi-v2.6.1-linux-x64.tar.gz";
-        sha256 = "12f81wj8r3pmxj2l8qhcgnmy2m0a6bfzrvq9avl3444h2w29qpy2";
+        url = "https://get.pulumi.com/releases/sdk/pulumi-v3.6.0-linux-x64.tar.gz";
+        sha256 = "1phj65y1l6pllq5fyrxm7hrwg44jpzq1skq6dw7x6zrs8prnlj52";
       }
       {
-        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-aws-v2.13.0-linux-amd64.tar.gz";
-        sha256 = "03l7ybc9ca63vdm7a2zsvgc8zz8ip973sfxsjqf3bb277r04mnpb";
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-auth0-v2.2.0-linux-amd64.tar.gz";
+        sha256 = "0d88xfi7zzmpyrnvakwxsyavdx6d5hmfrcf4jhmd53mni0m0551l";
       }
       {
-        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-gcp-v3.13.0-linux-amd64.tar.gz";
-        sha256 = "0ivdiib3a1c1r2ppxmj6blgq26s05s3081969j0j9jlscpa79lap";
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-aws-v4.10.0-linux-amd64.tar.gz";
+        sha256 = "12fj43pcs64s0i6h05q94abbxi0r1rlh8qgycmmydr8wajsn2a54";
       }
       {
-        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-random-v2.2.0-linux-amd64.tar.gz";
-        sha256 = "0w6ys5bmry1b8ndzj167cz3a8fc6mbl5v9v2almrmd3q6fycm4gj";
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-cloudflare-v3.2.0-linux-amd64.tar.gz";
+        sha256 = "1xvbkvhny8h5yl6gvlgzdp0cd8xv39sxm36bfszvx9133p6spvy4";
       }
       {
-        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-kubernetes-v2.4.0-linux-amd64.tar.gz";
-        sha256 = "0id3mji08hk76kffz46dlbl2r11kgv5jvlmw869dssg2d0wliv82";
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-consul-v3.2.0-linux-amd64.tar.gz";
+        sha256 = "14s6jyackhp324gdlvvqnyi8s7hj0fb92ilrpd460p05p653zb4x";
       }
       {
-        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-postgresql-v2.2.2-linux-amd64.tar.gz";
-        sha256 = "07asdmmacxazg65d5hphjxzb5j5d2dcc95wjbxx3wwc1swqma4aq";
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-datadog-v3.3.0-linux-amd64.tar.gz";
+        sha256 = "1ppwha1zk73w39msp6jym9in7jsrxzc530qgj4lj0961mb9rdkra";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-digitalocean-v4.4.1-linux-amd64.tar.gz";
+        sha256 = "1zng8w2jr76z9s95id9dnvw7skr4yd55xrvv9c053gpyh7wv7bhs";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-docker-v3.0.0-linux-amd64.tar.gz";
+        sha256 = "06j5k599i8giy5v6scggw8zx1pyfm6w20biwcizv81zk0zkg3fzp";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-equinix-metal-v2.0.0-linux-amd64.tar.gz";
+        sha256 = "0yhdcjscdkvvai95z2v6xabvvsfvaqi38ngpqrb73ahlwqhz3nys";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-gcp-v5.11.0-linux-amd64.tar.gz";
+        sha256 = "0h0dpbdc9rcagw0wgz5l6jjc8wl1hj5ki5shi44jyf4hz7l0yl9y";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-github-v4.2.0-linux-amd64.tar.gz";
+        sha256 = "159lk4iv9zi2ggcjwjsg9an4rfjc0lbyn8d3kbv10p6cx109ljzg";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-gitlab-v4.1.0-linux-amd64.tar.gz";
+        sha256 = "13rchk54wpjwci26kfa519gqagwfrp31w6a9nk1xfdxj45ha9d3x";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-hcloud-v1.1.0-linux-amd64.tar.gz";
+        sha256 = "0al3578g7l9rvhkswlm56wpkybj6njj39a3g56in9882lhpqixsy";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-kubernetes-v3.5.0-linux-amd64.tar.gz";
+        sha256 = "1zi6r1g7l56ra506hxkj8p9wlkgbmry7ir48v8wwdsfvplryj4sf";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-linode-v3.2.0-linux-amd64.tar.gz";
+        sha256 = "1lvb3vs2yp0ybz2xn2za5f0nfipiisrpzwzfn0wgl9arh17v0phc";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-mailgun-v3.1.0-linux-amd64.tar.gz";
+        sha256 = "0g392a6zyycdijjn0nswf2x5h31x1hcffgwwkmbjr304n2ycbb50";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-mysql-v3.0.0-linux-amd64.tar.gz";
+        sha256 = "04gaimdzh04v7f11xw1b7p95rbb142kbnix1zqas68wd6vpw9kyp";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-openstack-v3.2.0-linux-amd64.tar.gz";
+        sha256 = "1np74bfvp4hr70izb8sarxvga3nnvyi9j7y6f0lqqgrfk2ixn48r";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-packet-v3.2.2-linux-amd64.tar.gz";
+        sha256 = "0glbjhgrb2hiyhd6kwmy7v384j8zw641pw9737g1fczv3x16a3s3";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-postgresql-v3.1.0-linux-amd64.tar.gz";
+        sha256 = "0s1fkj1s5qni84lz0gr1d10xyxp87877jana67lxbarskvzpys8r";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-random-v4.2.0-linux-amd64.tar.gz";
+        sha256 = "02g59jaifyjfcx185ir79d8lqic38dgaa9cb8dpi3xhvv32z0b0q";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-vault-v4.1.0-linux-amd64.tar.gz";
+        sha256 = "0npszs37q6j1x5h2sp9j1c6qnhr03lxp2r2ci0d4z3x7vyk06rja";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-vsphere-v4.0.0-linux-amd64.tar.gz";
+        sha256 = "09vf4jddy7bys6x2vw7cyq5ylnwb43rr3ysk3vvi5czpbb8fa86k";
       }
     ];
     x86_64-darwin = [
       {
-        url = "https://get.pulumi.com/releases/sdk/pulumi-v2.6.1-darwin-x64.tar.gz";
-        sha256 = "17jf9xwpwpbqk5r20i14j1z4i4rbbx781k0zqyc9yskmv5q4mmwr";
+        url = "https://get.pulumi.com/releases/sdk/pulumi-v3.6.0-darwin-x64.tar.gz";
+        sha256 = "0yql94y78q0hfsxfsgvkxs7dv2lgrkv4ypm59qjr8l04krcknbmm";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-auth0-v2.2.0-darwin-amd64.tar.gz";
+        sha256 = "12mkr0xczdnp21k0k7qn4r3swkaq3pr6v2z853p1db7ksz5kds23";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-aws-v4.10.0-darwin-amd64.tar.gz";
+        sha256 = "0zv4b7nyvz7h0h0jxndd7dxzf4risgqyl7f20cbbcsixxk90sz38";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-cloudflare-v3.2.0-darwin-amd64.tar.gz";
+        sha256 = "1h726ahb6mqzg83fl3m8wck5gz5hxczbpwmb5xl0yzz1m0s54czf";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-consul-v3.2.0-darwin-amd64.tar.gz";
+        sha256 = "1bb78g8k6gnhyxxvcjspnhbw2fig58flr14zi5i1cbd89xkz0m3i";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-datadog-v3.3.0-darwin-amd64.tar.gz";
+        sha256 = "1wwldhy6r6985rwx9vv73jb1nsna387sk6mba81lyc55ar67nsp9";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-digitalocean-v4.4.1-darwin-amd64.tar.gz";
+        sha256 = "14kjmzmi5v5brz1cphpgr5k8clkr25vrc7wi8v36qmdhigv0kfbn";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-docker-v3.0.0-darwin-amd64.tar.gz";
+        sha256 = "0ffic6mqr1zyskrv60q9wg7jc0hq23l5g0pdh3clpnn2m1xnxnxm";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-equinix-metal-v2.0.0-darwin-amd64.tar.gz";
+        sha256 = "1dpsbq3b0fz86355jy7rz4kcsa1lnw4azn25vzlis89ay1ncbblc";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-gcp-v5.11.0-darwin-amd64.tar.gz";
+        sha256 = "1k7yxajx3157qdanw1y11053k74rwlcvh828xrpwkzqszmzizxp9";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-github-v4.2.0-darwin-amd64.tar.gz";
+        sha256 = "1iwx80r9kmlrf961zck3qz2jb9shpmywdm5nkflvz6mhwrfsbz72";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-gitlab-v4.1.0-darwin-amd64.tar.gz";
+        sha256 = "0qbw4b5zm6dmwdilaz4bjdg55gc5lilwagrxwrab37vq4a8and4c";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-hcloud-v1.1.0-darwin-amd64.tar.gz";
+        sha256 = "1fgh7q7sivip212q2zgvrgg3lwxrzasm9vpa858168fvjv67ylbc";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-kubernetes-v3.5.0-darwin-amd64.tar.gz";
+        sha256 = "0cl8wg5g78c147pqy5q52qq9bd7hw8zgvfmdafszwzwz6xh1051b";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-linode-v3.2.0-darwin-amd64.tar.gz";
+        sha256 = "008jqnrl08g3gd38vg2yjwxdn288z75sbp3ghl2cbncfah2lwwja";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-mailgun-v3.1.0-darwin-amd64.tar.gz";
+        sha256 = "0awksrbsmvkgfszdsxfv8wfs1m16y1551jnz0rf51dq0cn9963hq";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-mysql-v3.0.0-darwin-amd64.tar.gz";
+        sha256 = "18vrp0zzi92x4l5nkjszvd0zr7pk6nl6s3h5a3hvsz5qrj2830q3";
+      }
+      {
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-openstack-v3.2.0-darwin-amd64.tar.gz";
+        sha256 = "08rmknpwrbc9h57a3ddg05s0idxbbrcf46i2gkqknjzs7dr6wzas";
       }
       {
-        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-aws-v2.13.0-darwin-amd64.tar.gz";
-        sha256 = "18mjf9gm8siskg9jh65x4qp4w8p4wnp19bxxk4jfbq27icdk7ws9";
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-packet-v3.2.2-darwin-amd64.tar.gz";
+        sha256 = "0621njipng32x43lw8n49mapq10lnvibg8vlvgciqsfvrbpz1yp5";
       }
       {
-        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-gcp-v3.13.0-darwin-amd64.tar.gz";
-        sha256 = "14iwz1gm34irs9jlpwc4ig1wc8k4aaxq8mz3g22yrvwddrsc4rcw";
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-postgresql-v3.1.0-darwin-amd64.tar.gz";
+        sha256 = "1x5fm72v9h3lrqcyyq2xm14bc14rsqhjmc4mwa2wgbk4pvjgawyv";
       }
       {
-        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-random-v2.2.0-darwin-amd64.tar.gz";
-        sha256 = "0zaxp2n1w5djwyq1afhd3v887dh0yj53jz449riqp19dpyfqf7h7";
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-random-v4.2.0-darwin-amd64.tar.gz";
+        sha256 = "0gd3xnl31892qp8ilz9lc1zdps77nf07jgvh0k37mink8f0ppy2z";
       }
       {
-        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-kubernetes-v2.4.0-darwin-amd64.tar.gz";
-        sha256 = "1kzs7k7as9r1vbj746wqz9iph13zfzzw8nsk3waq8aq1hmgh2g1q";
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-vault-v4.1.0-darwin-amd64.tar.gz";
+        sha256 = "0nasbip85f1xjp6dfibw0nh133gf9cy5n4gdqnv5759bg92am7kg";
       }
       {
-        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-postgresql-v2.2.2-darwin-amd64.tar.gz";
-        sha256 = "0hwdghij7g9h58nwimfmaz91lz38wibkrdzwqhi7d426m53g6f5c";
+        url = "https://api.pulumi.com/releases/plugins/pulumi-resource-vsphere-v4.0.0-darwin-amd64.tar.gz";
+        sha256 = "09m0p5k8gkz37193vj1kwkdwbcvv04cwangwbp5xcn3c20q467xb";
       }
     ];
   };
diff --git a/pkgs/tools/admin/pulumi/default.nix b/pkgs/tools/admin/pulumi/default.nix
index c0547f0c0c8..89fee3e6160 100644
--- a/pkgs/tools/admin/pulumi/default.nix
+++ b/pkgs/tools/admin/pulumi/default.nix
@@ -29,8 +29,10 @@ in stdenv.mkDerivation {
     license = with licenses; [ asl20 ];
     platforms = builtins.attrNames data.pulumiPkgs;
     maintainers = with maintainers; [
+      ghuntley
       peterromfeldhk
       jlesquembre
+      cpcloud
     ];
   };
 }
diff --git a/pkgs/tools/admin/pulumi/update.sh b/pkgs/tools/admin/pulumi/update.sh
index cc31bce849b..efde5e7d660 100755
--- a/pkgs/tools/admin/pulumi/update.sh
+++ b/pkgs/tools/admin/pulumi/update.sh
@@ -1,19 +1,36 @@
 #!/usr/bin/env bash
+# Bash 3 compatible for Darwin
 
-VERSION="2.6.1"
+# Version of Pulumi from
+# https://www.pulumi.com/docs/get-started/install/versions/
+VERSION="3.6.0"
 
-# Bash 3 compatible for Darwin
+# Grab latest release ${VERSION} from
+# https://github.com/pulumi/pulumi-${NAME}/releases
 plugins=(
-    # https://github.com/pulumi/pulumi-aws/releases
-    "aws=2.13.0"
-    # https://github.com/pulumi/pulumi-gcp/releases
-    "gcp=3.13.0"
-    # https://github.com/pulumi/pulumi-random/releases
-    "random=2.2.0"
-    # https://github.com/pulumi/pulumi-kubernetes/releases
-    "kubernetes=2.4.0"
-    # https://github.com/pulumi/pulumi-postgresql/releases
-    "postgresql=2.2.2");
+    "auth0=2.2.0"
+    "aws=4.10.0"
+    "cloudflare=3.2.0"
+    "consul=3.2.0"
+    "datadog=3.3.0"
+    "digitalocean=4.4.1"
+    "docker=3.0.0"
+    "equinix-metal=2.0.0"
+    "gcp=5.11.0"
+    "github=4.2.0"
+    "gitlab=4.1.0"
+    "hcloud=1.1.0"
+    "kubernetes=3.5.0"
+    "linode=3.2.0"
+    "mailgun=3.1.0"
+    "mysql=3.0.0"
+    "openstack=3.2.0"
+    "packet=3.2.2"
+    "postgresql=3.1.0"
+    "random=4.2.0"
+    "vault=4.1.0"
+    "vsphere=4.0.0"
+)
 
 function genMainSrc() {
     local url="https://get.pulumi.com/releases/sdk/pulumi-v${VERSION}-$1-x64.tar.gz"
@@ -41,7 +58,8 @@ function genSrcs() {
     done
 }
 
-cat <<EOF                     > data.nix
+{
+  cat <<EOF
 # DO NOT EDIT! This file is generated automatically by update.sh
 { }:
 {
@@ -49,14 +67,14 @@ cat <<EOF                     > data.nix
   pulumiPkgs = {
     x86_64-linux = [
 EOF
-genMainSrc "linux"           >> data.nix
-genSrcs "linux"              >> data.nix
-echo "    ];"                >> data.nix
-
-echo "    x86_64-darwin = [" >> data.nix
-genMainSrc "darwin"          >> data.nix
-genSrcs "darwin"             >> data.nix
-echo "    ];"                >> data.nix
-echo "  };"                  >> data.nix
-echo "}"                     >> data.nix
+  genMainSrc "linux"
+  genSrcs "linux"
+  echo "    ];"
+  echo "    x86_64-darwin = ["
 
+  genMainSrc "darwin"
+  genSrcs "darwin"
+  echo "    ];"
+  echo "  };"
+  echo "}"
+} > data.nix
diff --git a/pkgs/tools/admin/rset/default.nix b/pkgs/tools/admin/rset/default.nix
new file mode 100644
index 00000000000..f7c00fffb1c
--- /dev/null
+++ b/pkgs/tools/admin/rset/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchurl, coreutils, openssh, gnutar }:
+
+stdenv.mkDerivation rec {
+  pname = "rset";
+  version = "2.1";
+
+  src = fetchurl {
+    url = "https://scriptedconfiguration.org/code/${pname}-${version}.tar.gz";
+    sha256 = "0916f96afl8kcn2hpj4qhg92g2j93ycp2sb94nsz3q44sqc6ddhb";
+  };
+
+  patches = [ ./paths.patch ];
+
+  postPatch = ''
+    substituteInPlace rset.c \
+      --replace @ssh@       ${openssh}/bin/ssh \
+      --replace @miniquark@ $out/bin/miniquark \
+      --replace @rinstall@  $out/bin/rinstall \
+      --replace @rsub@      $out/bin/rsub
+
+    substituteInPlace execute.c \
+      --replace @ssh@     ${openssh}/bin/ssh \
+      --replace @ssh-add@ ${openssh}/bin/ssh-add \
+      --replace @tar@     ${gnutar}/bin/tar
+
+    substituteInPlace rutils.c \
+      --replace @install@ ${coreutils}/bin/install
+  '';
+
+  # these are to be run on the remote host,
+  # so we want to preserve the original shebang.
+  postFixup = ''
+    sed -i "1s@.*@#!/bin/sh@" $out/bin/rinstall
+    sed -i "1s@.*@#!/bin/sh@" $out/bin/rsub
+  '';
+
+  dontAddPrefix = true;
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://scriptedconfiguration.org/";
+    description = "Configure systems using any scripting language";
+    changelog = "https://github.com/eradman/rset/raw/${version}/NEWS";
+    license = licenses.isc;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ cstrahan ];
+  };
+}
diff --git a/pkgs/tools/admin/rset/paths.patch b/pkgs/tools/admin/rset/paths.patch
new file mode 100644
index 00000000000..af09b0902ed
--- /dev/null
+++ b/pkgs/tools/admin/rset/paths.patch
@@ -0,0 +1,131 @@
+diff --git a/execute.c b/execute.c
+index be06068..3468fa7 100644
+--- a/execute.c
++++ b/execute.c
+@@ -242,7 +242,7 @@ verify_ssh_agent() {
+ 	char *output;
+ 	char *argv[32];
+ 
+-	append(argv, 0, "ssh-add", "-l", NULL);
++	append(argv, 0, "@ssh-add@", "-l", NULL);
+ 	output = cmd_pipe_stdout(argv, &error_code, &output_size);
+ 	free(output);
+ 
+@@ -282,7 +282,7 @@ start_connection(char *socket_path, Label *route_label, int http_port, const cha
+ 	}
+ 
+ 	argc = 0;
+-	argc = append(argv, argc, "ssh", "-fN", "-R", port_forwarding, "-S",
++	argc = append(argv, argc, "@ssh@", "-fN", "-R", port_forwarding, "-S",
+ 		socket_path, "-M", NULL);
+ 	if (ssh_config)
+ 		(void) append(argv, argc, "-F", ssh_config, host_name, NULL);
+@@ -292,12 +292,12 @@ start_connection(char *socket_path, Label *route_label, int http_port, const cha
+ 		return -1;
+ 
+ 	snprintf(tmp_path, sizeof(tmp_path), "mkdir " REMOTE_TMP_PATH, http_port);
+-	append(argv, 0, "ssh", "-S", socket_path, host_name, tmp_path, NULL);
++	append(argv, 0, "@ssh@", "-S", socket_path, host_name, tmp_path, NULL);
+ 	if (run(argv) != 0)
+ 		return -1;
+ 
+-	snprintf(cmd, PATH_MAX, "tar -cf - %s -C " REPLICATED_DIRECTORY " ./ | "
+-	   "exec ssh -q -S %s %s tar -xf - -C " REMOTE_TMP_PATH,
++	snprintf(cmd, PATH_MAX, "@tar@ -cf - %s -C " REPLICATED_DIRECTORY " ./ | "
++	   "exec @ssh@ -q -S %s %s tar -xf - -C " REMOTE_TMP_PATH,
+ 	    array_to_str(route_label->export_paths), socket_path, host_name,
+ 	    http_port);
+ 	if (system(cmd) != 0) {
+@@ -326,7 +326,7 @@ ssh_command_pipe(char *host_name, char *socket_path, Label *host_label, int http
+ 
+ 	/* construct ssh command */
+ 	argc = 0;
+-	argc = append(argv, argc, "ssh", "-T", "-S", socket_path, NULL);
++	argc = append(argv, argc, "@ssh@", "-T", "-S", socket_path, NULL);
+ 
+ 	(void) append(argv, argc, host_name, cmd, NULL);
+ 	return cmd_pipe_stdin(argv, host_label->content, host_label->content_size);
+@@ -344,7 +344,7 @@ ssh_command_tty(char *host_name, char *socket_path, Label *host_label, int http_
+ 	    http_port);
+ 	/* construct ssh command */
+ 	argc = 0;
+-	argc = append(argv, argc, "ssh", "-T", "-S", socket_path, NULL);
++	argc = append(argv, argc, "@ssh@", "-T", "-S", socket_path, NULL);
+ 	(void) append(argv, argc, host_name, cmd, NULL);
+ 	cmd_pipe_stdin(argv, host_label->content, host_label->content_size);
+ 
+@@ -360,7 +360,7 @@ ssh_command_tty(char *host_name, char *socket_path, Label *host_label, int http_
+ 
+ 	/* construct ssh command */
+ 	argc = 0;
+-	argc = append(argv, argc, "ssh", "-t", "-S", socket_path, NULL);
++	argc = append(argv, argc, "@ssh@", "-t", "-S", socket_path, NULL);
+ 
+ 	(void) append(argv, argc, host_name, cmd, NULL);
+ 	return run(argv);
+@@ -375,11 +375,11 @@ end_connection(char *socket_path, char *host_name, int http_port) {
+ 		return;
+ 
+ 	snprintf(tmp_path, sizeof(tmp_path), REMOTE_TMP_PATH, http_port);
+-	append(argv, 0, "ssh", "-S", socket_path, host_name, "rm", "-rf", tmp_path , NULL);
++	append(argv, 0, "@ssh@", "-S", socket_path, host_name, "rm", "-rf", tmp_path , NULL);
+ 	if (run(argv) != 0)
+ 		warn("remote tmp dir");
+ 
+-	append(argv, 0, "ssh", "-q", "-S", socket_path, "-O", "exit", host_name, NULL);
++	append(argv, 0, "@ssh@", "-q", "-S", socket_path, "-O", "exit", host_name, NULL);
+ 	if (run(argv) != 0)
+ 		warn("exec ssh -O exit");
+ }
+diff --git a/rset.c b/rset.c
+index 383fc82..9c20f65 100644
+--- a/rset.c
++++ b/rset.c
+@@ -128,10 +128,8 @@ int main(int argc, char *argv[])
+ 		hostnames[i] = argv[optind+i];
+ 	hostnames[i] = NULL;
+ 
+-	if ((rinstall_bin = findprog("rinstall")) == 0)
+-		not_found("rinstall");
+-	if ((rsub_bin = findprog("rsub")) == 0)
+-		not_found("rsub");
++  rinstall_bin = "@rinstall@";
++  rsub_bin = "@rsub@";
+ 
+ 	/* all operations must be relative to the routes file */
+ 	if (realpath(xdirname(routes_file), routes_realpath) == NULL)
+@@ -159,10 +157,9 @@ int main(int argc, char *argv[])
+ 
+ 	/* Convert http server command line into a vector */
+ 	inputstring = malloc(PATH_MAX);
+-	snprintf(inputstring, PATH_MAX, "miniquark -p %d -d " PUBLIC_DIRECTORY, http_port);
++	snprintf(inputstring, PATH_MAX, "@miniquark@ -p %d -d " PUBLIC_DIRECTORY, http_port);
+ 	str_to_array(http_srv_argv, inputstring, sizeof(http_srv_argv));
+-	if ((httpd_bin = findprog(http_srv_argv[0])) == 0)
+-		not_found(http_srv_argv[0]);
++	httpd_bin = "@miniquark@";
+ 
+ 	/* start the web server */
+ 	pipe(stdout_pipe);
+@@ -397,7 +394,7 @@ handle_exit(int sig) {
+ 		printf("caught signal %d, terminating connection to '%s'\n", sig,
+ 			hostname);
+ 		/* clean up socket and SSH connection; leaving staging dir */
+-		execlp("ssh", "ssh", "-S", socket_path, "-O", "exit", hostname, NULL);
++		execlp("@ssh@", "@ssh@", "-S", socket_path, "-O", "exit", hostname, NULL);
+ 		err(1, "ssh -O exit");
+ 	}
+ }
+diff --git a/rutils.c b/rutils.c
+index 1e182d8..9aef76d 100644
+--- a/rutils.c
++++ b/rutils.c
+@@ -77,7 +77,7 @@ install_if_new(const char *src, const char *dst) {
+ 
+ 	pid = fork();
+ 	if (pid == 0) {
+-		if (execl("/usr/bin/install", "/usr/bin/install", src, dst, NULL) != -1)
++		if (execl("@install@", "@install@", src, dst, NULL) != -1)
+ 			err(1, "%s", dst);
+ 	}
+ 	waitpid(pid, &status, 0);
diff --git a/pkgs/tools/admin/s3bro/default.nix b/pkgs/tools/admin/s3bro/default.nix
index 154b4aae966..35cf7b11e64 100644
--- a/pkgs/tools/admin/s3bro/default.nix
+++ b/pkgs/tools/admin/s3bro/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3Packages }:
+{ lib, python3Packages }:
 
 python3Packages.buildPythonPackage rec {
   pname = "s3bro";
@@ -14,7 +14,7 @@ python3Packages.buildPythonPackage rec {
   # No tests
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A handy s3 cli tool";
     homepage = "https://github.com/rsavordelli/s3bro";
     license = licenses.mit;
diff --git a/pkgs/tools/admin/salt/default.nix b/pkgs/tools/admin/salt/default.nix
index 35d65b5e657..0620bb28534 100644
--- a/pkgs/tools/admin/salt/default.nix
+++ b/pkgs/tools/admin/salt/default.nix
@@ -7,11 +7,11 @@
 }:
 python3.pkgs.buildPythonApplication rec {
   pname = "salt";
-  version = "3001.1";
+  version = "3003.1";
 
   src = python3.pkgs.fetchPypi {
     inherit pname version;
-    sha256 = "1g2sdcibir0zhldmngv1iyzlhh2adq9dqjc73grap3df5zcv9sz9";
+    sha256 = "inGE095NFydhjw0/u6eeVDia7/hbcvTOuCALzBZ/br4=";
   };
 
   propagatedBuildInputs = with python3.pkgs; [
@@ -23,7 +23,7 @@ python3.pkgs.buildPythonApplication rec {
     pyyaml
     pyzmq
     requests
-    tornado_4
+    tornado
   ] ++ extraInputs;
 
   patches = [ ./fix-libcrypto-loading.patch ];
@@ -31,6 +31,8 @@ python3.pkgs.buildPythonApplication rec {
   postPatch = ''
     substituteInPlace "salt/utils/rsax931.py" \
       --subst-var-by "libcrypto" "${openssl.out}/lib/libcrypto.so"
+    substituteInPlace requirements/base.txt \
+      --replace contextvars ""
   '';
 
   # The tests fail due to socket path length limits at the very least;
@@ -39,9 +41,10 @@ python3.pkgs.buildPythonApplication rec {
   doCheck = false;
 
   meta = with lib; {
-    homepage = "https://saltstack.com/";
+    homepage = "https://saltproject.io/";
+    changelog = "https://docs.saltproject.io/en/latest/topics/releases/${version}.html";
     description = "Portable, distributed, remote execution and configuration management system";
-    maintainers = with maintainers; [ aneeshusa ];
+    maintainers = with maintainers; [ Flakebi ];
     license = licenses.asl20;
   };
 }
diff --git a/pkgs/tools/admin/salt/pepper/default.nix b/pkgs/tools/admin/salt/pepper/default.nix
index e2cfa806f95..31cb2861f39 100644
--- a/pkgs/tools/admin/salt/pepper/default.nix
+++ b/pkgs/tools/admin/salt/pepper/default.nix
@@ -1,19 +1,19 @@
 { lib
-, pythonPackages
+, python3Packages
 , salt
 }:
 
-pythonPackages.buildPythonApplication rec {
+python3Packages.buildPythonApplication rec {
   pname = "salt-pepper";
   version = "0.7.5";
-  src = pythonPackages.fetchPypi {
+  src = python3Packages.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
+  buildInputs = with python3Packages; [ setuptools setuptools-scm salt ];
+  checkInputs = with python3Packages; [
+    pytest mock pyzmq pytest-rerunfailures pytest-cov cherrypy tornado
   ];
 
   meta = with lib; {
@@ -21,5 +21,6 @@ pythonPackages.buildPythonApplication rec {
     homepage = "https://github.com/saltstack/pepper";
     maintainers = [ maintainers.pierrer ];
     license = licenses.asl20;
+    broken = true; # ModuleNotFoundError: No module named 'pytestsalt'
   };
 }
diff --git a/pkgs/tools/admin/scaleway-cli/default.nix b/pkgs/tools/admin/scaleway-cli/default.nix
index a174937e5a1..2a8f0d1f114 100644
--- a/pkgs/tools/admin/scaleway-cli/default.nix
+++ b/pkgs/tools/admin/scaleway-cli/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, buildGoPackage }:
+{ lib, fetchFromGitHub, buildGoPackage }:
 
 buildGoPackage rec {
   pname = "scaleway-cli";
@@ -13,7 +13,7 @@ buildGoPackage rec {
     sha256 = "14likzp3hl04nq9nmpmh9m5zqjyspy5cyk20dkh03c1nhkd4vcnx";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Interact with Scaleway API from the command line";
     homepage = "https://github.com/scaleway/scaleway-cli";
     license = licenses.mit;
diff --git a/pkgs/tools/admin/sec/default.nix b/pkgs/tools/admin/sec/default.nix
index b082f61f875..0afac976d09 100644
--- a/pkgs/tools/admin/sec/default.nix
+++ b/pkgs/tools/admin/sec/default.nix
@@ -1,12 +1,13 @@
-{ fetchFromGitHub, perl, stdenv }:
+{ fetchFromGitHub, perl, lib, stdenv }:
 
 stdenv.mkDerivation rec {
-  name = "sec-${meta.version}";
+  pname = "sec";
+  version = "2.8.3";
 
   src = fetchFromGitHub {
     owner = "simple-evcorr";
     repo = "sec";
-    rev = meta.version;
+    rev = version;
     sha256 = "0ryic5ilj1i5l41440i0ss6j3yv796fz3gr0qij5pqyd1z21md83";
   };
 
@@ -23,10 +24,9 @@ stdenv.mkDerivation rec {
 
   meta = {
     homepage = "https://simple-evcorr.github.io";
-    license = stdenv.lib.licenses.gpl2;
+    license = lib.licenses.gpl2;
     description = "Simple Event Correlator";
-    maintainers = [ stdenv.lib.maintainers.tv ];
-    platforms = stdenv.lib.platforms.all;
-    version = "2.8.3";
+    maintainers = [ lib.maintainers.tv ];
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/admin/sewer/default.nix b/pkgs/tools/admin/sewer/default.nix
index 471a8788a95..a6f511fe115 100644
--- a/pkgs/tools/admin/sewer/default.nix
+++ b/pkgs/tools/admin/sewer/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3Packages }:
+{ lib, python3Packages }:
 
 python3Packages.buildPythonApplication rec {
   pname = "sewer";
@@ -11,7 +11,7 @@ python3Packages.buildPythonApplication rec {
 
   propagatedBuildInputs = with python3Packages; [ pyopenssl requests tldextract ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/komuw/sewer";
     description = "ACME client";
     license = licenses.mit;
diff --git a/pkgs/tools/admin/simp_le/default.nix b/pkgs/tools/admin/simp_le/default.nix
index 6ff547ab532..88b0e614773 100644
--- a/pkgs/tools/admin/simp_le/default.nix
+++ b/pkgs/tools/admin/simp_le/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3Packages, bash }:
+{ lib, python3Packages, bash }:
 
 python3Packages.buildPythonApplication rec {
   pname = "simp_le-client";
@@ -20,9 +20,11 @@ python3Packages.buildPythonApplication rec {
     $out/bin/simp_le --test
   '';
 
-  propagatedBuildInputs = with python3Packages; [ acme setuptools_scm josepy idna ];
+  propagatedBuildInputs = with python3Packages; [ acme setuptools-scm josepy idna ];
 
-  meta = with stdenv.lib; {
+  checkInputs = with python3Packages; [ mock ];
+
+  meta = with lib; {
     homepage = "https://github.com/zenhack/simp_le";
     description = "Simple Let's Encrypt client";
     license = licenses.gpl3;
diff --git a/pkgs/tools/admin/ssh-import-id/default.nix b/pkgs/tools/admin/ssh-import-id/default.nix
index 77d30e56d5f..031bb316ca5 100644
--- a/pkgs/tools/admin/ssh-import-id/default.nix
+++ b/pkgs/tools/admin/ssh-import-id/default.nix
@@ -1,23 +1,25 @@
 { buildPythonPackage
-, stdenv
+, lib
 , fetchgit
 , requests
+, distro
 , makeWrapper
 , extraHandlers ? []
 }:
 
 buildPythonPackage rec {
   pname = "ssh-import-id";
-  version = "5.8";
+  version = "5.11";
 
   src = fetchgit {
     url = "https://git.launchpad.net/ssh-import-id";
     rev = version;
-    sha256 = "0l9gya1hyf2qfidlmvg2cgfils1fp9rn5r8sihwvx4qfsfp5yaak";
+    sha256 = "sha256-tYbaJGH59qyvjp4kwo3ZFVs0EaE0Lsd2CQ6iraFkAdI=";
   };
 
   propagatedBuildInputs = [
     requests
+    distro
   ] ++ extraHandlers;
 
   nativeBuildInputs = [
@@ -27,7 +29,7 @@ buildPythonPackage rec {
   # handlers require main bin, main bin requires handlers
   makeWrapperArgs = [ "--prefix" ":" "$out/bin" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Retrieves an SSH public key and installs it locally";
     license = licenses.gpl3;
     maintainers = with maintainers; [ mkg20001 ];
diff --git a/pkgs/tools/admin/ssl-cert-check/default.nix b/pkgs/tools/admin/ssl-cert-check/default.nix
index b94d77bdf70..c314c304aec 100644
--- a/pkgs/tools/admin/ssl-cert-check/default.nix
+++ b/pkgs/tools/admin/ssl-cert-check/default.nix
@@ -1,38 +1,41 @@
-{ stdenv
+{ lib
+, stdenv
+, coreutils
 , fetchFromGitHub
-, makeWrapper
-, openssl
-, which
+, findutils
+, gawk
 , gnugrep
 , gnused
-, gawk
+, makeWrapper
 , mktemp
-, coreutils
-, findutils
+, openssl
+, which
 }:
 
 stdenv.mkDerivation rec {
   pname = "ssl-cert-check";
-  version = "3.31";
+  version = "4.14";
 
   src = fetchFromGitHub {
     owner = "Matty9191";
     repo = pname;
-    rev = "698c1996d05152cfaf2a1a3df4cc70482411fac8";
-    sha256 = "0jvi9phs0ngfwrj9zixb03v9byavbwxx8xkp0h5m98qppn1kvl3n";
+    rev = "4056ceeab5abc0e39f4e0ea40cd54147253a3369";
+    sha256 = "07k2n4l68hykraxvy030djc208z8rqff3kc7wy4ib9g6qj7s4mif";
   };
 
-  nativeBuildInputs = [ makeWrapper ];
+  nativeBuildInputs = [
+    makeWrapper
+  ];
 
   buildInputs = [
-    openssl
-    which
-    gnugrep
-    mktemp
-    gawk
-    gnused
     coreutils
     findutils
+    gawk
+    gnugrep
+    gnused
+    mktemp
+    openssl
+    which
   ];
 
   prePatch = ''
@@ -43,15 +46,14 @@ stdenv.mkDerivation rec {
     mkdir -p $out/bin
     cp $pname $out/bin/$pname
     wrapProgram $out/bin/$pname \
-      --set PATH "${stdenv.lib.makeBinPath buildInputs}"
+      --set PATH "${lib.makeBinPath buildInputs}"
   '';
 
-  meta = with stdenv.lib; {
-    description = "a Bourne shell script that can be used to report on expiring SSL certificates";
+  meta = with lib; {
+    description = "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 ];
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ryantm ];
     platforms = platforms.linux;
   };
-
 }
diff --git a/pkgs/tools/admin/ssmsh/default.nix b/pkgs/tools/admin/ssmsh/default.nix
new file mode 100644
index 00000000000..3ed29af25fd
--- /dev/null
+++ b/pkgs/tools/admin/ssmsh/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ssmsh";
+  version = "1.4.5";
+
+  src = fetchFromGitHub {
+    owner = "bwhaley";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-WZ2glv/f4LwTK/G8QdaVRIAHvgGLPLPL8xjAg/kUokQ=";
+  };
+
+  vendorSha256 = "sha256-17fmdsfOrOaySPsXofLzz0+vmiemg9MbnWhRoZ67EuQ=";
+
+  doCheck = true;
+
+  buildFlagsArray = [ "-ldflags=-w -s -X main.Version=${version}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/bwhaley/ssmsh";
+    description = "An interactive shell for AWS Parameter Store";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dbirks ];
+  };
+}
diff --git a/pkgs/tools/admin/stripe-cli/default.nix b/pkgs/tools/admin/stripe-cli/default.nix
new file mode 100644
index 00000000000..13620d164e6
--- /dev/null
+++ b/pkgs/tools/admin/stripe-cli/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "stripe-cli";
+  version = "1.5.12";
+
+  src = fetchFromGitHub {
+    owner = "stripe";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-eMxukwaJqsXL0+Euvk5mM+pcAsT3GsF9filuyRL4tXg=";
+  };
+
+  vendorSha256 = "sha256-e7EZ5o30vDpS904/R1y7/Mds7HxQNmsIftrnc1Bj2bc=";
+
+  subPackages = [
+    "cmd/stripe"
+  ];
+
+  meta = with lib; {
+    homepage = "https://stripe.com/docs/stripe-cli";
+    description = "A command-line tool for Stripe";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ RaghavSood ];
+  };
+}
diff --git a/pkgs/tools/admin/swiftclient/default.nix b/pkgs/tools/admin/swiftclient/default.nix
index 91860d2df08..512a7f62092 100644
--- a/pkgs/tools/admin/swiftclient/default.nix
+++ b/pkgs/tools/admin/swiftclient/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonApplication rec {
   pname = "python-swiftclient";
-  version = "3.9.0";
+  version = "3.11.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0xx3v5kk8jp352rydy3jxndy1b9kl2zmkj1gi14fjxjc5r4rf82g";
+    sha256 = "3972f8b1986e60ea786ad01697e6882f331209ae947ef8b795531940f1e0732b";
   };
 
   propagatedBuildInputs = [ requests six pbr setuptools ];
diff --git a/pkgs/tools/admin/tigervnc/default.nix b/pkgs/tools/admin/tigervnc/default.nix
index 0bb291d797b..1ef584ec977 100644
--- a/pkgs/tools/admin/tigervnc/default.nix
+++ b/pkgs/tools/admin/tigervnc/default.nix
@@ -1,45 +1,43 @@
-{ stdenv, fetchFromGitHub
+{ lib, stdenv, fetchFromGitHub
 , xorg, xkeyboard_config, zlib
 , libjpeg_turbo, pixman, fltk
-, fontDirectories
 , cmake, gettext, libtool
 , libGLU
 , gnutls, pam, nettle
 , xterm, openssh, perl
-, makeWrapper}:
+, makeWrapper
+, nixosTests
+}:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
-  version = "1.10.1";
+  version = "1.11.0";
   pname = "tigervnc";
 
   src = fetchFromGitHub {
     owner = "TigerVNC";
     repo = "tigervnc";
-    rev = "v1.10.1";
-    sha256 = "001n189d2f3psn7nxgl8188ml6f7jbk26cxn2835y3mnlk5lmhgr";
+    rev = "v${version}";
+    sha256 = "sha256-IX39oEhTyk7NV+9dD9mFtes22fBdMTAVIv5XkqFK560=";
   };
 
-  inherit fontDirectories;
-
-  patches = [ ./u_xorg-server-1.20.7-ddxInputThreadInit.patch ];
 
   postPatch = ''
-    sed -i -e '/^\$cmd \.= " -pn";/a$cmd .= " -xkbdir ${xkeyboard_config}/etc/X11/xkb";' unix/vncserver
+    sed -i -e '/^\$cmd \.= " -pn";/a$cmd .= " -xkbdir ${xkeyboard_config}/etc/X11/xkb";' unix/vncserver/vncserver.in
     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;
 
+  cmakeFlags = [
+    "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}"
+    "-DCMAKE_INSTALL_SBINDIR=${placeholder "out"}/bin"
+    "-DCMAKE_INSTALL_LIBEXECDIR=${placeholder "out"}/bin"
+  ];
+
   postBuild = ''
     export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -Wno-error=int-to-pointer-cast -Wno-error=pointer-to-int-cast"
     export CXXFLAGS="$CXXFLAGS -fpermissive"
@@ -76,7 +74,7 @@ stdenv.mkDerivation rec {
     rm -f $out/lib/xorg/protocol.txt
 
     wrapProgram $out/bin/vncserver \
-      --prefix PATH : ${stdenv.lib.makeBinPath (with xorg; [ xterm twm xsetroot xauth ]) }
+      --prefix PATH : ${lib.makeBinPath (with xorg; [ xterm twm xsetroot xauth ]) }
   '';
 
   buildInputs = with xorg; [
@@ -93,14 +91,14 @@ stdenv.mkDerivation rec {
 
   propagatedBuildInputs = xorg.xorgserver.propagatedBuildInputs;
 
-  enableParallelBuilding = true;
+  passthru.tests.tigervnc = nixosTests.vnc.testTigerVNC;
 
   meta = {
     homepage = "https://tigervnc.org/";
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
     description = "Fork of tightVNC, made in cooperation with VirtualGL";
-    maintainers = with stdenv.lib.maintainers; [viric];
-    platforms = with stdenv.lib.platforms; linux;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
     # Prevent a store collision.
     priority = 4;
   };
diff --git a/pkgs/tools/admin/tigervnc/u_xorg-server-1.20.7-ddxInputThreadInit.patch b/pkgs/tools/admin/tigervnc/u_xorg-server-1.20.7-ddxInputThreadInit.patch
deleted file mode 100644
index c18f4bf213f..00000000000
--- a/pkgs/tools/admin/tigervnc/u_xorg-server-1.20.7-ddxInputThreadInit.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Origin: https://build.opensuse.org/package/view_file/X11:XOrg/tigervnc/u_xorg-server-1.20.7-ddxInputThreadInit.patch
-diff -u -p -r tigervnc-1.10.0.old/unix/xserver/hw/vnc/xvnc.c tigervnc-1.10.0/unix/xserver/hw/vnc/xvnc.c
---- tigervnc-1.10.0.old/unix/xserver/hw/vnc/xvnc.c	2020-01-15 11:19:19.486731848 +0000
-+++ tigervnc-1.10.0/unix/xserver/hw/vnc/xvnc.c	2020-01-15 11:37:33.275445409 +0000
-@@ -295,6 +295,15 @@ void ddxBeforeReset(void)
- }
- #endif
- 
-+#if INPUTTHREAD
-+/** This function is called in Xserver/os/inputthread.c when starting
-+    the input thread. */
-+void
-+ddxInputThreadInit(void)
-+{
-+}
-+#endif
-+
- void ddxUseMsg(void)
- {
-     vncPrintBanner();
-
diff --git a/pkgs/tools/admin/tightvnc/default.nix b/pkgs/tools/admin/tightvnc/default.nix
index 7dc416c8efd..1bfb3be113d 100644
--- a/pkgs/tools/admin/tightvnc/default.nix
+++ b/pkgs/tools/admin/tightvnc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, xlibsWrapper, zlib, libjpeg, imake, gccmakedep, libXmu
+{ lib, stdenv, fetchurl, xlibsWrapper, zlib, libjpeg, imake, gccmakedep, libXmu
 , libXaw, libXpm, libXp , perl, xauth, fontDirectories, openssh }:
 
 stdenv.mkDerivation {
@@ -68,7 +68,7 @@ stdenv.mkDerivation {
   '';
 
   meta = {
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
     homepage = "http://vnc-tight.sourceforge.net/";
     description = "Improved version of VNC";
 
@@ -80,6 +80,6 @@ stdenv.mkDerivation {
     '';
 
     maintainers = [];
-    platforms = stdenv.lib.platforms.unix;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/admin/trivy/default.nix b/pkgs/tools/admin/trivy/default.nix
new file mode 100644
index 00000000000..50ca76f0d6d
--- /dev/null
+++ b/pkgs/tools/admin/trivy/default.nix
@@ -0,0 +1,44 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "trivy";
+  version = "0.19.2";
+
+  src = fetchFromGitHub {
+    owner = "aquasecurity";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-aYPG0xvuijASKXBGgB+6UyF9bmeU8l5snOoPWI8Ewh8=";
+  };
+
+  vendorSha256 = "sha256-4FO6/1eNyxy/CH7XMUkLfRqEg2+XUXL1gKleL6o4EoM=";
+
+  excludedPackages = "misc";
+
+  preBuild = ''
+    buildFlagsArray+=("-ldflags" "-s -w -X main.version=v${version}")
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/trivy --help
+    $out/bin/trivy --version | grep "v${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/aquasecurity/trivy";
+    changelog = "https://github.com/aquasecurity/trivy/releases/tag/v${version}";
+    description = "A simple and comprehensive vulnerability scanner for containers, suitable for CI";
+    longDescription = ''
+      Trivy is a simple and comprehensive vulnerability scanner for containers
+      and other artifacts. A software vulnerability is a glitch, flaw, or
+      weakness present in the software or in an Operating System. Trivy detects
+      vulnerabilities of OS packages (Alpine, RHEL, CentOS, etc.) and
+      application dependencies (Bundler, Composer, npm, yarn, etc.).
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+  };
+}
diff --git a/pkgs/tools/admin/turbovnc/default.nix b/pkgs/tools/admin/turbovnc/default.nix
new file mode 100644
index 00000000000..c0af38e10f3
--- /dev/null
+++ b/pkgs/tools/admin/turbovnc/default.nix
@@ -0,0 +1,115 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, nixosTests
+
+# Dependencies
+, cmake
+, libjpeg_turbo
+, makeWrapper
+, mesa # for built-in 3D software rendering using swrast
+, openjdk # for the client with Java GUI
+, openjdk_headless # for the server
+, openssh
+, openssl
+, pam
+, perl
+, which
+, xkbcomp
+, xkeyboard_config
+, xorg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "turbovnc";
+  version = "2.2.6";
+
+  src = fetchFromGitHub {
+    owner = "TurboVNC";
+    repo = "turbovnc";
+    rev = version;
+    sha256 = "sha256-HSppHPBBkTf+88ZBaYG6JK4A/5lOBCxPFv6898TD7PE=";
+  };
+
+  # TODO:
+  # * Build outputs that are unclear:
+  #   * `-- FONT_ENCODINGS_DIRECTORY = /var/empty/share/X11/fonts/encodings`
+  #     Maybe relevant what the tigervnc and tightvnc derivations
+  #     do with their `fontDirectories`?
+  #   * `SERVER_MISC_CONFIG_PATH = /var/empty/lib64/xorg`
+  #   * The thing about xorg `protocol.txt`
+  # * Does SSH support require `openssh` on PATH?
+  # * Add `enableClient ? true` flag that disables the client GUI
+  #   so that the server can be built without openjdk dependency.
+  # * Perhaps allow to build the client on non-Linux platforms.
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+    openjdk_headless
+  ];
+
+  buildInputs = [
+    libjpeg_turbo
+    openssl
+    pam
+    perl
+  ] ++ (with xorg; [
+    libSM
+    libX11
+    libXext
+    libXi
+    xorgproto
+  ]);
+
+  cmakeFlags = [
+    # For the 3D software rendering built into TurboVNC, pass the path
+    # to the swrast dri driver in Mesa.
+    # Can also be given at runtime to its `Xvnc` as:
+    #   -dridir /nix/store/...-mesa-20.1.10-drivers/lib/dri/
+    "-DDRI_DRIVER_PATH=${mesa.drivers}/lib/dri"
+    # The build system doesn't find these files automatically.
+    "-DTJPEG_JAR=${libjpeg_turbo.out}/share/java/turbojpeg.jar"
+    "-DTJPEG_JNILIBRARY=${libjpeg_turbo.out}/lib/libturbojpeg.so"
+    "-DXKB_BASE_DIRECTORY=${xkeyboard_config}/share/X11/xkb"
+    "-DXKB_BIN_DIRECTORY=${xkbcomp}/bin"
+  ];
+
+  postInstall = ''
+    # turbovnc dlopen()s libssl.so depending on the requested encryption.
+    wrapProgram $out/bin/Xvnc \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ openssl ]}
+
+    # `twm` is the default window manager that `vncserver` tries to start,
+    # and it has minimal dependencies (no non-Xorg).
+    # (This default is written by `vncserver` to `~/.vnc/xstartup.turbovnc`,
+    # see https://github.com/TurboVNC/turbovnc/blob/ffdb57d9/unix/vncserver.in#L201.)
+    # It checks for it using `which twm`.
+    wrapProgram $out/bin/vncserver \
+      --prefix PATH : ${lib.makeBinPath [ which xorg.twm ]}
+
+    # Patch /usr/bin/perl
+    patchShebangs $out/bin/vncserver
+
+    # vncserver needs `xauth`
+    wrapProgram $out/bin/vncserver \
+      --prefix PATH : ${lib.makeBinPath (with xorg; [ xauth ])}
+
+    # The viewer is in Java and requires `JAVA_HOME` (which is a single
+    # path, cannot be multiple separated paths).
+    # For SSH support, `ssh` is required on `PATH`.
+    wrapProgram $out/bin/vncviewer \
+      --set JAVA_HOME "${lib.makeLibraryPath [ openjdk ]}/openjdk" \
+      --prefix PATH : ${lib.makeBinPath [ openssh ]}
+  '';
+
+  passthru.tests.turbovnc-headless-server = nixosTests.turbovnc-headless-server;
+
+  meta = {
+    homepage = "https://turbovnc.org/";
+    license = lib.licenses.gpl2Plus;
+    description = "High-speed version of VNC derived from TightVNC";
+    maintainers = with lib.maintainers; [ nh2 ];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/pkgs/tools/admin/virtscreen/default.nix b/pkgs/tools/admin/virtscreen/default.nix
index 3c5fb64f722..a1558248f80 100644
--- a/pkgs/tools/admin/virtscreen/default.nix
+++ b/pkgs/tools/admin/virtscreen/default.nix
@@ -1,4 +1,12 @@
-{ stdenv, fetchFromGitHub, python3Packages, x11vnc, xrandr, libGL }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3Packages
+, x11vnc
+, xrandr
+, libGL
+, qt5
+}:
 
 python3Packages.buildPythonApplication rec {
   pname = "virtscreen";
@@ -16,6 +24,8 @@ python3Packages.buildPythonApplication rec {
     sha256 = "005qach6phz8w17k8kqmyd647c6jkfybczybxq0yxi5ik0s91a08";
   };
 
+  nativeBuildInputs = [ qt5.wrapQtAppsHook ];
+
   propagatedBuildInputs = with python3Packages; [
     netifaces
     pyqt5
@@ -24,13 +34,20 @@ python3Packages.buildPythonApplication rec {
     xrandr
   ];
 
-  postPatch = let
-    ext = stdenv.hostPlatform.extensions.sharedLibrary; in ''
+  dontWrapQtApps = true;
+
+  makeWrapperArgs = [
+    "\${qtWrapperArgs[@]}"
+    # import Qt.labs.platform failed without this
+    "--prefix QML2_IMPORT_PATH : ${qt5.qtquickcontrols2.bin}/${qt5.qtbase.qtQmlPrefix}"
+  ];
+
+  postPatch = ''
     substituteInPlace virtscreen/__main__.py \
-      --replace "'GL'" "'${libGL}/lib/libGL${ext}'" \
+      --replace "'GL'" "'${libGL}/lib/libGL${stdenv.hostPlatform.extensions.sharedLibrary}'" \
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Make your iPad/tablet/computer as a secondary monitor on Linux";
     homepage = "https://github.com/kbumsik/VirtScreen";
     license = licenses.gpl3;
diff --git a/pkgs/tools/admin/vncdo/default.nix b/pkgs/tools/admin/vncdo/default.nix
deleted file mode 100644
index 5ca633a944b..00000000000
--- a/pkgs/tools/admin/vncdo/default.nix
+++ /dev/null
@@ -1,33 +0,0 @@
-{ 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/pkgs/tools/archivers/7zz/default.nix b/pkgs/tools/archivers/7zz/default.nix
new file mode 100644
index 00000000000..63e60335340
--- /dev/null
+++ b/pkgs/tools/archivers/7zz/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchurl, autoPatchelfHook }:
+
+let platform =       if stdenv.isi686    then "x86"
+                else if stdenv.isx86_64  then "x64"
+                else if stdenv.isAarch32 then "arm"
+                else if stdenv.isAarch64 then "arm64"
+                else throw "Unsupported architecture";
+
+    url = "https://7-zip.org/a/7z2101-linux-${platform}.tar.xz";
+
+    hashes = {
+      x86 = "0k6vg85ld8i2pcv5sv3xbvf3swqh9qj8hf2jcpadssys3yyidqyj";
+      x64 = "1yfanx98fizj8d2s87yxgsy30zydx7h5w9wf4wy3blgsp0vkbjb3";
+      arm = "04iah9vijm86r8rbkhxig86fx3lpag4xi7i3vq7gfrlwkymclhm1";
+      arm64 = "0a26ginpb22aydcyvffxpbi7lxh4sgs9gb6cj96qqx7cnf7bk2ri";
+    };
+    sha256 = hashes."${platform}";
+
+in stdenv.mkDerivation {
+  pname = "7zz";
+  version = "21.01";
+
+  src = fetchurl { inherit url sha256; };
+  sourceRoot = ".";
+
+  nativeBuildInputs = [ autoPatchelfHook ];
+  buildInputs = [ stdenv.cc.cc.lib ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -D -t $out/bin 7zz
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Command line archiver utility";
+    homepage = "https://www.7-zip.org";
+
+    # source not released yet. will be under LGPL 2.1+ with RAR exception
+    license = licenses.unfree;
+
+    platforms = [ "i686-linux" "x86_64-linux" "aarch64-linux" "armv7l-linux" ];
+    maintainers = with maintainers; [ anna328p ];
+  };
+}
diff --git a/pkgs/tools/archivers/afio/default.nix b/pkgs/tools/archivers/afio/default.nix
index 3b4eb6a5ea5..7ef374b5bfe 100644
--- a/pkgs/tools/archivers/afio/default.nix
+++ b/pkgs/tools/archivers/afio/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub } :
+{ lib, stdenv, fetchFromGitHub } :
 
 stdenv.mkDerivation rec {
   version = "2.5.2";
@@ -22,12 +22,12 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://github.com/kholtman/afio";
     description = "Fault tolerant cpio archiver targeting backups";
-    platforms = stdenv.lib.platforms.all;
+    platforms = 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;
+    license = lib.licenses.free;
   };
 }
diff --git a/pkgs/tools/archivers/arc_unpacker/default.nix b/pkgs/tools/archivers/arc_unpacker/default.nix
new file mode 100644
index 00000000000..edf67f2f963
--- /dev/null
+++ b/pkgs/tools/archivers/arc_unpacker/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchFromGitHub, cmake, makeWrapper, boost, libpng, libiconv
+, libjpeg, zlib, openssl, libwebp, catch }:
+
+stdenv.mkDerivation rec {
+  pname = "arc_unpacker";
+  version = "unstable-2021-05-17";
+
+  src = fetchFromGitHub {
+    owner = "vn-tools";
+    repo = "arc_unpacker";
+    # Since the latest release (0.11) doesn't build, we've opened an upstream
+    # issue in https://github.com/vn-tools/arc_unpacker/issues/187 to ask if a
+    # a new release is upcoming
+    rev = "9c2781fcf3ead7641e873b65899f6abeeabb2fc8";
+    sha256 = "1xxrc9nww0rla3yh10z6glv05ax4rynwwbd0cdvkp7gyqzrv97xp";
+  };
+
+  nativeBuildInputs = [ cmake makeWrapper catch ];
+  buildInputs = [ boost libpng libjpeg zlib openssl libwebp ]
+    ++ lib.optionals stdenv.isDarwin [ libiconv ];
+
+  postPatch = ''
+    cp ${catch}/include/catch/catch.hpp tests/test_support/catch.h
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+
+    pushd ..
+    ./build/run_tests
+    popd
+
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/doc/arc_unpacker $out/libexec/arc_unpacker
+    cp arc_unpacker $out/libexec/arc_unpacker/arc_unpacker
+    cp ../GAMELIST.{htm,js} $out/share/doc/arc_unpacker
+    cp -r ../etc $out/libexec/arc_unpacker
+    makeWrapper $out/libexec/arc_unpacker/arc_unpacker $out/bin/arc_unpacker
+
+    runHook postInstall
+  '';
+
+  # A few tests fail on aarch64
+  doCheck = !stdenv.isAarch64;
+
+  meta = with lib; {
+    description = "A tool to extract files from visual novel archives";
+    homepage = "https://github.com/vn-tools/arc_unpacker";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ midchildan ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/archivers/arj/default.nix b/pkgs/tools/archivers/arj/default.nix
new file mode 100644
index 00000000000..e09e390fa47
--- /dev/null
+++ b/pkgs/tools/archivers/arj/default.nix
@@ -0,0 +1,150 @@
+{stdenv, lib, fetchurl, fetchpatch, autoreconfHook}:
+
+stdenv.mkDerivation rec {
+  pname = "arj";
+  version = "3.10.22";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1nx7jqxwqkihhdmdbahhzqhjqshzw1jcsvwddmxrwrn8rjdlr7jq";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/001_arches_align.patch";
+      sha256 = "0i3qclm2mh98c04rqpx1r4qagd3wpxlkj7lvq0ddpkmr8bm0fh0m";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/002_no_remove_static_const.patch";
+      sha256 = "0zfjqmjsj0y1kfzxbp29v6nxq5qwgazhb9clqc544sm5zn0bdp8n";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/003_64_bit_clean.patch";
+      sha256 = "0mda9fkaqf2s1xl6vlbkbq20362h3is9dpml9kfmacpbifl4dx3n";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/004_parallel_build.patch";
+      sha256 = "0gam6k7jknzmbjlf1r6c9kjh5s5h76pd31v59cnaqiycwiy8z6q9";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/005_use_system_strnlen.patch";
+      sha256 = "0q0ypm8mdsxd0rl1k0id6fdx5m7mvqgwcla4r250cmc6zqzpib6d";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/006_use_safe_strcpy.patch";
+      sha256 = "1garad95s34cix3kd77lz37andrcnz19glzkfdnkjaq7ldvzwikc";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/hurd_no_fcntl_getlk.patch";
+      sha256 = "0b3hpn4qypimrw9ar2n4h24886sl6pmim4lb4ly1wqcq0f73arva";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/security_format.patch";
+      sha256 = "0q67cvln55p38bm0xwd2cgppqmkp2nfar2pg1zj78f7ncn35lbvf";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/doc_refer_robert_k_jung.patch";
+      sha256 = "1wxdx0m6a9vdvjlaycwsissn75l1ni7grg8n6qmkynz2vrcvgzb1";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/gnu_build_fix.patch";
+      sha256 = "19ycp1rak7l6ql28m50v95ls621w3sl8agw5r5va73svkgh8hc3g";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/gnu_build_flags.patch";
+      sha256 = "1jw1y9i9lw1idgi4l9cycwsql1hcz1m4f3k2iybwsgx0acaw695q";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/gnu_build_strip.patch";
+      sha256 = "1b18khj6cxnjyqk2ycygwqlcs20hrsbf4h6bckl99dxnpbq5blxi";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/gnu_build_pie.patch";
+      sha256 = "1jqswxgc1plipblf055n9175fbanfi6fb67lnzk8dcvxjn227fs3";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/self_integrity_64bit.patch";
+      sha256 = "0s5zdq81a0f83hdg9hy6lqn3xvckx9y9r20awczm9mbf11vi01cb";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/security-afl.patch";
+      sha256 = "0yajcwpghij8wg21a0kkp3f9x7anz5m121jx2vnkyn04bvi9541a";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/security-traversal-dir.patch";
+      sha256 = "10lv3867k0wm2s0cyf40hkxfqbjaxm4aph5ivk2q2rjkracrn2y4";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/security-traversal-symlink.patch";
+      sha256 = "095pdfskxwh0jnyy31dpz10s2ppv8n7lvvn4q722y3g71d0c79qq";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/out-of-bounds-read.patch";
+      sha256 = "0ps9lqkbqzlhzr2bnr47sir431z1nywr7nagkmk42iki4d96v0jq";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/remove_build_date.patch";
+      sha256 = "1vjlfq6firxpj068l9acyqs77mfydn1rwgr2jmxgsy9mq0fw1dsc";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/reproducible_help_archive.patch";
+      sha256 = "0l3qi9f140pwc6fk8qdbxx4g9d8zlf45asimmr8wfpbi4pf59n8i";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/gnu_build_cross.patch";
+      sha256 = "1vb0vbh3jbxj192q47vg3f41l343ghcz2ypbrrm2bkbpwm5cl8qr";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/fix-time_t-usage.patch";
+      sha256 = "012c6pnf5y4jwn715kxn3vjy088rm905959j6yh8bslyx84qaijv";
+    })
+
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/a/arj/3.10.22-24/debian/patches/gnu_build_fix_autoreconf.patch";
+      sha256 = "0yhxbdasnbqcg1nyx2379fpbr7fmdlv4n2nlxrv1z1vbc7rlvw9d";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  preAutoreconf = ''
+    cd gnu
+  '';
+
+  postConfigure = ''
+    cd ..
+  '';
+
+  meta = with lib; {
+    description = "Open-source implementation of the world-famous ARJ archiver";
+    longDescription = ''
+      This version of ARJ has been created with an intent to preserve maximum
+      compatibility and retain the feature set of the original ARJ archiver as
+      provided by ARJ Software, Inc.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.sander ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/archivers/atool/default.nix b/pkgs/tools/archivers/atool/default.nix
index 0d24ead456a..419a7d04ee3 100644
--- a/pkgs/tools/archivers/atool/default.nix
+++ b/pkgs/tools/archivers/atool/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, perl, bash}:
+{lib, stdenv, fetchurl, perl, bash}:
 
 stdenv.mkDerivation {
   name = "atool-0.39.0";
@@ -13,7 +13,7 @@ stdenv.mkDerivation {
   meta = {
     homepage = "https://www.nongnu.org/atool";
     description = "Archive command line helper";
-    platforms = stdenv.lib.platforms.unix;
-    license = stdenv.lib.licenses.gpl3;
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl3;
   };
 }
diff --git a/pkgs/tools/archivers/bomutils/default.nix b/pkgs/tools/archivers/bomutils/default.nix
index fc68184be31..c4ff957135f 100644
--- a/pkgs/tools/archivers/bomutils/default.nix
+++ b/pkgs/tools/archivers/bomutils/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 }:
 
@@ -13,9 +13,12 @@ stdenv.mkDerivation rec {
     sha256 = "1i7nhbq1fcbrjwfg64znz8p4l7662f7qz2l6xcvwd5z93dnmgmdr";
   };
 
-  makeFlags = [ "PREFIX=$(out)" ];
+  makeFlags = [
+    "PREFIX=$(out)"
+    "CXX=${stdenv.cc.targetPrefix}c++"
+  ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/hogliux/bomutils";
     description = "Open source tools to create bill-of-materials files used in macOS installers";
     platforms = platforms.all;
diff --git a/pkgs/tools/archivers/cabextract/default.nix b/pkgs/tools/archivers/cabextract/default.nix
index 14c4ede5004..3ed07544bb2 100644
--- a/pkgs/tools/archivers/cabextract/default.nix
+++ b/pkgs/tools/archivers/cabextract/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "cabextract-1.9.1";
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "19qwhl2r8ip95q4vxzxg2kp4p125hjmc9762sns1dwwf7ikm7hmg";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.cabextract.org.uk/";
     description = "Free Software for extracting Microsoft cabinet files";
     platforms = platforms.all;
diff --git a/pkgs/tools/archivers/corearchiver/default.nix b/pkgs/tools/archivers/corearchiver/default.nix
new file mode 100644
index 00000000000..217520dde99
--- /dev/null
+++ b/pkgs/tools/archivers/corearchiver/default.nix
@@ -0,0 +1,33 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, libarchive, libarchive-qt, libcprime, cmake, ninja, }:
+
+mkDerivation rec {
+  pname = "corearchiver";
+  version = "4.2.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-FJGsQp1lbsrvlzKPiTv/FC9RH2+JRwwIvkLDTFW8t5s=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    libcprime
+    libarchive-qt
+    libarchive
+  ];
+
+  meta = with lib; {
+    description = "Archiver from the C Suite to create and extract archives";
+    homepage = "https://gitlab.com/cubocore/coreapps/corearchiver";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/archivers/cpio/default.nix b/pkgs/tools/archivers/cpio/default.nix
index a196ddcaa30..5b88e10b1c3 100644
--- a/pkgs/tools/archivers/cpio/default.nix
+++ b/pkgs/tools/archivers/cpio/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 let
   version = "2.13";
@@ -17,7 +17,7 @@ in stdenv.mkDerivation {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.gnu.org/software/cpio/";
     description = "A program to create or extract from cpio archives";
     license = licenses.gpl3;
diff --git a/pkgs/tools/archivers/cromfs/default.nix b/pkgs/tools/archivers/cromfs/default.nix
index e0eb11aa9a6..bed0485e44a 100644
--- a/pkgs/tools/archivers/cromfs/default.nix
+++ b/pkgs/tools/archivers/cromfs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, fuse, perl }:
+{ lib, stdenv, fetchurl, pkg-config, fuse, perl }:
 
 stdenv.mkDerivation rec {
   name = "cromfs-1.5.10.2";
@@ -18,10 +18,10 @@ stdenv.mkDerivation rec {
     install util/unmkcromfs $out/bin
   '';
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ fuse perl ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "FUSE Compressed ROM filesystem with lzma";
     homepage = "https://bisqwit.iki.fi/source/cromfs.html";
     license = licenses.gpl3;
diff --git a/pkgs/tools/archivers/ctrtool/default.nix b/pkgs/tools/archivers/ctrtool/default.nix
index 97abeadffc0..4743f7ded3e 100644
--- a/pkgs/tools/archivers/ctrtool/default.nix
+++ b/pkgs/tools/archivers/ctrtool/default.nix
@@ -1,26 +1,27 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "ctrtool";
-  version = "0.16";
+  version = "0.7";
 
   src = fetchFromGitHub {
     owner  = "jakcron";
     repo   = "Project_CTR";
-    rev    = "v${version}";
-    sha256 = "1n3j3fd1bqd39v5bdl9mhq4qdrcl1k4ib1yzl3qfckaz3y8bkrap";
+    rev    = "ctrtool-v${version}";
+    sha256 = "07aayck82w5xcp3si35d7ghybmrbqw91fqqvmbpjrjcixc6m42z7";
   };
 
   sourceRoot = "source/ctrtool";
 
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" "CXX=${stdenv.cc.targetPrefix}c++"];
   enableParallelBuilding = true;
 
   installPhase = "
     mkdir $out/bin -p
-    cp ctrtool $out/bin/ctrtool
+    cp ctrtool${stdenv.hostPlatform.extensions.executable} $out/bin/
   ";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     license = licenses.mit;
     description = "A tool to extract data from a 3ds rom";
     platforms = platforms.linux;
diff --git a/pkgs/tools/archivers/fsarchiver/default.nix b/pkgs/tools/archivers/fsarchiver/default.nix
index 31341e41787..80664a6a449 100644
--- a/pkgs/tools/archivers/fsarchiver/default.nix
+++ b/pkgs/tools/archivers/fsarchiver/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
-, zlib, bzip2, lzma, lzo, lz4, zstd, xz
-, libgcrypt, e2fsprogs, utillinux, libgpgerror }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
+, zlib, bzip2, lzo, lz4, zstd, xz
+, libgcrypt, e2fsprogs, util-linux, libgpgerror }:
 
 let
-  version = "0.8.5";
+  version = "0.8.6";
 
 in stdenv.mkDerivation {
   pname = "fsarchiver";
@@ -13,19 +13,19 @@ in stdenv.mkDerivation {
     owner = "fdupoux";
     repo = "fsarchiver";
     rev = version;
-    sha256 = "1rvwq5v3rl14bqxjm1ibfapyicf0sa44nw7451v10kx39lp56ylp";
+    sha256 = "sha256-7AfCI4abcUijobEl6FO+5A/FRwxPkNko44u85WbTwuc=";
   };
 
   nativeBuildInputs = [
-    autoreconfHook pkgconfig
+    autoreconfHook pkg-config
   ];
 
   buildInputs = [
-    zlib bzip2 lzma lzo lz4 zstd xz
-    libgcrypt e2fsprogs utillinux libgpgerror
+    zlib bzip2 xz lzo lz4 zstd xz
+    libgcrypt e2fsprogs util-linux libgpgerror
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "File system archiver for linux";
     longDescription = ''
       FSArchiver is a system tool that allows you to save the contents of a
@@ -36,7 +36,7 @@ in stdenv.mkDerivation {
       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/";
+    homepage = "https://www.fsarchiver.org/";
     license = licenses.lgpl2;
     maintainers = [ maintainers.etu ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/archivers/gnutar/default.nix b/pkgs/tools/archivers/gnutar/default.nix
index 672c99d80c0..fcc92e673a5 100644
--- a/pkgs/tools/archivers/gnutar/default.nix
+++ b/pkgs/tools/archivers/gnutar/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, autoreconfHook, acl }:
+{ lib, stdenv, fetchurl, autoreconfHook, acl }:
 
 # Note: this package is used for bootstrapping fetchurl, and thus
 # cannot use fetchpatch! All mutable patches (generated by GitHub or
@@ -7,15 +7,15 @@
 
 stdenv.mkDerivation rec {
   pname = "gnutar";
-  version = "1.32";
+  version = "1.34";
 
   src = fetchurl {
     url = "mirror://gnu/tar/tar-${version}.tar.xz";
-    sha256 = "1n7xy657ii0sa42zx6944v2m4v9qrh6sqgmw17l3nch3y43sxlyh";
+    sha256 = "sha256-Y769JoecXh7qQ1Lw0DyZH5Zq6z3es8dEXJAlaNVBHSg=";
   };
 
   # avoid retaining reference to CF during stdenv bootstrap
-  configureFlags = stdenv.lib.optionals stdenv.isDarwin [
+  configureFlags = lib.optionals stdenv.isDarwin [
     "gt_cv_func_CFPreferencesCopyAppValue=no"
     "gt_cv_func_CFLocaleCopyCurrent=no"
     "gt_cv_func_CFLocaleCopyPreferredLanguages=no"
@@ -24,19 +24,18 @@ stdenv.mkDerivation rec {
   # 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 ''
+  postPatch = 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;
+  nativeBuildInputs = lib.optional stdenv.isDarwin autoreconfHook;
+  buildInputs = lib.optional stdenv.isLinux acl;
 
   # 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";
+  FORCE_UNSAFE_CONFIGURE = 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>,,'
@@ -64,10 +63,10 @@ stdenv.mkDerivation rec {
       archives).
     '';
 
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
 
     maintainers = [ ];
-    platforms = stdenv.lib.platforms.all;
+    platforms = lib.platforms.all;
 
     priority = 10;
   };
diff --git a/pkgs/tools/archivers/innoextract/default.nix b/pkgs/tools/archivers/innoextract/default.nix
index da26639fcb5..4822ea82d1e 100644
--- a/pkgs/tools/archivers/innoextract/default.nix
+++ b/pkgs/tools/archivers/innoextract/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, cmake, makeWrapper, python
-, boost, lzma
+{ lib, stdenv, fetchurl, cmake, makeWrapper
+, boost, xz
 , withGog ? false, unar ? null }:
 
 stdenv.mkDerivation rec {
@@ -10,19 +10,22 @@ stdenv.mkDerivation rec {
     sha256 = "09l1z1nbl6ijqqwszdwch9mqr54qb7df0wp2sd77v17dq6gsci33";
   };
 
-  buildInputs = [ python lzma boost ];
+  buildInputs = [ xz boost ];
+
+  # Python is reported as missing during the build, however
+  # including Python does not change the output.
 
   nativeBuildInputs = [ cmake makeWrapper ];
 
-  enableParallelBuilding = true;
+  strictDeps = true;
 
   # we need unar to for multi-archive extraction
-  postFixup = stdenv.lib.optionalString withGog ''
+  postFixup = lib.optionalString withGog ''
     wrapProgram $out/bin/innoextract \
-      --prefix PATH : ${stdenv.lib.makeBinPath [ unar ]}
+      --prefix PATH : ${lib.makeBinPath [ unar ]}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tool to unpack installers created by Inno Setup";
     homepage = "https://constexpr.org/innoextract/";
     license = licenses.zlib;
diff --git a/pkgs/tools/archivers/lha/default.nix b/pkgs/tools/archivers/lha/default.nix
new file mode 100644
index 00000000000..f6b5c2bd135
--- /dev/null
+++ b/pkgs/tools/archivers/lha/default.nix
@@ -0,0 +1,27 @@
+{stdenv, lib, fetchFromGitHub, autoreconfHook}:
+
+stdenv.mkDerivation {
+  pname = "lha";
+  version = "unstable-2021-01-07";
+
+  src = fetchFromGitHub {
+    owner = "jca02266";
+    repo = "lha";
+    rev = "03475355bc6311f7f816ea9a88fb34a0029d975b";
+    sha256 = "18w2x0g5yq89yxkxh1fmb05lz4hw7a3b4jmkk95gvh11mwbbr5lm";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "LHa is an archiver and compressor using the LZSS and Huffman encoding compression algorithms";
+    platforms = platforms.unix;
+    maintainers = [ maintainers.sander ];
+    # Some of the original LhA code has been rewritten and the current author
+    # considers adopting a "true" free and open source license for it.
+    # However, old code is still covered by the original LHa license, which is
+    # not a free software license (it has additional requirements on commercial
+    # use).
+    license = licenses.unfree;
+  };
+}
diff --git a/pkgs/tools/archivers/maxcso/default.nix b/pkgs/tools/archivers/maxcso/default.nix
index 333b0dcabc3..ed81a182525 100644
--- a/pkgs/tools/archivers/maxcso/default.nix
+++ b/pkgs/tools/archivers/maxcso/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libuv, lz4, zlib }:
+{ lib, stdenv, fetchFromGitHub, libuv, lz4, zlib }:
 
 stdenv.mkDerivation rec {
   pname = "maxcso";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/unknownbrackets/maxcso";
     description =
       "A fast ISO to CSO compression program for use with PSP and PS2 emulators, which uses multiple algorithms for best compression ratio";
diff --git a/pkgs/tools/archivers/ndstool/default.nix b/pkgs/tools/archivers/ndstool/default.nix
index 9a6350a8df1..de7f02ce846 100644
--- a/pkgs/tools/archivers/ndstool/default.nix
+++ b/pkgs/tools/archivers/ndstool/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoconf, automake }:
+{ lib, stdenv, fetchFromGitHub, autoconf, automake }:
 
 stdenv.mkDerivation rec {
   pname = "ndstool";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
   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;
+    maintainers = [ lib.maintainers.marius851000 ];
+    license = lib.licenses.gpl3;
   };
 }
diff --git a/pkgs/tools/archivers/p7zip/default.nix b/pkgs/tools/archivers/p7zip/default.nix
index a155c1717eb..96f9262427b 100644
--- a/pkgs/tools/archivers/p7zip/default.nix
+++ b/pkgs/tools/archivers/p7zip/default.nix
@@ -1,17 +1,15 @@
-{ stdenv, fetchFromGitHub, lib, enableUnfree ? false }:
+{ stdenv, fetchFromGitHub, fetchpatch, lib, enableUnfree ? false }:
 
 stdenv.mkDerivation rec {
   pname = "p7zip";
-  version = "17.01";
-
+  version = "17.04";
 
   src = fetchFromGitHub {
-    owner  = "szcnick";
+    owner  = "jinfeihan57";
     repo   = pname;
     rev    = "v${version}";
-    sha256 = "0gczdmypwbfnxzb11rjrrndjkkb3jzxfby2cchn5j8ysny13mfps";
-  }
-  ;
+    sha256 = "sha256-19F4hPV0nKVuFZNbOcXrcA1uW6Y3HQolaHVIYXGmh18=";
+  };
 
   # Default makefile is full of impurities on Darwin. The patch doesn't hurt Linux so I'm leaving it unconditional
   postPatch = ''
@@ -20,7 +18,7 @@ stdenv.mkDerivation rec {
 
     # 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) ''
+  '' + 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++'
@@ -31,24 +29,26 @@ stdenv.mkDerivation rec {
     find . -name makefile'*' -exec sed -i '/Rar/d' {} +
   '';
 
+  makeFlags = [ "DEST_HOME=${placeholder "out"}" ];
+
   preConfigure = ''
-    makeFlagsArray=(DEST_HOME=$out)
-      buildFlags=all3
-        '' + stdenv.lib.optionalString stdenv.isDarwin ''
-        cp makefile.macosx_llvm_64bits makefile.machine
-'';
+    buildFlags=all3
+  '' + 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";
+  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=c++11-narrowing";
 
   meta = {
-    homepage = "https://github.com/szcnick/p7zip";
+    homepage = "https://github.com/jinfeihan57/p7zip";
     description = "A new p7zip fork with additional codecs and improvements (forked from https://sourceforge.net/projects/p7zip/)";
-    platforms = stdenv.lib.platforms.unix;
-    maintainers = [ stdenv.lib.maintainers.raskin ];
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.raskin ];
+    mainProgram = "7z";
     # RAR code is under non-free UnRAR license, but we remove it
     license = if enableUnfree then lib.licenses.unfree else lib.licenses.lgpl2Plus;
   };
diff --git a/pkgs/tools/archivers/pax/default.nix b/pkgs/tools/archivers/pax/default.nix
new file mode 100644
index 00000000000..d554ea4dade
--- /dev/null
+++ b/pkgs/tools/archivers/pax/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "pax";
+  version = "20201030";
+
+  src = fetchurl {
+    url = "http://www.mirbsd.org/MirOS/dist/mir/cpio/paxmirabilis-${version}.tgz";
+    sha256 = "1p18nxijh323f4i1s2pg7pcr0557xljl5avv8ll5s9nfr34r5j0w";
+  };
+
+  buildPhase = ''
+    sh Build.sh -r -tpax
+  '';
+
+  installPhase = ''
+    install -Dm555 pax $out/bin/pax
+    ln -s $out/bin/pax $out/bin/paxcpio
+    ln -s $out/bin/pax $out/bin/paxtar
+    install -Dm444 mans/pax{,cpio,tar}.1 -t $out/share/man/man1/
+  '';
+
+  meta = with lib; {
+    description = "POSIX standard archive tool from MirBSD";
+    homepage = "https://www.mirbsd.org/pax.htm";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ gebner ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/archivers/pxattr/default.nix b/pkgs/tools/archivers/pxattr/default.nix
index 74ad0669d69..79a40e6ca6b 100644
--- a/pkgs/tools/archivers/pxattr/default.nix
+++ b/pkgs/tools/archivers/pxattr/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, gcc }:
+{ lib, stdenv, fetchurl, gcc }:
 
 stdenv.mkDerivation {
   name = "pxattr-2.1.0";
@@ -18,8 +18,8 @@ stdenv.mkDerivation {
   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;
+    maintainers = [ lib.maintainers.vrthra ];
+    license = [ lib.licenses.mit ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/archivers/quickbms/default.nix b/pkgs/tools/archivers/quickbms/default.nix
new file mode 100644
index 00000000000..7846f18a174
--- /dev/null
+++ b/pkgs/tools/archivers/quickbms/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, lib, fetchzip, bzip2, lzo, openssl, zlib }:
+
+stdenv.mkDerivation rec {
+  version = "0.11.0";
+  pname = "quickbms";
+
+  src = fetchzip {
+    url = "https://aluigi.altervista.org/papers/quickbms-src-${version}.zip";
+    hash = "sha256-uQKTE36pLO8uhrX794utqaDGUeyqRz6zLCQFA7DYkNc=";
+  };
+
+  buildInputs = [ bzip2 lzo openssl zlib ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Universal script based file extractor and reimporter";
+    homepage = "https://aluigi.altervista.org/quickbms.htm";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ samuelgrf ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/archivers/rpm2targz/default.nix b/pkgs/tools/archivers/rpm2targz/default.nix
new file mode 100644
index 00000000000..1c4730c8de6
--- /dev/null
+++ b/pkgs/tools/archivers/rpm2targz/default.nix
@@ -0,0 +1,50 @@
+{ bzip2
+, coreutils
+, cpio
+, fetchurl
+, gnutar
+, gzip
+, lib
+, stdenv
+, xz
+, zstd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rpm2targz";
+  version = "2021.03.16";
+
+  # git repo: https://gitweb.gentoo.org/proj/rpm2targz.git/
+  src = fetchurl {
+    url = "https://dev.gentoo.org/~vapier/dist/${pname}-${version}.tar.xz";
+    hash = "sha256-rcV+o9V2wWKznqSW2rA8xgnpQ02kpK4te6mYvLRC5vQ=";
+  };
+
+  postPatch = let
+    shdeps = [
+      bzip2
+      coreutils
+      cpio
+      gnutar
+      gzip
+      xz
+      zstd
+    ];
+  in ''
+    substituteInPlace rpm2targz --replace "=\"rpmoffset\"" "=\"$out/bin/rpmoffset\""
+    # rpm2targz relies on the executable name
+    # to guess what compressor it should use
+    # this is more reliable than wrapProgram
+    sed -i -e '2iexport PATH="${lib.makeBinPath shdeps}"' rpm2targz
+  '';
+
+  installFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    description = "Convert a .rpm file to a .tar.gz archive";
+    homepage = "http://slackware.com/config/packages.php";
+    license = licenses.bsd1;
+    maintainers = with maintainers; [ zseri ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/archivers/rpmextract/default.nix b/pkgs/tools/archivers/rpmextract/default.nix
index 59ff67e3eef..db768a5d14a 100644
--- a/pkgs/tools/archivers/rpmextract/default.nix
+++ b/pkgs/tools/archivers/rpmextract/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, rpm, cpio, substituteAll }:
+{ lib, stdenv, rpm, cpio, substituteAll }:
 
 stdenv.mkDerivation {
   name = "rpmextract";
@@ -6,7 +6,7 @@ stdenv.mkDerivation {
   buildCommand = ''
     install -Dm755 $script $out/bin/rpmextract
   '';
-    
+
   script = substituteAll {
     src = ./rpmextract.sh;
     isExecutable = true;
@@ -14,7 +14,7 @@ stdenv.mkDerivation {
     inherit (stdenv) shell;
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Script to extract RPM archives";
     platforms = platforms.all;
     license = licenses.gpl2;
diff --git a/pkgs/tools/archivers/runzip/default.nix b/pkgs/tools/archivers/runzip/default.nix
index b9eaf3dba65..c251cfe0dc3 100644
--- a/pkgs/tools/archivers/runzip/default.nix
+++ b/pkgs/tools/archivers/runzip/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libzip, autoreconfHook }:
+{ lib, stdenv, fetchFromGitHub, libzip, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   version = "1.4";
@@ -16,8 +16,8 @@ stdenv.mkDerivation rec {
 
   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;
+    license = lib.licenses.bsd2 ;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/archivers/s-tar/default.nix b/pkgs/tools/archivers/s-tar/default.nix
index 30ff2bc36a2..dd3fb846288 100644
--- a/pkgs/tools/archivers/s-tar/default.nix
+++ b/pkgs/tools/archivers/s-tar/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "s-tar";
@@ -28,8 +28,8 @@ stdenv.mkDerivation rec {
       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 ];
+    license = lib.licenses.cddl;
+    maintainers = [ lib.maintainers.wucke13 ];
     platforms = [ "x86_64-linux" ];
   };
 }
diff --git a/pkgs/tools/archivers/sharutils/default.nix b/pkgs/tools/archivers/sharutils/default.nix
index aefe4f87eb4..c785211e682 100644
--- a/pkgs/tools/archivers/sharutils/default.nix
+++ b/pkgs/tools/archivers/sharutils/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, gettext, coreutils }:
+{ lib, stdenv, fetchurl, gettext, coreutils }:
 
 stdenv.mkDerivation rec {
   name = "sharutils-4.15.2";
@@ -46,7 +46,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tools for remote synchronization and `shell archives'";
     longDescription =
       '' GNU shar makes so-called shell archives out of many files, preparing
diff --git a/pkgs/tools/archivers/snzip/default.nix b/pkgs/tools/archivers/snzip/default.nix
index 031cac64b75..f3a94006873 100644
--- a/pkgs/tools/archivers/snzip/default.nix
+++ b/pkgs/tools/archivers/snzip/default.nix
@@ -1,6 +1,6 @@
 { lib, stdenv, fetchFromGitHub
 , autoreconfHook
-, pkgconfig
+, pkg-config
 , snappy
 }:
 
@@ -18,9 +18,9 @@ stdenv.mkDerivation rec {
   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 ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A compression/decompression tool based on snappy";
     homepage = "https://github.com/kubo/snzip";
     maintainers = with maintainers; [ doronbehar ];
diff --git a/pkgs/tools/archivers/unar/default.nix b/pkgs/tools/archivers/unar/default.nix
index 6e75ee720e8..f3f7b32e119 100644
--- a/pkgs/tools/archivers/unar/default.nix
+++ b/pkgs/tools/archivers/unar/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, installShellFiles, gnustep, bzip2, zlib, icu, openssl, wavpack }:
+{ lib, stdenv, fetchFromGitHub, installShellFiles, gnustep, bzip2, zlib, icu, openssl, wavpack }:
 
 stdenv.mkDerivation rec {
   pname = "unar";
@@ -15,8 +15,8 @@ stdenv.mkDerivation rec {
   postPatch = ''
     for f in Makefile.linux ../UniversalDetector/Makefile.linux ; do
       substituteInPlace $f \
-        --replace "= gcc" "=cc" \
-        --replace "= g++" "=c++" \
+        --replace "= gcc" "=${stdenv.cc.targetPrefix}cc" \
+        --replace "= g++" "=${stdenv.cc.targetPrefix}c++" \
         --replace "-DGNU_RUNTIME=1" "" \
         --replace "-fgnu-runtime" "-fobjc-nonfragile-abi"
     done
@@ -49,18 +49,18 @@ stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://theunarchiver.com";
     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, \
+      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 = licenses.lgpl21Plus;
     maintainers = with maintainers; [ peterhoeg ];
-    platforms = with platforms; linux;
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/archivers/unarj/default.nix b/pkgs/tools/archivers/unarj/default.nix
deleted file mode 100644
index 61e60996e75..00000000000
--- a/pkgs/tools/archivers/unarj/default.nix
+++ /dev/null
@@ -1,23 +0,0 @@
-{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/pkgs/tools/archivers/undmg/default.nix b/pkgs/tools/archivers/undmg/default.nix
index 0eaabdb627d..0bbf725d191 100644
--- a/pkgs/tools/archivers/undmg/default.nix
+++ b/pkgs/tools/archivers/undmg/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, zlib, bzip2, lzfse, pkg-config }:
+{ lib, stdenv, fetchFromGitHub, zlib, bzip2, lzfse, pkg-config }:
 
 stdenv.mkDerivation rec {
   version = "1.1.0";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/matthewbauer/undmg";
     description = "Extract a DMG file";
     license = licenses.gpl3;
diff --git a/pkgs/tools/archivers/unp/default.nix b/pkgs/tools/archivers/unp/default.nix
index afe00972141..c63ec008d67 100644
--- a/pkgs/tools/archivers/unp/default.nix
+++ b/pkgs/tools/archivers/unp/default.nix
@@ -10,7 +10,8 @@ let
 in stdenv.mkDerivation {
   pname = "unp";
   version = "2.0-pre7";
-  buildInputs = [ perl makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
 
   src = fetchurl {
     # url = "http://http.debian.net/debian/pool/main/u/unp/unp_2.0~pre7+nmu1.tar.bz2";
@@ -34,7 +35,7 @@ in stdenv.mkDerivation {
     --prefix PATH : ${lib.makeBinPath runtime_bins}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Command line tool for unpacking archives easily";
     homepage = "https://packages.qa.debian.org/u/unp.html";
     license = with licenses; [ gpl2 ];
diff --git a/pkgs/tools/archivers/unrar/default.nix b/pkgs/tools/archivers/unrar/default.nix
index 9396267b3a1..b06242a98c0 100644
--- a/pkgs/tools/archivers/unrar/default.nix
+++ b/pkgs/tools/archivers/unrar/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation rec {
   pname = "unrar";
@@ -38,7 +38,7 @@ stdenv.mkDerivation rec {
 
   setupHook = ./setup-hook.sh;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Utility for RAR archives";
     homepage = "https://www.rarlab.com/";
     license = licenses.unfreeRedistributable;
diff --git a/pkgs/tools/archivers/unshield/default.nix b/pkgs/tools/archivers/unshield/default.nix
index dbcb2b24f10..2c58b546b63 100644
--- a/pkgs/tools/archivers/unshield/default.nix
+++ b/pkgs/tools/archivers/unshield/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, zlib, openssl }:
+{ lib, stdenv, fetchFromGitHub, cmake, zlib, openssl }:
 
 stdenv.mkDerivation rec {
   pname = "unshield";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ cmake ];
   buildInputs = [ zlib openssl ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tool and library to extract CAB files from InstallShield installers";
     homepage = "https://github.com/twogood/unshield";
     license = licenses.mit;
diff --git a/pkgs/tools/archivers/unzip/default.nix b/pkgs/tools/archivers/unzip/default.nix
index b3b150637d6..e74637ca25e 100644
--- a/pkgs/tools/archivers/unzip/default.nix
+++ b/pkgs/tools/archivers/unzip/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl
+{ lib, stdenv, fetchurl
 , bzip2
 , enableNLS ? false, libnatspec
 }:
@@ -41,7 +41,7 @@ stdenv.mkDerivation {
       name = "CVE-2019-13232-3.patch";
       sha256 = "1jvs7dkdqs97qnsqc6hk088alhv8j4c638k65dbib9chh40jd7pf";
     })
-  ] ++ stdenv.lib.optional enableNLS
+  ] ++ 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";
@@ -49,11 +49,11 @@ stdenv.mkDerivation {
     });
 
   nativeBuildInputs = [ bzip2 ];
-  buildInputs = [ bzip2 ] ++ stdenv.lib.optional enableNLS libnatspec;
+  buildInputs = [ bzip2 ] ++ lib.optional enableNLS libnatspec;
 
   makefile = "unix/Makefile";
 
-  NIX_LDFLAGS = "-lbz2" + stdenv.lib.optionalString enableNLS " -lnatspec";
+  NIX_LDFLAGS = "-lbz2" + lib.optionalString enableNLS " -lnatspec";
 
   buildFlags = [
     "generic"
@@ -66,7 +66,7 @@ stdenv.mkDerivation {
   '';
 
   installFlags = [
-    "prefix=${placeholder ''out''}"
+    "prefix=${placeholder "out"}"
   ];
 
   setupHook = ./setup-hook.sh;
@@ -74,7 +74,7 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.free; # http://www.info-zip.org/license.html
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/archivers/wimlib/default.nix b/pkgs/tools/archivers/wimlib/default.nix
index da01602cca4..4f397b9bf55 100644
--- a/pkgs/tools/archivers/wimlib/default.nix
+++ b/pkgs/tools/archivers/wimlib/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, makeWrapper
-, pkgconfig, openssl, fuse, libxml2
+{ lib, stdenv, fetchurl, makeWrapper
+, pkg-config, openssl, fuse, libxml2
 , cabextract ? null
 , cdrkit ? null
 , mtools ? null
@@ -8,15 +8,15 @@
 }:
 
 stdenv.mkDerivation rec {
-  version = "1.13.1";
+  version = "1.13.2";
   pname = "wimlib";
 
-  nativeBuildInputs = [ pkgconfig makeWrapper ];
+  nativeBuildInputs = [ pkg-config makeWrapper ];
   buildInputs = [ openssl fuse libxml2 ntfs3g ];
 
   src = fetchurl {
     url = "https://wimlib.net/downloads/${pname}-${version}.tar.gz";
-    sha256 = "0pxgrpr3dr81rcf2jh71aiiq3v4anc5sj1nld18f2vhvbijbrx27";
+    sha256 = "0id9ym3hzij4kpdrk0sz3ijxp5r0z1md5jch83pml9hdy1zbx5bj";
   };
 
   preBuild = ''
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
   '';
 
   postInstall = let
-    path = stdenv.lib.makeBinPath  [ cabextract cdrkit mtools ntfs3g syslinux ];
+    path = lib.makeBinPath  [ cabextract cdrkit mtools ntfs3g syslinux ];
   in ''
     for prog in $out/bin/*; do
       wrapProgram $prog --prefix PATH : ${path}
@@ -38,7 +38,7 @@ stdenv.mkDerivation rec {
     patchShebangs tests
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://wimlib.net";
     description = "A library and program to extract, create, and modify WIM files";
     platforms = platforms.unix;
diff --git a/pkgs/tools/archivers/xarchive/default.nix b/pkgs/tools/archivers/xarchive/default.nix
index 53da140b7fd..d28e9f31b1a 100644
--- a/pkgs/tools/archivers/xarchive/default.nix
+++ b/pkgs/tools/archivers/xarchive/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, gtk2, pkgconfig }:
+{ lib, stdenv, fetchurl, gtk2, pkg-config }:
 
 stdenv.mkDerivation rec {
   version = "0.2.8-6";
@@ -9,15 +9,15 @@ stdenv.mkDerivation rec {
     sha256 = "0chfim7z27s00naf43a61zsngwhvim14mg1p3csbv5i3f6m50xx4";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   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;
+    maintainers = [ lib.maintainers.domenkozar ];
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/archivers/xarchiver/default.nix b/pkgs/tools/archivers/xarchiver/default.nix
index fd53cd9b54b..57d35633128 100644
--- a/pkgs/tools/archivers/xarchiver/default.nix
+++ b/pkgs/tools/archivers/xarchiver/default.nix
@@ -1,24 +1,30 @@
-{ stdenv, fetchFromGitHub, gtk3, pkgconfig, intltool, libxslt }:
+{ lib, stdenv, fetchFromGitHub, gtk3, pkg-config, intltool, libxslt, makeWrapper,
+  coreutils, zip, unzip, p7zip, unar, gnutar, bzip2, gzip, lhasa, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
-  version = "0.5.4.14";
+  version = "0.5.4.17";
   pname = "xarchiver";
 
   src = fetchFromGitHub {
     owner = "ib";
     repo = "xarchiver";
     rev = version;
-    sha256 = "1iklwgykgymrwcc5p1cdbh91v0ih1m58s3w9ndl5kyd44bwlb7px";
+    sha256 = "00adrjpxqlaccrwjf65w3vhxfswdj0as8aj263c6f9b85llypc5v";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ gtk3 intltool libxslt ];
+  nativeBuildInputs = [ intltool pkg-config makeWrapper wrapGAppsHook ];
+  buildInputs = [ gtk3 libxslt ];
+
+  postFixup = ''
+    wrapProgram $out/bin/xarchiver \
+    --prefix PATH : ${lib.makeBinPath [ zip unzip p7zip unar gnutar bzip2 gzip lhasa coreutils ]}
+  '';
 
   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;
+    maintainers = [ lib.maintainers.domenkozar ];
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/archivers/xtrt/default.nix b/pkgs/tools/archivers/xtrt/default.nix
new file mode 100644
index 00000000000..175494057e0
--- /dev/null
+++ b/pkgs/tools/archivers/xtrt/default.nix
@@ -0,0 +1,36 @@
+{ bzip2, fetchFromGitHub, gzip, gnutar, lib, stdenv, unzip, xz }:
+
+stdenv.mkDerivation rec {
+  pname = "xtrt";
+  version = "unstable-2021-02-17";
+
+  src = fetchFromGitHub {
+    owner = "figsoda";
+    repo = pname;
+    rev = "61884fb7c48c7e1e2194afd82b85f415a6dc7c20";
+    sha256 = "073l4q6mx5if791p5a6w8m8bz2aypmjmycaijq4spql8bh6h12vf";
+  };
+
+  postPatch = ''
+    substituteInPlace xtrt \
+      --replace "bzip2 " "${bzip2}/bin/bzip2 " \
+      --replace "gzip " "${gzip}/bin/gzip " \
+      --replace "tar " "${gnutar}/bin/tar " \
+      --replace "unzip " "${unzip}/bin/unzip " \
+      --replace "xz " "${xz}/bin/xz "
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp xtrt $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tiny script to extract archives by their extensions";
+    homepage = "https://github.com/figsoda/xtrt";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/pkgs/tools/archivers/zip/default.nix b/pkgs/tools/archivers/zip/default.nix
index 173f4812109..58c748fe4e8 100644
--- a/pkgs/tools/archivers/zip/default.nix
+++ b/pkgs/tools/archivers/zip/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, enableNLS ? false, libnatspec ? null, libiconv }:
+{ lib, stdenv, fetchurl, enableNLS ? false, libnatspec ? null, libiconv }:
 
 assert enableNLS -> libnatspec != null;
 
@@ -21,16 +21,16 @@ stdenv.mkDerivation {
   makefile = "unix/Makefile";
   buildFlags = if stdenv.isCygwin then [ "cygwin" ] else [ "generic" ];
   installFlags = [
-    "prefix=${placeholder ''out''}"
+    "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;
+  buildInputs = lib.optional enableNLS libnatspec
+    ++ lib.optional stdenv.isCygwin libiconv;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Compressor/archiver for creating and modifying zipfiles";
     homepage = "http://www.info-zip.org";
     license = licenses.bsdOriginal;
diff --git a/pkgs/tools/archivers/zpaq/default.nix b/pkgs/tools/archivers/zpaq/default.nix
index dbdcdf5cada..150633e620a 100644
--- a/pkgs/tools/archivers/zpaq/default.nix
+++ b/pkgs/tools/archivers/zpaq/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, perl, unzip }:
+{ lib, stdenv, fetchFromGitHub, perl }:
 
 stdenv.mkDerivation rec {
   pname = "zpaq";
@@ -12,7 +12,6 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [ perl /* for pod2man */ ];
-  buildInputs = [ unzip ];
 
   preBuild = let
     CPPFLAGS = with stdenv; ""
@@ -27,12 +26,11 @@ stdenv.mkDerivation rec {
 
   installFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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/pkgs/tools/archivers/zpaq/zpaqd.nix b/pkgs/tools/archivers/zpaq/zpaqd.nix
index 611654331c3..c2f214ea2a6 100644
--- a/pkgs/tools/archivers/zpaq/zpaqd.nix
+++ b/pkgs/tools/archivers/zpaq/zpaqd.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, unzip }:
+{ lib, stdenv, fetchurl, unzip }:
 
 let
   # Generated upstream information
@@ -11,9 +11,9 @@ let
     sha256="0868lynb45lm79yvx5f10lj5h6bfv0yck8whcls2j080vmk3n7rk";
   };
 
-  compileFlags = stdenv.lib.concatStringsSep " " ([ "-O3" "-DNDEBUG" ]
-    ++ stdenv.lib.optional (stdenv.hostPlatform.isUnix) "-Dunix -pthread"
-    ++ stdenv.lib.optional (!stdenv.hostPlatform.isx86) "-DNOJIT");
+  compileFlags = lib.concatStringsSep " " ([ "-O3" "-DNDEBUG" ]
+    ++ lib.optional (stdenv.hostPlatform.isUnix) "-Dunix -pthread"
+    ++ lib.optional (!stdenv.hostPlatform.isx86) "-DNOJIT");
 in
 stdenv.mkDerivation {
   inherit (s) name version;
@@ -24,7 +24,7 @@ stdenv.mkDerivation {
 
   sourceRoot = ".";
 
-  buildInputs = [ unzip ];
+  nativeBuildInputs = [ unzip ];
 
   buildPhase = ''
     g++ ${compileFlags} -fPIC --shared libzpaq.cpp -o libzpaq.so
@@ -39,7 +39,7 @@ stdenv.mkDerivation {
     cp readme_zpaqd.txt "$out/share/doc/zpaq"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "ZPAQ archive (de)compressor and algorithm development tool";
     license = licenses.gpl3Plus ;
     maintainers = with maintainers; [ raskin ];
diff --git a/pkgs/tools/audio/abcm2ps/default.nix b/pkgs/tools/audio/abcm2ps/default.nix
index 099ccc6f4cb..b94d514e8ec 100644
--- a/pkgs/tools/audio/abcm2ps/default.nix
+++ b/pkgs/tools/audio/abcm2ps/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchFromGitHub, pkgconfig, which, docutils, freetype, pango }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, which, docutils, freetype, pango }:
 
 stdenv.mkDerivation rec {
   pname = "abcm2ps";
-  version = "8.14.9";
+  version = "8.14.12";
 
   src = fetchFromGitHub {
     owner = "leesavide";
     repo = "abcm2ps";
     rev = "v${version}";
-    sha256 = "0h4qzj9k5ng09nbkfipvr82piq68c576akjwmhsqn05rvgirmhx7";
+    sha256 = "sha256-RELWtI+S2cbG7cXCehXymvWRdair28UaDZRVr5xt9Tk=";
   };
 
   configureFlags = [
@@ -19,13 +19,13 @@ stdenv.mkDerivation rec {
     "CC=${stdenv.cc}/bin/cc"
   ];
 
-  nativeBuildInputs = [ which pkgconfig docutils ];
+  nativeBuildInputs = [ which pkg-config docutils ];
 
   buildInputs = [ freetype pango ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://moinejf.free.fr/";
-    license = licenses.gpl3;
+    license = licenses.lgpl3Plus;
     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/pkgs/tools/audio/abcmidi/default.nix b/pkgs/tools/audio/abcmidi/default.nix
index f075f503ae5..16c6e0fc8a0 100644
--- a/pkgs/tools/audio/abcmidi/default.nix
+++ b/pkgs/tools/audio/abcmidi/default.nix
@@ -1,18 +1,15 @@
-{ stdenv, fetchzip }:
+{ lib, stdenv, fetchzip }:
 
 stdenv.mkDerivation rec {
   pname = "abcMIDI";
-  version = "2020.07.28";
+  version = "2021.06.27";
 
   src = fetchzip {
     url = "https://ifdo.ca/~seymour/runabc/${pname}-${version}.zip";
-    sha256 = "05nsakvnx1jz2k9bvabpw5v3js28ng9z7n6ch58brd3qxc2p76zv";
+    sha256 = "sha256-tLKxs1p1CIU/2XV1fMgWrwdtePeXOBZUMjz46kgp9C0=";
   };
 
-  # There is also a file called "makefile" which seems to be preferred by the standard build phase
-  makefile = "Makefile";
-
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://abc.sourceforge.net/abcMIDI/";
     downloadPage = "https://ifdo.ca/~seymour/runabc/top.html";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/audio/accuraterip-checksum/default.nix b/pkgs/tools/audio/accuraterip-checksum/default.nix
index efd44025647..161e9848bea 100644
--- a/pkgs/tools/audio/accuraterip-checksum/default.nix
+++ b/pkgs/tools/audio/accuraterip-checksum/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libsndfile }:
+{ lib, stdenv, fetchFromGitHub, libsndfile }:
 
 stdenv.mkDerivation rec {
   pname = "accuraterip-checksum";
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Program for computing the AccurateRip checksum of singletrack WAV files";
     homepage = "https://github.com/leo-bogert/accuraterip-checksum";
     license = licenses.gpl3;
diff --git a/pkgs/tools/audio/acousticbrainz-client/default.nix b/pkgs/tools/audio/acousticbrainz-client/default.nix
new file mode 100644
index 00000000000..a08710fe121
--- /dev/null
+++ b/pkgs/tools/audio/acousticbrainz-client/default.nix
@@ -0,0 +1,41 @@
+{ lib, fetchFromGitHub, python3Packages, essentia-extractor }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "acousticbrainz-client";
+  version = "0.1";
+
+  src = fetchFromGitHub {
+    owner = "MTG";
+    repo = "acousticbrainz-client";
+    rev = version;
+    sha256 = "1g1nxh58939vysfxplrgdz366dlqnic05pkzbqh75m79brg4yrv1";
+  };
+
+  propagatedBuildInputs = [ essentia-extractor python3Packages.requests ];
+
+  postPatch = ''
+    # The installer needs the streaming_extractor_music binary in the source directoy,
+    # so we provide a symlink to it.
+    ln -s ${essentia-extractor}/bin/streaming_extractor_music streaming_extractor_music
+  '';
+
+  postInstall = ''
+    # The installer includes a copy of the streaming_extractor_music binary (not a symlink),
+    # which we don't need, because the wrapper adds essentia-extractor/binary to PATH.
+    rm $out/bin/streaming_extractor_music
+  '';
+
+  # Tests seem to be broken, but the tool works
+  doCheck = false;
+
+  pythonImportsCheck = [ "abz" ];
+
+  meta = with lib; {
+    description = "A client to upload data to an AcousticBrainz server";
+    license = licenses.gpl3Plus;
+    homepage = "https://github.com/MTG/acousticbrainz-client";
+    # essentia-extractor is only available for those platforms
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    maintainers = with maintainers; [ eduardosm ];
+  };
+}
diff --git a/pkgs/tools/audio/acoustid-fingerprinter/default.nix b/pkgs/tools/audio/acoustid-fingerprinter/default.nix
index e2824bc07b6..4fc3d957e13 100644
--- a/pkgs/tools/audio/acoustid-fingerprinter/default.nix
+++ b/pkgs/tools/audio/acoustid-fingerprinter/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, cmake, pkgconfig, qt4, taglib, chromaprint, ffmpeg }:
+{ lib, stdenv, fetchurl, fetchpatch, cmake, pkg-config, qt4, taglib, chromaprint, ffmpeg }:
 
 stdenv.mkDerivation rec {
   pname = "acoustid-fingerprinter";
@@ -10,23 +10,28 @@ stdenv.mkDerivation rec {
     sha256 = "0ckglwy95qgqvl2l6yd8ilwpd6qs7yzmj8g7lnxb50d12115s5n0";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ cmake qt4 taglib chromaprint ffmpeg ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ qt4 taglib chromaprint ffmpeg ];
 
-  cmakeFlags = [ "-DTAGLIB_MIN_VERSION=${stdenv.lib.getVersion taglib}" ];
+  cmakeFlags = [ "-DTAGLIB_MIN_VERSION=${lib.getVersion taglib}" ];
 
   patches = [
     (fetchpatch {
+      name = "fix-build-with-libav-10.patch";
+      url = "https://bitbucket.org/acoustid/acoustid-fingerprinter/commits/2c778334a9fc2f0ccf9b1d7635c116bce6509748/raw";
+      sha256 = "1smyp3x5n6jwxpgw60xsijq2fn6g1gl759h1lm5agaxhcyyqn0i0";
+    })
+    (fetchpatch {
+      name = "fix-build-failure-on-gcc-6.patch";
       url = "https://bitbucket.org/acoustid/acoustid-fingerprinter/commits/632e87969c3a5562a5d4842b03613267ba6236b2/raw";
       sha256 = "15hm9knrpqn3yqrwyjz4zh2aypwbcycd0c5svrsy1fb2h2rh05jk";
     })
-    ./ffmpeg.patch
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://acoustid.org/fingerprinter";
     description = "Audio fingerprinting tool using chromaprint";
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
     maintainers = with maintainers; [ ehmry ];
     platforms = with platforms; linux;
   };
diff --git a/pkgs/tools/audio/acoustid-fingerprinter/ffmpeg.patch b/pkgs/tools/audio/acoustid-fingerprinter/ffmpeg.patch
deleted file mode 100644
index f3eacae26f7..00000000000
--- a/pkgs/tools/audio/acoustid-fingerprinter/ffmpeg.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-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/pkgs/tools/audio/alsaequal/default.nix b/pkgs/tools/audio/alsaequal/default.nix
index 9498baca991..c6c25fd3996 100644
--- a/pkgs/tools/audio/alsaequal/default.nix
+++ b/pkgs/tools/audio/alsaequal/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl
-, alsaLib, caps
+{ lib, stdenv, fetchurl
+, alsa-lib, caps
 }:
 
 stdenv.mkDerivation rec {
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
     sha256 = "1w3g9q5z3nrn3mwdhaq6zsg0jila8d102dgwgrhj9vfx58apsvli";
   };
 
-  buildInputs = [ alsaLib ];
+  buildInputs = [ alsa-lib ];
 
   makeFlags = [ "DESTDIR=$(out)" ];
 
@@ -34,7 +34,7 @@ stdenv.mkDerivation rec {
     mkdir -p "$out/lib/alsa-lib"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Real-time adjustable equalizer plugin for ALSA";
     homepage = "https://thedigitalmachine.net/alsaequal.html";
     license = licenses.gpl2;
diff --git a/pkgs/tools/audio/aucdtect/default.nix b/pkgs/tools/audio/aucdtect/default.nix
deleted file mode 100644
index ad9d5fb8690..00000000000
--- a/pkgs/tools/audio/aucdtect/default.nix
+++ /dev/null
@@ -1,33 +0,0 @@
-{ 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/pkgs/tools/audio/audiowaveform/default.nix b/pkgs/tools/audio/audiowaveform/default.nix
new file mode 100644
index 00000000000..e120f6fcbf0
--- /dev/null
+++ b/pkgs/tools/audio/audiowaveform/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, cmake, gtest, boost, gd, libsndfile, libmad, libid3tag }:
+
+stdenv.mkDerivation rec {
+  pname = "audiowaveform";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "bbc";
+    repo = "audiowaveform";
+    rev = version;
+    sha256 = "0k2s2f2hgq4pnjzfkgvjwgsflihmzdq7shicfjn0z2mzw4d1bvp2";
+  };
+
+  nativeBuildInputs = [ cmake gtest ];
+
+  buildInputs = [ boost gd libsndfile libmad libid3tag ];
+
+  preConfigure = ''
+    ln -s ${gtest.src}/googletest googletest
+    ln -s ${gtest.src}/googlemock googlemock
+  '';
+
+  # One test is failing, see PR #101947
+  doCheck = false;
+
+  meta = with lib; {
+    description = "C++ program to generate waveform data and render waveform images from audio files";
+    longDescription = ''
+      audiowaveform is a C++ command-line application that generates waveform data from either MP3, WAV, FLAC, or Ogg Vorbis format audio files.
+      Waveform data can be used to produce a visual rendering of the audio, similar in appearance to audio editing applications.
+    '';
+    homepage = "https://github.com/bbc/audiowaveform";
+    changelog = "https://github.com/bbc/audiowaveform/blob/${version}/ChangeLog";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ edbentley ];
+  };
+}
diff --git a/pkgs/tools/audio/beets/alternatives-plugin.nix b/pkgs/tools/audio/beets/alternatives-plugin.nix
deleted file mode 100644
index fdad7dd8984..00000000000
--- a/pkgs/tools/audio/beets/alternatives-plugin.nix
+++ /dev/null
@@ -1,25 +0,0 @@
-{ 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/pkgs/tools/audio/beets/badfiles-plugin-nix-paths.patch b/pkgs/tools/audio/beets/badfiles-plugin-nix-paths.patch
new file mode 100644
index 00000000000..6956183344c
--- /dev/null
+++ b/pkgs/tools/audio/beets/badfiles-plugin-nix-paths.patch
@@ -0,0 +1,21 @@
+diff --git i/beetsplug/badfiles.py w/beetsplug/badfiles.py
+index 36b45de3..5208b696 100644
+--- i/beetsplug/badfiles.py
++++ w/beetsplug/badfiles.py
+@@ -71,14 +71,14 @@ class BadFiles(BeetsPlugin):
+         return status, errors, [line for line in output.split("\n") if line]
+ 
+     def check_mp3val(self, path):
+-        status, errors, output = self.run_command(["mp3val", path])
++        status, errors, output = self.run_command(["@mp3val@/bin/mp3val", path])
+         if status == 0:
+             output = [line for line in output if line.startswith("WARNING:")]
+             errors = len(output)
+         return status, errors, output
+ 
+     def check_flac(self, path):
+-        return self.run_command(["flac", "-wst", path])
++        return self.run_command(["@flac@/bin/flac", "-wst", path])
+ 
+     def check_custom(self, command):
+         def checker(path):
diff --git a/pkgs/tools/audio/beets/bash-completion-always-print.patch b/pkgs/tools/audio/beets/bash-completion-always-print.patch
new file mode 100644
index 00000000000..7bc3e57117e
--- /dev/null
+++ b/pkgs/tools/audio/beets/bash-completion-always-print.patch
@@ -0,0 +1,43 @@
+diff --git i/beets/ui/commands.py w/beets/ui/commands.py
+index 4d010f4b..0b023585 100755
+--- i/beets/ui/commands.py
++++ w/beets/ui/commands.py
+@@ -1741,20 +1741,6 @@ default_commands.append(config_cmd)
+ def print_completion(*args):
+     for line in completion_script(default_commands + plugins.commands()):
+         print_(line, end=u'')
+-    if not any(map(os.path.isfile, BASH_COMPLETION_PATHS)):
+-        log.warning(u'Warning: Unable to find the bash-completion package. '
+-                    u'Command line completion might not work.')
+-
+-BASH_COMPLETION_PATHS = map(syspath, [
+-    u'/etc/bash_completion',
+-    u'/usr/share/bash-completion/bash_completion',
+-    u'/usr/local/share/bash-completion/bash_completion',
+-    # SmartOS
+-    u'/opt/local/share/bash-completion/bash_completion',
+-    # Homebrew (before bash-completion2)
+-    u'/usr/local/etc/bash_completion',
+-])
+-
+ 
+ def completion_script(commands):
+     """Yield the full completion shell script as strings.
+diff --git i/test/test_ui.py w/test/test_ui.py
+index 5cfed1fd..9d3dc458 100644
+--- i/test/test_ui.py
++++ w/test/test_ui.py
+@@ -1230,12 +1230,7 @@ class CompletionTest(_common.TestCase, TestHelper):
+                                   stdout=subprocess.PIPE, env=env)
+ 
+         # Load bash_completion library.
+-        for path in commands.BASH_COMPLETION_PATHS:
+-            if os.path.exists(util.syspath(path)):
+-                bash_completion = path
+-                break
+-        else:
+-            self.skipTest(u'bash-completion script not found')
++        self.skipTest(u'bash-completion script not found')
+         try:
+             with open(util.syspath(bash_completion), 'rb') as f:
+                 tester.stdin.writelines(f)
diff --git a/pkgs/tools/audio/beets/beet-check-tests.patch b/pkgs/tools/audio/beets/beet-check-tests.patch
deleted file mode 100644
index 2de97b86c8b..00000000000
--- a/pkgs/tools/audio/beets/beet-check-tests.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-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/pkgs/tools/audio/beets/check-plugin.nix b/pkgs/tools/audio/beets/check-plugin.nix
deleted file mode 100644
index 241dcdad452..00000000000
--- a/pkgs/tools/audio/beets/check-plugin.nix
+++ /dev/null
@@ -1,35 +0,0 @@
-{ 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/pkgs/tools/audio/beets/compatibility-with-breaking-changes-to-the-ast-module.patch b/pkgs/tools/audio/beets/compatibility-with-breaking-changes-to-the-ast-module.patch
deleted file mode 100644
index 4865b6f6234..00000000000
--- a/pkgs/tools/audio/beets/compatibility-with-breaking-changes-to-the-ast-module.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From 771ce704ebeac4cd9bd74b3ddde9fb01f3dc7eb4 Mon Sep 17 00:00:00 2001
-From: wisp3rwind <17089248+wisp3rwind@users.noreply.github.com>
-Date: Tue, 9 Jun 2020 19:34:31 +0200
-Subject: [PATCH] compatibility with breaking changes to the ast module
-
-new in 3.10, also backported to 3.8 and 3.9: https://github.com/python/cpython/pull/20649
-In fact, our generation of some Literals has been invalid since Python
-3.4, fix that too.
----
- beets/util/functemplate.py | 29 ++++++++++++++++++++---------
- 1 file changed, 20 insertions(+), 9 deletions(-)
-
-diff --git a/beets/util/functemplate.py b/beets/util/functemplate.py
-index af22b790..266534a9 100644
---- a/beets/util/functemplate.py
-+++ b/beets/util/functemplate.py
-@@ -73,15 +73,26 @@ def ex_literal(val):
-     """An int, float, long, bool, string, or None literal with the given
-     value.
-     """
--    if val is None:
--        return ast.Name('None', ast.Load())
--    elif isinstance(val, six.integer_types):
--        return ast.Num(val)
--    elif isinstance(val, bool):
--        return ast.Name(bytes(val), ast.Load())
--    elif isinstance(val, six.string_types):
--        return ast.Str(val)
--    raise TypeError(u'no literal for {0}'.format(type(val)))
-+    if sys.version_info[:2] < (3, 4):
-+        if val is None:
-+            return ast.Name('None', ast.Load())
-+        elif isinstance(val, six.integer_types):
-+            return ast.Num(val)
-+        elif isinstance(val, bool):
-+            return ast.Name(bytes(val), ast.Load())
-+        elif isinstance(val, six.string_types):
-+            return ast.Str(val)
-+        raise TypeError(u'no literal for {0}'.format(type(val)))
-+    elif sys.version_info[:2] < (3, 6):
-+        if val in [None, True, False]:
-+            return ast.NameConstant(val)
-+        elif isinstance(val, six.integer_types):
-+            return ast.Num(val)
-+        elif isinstance(val, six.string_types):
-+            return ast.Str(val)
-+        raise TypeError(u'no literal for {0}'.format(type(val)))
-+    else:
-+        return ast.Constant(val)
- 
- 
- def ex_varassign(name, expr):
--- 
-2.27.0
-
diff --git a/pkgs/tools/audio/beets/convert-plugin-ffmpeg-path.patch b/pkgs/tools/audio/beets/convert-plugin-ffmpeg-path.patch
new file mode 100644
index 00000000000..bcc77179d79
--- /dev/null
+++ b/pkgs/tools/audio/beets/convert-plugin-ffmpeg-path.patch
@@ -0,0 +1,43 @@
+diff --git i/beetsplug/convert.py w/beetsplug/convert.py
+index 70363f6e..2962aa4f 100644
+--- i/beetsplug/convert.py
++++ w/beetsplug/convert.py
+@@ -81,7 +81,7 @@ def get_format(fmt=None):
+         command = config['convert']['command'].as_str()
+     elif 'opts' in keys:
+         # Undocumented option for backwards compatibility with < 1.3.1.
+-        command = u'ffmpeg -i $source -y {0} $dest'.format(
++        command = u'@ffmpeg@/bin/ffmpeg -i $source -y {0} $dest'.format(
+             config['convert']['opts'].as_str()
+         )
+     if 'extension' in keys:
+@@ -121,22 +121,22 @@ class ConvertPlugin(BeetsPlugin):
+             u'id3v23': u'inherit',
+             u'formats': {
+                 u'aac': {
+-                    u'command': u'ffmpeg -i $source -y -vn -acodec aac '
++                    u'command': u'@ffmpeg@/bin/ffmpeg -i $source -y -vn -acodec aac '
+                                 u'-aq 1 $dest',
+                     u'extension': u'm4a',
+                 },
+                 u'alac': {
+-                    u'command': u'ffmpeg -i $source -y -vn -acodec alac $dest',
++                    u'command': u'@ffmpeg@/bin/ffmpeg -i $source -y -vn -acodec alac $dest',
+                     u'extension': u'm4a',
+                 },
+-                u'flac': u'ffmpeg -i $source -y -vn -acodec flac $dest',
+-                u'mp3': u'ffmpeg -i $source -y -vn -aq 2 $dest',
++                u'flac': u'@ffmpeg@/bin/ffmpeg -i $source -y -vn -acodec flac $dest',
++                u'mp3': u'@ffmpeg@/bin/ffmpeg -i $source -y -vn -aq 2 $dest',
+                 u'opus':
+-                    u'ffmpeg -i $source -y -vn -acodec libopus -ab 96k $dest',
++                    u'@ffmpeg@/bin/ffmpeg -i $source -y -vn -acodec libopus -ab 96k $dest',
+                 u'ogg':
+-                    u'ffmpeg -i $source -y -vn -acodec libvorbis -aq 3 $dest',
++                    u'@ffmpeg@/bin/ffmpeg -i $source -y -vn -acodec libvorbis -aq 3 $dest',
+                 u'wma':
+-                    u'ffmpeg -i $source -y -vn -acodec wmav2 -vn $dest',
++                    u'@ffmpeg@/bin/ffmpeg -i $source -y -vn -acodec wmav2 -vn $dest',
+             },
+             u'max_bitrate': 500,
+             u'auto': False,
diff --git a/pkgs/tools/audio/beets/default.nix b/pkgs/tools/audio/beets/default.nix
index 776eca99998..059174ae0a2 100644
--- a/pkgs/tools/audio/beets/default.nix
+++ b/pkgs/tools/audio/beets/default.nix
@@ -1,126 +1,117 @@
-{ stdenv, fetchFromGitHub, writeScript, glibcLocales, diffPlugins
+{ stdenv, lib, fetchFromGitHub, writeScript, glibcLocales, diffPlugins, substituteAll
 , 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_3 ? 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
+, runtimeShell, unstableGitUpdater
+
+# external plugins package set
+, beetsExternalPlugins
+
+, enableAbsubmit         ? lib.elem stdenv.hostPlatform.system essentia-extractor.meta.platforms, essentia-extractor
+, enableAcousticbrainz   ? true
+, enableAcoustid         ? true
+, enableAura             ? true
+, enableBadfiles         ? true, flac, mp3val
+, enableBeatport         ? true
+, enableBpsync           ? true
+, enableConvert          ? true, ffmpeg
+, enableDeezer           ? true
+, enableDiscogs          ? true
+, enableEmbyupdate       ? true
+, enableFetchart         ? true
+, enableKeyfinder        ? true, keyfinder-cli
+, enableKodiupdate       ? true
+, enableLastfm           ? true
+, enableLoadext          ? true
+, enableLyrics           ? true
+, enableMpd              ? true
+, enablePlaylist         ? true
+, enableReplaygain       ? true
+, enableSonosUpdate      ? true
+, enableSubsonicplaylist ? true
+, enableSubsonicupdate   ? true
+, enableThumbnails       ? true
+, enableWeb              ? true
 
 # External plugins
-, enableAlternatives   ? false
-, enableCheck          ? false, liboggz ? null
-, enableCopyArtifacts  ? false
+, enableAlternatives     ? false
+, enableCopyArtifacts    ? false
+, enableExtraFiles       ? 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_3 != 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;
+assert enableBpsync      -> enableBeatport;
 
 let
   optionalPlugins = {
     absubmit = enableAbsubmit;
     acousticbrainz = enableAcousticbrainz;
+    aura = enableAura;
     badfiles = enableBadfiles;
+    beatport = enableBeatport;
+    bpsync = enableBpsync;
     chroma = enableAcoustid;
     convert = enableConvert;
+    deezer = enableDeezer;
     discogs = enableDiscogs;
     embyupdate = enableEmbyupdate;
     fetchart = enableFetchart;
-    gmusic = enableGmusic;
     keyfinder = enableKeyfinder;
     kodiupdate = enableKodiupdate;
     lastgenre = enableLastfm;
     lastimport = enableLastfm;
     loadext = enableLoadext;
+    lyrics = enableLyrics;
     mpdstats = enableMpd;
     mpdupdate = enableMpd;
     playlist = enablePlaylist;
     replaygain = enableReplaygain;
     sonosupdate = enableSonosUpdate;
+    subsonicplaylist = enableSubsonicplaylist;
     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"
+    "bareasc" "bench" "bpd" "bpm" "bucket" "duplicates" "edit" "embedart"
+    "export" "filefilter" "fish" "freedesktop" "fromfilename" "ftintitle" "fuzzy"
+    "hook" "ihate" "importadded" "importfeeds" "info" "inline" "ipfs"
+    "mbcollection" "mbsubmit" "mbsync" "metasync" "missing" "parentwork" "permissions" "play"
     "plexupdate" "random" "rewrite" "scrub" "smartplaylist" "spotify" "the"
-    "types" "zero"
+    "types" "unimported" "zero"
   ];
 
-  enabledOptionalPlugins = attrNames (filterAttrs (_: id) optionalPlugins);
+  enabledOptionalPlugins = lib.attrNames (lib.filterAttrs (_: lib.id) optionalPlugins);
 
-  allPlugins = pluginsWithoutDeps ++ attrNames optionalPlugins;
+  allPlugins = pluginsWithoutDeps ++ lib.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 {
+  externalTestArgs.beets = (lib.beets.override {
     enableAlternatives = false;
     enableCopyArtifacts = false;
-  }).overrideAttrs (stdenv.lib.const {
+    enableExtraFiles = false;
+  }).overrideAttrs (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";
+  # While there is a stable version, 1.4.9, it is more than 1000 commits behind
+  # master and lacks many bug fixes and improvements[1]. Also important,
+  # unstable does not require bs1770gain[2].
+  # [1]: https://discourse.beets.io/t/forming-a-beets-core-team/639
+  # [2]: https://github.com/NixOS/nixpkgs/pull/90504
+  version = "unstable-2021-05-13";
 
   src = fetchFromGitHub {
     owner = "beetbox";
     repo = "beets";
-    rev = "v${version}";
-    sha256 = "1qxdqbzvz97zgykzdwn78g2xyxmg0q2jdb12dnjnrwvhmjv67vi8";
+    rev = "1faa41f8c558d3f4415e5e48cf4513d50b466d34";
+    sha256 = "sha256-P0bV7WNqCYe9+3lqnFmAoRlb2asdsBUjzRMc24RngpU=";
   };
 
   propagatedBuildInputs = [
@@ -134,29 +125,36 @@ in pythonPackages.buildPythonApplication rec {
     pythonPackages.unidecode
     pythonPackages.gst-python
     pythonPackages.pygobject3
+    pythonPackages.reflink
+    pythonPackages.confuse
+    pythonPackages.mediafile
     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_3
-    ++ 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;
+  ] ++ lib.optional enableAbsubmit         essentia-extractor
+    ++ lib.optional enableAcoustid         pythonPackages.pyacoustid
+    ++ lib.optional enableBeatport         pythonPackages.requests_oauthlib
+    ++ lib.optional enableConvert          ffmpeg
+    ++ lib.optional enableDiscogs          pythonPackages.discogs-client
+    ++ lib.optional (enableFetchart
+                  || enableDeezer
+                  || enableEmbyupdate
+                  || enableKodiupdate
+                  || enableLoadext
+                  || enablePlaylist
+                  || enableSubsonicplaylist
+                  || enableSubsonicupdate
+                  || enableAcousticbrainz) pythonPackages.requests
+    ++ lib.optional enableKeyfinder        keyfinder-cli
+    ++ lib.optional enableLastfm           pythonPackages.pylast
+    ++ lib.optional enableLyrics           pythonPackages.beautifulsoup4
+    ++ lib.optional enableMpd              pythonPackages.mpd2
+    ++ lib.optional enableSonosUpdate      pythonPackages.soco
+    ++ lib.optional enableThumbnails       pythonPackages.pyxdg
+    ++ lib.optional (enableAura
+                  || enableWeb)            pythonPackages.flask
+    ++ lib.optional enableAlternatives     beetsExternalPlugins.alternatives
+    ++ lib.optional enableCopyArtifacts    beetsExternalPlugins.copyartifacts
+    ++ lib.optional enableExtraFiles       beetsExternalPlugins.extrafiles
+  ;
 
   buildInputs = [
     imagemagick
@@ -177,46 +175,43 @@ in pythonPackages.buildPythonApplication rec {
     # https://github.com/beetbox/beets/blob/v1.4.9/setup.py
     pylast
     mpd2
-    discogs_client
+    discogs-client
     pyxdg
   ];
 
   patches = [
-    ./replaygain-default-bs1770gain.patch
+    # Bash completion fix for Nix
+    ./bash-completion-always-print.patch
+    # From some reason upstream assumes the program 'keyfinder-cli' is located
+    # in the path as `KeyFinder`
     ./keyfinder-default-bin.patch
-    ./mutagen-1.43.patch
-    (fetchpatch {
-      # Fixes failing testcases around the werkzeug component; can dropped after 1.4.9
-      url = "https://github.com/beetbox/beets/commit/d43d54e21cde97f57f19486925ab56b419254cc8.patch";
-      sha256 = "13n2gzmcgfi0m2ycl2r1hpczgksplnkc3y6b66vg57rx5y8nnv5c";
+  ]
+    # We need to force ffmpeg as the default, since we do not package
+    # bs1770gain, and set the absolute path there, to avoid impurities.
+    ++ lib.optional enableReplaygain (substituteAll {
+      src = ./replaygain-default-ffmpeg.patch;
+      ffmpeg = lib.getBin ffmpeg;
     })
+    # Put absolute Nix paths in place
+    ++ lib.optional enableConvert (substituteAll {
+      src = ./convert-plugin-ffmpeg-path.patch;
+      ffmpeg = lib.getBin ffmpeg;
+    })
+    ++ lib.optional enableBadfiles (substituteAll {
+      src = ./badfiles-plugin-nix-paths.patch;
+      inherit mp3val flac;
+    })
+  ;
 
-    # Fixes 548 tests due to breaking changes to the ast module
-    # https://github.com/beetbox/beets/pull/3621
-    # Can be dropped after 1.4.9
-    ./compatibility-with-breaking-changes-to-the-ast-module.patch
-  ];
-
+  # Disable failing tests
   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_3.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
+    sed -i -e 's/len(mf.images)/0/' test/test_zero.py
+
+    # Google Play Music was discontinued
+    rm -r beetsplug/gmusic.py
   '';
 
   postInstall = ''
@@ -258,7 +253,7 @@ in pythonPackages.buildPythonApplication rec {
     EDITOR="${writeScript "beetconfig.sh" ''
       #!${runtimeShell}
       cat > "$1" <<CFG
-      plugins: ${concatStringsSep " " allEnabledPlugins}
+      plugins: ${lib.concatStringsSep " " allEnabledPlugins}
       CFG
     ''}" HOME="$tmphome" "$out/bin/beet" config -e
     EDITOR=true HOME="$tmphome" "$out/bin/beet" config -e
@@ -269,14 +264,16 @@ in pythonPackages.buildPythonApplication rec {
   makeWrapperArgs = [ "--set GI_TYPELIB_PATH \"$GI_TYPELIB_PATH\"" "--set GST_PLUGIN_SYSTEM_PATH_1_0 \"$GST_PLUGIN_SYSTEM_PATH_1_0\"" ];
 
   passthru = {
-    externalPlugins = plugins;
+    # FIXME: remove in favor of pkgs.beetsExternalPlugins
+    externalPlugins = beetsExternalPlugins;
+    updateScript = unstableGitUpdater { url = "https://github.com/beetbox/beets"; };
   };
 
-  meta = {
+  meta = with lib; {
     description = "Music tagger and library organizer";
     homepage = "http://beets.io";
     license = licenses.mit;
-    maintainers = with maintainers; [ aszlig domenkozar pjones ];
+    maintainers = with maintainers; [ aszlig doronbehar lovesegfault pjones ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/audio/beets/keyfinder-default-bin.patch b/pkgs/tools/audio/beets/keyfinder-default-bin.patch
index 1ea195a678e..ec6bc3a5561 100644
--- a/pkgs/tools/audio/beets/keyfinder-default-bin.patch
+++ b/pkgs/tools/audio/beets/keyfinder-default-bin.patch
@@ -1,8 +1,8 @@
 diff --git a/beetsplug/keyfinder.py b/beetsplug/keyfinder.py
-index 34a4abc..59e8539 100644
+index 702003f0..08689cd8 100644
 --- a/beetsplug/keyfinder.py
 +++ b/beetsplug/keyfinder.py
-@@ -30,7 +30,7 @@ class KeyFinderPlugin(BeetsPlugin):
+@@ -31,7 +31,7 @@ class KeyFinderPlugin(BeetsPlugin):
      def __init__(self):
          super(KeyFinderPlugin, self).__init__()
          self.config.add({
@@ -11,18 +11,8 @@ index 34a4abc..59e8539 100644
              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
+index c8735e47..d7d670a4 100644
 --- a/test/test_keyfinder.py
 +++ b/test/test_keyfinder.py
 @@ -44,7 +44,7 @@ class KeyFinderTest(unittest.TestCase, TestHelper):
@@ -31,6 +21,6 @@ index 57e2bcd..c1ee916 100644
          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'
+         command_output.return_value = util.CommandOutput(b"dbm", b"")
diff --git a/pkgs/tools/audio/beets/mutagen-1.43.patch b/pkgs/tools/audio/beets/mutagen-1.43.patch
deleted file mode 100644
index 84cf1bab03e..00000000000
--- a/pkgs/tools/audio/beets/mutagen-1.43.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-Backport https://github.com/beetbox/mediafile/commit/b3343c4ee08d1251ae5e2344401a2f5892b4e868
-to Beets 1.4.9.
-
-diff --git i/setup.py w/setup.py
-index 79278f8..b8d6068 100755
---- i/setup.py
-+++ w/setup.py
-@@ -87,7 +87,7 @@ setup(
- 
-     install_requires=[
-         'six>=1.9',
--        'mutagen>=1.33',
-+        'mutagen>=1.43',
-         'unidecode',
-         'musicbrainzngs>=0.4',
-         'pyyaml',
-diff --git i/test/test_mediafile.py w/test/test_mediafile.py
-index 36a2c53..54ef9dd 100644
---- i/test/test_mediafile.py
-+++ w/test/test_mediafile.py
-@@ -912,7 +912,7 @@ class AIFFTest(ReadWriteTestBase, unittest.TestCase):
-         'bitrate': 705600,
-         'format': u'AIFF',
-         'samplerate': 44100,
--        'bitdepth': 0,
-+        'bitdepth': 16,
-         'channels': 1,
-     }
- 
diff --git a/pkgs/tools/audio/beets/plugins/alternatives.nix b/pkgs/tools/audio/beets/plugins/alternatives.nix
new file mode 100644
index 00000000000..146e9f50664
--- /dev/null
+++ b/pkgs/tools/audio/beets/plugins/alternatives.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitHub, beets, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "beets-alternatives";
+  version = "unstable-2021-02-01";
+
+  src = fetchFromGitHub {
+    repo = "beets-alternatives";
+    owner = "geigerzaehler";
+    rev = "288299e3aa9a1602717b04c28696fce5ce4259bf";
+    sha256 = "sha256-Xl7AHr33hXQqQDuFbWuj8HrIugeipJFPmvNXpCkU/mI=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.cfg \
+      --replace "addopts = --cov --cov-report=term --cov-report=html" ""
+  '';
+
+  nativeBuildInputs = [ beets ];
+
+  checkInputs = with pythonPackages; [
+    pytestCheckHook
+    mock
+  ];
+
+  meta = with lib; {
+    description = "Beets plugin to manage external files";
+    homepage = "https://github.com/geigerzaehler/beets-alternatives";
+    maintainers = with maintainers; [ aszlig lovesegfault ];
+    license = licenses.mit;
+  };
+}
diff --git a/pkgs/tools/audio/beets/copyartifacts-plugin.nix b/pkgs/tools/audio/beets/plugins/copyartifacts.nix
index 9432cb9bd0b..2f1ecdfc369 100644
--- a/pkgs/tools/audio/beets/copyartifacts-plugin.nix
+++ b/pkgs/tools/audio/beets/plugins/copyartifacts.nix
@@ -1,13 +1,14 @@
-{ stdenv, fetchFromGitHub, beets, pythonPackages, glibcLocales }:
+{ lib, fetchFromGitHub, beets, pythonPackages, glibcLocales }:
 
 pythonPackages.buildPythonApplication {
-  name = "beets-copyartifacts";
+  pname = "beets-copyartifacts";
+  version = "unstable-2020-02-15";
 
   src = fetchFromGitHub {
     repo = "beets-copyartifacts";
-    owner = "sbarakat";
-    rev = "d0bb75c8fc8fe125e8191d73de7ade6212aec0fd";
-    sha256 = "19b4lqq1p45n348ssmql60jylw2fw7vfj9j22nly5qj5qx51j3g5";
+    owner = "adammillerio";
+    rev = "85eefaebf893cb673fa98bfde48406ec99fd1e4b";
+    sha256 = "sha256-bkT2BZZ2gdcacgvyrVe2vMrOMV8iMAm8Q5xyrZzyqU0=";
   };
 
   postPatch = ''
@@ -28,6 +29,6 @@ pythonPackages.buildPythonApplication {
   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;
+    license = lib.licenses.mit;
   };
 }
diff --git a/pkgs/tools/audio/beets/plugins/extrafiles.nix b/pkgs/tools/audio/beets/plugins/extrafiles.nix
new file mode 100644
index 00000000000..9118765cc1b
--- /dev/null
+++ b/pkgs/tools/audio/beets/plugins/extrafiles.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitHub, beets, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "beets-extrafiles";
+  version = "unstable-2020-12-13";
+
+  src = fetchFromGitHub {
+    repo = "beets-extrafiles";
+    owner = "Holzhaus";
+    rev = "a1d6ef9a9682b6bf7af9483541e56a3ff12247b8";
+    sha256 = "sha256-ajuEbieWjTCNjdRZuGUwvStZwjx260jmY0m+ZqNd7ec=";
+  };
+
+  postPatch = ''
+    sed -i -e '/install_requires/,/\]/{/beets/d}' setup.py
+    sed -i -e '/namespace_packages/d' setup.py
+  '';
+
+  nativeBuildInputs = [ beets ];
+
+  propagatedBuildInputs = with pythonPackages; [ mediafile ];
+
+  preCheck = ''
+    HOME=$TEMPDIR
+  '';
+
+  meta = {
+    homepage = "https://github.com/Holzhaus/beets-extrafiles";
+    description = "A plugin for beets that copies additional files and directories during the import process";
+    license = lib.licenses.mit;
+  };
+}
diff --git a/pkgs/tools/audio/beets/replaygain-default-bs1770gain.patch b/pkgs/tools/audio/beets/replaygain-default-bs1770gain.patch
deleted file mode 100644
index 538f9e93303..00000000000
--- a/pkgs/tools/audio/beets/replaygain-default-bs1770gain.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-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/pkgs/tools/audio/beets/replaygain-default-ffmpeg.patch b/pkgs/tools/audio/beets/replaygain-default-ffmpeg.patch
new file mode 100644
index 00000000000..0ceba3c0944
--- /dev/null
+++ b/pkgs/tools/audio/beets/replaygain-default-ffmpeg.patch
@@ -0,0 +1,26 @@
+diff --git i/beetsplug/replaygain.py w/beetsplug/replaygain.py
+index 9d6fa23c..c5800039 100644
+--- i/beetsplug/replaygain.py
++++ w/beetsplug/replaygain.py
+@@ -391,7 +391,7 @@ class FfmpegBackend(Backend):
+ 
+     def __init__(self, config, log):
+         super(FfmpegBackend, self).__init__(config, log)
+-        self._ffmpeg_path = "ffmpeg"
++        self._ffmpeg_path = "@ffmpeg@/bin/ffmpeg"
+ 
+         # check that ffmpeg is installed
+         try:
+@@ -1228,11 +1228,10 @@ class ReplayGainPlugin(BeetsPlugin):
+     def __init__(self):
+         super(ReplayGainPlugin, self).__init__()
+ 
+-        # default backend is 'command' for backward-compatibility.
+         self.config.add({
+             'overwrite': False,
+             'auto': True,
+-            'backend': u'command',
++            'backend': u'ffmpeg',
+             'threads': cpu_count(),
+             'parallel_on_import': False,
+             'per_disc': False,
diff --git a/pkgs/tools/audio/botamusique/default.nix b/pkgs/tools/audio/botamusique/default.nix
new file mode 100644
index 00000000000..36bd1343338
--- /dev/null
+++ b/pkgs/tools/audio/botamusique/default.nix
@@ -0,0 +1,155 @@
+{ pkgs
+, lib
+, stdenv
+, fetchFromGitHub
+, python3Packages
+, ffmpeg
+, makeWrapper
+, nixosTests
+
+# For the update script
+, coreutils
+, nix-prefetch-git
+, jq
+, nodePackages
+}:
+let
+  nodejs = pkgs.nodejs-12_x;
+  nodeEnv = import ../../../development/node-packages/node-env.nix {
+    inherit (pkgs) stdenv lib python2 runCommand writeTextFile;
+    inherit pkgs nodejs;
+    libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
+  };
+  botamusiqueNodePackages = import ./node-packages.nix {
+    inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit;
+    inherit nodeEnv;
+  };
+
+  srcJson = lib.importJSON ./src.json;
+  src = fetchFromGitHub {
+    owner = "azlux";
+    repo = "botamusique";
+    inherit (srcJson) rev sha256;
+  };
+
+  nodeDependencies = (botamusiqueNodePackages.shell.override (old: {
+    src = src + "/web";
+  })).nodeDependencies;
+
+  # Python needed to instantiate the html templates
+  buildPython = python3Packages.python.withPackages (ps: [ ps.jinja2 ]);
+in
+stdenv.mkDerivation rec {
+  pname = "botamusique";
+  version = "unstable-${lib.substring 0 10 srcJson.date}";
+
+  inherit src;
+
+  patches = [
+    # botamusique by default resolves relative state paths by first checking
+    # whether it exists in the working directory, then falls back to using the
+    # installation directory. With Nix however, the installation directory is
+    # not writable, so that won't work. So we change this so that it uses
+    # relative paths unconditionally, whether they exist or not.
+    ./unconditional-relative-state-paths.patch
+
+    # We can't update the package at runtime with NixOS, so this patch makes
+    # the !update command mention that
+    ./no-runtime-update.patch
+  ];
+
+  postPatch = ''
+    # However, the function that's patched above is also used for
+    # configuration.default.ini, which is in the installation directory
+    # after all. So we need to counter-patch it here so it can find it absolutely
+    substituteInPlace mumbleBot.py \
+      --replace "configuration.default.ini" "$out/share/botamusique/configuration.default.ini"
+  '';
+
+  nativeBuildInputs = [
+    python3Packages.wrapPython
+    nodejs
+    makeWrapper
+  ];
+
+  pythonPath = with python3Packages; [
+    pymumble
+    packaging
+    magic
+    requests
+    youtube-dl
+    flask
+    mutagen
+    pillow
+    pyradios
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    # Generates artifacts in ./static
+    (
+      cd web
+      ln -s ${nodeDependencies}/lib/node_modules ./node_modules
+      export PATH="${nodeDependencies}/bin:$PATH"
+
+      npm run build
+    )
+
+    # Fills out http templates
+    ${buildPython}/bin/python scripts/translate_templates.py --lang-dir lang/ --template-dir templates/
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share $out/bin
+    cp -r . $out/share/botamusique
+    chmod +x $out/share/botamusique/mumbleBot.py
+    wrapPythonProgramsIn $out/share/botamusique "$out $pythonPath"
+
+    # Convenience binary and wrap with ffmpeg dependency
+    makeWrapper $out/share/botamusique/mumbleBot.py $out/bin/botamusique \
+      --prefix PATH : ${lib.makeBinPath [ ffmpeg ]}
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = pkgs.writeShellScript "botamusique-updater" ''
+    export PATH=${lib.makeBinPath [ coreutils nix-prefetch-git jq nodePackages.node2nix ]}
+
+    nix-prefetch-git https://github.com/azlux/botamusique > ${toString ./src.json}
+    path=$(jq '.path' -r < ${toString ./src.json})
+
+    tmp=$(mktemp -d)
+    trap 'rm -rf "$tmp"' exit
+
+    # botamusique doesn't have a version in its package.json
+    # But that's needed for node2nix
+    jq < "$path"/web/package.json > "$tmp/package.json" \
+      --arg version "0.0.0" \
+      '.version |= $version'
+
+    node2nix \
+      --input "$tmp"/package.json \
+      --lock "$path"/web/package-lock.json \
+      --no-copy-node-env \
+      --development \
+      --composition /dev/null \
+      --output ${toString ./node-packages.nix}
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) botamusique;
+  };
+
+  meta = with lib; {
+    description = "Bot to play youtube / soundcloud / radio / local music on Mumble";
+    homepage = "https://github.com/azlux/botamusique";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ infinisil ];
+  };
+}
diff --git a/pkgs/tools/audio/botamusique/no-runtime-update.patch b/pkgs/tools/audio/botamusique/no-runtime-update.patch
new file mode 100644
index 00000000000..8fc8580fce8
--- /dev/null
+++ b/pkgs/tools/audio/botamusique/no-runtime-update.patch
@@ -0,0 +1,12 @@
+diff --git a/util.py b/util.py
+index bfec1ed..5147757 100644
+--- a/util.py
++++ b/util.py
+@@ -132,6 +132,7 @@ def check_update(current_version):
+ 
+ 
+ def update(current_version):
++    return "Can't update Nix installation at runtime"
+     global log
+ 
+     target = var.config.get('bot', 'target_version')
diff --git a/pkgs/tools/audio/botamusique/node-packages.nix b/pkgs/tools/audio/botamusique/node-packages.nix
new file mode 100644
index 00000000000..c9bdb6f0097
--- /dev/null
+++ b/pkgs/tools/audio/botamusique/node-packages.nix
@@ -0,0 +1,5237 @@
+# This file has been generated by node2nix 1.9.0. Do not edit!
+
+{nodeEnv, fetchurl, fetchgit, nix-gitignore, stdenv, lib, globalBuildInputs ? []}:
+
+let
+  sources = {
+    "@babel/code-frame-7.10.4" = {
+      name = "_at_babel_slash_code-frame";
+      packageName = "@babel/code-frame";
+      version = "7.10.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz";
+        sha512 = "vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==";
+      };
+    };
+    "@babel/compat-data-7.12.7" = {
+      name = "_at_babel_slash_compat-data";
+      packageName = "@babel/compat-data";
+      version = "7.12.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz";
+        sha512 = "YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==";
+      };
+    };
+    "@babel/core-7.12.9" = {
+      name = "_at_babel_slash_core";
+      packageName = "@babel/core";
+      version = "7.12.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz";
+        sha512 = "gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==";
+      };
+    };
+    "@babel/eslint-parser-7.12.1" = {
+      name = "_at_babel_slash_eslint-parser";
+      packageName = "@babel/eslint-parser";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.12.1.tgz";
+        sha512 = "cc7WQHnHQY3++/bghgbDtPx+5bf6xTsokyGzV6Qzh65NLz/unv+mPQuACkQ9GFhIhcTFv6yqwNaEcfX7EkOEsg==";
+      };
+    };
+    "@babel/eslint-plugin-7.12.1" = {
+      name = "_at_babel_slash_eslint-plugin";
+      packageName = "@babel/eslint-plugin";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.12.1.tgz";
+        sha512 = "rOjrD5yupTYCO4x0kEbQmi/NsaD+VGOD/9Cvso64WMVPY2y6o5Nvw2sqFWdeSEBdR1Dsa07YjplBs067x5YbXg==";
+      };
+    };
+    "@babel/generator-7.12.5" = {
+      name = "_at_babel_slash_generator";
+      packageName = "@babel/generator";
+      version = "7.12.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz";
+        sha512 = "m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==";
+      };
+    };
+    "@babel/helper-annotate-as-pure-7.10.4" = {
+      name = "_at_babel_slash_helper-annotate-as-pure";
+      packageName = "@babel/helper-annotate-as-pure";
+      version = "7.10.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz";
+        sha512 = "XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==";
+      };
+    };
+    "@babel/helper-builder-binary-assignment-operator-visitor-7.10.4" = {
+      name = "_at_babel_slash_helper-builder-binary-assignment-operator-visitor";
+      packageName = "@babel/helper-builder-binary-assignment-operator-visitor";
+      version = "7.10.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz";
+        sha512 = "L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==";
+      };
+    };
+    "@babel/helper-compilation-targets-7.12.5" = {
+      name = "_at_babel_slash_helper-compilation-targets";
+      packageName = "@babel/helper-compilation-targets";
+      version = "7.12.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz";
+        sha512 = "+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==";
+      };
+    };
+    "@babel/helper-create-class-features-plugin-7.12.1" = {
+      name = "_at_babel_slash_helper-create-class-features-plugin";
+      packageName = "@babel/helper-create-class-features-plugin";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz";
+        sha512 = "hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==";
+      };
+    };
+    "@babel/helper-create-regexp-features-plugin-7.12.7" = {
+      name = "_at_babel_slash_helper-create-regexp-features-plugin";
+      packageName = "@babel/helper-create-regexp-features-plugin";
+      version = "7.12.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz";
+        sha512 = "idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==";
+      };
+    };
+    "@babel/helper-define-map-7.10.5" = {
+      name = "_at_babel_slash_helper-define-map";
+      packageName = "@babel/helper-define-map";
+      version = "7.10.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz";
+        sha512 = "fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==";
+      };
+    };
+    "@babel/helper-explode-assignable-expression-7.12.1" = {
+      name = "_at_babel_slash_helper-explode-assignable-expression";
+      packageName = "@babel/helper-explode-assignable-expression";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz";
+        sha512 = "dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==";
+      };
+    };
+    "@babel/helper-function-name-7.10.4" = {
+      name = "_at_babel_slash_helper-function-name";
+      packageName = "@babel/helper-function-name";
+      version = "7.10.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz";
+        sha512 = "YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==";
+      };
+    };
+    "@babel/helper-get-function-arity-7.10.4" = {
+      name = "_at_babel_slash_helper-get-function-arity";
+      packageName = "@babel/helper-get-function-arity";
+      version = "7.10.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz";
+        sha512 = "EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==";
+      };
+    };
+    "@babel/helper-hoist-variables-7.10.4" = {
+      name = "_at_babel_slash_helper-hoist-variables";
+      packageName = "@babel/helper-hoist-variables";
+      version = "7.10.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz";
+        sha512 = "wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==";
+      };
+    };
+    "@babel/helper-member-expression-to-functions-7.12.7" = {
+      name = "_at_babel_slash_helper-member-expression-to-functions";
+      packageName = "@babel/helper-member-expression-to-functions";
+      version = "7.12.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz";
+        sha512 = "DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==";
+      };
+    };
+    "@babel/helper-module-imports-7.12.5" = {
+      name = "_at_babel_slash_helper-module-imports";
+      packageName = "@babel/helper-module-imports";
+      version = "7.12.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz";
+        sha512 = "SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==";
+      };
+    };
+    "@babel/helper-module-transforms-7.12.1" = {
+      name = "_at_babel_slash_helper-module-transforms";
+      packageName = "@babel/helper-module-transforms";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz";
+        sha512 = "QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==";
+      };
+    };
+    "@babel/helper-optimise-call-expression-7.12.7" = {
+      name = "_at_babel_slash_helper-optimise-call-expression";
+      packageName = "@babel/helper-optimise-call-expression";
+      version = "7.12.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz";
+        sha512 = "I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==";
+      };
+    };
+    "@babel/helper-plugin-utils-7.10.4" = {
+      name = "_at_babel_slash_helper-plugin-utils";
+      packageName = "@babel/helper-plugin-utils";
+      version = "7.10.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz";
+        sha512 = "O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==";
+      };
+    };
+    "@babel/helper-remap-async-to-generator-7.12.1" = {
+      name = "_at_babel_slash_helper-remap-async-to-generator";
+      packageName = "@babel/helper-remap-async-to-generator";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz";
+        sha512 = "9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==";
+      };
+    };
+    "@babel/helper-replace-supers-7.12.5" = {
+      name = "_at_babel_slash_helper-replace-supers";
+      packageName = "@babel/helper-replace-supers";
+      version = "7.12.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz";
+        sha512 = "5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==";
+      };
+    };
+    "@babel/helper-simple-access-7.12.1" = {
+      name = "_at_babel_slash_helper-simple-access";
+      packageName = "@babel/helper-simple-access";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz";
+        sha512 = "OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==";
+      };
+    };
+    "@babel/helper-skip-transparent-expression-wrappers-7.12.1" = {
+      name = "_at_babel_slash_helper-skip-transparent-expression-wrappers";
+      packageName = "@babel/helper-skip-transparent-expression-wrappers";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz";
+        sha512 = "Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==";
+      };
+    };
+    "@babel/helper-split-export-declaration-7.11.0" = {
+      name = "_at_babel_slash_helper-split-export-declaration";
+      packageName = "@babel/helper-split-export-declaration";
+      version = "7.11.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz";
+        sha512 = "74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==";
+      };
+    };
+    "@babel/helper-validator-identifier-7.10.4" = {
+      name = "_at_babel_slash_helper-validator-identifier";
+      packageName = "@babel/helper-validator-identifier";
+      version = "7.10.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz";
+        sha512 = "3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==";
+      };
+    };
+    "@babel/helper-validator-option-7.12.1" = {
+      name = "_at_babel_slash_helper-validator-option";
+      packageName = "@babel/helper-validator-option";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz";
+        sha512 = "YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==";
+      };
+    };
+    "@babel/helper-wrap-function-7.12.3" = {
+      name = "_at_babel_slash_helper-wrap-function";
+      packageName = "@babel/helper-wrap-function";
+      version = "7.12.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz";
+        sha512 = "Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==";
+      };
+    };
+    "@babel/helpers-7.12.5" = {
+      name = "_at_babel_slash_helpers";
+      packageName = "@babel/helpers";
+      version = "7.12.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz";
+        sha512 = "lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==";
+      };
+    };
+    "@babel/highlight-7.10.4" = {
+      name = "_at_babel_slash_highlight";
+      packageName = "@babel/highlight";
+      version = "7.10.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz";
+        sha512 = "i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==";
+      };
+    };
+    "@babel/parser-7.12.7" = {
+      name = "_at_babel_slash_parser";
+      packageName = "@babel/parser";
+      version = "7.12.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz";
+        sha512 = "oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==";
+      };
+    };
+    "@babel/plugin-proposal-async-generator-functions-7.12.1" = {
+      name = "_at_babel_slash_plugin-proposal-async-generator-functions";
+      packageName = "@babel/plugin-proposal-async-generator-functions";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz";
+        sha512 = "d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==";
+      };
+    };
+    "@babel/plugin-proposal-class-properties-7.12.1" = {
+      name = "_at_babel_slash_plugin-proposal-class-properties";
+      packageName = "@babel/plugin-proposal-class-properties";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz";
+        sha512 = "cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==";
+      };
+    };
+    "@babel/plugin-proposal-dynamic-import-7.12.1" = {
+      name = "_at_babel_slash_plugin-proposal-dynamic-import";
+      packageName = "@babel/plugin-proposal-dynamic-import";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz";
+        sha512 = "a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==";
+      };
+    };
+    "@babel/plugin-proposal-export-namespace-from-7.12.1" = {
+      name = "_at_babel_slash_plugin-proposal-export-namespace-from";
+      packageName = "@babel/plugin-proposal-export-namespace-from";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz";
+        sha512 = "6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==";
+      };
+    };
+    "@babel/plugin-proposal-json-strings-7.12.1" = {
+      name = "_at_babel_slash_plugin-proposal-json-strings";
+      packageName = "@babel/plugin-proposal-json-strings";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz";
+        sha512 = "GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==";
+      };
+    };
+    "@babel/plugin-proposal-logical-assignment-operators-7.12.1" = {
+      name = "_at_babel_slash_plugin-proposal-logical-assignment-operators";
+      packageName = "@babel/plugin-proposal-logical-assignment-operators";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz";
+        sha512 = "k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==";
+      };
+    };
+    "@babel/plugin-proposal-nullish-coalescing-operator-7.12.1" = {
+      name = "_at_babel_slash_plugin-proposal-nullish-coalescing-operator";
+      packageName = "@babel/plugin-proposal-nullish-coalescing-operator";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz";
+        sha512 = "nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==";
+      };
+    };
+    "@babel/plugin-proposal-numeric-separator-7.12.7" = {
+      name = "_at_babel_slash_plugin-proposal-numeric-separator";
+      packageName = "@babel/plugin-proposal-numeric-separator";
+      version = "7.12.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz";
+        sha512 = "8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==";
+      };
+    };
+    "@babel/plugin-proposal-object-rest-spread-7.12.1" = {
+      name = "_at_babel_slash_plugin-proposal-object-rest-spread";
+      packageName = "@babel/plugin-proposal-object-rest-spread";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz";
+        sha512 = "s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==";
+      };
+    };
+    "@babel/plugin-proposal-optional-catch-binding-7.12.1" = {
+      name = "_at_babel_slash_plugin-proposal-optional-catch-binding";
+      packageName = "@babel/plugin-proposal-optional-catch-binding";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz";
+        sha512 = "hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==";
+      };
+    };
+    "@babel/plugin-proposal-optional-chaining-7.12.7" = {
+      name = "_at_babel_slash_plugin-proposal-optional-chaining";
+      packageName = "@babel/plugin-proposal-optional-chaining";
+      version = "7.12.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz";
+        sha512 = "4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==";
+      };
+    };
+    "@babel/plugin-proposal-private-methods-7.12.1" = {
+      name = "_at_babel_slash_plugin-proposal-private-methods";
+      packageName = "@babel/plugin-proposal-private-methods";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz";
+        sha512 = "mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==";
+      };
+    };
+    "@babel/plugin-proposal-unicode-property-regex-7.12.1" = {
+      name = "_at_babel_slash_plugin-proposal-unicode-property-regex";
+      packageName = "@babel/plugin-proposal-unicode-property-regex";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz";
+        sha512 = "MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==";
+      };
+    };
+    "@babel/plugin-syntax-async-generators-7.8.4" = {
+      name = "_at_babel_slash_plugin-syntax-async-generators";
+      packageName = "@babel/plugin-syntax-async-generators";
+      version = "7.8.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz";
+        sha512 = "tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==";
+      };
+    };
+    "@babel/plugin-syntax-class-properties-7.12.1" = {
+      name = "_at_babel_slash_plugin-syntax-class-properties";
+      packageName = "@babel/plugin-syntax-class-properties";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz";
+        sha512 = "U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==";
+      };
+    };
+    "@babel/plugin-syntax-dynamic-import-7.8.3" = {
+      name = "_at_babel_slash_plugin-syntax-dynamic-import";
+      packageName = "@babel/plugin-syntax-dynamic-import";
+      version = "7.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz";
+        sha512 = "5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==";
+      };
+    };
+    "@babel/plugin-syntax-export-namespace-from-7.8.3" = {
+      name = "_at_babel_slash_plugin-syntax-export-namespace-from";
+      packageName = "@babel/plugin-syntax-export-namespace-from";
+      version = "7.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz";
+        sha512 = "MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==";
+      };
+    };
+    "@babel/plugin-syntax-json-strings-7.8.3" = {
+      name = "_at_babel_slash_plugin-syntax-json-strings";
+      packageName = "@babel/plugin-syntax-json-strings";
+      version = "7.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz";
+        sha512 = "lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==";
+      };
+    };
+    "@babel/plugin-syntax-logical-assignment-operators-7.10.4" = {
+      name = "_at_babel_slash_plugin-syntax-logical-assignment-operators";
+      packageName = "@babel/plugin-syntax-logical-assignment-operators";
+      version = "7.10.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz";
+        sha512 = "d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==";
+      };
+    };
+    "@babel/plugin-syntax-nullish-coalescing-operator-7.8.3" = {
+      name = "_at_babel_slash_plugin-syntax-nullish-coalescing-operator";
+      packageName = "@babel/plugin-syntax-nullish-coalescing-operator";
+      version = "7.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz";
+        sha512 = "aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==";
+      };
+    };
+    "@babel/plugin-syntax-numeric-separator-7.10.4" = {
+      name = "_at_babel_slash_plugin-syntax-numeric-separator";
+      packageName = "@babel/plugin-syntax-numeric-separator";
+      version = "7.10.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz";
+        sha512 = "9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==";
+      };
+    };
+    "@babel/plugin-syntax-object-rest-spread-7.8.3" = {
+      name = "_at_babel_slash_plugin-syntax-object-rest-spread";
+      packageName = "@babel/plugin-syntax-object-rest-spread";
+      version = "7.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz";
+        sha512 = "XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==";
+      };
+    };
+    "@babel/plugin-syntax-optional-catch-binding-7.8.3" = {
+      name = "_at_babel_slash_plugin-syntax-optional-catch-binding";
+      packageName = "@babel/plugin-syntax-optional-catch-binding";
+      version = "7.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz";
+        sha512 = "6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==";
+      };
+    };
+    "@babel/plugin-syntax-optional-chaining-7.8.3" = {
+      name = "_at_babel_slash_plugin-syntax-optional-chaining";
+      packageName = "@babel/plugin-syntax-optional-chaining";
+      version = "7.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz";
+        sha512 = "KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==";
+      };
+    };
+    "@babel/plugin-syntax-top-level-await-7.12.1" = {
+      name = "_at_babel_slash_plugin-syntax-top-level-await";
+      packageName = "@babel/plugin-syntax-top-level-await";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz";
+        sha512 = "i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==";
+      };
+    };
+    "@babel/plugin-transform-arrow-functions-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-arrow-functions";
+      packageName = "@babel/plugin-transform-arrow-functions";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz";
+        sha512 = "5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==";
+      };
+    };
+    "@babel/plugin-transform-async-to-generator-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-async-to-generator";
+      packageName = "@babel/plugin-transform-async-to-generator";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz";
+        sha512 = "SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==";
+      };
+    };
+    "@babel/plugin-transform-block-scoped-functions-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-block-scoped-functions";
+      packageName = "@babel/plugin-transform-block-scoped-functions";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz";
+        sha512 = "5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==";
+      };
+    };
+    "@babel/plugin-transform-block-scoping-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-block-scoping";
+      packageName = "@babel/plugin-transform-block-scoping";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz";
+        sha512 = "zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==";
+      };
+    };
+    "@babel/plugin-transform-classes-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-classes";
+      packageName = "@babel/plugin-transform-classes";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz";
+        sha512 = "/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==";
+      };
+    };
+    "@babel/plugin-transform-computed-properties-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-computed-properties";
+      packageName = "@babel/plugin-transform-computed-properties";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz";
+        sha512 = "vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==";
+      };
+    };
+    "@babel/plugin-transform-destructuring-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-destructuring";
+      packageName = "@babel/plugin-transform-destructuring";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz";
+        sha512 = "fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==";
+      };
+    };
+    "@babel/plugin-transform-dotall-regex-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-dotall-regex";
+      packageName = "@babel/plugin-transform-dotall-regex";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz";
+        sha512 = "B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==";
+      };
+    };
+    "@babel/plugin-transform-duplicate-keys-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-duplicate-keys";
+      packageName = "@babel/plugin-transform-duplicate-keys";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz";
+        sha512 = "iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==";
+      };
+    };
+    "@babel/plugin-transform-exponentiation-operator-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-exponentiation-operator";
+      packageName = "@babel/plugin-transform-exponentiation-operator";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz";
+        sha512 = "7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==";
+      };
+    };
+    "@babel/plugin-transform-for-of-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-for-of";
+      packageName = "@babel/plugin-transform-for-of";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz";
+        sha512 = "Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==";
+      };
+    };
+    "@babel/plugin-transform-function-name-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-function-name";
+      packageName = "@babel/plugin-transform-function-name";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz";
+        sha512 = "JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==";
+      };
+    };
+    "@babel/plugin-transform-literals-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-literals";
+      packageName = "@babel/plugin-transform-literals";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz";
+        sha512 = "+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==";
+      };
+    };
+    "@babel/plugin-transform-member-expression-literals-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-member-expression-literals";
+      packageName = "@babel/plugin-transform-member-expression-literals";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz";
+        sha512 = "1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==";
+      };
+    };
+    "@babel/plugin-transform-modules-amd-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-modules-amd";
+      packageName = "@babel/plugin-transform-modules-amd";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz";
+        sha512 = "tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==";
+      };
+    };
+    "@babel/plugin-transform-modules-commonjs-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-modules-commonjs";
+      packageName = "@babel/plugin-transform-modules-commonjs";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz";
+        sha512 = "dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==";
+      };
+    };
+    "@babel/plugin-transform-modules-systemjs-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-modules-systemjs";
+      packageName = "@babel/plugin-transform-modules-systemjs";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz";
+        sha512 = "Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==";
+      };
+    };
+    "@babel/plugin-transform-modules-umd-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-modules-umd";
+      packageName = "@babel/plugin-transform-modules-umd";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz";
+        sha512 = "aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==";
+      };
+    };
+    "@babel/plugin-transform-named-capturing-groups-regex-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-named-capturing-groups-regex";
+      packageName = "@babel/plugin-transform-named-capturing-groups-regex";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz";
+        sha512 = "tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==";
+      };
+    };
+    "@babel/plugin-transform-new-target-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-new-target";
+      packageName = "@babel/plugin-transform-new-target";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz";
+        sha512 = "+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==";
+      };
+    };
+    "@babel/plugin-transform-object-super-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-object-super";
+      packageName = "@babel/plugin-transform-object-super";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz";
+        sha512 = "AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==";
+      };
+    };
+    "@babel/plugin-transform-parameters-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-parameters";
+      packageName = "@babel/plugin-transform-parameters";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz";
+        sha512 = "xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==";
+      };
+    };
+    "@babel/plugin-transform-property-literals-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-property-literals";
+      packageName = "@babel/plugin-transform-property-literals";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz";
+        sha512 = "6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==";
+      };
+    };
+    "@babel/plugin-transform-regenerator-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-regenerator";
+      packageName = "@babel/plugin-transform-regenerator";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz";
+        sha512 = "gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==";
+      };
+    };
+    "@babel/plugin-transform-reserved-words-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-reserved-words";
+      packageName = "@babel/plugin-transform-reserved-words";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz";
+        sha512 = "pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==";
+      };
+    };
+    "@babel/plugin-transform-shorthand-properties-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-shorthand-properties";
+      packageName = "@babel/plugin-transform-shorthand-properties";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz";
+        sha512 = "GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==";
+      };
+    };
+    "@babel/plugin-transform-spread-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-spread";
+      packageName = "@babel/plugin-transform-spread";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz";
+        sha512 = "vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==";
+      };
+    };
+    "@babel/plugin-transform-sticky-regex-7.12.7" = {
+      name = "_at_babel_slash_plugin-transform-sticky-regex";
+      packageName = "@babel/plugin-transform-sticky-regex";
+      version = "7.12.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz";
+        sha512 = "VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==";
+      };
+    };
+    "@babel/plugin-transform-template-literals-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-template-literals";
+      packageName = "@babel/plugin-transform-template-literals";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz";
+        sha512 = "b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==";
+      };
+    };
+    "@babel/plugin-transform-typeof-symbol-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-typeof-symbol";
+      packageName = "@babel/plugin-transform-typeof-symbol";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz";
+        sha512 = "EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==";
+      };
+    };
+    "@babel/plugin-transform-unicode-escapes-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-unicode-escapes";
+      packageName = "@babel/plugin-transform-unicode-escapes";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz";
+        sha512 = "I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==";
+      };
+    };
+    "@babel/plugin-transform-unicode-regex-7.12.1" = {
+      name = "_at_babel_slash_plugin-transform-unicode-regex";
+      packageName = "@babel/plugin-transform-unicode-regex";
+      version = "7.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz";
+        sha512 = "SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==";
+      };
+    };
+    "@babel/preset-env-7.12.7" = {
+      name = "_at_babel_slash_preset-env";
+      packageName = "@babel/preset-env";
+      version = "7.12.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.7.tgz";
+        sha512 = "OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew==";
+      };
+    };
+    "@babel/preset-modules-0.1.4" = {
+      name = "_at_babel_slash_preset-modules";
+      packageName = "@babel/preset-modules";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz";
+        sha512 = "J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==";
+      };
+    };
+    "@babel/runtime-7.12.5" = {
+      name = "_at_babel_slash_runtime";
+      packageName = "@babel/runtime";
+      version = "7.12.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz";
+        sha512 = "plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==";
+      };
+    };
+    "@babel/template-7.12.7" = {
+      name = "_at_babel_slash_template";
+      packageName = "@babel/template";
+      version = "7.12.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz";
+        sha512 = "GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==";
+      };
+    };
+    "@babel/traverse-7.12.9" = {
+      name = "_at_babel_slash_traverse";
+      packageName = "@babel/traverse";
+      version = "7.12.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz";
+        sha512 = "iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==";
+      };
+    };
+    "@babel/types-7.12.7" = {
+      name = "_at_babel_slash_types";
+      packageName = "@babel/types";
+      version = "7.12.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/types/-/types-7.12.7.tgz";
+        sha512 = "MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==";
+      };
+    };
+    "@eslint/eslintrc-0.2.1" = {
+      name = "_at_eslint_slash_eslintrc";
+      packageName = "@eslint/eslintrc";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz";
+        sha512 = "XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==";
+      };
+    };
+    "@fortawesome/fontawesome-common-types-0.2.32" = {
+      name = "_at_fortawesome_slash_fontawesome-common-types";
+      packageName = "@fortawesome/fontawesome-common-types";
+      version = "0.2.32";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.32.tgz";
+        sha512 = "ux2EDjKMpcdHBVLi/eWZynnPxs0BtFVXJkgHIxXRl+9ZFaHPvYamAfCzeeQFqHRjuJtX90wVnMRaMQAAlctz3w==";
+      };
+    };
+    "@fortawesome/fontawesome-svg-core-1.2.32" = {
+      name = "_at_fortawesome_slash_fontawesome-svg-core";
+      packageName = "@fortawesome/fontawesome-svg-core";
+      version = "1.2.32";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.32.tgz";
+        sha512 = "XjqyeLCsR/c/usUpdWcOdVtWFVjPbDFBTQkn2fQRrWhhUoxriQohO2RWDxLyUM8XpD+Zzg5xwJ8gqTYGDLeGaQ==";
+      };
+    };
+    "@fortawesome/free-regular-svg-icons-5.15.1" = {
+      name = "_at_fortawesome_slash_free-regular-svg-icons";
+      packageName = "@fortawesome/free-regular-svg-icons";
+      version = "5.15.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.15.1.tgz";
+        sha512 = "eD9NWFy89e7SVVtrLedJUxIpCBGhd4x7s7dhesokjyo1Tw62daqN5UcuAGu1NrepLLq1IeAYUVfWwnOjZ/j3HA==";
+      };
+    };
+    "@fortawesome/free-solid-svg-icons-5.15.1" = {
+      name = "_at_fortawesome_slash_free-solid-svg-icons";
+      packageName = "@fortawesome/free-solid-svg-icons";
+      version = "5.15.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.1.tgz";
+        sha512 = "EFMuKtzRMNbvjab/SvJBaOOpaqJfdSap/Nl6hst7CgrJxwfORR1drdTV6q1Ib/JVzq4xObdTDcT6sqTaXMqfdg==";
+      };
+    };
+    "@types/anymatch-1.3.1" = {
+      name = "_at_types_slash_anymatch";
+      packageName = "@types/anymatch";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz";
+        sha512 = "/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==";
+      };
+    };
+    "@types/eslint-7.2.5" = {
+      name = "_at_types_slash_eslint";
+      packageName = "@types/eslint";
+      version = "7.2.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.5.tgz";
+        sha512 = "Dc6ar9x16BdaR3NSxSF7T4IjL9gxxViJq8RmFd+2UAyA+K6ck2W+gUwfgpG/y9TPyUuBL35109bbULpEynvltA==";
+      };
+    };
+    "@types/eslint-scope-3.7.0" = {
+      name = "_at_types_slash_eslint-scope";
+      packageName = "@types/eslint-scope";
+      version = "3.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz";
+        sha512 = "O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==";
+      };
+    };
+    "@types/estree-0.0.45" = {
+      name = "_at_types_slash_estree";
+      packageName = "@types/estree";
+      version = "0.0.45";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz";
+        sha512 = "jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==";
+      };
+    };
+    "@types/html-minifier-terser-5.1.1" = {
+      name = "_at_types_slash_html-minifier-terser";
+      packageName = "@types/html-minifier-terser";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz";
+        sha512 = "giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==";
+      };
+    };
+    "@types/json-schema-7.0.6" = {
+      name = "_at_types_slash_json-schema";
+      packageName = "@types/json-schema";
+      version = "7.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz";
+        sha512 = "3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==";
+      };
+    };
+    "@types/json5-0.0.29" = {
+      name = "_at_types_slash_json5";
+      packageName = "@types/json5";
+      version = "0.0.29";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz";
+        sha1 = "ee28707ae94e11d2b827bcbe5270bcea7f3e71ee";
+      };
+    };
+    "@types/node-14.14.9" = {
+      name = "_at_types_slash_node";
+      packageName = "@types/node";
+      version = "14.14.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/node/-/node-14.14.9.tgz";
+        sha512 = "JsoLXFppG62tWTklIoO4knA+oDTYsmqWxHRvd4lpmfQRNhX6osheUOWETP2jMoV/2bEHuMra8Pp3Dmo/stBFcw==";
+      };
+    };
+    "@types/parse-json-4.0.0" = {
+      name = "_at_types_slash_parse-json";
+      packageName = "@types/parse-json";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz";
+        sha512 = "//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==";
+      };
+    };
+    "@types/source-list-map-0.1.2" = {
+      name = "_at_types_slash_source-list-map";
+      packageName = "@types/source-list-map";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz";
+        sha512 = "K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==";
+      };
+    };
+    "@types/tapable-1.0.6" = {
+      name = "_at_types_slash_tapable";
+      packageName = "@types/tapable";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz";
+        sha512 = "W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==";
+      };
+    };
+    "@types/uglify-js-3.11.1" = {
+      name = "_at_types_slash_uglify-js";
+      packageName = "@types/uglify-js";
+      version = "3.11.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.11.1.tgz";
+        sha512 = "7npvPKV+jINLu1SpSYVWG8KvyJBhBa8tmzMMdDoVc2pWUYHN8KIXlPJhjJ4LT97c4dXJA2SHL/q6ADbDriZN+Q==";
+      };
+    };
+    "@types/webpack-4.41.25" = {
+      name = "_at_types_slash_webpack";
+      packageName = "@types/webpack";
+      version = "4.41.25";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.25.tgz";
+        sha512 = "cr6kZ+4m9lp86ytQc1jPOJXgINQyz3kLLunZ57jznW+WIAL0JqZbGubQk4GlD42MuQL5JGOABrxdpqqWeovlVQ==";
+      };
+    };
+    "@types/webpack-sources-2.0.0" = {
+      name = "_at_types_slash_webpack-sources";
+      packageName = "@types/webpack-sources";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.0.0.tgz";
+        sha512 = "a5kPx98CNFRKQ+wqawroFunvFqv7GHm/3KOI52NY9xWADgc8smu4R6prt4EU/M4QfVjvgBkMqU4fBhw3QfMVkg==";
+      };
+    };
+    "@webassemblyjs/ast-1.9.0" = {
+      name = "_at_webassemblyjs_slash_ast";
+      packageName = "@webassemblyjs/ast";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz";
+        sha512 = "C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==";
+      };
+    };
+    "@webassemblyjs/floating-point-hex-parser-1.9.0" = {
+      name = "_at_webassemblyjs_slash_floating-point-hex-parser";
+      packageName = "@webassemblyjs/floating-point-hex-parser";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz";
+        sha512 = "TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==";
+      };
+    };
+    "@webassemblyjs/helper-api-error-1.9.0" = {
+      name = "_at_webassemblyjs_slash_helper-api-error";
+      packageName = "@webassemblyjs/helper-api-error";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz";
+        sha512 = "NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==";
+      };
+    };
+    "@webassemblyjs/helper-buffer-1.9.0" = {
+      name = "_at_webassemblyjs_slash_helper-buffer";
+      packageName = "@webassemblyjs/helper-buffer";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz";
+        sha512 = "qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==";
+      };
+    };
+    "@webassemblyjs/helper-code-frame-1.9.0" = {
+      name = "_at_webassemblyjs_slash_helper-code-frame";
+      packageName = "@webassemblyjs/helper-code-frame";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz";
+        sha512 = "ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==";
+      };
+    };
+    "@webassemblyjs/helper-fsm-1.9.0" = {
+      name = "_at_webassemblyjs_slash_helper-fsm";
+      packageName = "@webassemblyjs/helper-fsm";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz";
+        sha512 = "OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==";
+      };
+    };
+    "@webassemblyjs/helper-module-context-1.9.0" = {
+      name = "_at_webassemblyjs_slash_helper-module-context";
+      packageName = "@webassemblyjs/helper-module-context";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz";
+        sha512 = "MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==";
+      };
+    };
+    "@webassemblyjs/helper-wasm-bytecode-1.9.0" = {
+      name = "_at_webassemblyjs_slash_helper-wasm-bytecode";
+      packageName = "@webassemblyjs/helper-wasm-bytecode";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz";
+        sha512 = "R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==";
+      };
+    };
+    "@webassemblyjs/helper-wasm-section-1.9.0" = {
+      name = "_at_webassemblyjs_slash_helper-wasm-section";
+      packageName = "@webassemblyjs/helper-wasm-section";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz";
+        sha512 = "XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==";
+      };
+    };
+    "@webassemblyjs/ieee754-1.9.0" = {
+      name = "_at_webassemblyjs_slash_ieee754";
+      packageName = "@webassemblyjs/ieee754";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz";
+        sha512 = "dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==";
+      };
+    };
+    "@webassemblyjs/leb128-1.9.0" = {
+      name = "_at_webassemblyjs_slash_leb128";
+      packageName = "@webassemblyjs/leb128";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz";
+        sha512 = "ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==";
+      };
+    };
+    "@webassemblyjs/utf8-1.9.0" = {
+      name = "_at_webassemblyjs_slash_utf8";
+      packageName = "@webassemblyjs/utf8";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz";
+        sha512 = "GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==";
+      };
+    };
+    "@webassemblyjs/wasm-edit-1.9.0" = {
+      name = "_at_webassemblyjs_slash_wasm-edit";
+      packageName = "@webassemblyjs/wasm-edit";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz";
+        sha512 = "FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==";
+      };
+    };
+    "@webassemblyjs/wasm-gen-1.9.0" = {
+      name = "_at_webassemblyjs_slash_wasm-gen";
+      packageName = "@webassemblyjs/wasm-gen";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz";
+        sha512 = "cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==";
+      };
+    };
+    "@webassemblyjs/wasm-opt-1.9.0" = {
+      name = "_at_webassemblyjs_slash_wasm-opt";
+      packageName = "@webassemblyjs/wasm-opt";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz";
+        sha512 = "Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==";
+      };
+    };
+    "@webassemblyjs/wasm-parser-1.9.0" = {
+      name = "_at_webassemblyjs_slash_wasm-parser";
+      packageName = "@webassemblyjs/wasm-parser";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz";
+        sha512 = "9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==";
+      };
+    };
+    "@webassemblyjs/wast-parser-1.9.0" = {
+      name = "_at_webassemblyjs_slash_wast-parser";
+      packageName = "@webassemblyjs/wast-parser";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz";
+        sha512 = "qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==";
+      };
+    };
+    "@webassemblyjs/wast-printer-1.9.0" = {
+      name = "_at_webassemblyjs_slash_wast-printer";
+      packageName = "@webassemblyjs/wast-printer";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz";
+        sha512 = "2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==";
+      };
+    };
+    "@webpack-cli/info-1.1.0" = {
+      name = "_at_webpack-cli_slash_info";
+      packageName = "@webpack-cli/info";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webpack-cli/info/-/info-1.1.0.tgz";
+        sha512 = "uNWSdaYHc+f3LdIZNwhdhkjjLDDl3jP2+XBqAq9H8DjrJUvlOKdP8TNruy1yEaDfgpAIgbSAN7pye4FEHg9tYQ==";
+      };
+    };
+    "@webpack-cli/serve-1.1.0" = {
+      name = "_at_webpack-cli_slash_serve";
+      packageName = "@webpack-cli/serve";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.1.0.tgz";
+        sha512 = "7RfnMXCpJ/NThrhq4gYQYILB18xWyoQcBey81oIyVbmgbc6m5ZHHyFK+DyH7pLHJf0p14MxL4mTsoPAgBSTpIg==";
+      };
+    };
+    "@xtuc/ieee754-1.2.0" = {
+      name = "_at_xtuc_slash_ieee754";
+      packageName = "@xtuc/ieee754";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz";
+        sha512 = "DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==";
+      };
+    };
+    "@xtuc/long-4.2.2" = {
+      name = "_at_xtuc_slash_long";
+      packageName = "@xtuc/long";
+      version = "4.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz";
+        sha512 = "NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==";
+      };
+    };
+    "acorn-7.4.1" = {
+      name = "acorn";
+      packageName = "acorn";
+      version = "7.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz";
+        sha512 = "nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==";
+      };
+    };
+    "acorn-8.0.4" = {
+      name = "acorn";
+      packageName = "acorn";
+      version = "8.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz";
+        sha512 = "XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==";
+      };
+    };
+    "acorn-jsx-5.3.1" = {
+      name = "acorn-jsx";
+      packageName = "acorn-jsx";
+      version = "5.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz";
+        sha512 = "K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==";
+      };
+    };
+    "ajv-6.12.6" = {
+      name = "ajv";
+      packageName = "ajv";
+      version = "6.12.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz";
+        sha512 = "j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==";
+      };
+    };
+    "ajv-keywords-3.5.2" = {
+      name = "ajv-keywords";
+      packageName = "ajv-keywords";
+      version = "3.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz";
+        sha512 = "5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==";
+      };
+    };
+    "ansi-colors-4.1.1" = {
+      name = "ansi-colors";
+      packageName = "ansi-colors";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz";
+        sha512 = "JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==";
+      };
+    };
+    "ansi-regex-2.1.1" = {
+      name = "ansi-regex";
+      packageName = "ansi-regex";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
+        sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
+      };
+    };
+    "ansi-regex-4.1.0" = {
+      name = "ansi-regex";
+      packageName = "ansi-regex";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz";
+        sha512 = "1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==";
+      };
+    };
+    "ansi-regex-5.0.0" = {
+      name = "ansi-regex";
+      packageName = "ansi-regex";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz";
+        sha512 = "bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==";
+      };
+    };
+    "ansi-styles-3.2.1" = {
+      name = "ansi-styles";
+      packageName = "ansi-styles";
+      version = "3.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz";
+        sha512 = "VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==";
+      };
+    };
+    "ansi-styles-4.3.0" = {
+      name = "ansi-styles";
+      packageName = "ansi-styles";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz";
+        sha512 = "zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==";
+      };
+    };
+    "anymatch-3.1.1" = {
+      name = "anymatch";
+      packageName = "anymatch";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz";
+        sha512 = "mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==";
+      };
+    };
+    "argparse-1.0.10" = {
+      name = "argparse";
+      packageName = "argparse";
+      version = "1.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz";
+        sha512 = "o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==";
+      };
+    };
+    "array-back-4.0.1" = {
+      name = "array-back";
+      packageName = "array-back";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz";
+        sha512 = "Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==";
+      };
+    };
+    "array-includes-3.1.2" = {
+      name = "array-includes";
+      packageName = "array-includes";
+      version = "3.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz";
+        sha512 = "w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==";
+      };
+    };
+    "array.prototype.flat-1.2.4" = {
+      name = "array.prototype.flat";
+      packageName = "array.prototype.flat";
+      version = "1.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz";
+        sha512 = "4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==";
+      };
+    };
+    "astral-regex-1.0.0" = {
+      name = "astral-regex";
+      packageName = "astral-regex";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz";
+        sha512 = "+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==";
+      };
+    };
+    "autoprefixer-10.0.2" = {
+      name = "autoprefixer";
+      packageName = "autoprefixer";
+      version = "10.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.0.2.tgz";
+        sha512 = "okBmu9OMdt6DNEcZmnl0IYVv8Xl/xYWRSnc2OJ9UJEOt1u30opG1B8aLsViqKryBaYv1SKB4f85fOGZs5zYxHQ==";
+      };
+    };
+    "babel-loader-8.2.1" = {
+      name = "babel-loader";
+      packageName = "babel-loader";
+      version = "8.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.1.tgz";
+        sha512 = "dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw==";
+      };
+    };
+    "babel-plugin-dynamic-import-node-2.3.3" = {
+      name = "babel-plugin-dynamic-import-node";
+      packageName = "babel-plugin-dynamic-import-node";
+      version = "2.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz";
+        sha512 = "jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==";
+      };
+    };
+    "balanced-match-1.0.0" = {
+      name = "balanced-match";
+      packageName = "balanced-match";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz";
+        sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
+      };
+    };
+    "big.js-5.2.2" = {
+      name = "big.js";
+      packageName = "big.js";
+      version = "5.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz";
+        sha512 = "vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==";
+      };
+    };
+    "binary-extensions-2.1.0" = {
+      name = "binary-extensions";
+      packageName = "binary-extensions";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz";
+        sha512 = "1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==";
+      };
+    };
+    "boolbase-1.0.0" = {
+      name = "boolbase";
+      packageName = "boolbase";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz";
+        sha1 = "68dff5fbe60c51eb37725ea9e3ed310dcc1e776e";
+      };
+    };
+    "bootstrap-4.5.3" = {
+      name = "bootstrap";
+      packageName = "bootstrap";
+      version = "4.5.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.3.tgz";
+        sha512 = "o9ppKQioXGqhw8Z7mah6KdTYpNQY//tipnkxppWhPbiSWdD+1raYsnhwEZjkTHYbGee4cVQ0Rx65EhOY/HNLcQ==";
+      };
+    };
+    "bootswatch-4.5.3" = {
+      name = "bootswatch";
+      packageName = "bootswatch";
+      version = "4.5.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bootswatch/-/bootswatch-4.5.3.tgz";
+        sha512 = "gaB3gBSAegmYbk97aVELKcSKVdPjWsSY4yCITkUt/SqbqjtMU/HtIUszb4O9vzdbrfuVXThc/qCXzjoJaAPgiQ==";
+      };
+    };
+    "brace-expansion-1.1.11" = {
+      name = "brace-expansion";
+      packageName = "brace-expansion";
+      version = "1.1.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz";
+        sha512 = "iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==";
+      };
+    };
+    "braces-3.0.2" = {
+      name = "braces";
+      packageName = "braces";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz";
+        sha512 = "b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==";
+      };
+    };
+    "browserslist-4.14.7" = {
+      name = "browserslist";
+      packageName = "browserslist";
+      version = "4.14.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz";
+        sha512 = "BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==";
+      };
+    };
+    "buffer-from-1.1.1" = {
+      name = "buffer-from";
+      packageName = "buffer-from";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz";
+        sha512 = "MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==";
+      };
+    };
+    "call-bind-1.0.0" = {
+      name = "call-bind";
+      packageName = "call-bind";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz";
+        sha512 = "AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==";
+      };
+    };
+    "callsites-3.1.0" = {
+      name = "callsites";
+      packageName = "callsites";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz";
+        sha512 = "P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==";
+      };
+    };
+    "camel-case-4.1.1" = {
+      name = "camel-case";
+      packageName = "camel-case";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz";
+        sha512 = "7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==";
+      };
+    };
+    "camelcase-6.2.0" = {
+      name = "camelcase";
+      packageName = "camelcase";
+      version = "6.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz";
+        sha512 = "c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==";
+      };
+    };
+    "caniuse-lite-1.0.30001161" = {
+      name = "caniuse-lite";
+      packageName = "caniuse-lite";
+      version = "1.0.30001161";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001161.tgz";
+        sha512 = "JharrCDxOqPLBULF9/SPa6yMcBRTjZARJ6sc3cuKrPfyIk64JN6kuMINWqA99Xc8uElMFcROliwtz0n9pYej+g==";
+      };
+    };
+    "chalk-2.4.2" = {
+      name = "chalk";
+      packageName = "chalk";
+      version = "2.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz";
+        sha512 = "Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==";
+      };
+    };
+    "chalk-4.1.0" = {
+      name = "chalk";
+      packageName = "chalk";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz";
+        sha512 = "qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==";
+      };
+    };
+    "chokidar-3.4.3" = {
+      name = "chokidar";
+      packageName = "chokidar";
+      version = "3.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz";
+        sha512 = "DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==";
+      };
+    };
+    "chrome-trace-event-1.0.2" = {
+      name = "chrome-trace-event";
+      packageName = "chrome-trace-event";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz";
+        sha512 = "9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==";
+      };
+    };
+    "clean-css-4.2.3" = {
+      name = "clean-css";
+      packageName = "clean-css";
+      version = "4.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz";
+        sha512 = "VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==";
+      };
+    };
+    "color-convert-1.9.3" = {
+      name = "color-convert";
+      packageName = "color-convert";
+      version = "1.9.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz";
+        sha512 = "QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==";
+      };
+    };
+    "color-convert-2.0.1" = {
+      name = "color-convert";
+      packageName = "color-convert";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz";
+        sha512 = "RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==";
+      };
+    };
+    "color-name-1.1.3" = {
+      name = "color-name";
+      packageName = "color-name";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz";
+        sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25";
+      };
+    };
+    "color-name-1.1.4" = {
+      name = "color-name";
+      packageName = "color-name";
+      version = "1.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz";
+        sha512 = "dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==";
+      };
+    };
+    "colorette-1.2.2" = {
+      name = "colorette";
+      packageName = "colorette";
+      version = "1.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz";
+        sha512 = "MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==";
+      };
+    };
+    "command-line-usage-6.1.1" = {
+      name = "command-line-usage";
+      packageName = "command-line-usage";
+      version = "6.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz";
+        sha512 = "F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==";
+      };
+    };
+    "commander-2.20.3" = {
+      name = "commander";
+      packageName = "commander";
+      version = "2.20.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz";
+        sha512 = "GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==";
+      };
+    };
+    "commander-4.1.1" = {
+      name = "commander";
+      packageName = "commander";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz";
+        sha512 = "NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==";
+      };
+    };
+    "commander-6.2.0" = {
+      name = "commander";
+      packageName = "commander";
+      version = "6.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz";
+        sha512 = "zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==";
+      };
+    };
+    "comment-parser-0.7.6" = {
+      name = "comment-parser";
+      packageName = "comment-parser";
+      version = "0.7.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/comment-parser/-/comment-parser-0.7.6.tgz";
+        sha512 = "GKNxVA7/iuTnAqGADlTWX4tkhzxZKXp5fLJqKTlQLHkE65XDUKutZ3BHaJC5IGcper2tT3QRD1xr4o3jNpgXXg==";
+      };
+    };
+    "commondir-1.0.1" = {
+      name = "commondir";
+      packageName = "commondir";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz";
+        sha1 = "ddd800da0c66127393cca5950ea968a3aaf1253b";
+      };
+    };
+    "concat-map-0.0.1" = {
+      name = "concat-map";
+      packageName = "concat-map";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
+        sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
+      };
+    };
+    "contains-path-0.1.0" = {
+      name = "contains-path";
+      packageName = "contains-path";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz";
+        sha1 = "fe8cf184ff6670b6baef01a9d4861a5cbec4120a";
+      };
+    };
+    "convert-source-map-1.7.0" = {
+      name = "convert-source-map";
+      packageName = "convert-source-map";
+      version = "1.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz";
+        sha512 = "4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==";
+      };
+    };
+    "core-js-3.7.0" = {
+      name = "core-js";
+      packageName = "core-js";
+      version = "3.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/core-js/-/core-js-3.7.0.tgz";
+        sha512 = "NwS7fI5M5B85EwpWuIwJN4i/fbisQUwLwiSNUWeXlkAZ0sbBjLEvLvFLf1uzAUV66PcEPt4xCGCmOZSxVf3xzA==";
+      };
+    };
+    "core-js-compat-3.7.0" = {
+      name = "core-js-compat";
+      packageName = "core-js-compat";
+      version = "3.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.7.0.tgz";
+        sha512 = "V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg==";
+      };
+    };
+    "cosmiconfig-7.0.0" = {
+      name = "cosmiconfig";
+      packageName = "cosmiconfig";
+      version = "7.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz";
+        sha512 = "pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==";
+      };
+    };
+    "cross-spawn-7.0.3" = {
+      name = "cross-spawn";
+      packageName = "cross-spawn";
+      version = "7.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz";
+        sha512 = "iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==";
+      };
+    };
+    "css-loader-5.0.1" = {
+      name = "css-loader";
+      packageName = "css-loader";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-loader/-/css-loader-5.0.1.tgz";
+        sha512 = "cXc2ti9V234cq7rJzFKhirb2L2iPy8ZjALeVJAozXYz9te3r4eqLSixNAbMDJSgJEQywqXzs8gonxaboeKqwiw==";
+      };
+    };
+    "css-select-1.2.0" = {
+      name = "css-select";
+      packageName = "css-select";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz";
+        sha1 = "2b3a110539c5355f1cd8d314623e870b121ec858";
+      };
+    };
+    "css-what-2.1.3" = {
+      name = "css-what";
+      packageName = "css-what";
+      version = "2.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz";
+        sha512 = "a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==";
+      };
+    };
+    "cssesc-3.0.0" = {
+      name = "cssesc";
+      packageName = "cssesc";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz";
+        sha512 = "/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==";
+      };
+    };
+    "debug-2.6.9" = {
+      name = "debug";
+      packageName = "debug";
+      version = "2.6.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz";
+        sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==";
+      };
+    };
+    "debug-4.3.1" = {
+      name = "debug";
+      packageName = "debug";
+      version = "4.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz";
+        sha512 = "doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==";
+      };
+    };
+    "deep-extend-0.6.0" = {
+      name = "deep-extend";
+      packageName = "deep-extend";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz";
+        sha512 = "LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==";
+      };
+    };
+    "deep-is-0.1.3" = {
+      name = "deep-is";
+      packageName = "deep-is";
+      version = "0.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz";
+        sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
+      };
+    };
+    "define-properties-1.1.3" = {
+      name = "define-properties";
+      packageName = "define-properties";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz";
+        sha512 = "3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==";
+      };
+    };
+    "doctrine-1.5.0" = {
+      name = "doctrine";
+      packageName = "doctrine";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz";
+        sha1 = "379dce730f6166f76cefa4e6707a159b02c5a6fa";
+      };
+    };
+    "doctrine-3.0.0" = {
+      name = "doctrine";
+      packageName = "doctrine";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz";
+        sha512 = "yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==";
+      };
+    };
+    "dom-converter-0.2.0" = {
+      name = "dom-converter";
+      packageName = "dom-converter";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz";
+        sha512 = "gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==";
+      };
+    };
+    "dom-serializer-0.2.2" = {
+      name = "dom-serializer";
+      packageName = "dom-serializer";
+      version = "0.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz";
+        sha512 = "2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==";
+      };
+    };
+    "domelementtype-1.3.1" = {
+      name = "domelementtype";
+      packageName = "domelementtype";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz";
+        sha512 = "BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==";
+      };
+    };
+    "domelementtype-2.0.2" = {
+      name = "domelementtype";
+      packageName = "domelementtype";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz";
+        sha512 = "wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==";
+      };
+    };
+    "domhandler-2.4.2" = {
+      name = "domhandler";
+      packageName = "domhandler";
+      version = "2.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz";
+        sha512 = "JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==";
+      };
+    };
+    "domutils-1.5.1" = {
+      name = "domutils";
+      packageName = "domutils";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz";
+        sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf";
+      };
+    };
+    "dot-case-3.0.3" = {
+      name = "dot-case";
+      packageName = "dot-case";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz";
+        sha512 = "7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==";
+      };
+    };
+    "electron-to-chromium-1.3.607" = {
+      name = "electron-to-chromium";
+      packageName = "electron-to-chromium";
+      version = "1.3.607";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.607.tgz";
+        sha512 = "h2SYNaBnlplGS0YyXl8oJWokfcNxVjJANQfMCsQefG6OSuAuNIeW+A8yGT/ci+xRoBb3k2zq1FrOvkgoKBol8g==";
+      };
+    };
+    "emoji-regex-7.0.3" = {
+      name = "emoji-regex";
+      packageName = "emoji-regex";
+      version = "7.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz";
+        sha512 = "CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==";
+      };
+    };
+    "emojis-list-3.0.0" = {
+      name = "emojis-list";
+      packageName = "emojis-list";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz";
+        sha512 = "/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==";
+      };
+    };
+    "end-of-stream-1.4.4" = {
+      name = "end-of-stream";
+      packageName = "end-of-stream";
+      version = "1.4.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz";
+        sha512 = "+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==";
+      };
+    };
+    "enhanced-resolve-5.3.2" = {
+      name = "enhanced-resolve";
+      packageName = "enhanced-resolve";
+      version = "5.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.3.2.tgz";
+        sha512 = "G28GCrglCAH6+EqMN2D+Q2wCUS1O1vVQJBn8ME2I/Api41YBe4vLWWRBOUbwDH7vwzSZdljxwTRVqnf+sm6XqQ==";
+      };
+    };
+    "enquirer-2.3.6" = {
+      name = "enquirer";
+      packageName = "enquirer";
+      version = "2.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz";
+        sha512 = "yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==";
+      };
+    };
+    "entities-1.1.2" = {
+      name = "entities";
+      packageName = "entities";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz";
+        sha512 = "f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==";
+      };
+    };
+    "entities-2.1.0" = {
+      name = "entities";
+      packageName = "entities";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz";
+        sha512 = "hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==";
+      };
+    };
+    "envinfo-7.7.3" = {
+      name = "envinfo";
+      packageName = "envinfo";
+      version = "7.7.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz";
+        sha512 = "46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==";
+      };
+    };
+    "error-ex-1.3.2" = {
+      name = "error-ex";
+      packageName = "error-ex";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz";
+        sha512 = "7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==";
+      };
+    };
+    "es-abstract-1.17.7" = {
+      name = "es-abstract";
+      packageName = "es-abstract";
+      version = "1.17.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz";
+        sha512 = "VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==";
+      };
+    };
+    "es-abstract-1.18.0-next.1" = {
+      name = "es-abstract";
+      packageName = "es-abstract";
+      version = "1.18.0-next.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz";
+        sha512 = "I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==";
+      };
+    };
+    "es-to-primitive-1.2.1" = {
+      name = "es-to-primitive";
+      packageName = "es-to-primitive";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz";
+        sha512 = "QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==";
+      };
+    };
+    "escalade-3.1.1" = {
+      name = "escalade";
+      packageName = "escalade";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz";
+        sha512 = "k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==";
+      };
+    };
+    "escape-string-regexp-1.0.5" = {
+      name = "escape-string-regexp";
+      packageName = "escape-string-regexp";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
+        sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
+      };
+    };
+    "eslint-7.14.0" = {
+      name = "eslint";
+      packageName = "eslint";
+      version = "7.14.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint/-/eslint-7.14.0.tgz";
+        sha512 = "5YubdnPXrlrYAFCKybPuHIAH++PINe1pmKNc5wQRB9HSbqIK1ywAnntE3Wwua4giKu0bjligf1gLF6qxMGOYRA==";
+      };
+    };
+    "eslint-import-resolver-node-0.3.4" = {
+      name = "eslint-import-resolver-node";
+      packageName = "eslint-import-resolver-node";
+      version = "0.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz";
+        sha512 = "ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==";
+      };
+    };
+    "eslint-module-utils-2.6.0" = {
+      name = "eslint-module-utils";
+      packageName = "eslint-module-utils";
+      version = "2.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz";
+        sha512 = "6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==";
+      };
+    };
+    "eslint-plugin-import-2.22.1" = {
+      name = "eslint-plugin-import";
+      packageName = "eslint-plugin-import";
+      version = "2.22.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz";
+        sha512 = "8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==";
+      };
+    };
+    "eslint-plugin-jquery-1.5.1" = {
+      name = "eslint-plugin-jquery";
+      packageName = "eslint-plugin-jquery";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-plugin-jquery/-/eslint-plugin-jquery-1.5.1.tgz";
+        sha512 = "L7v1eaK5t80C0lvUXPFP9MKnBOqPSKhCOYyzy4LZ0+iK+TJwN8S9gAkzzP1AOhypRIwA88HF6phQ9C7jnOpW8w==";
+      };
+    };
+    "eslint-plugin-jsdoc-30.7.8" = {
+      name = "eslint-plugin-jsdoc";
+      packageName = "eslint-plugin-jsdoc";
+      version = "30.7.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-30.7.8.tgz";
+        sha512 = "OWm2AYvXjCl7nRbpcw5xisfSVkpVAyp4lGqL9T+DeK4kaPm6ecnmTc/G5s1PtcRrwbaI8bIWGzwScqv5CdGyxA==";
+      };
+    };
+    "eslint-rule-composer-0.3.0" = {
+      name = "eslint-rule-composer";
+      packageName = "eslint-rule-composer";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz";
+        sha512 = "bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==";
+      };
+    };
+    "eslint-scope-5.1.0" = {
+      name = "eslint-scope";
+      packageName = "eslint-scope";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz";
+        sha512 = "iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==";
+      };
+    };
+    "eslint-scope-5.1.1" = {
+      name = "eslint-scope";
+      packageName = "eslint-scope";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz";
+        sha512 = "2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==";
+      };
+    };
+    "eslint-utils-2.1.0" = {
+      name = "eslint-utils";
+      packageName = "eslint-utils";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz";
+        sha512 = "w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==";
+      };
+    };
+    "eslint-visitor-keys-1.3.0" = {
+      name = "eslint-visitor-keys";
+      packageName = "eslint-visitor-keys";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz";
+        sha512 = "6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==";
+      };
+    };
+    "eslint-visitor-keys-2.0.0" = {
+      name = "eslint-visitor-keys";
+      packageName = "eslint-visitor-keys";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz";
+        sha512 = "QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==";
+      };
+    };
+    "espree-7.3.0" = {
+      name = "espree";
+      packageName = "espree";
+      version = "7.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz";
+        sha512 = "dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==";
+      };
+    };
+    "esprima-4.0.1" = {
+      name = "esprima";
+      packageName = "esprima";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz";
+        sha512 = "eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==";
+      };
+    };
+    "esquery-1.3.1" = {
+      name = "esquery";
+      packageName = "esquery";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz";
+        sha512 = "olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==";
+      };
+    };
+    "esrecurse-4.3.0" = {
+      name = "esrecurse";
+      packageName = "esrecurse";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz";
+        sha512 = "KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==";
+      };
+    };
+    "estraverse-4.3.0" = {
+      name = "estraverse";
+      packageName = "estraverse";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz";
+        sha512 = "39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==";
+      };
+    };
+    "estraverse-5.2.0" = {
+      name = "estraverse";
+      packageName = "estraverse";
+      version = "5.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz";
+        sha512 = "BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==";
+      };
+    };
+    "esutils-2.0.3" = {
+      name = "esutils";
+      packageName = "esutils";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz";
+        sha512 = "kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==";
+      };
+    };
+    "events-3.2.0" = {
+      name = "events";
+      packageName = "events";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/events/-/events-3.2.0.tgz";
+        sha512 = "/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==";
+      };
+    };
+    "execa-4.1.0" = {
+      name = "execa";
+      packageName = "execa";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz";
+        sha512 = "j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==";
+      };
+    };
+    "fast-deep-equal-3.1.3" = {
+      name = "fast-deep-equal";
+      packageName = "fast-deep-equal";
+      version = "3.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz";
+        sha512 = "f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==";
+      };
+    };
+    "fast-json-stable-stringify-2.1.0" = {
+      name = "fast-json-stable-stringify";
+      packageName = "fast-json-stable-stringify";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz";
+        sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==";
+      };
+    };
+    "fast-levenshtein-2.0.6" = {
+      name = "fast-levenshtein";
+      packageName = "fast-levenshtein";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
+        sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917";
+      };
+    };
+    "file-entry-cache-5.0.1" = {
+      name = "file-entry-cache";
+      packageName = "file-entry-cache";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz";
+        sha512 = "bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==";
+      };
+    };
+    "fill-range-7.0.1" = {
+      name = "fill-range";
+      packageName = "fill-range";
+      version = "7.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz";
+        sha512 = "qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==";
+      };
+    };
+    "find-cache-dir-2.1.0" = {
+      name = "find-cache-dir";
+      packageName = "find-cache-dir";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz";
+        sha512 = "Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==";
+      };
+    };
+    "find-up-2.1.0" = {
+      name = "find-up";
+      packageName = "find-up";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz";
+        sha1 = "45d1b7e506c717ddd482775a2b77920a3c0c57a7";
+      };
+    };
+    "find-up-3.0.0" = {
+      name = "find-up";
+      packageName = "find-up";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz";
+        sha512 = "1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==";
+      };
+    };
+    "find-up-4.1.0" = {
+      name = "find-up";
+      packageName = "find-up";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz";
+        sha512 = "PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==";
+      };
+    };
+    "flat-cache-2.0.1" = {
+      name = "flat-cache";
+      packageName = "flat-cache";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz";
+        sha512 = "LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==";
+      };
+    };
+    "flatted-2.0.2" = {
+      name = "flatted";
+      packageName = "flatted";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz";
+        sha512 = "r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==";
+      };
+    };
+    "fs.realpath-1.0.0" = {
+      name = "fs.realpath";
+      packageName = "fs.realpath";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
+        sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
+      };
+    };
+    "fsevents-2.1.3" = {
+      name = "fsevents";
+      packageName = "fsevents";
+      version = "2.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz";
+        sha512 = "Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==";
+      };
+    };
+    "function-bind-1.1.1" = {
+      name = "function-bind";
+      packageName = "function-bind";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz";
+        sha512 = "yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==";
+      };
+    };
+    "functional-red-black-tree-1.0.1" = {
+      name = "functional-red-black-tree";
+      packageName = "functional-red-black-tree";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz";
+        sha1 = "1b0ab3bd553b2a0d6399d29c0e3ea0b252078327";
+      };
+    };
+    "gensync-1.0.0-beta.2" = {
+      name = "gensync";
+      packageName = "gensync";
+      version = "1.0.0-beta.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz";
+        sha512 = "3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==";
+      };
+    };
+    "get-intrinsic-1.0.1" = {
+      name = "get-intrinsic";
+      packageName = "get-intrinsic";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz";
+        sha512 = "ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==";
+      };
+    };
+    "get-stream-5.2.0" = {
+      name = "get-stream";
+      packageName = "get-stream";
+      version = "5.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz";
+        sha512 = "nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==";
+      };
+    };
+    "glob-7.1.6" = {
+      name = "glob";
+      packageName = "glob";
+      version = "7.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz";
+        sha512 = "LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==";
+      };
+    };
+    "glob-parent-5.1.1" = {
+      name = "glob-parent";
+      packageName = "glob-parent";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz";
+        sha512 = "FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==";
+      };
+    };
+    "glob-to-regexp-0.4.1" = {
+      name = "glob-to-regexp";
+      packageName = "glob-to-regexp";
+      version = "0.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz";
+        sha512 = "lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==";
+      };
+    };
+    "globals-11.12.0" = {
+      name = "globals";
+      packageName = "globals";
+      version = "11.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz";
+        sha512 = "WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==";
+      };
+    };
+    "globals-12.4.0" = {
+      name = "globals";
+      packageName = "globals";
+      version = "12.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz";
+        sha512 = "BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==";
+      };
+    };
+    "graceful-fs-4.2.4" = {
+      name = "graceful-fs";
+      packageName = "graceful-fs";
+      version = "4.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz";
+        sha512 = "WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==";
+      };
+    };
+    "has-1.0.3" = {
+      name = "has";
+      packageName = "has";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has/-/has-1.0.3.tgz";
+        sha512 = "f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==";
+      };
+    };
+    "has-flag-3.0.0" = {
+      name = "has-flag";
+      packageName = "has-flag";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz";
+        sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd";
+      };
+    };
+    "has-flag-4.0.0" = {
+      name = "has-flag";
+      packageName = "has-flag";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz";
+        sha512 = "EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==";
+      };
+    };
+    "has-symbols-1.0.1" = {
+      name = "has-symbols";
+      packageName = "has-symbols";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz";
+        sha512 = "PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==";
+      };
+    };
+    "he-1.2.0" = {
+      name = "he";
+      packageName = "he";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/he/-/he-1.2.0.tgz";
+        sha512 = "F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==";
+      };
+    };
+    "hosted-git-info-2.8.9" = {
+      name = "hosted-git-info";
+      packageName = "hosted-git-info";
+      version = "2.8.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz";
+        sha512 = "mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==";
+      };
+    };
+    "html-minifier-terser-5.1.1" = {
+      name = "html-minifier-terser";
+      packageName = "html-minifier-terser";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz";
+        sha512 = "ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==";
+      };
+    };
+    "html-webpack-plugin-4.5.0" = {
+      name = "html-webpack-plugin";
+      packageName = "html-webpack-plugin";
+      version = "4.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz";
+        sha512 = "MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw==";
+      };
+    };
+    "htmlparser2-3.10.1" = {
+      name = "htmlparser2";
+      packageName = "htmlparser2";
+      version = "3.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz";
+        sha512 = "IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==";
+      };
+    };
+    "human-signals-1.1.1" = {
+      name = "human-signals";
+      packageName = "human-signals";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz";
+        sha512 = "SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==";
+      };
+    };
+    "icss-utils-5.1.0" = {
+      name = "icss-utils";
+      packageName = "icss-utils";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz";
+        sha512 = "soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==";
+      };
+    };
+    "ignore-4.0.6" = {
+      name = "ignore";
+      packageName = "ignore";
+      version = "4.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz";
+        sha512 = "cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==";
+      };
+    };
+    "import-fresh-3.2.2" = {
+      name = "import-fresh";
+      packageName = "import-fresh";
+      version = "3.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz";
+        sha512 = "cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==";
+      };
+    };
+    "import-local-3.0.2" = {
+      name = "import-local";
+      packageName = "import-local";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz";
+        sha512 = "vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==";
+      };
+    };
+    "imurmurhash-0.1.4" = {
+      name = "imurmurhash";
+      packageName = "imurmurhash";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz";
+        sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea";
+      };
+    };
+    "indexes-of-1.0.1" = {
+      name = "indexes-of";
+      packageName = "indexes-of";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz";
+        sha1 = "f30f716c8e2bd346c7b67d3df3915566a7c05607";
+      };
+    };
+    "inflight-1.0.6" = {
+      name = "inflight";
+      packageName = "inflight";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz";
+        sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
+      };
+    };
+    "inherits-2.0.4" = {
+      name = "inherits";
+      packageName = "inherits";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz";
+        sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==";
+      };
+    };
+    "interpret-2.2.0" = {
+      name = "interpret";
+      packageName = "interpret";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz";
+        sha512 = "Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==";
+      };
+    };
+    "is-arrayish-0.2.1" = {
+      name = "is-arrayish";
+      packageName = "is-arrayish";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz";
+        sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d";
+      };
+    };
+    "is-binary-path-2.1.0" = {
+      name = "is-binary-path";
+      packageName = "is-binary-path";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz";
+        sha512 = "ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==";
+      };
+    };
+    "is-callable-1.2.2" = {
+      name = "is-callable";
+      packageName = "is-callable";
+      version = "1.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz";
+        sha512 = "dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==";
+      };
+    };
+    "is-core-module-2.1.0" = {
+      name = "is-core-module";
+      packageName = "is-core-module";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz";
+        sha512 = "YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==";
+      };
+    };
+    "is-date-object-1.0.2" = {
+      name = "is-date-object";
+      packageName = "is-date-object";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz";
+        sha512 = "USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==";
+      };
+    };
+    "is-extglob-2.1.1" = {
+      name = "is-extglob";
+      packageName = "is-extglob";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz";
+        sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2";
+      };
+    };
+    "is-fullwidth-code-point-2.0.0" = {
+      name = "is-fullwidth-code-point";
+      packageName = "is-fullwidth-code-point";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz";
+        sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f";
+      };
+    };
+    "is-glob-4.0.1" = {
+      name = "is-glob";
+      packageName = "is-glob";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz";
+        sha512 = "5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==";
+      };
+    };
+    "is-negative-zero-2.0.0" = {
+      name = "is-negative-zero";
+      packageName = "is-negative-zero";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz";
+        sha1 = "9553b121b0fac28869da9ed459e20c7543788461";
+      };
+    };
+    "is-number-7.0.0" = {
+      name = "is-number";
+      packageName = "is-number";
+      version = "7.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz";
+        sha512 = "41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==";
+      };
+    };
+    "is-regex-1.1.1" = {
+      name = "is-regex";
+      packageName = "is-regex";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz";
+        sha512 = "1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==";
+      };
+    };
+    "is-stream-2.0.0" = {
+      name = "is-stream";
+      packageName = "is-stream";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz";
+        sha512 = "XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==";
+      };
+    };
+    "is-string-1.0.5" = {
+      name = "is-string";
+      packageName = "is-string";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz";
+        sha512 = "buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==";
+      };
+    };
+    "is-symbol-1.0.3" = {
+      name = "is-symbol";
+      packageName = "is-symbol";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz";
+        sha512 = "OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==";
+      };
+    };
+    "isarray-1.0.0" = {
+      name = "isarray";
+      packageName = "isarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
+        sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
+      };
+    };
+    "isexe-2.0.0" = {
+      name = "isexe";
+      packageName = "isexe";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz";
+        sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10";
+      };
+    };
+    "jest-worker-26.6.2" = {
+      name = "jest-worker";
+      packageName = "jest-worker";
+      version = "26.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz";
+        sha512 = "KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==";
+      };
+    };
+    "jquery-3.5.1" = {
+      name = "jquery";
+      packageName = "jquery";
+      version = "3.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz";
+        sha512 = "XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==";
+      };
+    };
+    "jquery-migrate-3.3.2" = {
+      name = "jquery-migrate";
+      packageName = "jquery-migrate";
+      version = "3.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jquery-migrate/-/jquery-migrate-3.3.2.tgz";
+        sha512 = "L3gYhr7yEtLUSAeqXSicVa0vRD4aGwjw/bWY8YzrO2o/qDY1BaMyP3oB3bZf5Auy3Hu9ynliio0CTyDWCBPVDw==";
+      };
+    };
+    "js-tokens-4.0.0" = {
+      name = "js-tokens";
+      packageName = "js-tokens";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz";
+        sha512 = "RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==";
+      };
+    };
+    "js-yaml-3.14.0" = {
+      name = "js-yaml";
+      packageName = "js-yaml";
+      version = "3.14.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz";
+        sha512 = "/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==";
+      };
+    };
+    "jsdoctypeparser-9.0.0" = {
+      name = "jsdoctypeparser";
+      packageName = "jsdoctypeparser";
+      version = "9.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz";
+        sha512 = "jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==";
+      };
+    };
+    "jsesc-0.5.0" = {
+      name = "jsesc";
+      packageName = "jsesc";
+      version = "0.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz";
+        sha1 = "e7dee66e35d6fc16f710fe91d5cf69f70f08911d";
+      };
+    };
+    "jsesc-2.5.2" = {
+      name = "jsesc";
+      packageName = "jsesc";
+      version = "2.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz";
+        sha512 = "OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==";
+      };
+    };
+    "json-parse-better-errors-1.0.2" = {
+      name = "json-parse-better-errors";
+      packageName = "json-parse-better-errors";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz";
+        sha512 = "mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==";
+      };
+    };
+    "json-parse-even-better-errors-2.3.1" = {
+      name = "json-parse-even-better-errors";
+      packageName = "json-parse-even-better-errors";
+      version = "2.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz";
+        sha512 = "xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==";
+      };
+    };
+    "json-schema-traverse-0.4.1" = {
+      name = "json-schema-traverse";
+      packageName = "json-schema-traverse";
+      version = "0.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
+        sha512 = "xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==";
+      };
+    };
+    "json-stable-stringify-without-jsonify-1.0.1" = {
+      name = "json-stable-stringify-without-jsonify";
+      packageName = "json-stable-stringify-without-jsonify";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz";
+        sha1 = "9db7b59496ad3f3cfef30a75142d2d930ad72651";
+      };
+    };
+    "json5-1.0.1" = {
+      name = "json5";
+      packageName = "json5";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz";
+        sha512 = "aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==";
+      };
+    };
+    "json5-2.1.3" = {
+      name = "json5";
+      packageName = "json5";
+      version = "2.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz";
+        sha512 = "KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==";
+      };
+    };
+    "klona-2.0.4" = {
+      name = "klona";
+      packageName = "klona";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz";
+        sha512 = "ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==";
+      };
+    };
+    "leven-3.1.0" = {
+      name = "leven";
+      packageName = "leven";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz";
+        sha512 = "qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==";
+      };
+    };
+    "levn-0.4.1" = {
+      name = "levn";
+      packageName = "levn";
+      version = "0.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz";
+        sha512 = "+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==";
+      };
+    };
+    "lines-and-columns-1.1.6" = {
+      name = "lines-and-columns";
+      packageName = "lines-and-columns";
+      version = "1.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz";
+        sha1 = "1c00c743b433cd0a4e80758f7b64a57440d9ff00";
+      };
+    };
+    "load-json-file-2.0.0" = {
+      name = "load-json-file";
+      packageName = "load-json-file";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz";
+        sha1 = "7947e42149af80d696cbf797bcaabcfe1fe29ca8";
+      };
+    };
+    "loader-runner-4.1.0" = {
+      name = "loader-runner";
+      packageName = "loader-runner";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loader-runner/-/loader-runner-4.1.0.tgz";
+        sha512 = "oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA==";
+      };
+    };
+    "loader-utils-1.4.0" = {
+      name = "loader-utils";
+      packageName = "loader-utils";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz";
+        sha512 = "qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==";
+      };
+    };
+    "loader-utils-2.0.0" = {
+      name = "loader-utils";
+      packageName = "loader-utils";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz";
+        sha512 = "rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==";
+      };
+    };
+    "locate-path-2.0.0" = {
+      name = "locate-path";
+      packageName = "locate-path";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz";
+        sha1 = "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e";
+      };
+    };
+    "locate-path-3.0.0" = {
+      name = "locate-path";
+      packageName = "locate-path";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz";
+        sha512 = "7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==";
+      };
+    };
+    "locate-path-5.0.0" = {
+      name = "locate-path";
+      packageName = "locate-path";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz";
+        sha512 = "t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==";
+      };
+    };
+    "lodash-4.17.21" = {
+      name = "lodash";
+      packageName = "lodash";
+      version = "4.17.21";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz";
+        sha512 = "v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==";
+      };
+    };
+    "lower-case-2.0.1" = {
+      name = "lower-case";
+      packageName = "lower-case";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz";
+        sha512 = "LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==";
+      };
+    };
+    "make-dir-2.1.0" = {
+      name = "make-dir";
+      packageName = "make-dir";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz";
+        sha512 = "LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==";
+      };
+    };
+    "merge-stream-2.0.0" = {
+      name = "merge-stream";
+      packageName = "merge-stream";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz";
+        sha512 = "abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==";
+      };
+    };
+    "mime-db-1.44.0" = {
+      name = "mime-db";
+      packageName = "mime-db";
+      version = "1.44.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz";
+        sha512 = "/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==";
+      };
+    };
+    "mime-types-2.1.27" = {
+      name = "mime-types";
+      packageName = "mime-types";
+      version = "2.1.27";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz";
+        sha512 = "JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==";
+      };
+    };
+    "mimic-fn-2.1.0" = {
+      name = "mimic-fn";
+      packageName = "mimic-fn";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz";
+        sha512 = "OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==";
+      };
+    };
+    "mini-css-extract-plugin-1.3.1" = {
+      name = "mini-css-extract-plugin";
+      packageName = "mini-css-extract-plugin";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.1.tgz";
+        sha512 = "jIOheqh9EU98rqj6ZaFTYNNDSFqdakNqaUZfkYwaXPjI9batmXVXX+K71NrqRAgtoGefELBMld1EQ7dqSAD5SQ==";
+      };
+    };
+    "minimatch-3.0.4" = {
+      name = "minimatch";
+      packageName = "minimatch";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz";
+        sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==";
+      };
+    };
+    "minimist-1.2.5" = {
+      name = "minimist";
+      packageName = "minimist";
+      version = "1.2.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz";
+        sha512 = "FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==";
+      };
+    };
+    "mkdirp-0.5.5" = {
+      name = "mkdirp";
+      packageName = "mkdirp";
+      version = "0.5.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz";
+        sha512 = "NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==";
+      };
+    };
+    "ms-2.0.0" = {
+      name = "ms";
+      packageName = "ms";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz";
+        sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8";
+      };
+    };
+    "ms-2.1.2" = {
+      name = "ms";
+      packageName = "ms";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz";
+        sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==";
+      };
+    };
+    "nanoid-3.1.23" = {
+      name = "nanoid";
+      packageName = "nanoid";
+      version = "3.1.23";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz";
+        sha512 = "FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==";
+      };
+    };
+    "natural-compare-1.4.0" = {
+      name = "natural-compare";
+      packageName = "natural-compare";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz";
+        sha1 = "4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7";
+      };
+    };
+    "neo-async-2.6.2" = {
+      name = "neo-async";
+      packageName = "neo-async";
+      version = "2.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz";
+        sha512 = "Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==";
+      };
+    };
+    "no-case-3.0.3" = {
+      name = "no-case";
+      packageName = "no-case";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz";
+        sha512 = "ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==";
+      };
+    };
+    "node-releases-1.1.67" = {
+      name = "node-releases";
+      packageName = "node-releases";
+      version = "1.1.67";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz";
+        sha512 = "V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==";
+      };
+    };
+    "normalize-package-data-2.5.0" = {
+      name = "normalize-package-data";
+      packageName = "normalize-package-data";
+      version = "2.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz";
+        sha512 = "/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==";
+      };
+    };
+    "normalize-path-3.0.0" = {
+      name = "normalize-path";
+      packageName = "normalize-path";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz";
+        sha512 = "6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==";
+      };
+    };
+    "normalize-range-0.1.2" = {
+      name = "normalize-range";
+      packageName = "normalize-range";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz";
+        sha1 = "2d10c06bdfd312ea9777695a4d28439456b75942";
+      };
+    };
+    "npm-run-path-4.0.1" = {
+      name = "npm-run-path";
+      packageName = "npm-run-path";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz";
+        sha512 = "S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==";
+      };
+    };
+    "nth-check-1.0.2" = {
+      name = "nth-check";
+      packageName = "nth-check";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz";
+        sha512 = "WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==";
+      };
+    };
+    "num2fraction-1.2.2" = {
+      name = "num2fraction";
+      packageName = "num2fraction";
+      version = "1.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz";
+        sha1 = "6f682b6a027a4e9ddfa4564cd2589d1d4e669ede";
+      };
+    };
+    "object-inspect-1.8.0" = {
+      name = "object-inspect";
+      packageName = "object-inspect";
+      version = "1.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz";
+        sha512 = "jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==";
+      };
+    };
+    "object-keys-1.1.1" = {
+      name = "object-keys";
+      packageName = "object-keys";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz";
+        sha512 = "NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==";
+      };
+    };
+    "object.assign-4.1.2" = {
+      name = "object.assign";
+      packageName = "object.assign";
+      version = "4.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz";
+        sha512 = "ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==";
+      };
+    };
+    "object.getownpropertydescriptors-2.1.0" = {
+      name = "object.getownpropertydescriptors";
+      packageName = "object.getownpropertydescriptors";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz";
+        sha512 = "Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==";
+      };
+    };
+    "object.values-1.1.1" = {
+      name = "object.values";
+      packageName = "object.values";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz";
+        sha512 = "WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==";
+      };
+    };
+    "once-1.4.0" = {
+      name = "once";
+      packageName = "once";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
+        sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
+      };
+    };
+    "onetime-5.1.2" = {
+      name = "onetime";
+      packageName = "onetime";
+      version = "5.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz";
+        sha512 = "kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==";
+      };
+    };
+    "optionator-0.9.1" = {
+      name = "optionator";
+      packageName = "optionator";
+      version = "0.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz";
+        sha512 = "74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==";
+      };
+    };
+    "p-limit-1.3.0" = {
+      name = "p-limit";
+      packageName = "p-limit";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz";
+        sha512 = "vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==";
+      };
+    };
+    "p-limit-2.3.0" = {
+      name = "p-limit";
+      packageName = "p-limit";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz";
+        sha512 = "//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==";
+      };
+    };
+    "p-limit-3.0.2" = {
+      name = "p-limit";
+      packageName = "p-limit";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz";
+        sha512 = "iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==";
+      };
+    };
+    "p-locate-2.0.0" = {
+      name = "p-locate";
+      packageName = "p-locate";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz";
+        sha1 = "20a0103b222a70c8fd39cc2e580680f3dde5ec43";
+      };
+    };
+    "p-locate-3.0.0" = {
+      name = "p-locate";
+      packageName = "p-locate";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz";
+        sha512 = "x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==";
+      };
+    };
+    "p-locate-4.1.0" = {
+      name = "p-locate";
+      packageName = "p-locate";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz";
+        sha512 = "R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==";
+      };
+    };
+    "p-try-1.0.0" = {
+      name = "p-try";
+      packageName = "p-try";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz";
+        sha1 = "cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3";
+      };
+    };
+    "p-try-2.2.0" = {
+      name = "p-try";
+      packageName = "p-try";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz";
+        sha512 = "R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==";
+      };
+    };
+    "param-case-3.0.3" = {
+      name = "param-case";
+      packageName = "param-case";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz";
+        sha512 = "VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==";
+      };
+    };
+    "parent-module-1.0.1" = {
+      name = "parent-module";
+      packageName = "parent-module";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz";
+        sha512 = "GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==";
+      };
+    };
+    "parse-json-2.2.0" = {
+      name = "parse-json";
+      packageName = "parse-json";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz";
+        sha1 = "f480f40434ef80741f8469099f8dea18f55a4dc9";
+      };
+    };
+    "parse-json-5.1.0" = {
+      name = "parse-json";
+      packageName = "parse-json";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz";
+        sha512 = "+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==";
+      };
+    };
+    "pascal-case-3.1.1" = {
+      name = "pascal-case";
+      packageName = "pascal-case";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz";
+        sha512 = "XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==";
+      };
+    };
+    "path-exists-3.0.0" = {
+      name = "path-exists";
+      packageName = "path-exists";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz";
+        sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515";
+      };
+    };
+    "path-exists-4.0.0" = {
+      name = "path-exists";
+      packageName = "path-exists";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz";
+        sha512 = "ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==";
+      };
+    };
+    "path-is-absolute-1.0.1" = {
+      name = "path-is-absolute";
+      packageName = "path-is-absolute";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
+        sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
+      };
+    };
+    "path-key-3.1.1" = {
+      name = "path-key";
+      packageName = "path-key";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz";
+        sha512 = "ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==";
+      };
+    };
+    "path-parse-1.0.6" = {
+      name = "path-parse";
+      packageName = "path-parse";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz";
+        sha512 = "GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==";
+      };
+    };
+    "path-type-2.0.0" = {
+      name = "path-type";
+      packageName = "path-type";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz";
+        sha1 = "f012ccb8415b7096fc2daa1054c3d72389594c73";
+      };
+    };
+    "path-type-4.0.0" = {
+      name = "path-type";
+      packageName = "path-type";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz";
+        sha512 = "gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==";
+      };
+    };
+    "picomatch-2.2.2" = {
+      name = "picomatch";
+      packageName = "picomatch";
+      version = "2.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz";
+        sha512 = "q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==";
+      };
+    };
+    "pify-2.3.0" = {
+      name = "pify";
+      packageName = "pify";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz";
+        sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c";
+      };
+    };
+    "pify-4.0.1" = {
+      name = "pify";
+      packageName = "pify";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz";
+        sha512 = "uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==";
+      };
+    };
+    "pkg-dir-2.0.0" = {
+      name = "pkg-dir";
+      packageName = "pkg-dir";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz";
+        sha1 = "f6d5d1109e19d63edf428e0bd57e12777615334b";
+      };
+    };
+    "pkg-dir-3.0.0" = {
+      name = "pkg-dir";
+      packageName = "pkg-dir";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz";
+        sha512 = "/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==";
+      };
+    };
+    "pkg-dir-4.2.0" = {
+      name = "pkg-dir";
+      packageName = "pkg-dir";
+      version = "4.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz";
+        sha512 = "HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==";
+      };
+    };
+    "popper.js-1.16.1" = {
+      name = "popper.js";
+      packageName = "popper.js";
+      version = "1.16.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz";
+        sha512 = "Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==";
+      };
+    };
+    "postcss-8.2.15" = {
+      name = "postcss";
+      packageName = "postcss";
+      version = "8.2.15";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz";
+        sha512 = "2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==";
+      };
+    };
+    "postcss-loader-4.1.0" = {
+      name = "postcss-loader";
+      packageName = "postcss-loader";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.1.0.tgz";
+        sha512 = "vbCkP70F3Q9PIk6d47aBwjqAMI4LfkXCoyxj+7NPNuVIwfTGdzv2KVQes59/RuxMniIgsYQCFSY42P3+ykJfaw==";
+      };
+    };
+    "postcss-modules-extract-imports-3.0.0" = {
+      name = "postcss-modules-extract-imports";
+      packageName = "postcss-modules-extract-imports";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz";
+        sha512 = "bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==";
+      };
+    };
+    "postcss-modules-local-by-default-4.0.0" = {
+      name = "postcss-modules-local-by-default";
+      packageName = "postcss-modules-local-by-default";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz";
+        sha512 = "sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==";
+      };
+    };
+    "postcss-modules-scope-3.0.0" = {
+      name = "postcss-modules-scope";
+      packageName = "postcss-modules-scope";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz";
+        sha512 = "hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==";
+      };
+    };
+    "postcss-modules-values-4.0.0" = {
+      name = "postcss-modules-values";
+      packageName = "postcss-modules-values";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz";
+        sha512 = "RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==";
+      };
+    };
+    "postcss-selector-parser-6.0.4" = {
+      name = "postcss-selector-parser";
+      packageName = "postcss-selector-parser";
+      version = "6.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz";
+        sha512 = "gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==";
+      };
+    };
+    "postcss-value-parser-4.1.0" = {
+      name = "postcss-value-parser";
+      packageName = "postcss-value-parser";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz";
+        sha512 = "97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==";
+      };
+    };
+    "prelude-ls-1.2.1" = {
+      name = "prelude-ls";
+      packageName = "prelude-ls";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz";
+        sha512 = "vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==";
+      };
+    };
+    "pretty-error-2.1.2" = {
+      name = "pretty-error";
+      packageName = "pretty-error";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz";
+        sha512 = "EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==";
+      };
+    };
+    "progress-2.0.3" = {
+      name = "progress";
+      packageName = "progress";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz";
+        sha512 = "7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==";
+      };
+    };
+    "pump-3.0.0" = {
+      name = "pump";
+      packageName = "pump";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz";
+        sha512 = "LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==";
+      };
+    };
+    "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==";
+      };
+    };
+    "randombytes-2.1.0" = {
+      name = "randombytes";
+      packageName = "randombytes";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz";
+        sha512 = "vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==";
+      };
+    };
+    "read-pkg-2.0.0" = {
+      name = "read-pkg";
+      packageName = "read-pkg";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz";
+        sha1 = "8ef1c0623c6a6db0dc6713c4bfac46332b2368f8";
+      };
+    };
+    "read-pkg-up-2.0.0" = {
+      name = "read-pkg-up";
+      packageName = "read-pkg-up";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz";
+        sha1 = "6b72a8048984e0c41e79510fd5e9fa99b3b549be";
+      };
+    };
+    "readable-stream-3.6.0" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "3.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz";
+        sha512 = "BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==";
+      };
+    };
+    "readdirp-3.5.0" = {
+      name = "readdirp";
+      packageName = "readdirp";
+      version = "3.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz";
+        sha512 = "cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==";
+      };
+    };
+    "rechoir-0.7.0" = {
+      name = "rechoir";
+      packageName = "rechoir";
+      version = "0.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz";
+        sha512 = "ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==";
+      };
+    };
+    "reduce-flatten-2.0.0" = {
+      name = "reduce-flatten";
+      packageName = "reduce-flatten";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz";
+        sha512 = "EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==";
+      };
+    };
+    "regenerate-1.4.2" = {
+      name = "regenerate";
+      packageName = "regenerate";
+      version = "1.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz";
+        sha512 = "zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==";
+      };
+    };
+    "regenerate-unicode-properties-8.2.0" = {
+      name = "regenerate-unicode-properties";
+      packageName = "regenerate-unicode-properties";
+      version = "8.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz";
+        sha512 = "F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==";
+      };
+    };
+    "regenerator-runtime-0.13.7" = {
+      name = "regenerator-runtime";
+      packageName = "regenerator-runtime";
+      version = "0.13.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz";
+        sha512 = "a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==";
+      };
+    };
+    "regenerator-transform-0.14.5" = {
+      name = "regenerator-transform";
+      packageName = "regenerator-transform";
+      version = "0.14.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz";
+        sha512 = "eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==";
+      };
+    };
+    "regexpp-3.1.0" = {
+      name = "regexpp";
+      packageName = "regexpp";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz";
+        sha512 = "ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==";
+      };
+    };
+    "regexpu-core-4.7.1" = {
+      name = "regexpu-core";
+      packageName = "regexpu-core";
+      version = "4.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz";
+        sha512 = "ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==";
+      };
+    };
+    "regextras-0.7.1" = {
+      name = "regextras";
+      packageName = "regextras";
+      version = "0.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regextras/-/regextras-0.7.1.tgz";
+        sha512 = "9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w==";
+      };
+    };
+    "regjsgen-0.5.2" = {
+      name = "regjsgen";
+      packageName = "regjsgen";
+      version = "0.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz";
+        sha512 = "OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==";
+      };
+    };
+    "regjsparser-0.6.4" = {
+      name = "regjsparser";
+      packageName = "regjsparser";
+      version = "0.6.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz";
+        sha512 = "64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==";
+      };
+    };
+    "relateurl-0.2.7" = {
+      name = "relateurl";
+      packageName = "relateurl";
+      version = "0.2.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz";
+        sha1 = "54dbf377e51440aca90a4cd274600d3ff2d888a9";
+      };
+    };
+    "renderkid-2.0.4" = {
+      name = "renderkid";
+      packageName = "renderkid";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/renderkid/-/renderkid-2.0.4.tgz";
+        sha512 = "K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g==";
+      };
+    };
+    "resolve-1.19.0" = {
+      name = "resolve";
+      packageName = "resolve";
+      version = "1.19.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz";
+        sha512 = "rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==";
+      };
+    };
+    "resolve-cwd-3.0.0" = {
+      name = "resolve-cwd";
+      packageName = "resolve-cwd";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz";
+        sha512 = "OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==";
+      };
+    };
+    "resolve-from-4.0.0" = {
+      name = "resolve-from";
+      packageName = "resolve-from";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz";
+        sha512 = "pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==";
+      };
+    };
+    "resolve-from-5.0.0" = {
+      name = "resolve-from";
+      packageName = "resolve-from";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz";
+        sha512 = "qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==";
+      };
+    };
+    "rimraf-2.6.3" = {
+      name = "rimraf";
+      packageName = "rimraf";
+      version = "2.6.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz";
+        sha512 = "mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==";
+      };
+    };
+    "safe-buffer-5.1.2" = {
+      name = "safe-buffer";
+      packageName = "safe-buffer";
+      version = "5.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";
+        sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==";
+      };
+    };
+    "safe-buffer-5.2.1" = {
+      name = "safe-buffer";
+      packageName = "safe-buffer";
+      version = "5.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz";
+        sha512 = "rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==";
+      };
+    };
+    "sass-1.29.0" = {
+      name = "sass";
+      packageName = "sass";
+      version = "1.29.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sass/-/sass-1.29.0.tgz";
+        sha512 = "ZpwAUFgnvAUCdkjwPREny+17BpUj8nh5Yr6zKPGtLNTLrmtoRYIjm7njP24COhjJldjwW1dcv52Lpf4tNZVVRA==";
+      };
+    };
+    "sass-loader-10.1.0" = {
+      name = "sass-loader";
+      packageName = "sass-loader";
+      version = "10.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sass-loader/-/sass-loader-10.1.0.tgz";
+        sha512 = "ZCKAlczLBbFd3aGAhowpYEy69Te3Z68cg8bnHHl6WnSCvnKpbM6pQrz957HWMa8LKVuhnD9uMplmMAHwGQtHeg==";
+      };
+    };
+    "schema-utils-2.7.1" = {
+      name = "schema-utils";
+      packageName = "schema-utils";
+      version = "2.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz";
+        sha512 = "SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==";
+      };
+    };
+    "schema-utils-3.0.0" = {
+      name = "schema-utils";
+      packageName = "schema-utils";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz";
+        sha512 = "6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==";
+      };
+    };
+    "semver-5.7.1" = {
+      name = "semver";
+      packageName = "semver";
+      version = "5.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz";
+        sha512 = "sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==";
+      };
+    };
+    "semver-6.3.0" = {
+      name = "semver";
+      packageName = "semver";
+      version = "6.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz";
+        sha512 = "b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==";
+      };
+    };
+    "semver-7.0.0" = {
+      name = "semver";
+      packageName = "semver";
+      version = "7.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz";
+        sha512 = "+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==";
+      };
+    };
+    "semver-7.3.2" = {
+      name = "semver";
+      packageName = "semver";
+      version = "7.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz";
+        sha512 = "OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==";
+      };
+    };
+    "serialize-javascript-5.0.1" = {
+      name = "serialize-javascript";
+      packageName = "serialize-javascript";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz";
+        sha512 = "SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==";
+      };
+    };
+    "shebang-command-2.0.0" = {
+      name = "shebang-command";
+      packageName = "shebang-command";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz";
+        sha512 = "kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==";
+      };
+    };
+    "shebang-regex-3.0.0" = {
+      name = "shebang-regex";
+      packageName = "shebang-regex";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz";
+        sha512 = "7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==";
+      };
+    };
+    "signal-exit-3.0.3" = {
+      name = "signal-exit";
+      packageName = "signal-exit";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz";
+        sha512 = "VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==";
+      };
+    };
+    "slice-ansi-2.1.0" = {
+      name = "slice-ansi";
+      packageName = "slice-ansi";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz";
+        sha512 = "Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==";
+      };
+    };
+    "source-list-map-2.0.1" = {
+      name = "source-list-map";
+      packageName = "source-list-map";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz";
+        sha512 = "qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==";
+      };
+    };
+    "source-map-0.5.7" = {
+      name = "source-map";
+      packageName = "source-map";
+      version = "0.5.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz";
+        sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc";
+      };
+    };
+    "source-map-0.6.1" = {
+      name = "source-map";
+      packageName = "source-map";
+      version = "0.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz";
+        sha512 = "UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==";
+      };
+    };
+    "source-map-0.7.3" = {
+      name = "source-map";
+      packageName = "source-map";
+      version = "0.7.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz";
+        sha512 = "CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==";
+      };
+    };
+    "source-map-support-0.5.19" = {
+      name = "source-map-support";
+      packageName = "source-map-support";
+      version = "0.5.19";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz";
+        sha512 = "Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==";
+      };
+    };
+    "spdx-correct-3.1.1" = {
+      name = "spdx-correct";
+      packageName = "spdx-correct";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz";
+        sha512 = "cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==";
+      };
+    };
+    "spdx-exceptions-2.3.0" = {
+      name = "spdx-exceptions";
+      packageName = "spdx-exceptions";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz";
+        sha512 = "/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==";
+      };
+    };
+    "spdx-expression-parse-3.0.1" = {
+      name = "spdx-expression-parse";
+      packageName = "spdx-expression-parse";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz";
+        sha512 = "cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==";
+      };
+    };
+    "spdx-license-ids-3.0.6" = {
+      name = "spdx-license-ids";
+      packageName = "spdx-license-ids";
+      version = "3.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz";
+        sha512 = "+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==";
+      };
+    };
+    "sprintf-js-1.0.3" = {
+      name = "sprintf-js";
+      packageName = "sprintf-js";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz";
+        sha1 = "04e6926f662895354f3dd015203633b857297e2c";
+      };
+    };
+    "string-width-3.1.0" = {
+      name = "string-width";
+      packageName = "string-width";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz";
+        sha512 = "vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==";
+      };
+    };
+    "string.prototype.trimend-1.0.3" = {
+      name = "string.prototype.trimend";
+      packageName = "string.prototype.trimend";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz";
+        sha512 = "ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==";
+      };
+    };
+    "string.prototype.trimstart-1.0.3" = {
+      name = "string.prototype.trimstart";
+      packageName = "string.prototype.trimstart";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz";
+        sha512 = "oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==";
+      };
+    };
+    "string_decoder-1.3.0" = {
+      name = "string_decoder";
+      packageName = "string_decoder";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz";
+        sha512 = "hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==";
+      };
+    };
+    "strip-ansi-3.0.1" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
+        sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
+      };
+    };
+    "strip-ansi-5.2.0" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "5.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz";
+        sha512 = "DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==";
+      };
+    };
+    "strip-ansi-6.0.0" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "6.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz";
+        sha512 = "AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==";
+      };
+    };
+    "strip-bom-3.0.0" = {
+      name = "strip-bom";
+      packageName = "strip-bom";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz";
+        sha1 = "2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3";
+      };
+    };
+    "strip-final-newline-2.0.0" = {
+      name = "strip-final-newline";
+      packageName = "strip-final-newline";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz";
+        sha512 = "BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==";
+      };
+    };
+    "strip-json-comments-3.1.1" = {
+      name = "strip-json-comments";
+      packageName = "strip-json-comments";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz";
+        sha512 = "6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==";
+      };
+    };
+    "supports-color-5.5.0" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "5.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz";
+        sha512 = "QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==";
+      };
+    };
+    "supports-color-7.2.0" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "7.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz";
+        sha512 = "qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==";
+      };
+    };
+    "table-5.4.6" = {
+      name = "table";
+      packageName = "table";
+      version = "5.4.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/table/-/table-5.4.6.tgz";
+        sha512 = "wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==";
+      };
+    };
+    "table-layout-1.0.1" = {
+      name = "table-layout";
+      packageName = "table-layout";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/table-layout/-/table-layout-1.0.1.tgz";
+        sha512 = "dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q==";
+      };
+    };
+    "tapable-1.1.3" = {
+      name = "tapable";
+      packageName = "tapable";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz";
+        sha512 = "4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==";
+      };
+    };
+    "tapable-2.1.1" = {
+      name = "tapable";
+      packageName = "tapable";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tapable/-/tapable-2.1.1.tgz";
+        sha512 = "Wib1S8m2wdpLbmQz0RBEVosIyvb/ykfKXf3ZIDqvWoMg/zTNm6G/tDSuUM61J1kNCDXWJrLHGSFeMhAG+gAGpQ==";
+      };
+    };
+    "terser-4.8.0" = {
+      name = "terser";
+      packageName = "terser";
+      version = "4.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz";
+        sha512 = "EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==";
+      };
+    };
+    "terser-5.5.0" = {
+      name = "terser";
+      packageName = "terser";
+      version = "5.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/terser/-/terser-5.5.0.tgz";
+        sha512 = "eopt1Gf7/AQyPhpygdKePTzaet31TvQxXvrf7xYUvD/d8qkCJm4SKPDzu+GHK5ZaYTn8rvttfqaZc3swK21e5g==";
+      };
+    };
+    "terser-webpack-plugin-5.0.3" = {
+      name = "terser-webpack-plugin";
+      packageName = "terser-webpack-plugin";
+      version = "5.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz";
+        sha512 = "zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ==";
+      };
+    };
+    "text-table-0.2.0" = {
+      name = "text-table";
+      packageName = "text-table";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz";
+        sha1 = "7f5ee823ae805207c00af2df4a84ec3fcfa570b4";
+      };
+    };
+    "to-fast-properties-2.0.0" = {
+      name = "to-fast-properties";
+      packageName = "to-fast-properties";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz";
+        sha1 = "dc5e698cbd079265bc73e0377681a4e4e83f616e";
+      };
+    };
+    "to-regex-range-5.0.1" = {
+      name = "to-regex-range";
+      packageName = "to-regex-range";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz";
+        sha512 = "65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==";
+      };
+    };
+    "tsconfig-paths-3.9.0" = {
+      name = "tsconfig-paths";
+      packageName = "tsconfig-paths";
+      version = "3.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz";
+        sha512 = "dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==";
+      };
+    };
+    "tslib-1.14.1" = {
+      name = "tslib";
+      packageName = "tslib";
+      version = "1.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz";
+        sha512 = "Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==";
+      };
+    };
+    "type-check-0.4.0" = {
+      name = "type-check";
+      packageName = "type-check";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz";
+        sha512 = "XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==";
+      };
+    };
+    "type-fest-0.8.1" = {
+      name = "type-fest";
+      packageName = "type-fest";
+      version = "0.8.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz";
+        sha512 = "4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==";
+      };
+    };
+    "typical-5.2.0" = {
+      name = "typical";
+      packageName = "typical";
+      version = "5.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz";
+        sha512 = "dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==";
+      };
+    };
+    "unicode-canonical-property-names-ecmascript-1.0.4" = {
+      name = "unicode-canonical-property-names-ecmascript";
+      packageName = "unicode-canonical-property-names-ecmascript";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz";
+        sha512 = "jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==";
+      };
+    };
+    "unicode-match-property-ecmascript-1.0.4" = {
+      name = "unicode-match-property-ecmascript";
+      packageName = "unicode-match-property-ecmascript";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz";
+        sha512 = "L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==";
+      };
+    };
+    "unicode-match-property-value-ecmascript-1.2.0" = {
+      name = "unicode-match-property-value-ecmascript";
+      packageName = "unicode-match-property-value-ecmascript";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz";
+        sha512 = "wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==";
+      };
+    };
+    "unicode-property-aliases-ecmascript-1.1.0" = {
+      name = "unicode-property-aliases-ecmascript";
+      packageName = "unicode-property-aliases-ecmascript";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz";
+        sha512 = "PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==";
+      };
+    };
+    "uniq-1.0.1" = {
+      name = "uniq";
+      packageName = "uniq";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz";
+        sha1 = "b31c5ae8254844a3a8281541ce2b04b865a734ff";
+      };
+    };
+    "uri-js-4.4.0" = {
+      name = "uri-js";
+      packageName = "uri-js";
+      version = "4.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz";
+        sha512 = "B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==";
+      };
+    };
+    "util-deprecate-1.0.2" = {
+      name = "util-deprecate";
+      packageName = "util-deprecate";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
+        sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
+      };
+    };
+    "util.promisify-1.0.0" = {
+      name = "util.promisify";
+      packageName = "util.promisify";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz";
+        sha512 = "i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==";
+      };
+    };
+    "utila-0.4.0" = {
+      name = "utila";
+      packageName = "utila";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz";
+        sha1 = "8a16a05d445657a3aea5eecc5b12a4fa5379772c";
+      };
+    };
+    "v8-compile-cache-2.2.0" = {
+      name = "v8-compile-cache";
+      packageName = "v8-compile-cache";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz";
+        sha512 = "gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==";
+      };
+    };
+    "validate-npm-package-license-3.0.4" = {
+      name = "validate-npm-package-license";
+      packageName = "validate-npm-package-license";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz";
+        sha512 = "DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==";
+      };
+    };
+    "watchpack-2.0.1" = {
+      name = "watchpack";
+      packageName = "watchpack";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/watchpack/-/watchpack-2.0.1.tgz";
+        sha512 = "vO8AKGX22ZRo6PiOFM9dC0re8IcKh8Kd/aH2zeqUc6w4/jBGlTy2P7fTC6ekT0NjVeGjgU2dGC5rNstKkeLEQg==";
+      };
+    };
+    "webpack-5.6.0" = {
+      name = "webpack";
+      packageName = "webpack";
+      version = "5.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack/-/webpack-5.6.0.tgz";
+        sha512 = "SIeFuBhuheKElRbd84O35UhKc0nxlgSwtzm2ksZ0BVhRJqxVJxEguT/pYhfiR0le/pxTa1VsCp7EOYyTsa6XOA==";
+      };
+    };
+    "webpack-cli-4.2.0" = {
+      name = "webpack-cli";
+      packageName = "webpack-cli";
+      version = "4.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.2.0.tgz";
+        sha512 = "EIl3k88vaF4fSxWSgtAQR+VwicfLMTZ9amQtqS4o+TDPW9HGaEpbFBbAZ4A3ZOT5SOnMxNOzROsSTPiE8tBJPA==";
+      };
+    };
+    "webpack-merge-4.2.2" = {
+      name = "webpack-merge";
+      packageName = "webpack-merge";
+      version = "4.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz";
+        sha512 = "TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==";
+      };
+    };
+    "webpack-sources-1.4.3" = {
+      name = "webpack-sources";
+      packageName = "webpack-sources";
+      version = "1.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz";
+        sha512 = "lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==";
+      };
+    };
+    "webpack-sources-2.2.0" = {
+      name = "webpack-sources";
+      packageName = "webpack-sources";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz";
+        sha512 = "bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==";
+      };
+    };
+    "which-2.0.2" = {
+      name = "which";
+      packageName = "which";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which/-/which-2.0.2.tgz";
+        sha512 = "BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==";
+      };
+    };
+    "word-wrap-1.2.3" = {
+      name = "word-wrap";
+      packageName = "word-wrap";
+      version = "1.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz";
+        sha512 = "Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==";
+      };
+    };
+    "wordwrapjs-4.0.0" = {
+      name = "wordwrapjs";
+      packageName = "wordwrapjs";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.0.tgz";
+        sha512 = "Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ==";
+      };
+    };
+    "wrappy-1.0.2" = {
+      name = "wrappy";
+      packageName = "wrappy";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
+        sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
+      };
+    };
+    "write-1.0.3" = {
+      name = "write";
+      packageName = "write";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/write/-/write-1.0.3.tgz";
+        sha512 = "/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==";
+      };
+    };
+    "yaml-1.10.0" = {
+      name = "yaml";
+      packageName = "yaml";
+      version = "1.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz";
+        sha512 = "yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==";
+      };
+    };
+  };
+  args = {
+    name = "botamusique";
+    packageName = "botamusique";
+    version = "0.0.0";
+    src = ../../../../../../../../../tmp/tmp.UAoivnXH3n;
+    dependencies = [
+      sources."@babel/code-frame-7.10.4"
+      sources."@babel/compat-data-7.12.7"
+      sources."@babel/core-7.12.9"
+      (sources."@babel/eslint-parser-7.12.1" // {
+        dependencies = [
+          sources."semver-6.3.0"
+        ];
+      })
+      sources."@babel/eslint-plugin-7.12.1"
+      sources."@babel/generator-7.12.5"
+      sources."@babel/helper-annotate-as-pure-7.10.4"
+      sources."@babel/helper-builder-binary-assignment-operator-visitor-7.10.4"
+      sources."@babel/helper-compilation-targets-7.12.5"
+      sources."@babel/helper-create-class-features-plugin-7.12.1"
+      sources."@babel/helper-create-regexp-features-plugin-7.12.7"
+      sources."@babel/helper-define-map-7.10.5"
+      sources."@babel/helper-explode-assignable-expression-7.12.1"
+      sources."@babel/helper-function-name-7.10.4"
+      sources."@babel/helper-get-function-arity-7.10.4"
+      sources."@babel/helper-hoist-variables-7.10.4"
+      sources."@babel/helper-member-expression-to-functions-7.12.7"
+      sources."@babel/helper-module-imports-7.12.5"
+      sources."@babel/helper-module-transforms-7.12.1"
+      sources."@babel/helper-optimise-call-expression-7.12.7"
+      sources."@babel/helper-plugin-utils-7.10.4"
+      sources."@babel/helper-remap-async-to-generator-7.12.1"
+      sources."@babel/helper-replace-supers-7.12.5"
+      sources."@babel/helper-simple-access-7.12.1"
+      sources."@babel/helper-skip-transparent-expression-wrappers-7.12.1"
+      sources."@babel/helper-split-export-declaration-7.11.0"
+      sources."@babel/helper-validator-identifier-7.10.4"
+      sources."@babel/helper-validator-option-7.12.1"
+      sources."@babel/helper-wrap-function-7.12.3"
+      sources."@babel/helpers-7.12.5"
+      sources."@babel/highlight-7.10.4"
+      sources."@babel/parser-7.12.7"
+      sources."@babel/plugin-proposal-async-generator-functions-7.12.1"
+      sources."@babel/plugin-proposal-class-properties-7.12.1"
+      sources."@babel/plugin-proposal-dynamic-import-7.12.1"
+      sources."@babel/plugin-proposal-export-namespace-from-7.12.1"
+      sources."@babel/plugin-proposal-json-strings-7.12.1"
+      sources."@babel/plugin-proposal-logical-assignment-operators-7.12.1"
+      sources."@babel/plugin-proposal-nullish-coalescing-operator-7.12.1"
+      sources."@babel/plugin-proposal-numeric-separator-7.12.7"
+      sources."@babel/plugin-proposal-object-rest-spread-7.12.1"
+      sources."@babel/plugin-proposal-optional-catch-binding-7.12.1"
+      sources."@babel/plugin-proposal-optional-chaining-7.12.7"
+      sources."@babel/plugin-proposal-private-methods-7.12.1"
+      sources."@babel/plugin-proposal-unicode-property-regex-7.12.1"
+      sources."@babel/plugin-syntax-async-generators-7.8.4"
+      sources."@babel/plugin-syntax-class-properties-7.12.1"
+      sources."@babel/plugin-syntax-dynamic-import-7.8.3"
+      sources."@babel/plugin-syntax-export-namespace-from-7.8.3"
+      sources."@babel/plugin-syntax-json-strings-7.8.3"
+      sources."@babel/plugin-syntax-logical-assignment-operators-7.10.4"
+      sources."@babel/plugin-syntax-nullish-coalescing-operator-7.8.3"
+      sources."@babel/plugin-syntax-numeric-separator-7.10.4"
+      sources."@babel/plugin-syntax-object-rest-spread-7.8.3"
+      sources."@babel/plugin-syntax-optional-catch-binding-7.8.3"
+      sources."@babel/plugin-syntax-optional-chaining-7.8.3"
+      sources."@babel/plugin-syntax-top-level-await-7.12.1"
+      sources."@babel/plugin-transform-arrow-functions-7.12.1"
+      sources."@babel/plugin-transform-async-to-generator-7.12.1"
+      sources."@babel/plugin-transform-block-scoped-functions-7.12.1"
+      sources."@babel/plugin-transform-block-scoping-7.12.1"
+      sources."@babel/plugin-transform-classes-7.12.1"
+      sources."@babel/plugin-transform-computed-properties-7.12.1"
+      sources."@babel/plugin-transform-destructuring-7.12.1"
+      sources."@babel/plugin-transform-dotall-regex-7.12.1"
+      sources."@babel/plugin-transform-duplicate-keys-7.12.1"
+      sources."@babel/plugin-transform-exponentiation-operator-7.12.1"
+      sources."@babel/plugin-transform-for-of-7.12.1"
+      sources."@babel/plugin-transform-function-name-7.12.1"
+      sources."@babel/plugin-transform-literals-7.12.1"
+      sources."@babel/plugin-transform-member-expression-literals-7.12.1"
+      sources."@babel/plugin-transform-modules-amd-7.12.1"
+      sources."@babel/plugin-transform-modules-commonjs-7.12.1"
+      sources."@babel/plugin-transform-modules-systemjs-7.12.1"
+      sources."@babel/plugin-transform-modules-umd-7.12.1"
+      sources."@babel/plugin-transform-named-capturing-groups-regex-7.12.1"
+      sources."@babel/plugin-transform-new-target-7.12.1"
+      sources."@babel/plugin-transform-object-super-7.12.1"
+      sources."@babel/plugin-transform-parameters-7.12.1"
+      sources."@babel/plugin-transform-property-literals-7.12.1"
+      sources."@babel/plugin-transform-regenerator-7.12.1"
+      sources."@babel/plugin-transform-reserved-words-7.12.1"
+      sources."@babel/plugin-transform-shorthand-properties-7.12.1"
+      sources."@babel/plugin-transform-spread-7.12.1"
+      sources."@babel/plugin-transform-sticky-regex-7.12.7"
+      sources."@babel/plugin-transform-template-literals-7.12.1"
+      sources."@babel/plugin-transform-typeof-symbol-7.12.1"
+      sources."@babel/plugin-transform-unicode-escapes-7.12.1"
+      sources."@babel/plugin-transform-unicode-regex-7.12.1"
+      sources."@babel/preset-env-7.12.7"
+      sources."@babel/preset-modules-0.1.4"
+      sources."@babel/runtime-7.12.5"
+      sources."@babel/template-7.12.7"
+      sources."@babel/traverse-7.12.9"
+      sources."@babel/types-7.12.7"
+      (sources."@eslint/eslintrc-0.2.1" // {
+        dependencies = [
+          sources."globals-12.4.0"
+        ];
+      })
+      sources."@fortawesome/fontawesome-common-types-0.2.32"
+      sources."@fortawesome/fontawesome-svg-core-1.2.32"
+      sources."@fortawesome/free-regular-svg-icons-5.15.1"
+      sources."@fortawesome/free-solid-svg-icons-5.15.1"
+      sources."@types/anymatch-1.3.1"
+      sources."@types/eslint-7.2.5"
+      sources."@types/eslint-scope-3.7.0"
+      sources."@types/estree-0.0.45"
+      sources."@types/html-minifier-terser-5.1.1"
+      sources."@types/json-schema-7.0.6"
+      sources."@types/json5-0.0.29"
+      sources."@types/node-14.14.9"
+      sources."@types/parse-json-4.0.0"
+      sources."@types/source-list-map-0.1.2"
+      sources."@types/tapable-1.0.6"
+      (sources."@types/uglify-js-3.11.1" // {
+        dependencies = [
+          sources."source-map-0.6.1"
+        ];
+      })
+      (sources."@types/webpack-4.41.25" // {
+        dependencies = [
+          sources."source-map-0.6.1"
+        ];
+      })
+      (sources."@types/webpack-sources-2.0.0" // {
+        dependencies = [
+          sources."source-map-0.7.3"
+        ];
+      })
+      sources."@webassemblyjs/ast-1.9.0"
+      sources."@webassemblyjs/floating-point-hex-parser-1.9.0"
+      sources."@webassemblyjs/helper-api-error-1.9.0"
+      sources."@webassemblyjs/helper-buffer-1.9.0"
+      sources."@webassemblyjs/helper-code-frame-1.9.0"
+      sources."@webassemblyjs/helper-fsm-1.9.0"
+      sources."@webassemblyjs/helper-module-context-1.9.0"
+      sources."@webassemblyjs/helper-wasm-bytecode-1.9.0"
+      sources."@webassemblyjs/helper-wasm-section-1.9.0"
+      sources."@webassemblyjs/ieee754-1.9.0"
+      sources."@webassemblyjs/leb128-1.9.0"
+      sources."@webassemblyjs/utf8-1.9.0"
+      sources."@webassemblyjs/wasm-edit-1.9.0"
+      sources."@webassemblyjs/wasm-gen-1.9.0"
+      sources."@webassemblyjs/wasm-opt-1.9.0"
+      sources."@webassemblyjs/wasm-parser-1.9.0"
+      sources."@webassemblyjs/wast-parser-1.9.0"
+      sources."@webassemblyjs/wast-printer-1.9.0"
+      sources."@webpack-cli/info-1.1.0"
+      sources."@webpack-cli/serve-1.1.0"
+      sources."@xtuc/ieee754-1.2.0"
+      sources."@xtuc/long-4.2.2"
+      sources."acorn-7.4.1"
+      sources."acorn-jsx-5.3.1"
+      sources."ajv-6.12.6"
+      sources."ajv-keywords-3.5.2"
+      sources."ansi-colors-4.1.1"
+      sources."ansi-regex-5.0.0"
+      sources."ansi-styles-3.2.1"
+      sources."anymatch-3.1.1"
+      sources."argparse-1.0.10"
+      sources."array-back-4.0.1"
+      sources."array-includes-3.1.2"
+      sources."array.prototype.flat-1.2.4"
+      sources."astral-regex-1.0.0"
+      sources."autoprefixer-10.0.2"
+      sources."babel-loader-8.2.1"
+      sources."babel-plugin-dynamic-import-node-2.3.3"
+      sources."balanced-match-1.0.0"
+      sources."big.js-5.2.2"
+      sources."binary-extensions-2.1.0"
+      sources."boolbase-1.0.0"
+      sources."bootstrap-4.5.3"
+      sources."bootswatch-4.5.3"
+      sources."brace-expansion-1.1.11"
+      sources."braces-3.0.2"
+      sources."browserslist-4.14.7"
+      sources."buffer-from-1.1.1"
+      sources."call-bind-1.0.0"
+      sources."callsites-3.1.0"
+      sources."camel-case-4.1.1"
+      sources."camelcase-6.2.0"
+      sources."caniuse-lite-1.0.30001161"
+      sources."chalk-2.4.2"
+      sources."chokidar-3.4.3"
+      sources."chrome-trace-event-1.0.2"
+      (sources."clean-css-4.2.3" // {
+        dependencies = [
+          sources."source-map-0.6.1"
+        ];
+      })
+      sources."color-convert-1.9.3"
+      sources."color-name-1.1.3"
+      sources."colorette-1.2.2"
+      sources."command-line-usage-6.1.1"
+      sources."commander-4.1.1"
+      sources."comment-parser-0.7.6"
+      sources."commondir-1.0.1"
+      sources."concat-map-0.0.1"
+      sources."contains-path-0.1.0"
+      sources."convert-source-map-1.7.0"
+      sources."core-js-3.7.0"
+      (sources."core-js-compat-3.7.0" // {
+        dependencies = [
+          sources."semver-7.0.0"
+        ];
+      })
+      sources."cosmiconfig-7.0.0"
+      sources."cross-spawn-7.0.3"
+      (sources."css-loader-5.0.1" // {
+        dependencies = [
+          sources."loader-utils-2.0.0"
+          sources."schema-utils-3.0.0"
+          sources."semver-7.3.2"
+        ];
+      })
+      sources."css-select-1.2.0"
+      sources."css-what-2.1.3"
+      sources."cssesc-3.0.0"
+      sources."debug-4.3.1"
+      sources."deep-extend-0.6.0"
+      sources."deep-is-0.1.3"
+      sources."define-properties-1.1.3"
+      sources."doctrine-3.0.0"
+      sources."dom-converter-0.2.0"
+      (sources."dom-serializer-0.2.2" // {
+        dependencies = [
+          sources."domelementtype-2.0.2"
+        ];
+      })
+      sources."domelementtype-1.3.1"
+      sources."domhandler-2.4.2"
+      sources."domutils-1.5.1"
+      sources."dot-case-3.0.3"
+      sources."electron-to-chromium-1.3.607"
+      sources."emoji-regex-7.0.3"
+      sources."emojis-list-3.0.0"
+      sources."end-of-stream-1.4.4"
+      (sources."enhanced-resolve-5.3.2" // {
+        dependencies = [
+          sources."tapable-2.1.1"
+        ];
+      })
+      sources."enquirer-2.3.6"
+      sources."entities-2.1.0"
+      sources."envinfo-7.7.3"
+      sources."error-ex-1.3.2"
+      sources."es-abstract-1.18.0-next.1"
+      sources."es-to-primitive-1.2.1"
+      sources."escalade-3.1.1"
+      sources."escape-string-regexp-1.0.5"
+      (sources."eslint-7.14.0" // {
+        dependencies = [
+          sources."ansi-styles-4.3.0"
+          sources."chalk-4.1.0"
+          sources."color-convert-2.0.1"
+          sources."color-name-1.1.4"
+          sources."eslint-scope-5.1.1"
+          sources."eslint-visitor-keys-2.0.0"
+          sources."globals-12.4.0"
+          sources."has-flag-4.0.0"
+          sources."semver-7.3.2"
+          sources."supports-color-7.2.0"
+        ];
+      })
+      (sources."eslint-import-resolver-node-0.3.4" // {
+        dependencies = [
+          sources."debug-2.6.9"
+          sources."ms-2.0.0"
+        ];
+      })
+      (sources."eslint-module-utils-2.6.0" // {
+        dependencies = [
+          sources."debug-2.6.9"
+          sources."ms-2.0.0"
+        ];
+      })
+      (sources."eslint-plugin-import-2.22.1" // {
+        dependencies = [
+          sources."debug-2.6.9"
+          sources."doctrine-1.5.0"
+          sources."ms-2.0.0"
+        ];
+      })
+      sources."eslint-plugin-jquery-1.5.1"
+      (sources."eslint-plugin-jsdoc-30.7.8" // {
+        dependencies = [
+          sources."semver-7.3.2"
+        ];
+      })
+      sources."eslint-rule-composer-0.3.0"
+      sources."eslint-scope-5.1.0"
+      sources."eslint-utils-2.1.0"
+      sources."eslint-visitor-keys-1.3.0"
+      sources."espree-7.3.0"
+      sources."esprima-4.0.1"
+      (sources."esquery-1.3.1" // {
+        dependencies = [
+          sources."estraverse-5.2.0"
+        ];
+      })
+      (sources."esrecurse-4.3.0" // {
+        dependencies = [
+          sources."estraverse-5.2.0"
+        ];
+      })
+      sources."estraverse-4.3.0"
+      sources."esutils-2.0.3"
+      sources."events-3.2.0"
+      sources."execa-4.1.0"
+      sources."fast-deep-equal-3.1.3"
+      sources."fast-json-stable-stringify-2.1.0"
+      sources."fast-levenshtein-2.0.6"
+      sources."file-entry-cache-5.0.1"
+      sources."fill-range-7.0.1"
+      (sources."find-cache-dir-2.1.0" // {
+        dependencies = [
+          sources."find-up-3.0.0"
+          sources."locate-path-3.0.0"
+          sources."p-limit-2.3.0"
+          sources."p-locate-3.0.0"
+          sources."p-try-2.2.0"
+          sources."pkg-dir-3.0.0"
+        ];
+      })
+      sources."find-up-2.1.0"
+      sources."flat-cache-2.0.1"
+      sources."flatted-2.0.2"
+      sources."fs.realpath-1.0.0"
+      sources."fsevents-2.1.3"
+      sources."function-bind-1.1.1"
+      sources."functional-red-black-tree-1.0.1"
+      sources."gensync-1.0.0-beta.2"
+      sources."get-intrinsic-1.0.1"
+      sources."get-stream-5.2.0"
+      sources."glob-7.1.6"
+      sources."glob-parent-5.1.1"
+      sources."glob-to-regexp-0.4.1"
+      sources."globals-11.12.0"
+      sources."graceful-fs-4.2.4"
+      sources."has-1.0.3"
+      sources."has-flag-3.0.0"
+      sources."has-symbols-1.0.1"
+      sources."he-1.2.0"
+      sources."hosted-git-info-2.8.9"
+      sources."html-minifier-terser-5.1.1"
+      sources."html-webpack-plugin-4.5.0"
+      (sources."htmlparser2-3.10.1" // {
+        dependencies = [
+          sources."entities-1.1.2"
+        ];
+      })
+      sources."human-signals-1.1.1"
+      sources."icss-utils-5.1.0"
+      sources."ignore-4.0.6"
+      sources."import-fresh-3.2.2"
+      (sources."import-local-3.0.2" // {
+        dependencies = [
+          sources."find-up-4.1.0"
+          sources."locate-path-5.0.0"
+          sources."p-limit-2.3.0"
+          sources."p-locate-4.1.0"
+          sources."p-try-2.2.0"
+          sources."path-exists-4.0.0"
+          sources."pkg-dir-4.2.0"
+        ];
+      })
+      sources."imurmurhash-0.1.4"
+      sources."indexes-of-1.0.1"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.4"
+      sources."interpret-2.2.0"
+      sources."is-arrayish-0.2.1"
+      sources."is-binary-path-2.1.0"
+      sources."is-callable-1.2.2"
+      sources."is-core-module-2.1.0"
+      sources."is-date-object-1.0.2"
+      sources."is-extglob-2.1.1"
+      sources."is-fullwidth-code-point-2.0.0"
+      sources."is-glob-4.0.1"
+      sources."is-negative-zero-2.0.0"
+      sources."is-number-7.0.0"
+      sources."is-regex-1.1.1"
+      sources."is-stream-2.0.0"
+      sources."is-string-1.0.5"
+      sources."is-symbol-1.0.3"
+      sources."isarray-1.0.0"
+      sources."isexe-2.0.0"
+      (sources."jest-worker-26.6.2" // {
+        dependencies = [
+          sources."has-flag-4.0.0"
+          sources."supports-color-7.2.0"
+        ];
+      })
+      sources."jquery-3.5.1"
+      sources."jquery-migrate-3.3.2"
+      sources."js-tokens-4.0.0"
+      sources."js-yaml-3.14.0"
+      sources."jsdoctypeparser-9.0.0"
+      sources."jsesc-2.5.2"
+      sources."json-parse-better-errors-1.0.2"
+      sources."json-parse-even-better-errors-2.3.1"
+      sources."json-schema-traverse-0.4.1"
+      sources."json-stable-stringify-without-jsonify-1.0.1"
+      sources."json5-2.1.3"
+      sources."klona-2.0.4"
+      sources."leven-3.1.0"
+      sources."levn-0.4.1"
+      sources."lines-and-columns-1.1.6"
+      (sources."load-json-file-2.0.0" // {
+        dependencies = [
+          sources."parse-json-2.2.0"
+          sources."pify-2.3.0"
+        ];
+      })
+      sources."loader-runner-4.1.0"
+      (sources."loader-utils-1.4.0" // {
+        dependencies = [
+          sources."json5-1.0.1"
+        ];
+      })
+      sources."locate-path-2.0.0"
+      sources."lodash-4.17.21"
+      sources."lower-case-2.0.1"
+      sources."make-dir-2.1.0"
+      sources."merge-stream-2.0.0"
+      sources."mime-db-1.44.0"
+      sources."mime-types-2.1.27"
+      sources."mimic-fn-2.1.0"
+      (sources."mini-css-extract-plugin-1.3.1" // {
+        dependencies = [
+          sources."loader-utils-2.0.0"
+          sources."schema-utils-3.0.0"
+        ];
+      })
+      sources."minimatch-3.0.4"
+      sources."minimist-1.2.5"
+      sources."mkdirp-0.5.5"
+      sources."ms-2.1.2"
+      sources."nanoid-3.1.23"
+      sources."natural-compare-1.4.0"
+      sources."neo-async-2.6.2"
+      sources."no-case-3.0.3"
+      sources."node-releases-1.1.67"
+      sources."normalize-package-data-2.5.0"
+      sources."normalize-path-3.0.0"
+      sources."normalize-range-0.1.2"
+      sources."npm-run-path-4.0.1"
+      sources."nth-check-1.0.2"
+      sources."num2fraction-1.2.2"
+      sources."object-inspect-1.8.0"
+      sources."object-keys-1.1.1"
+      sources."object.assign-4.1.2"
+      (sources."object.getownpropertydescriptors-2.1.0" // {
+        dependencies = [
+          sources."es-abstract-1.17.7"
+        ];
+      })
+      (sources."object.values-1.1.1" // {
+        dependencies = [
+          sources."es-abstract-1.17.7"
+        ];
+      })
+      sources."once-1.4.0"
+      sources."onetime-5.1.2"
+      sources."optionator-0.9.1"
+      sources."p-limit-1.3.0"
+      sources."p-locate-2.0.0"
+      sources."p-try-1.0.0"
+      sources."param-case-3.0.3"
+      sources."parent-module-1.0.1"
+      sources."parse-json-5.1.0"
+      sources."pascal-case-3.1.1"
+      sources."path-exists-3.0.0"
+      sources."path-is-absolute-1.0.1"
+      sources."path-key-3.1.1"
+      sources."path-parse-1.0.6"
+      sources."path-type-4.0.0"
+      sources."picomatch-2.2.2"
+      sources."pify-4.0.1"
+      sources."pkg-dir-2.0.0"
+      sources."popper.js-1.16.1"
+      (sources."postcss-8.2.15" // {
+        dependencies = [
+          sources."source-map-0.6.1"
+        ];
+      })
+      (sources."postcss-loader-4.1.0" // {
+        dependencies = [
+          sources."loader-utils-2.0.0"
+          sources."schema-utils-3.0.0"
+          sources."semver-7.3.2"
+        ];
+      })
+      sources."postcss-modules-extract-imports-3.0.0"
+      sources."postcss-modules-local-by-default-4.0.0"
+      sources."postcss-modules-scope-3.0.0"
+      sources."postcss-modules-values-4.0.0"
+      sources."postcss-selector-parser-6.0.4"
+      sources."postcss-value-parser-4.1.0"
+      sources."prelude-ls-1.2.1"
+      sources."pretty-error-2.1.2"
+      sources."progress-2.0.3"
+      sources."pump-3.0.0"
+      sources."punycode-2.1.1"
+      sources."randombytes-2.1.0"
+      (sources."read-pkg-2.0.0" // {
+        dependencies = [
+          sources."path-type-2.0.0"
+          sources."pify-2.3.0"
+        ];
+      })
+      sources."read-pkg-up-2.0.0"
+      sources."readable-stream-3.6.0"
+      sources."readdirp-3.5.0"
+      sources."rechoir-0.7.0"
+      sources."reduce-flatten-2.0.0"
+      sources."regenerate-1.4.2"
+      sources."regenerate-unicode-properties-8.2.0"
+      sources."regenerator-runtime-0.13.7"
+      sources."regenerator-transform-0.14.5"
+      sources."regexpp-3.1.0"
+      sources."regexpu-core-4.7.1"
+      sources."regextras-0.7.1"
+      sources."regjsgen-0.5.2"
+      (sources."regjsparser-0.6.4" // {
+        dependencies = [
+          sources."jsesc-0.5.0"
+        ];
+      })
+      sources."relateurl-0.2.7"
+      (sources."renderkid-2.0.4" // {
+        dependencies = [
+          sources."ansi-regex-2.1.1"
+          sources."strip-ansi-3.0.1"
+        ];
+      })
+      sources."resolve-1.19.0"
+      (sources."resolve-cwd-3.0.0" // {
+        dependencies = [
+          sources."resolve-from-5.0.0"
+        ];
+      })
+      sources."resolve-from-4.0.0"
+      sources."rimraf-2.6.3"
+      sources."safe-buffer-5.1.2"
+      sources."sass-1.29.0"
+      (sources."sass-loader-10.1.0" // {
+        dependencies = [
+          sources."loader-utils-2.0.0"
+          sources."schema-utils-3.0.0"
+          sources."semver-7.3.2"
+        ];
+      })
+      sources."schema-utils-2.7.1"
+      sources."semver-5.7.1"
+      sources."serialize-javascript-5.0.1"
+      sources."shebang-command-2.0.0"
+      sources."shebang-regex-3.0.0"
+      sources."signal-exit-3.0.3"
+      sources."slice-ansi-2.1.0"
+      sources."source-list-map-2.0.1"
+      sources."source-map-0.5.7"
+      (sources."source-map-support-0.5.19" // {
+        dependencies = [
+          sources."source-map-0.6.1"
+        ];
+      })
+      sources."spdx-correct-3.1.1"
+      sources."spdx-exceptions-2.3.0"
+      sources."spdx-expression-parse-3.0.1"
+      sources."spdx-license-ids-3.0.6"
+      sources."sprintf-js-1.0.3"
+      (sources."string-width-3.1.0" // {
+        dependencies = [
+          sources."ansi-regex-4.1.0"
+          sources."strip-ansi-5.2.0"
+        ];
+      })
+      sources."string.prototype.trimend-1.0.3"
+      sources."string.prototype.trimstart-1.0.3"
+      (sources."string_decoder-1.3.0" // {
+        dependencies = [
+          sources."safe-buffer-5.2.1"
+        ];
+      })
+      sources."strip-ansi-6.0.0"
+      sources."strip-bom-3.0.0"
+      sources."strip-final-newline-2.0.0"
+      sources."strip-json-comments-3.1.1"
+      sources."supports-color-5.5.0"
+      sources."table-5.4.6"
+      sources."table-layout-1.0.1"
+      sources."tapable-1.1.3"
+      (sources."terser-4.8.0" // {
+        dependencies = [
+          sources."commander-2.20.3"
+          sources."source-map-0.6.1"
+        ];
+      })
+      (sources."terser-webpack-plugin-5.0.3" // {
+        dependencies = [
+          sources."commander-2.20.3"
+          sources."p-limit-3.0.2"
+          sources."p-try-2.2.0"
+          sources."schema-utils-3.0.0"
+          sources."source-map-0.6.1"
+          (sources."terser-5.5.0" // {
+            dependencies = [
+              sources."source-map-0.7.3"
+            ];
+          })
+        ];
+      })
+      sources."text-table-0.2.0"
+      sources."to-fast-properties-2.0.0"
+      sources."to-regex-range-5.0.1"
+      (sources."tsconfig-paths-3.9.0" // {
+        dependencies = [
+          sources."json5-1.0.1"
+        ];
+      })
+      sources."tslib-1.14.1"
+      sources."type-check-0.4.0"
+      sources."type-fest-0.8.1"
+      sources."typical-5.2.0"
+      sources."unicode-canonical-property-names-ecmascript-1.0.4"
+      sources."unicode-match-property-ecmascript-1.0.4"
+      sources."unicode-match-property-value-ecmascript-1.2.0"
+      sources."unicode-property-aliases-ecmascript-1.1.0"
+      sources."uniq-1.0.1"
+      sources."uri-js-4.4.0"
+      sources."util-deprecate-1.0.2"
+      sources."util.promisify-1.0.0"
+      sources."utila-0.4.0"
+      sources."v8-compile-cache-2.2.0"
+      sources."validate-npm-package-license-3.0.4"
+      sources."watchpack-2.0.1"
+      (sources."webpack-5.6.0" // {
+        dependencies = [
+          sources."acorn-8.0.4"
+          sources."eslint-scope-5.1.1"
+          sources."find-up-4.1.0"
+          sources."locate-path-5.0.0"
+          sources."p-limit-2.3.0"
+          sources."p-locate-4.1.0"
+          sources."p-try-2.2.0"
+          sources."path-exists-4.0.0"
+          sources."pkg-dir-4.2.0"
+          sources."schema-utils-3.0.0"
+          sources."source-map-0.6.1"
+          sources."tapable-2.1.1"
+          sources."webpack-sources-2.2.0"
+        ];
+      })
+      (sources."webpack-cli-4.2.0" // {
+        dependencies = [
+          sources."commander-6.2.0"
+        ];
+      })
+      sources."webpack-merge-4.2.2"
+      (sources."webpack-sources-1.4.3" // {
+        dependencies = [
+          sources."source-map-0.6.1"
+        ];
+      })
+      sources."which-2.0.2"
+      sources."word-wrap-1.2.3"
+      sources."wordwrapjs-4.0.0"
+      sources."wrappy-1.0.2"
+      sources."write-1.0.3"
+      sources."yaml-1.10.0"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      homepage = "https://github.com/azlux/botamusique#readme";
+      license = "MIT";
+    };
+    production = false;
+    bypassCache = true;
+    reconstructLock = false;
+  };
+in
+{
+  args = args;
+  sources = sources;
+  tarball = nodeEnv.buildNodeSourceDist args;
+  package = nodeEnv.buildNodePackage args;
+  shell = nodeEnv.buildNodeShell args;
+  nodeDependencies = nodeEnv.buildNodeDependencies (lib.overrideExisting args {
+    src = stdenv.mkDerivation {
+      name = args.name + "-package-json";
+      src = nix-gitignore.gitignoreSourcePure [
+        "*"
+        "!package.json"
+        "!package-lock.json"
+      ] args.src;
+      dontBuild = true;
+      installPhase = "mkdir -p $out; cp -r ./* $out;";
+    };
+  });
+}
diff --git a/pkgs/tools/audio/botamusique/src.json b/pkgs/tools/audio/botamusique/src.json
new file mode 100644
index 00000000000..d1337f5ae68
--- /dev/null
+++ b/pkgs/tools/audio/botamusique/src.json
@@ -0,0 +1,10 @@
+{
+  "url": "https://github.com/azlux/botamusique",
+  "rev": "ba02cdebf2e175dc371995361eafcb88ad2c1b52",
+  "date": "2021-06-01T23:39:44+02:00",
+  "path": "/nix/store/dp5vnj7zqv1sp1ab5xycvvqdpia9xb71-botamusique",
+  "sha256": "01d51y6h38hs4ynjgz050ryy14sp5y2c3n7f80mcv0a4ls8413qp",
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/pkgs/tools/audio/botamusique/unconditional-relative-state-paths.patch b/pkgs/tools/audio/botamusique/unconditional-relative-state-paths.patch
new file mode 100644
index 00000000000..3642a034fc8
--- /dev/null
+++ b/pkgs/tools/audio/botamusique/unconditional-relative-state-paths.patch
@@ -0,0 +1,22 @@
+diff --git a/util.py b/util.py
+index bfec1ed..0546772 100644
+--- a/util.py
++++ b/util.py
+@@ -22,16 +22,7 @@ log = logging.getLogger("bot")
+ 
+ 
+ def solve_filepath(path):
+-    if not path:
+-        return ''
+-
+-    if path[0] == '/':
+-        return path
+-    elif os.path.exists(path):
+-        return path
+-    else:
+-        mydir = os.path.dirname(os.path.realpath(__file__))
+-        return mydir + '/' + path
++    return path
+ 
+ 
+ def get_recursive_file_list_sorted(path):
diff --git a/pkgs/tools/audio/bpm-tools/default.nix b/pkgs/tools/audio/bpm-tools/default.nix
index 6207cbeb9fe..6e7236b1008 100644
--- a/pkgs/tools/audio/bpm-tools/default.nix
+++ b/pkgs/tools/audio/bpm-tools/default.nix
@@ -1,16 +1,16 @@
-{
-  stdenv,
-  fetchurl,
-  gnuplot,
-  sox,
-  flac,
-  id3v2,
-  vorbis-tools,
-  makeWrapper
+{ stdenv
+, lib
+, fetchurl
+, gnuplot
+, sox
+, flac
+, id3v2
+, vorbis-tools
+, makeWrapper
 }:
 
 let
-  path = stdenv.lib.makeBinPath [ gnuplot sox flac id3v2 vorbis-tools ];
+  path = lib.makeBinPath [ gnuplot sox flac id3v2 vorbis-tools ];
 in
 stdenv.mkDerivation rec {
   pname = "bpm-tools";
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
     wrapProgram $out/bin/bpm-graph --prefix PATH : "${path}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.pogo.org.uk/~mark/bpm-tools/";
     description = "Automatically calculate BPM (tempo) of music files";
     license = licenses.gpl2;
diff --git a/pkgs/tools/audio/darkice/default.nix b/pkgs/tools/audio/darkice/default.nix
index 89b93b02865..1ff66e83e5a 100644
--- a/pkgs/tools/audio/darkice/default.nix
+++ b/pkgs/tools/audio/darkice/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, pkgconfig
-, libjack2, alsaLib, libpulseaudio
+{ lib, stdenv, fetchurl, pkg-config
+, libjack2, alsa-lib, libpulseaudio
 , faac, lame, libogg, libopus, libvorbis, libsamplerate
 }:
 
@@ -12,9 +12,9 @@ stdenv.mkDerivation rec {
     sha256 = "1rlxds7ssq7nk2in4s46xws7xy9ylxsqgcz85hxjgh17lsm0y39c";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [
-    libopus libvorbis libogg libpulseaudio alsaLib libsamplerate libjack2 lame
+    libopus libvorbis libogg libpulseaudio alsa-lib libsamplerate libjack2 lame
   ];
 
   NIX_CFLAGS_COMPILE = "-fpermissive";
@@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "http://darkice.org/";
     description = "Live audio streamer";
-    license = stdenv.lib.licenses.gpl3;
-    maintainers = with stdenv.lib.maintainers; [ ikervagyok fpletz ];
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ ikervagyok fpletz ];
   };
 }
diff --git a/pkgs/tools/audio/dir2opus/default.nix b/pkgs/tools/audio/dir2opus/default.nix
index 87200654703..d23c334ad62 100644
--- a/pkgs/tools/audio/dir2opus/default.nix
+++ b/pkgs/tools/audio/dir2opus/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, python, mutagen, wrapPython, opusTools, mpg123 }:
+{ lib, stdenv, fetchurl, python, mutagen, wrapPython, opusTools, mpg123 }:
 
 let version = "0.12.2"; in
 stdenv.mkDerivation rec {
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
 
   postFixup = "wrapPythonPrograms";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/ehmry/dir2opus";
     maintainers = [ maintainers.ehmry ];
     license = licenses.gpl2;
diff --git a/pkgs/tools/audio/essentia-extractor/default.nix b/pkgs/tools/audio/essentia-extractor/default.nix
index 0d2bb17a75d..63ebbb0ffc0 100644
--- a/pkgs/tools/audio/essentia-extractor/default.nix
+++ b/pkgs/tools/audio/essentia-extractor/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 let
   arch_table = {
     "x86_64-linux" = "linux-x86_64";
@@ -14,13 +14,13 @@ let
 
   arch = arch_table.${stdenv.system};
   sha = sha_table.${stdenv.system};
-in stdenv.mkDerivation rec {
+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";
+    url = "ftp://ftp.acousticbrainz.org/pub/acousticbrainz/essentia-extractor-v${version}-${arch}.tar.gz";
     sha256 = sha;
   };
 
@@ -31,7 +31,7 @@ in stdenv.mkDerivation rec {
     cp streaming_extractor_music $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://acousticbrainz.org/download";
     description = "AcousticBrainz audio feature extractor";
     license = licenses.agpl3Plus;
diff --git a/pkgs/tools/audio/ezstream/default.nix b/pkgs/tools/audio/ezstream/default.nix
index 02a6e9d37f3..ee85f1aabd3 100644
--- a/pkgs/tools/audio/ezstream/default.nix
+++ b/pkgs/tools/audio/ezstream/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libiconv, libshout, taglib, libxml2, pkgconfig }:
+{ lib, stdenv, fetchurl, libiconv, libshout, taglib, libxml2, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "ezstream";
@@ -10,11 +10,11 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ libiconv libshout taglib libxml2 ];
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A command line source client for Icecast media streaming servers";
     longDescription = ''
       Ezstream is a command line source client for Icecast media
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
       from standard input without reencoding and thus requires only
       very little CPU resources.
     '';
-    homepage = "http://icecast.org/ezstream/";
+    homepage = "https://icecast.org/ezstream/";
     license = licenses.gpl2;
     maintainers = [ maintainers.barrucadu ];
     platforms = platforms.all;
diff --git a/pkgs/tools/audio/glyr/default.nix b/pkgs/tools/audio/glyr/default.nix
index 41490381487..60585c3b354 100644
--- a/pkgs/tools/audio/glyr/default.nix
+++ b/pkgs/tools/audio/glyr/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub, cmake
-, curl, glib, sqlite, pkgconfig }:
+{ lib, stdenv, fetchFromGitHub, cmake
+, curl, glib, sqlite, pkg-config }:
 
 stdenv.mkDerivation rec {
   version = "1.0.10";
@@ -12,10 +12,10 @@ stdenv.mkDerivation rec {
     sha256 = "1miwbqzkhg0v3zysrwh60pj9sv6ci4lzq2vq2hhc6pc6hdyh8xyr";
   };
 
-  nativeBuildInputs = [ cmake pkgconfig ];
+  nativeBuildInputs = [ cmake pkg-config ];
   buildInputs = [ sqlite glib curl ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     license = licenses.lgpl3;
     description = "A music related metadata searchengine";
     homepage = "https://github.com/sahib/glyr";
diff --git a/pkgs/tools/audio/google-music-scripts/default.nix b/pkgs/tools/audio/google-music-scripts/default.nix
deleted file mode 100644
index 272cf902539..00000000000
--- a/pkgs/tools/audio/google-music-scripts/default.nix
+++ /dev/null
@@ -1,59 +0,0 @@
-{ lib, python3 }:
-
-let
-  py = python3.override {
-    packageOverrides = self: super: {
-      loguru = super.loguru.overridePythonAttrs (oldAttrs: rec {
-        version = "0.4.0";
-        src = oldAttrs.src.override {
-          inherit version;
-          sha256 = "0j47cg3gi8in4z6z4w3by6x02mpkkfl78gr85xjn5rg0nxiz7pfm";
-        };
-      });
-    };
-  };
-
-in
-
-with py.pkgs;
-
-buildPythonApplication rec {
-  pname = "google-music-scripts";
-  version = "4.5.0";
-
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "0apwgj86whrc077dfymvyb4qwj19bawyrx49g4kg364895v0rbbq";
-  };
-
-  # pendulum pinning was to prevent PEP517 from trying to build from source
-  postPatch = ''
-    substituteInPlace setup.py \
-      --replace "tomlkit>=0.5,<0.6" "tomlkit" \
-      --replace "pendulum>=2.0,<=3.0,!=2.0.5,!=2.1.0" "pendulum"
-  '';
-
-  propagatedBuildInputs = [
-    appdirs
-    audio-metadata
-    google-music
-    google-music-proto
-    google-music-utils
-    loguru
-    pendulum
-    natsort
-    tomlkit
-  ];
-
-  # No tests
-  checkPhase = ''
-    $out/bin/gms --help >/dev/null
-  '';
-
-  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/pkgs/tools/audio/gvolicon/default.nix b/pkgs/tools/audio/gvolicon/default.nix
index 5190699be08..9ef8eb43772 100644
--- a/pkgs/tools/audio/gvolicon/default.nix
+++ b/pkgs/tools/audio/gvolicon/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, makeWrapper, alsaLib, pkgconfig, fetchgit, gtk3, gnome3, gdk-pixbuf, librsvg, wrapGAppsHook }:
+{ lib, stdenv, makeWrapper, alsa-lib, pkg-config, fetchgit, gtk3, gnome, gdk-pixbuf, librsvg, wrapGAppsHook }:
 
 stdenv.mkDerivation {
   name = "gvolicon-2014-04-28";
@@ -8,9 +8,9 @@ stdenv.mkDerivation {
     sha256 = "1sr9wyy7w898vq63yd003yp3k66hd4vm8b0qsm9zvmwmpiz4wvln";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [
-    makeWrapper alsaLib gtk3 gdk-pixbuf gnome3.adwaita-icon-theme
+    makeWrapper alsa-lib gtk3 gdk-pixbuf gnome.adwaita-icon-theme
     librsvg wrapGAppsHook
   ];
 
@@ -21,8 +21,8 @@ stdenv.mkDerivation {
   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 ];
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl3Plus;
+    maintainers = [ lib.maintainers.bennofs ];
   };
 }
diff --git a/pkgs/tools/audio/isrcsubmit/default.nix b/pkgs/tools/audio/isrcsubmit/default.nix
new file mode 100644
index 00000000000..457ca2b0d1c
--- /dev/null
+++ b/pkgs/tools/audio/isrcsubmit/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "isrcsubmit";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "JonnyJD";
+    repo = "musicbrainz-isrcsubmit";
+    rev = "v${version}";
+    sha256 = "1lqs4jl2xv1zxmf0xsihk9rxzx2awq87g51vd7y3cq1vhj1icxqa";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ musicbrainzngs discid ];
+
+  meta = with lib; {
+    # drutil is required on Darwin, which does not seem to be available in nixpkgs
+    broken = stdenv.isDarwin;
+    description = "Script to submit ISRCs from disc to MusicBrainz";
+    license = licenses.gpl3Plus;
+    homepage = "http://jonnyjd.github.io/musicbrainz-isrcsubmit/";
+    maintainers = with maintainers; [ eduardosm ];
+  };
+}
diff --git a/pkgs/tools/audio/kaldi/default.nix b/pkgs/tools/audio/kaldi/default.nix
new file mode 100644
index 00000000000..2d61a984a00
--- /dev/null
+++ b/pkgs/tools/audio/kaldi/default.nix
@@ -0,0 +1,88 @@
+{ lib, stdenv
+, openblas
+, blas
+, lapack
+, openfst
+, icu
+, cmake
+, pkg-config
+, fetchFromGitHub
+, git
+, python3
+}:
+
+assert blas.implementation == "openblas" && lapack.implementation == "openblas";
+let
+  # rev from https://github.com/kaldi-asr/kaldi/blob/master/cmake/third_party/openfst.cmake
+  openfst = fetchFromGitHub {
+    owner = "kkm000";
+    repo = "openfst";
+    rev = "0bca6e76d24647427356dc242b0adbf3b5f1a8d9";
+    sha256 = "1802rr14a03zl1wa5a0x1fa412kcvbgprgkadfj5s6s3agnn11rx";
+  };
+in
+stdenv.mkDerivation {
+  pname = "kaldi";
+  version = "2020-12-26";
+
+  src = fetchFromGitHub {
+    owner = "kaldi-asr";
+    repo = "kaldi";
+    rev = "813b73185a18725e4f6021981d17221d6ee23a19";
+    sha256 = "sha256-lTqXTG5ZTPmhCgt+BVzOwjKEIj+bLGUa+IxJq+XtHUg=";
+  };
+
+  cmakeFlags = [
+    "-DKALDI_BUILD_TEST=off"
+    "-DBUILD_SHARED_LIBS=on"
+  ];
+
+  preConfigure = ''
+    mkdir bin
+    cat > bin/git <<'EOF'
+    #!${stdenv.shell}
+    if [[ "$1" == "--version" ]]; then
+      # cmake checks this
+      ${git}/bin/git --version
+    elif [[ "$1" == "clone" ]]; then
+      # mock this call:
+
+      # https://github.com/kaldi-asr/kaldi/blob/c9d8b9ad3fef89237ba5517617d977b7d70a7ed5/cmake/third_party/openfst.cmake#L5
+      cp -r ${openfst} ''${@: -1}
+      chmod -R +w ''${@: -1}
+    elif [[ "$1" == "rev-list" ]]; then
+      # fix up this call:
+      # https://github.com/kaldi-asr/kaldi/blob/c9d8b9ad3fef89237ba5517617d977b7d70a7ed5/cmake/VersionHelper.cmake#L8
+      echo 0
+    fi
+    true
+    EOF
+    chmod +x bin/git
+    export PATH=$(pwd)/bin:$PATH
+  '';
+
+  buildInputs = [
+    openblas
+    openfst
+    icu
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    python3
+  ];
+
+  postInstall = ''
+    mkdir -p $out/share/kaldi
+    cp -r ../egs $out/share/kaldi
+  '';
+
+  meta = with lib; {
+    description = "Speech Recognition Toolkit";
+    homepage = "https://kaldi-asr.org";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mic92 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/audio/liquidsoap/full.nix b/pkgs/tools/audio/liquidsoap/full.nix
index 2aa01dfe073..1c52e6796b7 100644
--- a/pkgs/tools/audio/liquidsoap/full.nix
+++ b/pkgs/tools/audio/liquidsoap/full.nix
@@ -1,14 +1,19 @@
-{ stdenv, makeWrapper, fetchurl, which, pkgconfig
+{ lib, stdenv, makeWrapper, fetchurl, which, pkg-config
 , ocamlPackages
-, libao, portaudio, alsaLib, libpulseaudio, libjack2
+, libao, portaudio, alsa-lib, libpulseaudio, libjack2
 , libsamplerate, libmad, taglib, lame, libogg
-, libvorbis, speex, libtheora, libopus, fdk_aac
+, libvorbis, speex, libtheora, libopus, zlib
 , faad2, flac, ladspaH, ffmpeg, frei0r, dssi
 }:
 
 let
   pname = "liquidsoap";
-  version = "1.3.4";
+  version = "1.4.2";
+
+  ocaml-ffmpeg = fetchurl {
+    url = "https://github.com/savonet/ocaml-ffmpeg/releases/download/v0.4.2/ocaml-ffmpeg-0.4.2.tar.gz";
+    sha256 = "1lx5s1avds9fsh77828ifn71r2g89rxakhs8pp995a675phm9viw";
+  };
 
   packageFilters = map (p: "-e '/ocaml-${p}/d'" )
     [ "gstreamer" "shine" "aacplus" "schroedinger"
@@ -19,10 +24,17 @@ stdenv.mkDerivation {
   name = "${pname}-full-${version}";
 
   src = fetchurl {
-    url = "https://github.com/savonet/${pname}/releases/download/${version}/${pname}-${version}-full.tar.bz2";
-    sha256 = "11l1h42sljfxcdhddc8klya4bk99j7a1pndwnzvscb04pvmfmlk0";
+    url = "https://github.com/savonet/${pname}/releases/download/v${version}/${pname}-${version}-full.tar.gz";
+    sha256 = "0wkwnzj1a0vizv7sr1blwk5gzm2qi0n02ndijnq1i50cwrgxs1a4";
   };
 
+  # Use ocaml-srt and ocaml-fdkaac from nixpkgs
+  # Use ocaml-ffmpeg at 0.4.2 for compatibility with ffmpeg 4.3
+  prePatch = ''
+    rm -rf ocaml-srt*/ ocaml-fdkaac*/ ocaml-ffmpeg*/
+    tar xzf ${ocaml-ffmpeg}
+  '';
+
   preConfigure = /* we prefer system-wide libs */ ''
     sed -i "s|gsed|sed|" Makefile
     make bootstrap
@@ -37,20 +49,22 @@ stdenv.mkDerivation {
 
   configureFlags = [ "--localstatedir=/var" ];
 
-  nativeBuildInputs = [ makeWrapper pkgconfig ];
+  nativeBuildInputs = [ makeWrapper pkg-config ];
   buildInputs =
     [ which ocamlPackages.ocaml ocamlPackages.findlib
-      libao portaudio alsaLib libpulseaudio libjack2
+      libao portaudio alsa-lib libpulseaudio libjack2
       libsamplerate libmad taglib lame libogg
-      libvorbis speex libtheora libopus fdk_aac
+      libvorbis speex libtheora libopus zlib
       faad2 flac ladspaH ffmpeg frei0r dssi
       ocamlPackages.xmlm ocamlPackages.ocaml_pcre
       ocamlPackages.camomile
+      ocamlPackages.fdkaac
+      ocamlPackages.srt ocamlPackages.sedlex_2 ocamlPackages.menhir ocamlPackages.menhirLib
     ];
 
   hardeningDisable = [ "format" "fortify" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Swiss-army knife for multimedia streaming";
     homepage = "https://www.liquidsoap.info/";
     maintainers = with maintainers; [ ehmry ];
diff --git a/pkgs/tools/audio/midicsv/default.nix b/pkgs/tools/audio/midicsv/default.nix
index e5f3f6124b9..cf55e0dd81d 100644
--- a/pkgs/tools/audio/midicsv/default.nix
+++ b/pkgs/tools/audio/midicsv/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "midicsv-1.1";
@@ -9,14 +9,16 @@ stdenv.mkDerivation rec {
   };
 
   postPatch = ''
-    substituteInPlace Makefile --replace /usr/local $out
+    substituteInPlace Makefile \
+      --replace /usr/local $out \
+      --replace gcc "${stdenv.cc.targetPrefix}cc"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Losslessly translate MIDI to CSV and back";
     homepage = "http://www.fourmilab.ch/webtools/midicsv/";
     license = licenses.publicDomain;
     maintainers = with maintainers; [ orivej ];
-    platforms = platforms.linux;
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/audio/mididings/default.nix b/pkgs/tools/audio/mididings/default.nix
index addb95b9f1b..f220fed208f 100644
--- a/pkgs/tools/audio/mididings/default.nix
+++ b/pkgs/tools/audio/mididings/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, pythonPackages, fetchFromGitHub, pkg-config, glib, alsaLib, libjack2  }:
+{ lib, pythonPackages, fetchFromGitHub, pkg-config, glib, alsa-lib, libjack2  }:
 
 pythonPackages.buildPythonApplication {
   version = "2015-11-17";
@@ -12,7 +12,7 @@ pythonPackages.buildPythonApplication {
   };
 
   nativeBuildInputs = [ pkg-config ];
-  buildInputs = [ glib alsaLib libjack2 pythonPackages.boost ];
+  buildInputs = [ glib alsa-lib libjack2 pythonPackages.boost ];
   propagatedBuildInputs = with pythonPackages; [ decorator ]
     # for livedings
     ++ [ tkinter pyliblo ]
@@ -23,16 +23,16 @@ pythonPackages.buildPythonApplication {
     # so mididings knows where to look for config files
     ++ [ pyxdg ];
 
-  preBuild = with stdenv.lib.versions; ''
+  preBuild = with lib.versions; ''
     substituteInPlace setup.py \
       --replace boost_python "boost_python${major pythonPackages.python.version}${minor pythonPackages.python.version}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = [ ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/audio/mp3cat/default.nix b/pkgs/tools/audio/mp3cat/default.nix
index e7a1d004a01..dbcc458164d 100644
--- a/pkgs/tools/audio/mp3cat/default.nix
+++ b/pkgs/tools/audio/mp3cat/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "mp3cat";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
     "install_bin"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A command line program which concatenates MP3 files";
     longDescription = ''
       A command line program which concatenates MP3 files, mp3cat
diff --git a/pkgs/tools/audio/mpd-mpris/default.nix b/pkgs/tools/audio/mpd-mpris/default.nix
index 79387d9ad1f..b90ab80befd 100644
--- a/pkgs/tools/audio/mpd-mpris/default.nix
+++ b/pkgs/tools/audio/mpd-mpris/default.nix
@@ -1,17 +1,17 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "mpd-mpris";
-  version = "0.2.4";
+  version = "0.3.0";
 
   src = fetchFromGitHub {
     owner = "natsukagami";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1cr5j2z2ynj1hwkjzi5amcg59vmgazsci41v6vpsj119g7psjmzm";
+    sha256 = "1kzjbv04b2garb99l64wdq8yksnm4pbhkgyzh89j5j3gb9k55zal";
   };
 
-  vendorSha256 = "108yjymp64iqx1b2wqjbkmbm2w199wq46g7hrmqhcziv6f4aqljp";
+  vendorSha256 = "1ggrqwd3h602rav1dc3amsf4wxsq8mdq4ijkdsg759sqhpzl6rqs";
 
   doCheck = false;
 
@@ -24,11 +24,11 @@ buildGoModule rec {
     cp mpd-mpris.service $out/lib/systemd/user
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/audio/mpdas/default.nix b/pkgs/tools/audio/mpdas/default.nix
index 507e62b0dae..8b12b6fc16d 100644
--- a/pkgs/tools/audio/mpdas/default.nix
+++ b/pkgs/tools/audio/mpdas/default.nix
@@ -1,4 +1,10 @@
-{ stdenv, fetchFromGitHub, pkgconfig, mpd_clientlib, curl }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, libmpdclient
+, curl
+}:
 
 stdenv.mkDerivation rec {
   pname = "mpdas";
@@ -11,13 +17,13 @@ stdenv.mkDerivation rec {
     sha256 = "0fcqc4w6iwbi1n3cllcgj0k61zffhqkbr8668myxap21m35x8y1r";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
-  buildInputs = [ mpd_clientlib curl ];
+  buildInputs = [ libmpdclient curl ];
 
   makeFlags = [ "CONFIG=/etc" "DESTDIR=" "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Music Player Daemon AudioScrobbler";
     homepage = "https://50hz.ws/mpdas/";
     license = licenses.bsd3;
diff --git a/pkgs/tools/audio/mpdcron/default.nix b/pkgs/tools/audio/mpdcron/default.nix
index c083c60a962..afb1c9a3dcd 100644
--- a/pkgs/tools/audio/mpdcron/default.nix
+++ b/pkgs/tools/audio/mpdcron/default.nix
@@ -1,5 +1,19 @@
-{ stdenv, fetchFromGitHub, autoconf, automake, libtool, pkgconfig, glib, libdaemon
-, mpd_clientlib, curl, sqlite, bundlerEnv, libnotify, pandoc }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoconf
+, automake
+, libtool
+, pkg-config
+, glib
+, libdaemon
+, libmpdclient
+, curl
+, sqlite
+, bundlerEnv
+, libnotify
+, pandoc
+}:
 
 let
   gemEnv = bundlerEnv {
@@ -7,8 +21,8 @@ let
     gemdir = ./.;
   };
 in stdenv.mkDerivation {
-  version = "20161228";
   pname = "mpdcron";
+  version = "20161228";
 
   src = fetchFromGitHub {
     owner = "alip";
@@ -17,21 +31,33 @@ in stdenv.mkDerivation {
     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 ];
+  buildInputs = [
+    autoconf
+    automake
+    libtool
+    pkg-config
+    glib
+    libdaemon
+    pandoc
+    libmpdclient
+    curl
+    sqlite
+    gemEnv.wrappedRuby
+    libnotify
+  ];
 
   preConfigure = ''
     ./autogen.sh
   '';
 
   configureFlags = [ "--enable-gmodule" "--with-standard-modules=all" ];
+
+  meta = with lib; {
+    description = "A cron like daemon for mpd";
+    homepage    = "http://alip.github.io/mpdcron/";
+    license     = licenses.gpl2Plus;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ lovek323 manveru ];
+  };
 }
+# TODO: autoreconfHook this
diff --git a/pkgs/tools/audio/mpdcron/gemset.nix b/pkgs/tools/audio/mpdcron/gemset.nix
index 025eb96b065..836878c9d88 100644
--- a/pkgs/tools/audio/mpdcron/gemset.nix
+++ b/pkgs/tools/audio/mpdcron/gemset.nix
@@ -20,4 +20,4 @@
     };
     version = "1.10.3";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/audio/mpdris2/default.nix b/pkgs/tools/audio/mpdris2/default.nix
index 029dcd127f1..4cd3921fb55 100644
--- a/pkgs/tools/audio/mpdris2/default.nix
+++ b/pkgs/tools/audio/mpdris2/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib
 , autoreconfHook
 , fetchFromGitHub
 , glib
@@ -45,7 +45,7 @@ python3.pkgs.buildPythonApplication rec {
     pygobject3
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "MPRIS 2 support for mpd";
     homepage = "https://github.com/eonpatapon/mpDris2/";
     license = licenses.gpl3;
diff --git a/pkgs/tools/audio/mpris-scrobbler/default.nix b/pkgs/tools/audio/mpris-scrobbler/default.nix
new file mode 100644
index 00000000000..07248213213
--- /dev/null
+++ b/pkgs/tools/audio/mpris-scrobbler/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv
+, fetchFromGitHub
+, nix-update-script
+, curl
+, dbus
+, libevent
+, m4
+, meson
+, ninja
+, pkg-config
+, scdoc
+, json_c
+, xdg-utils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mpris-scrobbler";
+  version = "0.4.0.1";
+
+  src = fetchFromGitHub {
+    owner  = "mariusor";
+    repo   = "mpris-scrobbler";
+    rev    = "v${version}";
+    sha256 = "0jzmgcb9a19hl8y7iwy8l3cc2vgzi0scw7r5q72kszfyxn0yk2gs";
+  };
+
+  postPatch = ''
+    substituteInPlace src/signon.c \
+      --replace "/usr/bin/xdg-open" "${xdg-utils}/bin/xdg-open"
+  '';
+
+  nativeBuildInputs = [
+    m4
+    meson
+    ninja
+    pkg-config
+    scdoc
+  ];
+
+  buildInputs = [
+    curl
+    dbus
+    json_c
+    libevent
+  ];
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "Minimalistic scrobbler for libre.fm & last.fm";
+    homepage    = "https://github.com/mariusor/mpris-scrobbler";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ emantor ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/audio/opl3bankeditor/0001-opl3bankeditor-Look-for-system-installed-Rt-libs.patch b/pkgs/tools/audio/opl3bankeditor/0001-opl3bankeditor-Look-for-system-installed-Rt-libs.patch
new file mode 100644
index 00000000000..36adff53a01
--- /dev/null
+++ b/pkgs/tools/audio/opl3bankeditor/0001-opl3bankeditor-Look-for-system-installed-Rt-libs.patch
@@ -0,0 +1,200 @@
+From 11711398a1ec16f4eaeac8523b77165a560b69cc Mon Sep 17 00:00:00 2001
+From: OPNA2608 <christoph.neidahl@gmail.com>
+Date: Sun, 13 Jun 2021 13:55:53 +0200
+Subject: [PATCH] Look for system-installed Rt libs
+
+---
+ CMakeLists.txt | 159 +++++++++++++++++++++++++++++++------------------
+ 1 file changed, 102 insertions(+), 57 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index f3e53c3..027c1b1 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -50,15 +50,6 @@ message("!! Optional feature summary:")
+ message("!!   RtMidi: ${USE_RTMIDI}")
+ message("!!   RtAudio: ${USE_RTAUDIO}")
+ 
+-if(USE_RTAUDIO)
+-  if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+-    pkg_check_modules(JACK "jack")
+-    message("!!   -- Jack driver: ${JACK_FOUND}")
+-    pkg_check_modules(PULSEAUDIO "libpulse-simple")
+-    message("!!   -- Pulseaudio driver: ${PULSEAUDIO_FOUND}")
+-  endif()
+-endif()
+-
+ if(ENABLE_PLOTS)
+   message("!!   Qwt: ${QWT_LIBRARY}")
+ endif()
+@@ -250,65 +241,119 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ endif()
+ 
+ if(USE_RTMIDI)
+-  add_library(RtMidi STATIC "src/midi/external/rtmidi/RtMidi.cpp")
+-  target_include_directories(RtMidi PUBLIC "src/midi/external/rtmidi")
+-  if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+-    target_compile_definitions(RtMidi PUBLIC "__LINUX_ALSA__")
+-    target_link_libraries(RtMidi PUBLIC "asound")
+-  elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
+-    target_compile_definitions(RtMidi PUBLIC "__WINDOWS_MM__")
+-    target_link_libraries(RtMidi PUBLIC "winmm")
+-  elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+-    target_compile_definitions(RtMidi PUBLIC "__MACOSX_CORE__")
+-    find_library(COREMIDI_LIBRARY "CoreMIDI")
+-    target_link_libraries(RtMidi PUBLIC "${COREMIDI_LIBRARY}")
++  if(PKG_CONFIG_FOUND)
++    pkg_check_modules(RTMIDI rtmidi)
++    if(RTMIDI_FOUND)
++      message("Using system-installed RtMidi found by pkg-config.")
++      target_link_libraries(OPL3BankEditor PUBLIC ${RTMIDI_LDFLAGS})
++      target_include_directories(OPL3BankEditor PUBLIC ${RTMIDI_INCLUDE_DIRS})
++      target_compile_options(OPL3BankEditor PUBLIC ${RTMIDI_CFLAGS})
++    endif()
+   endif()
++
++  if(NOT RTMIDI_FOUND)
++    find_library(RTMIDI_LIBRARY "rtmidi")
++    find_path(RTMIDI_INCLUDE_DIRS "RtMidi.h")
++    message("RtMidi library: ${RTMIDI_LIBRARY}")
++    message("RtMidi header directory: ${RTMIDI_INCLUDE_DIRS}")
++    if(NOT RTMIDI_LIBRARY-NOTFOUND AND NOT RTMIDI_INCLUDE_DIRS STREQUAL RTMIDI_INCLUDE_DIRS-NOTFOUND)
++      message("Using system-installed RtMidi.")
++      set(RTMIDI_FOUND TRUE)
++      target_link_libraries(OPL3BankEditor PUBLIC ${RTMIDI_LIBRARY})
++      target_include_directories(OPL3BankEditor PUBLIC ${RTMIDI_INCLUDE_DIRS})
++    endif()
++  endif()
++
++  if(NOT RTMIDI_FOUND)
++    message("Using bundled RtMidi.")
++    add_library(RtMidi STATIC "src/midi/external/rtmidi/RtMidi.cpp")
++    target_include_directories(RtMidi PUBLIC "src/midi/external/rtmidi")
++    if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
++      target_compile_definitions(RtMidi PUBLIC "__LINUX_ALSA__")
++      target_link_libraries(RtMidi PUBLIC "asound")
++    elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
++      target_compile_definitions(RtMidi PUBLIC "__WINDOWS_MM__")
++      target_link_libraries(RtMidi PUBLIC "winmm")
++    elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
++      target_compile_definitions(RtMidi PUBLIC "__MACOSX_CORE__")
++      find_library(COREMIDI_LIBRARY "CoreMIDI")
++      target_link_libraries(RtMidi PUBLIC "${COREMIDI_LIBRARY}")
++    endif()
++    target_link_libraries(OPL3BankEditor PRIVATE RtMidi)
++  endif()
++
+   target_sources(OPL3BankEditor PRIVATE "src/midi/midi_rtmidi.cpp")
+   target_compile_definitions(OPL3BankEditor PRIVATE "ENABLE_MIDI")
+-  target_link_libraries(OPL3BankEditor PRIVATE RtMidi)
+ endif()
+ 
+ if(USE_RTAUDIO)
+-  add_library(RtAudio STATIC "src/audio/external/rtaudio/RtAudio.cpp")
+-  target_include_directories(RtAudio PUBLIC "src/audio/external/rtaudio")
+-  if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+-    target_compile_definitions(RtAudio PUBLIC "__LINUX_ALSA__")
+-    target_link_libraries(RtAudio PUBLIC "asound")
+-    if(JACK_FOUND)
+-      target_compile_definitions(RtAudio PUBLIC "__UNIX_JACK__")
+-      target_include_directories(RtAudio PUBLIC ${JACK_INCLUDE_DIRS})
+-      link_directories(${JACK_LIBRARY_DIRS})
+-      target_link_libraries(RtAudio PUBLIC ${JACK_LIBRARIES})
++  if(PKG_CONFIG_FOUND)
++    pkg_check_modules(RTAUDIO rtaudio)
++    if(RTAUDIO_FOUND)
++      message("Using system-installed RtAudio found by pkg-config.")
++      target_link_libraries(OPL3BankEditor PUBLIC ${RTAUDIO_LDFLAGS})
++      target_include_directories(OPL3BankEditor PUBLIC ${RTAUDIO_INCLUDE_DIRS})
++      target_compile_options(OPL3BankEditor PUBLIC ${RTAUDIO_CFLAGS})
++    endif()
++  endif()
++
++  if(NOT RTAUDIO_FOUND)
++    find_library(RTAUDIO_LIBRARY "rtaudio")
++    find_path(RTAUDIO_INCLUDE_DIRS "RtAudio.h")
++    message("RtAudio library: ${RTAUDIO_LIBRARY}")
++    message("RtAudio header directory: ${RTAUDIO_INCLUDE_DIRS}")
++    if(NOT RTAUDIO_LIBRARY-NOTFOUND AND NOT RTAUDIO_INCLUDE_DIRS STREQUAL RTAUDIO_INCLUDE_DIRS-NOTFOUND)
++      message("Using system-installed RtAudio.")
++      set(RTAUDIO_FOUND TRUE)
++      target_link_libraries(OPL3BankEditor PUBLIC ${RTAUDIO_LIBRARY})
++      target_include_directories(OPL3BankEditor PUBLIC ${RTAUDIO_INCLUDE_DIRS})
+     endif()
+-    if(PULSEAUDIO_FOUND)
+-      target_compile_definitions(RtAudio PUBLIC "__LINUX_PULSE__")
+-      target_include_directories(RtAudio PUBLIC ${PULSEAUDIO_INCLUDE_DIRS})
+-      link_directories(${PULSEAUDIO_LIBRARY_DIRS})
+-      target_link_libraries(RtAudio PUBLIC ${PULSEAUDIO_LIBRARIES})
++  endif()
++
++  if(NOT RTAUDIO_FOUND)
++    message("Using bundled RtAudio.")
++    add_library(RtAudio STATIC "src/audio/external/rtaudio/RtAudio.cpp")
++    target_include_directories(RtAudio PUBLIC "src/audio/external/rtaudio")
++    if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
++      target_compile_definitions(RtAudio PUBLIC "__LINUX_ALSA__")
++      target_link_libraries(RtAudio PUBLIC "asound")
++      if(JACK_FOUND)
++        target_compile_definitions(RtAudio PUBLIC "__UNIX_JACK__")
++        target_include_directories(RtAudio PUBLIC ${JACK_INCLUDE_DIRS})
++        link_directories(${JACK_LIBRARY_DIRS})
++        target_link_libraries(RtAudio PUBLIC ${JACK_LIBRARIES})
++      endif()
++      if(PULSEAUDIO_FOUND)
++        target_compile_definitions(RtAudio PUBLIC "__LINUX_PULSE__")
++        target_include_directories(RtAudio PUBLIC ${PULSEAUDIO_INCLUDE_DIRS})
++        link_directories(${PULSEAUDIO_LIBRARY_DIRS})
++        target_link_libraries(RtAudio PUBLIC ${PULSEAUDIO_LIBRARIES})
++      endif()
++    elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
++      target_compile_definitions(RtAudio PUBLIC "__WINDOWS_DS__")
++      target_link_libraries(RtAudio PUBLIC "dsound" "ole32")
++      target_compile_definitions(RtAudio PUBLIC "__WINDOWS_WASAPI__")
++      target_link_libraries(RtAudio PUBLIC "ksguid")
++      target_compile_definitions(RtAudio PUBLIC "__WINDOWS_ASIO__")
++      target_include_directories(RtAudio PRIVATE
++        "src/audio/external/rtaudio/include")
++      target_sources(RtAudio PRIVATE
++        "src/audio/external/rtaudio/include/asio.cpp"
++        "src/audio/external/rtaudio/include/asiodrivers.cpp"
++        "src/audio/external/rtaudio/include/asiolist.cpp"
++        "src/audio/external/rtaudio/include/iasiothiscallresolver.cpp")
++    elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
++      target_compile_definitions(RtAudio PUBLIC "__MACOSX_CORE__")
++      find_library(COREAUDIO_LIBRARY "CoreAudio")
++      target_link_libraries(RtAudio PUBLIC "${COREAUDIO_LIBRARY}")
++      find_library(COREFOUNDATION_LIBRARY "CoreFoundation")
++      target_link_libraries(RtAudio PUBLIC "${COREFOUNDATION_LIBRARY}")
+     endif()
+-  elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
+-    target_compile_definitions(RtAudio PUBLIC "__WINDOWS_DS__")
+-    target_link_libraries(RtAudio PUBLIC "dsound" "ole32")
+-    target_compile_definitions(RtAudio PUBLIC "__WINDOWS_WASAPI__")
+-    target_link_libraries(RtAudio PUBLIC "ksguid")
+-    target_compile_definitions(RtAudio PUBLIC "__WINDOWS_ASIO__")
+-    target_include_directories(RtAudio PRIVATE
+-      "src/audio/external/rtaudio/include")
+-    target_sources(RtAudio PRIVATE
+-      "src/audio/external/rtaudio/include/asio.cpp"
+-      "src/audio/external/rtaudio/include/asiodrivers.cpp"
+-      "src/audio/external/rtaudio/include/asiolist.cpp"
+-      "src/audio/external/rtaudio/include/iasiothiscallresolver.cpp")
+-  elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+-    target_compile_definitions(RtAudio PUBLIC "__MACOSX_CORE__")
+-    find_library(COREAUDIO_LIBRARY "CoreAudio")
+-    target_link_libraries(RtAudio PUBLIC "${COREAUDIO_LIBRARY}")
+-    find_library(COREFOUNDATION_LIBRARY "CoreFoundation")
+-    target_link_libraries(RtAudio PUBLIC "${COREFOUNDATION_LIBRARY}")
++    target_link_libraries(OPL3BankEditor PRIVATE RtAudio)
+   endif()
++
+   target_sources(OPL3BankEditor PRIVATE "src/audio/ao_rtaudio.cpp")
+   target_compile_definitions(OPL3BankEditor PRIVATE "ENABLE_AUDIO_TESTING")
+-  target_link_libraries(OPL3BankEditor PRIVATE RtAudio)
+ endif()
+ 
+ add_executable(measurer_tool
+-- 
+2.29.3
+
diff --git a/pkgs/tools/audio/opl3bankeditor/0001-opn2bankeditor-Look-for-system-installed-Rt-libs.patch b/pkgs/tools/audio/opl3bankeditor/0001-opn2bankeditor-Look-for-system-installed-Rt-libs.patch
new file mode 100644
index 00000000000..f62c3236b33
--- /dev/null
+++ b/pkgs/tools/audio/opl3bankeditor/0001-opn2bankeditor-Look-for-system-installed-Rt-libs.patch
@@ -0,0 +1,200 @@
+From 69c993dacc7dc0cb9d105c3dfa764cd7be5c343e Mon Sep 17 00:00:00 2001
+From: OPNA2608 <christoph.neidahl@gmail.com>
+Date: Sun, 13 Jun 2021 14:21:17 +0200
+Subject: [PATCH] Look for system-installed Rt libs
+
+---
+ CMakeLists.txt | 159 +++++++++++++++++++++++++++++++------------------
+ 1 file changed, 102 insertions(+), 57 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index f428dc4..18ba8c3 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -41,15 +41,6 @@ message("!! Optional feature summary:")
+ message("!!   RtMidi: ${USE_RTMIDI}")
+ message("!!   RtAudio: ${USE_RTAUDIO}")
+ 
+-if(USE_RTAUDIO)
+-  if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+-    pkg_check_modules(JACK "jack")
+-    message("!!   -- Jack driver: ${JACK_FOUND}")
+-    pkg_check_modules(PULSEAUDIO "libpulse-simple")
+-    message("!!   -- Pulseaudio driver: ${PULSEAUDIO_FOUND}")
+-  endif()
+-endif()
+-
+ if(ENABLE_PLOTS)
+   message("!!   Qwt: ${QWT_LIBRARY}")
+ endif()
+@@ -198,65 +189,119 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ endif()
+ 
+ if(USE_RTMIDI)
+-  add_library(RtMidi STATIC "src/midi/external/rtmidi/RtMidi.cpp")
+-  target_include_directories(RtMidi PUBLIC "src/midi/external/rtmidi")
+-  if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+-    target_compile_definitions(RtMidi PUBLIC "__LINUX_ALSA__")
+-    target_link_libraries(RtMidi PUBLIC "asound")
+-  elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
+-    target_compile_definitions(RtMidi PUBLIC "__WINDOWS_MM__")
+-    target_link_libraries(RtMidi PUBLIC "winmm")
+-  elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+-    target_compile_definitions(RtMidi PUBLIC "__MACOSX_CORE__")
+-    find_library(COREMIDI_LIBRARY "CoreMIDI")
+-    target_link_libraries(RtMidi PUBLIC "${COREMIDI_LIBRARY}")
++  if(PKG_CONFIG_FOUND)
++    pkg_check_modules(RTMIDI rtmidi)
++    if(RTMIDI_FOUND)
++      message("Using system-installed RtMidi found by pkg-config.")
++      target_link_libraries(OPN2BankEditor PUBLIC ${RTMIDI_LDFLAGS})
++      target_include_directories(OPN2BankEditor PUBLIC ${RTMIDI_INCLUDE_DIRS})
++      target_compile_options(OPN2BankEditor PUBLIC ${RTMIDI_CFLAGS})
++    endif()
++  endif()
++
++  if(NOT RTMIDI_FOUND)
++    find_library(RTMIDI_LIBRARY "rtmidi")
++    find_path(RTMIDI_INCLUDE_DIRS "RtMidi.h")
++    message("RtMidi library: ${RTMIDI_LIBRARY}")
++    message("RtMidi header directory: ${RTMIDI_INCLUDE_DIRS}")
++    if(NOT RTMIDI_LIBRARY-NOTFOUND AND NOT RTMIDI_INCLUDE_DIRS STREQUAL RTMIDI_INCLUDE_DIRS-NOTFOUND)
++      message("Using system-installed RtMidi.")
++      set(RTMIDI_FOUND TRUE)
++      target_link_libraries(OPN2BankEditor PUBLIC ${RTMIDI_LIBRARY})
++      target_include_directories(OPN2BankEditor PUBLIC ${RTMIDI_INCLUDE_DIRS})
++    endif()
++  endif()
++
++  if(NOT RTMIDI_FOUND)
++    message("Using bundled RtMidi.")
++    add_library(RtMidi STATIC "src/midi/external/rtmidi/RtMidi.cpp")
++    target_include_directories(RtMidi PUBLIC "src/midi/external/rtmidi")
++    if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
++      target_compile_definitions(RtMidi PUBLIC "__LINUX_ALSA__")
++      target_link_libraries(RtMidi PUBLIC "asound")
++    elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
++      target_compile_definitions(RtMidi PUBLIC "__WINDOWS_MM__")
++      target_link_libraries(RtMidi PUBLIC "winmm")
++    elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
++      target_compile_definitions(RtMidi PUBLIC "__MACOSX_CORE__")
++      find_library(COREMIDI_LIBRARY "CoreMIDI")
++      target_link_libraries(RtMidi PUBLIC "${COREMIDI_LIBRARY}")
++    endif()
++    target_link_libraries(OPN2BankEditor PRIVATE RtMidi)
+   endif()
++
+   target_sources(OPN2BankEditor PRIVATE "src/midi/midi_rtmidi.cpp")
+   target_compile_definitions(OPN2BankEditor PRIVATE "ENABLE_MIDI")
+-  target_link_libraries(OPN2BankEditor PRIVATE RtMidi)
+ endif()
+ 
+ if(USE_RTAUDIO)
+-  add_library(RtAudio STATIC "src/audio/external/rtaudio/RtAudio.cpp")
+-  target_include_directories(RtAudio PUBLIC "src/audio/external/rtaudio")
+-  if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+-    target_compile_definitions(RtAudio PUBLIC "__LINUX_ALSA__")
+-    target_link_libraries(RtAudio PUBLIC "asound")
+-    if(JACK_FOUND)
+-      target_compile_definitions(RtAudio PUBLIC "__UNIX_JACK__")
+-      target_include_directories(RtAudio PUBLIC ${JACK_INCLUDE_DIRS})
+-      link_directories(${JACK_LIBRARY_DIRS})
+-      target_link_libraries(RtAudio PUBLIC ${JACK_LIBRARIES})
++  if(PKG_CONFIG_FOUND)
++    pkg_check_modules(RTAUDIO rtaudio)
++    if(RTAUDIO_FOUND)
++      message("Using system-installed RtAudio found by pkg-config.")
++      target_link_libraries(OPN2BankEditor PUBLIC ${RTAUDIO_LDFLAGS})
++      target_include_directories(OPN2BankEditor PUBLIC ${RTAUDIO_INCLUDE_DIRS})
++      target_compile_options(OPN2BankEditor PUBLIC ${RTAUDIO_CFLAGS})
+     endif()
+-    if(PULSEAUDIO_FOUND)
+-      target_compile_definitions(RtAudio PUBLIC "__LINUX_PULSE__")
+-      target_include_directories(RtAudio PUBLIC ${PULSEAUDIO_INCLUDE_DIRS})
+-      link_directories(${PULSEAUDIO_LIBRARY_DIRS})
+-      target_link_libraries(RtAudio PUBLIC ${PULSEAUDIO_LIBRARIES})
++  endif()
++
++  if(NOT RTAUDIO_FOUND)
++    find_library(RTAUDIO_LIBRARY "rtaudio")
++    find_path(RTAUDIO_INCLUDE_DIRS "RtAudio.h")
++    message("RtAudio library: ${RTAUDIO_LIBRARY}")
++    message("RtAudio header directory: ${RTAUDIO_INCLUDE_DIRS}")
++    if(NOT RTAUDIO_LIBRARY-NOTFOUND AND NOT RTAUDIO_INCLUDE_DIRS STREQUAL RTAUDIO_INCLUDE_DIRS-NOTFOUND)
++      message("Using system-installed RtAudio.")
++      set(RTAUDIO_FOUND TRUE)
++      target_link_libraries(OPN2BankEditor PUBLIC ${RTAUDIO_LIBRARY})
++      target_include_directories(OPN2BankEditor PUBLIC ${RTAUDIO_INCLUDE_DIRS})
+     endif()
+-  elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
+-    target_compile_definitions(RtAudio PUBLIC "__WINDOWS_DS__")
+-    target_link_libraries(RtAudio PUBLIC "dsound" "ole32")
+-    target_compile_definitions(RtAudio PUBLIC "__WINDOWS_WASAPI__")
+-    target_link_libraries(RtAudio PUBLIC "ksguid")
+-    target_compile_definitions(RtAudio PUBLIC "__WINDOWS_ASIO__")
+-    target_include_directories(RtAudio PRIVATE
+-      "src/audio/external/rtaudio/include")
+-    target_sources(RtAudio PRIVATE
+-      "src/audio/external/rtaudio/include/asio.cpp"
+-      "src/audio/external/rtaudio/include/asiodrivers.cpp"
+-      "src/audio/external/rtaudio/include/asiolist.cpp"
+-      "src/audio/external/rtaudio/include/iasiothiscallresolver.cpp")
+-  elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+-    target_compile_definitions(RtAudio PUBLIC "__MACOSX_CORE__")
+-    find_library(COREAUDIO_LIBRARY "CoreAudio")
+-    target_link_libraries(RtAudio PUBLIC "${COREAUDIO_LIBRARY}")
+-    find_library(COREFOUNDATION_LIBRARY "CoreFoundation")
+-    target_link_libraries(RtAudio PUBLIC "${COREFOUNDATION_LIBRARY}")
+   endif()
++
++  if(NOT RTAUDIO_FOUND)
++    message("Using bundled RtAudio.")
++    add_library(RtAudio STATIC "src/audio/external/rtaudio/RtAudio.cpp")
++    target_include_directories(RtAudio PUBLIC "src/audio/external/rtaudio")
++    if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
++      target_compile_definitions(RtAudio PUBLIC "__LINUX_ALSA__")
++      target_link_libraries(RtAudio PUBLIC "asound")
++      if(JACK_FOUND)
++        target_compile_definitions(RtAudio PUBLIC "__UNIX_JACK__")
++        target_include_directories(RtAudio PUBLIC ${JACK_INCLUDE_DIRS})
++        link_directories(${JACK_LIBRARY_DIRS})
++        target_link_libraries(RtAudio PUBLIC ${JACK_LIBRARIES})
++      endif()
++      if(PULSEAUDIO_FOUND)
++        target_compile_definitions(RtAudio PUBLIC "__LINUX_PULSE__")
++        target_include_directories(RtAudio PUBLIC ${PULSEAUDIO_INCLUDE_DIRS})
++        link_directories(${PULSEAUDIO_LIBRARY_DIRS})
++        target_link_libraries(RtAudio PUBLIC ${PULSEAUDIO_LIBRARIES})
++      endif()
++    elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
++      target_compile_definitions(RtAudio PUBLIC "__WINDOWS_DS__")
++      target_link_libraries(RtAudio PUBLIC "dsound" "ole32")
++      target_compile_definitions(RtAudio PUBLIC "__WINDOWS_WASAPI__")
++      target_link_libraries(RtAudio PUBLIC "ksguid")
++      target_compile_definitions(RtAudio PUBLIC "__WINDOWS_ASIO__")
++      target_include_directories(RtAudio PRIVATE
++        "src/audio/external/rtaudio/include")
++      target_sources(RtAudio PRIVATE
++        "src/audio/external/rtaudio/include/asio.cpp"
++        "src/audio/external/rtaudio/include/asiodrivers.cpp"
++        "src/audio/external/rtaudio/include/asiolist.cpp"
++        "src/audio/external/rtaudio/include/iasiothiscallresolver.cpp")
++    elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
++      target_compile_definitions(RtAudio PUBLIC "__MACOSX_CORE__")
++      find_library(COREAUDIO_LIBRARY "CoreAudio")
++      target_link_libraries(RtAudio PUBLIC "${COREAUDIO_LIBRARY}")
++      find_library(COREFOUNDATION_LIBRARY "CoreFoundation")
++      target_link_libraries(RtAudio PUBLIC "${COREFOUNDATION_LIBRARY}")
++    endif()
++    target_link_libraries(OPN2BankEditor PRIVATE RtAudio)
++  endif()
++
+   target_sources(OPN2BankEditor PRIVATE "src/audio/ao_rtaudio.cpp")
+   target_compile_definitions(OPN2BankEditor PRIVATE "ENABLE_AUDIO_TESTING")
+-  target_link_libraries(OPN2BankEditor PRIVATE RtAudio)
+ endif()
+ 
+ add_executable(measurer_tool
+-- 
+2.29.3
+
diff --git a/pkgs/tools/audio/opl3bankeditor/common.nix b/pkgs/tools/audio/opl3bankeditor/common.nix
new file mode 100644
index 00000000000..9f6972ce954
--- /dev/null
+++ b/pkgs/tools/audio/opl3bankeditor/common.nix
@@ -0,0 +1,69 @@
+{ pname, chip, version, sha256, extraPatches ? [] }:
+
+{ mkDerivation
+, stdenv
+, lib
+, fetchFromGitHub
+, dos2unix
+, cmake
+, pkg-config
+, qttools
+, qtbase
+, qwt
+, rtaudio
+, rtmidi
+}:
+
+let
+  binname = "${chip} Bank Editor";
+  mainProgram = "${lib.strings.toLower chip}_bank_editor";
+in
+mkDerivation rec {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "Wohlstand";
+    repo = pname;
+    rev = "v${version}";
+    inherit sha256;
+  };
+
+  prePatch = ''
+    dos2unix CMakeLists.txt
+  '';
+
+  patches = extraPatches;
+
+  nativeBuildInputs = [
+    dos2unix
+    cmake
+    pkg-config
+    qttools
+  ];
+
+  buildInputs = [
+    qtbase
+    qwt
+    rtaudio
+    rtmidi
+  ];
+
+  postInstall = lib.optionalString stdenv.hostPlatform.isDarwin ''
+    mkdir $out/{bin,Applications}
+    mv "${binname}.app" $out/Applications/
+
+    install_name_tool -change {,${qwt}/lib/}libqwt.6.dylib "$out/Applications/${binname}.app/Contents/MacOS/${binname}"
+    wrapQtApp "$out/Applications/${binname}.app/Contents/MacOS/${binname}"
+
+    ln -s "$out/Applications/${binname}.app/Contents/MacOS/${binname}" $out/bin/${mainProgram}
+  '';
+
+  meta = with lib; {
+    inherit mainProgram;
+    description = "A small cross-platform editor of the ${chip} FM banks of different formats";
+    homepage = src.meta.homepage;
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ OPNA2608 ];
+  };
+}
diff --git a/pkgs/tools/audio/opl3bankeditor/default.nix b/pkgs/tools/audio/opl3bankeditor/default.nix
index 381591edb02..85762bb69b9 100644
--- a/pkgs/tools/audio/opl3bankeditor/default.nix
+++ b/pkgs/tools/audio/opl3bankeditor/default.nix
@@ -1,27 +1,9 @@
-{ stdenv, mkDerivation, fetchFromGitHub, cmake, qttools, alsaLib }:
-
-mkDerivation rec {
+import ./common.nix rec {
+  pname = "opl3bankeditor";
+  chip = "OPL3";
   version = "1.5.1";
-  pname = "OPL3BankEditor";
-
-  src = fetchFromGitHub {
-    owner = "Wohlstand";
-    repo = pname;
-    rev = "v${version}";
-    sha256 = "1g59qrkcm4xnyxx0s2x28brqbf2ix6vriyx12pcdvfhhcdi55hxh";
-    fetchSubmodules = true;
-  };
-
-  buildInputs = [
-    alsaLib qttools
+  sha256 = "08krbxlxgmc7i2r2k6d6wgi0m6k8hh3j60xf21kz4kp023w613sa";
+  extraPatches = [
+    ./0001-opl3bankeditor-Look-for-system-installed-Rt-libs.patch
   ];
-  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/pkgs/tools/audio/opl3bankeditor/opn2bankeditor.nix b/pkgs/tools/audio/opl3bankeditor/opn2bankeditor.nix
index 1d10452470e..d9c4bbe1511 100644
--- a/pkgs/tools/audio/opl3bankeditor/opn2bankeditor.nix
+++ b/pkgs/tools/audio/opl3bankeditor/opn2bankeditor.nix
@@ -1,14 +1,9 @@
-{ opl3bankeditor, fetchFromGitHub }:
-
-opl3bankeditor.overrideAttrs (oldAttrs: rec {
+import ./common.nix rec {
+  pname = "opn2bankeditor";
+  chip = "OPN2";
   version = "1.3";
-  pname = "OPN2BankEditor";
-
-  src = fetchFromGitHub {
-    owner = "Wohlstand";
-    repo = pname;
-    rev = "v${version}";
-    sha256 = "0xsvv0gxqh1lx22f1jm384f7mq1jp57fmpsx1jjaxz435w5hf8s0";
-    fetchSubmodules = true;
-  };
-})
+  sha256 = "0niam6a6y57msbl0xj23g6l7gisv4a670q0k1zqfm34804532a32";
+  extraPatches = [
+    ./0001-opn2bankeditor-Look-for-system-installed-Rt-libs.patch
+  ];
+}
diff --git a/pkgs/tools/audio/pa-applet/default.nix b/pkgs/tools/audio/pa-applet/default.nix
index 69e5976e6d5..358e662ca1e 100644
--- a/pkgs/tools/audio/pa-applet/default.nix
+++ b/pkgs/tools/audio/pa-applet/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, libpulseaudio, pkgconfig, gtk3, glibc, autoconf, automake, libnotify, libX11, xf86inputevdev }:
+{ lib, stdenv, fetchgit, libpulseaudio, pkg-config, gtk3, glibc, autoconf, automake, libnotify, libX11, xf86inputevdev }:
 
 stdenv.mkDerivation {
   name = "pa-applet-2012-04-11";
@@ -9,7 +9,7 @@ stdenv.mkDerivation {
     sha256 = "1242sdri67wnm1cd0hr40mxarkh7qs7mb9n2m0g9dbz0f4axj6wa";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [
     gtk3 libpulseaudio glibc automake autoconf libnotify libX11 xf86inputevdev
   ];
@@ -21,10 +21,9 @@ stdenv.mkDerivation {
   # work around a problem related to gtk3 updates
   NIX_CFLAGS_COMPILE = "-Wno-error=deprecated-declarations";
 
-  postInstall = ''
-  '';
+  postInstall = "";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "";
     license = licenses.gpl2;
     maintainers = with maintainers; [ domenkozar ];
diff --git a/pkgs/tools/audio/pasystray/default.nix b/pkgs/tools/audio/pasystray/default.nix
index 8b0580ba98c..2bedd2abacd 100644
--- a/pkgs/tools/audio/pasystray/default.nix
+++ b/pkgs/tools/audio/pasystray/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook, wrapGAppsHook
-, gnome3, avahi, gtk3, libappindicator-gtk3, libnotify, libpulseaudio
+{ lib, stdenv, fetchpatch, fetchFromGitHub, pkg-config, autoreconfHook, wrapGAppsHook
+, gnome, avahi, gtk3, libayatana-appindicator-gtk3, libnotify, libpulseaudio
 , xlibsWrapper, gsettings-desktop-schemas
 }:
 
@@ -17,16 +17,22 @@ stdenv.mkDerivation rec {
   patches = [
     # https://github.com/christophgysin/pasystray/issues/90#issuecomment-306190701
     ./fix-wayland.patch
+
+    # https://github.com/christophgysin/pasystray/issues/98
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/p/pasystray/0.7.1-1/debian/patches/0001-Build-against-ayatana-appindicator.patch";
+      sha256 = "0hijphrf52n2zfwdnrmxlp3a7iwznnkb79awvpzplz0ia2lqywpw";
+    })
   ];
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook wrapGAppsHook ];
+  nativeBuildInputs = [ pkg-config autoreconfHook wrapGAppsHook ];
   buildInputs = [
-    gnome3.adwaita-icon-theme
-    avahi gtk3 libappindicator-gtk3 libnotify libpulseaudio xlibsWrapper
+    gnome.adwaita-icon-theme
+    avahi gtk3 libayatana-appindicator-gtk3 libnotify libpulseaudio xlibsWrapper
     gsettings-desktop-schemas
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "PulseAudio system tray";
     homepage = "https://github.com/christophgysin/pasystray";
     license = licenses.lgpl21Plus;
diff --git a/pkgs/tools/audio/patray/default.nix b/pkgs/tools/audio/patray/default.nix
new file mode 100644
index 00000000000..5f86f1b8855
--- /dev/null
+++ b/pkgs/tools/audio/patray/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, python3
+, qt5
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "patray";
+  version = "0.1.1";
+
+  src = python3.pkgs.fetchPypi {
+    inherit version pname;
+    sha256 = "0vaapn2p4257m1d5nbnwnh252b7lhl00560gr9pqh2b7xqm1bh6g";
+  };
+
+  patchPhase = ''
+    sed -i '30i entry_points = { "console_scripts": [ "patray = patray.__main__:main" ] },' setup.py
+    sed -i 's/production.txt/production.in/' setup.py
+    sed -i '/pyside2/d' requirements/production.in
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pulsectl
+    loguru
+    cock
+    pyside2
+  ];
+
+  doCheck = false;
+
+  nativeBuildInputs = [ qt5.wrapQtAppsHook ];
+  postFixup = ''
+    wrapQtApp $out/bin/patray
+  '';
+
+
+
+  meta = with lib; {
+    description = "Yet another tray pulseaudio frontend";
+    homepage = "https://github.com/pohmelie/patray";
+    license = licenses.mit;
+    maintainers = with maintainers; [ domenkozar ];
+  };
+}
diff --git a/pkgs/tools/audio/picotts/default.nix b/pkgs/tools/audio/picotts/default.nix
index 023bf457774..03f446dc215 100644
--- a/pkgs/tools/audio/picotts/default.nix
+++ b/pkgs/tools/audio/picotts/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoconf, automake, libtool, popt }:
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, popt }:
 
 stdenv.mkDerivation {
   name = "picotts-unstable-2018-10-19";
@@ -13,11 +13,11 @@ stdenv.mkDerivation {
   sourceRoot = "source/pico";
   preConfigure = "./autogen.sh";
   meta = {
-    description = "Text to speech voice sinthesizer from SVox.";
+    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;
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.canndrew ];
+    platforms = lib.platforms.linux;
   };
 }
 
diff --git a/pkgs/tools/audio/playerctl/default.nix b/pkgs/tools/audio/playerctl/default.nix
index c1cddf12b65..15ebb93e4e8 100644
--- a/pkgs/tools/audio/playerctl/default.nix
+++ b/pkgs/tools/audio/playerctl/default.nix
@@ -1,22 +1,22 @@
-{ stdenv, meson, ninja, fetchFromGitHub, glib, pkgconfig, gtk-doc, docbook_xsl, gobject-introspection }:
+{ lib, stdenv, meson, ninja, fetchFromGitHub, glib, pkg-config, gtk-doc, docbook_xsl, gobject-introspection }:
 
 stdenv.mkDerivation rec {
   pname = "playerctl";
-  version = "2.2.1";
+  version = "2.3.1";
 
   src = fetchFromGitHub {
     owner = "acrisci";
     repo = "playerctl";
     rev = "v${version}";
-    sha256 = "17hi33sw3663qz5v54bqqil31sgkrlxkb2l5bgqk87pac6x2wnbz";
+    sha256 = "00z5c6amlxd3q42l7x8i0ngl627dxglgg5vikbbhjp9ms34xbxdn";
   };
 
-  nativeBuildInputs = [ meson ninja pkgconfig gtk-doc docbook_xsl gobject-introspection ];
+  nativeBuildInputs = [ meson ninja pkg-config gtk-doc docbook_xsl gobject-introspection ];
   buildInputs = [ glib ];
 
   mesonFlags = [ "-Dbash-completions=true" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Command-line utility and library for controlling media players that implement MPRIS";
     homepage = "https://github.com/acrisci/playerctl";
     license = licenses.lgpl3;
diff --git a/pkgs/tools/audio/pnmixer/default.nix b/pkgs/tools/audio/pnmixer/default.nix
index c1e40ae5dbb..da4654a3e5f 100644
--- a/pkgs/tools/audio/pnmixer/default.nix
+++ b/pkgs/tools/audio/pnmixer/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig, gettext, alsaLib, gtk3, glib, libnotify, libX11, pcre }:
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, gettext, alsa-lib, gtk3, glib, libnotify, libX11, pcre }:
 
 stdenv.mkDerivation rec {
   pname = "pnmixer";
@@ -11,11 +11,11 @@ stdenv.mkDerivation rec {
     sha256 = "0416pa933ddf4b7ph9zxhk5jppkk7ppcq1aqph6xsrfnka4yb148";
   };
 
-  nativeBuildInputs = [ cmake pkgconfig gettext ];
+  nativeBuildInputs = [ cmake pkg-config gettext ];
 
-  buildInputs = [ alsaLib gtk3 glib libnotify libX11 pcre ];
+  buildInputs = [ alsa-lib gtk3 glib libnotify libX11 pcre ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/nicklan/pnmixer";
     description = "ALSA volume mixer for the system tray";
     license = licenses.gpl3;
diff --git a/pkgs/tools/audio/pulsemixer/default.nix b/pkgs/tools/audio/pulsemixer/default.nix
index b735c40031f..e6fc0c03e89 100644
--- a/pkgs/tools/audio/pulsemixer/default.nix
+++ b/pkgs/tools/audio/pulsemixer/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python3, libpulseaudio }:
+{ lib, stdenv, fetchFromGitHub, python3, libpulseaudio }:
 
 stdenv.mkDerivation rec {
   pname = "pulsemixer";
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
       --replace "libpulse.so.0" "$libpulseaudio/lib/libpulse.so.0"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Cli and curses mixer for pulseaudio";
     homepage = "https://github.com/GeorgeFilipkin/pulsemixer";
     license = licenses.mit;
diff --git a/pkgs/tools/audio/qastools/default.nix b/pkgs/tools/audio/qastools/default.nix
index 86ef7f050b2..f8b705a8fa1 100644
--- a/pkgs/tools/audio/qastools/default.nix
+++ b/pkgs/tools/audio/qastools/default.nix
@@ -1,18 +1,18 @@
-{ mkDerivation, lib, fetchFromGitLab, cmake, alsaLib, udev, qtbase, qtsvg, qttools }:
+{ mkDerivation, lib, fetchFromGitLab, cmake, alsa-lib, udev, qtbase, qtsvg, qttools }:
 
 mkDerivation rec {
   pname = "qastools";
-  version = "0.22.0";
+  version = "0.23.0";
 
   src = fetchFromGitLab {
     owner = "sebholt";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0px4fcn8dagivq5fyi5gy84yj86f6x0lk805mc4ry58d0wsbn68v";
+    sha256 = "19hn64hnvryfmrkdg6rqyzahdbqf1s5y3dcca389jj6sdx93b3ip";
   };
 
   nativeBuildInputs = [ cmake ];
-  buildInputs = [ alsaLib udev qtbase qtsvg qttools ];
+  buildInputs = [ alsa-lib udev qtbase qtsvg qttools ];
 
   meta = with lib; {
     description = "Collection of desktop applications for ALSA configuration";
diff --git a/pkgs/tools/audio/spotdl/default.nix b/pkgs/tools/audio/spotdl/default.nix
new file mode 100644
index 00000000000..71e8615a114
--- /dev/null
+++ b/pkgs/tools/audio/spotdl/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, python3
+, fetchFromGitHub
+, ffmpeg
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "spotdl";
+  version = "3.6.3";
+
+  src = fetchFromGitHub {
+    owner = "spotDL";
+    repo = "spotify-downloader";
+    rev = "v${version}";
+    sha256 = "sha256-Ok8DOw+Joy35IqN7sNOQcUWYJS8tqBeQ5/I8fUSly7Q=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    spotipy
+    pytube
+    rich
+    rapidfuzz
+    mutagen
+    ytmusicapi
+    tqdm
+    beautifulsoup4
+    requests
+    unidecode
+  ];
+
+  checkInputs = with python3.pkgs; [
+    pytestCheckHook
+    pytest-mock
+    pytest-vcr
+    pyfakefs
+    pytest-subprocess
+  ];
+
+  # requires networking
+  doCheck = false;
+
+  makeWrapperArgs = [
+    "--prefix" "PATH" ":" (lib.makeBinPath [ ffmpeg ])
+  ];
+
+  meta = with lib; {
+    description = "Download your Spotify playlists and songs along with album art and metadata";
+    homepage = "https://github.com/spotDL/spotify-downloader";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/tools/audio/stt/default.nix b/pkgs/tools/audio/stt/default.nix
new file mode 100644
index 00000000000..7834f87a051
--- /dev/null
+++ b/pkgs/tools/audio/stt/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, lib, fetchurl, autoPatchelfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "stt";
+  version = "0.9.3";
+
+  src = fetchurl {
+    url = "https://github.com/coqui-ai/STT/releases/download/v${version}/native_client.tf.Linux.tar.xz";
+    sha256 = "0axwys8vis4f0m7d1i2r3dfqlc8p3yj2nisvc7pdi5qs741xgy8w";
+  };
+  setSourceRoot = "sourceRoot=`pwd`";
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+  ];
+
+  buildInputs = [
+    stdenv.cc.cc.lib
+  ];
+
+  installPhase = ''
+    install -D stt $out/bin/stt
+    install -D coqui-stt.h $out/include/coqui-stt.h
+    install -D libstt.so $out/lib/libstt.so
+  '';
+
+  meta = with lib; {
+    homepage = https://github.com/coqui-ai/STT;
+    description = "Deep learning toolkit for Speech-to-Text, battle-tested in research and production";
+    license = licenses.mpl20;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ rvolosatovs ];
+  };
+}
diff --git a/pkgs/tools/audio/trx/default.nix b/pkgs/tools/audio/trx/default.nix
index 6a23b6caead..b3ffee6419b 100644
--- a/pkgs/tools/audio/trx/default.nix
+++ b/pkgs/tools/audio/trx/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, alsaLib, libopus, ortp, bctoolbox }:
+{ lib, stdenv, fetchurl, alsa-lib, libopus, ortp, bctoolbox }:
 
 stdenv.mkDerivation rec {
   pname = "trx";
@@ -15,10 +15,10 @@ stdenv.mkDerivation rec {
     ./add_bctoolbox_ldlib.patch
   ];
 
-  buildInputs = [ alsaLib libopus ortp bctoolbox ];
+  buildInputs = [ alsa-lib libopus ortp bctoolbox ];
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/audio/tts/default.nix b/pkgs/tools/audio/tts/default.nix
new file mode 100644
index 00000000000..bb5eda93a59
--- /dev/null
+++ b/pkgs/tools/audio/tts/default.nix
@@ -0,0 +1,121 @@
+{ lib
+, python3
+, fetchFromGitHub
+, fetchpatch
+}:
+
+# USAGE:
+# $ tts-server --list_models
+# # pick your favorite vocoder/tts model
+# $ tts-server --model_name tts_models/en/ljspeech/glow-tts --vocoder_name vocoder_models/universal/libri-tts/fullband-melgan
+#
+# If you upgrade from an old version you may have to delete old models from ~/.local/share/tts
+#
+# For now, for deployment check the systemd unit in the pull request:
+#   https://github.com/NixOS/nixpkgs/pull/103851#issue-521121136
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "tts";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "coqui-ai";
+    repo = "TTS";
+    rev = "v${version}";
+    sha256 = "0akhiaaqz53bf5zyps3vgjifmgh5wvcc9r4lrq9hmj3dds03vkjq";
+  };
+
+  postPatch = ''
+    sed -i -e 's!librosa==[^"]*!librosa!' requirements.txt
+    sed -i -e 's!numba==[^"]*!numba!' requirements.txt
+    sed -i -e 's!numpy==[^"]*!numpy!' requirements.txt
+    sed -i -e 's!umap-learn==[^"]*!umap-learn!' requirements.txt
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    cython
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    anyascii
+    coqpit
+    flask
+    gruut
+    gdown
+    inflect
+    jieba
+    librosa
+    matplotlib
+    mecab-python3
+    numba
+    pandas
+    pypinyin
+    pysbd
+    pytorch
+    scipy
+    soundfile
+    tensorboardx
+    tensorflow
+    tqdm
+    umap-learn
+    unidic-lite
+  ];
+
+  postInstall = ''
+    cp -r TTS/server/templates/ $out/${python3.sitePackages}/TTS/server
+    # cython modules are not installed for some reasons
+    (
+      cd TTS/tts/layers/glow_tts/monotonic_align
+      ${python3.interpreter} setup.py install --prefix=$out
+    )
+  '';
+
+  checkInputs = with python3.pkgs; [
+    pytest-sugar
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # RuntimeError: fft: ATen not compiled with MKL support
+    "test_torch_stft"
+    "test_stft_loss"
+    "test_multiscale_stft_loss"
+    # Requires network acccess to download models
+    "test_synthesize"
+  ];
+
+  preCheck = ''
+    # use the installed TTS in $PYTHONPATH instead of the one from source to also have cython modules.
+    mv TTS{,.old}
+    export PATH=$out/bin:$PATH
+
+    # numba tries to write to HOME directory
+    export HOME=$TMPDIR
+
+    for file in $(grep -rl 'python TTS/bin' tests); do
+      substituteInPlace "$file" \
+        --replace "python TTS/bin" "${python3.interpreter} $out/lib/${python3.libPrefix}/site-packages/TTS/bin"
+    done
+  '';
+
+  disabledTestPaths = [
+    # requires tensorflow
+    "tests/vocoder_tests/test_vocoder_tf_pqmf.py"
+    "tests/vocoder_tests/test_vocoder_tf_melgan_generator.py"
+    "tests/tts_tests/test_tacotron2_tf_model.py"
+    # RuntimeError: fft: ATen not compiled with MKL support
+    "tests/vocoder_tests/test_fullband_melgan_train.py"
+    "tests/vocoder_tests/test_hifigan_train.py"
+    "tests/vocoder_tests/test_melgan_train.py"
+    "tests/vocoder_tests/test_multiband_melgan_train.py"
+    "tests/vocoder_tests/test_parallel_wavegan_train.py"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/coqui-ai/TTS";
+    changelog = "https://github.com/coqui-ai/TTS/releases/tag/v${version}";
+    description = "Deep learning toolkit for Text-to-Speech, battle-tested in research and production";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ hexa mic92 ];
+  };
+}
diff --git a/pkgs/tools/audio/video2midi/default.nix b/pkgs/tools/audio/video2midi/default.nix
index cf9297119e9..e8f5af70c87 100644
--- a/pkgs/tools/audio/video2midi/default.nix
+++ b/pkgs/tools/audio/video2midi/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pythonPackages, opencv3 }:
+{ lib, fetchFromGitHub, pythonPackages, opencv3 }:
 
 let
   opencv3_ = pythonPackages.toPythonModule (opencv3.override {
@@ -25,11 +25,11 @@ in pythonPackages.buildPythonApplication rec {
     install -Dm755 v2m.py $out/bin/v2m.py
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Youtube synthesia video to midi conversion tool";
     homepage = src.meta.homepage;
     license = licenses.gpl3;
-    maintainers = [ maintainers.gnidorah ];
+    maintainers = [ ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/audio/volctl/default.nix b/pkgs/tools/audio/volctl/default.nix
index dd58671824d..d764644bab1 100644
--- a/pkgs/tools/audio/volctl/default.nix
+++ b/pkgs/tools/audio/volctl/default.nix
@@ -1,46 +1,52 @@
-{ stdenv, fetchFromGitHub, pythonPackages, libpulseaudio, glib, gtk3, gobject-introspection, wrapGAppsHook }:
+{ lib, python3Packages, fetchFromGitHub, wrapGAppsHook, gobject-introspection, libpulseaudio, glib, gtk3, pango, xorg }:
 
-pythonPackages.buildPythonApplication rec {
+python3Packages.buildPythonApplication rec {
   pname = "volctl";
-  version = "0.6.3";
+  version = "0.8.2";
 
   src = fetchFromGitHub {
     owner = "buzz";
     repo = pname;
-    rev = version;
-    sha256 = "0rppqc5wiqxd83z2mgvhi6gdx7yhy9wnav1dbbi1wvm7lzw6fnil";
+    rev = "v${version}";
+    sha256 = "1cx27j83pz2qffnzb85fbl1x6pp3irv1kbw7g1hri7kaw6ky4xiz";
   };
 
+  postPatch = ''
+    substituteInPlace volctl/lib/xwrappers.py \
+      --replace 'libXfixes.so' "${xorg.libXfixes}/lib/libXfixes.so" \
+      --replace 'libXfixes.so.3' "${xorg.libXfixes}/lib/libXfixes.so.3"
+  '';
+
+  preBuild = ''
+    export LD_LIBRARY_PATH=${libpulseaudio}/lib
+  '';
+
   nativeBuildInputs = [
     gobject-introspection
     wrapGAppsHook
   ];
 
-  buildInputs = [
-    glib
-    gtk3
-    libpulseaudio
-  ];
-
-  pythonPath = with pythonPackages; [
+  propagatedBuildInputs = [ pango gtk3 ] ++ (with python3Packages; [
+    click
+    pycairo
     pygobject3
-  ];
+    pyyaml
+  ]);
 
+  # with strictDeps importing "gi.repository.Gtk" fails with "gi.RepositoryError: Typelib file for namespace 'Pango', version '1.0' not found"
   strictDeps = false;
 
-  preBuild = ''
-    export LD_LIBRARY_PATH=${libpulseaudio}/lib
-  '';
+  # no tests included
+  doCheck = false;
+
+  pythonImportsCheck = [ "volctl" ];
 
   preFixup = ''
     glib-compile-schemas ${glib.makeSchemaPath "$out" "${pname}-${version}"}
-
-    gappsWrapperArgs+=(
-      --prefix LD_LIBRARY_PATH : "${libpulseaudio}/lib"
-    )
+    gappsWrapperArgs+=(--prefix LD_LIBRARY_PATH : "${libpulseaudio}/lib")
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "PulseAudio enabled volume control featuring per-app sliders";
     homepage = "https://buzz.github.io/volctl/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/audio/volumeicon/default.nix b/pkgs/tools/audio/volumeicon/default.nix
index 50290881dc7..4d726cbd2a9 100644
--- a/pkgs/tools/audio/volumeicon/default.nix
+++ b/pkgs/tools/audio/volumeicon/default.nix
@@ -1,4 +1,4 @@
-{ pkgs, fetchurl, stdenv, gtk3, pkgconfig, intltool, alsaLib }:
+{ pkgs, fetchurl, lib, stdenv, gtk3, pkg-config, intltool, alsa-lib }:
 
 stdenv.mkDerivation {
   pname = "volumeicon";
@@ -9,10 +9,10 @@ stdenv.mkDerivation {
     sha256 = "182xl2w8syv6ky2h2bc9imc6ap8pzh0p7rp63hh8nw0xm38c3f14";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ gtk3 intltool alsaLib ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk3 intltool alsa-lib ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A lightweight volume control that sits in your systray";
     homepage = "http://softwarebakery.com/maato/volumeicon.html";
     platforms = pkgs.lib.platforms.linux;
diff --git a/pkgs/tools/audio/yabridge/default.nix b/pkgs/tools/audio/yabridge/default.nix
new file mode 100644
index 00000000000..cbe35765cb4
--- /dev/null
+++ b/pkgs/tools/audio/yabridge/default.nix
@@ -0,0 +1,146 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, substituteAll
+, meson
+, ninja
+, pkg-config
+, wine
+, boost
+, libxcb
+}:
+
+let
+  # Derived from subprojects/bitsery.wrap
+  bitsery = rec {
+    version = "5.2.0";
+    src = fetchFromGitHub {
+      owner = "fraillt";
+      repo = "bitsery";
+      rev = "v${version}";
+      hash = "sha256-Bxdtjn2v2lP2lCnvjzmct6QHT7FpwmXoSZtd2oEFS4w=";
+    };
+  };
+
+  # Derived from subprojects/function2.wrap
+  function2 = rec {
+    version = "4.1.0";
+    src = fetchFromGitHub {
+      owner = "Naios";
+      repo = "function2";
+      rev = version;
+      hash = "sha256-JceZU8ZvtYhFheh8BjMvjjZty4hcYxHEK+IIo5X4eSk=";
+    };
+  };
+
+  # Derived from subprojects/tomlplusplus.wrap
+  tomlplusplus = rec {
+    version = "2.1.0";
+    src = fetchFromGitHub {
+      owner = "marzer";
+      repo = "tomlplusplus";
+      rev = "v${version}";
+      hash = "sha256-i6yAEqwkinkPEzzb6ynXytS1SEOUDwi8SixMf62NVzs=";
+    };
+  };
+
+  # Derived from vst3.wrap
+  vst3 = rec {
+    version = "3.7.2_build_28-patched";
+    src = fetchFromGitHub {
+      owner = "robbert-vdh";
+      repo = "vst3sdk";
+      rev = "v${version}";
+      fetchSubmodules = true;
+      sha256 = "sha256-39pvfcg4fvf7DAbAPzEHA1ja1LFL6r88nEwNYwaDC8w=";
+    };
+  };
+in stdenv.mkDerivation rec {
+  pname = "yabridge";
+  version = "3.3.1";
+
+  # NOTE: Also update yabridgectl's cargoHash when this is updated
+  src = fetchFromGitHub {
+    owner = "robbert-vdh";
+    repo = pname;
+    rev = version;
+    hash = "sha256-3B+6YuCWVJljqdyGpePjPf5JDwLSWFNgOCeLt8e4mO8=";
+  };
+
+  # Unpack subproject sources
+  postUnpack = ''(
+    cd "$sourceRoot/subprojects"
+    cp -R --no-preserve=mode,ownership ${bitsery.src} bitsery-${bitsery.version}
+    tar -xf bitsery-patch-${bitsery.version}.tar.xz
+    cp -R --no-preserve=mode,ownership ${function2.src} function2-${function2.version}
+    tar -xf function2-patch-${function2.version}.tar.xz
+    cp -R --no-preserve=mode,ownership ${tomlplusplus.src} tomlplusplus
+    cp -R --no-preserve=mode,ownership ${vst3.src} vst3
+  )'';
+
+  patches = [
+    # Hard code wine path so wine version is correct in logs
+    (substituteAll {
+      src = ./hardcode-wine.patch;
+      inherit wine;
+    })
+  ];
+
+  postPatch = ''
+    patchShebangs .
+  '';
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    wine
+  ];
+
+  buildInputs = [
+    boost
+    libxcb
+  ];
+
+  # Meson is no longer able to pick up Boost automatically.
+  # https://github.com/NixOS/nixpkgs/issues/86131
+  BOOST_INCLUDEDIR = "${lib.getDev boost}/include";
+  BOOST_LIBRARYDIR = "${lib.getLib boost}/lib";
+
+  mesonFlags = [
+    "--cross-file" "cross-wine.conf"
+
+    # Requires CMake and is unnecessary
+    "-Dtomlplusplus:GENERATE_CMAKE_CONFIG=disabled"
+
+    # tomlplusplus examples and tests don't build with winegcc
+    "-Dtomlplusplus:BUILD_EXAMPLES=disabled"
+    "-Dtomlplusplus:BUILD_TESTS=disabled"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p "$out/bin" "$out/lib"
+    cp yabridge-group.exe{,.so} "$out/bin"
+    cp yabridge-host.exe{,.so} "$out/bin"
+    cp libyabridge-vst2.so "$out/lib"
+    cp libyabridge-vst3.so "$out/lib"
+    runHook postInstall
+  '';
+
+  # Hard code wine path in wrapper scripts generated by winegcc
+  postFixup = ''
+    for exe in "$out"/bin/*.exe; do
+      substituteInPlace "$exe" \
+        --replace 'WINELOADER="wine"' 'WINELOADER="${wine}/bin/wine"'
+    done
+  '';
+
+  meta = with lib; {
+    description = "Yet Another VST bridge, run Windows VST2 plugins under Linux";
+    homepage = "https://github.com/robbert-vdh/yabridge";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kira-bruneau ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/pkgs/tools/audio/yabridge/hardcode-wine.patch b/pkgs/tools/audio/yabridge/hardcode-wine.patch
new file mode 100644
index 00000000000..2b6ce1f448f
--- /dev/null
+++ b/pkgs/tools/audio/yabridge/hardcode-wine.patch
@@ -0,0 +1,13 @@
+diff --git a/src/plugin/utils.cpp b/src/plugin/utils.cpp
+index 1ff05bc..0723456 100644
+--- a/src/plugin/utils.cpp
++++ b/src/plugin/utils.cpp
+@@ -351,7 +351,7 @@ std::string get_wine_version() {
+         access(wineloader_path.c_str(), X_OK) == 0) {
+         wine_path = wineloader_path;
+     } else {
+-        wine_path = bp::search_path("wine").string();
++        wine_path = "@wine@/bin/wine";
+     }
+ 
+     bp::ipstream output;
diff --git a/pkgs/tools/audio/yabridgectl/default.nix b/pkgs/tools/audio/yabridgectl/default.nix
new file mode 100644
index 00000000000..bf0913372be
--- /dev/null
+++ b/pkgs/tools/audio/yabridgectl/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, rustPlatform
+, yabridge
+, makeWrapper
+, wine
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "yabridgectl";
+  version = yabridge.version;
+
+  src = yabridge.src;
+  sourceRoot = "source/tools/yabridgectl";
+  cargoHash = "sha256-f5k5OF+bEzH0b6M14Mdp8t4Qd5dP5Qj2fDsdiG1MkYk=";
+
+  patches = [
+    # By default, yabridgectl locates libyabridge.so by using
+    # hard coded distro specific lib paths. This patch replaces those
+    # hard coded paths with lib paths from NIX_PROFILES.
+    ./libyabridge-from-nix-profiles.patch
+  ];
+
+  patchFlags = [ "-p3" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postFixup = ''
+    wrapProgram "$out/bin/yabridgectl" \
+      --prefix PATH : ${lib.makeBinPath [ wine ]}
+  '';
+
+  meta = with lib; {
+    description = "A small, optional utility to help set up and update yabridge for several directories at once";
+    homepage = "https://github.com/robbert-vdh/yabridge/tree/master/tools/yabridgectl";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kira-bruneau ];
+    platforms = yabridge.meta.platforms;
+  };
+}
diff --git a/pkgs/tools/audio/yabridgectl/libyabridge-from-nix-profiles.patch b/pkgs/tools/audio/yabridgectl/libyabridge-from-nix-profiles.patch
new file mode 100644
index 00000000000..ec42f98a2e8
--- /dev/null
+++ b/pkgs/tools/audio/yabridgectl/libyabridge-from-nix-profiles.patch
@@ -0,0 +1,70 @@
+diff --git a/tools/yabridgectl/src/config.rs b/tools/yabridgectl/src/config.rs
+index 6e05e34..656eef3 100644
+--- a/tools/yabridgectl/src/config.rs
++++ b/tools/yabridgectl/src/config.rs
+@@ -23,6 +23,7 @@ use std::collections::{BTreeMap, BTreeSet, HashSet};
+ use std::env;
+ use std::fmt::Display;
+ use std::fs;
++use std::iter;
+ use std::path::{Path, PathBuf};
+ use which::which;
+ use xdg::BaseDirectories;
+@@ -222,34 +223,24 @@ impl Config {
+                 }
+             }
+             None => {
+-                // Search in the system library locations and in `~/.local/share/yabridge` if no
+-                // path was set explicitely. We'll also search through `/usr/local/lib` just in case
+-                // but since we advocate against installing yabridge there we won't list this path
+-                // in the error message when `libyabridge-vst2.so` can't be found.
+-                let system_path = Path::new("/usr/lib");
++                // Search through NIX_PROFILES & data home directory if no path was set explicitly.
++                let nix_profiles = env::var("NIX_PROFILES");
+                 let user_path = xdg_dirs.get_data_home();
+-                let lib_directories = [
+-                    system_path,
+-                    // Used on Debian based distros
+-                    Path::new("/usr/lib/x86_64-linux-gnu"),
+-                    // Used on Fedora
+-                    Path::new("/usr/lib64"),
+-                    Path::new("/usr/local/lib"),
+-                    Path::new("/usr/local/lib/x86_64-linux-gnu"),
+-                    Path::new("/usr/local/lib64"),
+-                    &user_path,
+-                ];
++                let lib_directories = nix_profiles.iter()
++                    .flat_map(|profiles| profiles.split(' ')
++                              .map(|profile| Path::new(profile).join("lib")))
++                    .chain(iter::once(user_path.clone()));
++
+                 let mut candidates = lib_directories
+-                    .iter()
+                     .map(|directory| directory.join(LIBYABRIDGE_VST2_NAME));
++
+                 match candidates.find(|directory| directory.exists()) {
+                     Some(candidate) => candidate,
+                     _ => {
+                         return Err(anyhow!(
+-                            "Could not find '{}' in either '{}' or '{}'. You can override the \
+-                            default search path using 'yabridgectl set --path=<path>'.",
++                            "Could not find '{}' through 'NIX_PROFILES' or '{}'. You can override the \
++                             default search path using 'yabridgectl set --path=<path>'.",
+                             LIBYABRIDGE_VST2_NAME,
+-                            system_path.display(),
+                             user_path.display()
+                         ));
+                     }
+diff --git a/tools/yabridgectl/src/main.rs b/tools/yabridgectl/src/main.rs
+index ce701b8..b6b9633 100644
+--- a/tools/yabridgectl/src/main.rs
++++ b/tools/yabridgectl/src/main.rs
+@@ -150,7 +150,7 @@ fn main() -> Result<()> {
+                         .about("Path to the directory containing 'libyabridge-{vst2,vst3}.so'")
+                         .long_about(
+                             "Path to the directory containing 'libyabridge-{vst2,vst3}.so'. If this \
+-                             is not set, then yabridgectl will look in both '/usr/lib' and \
++                             is not set, then yabridgectl will look through 'NIX_PROFILES' and \
+                              '~/.local/share/yabridge' by default.",
+                         )
+                         .validator(validate_path)
diff --git a/pkgs/tools/backup/amazon-glacier-cmd-interface/default.nix b/pkgs/tools/backup/amazon-glacier-cmd-interface/default.nix
deleted file mode 100644
index a872060ce21..00000000000
--- a/pkgs/tools/backup/amazon-glacier-cmd-interface/default.nix
+++ /dev/null
@@ -1,33 +0,0 @@
-{ 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/pkgs/tools/backup/automysqlbackup/default.nix b/pkgs/tools/backup/automysqlbackup/default.nix
index acdf31e47d8..5ecdcc4e7ed 100644
--- a/pkgs/tools/backup/automysqlbackup/default.nix
+++ b/pkgs/tools/backup/automysqlbackup/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, makeWrapper, mysql, mailutils, pbzip2, pigz, bzip2, gzip }:
+{ lib, stdenv, fetchurl, makeWrapper, mariadb, mailutils, pbzip2, pigz, bzip2, gzip }:
 
 stdenv.mkDerivation rec {
   pname = "automysqlbackup";
@@ -19,10 +19,10 @@ stdenv.mkDerivation rec {
     cp automysqlbackup $out/bin/
     cp automysqlbackup.conf $out/etc/
 
-    wrapProgram $out/bin/automysqlbackup --prefix PATH : ${stdenv.lib.makeBinPath [ mysql mailutils pbzip2 pigz bzip2 gzip ]}
+    wrapProgram $out/bin/automysqlbackup --prefix PATH : ${lib.makeBinPath [ mariadb mailutils pbzip2 pigz bzip2 gzip ]}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A script to run daily, weekly and monthly backups for your MySQL database";
     homepage = "https://sourceforge.net/projects/automysqlbackup/";
     platforms = platforms.linux;
diff --git a/pkgs/tools/backup/bacula/default.nix b/pkgs/tools/backup/bacula/default.nix
index 8bf253a7b12..c37e7893384 100644
--- a/pkgs/tools/backup/bacula/default.nix
+++ b/pkgs/tools/backup/bacula/default.nix
@@ -1,16 +1,23 @@
-{ stdenv, fetchurl, sqlite, postgresql, zlib, acl, ncurses, openssl, readline }:
+{ lib, stdenv, fetchurl, sqlite, postgresql, zlib, acl, ncurses, openssl, readline
+, CoreFoundation, IOKit
+}:
 
 stdenv.mkDerivation rec {
-  name = "bacula-9.6.5";
+  pname = "bacula";
+  version = "11.0.5";
 
   src = fetchurl {
-    url    = "mirror://sourceforge/bacula/${name}.tar.gz";
-    sha256 = "0yn7qwkzix78bs811vmrn5gbywy7ggnsv72mdjz2lirqc6w3a3si";
+    url    = "mirror://sourceforge/bacula/${pname}-${version}.tar.gz";
+    sha256 = "sha256-71s7Z4EEQiAbgNwdR8zvd7XtN4/hKFQG86c0AbboERo=";
   };
 
   buildInputs = [ postgresql sqlite zlib ncurses openssl readline ]
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [
+      CoreFoundation
+      IOKit
+    ]
     # acl relies on attr, which I can't get to build on darwin
-    ++ stdenv.lib.optional (!stdenv.isDarwin) acl;
+    ++ lib.optional (!stdenv.isDarwin) acl;
 
   configureFlags = [
     "--with-sqlite3=${sqlite.dev}"
@@ -18,7 +25,7 @@ stdenv.mkDerivation rec {
     "--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";
+  ] ++ lib.optional (stdenv.buildPlatform != stdenv.hostPlatform) "ac_cv_func_setpgrp_void=yes";
 
   installFlags = [
     "logdir=\${out}/logdir"
@@ -30,11 +37,11 @@ stdenv.mkDerivation rec {
     ln -s $out/sbin/* $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Enterprise ready, Network Backup Tool";
     homepage    = "http://bacula.org/";
-    license     = licenses.gpl2;
-    maintainers = with maintainers; [ domenkozar lovek323 eleanor ];
+    license     = with licenses; [ agpl3Only bsd2 ];
+    maintainers = with maintainers; [ lovek323 eleanor ];
     platforms   = platforms.all;
   };
 }
diff --git a/pkgs/tools/backup/bareos/default.nix b/pkgs/tools/backup/bareos/default.nix
index 53de4853c62..e2ccdb132c9 100644
--- a/pkgs/tools/backup/bareos/default.nix
+++ b/pkgs/tools/backup/bareos/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, nettools, gettext, flex
+{ lib, stdenv, fetchFromGitHub, pkg-config, 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
@@ -6,7 +6,7 @@
 
 assert sqlite != null || postgresql != null || libmysqlclient != null;
 
-with stdenv.lib;
+with lib;
 let
   withGlusterfs = "\${with_glusterfs_directory}";
 in
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     sha256 = "1awf5i4mw2nfd7z0dmqnywapnx9nz6xwqv8rxp0y2mnrhzdpbrbz";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [
     nettools gettext readline openssl python2 flex ncurses sqlite postgresql
     libmysqlclient zlib lzo jansson acl glusterfs libceph libcap rocksdb
@@ -72,7 +72,7 @@ stdenv.mkDerivation rec {
     "sbindir=\${out}/bin"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.bareos.org/";
     description = "A fork of the bacula project";
     license = licenses.agpl3;
diff --git a/pkgs/tools/backup/bdsync/default.nix b/pkgs/tools/backup/bdsync/default.nix
index 53704ce39d4..0112ad4c9a1 100644
--- a/pkgs/tools/backup/bdsync/default.nix
+++ b/pkgs/tools/backup/bdsync/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub
+{ lib, stdenv, fetchFromGitHub
 , openssl
 , pandoc
 , which
@@ -6,13 +6,13 @@
 
 stdenv.mkDerivation rec {
   pname = "bdsync";
-  version = "0.11.1";
+  version = "0.11.2";
 
   src = fetchFromGitHub {
-    owner = "TargetHolding";
+    owner = "rolffokkens";
     repo = pname;
     rev = "v${version}";
-    sha256 = "11grdyc6fgw93jvj965awsycqw5qbzsdys7n8farqnmya8qv8gac";
+    sha256 = "0kx422cp1bxr62i1mi7dzrpwmys1kdp865rcymdp4knb5rr5864k";
   };
 
   nativeBuildInputs = [ pandoc which ];
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
     install -Dm644 bdsync.1 -t $out/share/man/man1/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Fast block device synchronizing tool";
     homepage = "https://github.com/TargetHolding/bdsync";
     license = licenses.gpl2;
diff --git a/pkgs/tools/backup/borg/default.nix b/pkgs/tools/backup/borg/default.nix
deleted file mode 100644
index 90090367586..00000000000
--- a/pkgs/tools/backup/borg/default.nix
+++ /dev/null
@@ -1,71 +0,0 @@
-{ stdenv, python3, acl, libb2, lz4, zstd, openssl, openssh }:
-
-python3.pkgs.buildPythonApplication rec {
-  pname = "borgbackup";
-  version = "1.1.13";
-
-  src = python3.pkgs.fetchPypi {
-    inherit pname version;
-    sha256 = "089q3flmwbz7dc28zlscwylf64kgck3jf1n6lqpwww8hlrk8cjhn";
-  };
-
-  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 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
-  '';
-
-  # 64 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/pkgs/tools/backup/borgbackup/default.nix b/pkgs/tools/backup/borgbackup/default.nix
new file mode 100644
index 00000000000..ce7887ff0fb
--- /dev/null
+++ b/pkgs/tools/backup/borgbackup/default.nix
@@ -0,0 +1,128 @@
+{ lib
+, stdenv
+, acl
+, e2fsprogs
+, libb2
+, lz4
+, openssh
+, openssl
+, python3
+, zstd
+, nixosTests
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "borgbackup";
+  version = "1.1.17";
+
+  src = python3.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "0x0ncy0b0bmf586hbdgrif3gjmkdw760vfnfxndr493v07y29fbs";
+  };
+
+  postPatch = ''
+    # sandbox does not support setuid/setgid/sticky bits
+    substituteInPlace src/borg/testsuite/archiver.py \
+      --replace "0o4755" "0o0755"
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools-scm
+    # For building documentation:
+    sphinx
+    guzzle_sphinx_theme
+  ];
+
+  buildInputs = [
+    libb2
+    lz4
+    zstd
+    openssl
+  ] ++ lib.optionals stdenv.isLinux [
+    acl
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    cython
+    llfuse
+    packaging
+  ] ++ lib.optionals (!stdenv.isDarwin) [
+    pyfuse3
+  ];
+
+  preConfigure = ''
+    export BORG_OPENSSL_PREFIX="${openssl.dev}"
+    export BORG_LZ4_PREFIX="${lz4.dev}"
+    export BORG_LIBB2_PREFIX="${libb2}"
+    export BORG_LIBZSTD_PREFIX="${zstd.dev}"
+  '';
+
+  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; [
+    e2fsprogs
+    pytest-benchmark
+    pytest-xdist
+    pytestCheckHook
+  ];
+
+  pytestFlagsArray = [
+    "--numprocesses" "auto"
+    "--benchmark-skip"
+    "--pyargs" "borg.testsuite"
+  ];
+
+  disabledTests = [
+    # fuse: device not found, try 'modprobe fuse' first
+    "test_fuse"
+    "test_fuse_allow_damaged_files"
+    "test_fuse_mount_hardlinks"
+    "test_fuse_mount_options"
+    "test_fuse_versions_view"
+    "test_readonly_mount"
+    # Error: Permission denied while trying to write to /var/{,tmp}
+    "test_get_cache_dir"
+    "test_get_keys_dir"
+    "test_get_security_dir"
+    "test_get_config_dir"
+  ];
+
+  preCheck = ''
+    export HOME=$TEMP
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) borgbackup;
+  };
+
+  outputs = [ "out" "doc" ];
+
+  meta = with lib; {
+    description = "Deduplicating archiver with compression and encryption";
+    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/pkgs/tools/backup/borgmatic/default.nix b/pkgs/tools/backup/borgmatic/default.nix
new file mode 100644
index 00000000000..b27ee0508e1
--- /dev/null
+++ b/pkgs/tools/backup/borgmatic/default.nix
@@ -0,0 +1,46 @@
+{ borgbackup, coreutils, lib, python3Packages, systemd }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "borgmatic";
+  version = "1.5.13";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "12390ffdg30ncc5k92pvagwbvnsh42xl35a3nagbskznyfd23mw3";
+  };
+
+  checkInputs = with python3Packages; [ flexmock pytestCheckHook pytest-cov ];
+
+  # - test_borgmatic_version_matches_news_version
+  # The file NEWS not available on the pypi source, and this test is useless
+  disabledTests = [
+    "test_borgmatic_version_matches_news_version"
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    borgbackup
+    colorama
+    pykwalify
+    ruamel_yaml
+    requests
+    setuptools
+  ];
+
+  postInstall = ''
+    mkdir -p $out/lib/systemd/system
+    cp sample/systemd/borgmatic.timer $out/lib/systemd/system/
+    substitute sample/systemd/borgmatic.service \
+               $out/lib/systemd/system/borgmatic.service \
+               --replace /root/.local/bin/borgmatic $out/bin/borgmatic \
+               --replace systemd-inhibit ${systemd}/bin/systemd-inhibit \
+               --replace sleep ${coreutils}/bin/sleep
+  '';
+
+  meta = with lib; {
+    description = "Simple, configuration-driven backup software for servers and workstations";
+    homepage = "https://torsion.org/borgmatic/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ imlonghao ];
+  };
+}
diff --git a/pkgs/tools/backup/btar/default.nix b/pkgs/tools/backup/btar/default.nix
index 3727a4b7f42..c77aa5b82b6 100644
--- a/pkgs/tools/backup/btar/default.nix
+++ b/pkgs/tools/backup/btar/default.nix
@@ -1,21 +1,30 @@
-{ stdenv, fetchurl, librsync }:
+{ lib, stdenv, fetchurl, fetchpatch, librsync }:
 
 stdenv.mkDerivation rec {
-  name = "btar-1.1.1";
+  pname = "btar";
+  version = "1.1.1";
+
   src = fetchurl {
-    url = "http://vicerveza.homeunix.net/~viric/soft/btar/${name}.tar.gz";
+    url = "https://vicerveza.homeunix.net/~viric/soft/btar/btar-${version}.tar.gz";
     sha256 = "0miklk4bqblpyzh1bni4x6lqn88fa8fjn15x1k1n8bxkx60nlymd";
   };
 
+  patches = [
+    (fetchpatch {
+      url = "https://build.opensuse.org/public/source/openSUSE:Factory/btar/btar-librsync.patch?rev=2";
+      sha256 = "1awqny9489vsfffav19s73xxg26m7zrhvsgf1wxb8c2izazwr785";
+    })
+  ];
+
   buildInputs = [ librsync ];
 
-  installPhase = "make install PREFIX=$out";
+  makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = {
+  meta = with lib; {
     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];
+    license = lib.licenses.gpl3Plus;
+    homepage = "https://viric.name/cgi-bin/btar";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ viric ];
   };
 }
diff --git a/pkgs/tools/backup/btrbk/default.nix b/pkgs/tools/backup/btrbk/default.nix
index 0c528bcea1e..12308b24045 100644
--- a/pkgs/tools/backup/btrbk/default.nix
+++ b/pkgs/tools/backup/btrbk/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, coreutils, bash, btrfs-progs, openssh, perl, perlPackages
-, utillinux, asciidoc, asciidoctor, mbuffer, makeWrapper }:
+{ lib, stdenv, fetchurl, bash, btrfs-progs, openssh, perl, perlPackages
+, util-linux, asciidoc, asciidoctor, mbuffer, makeWrapper, nixosTests }:
 
 stdenv.mkDerivation rec {
   pname = "btrbk";
@@ -24,29 +24,24 @@ stdenv.mkDerivation rec {
     # 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
+    substituteInPlace ssh_filter_btrbk.sh --replace logger ${util-linux}/bin/logger
   '';
 
   preFixup = ''
     wrapProgram $out/sbin/btrbk \
       --set PERL5LIB $PERL5LIB \
-      --prefix PATH ':' "${stdenv.lib.makeBinPath [ btrfs-progs bash mbuffer openssh ]}"
+      --prefix PATH ':' "${lib.makeBinPath [ btrfs-progs bash mbuffer openssh ]}"
   '';
 
-  meta = with stdenv.lib; {
+  passthru.tests.btrbk = nixosTests.btrbk;
+
+  meta = with lib; {
     description = "A backup tool for btrfs subvolumes";
     homepage = "https://digint.ch/btrbk";
     license = licenses.gpl3;
     platforms = platforms.unix;
     maintainers = with maintainers; [ asymmetric ];
-    inherit version;
   };
 }
diff --git a/pkgs/tools/backup/bup/default.nix b/pkgs/tools/backup/bup/default.nix
index ee6ae0a2934..3908b4984c4 100644
--- a/pkgs/tools/backup/bup/default.nix
+++ b/pkgs/tools/backup/bup/default.nix
@@ -1,13 +1,13 @@
-{ stdenv, fetchFromGitHub, makeWrapper
-, perl, pandoc, python2Packages, git
+{ lib, stdenv, fetchFromGitHub, makeWrapper
+, perl, pandoc, python3Packages, git
 , par2cmdline ? null, par2Support ? true
 }:
 
 assert par2Support -> par2cmdline != null;
 
-let version = "0.31"; in
+let version = "0.32"; in
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation {
   pname = "bup";
@@ -17,23 +17,22 @@ stdenv.mkDerivation {
     repo = "bup";
     owner = "bup";
     rev = version;
-    sha256 = "03kmmdlgg0p5z39bhckkf91mmq55wghb93ghqvv9f9gaby1diw4z";
+    sha256 = "sha256-SWnEJ5jwu/Jr2NLsTS8ajWay0WX/gYbOc3J6w00DndI=";
   };
 
   buildInputs = [
     git
-    (python2Packages.python.withPackages
+    (python3Packages.python.withPackages
       (p: with p; [ setuptools tornado ]
-        ++ stdenv.lib.optionals (!stdenv.isDarwin) [ pyxattr pylibacl fuse ]))
+        ++ 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'"
+    substituteInPlace cmd/fsck-cmd.py --replace "'par2'" "'${par2cmdline}/bin/par2'"
   '';
 
   dontAddPrefix = true;
diff --git a/pkgs/tools/backup/bupstash/default.nix b/pkgs/tools/backup/bupstash/default.nix
new file mode 100644
index 00000000000..44d16549cdd
--- /dev/null
+++ b/pkgs/tools/backup/bupstash/default.nix
@@ -0,0 +1,33 @@
+{ lib, fetchFromGitHub, installShellFiles, rustPlatform, ronn, pkg-config, libsodium }:
+rustPlatform.buildRustPackage rec {
+  pname = "bupstash";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "andrewchambers";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-DzRGhdUxfBW6iazpCHlQ9J8IL10FVxhac8kx6yBSGNk=";
+  };
+
+  cargoSha256 = "sha256-IKk4VsO/oH4nC6F1W+JA3Agl7oXXNJ7zpP2PYpPLREU=";
+
+  nativeBuildInputs = [ ronn pkg-config installShellFiles ];
+  buildInputs = [ libsodium ];
+
+  postBuild = ''
+    RUBYOPT="-KU -E utf-8:utf-8" ronn -r doc/man/*.md
+  '';
+
+  postInstall = ''
+    installManPage doc/man/*.[1-9]
+  '';
+
+  meta = with lib; {
+    description = "Easy and efficient encrypted backups";
+    homepage = "https://bupstash.io";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ andrewchambers ];
+  };
+}
diff --git a/pkgs/tools/backup/burp/default.nix b/pkgs/tools/backup/burp/default.nix
index d9b4df98790..00b2c71037a 100644
--- a/pkgs/tools/backup/burp/default.nix
+++ b/pkgs/tools/backup/burp/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
 , acl, librsync, ncurses, openssl, zlib, uthash }:
 
 stdenv.mkDerivation rec {
@@ -12,15 +12,15 @@ stdenv.mkDerivation rec {
     sha256 = "1zhq240kz881vs2s620qp0kifmgr582caalm85ls789w9rmdkhjl";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ librsync ncurses openssl zlib uthash ]
-    ++ stdenv.lib.optional (!stdenv.isDarwin) acl;
+    ++ lib.optional (!stdenv.isDarwin) acl;
 
   configureFlags = [ "--localstatedir=/var" ];
 
   installFlags = [ "localstatedir=/tmp" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "BURP - BackUp and Restore Program";
     homepage    = "https://burp.grke.org";
     license     = licenses.agpl3;
diff --git a/pkgs/tools/backup/chunksync/default.nix b/pkgs/tools/backup/chunksync/default.nix
index 6885f3f8265..2bab8d5ea22 100644
--- a/pkgs/tools/backup/chunksync/default.nix
+++ b/pkgs/tools/backup/chunksync/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, openssl, perl }:
+{ lib, stdenv, fetchurl, openssl, perl }:
 
 stdenv.mkDerivation rec {
   version = "0.4";
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2;
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/backup/dar/default.nix b/pkgs/tools/backup/dar/default.nix
index a439bbf41b1..067c0136607 100644
--- a/pkgs/tools/backup/dar/default.nix
+++ b/pkgs/tools/backup/dar/default.nix
@@ -1,18 +1,28 @@
-{ stdenv, fetchurl, zlib, bzip2, openssl, attr, lzo, libgcrypt, e2fsprogs, gpgme, xz }:
+{ lib, stdenv, fetchurl
+, attr, e2fsprogs
+, curl, librsync, libthreadar
+, gpgme, libgcrypt, openssl
+, bzip2, lzo, xz, zlib
+}:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
-  version = "2.6.9";
+  version = "2.7.1";
   pname = "dar";
 
   src = fetchurl {
     url = "mirror://sourceforge/dar/${pname}-${version}.tar.gz";
-    sha256 = "1jzqq54w1dix2qdlj4hr9dpq9fnp23h102bk8d2gq6k7n2zgaj6v";
+    sha256 = "sha256-dtreitvrgX/8eL9ZLIIASHq1ZQI0z1OVOanLxdNGvu8=";
   };
 
-  buildInputs = [ zlib bzip2 openssl lzo libgcrypt gpgme xz ]
-    ++ optionals stdenv.isLinux [ attr e2fsprogs ];
+  outputs = [ "out" "dev" ];
+
+  buildInputs = [
+    curl librsync libthreadar
+    gpgme libgcrypt openssl
+    bzip2 lzo xz zlib
+  ] ++ optionals stdenv.isLinux [ attr e2fsprogs ];
 
   configureFlags = [
     "--disable-birthtime"
@@ -23,7 +33,8 @@ stdenv.mkDerivation rec {
   ];
 
   postInstall = ''
-    rm -r "$out"/share/dar # Disable html help
+    # Disable html help
+    rm -r "$out"/share/dar
   '';
 
   enableParallelBuilding = true;
@@ -33,6 +44,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "http://dar.linux.free.fr";
     description = "Disk ARchiver, allows backing up files into indexed archives";
+    maintainers = with maintainers; [ izorkin ];
     license = licenses.gpl2;
     platforms = platforms.unix;
   };
diff --git a/pkgs/tools/backup/dedup/default.nix b/pkgs/tools/backup/dedup/default.nix
index db9a05fcfde..db7d24b7d85 100644
--- a/pkgs/tools/backup/dedup/default.nix
+++ b/pkgs/tools/backup/dedup/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, lz4, snappy, libsodium
+{ lib, stdenv, fetchurl, lz4, snappy, libsodium
 # For testing
 , coreutils, gawk
 }:
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
   checkInputs = [ coreutils gawk ];
   checkTarget = "test";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Data deduplication program";
     homepage = "https://git.2f30.org/dedup/file/README.html";
     license = with licenses; [ bsd0 isc ];
diff --git a/pkgs/tools/backup/dirvish/default.nix b/pkgs/tools/backup/dirvish/default.nix
index 9b138d48f21..a26bdb0d9a3 100644
--- a/pkgs/tools/backup/dirvish/default.nix
+++ b/pkgs/tools/backup/dirvish/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, makeWrapper, perl, perlPackages }:
+{ fetchurl, lib, stdenv, makeWrapper, perl, perlPackages }:
 
 stdenv.mkDerivation rec {
   name = "dirvish-1.2.1";
@@ -52,10 +52,10 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
-    description = "Dirvish is a fast, disk based, rotating network backup system";
+  meta = with lib; {
+    description = "Fast, disk based, rotating network backup system";
     homepage = "http://dirvish.org/";
-    license = stdenv.lib.licenses.osl2;
+    license = lib.licenses.osl2;
     platforms = platforms.linux;
     maintainers = [ maintainers.winpat ];
   };
diff --git a/pkgs/tools/backup/discordchatexporter-cli/default.nix b/pkgs/tools/backup/discordchatexporter-cli/default.nix
new file mode 100644
index 00000000000..770a64b841c
--- /dev/null
+++ b/pkgs/tools/backup/discordchatexporter-cli/default.nix
@@ -0,0 +1,87 @@
+{ lib, stdenv, fetchFromGitHub, fetchurl, linkFarmFromDrvs, makeWrapper, autoPatchelfHook
+, dotnet-sdk_5, dotnetPackages, dotnetCorePackages, cacert
+}:
+
+let
+  projectFile = "DiscordChatExporter.Cli/DiscordChatExporter.Cli.csproj";
+in
+stdenv.mkDerivation rec {
+  pname = "discordchatexporter-cli";
+  version = "2.29";
+
+  src = fetchFromGitHub {
+    owner = "tyrrrz";
+    repo = "discordchatexporter";
+    rev = version;
+    sha256 = "0hbhDlGEK2rxuCByW8RaT/0vne8Z+q0ZobCkW1FBoG8=";
+  };
+
+  nativeBuildInputs = [ dotnet-sdk_5 dotnetPackages.Nuget cacert makeWrapper autoPatchelfHook ];
+  buildInputs = [ stdenv.cc.cc.lib ];
+
+  nugetDeps = linkFarmFromDrvs "${pname}-nuget-deps" (import ./deps.nix {
+    fetchNuGet = { name, version, sha256 }: fetchurl {
+      name = "nuget-${name}-${version}.nupkg";
+      url = "https://www.nuget.org/api/v2/package/${name}/${version}";
+      inherit sha256;
+    };
+  });
+
+  configurePhase = ''
+    runHook preConfigure
+
+    export HOME=$(mktemp -d)
+    export DOTNET_CLI_TELEMETRY_OPTOUT=1
+    export DOTNET_NOLOGO=1
+
+    nuget sources Add -Name nixos -Source "$PWD/nixos"
+    nuget init "$nugetDeps" "$PWD/nixos"
+
+    # FIXME: https://github.com/NuGet/Home/issues/4413
+    mkdir -p $HOME/.nuget/NuGet
+    cp $HOME/.config/NuGet/NuGet.Config $HOME/.nuget/NuGet
+
+    dotnet restore --source "$PWD/nixos" ${projectFile}
+
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    dotnet build ${projectFile} \
+      --no-restore \
+      --configuration Release \
+      -p:Version=${version}
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    dotnet publish ${projectFile} \
+      --no-build \
+      --configuration Release \
+      --no-self-contained \
+      --output $out/lib/${pname}
+    shopt -s extglob
+
+    makeWrapper $out/lib/${pname}/DiscordChatExporter.Cli $out/bin/discordchatexporter-cli \
+      --set DOTNET_ROOT "${dotnetCorePackages.sdk_3_1}"
+
+    runHook postInstall
+  '';
+
+  # Strip breaks the executable.
+  dontStrip = true;
+
+  meta = with lib; {
+    description = "A tool to export Discord chat logs to a file";
+    homepage = "https://github.com/Tyrrrz/DiscordChatExporter";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.ivar ];
+    platforms = [ "x86_64-linux" ];
+  };
+  passthru.updateScript = ./updater.sh;
+}
diff --git a/pkgs/tools/backup/discordchatexporter-cli/deps.nix b/pkgs/tools/backup/discordchatexporter-cli/deps.nix
new file mode 100644
index 00000000000..9849e6c6366
--- /dev/null
+++ b/pkgs/tools/backup/discordchatexporter-cli/deps.nix
@@ -0,0 +1,72 @@
+{ fetchNuGet }: [
+  (fetchNuGet {
+    name = "CliFx";
+    version = "2.0.6";
+    sha256 = "09yyjgpp52b0r3mqlvx75ld4vjp8hry7ql7r20nnvj0lach6fyh6";
+  })
+  (fetchNuGet {
+    name = "Gress";
+    version = "1.2.0";
+    sha256 = "0aidc9whi0718gh896j7xkyndki9x7rifd8n1n681afb2zbxw4bn";
+  })
+  (fetchNuGet {
+    name = "JsonExtensions";
+    version = "1.1.0";
+    sha256 = "1fqxb2jdbvjgg135wmy890qf63r056dq16jy7wgzkgp21m3j0lgy";
+  })
+  (fetchNuGet {
+    name = "Microsoft.AspNetCore.App.Ref";
+    version = "3.1.10";
+    sha256 = "0xn4zh7shvijqlr03fqsmps6gz856isd9bg9rk4z2c4599ggal77";
+  })
+  (fetchNuGet {
+    name = "Microsoft.NETCore.App.Host.linux-x64";
+    version = "3.1.14";
+    sha256 = "11rqnascx9asfyxgxzwgxgr9gxxndm552k4dn4p1s57ciz7vkg9h";
+  })
+  (fetchNuGet {
+    name = "Microsoft.NETCore.App.Ref";
+    version = "3.1.0";
+    sha256 = "08svsiilx9spvjamcnjswv0dlpdrgryhr3asdz7cvnl914gjzq4y";
+  })
+  (fetchNuGet {
+    name = "MiniRazor.CodeGen";
+    version = "2.1.2";
+    sha256 = "0mg4zy4zq0ccrc9wchy796ln1znkmn3k1aax0kd2gha4fwa1d1fb";
+  })
+  (fetchNuGet {
+    name = "MiniRazor.Runtime";
+    version = "2.1.2";
+    sha256 = "1a6cm7j1f5n1bfzhg8w60xwa7cps2i82418k57dm2hgqla6p3rsp";
+  })
+  (fetchNuGet {
+    name = "Polly";
+    version = "7.2.2";
+    sha256 = "0s15n5zwj44i6sw3v40ca8l6j0ijydxcakvad49j52rp49iwrmkn";
+  })
+  (fetchNuGet {
+    name = "Spectre.Console";
+    version = "0.41.0";
+    sha256 = "104vyzwbbq5m75dm31xk7ilvmik8hw1cj3bc301a8w6gq8i0fpk3";
+  })
+  (fetchNuGet {
+    name = "Superpower";
+    version = "2.3.0";
+    sha256 = "0bdsc3c0d6jb0wr67siqfba0ldl0jxbwis6xr0whzqzf6m2cyahm";
+  })
+  (fetchNuGet {
+    name = "System.Memory";
+    version = "4.5.0";
+    sha256 = "1layqpcx1q4l805fdnj2dfqp6ncx2z42ca06rgsr6ikq4jjgbv30";
+  })
+  (fetchNuGet {
+    name = "Tyrrrz.Extensions";
+    version = "1.6.5";
+    sha256 = "1yzsii1pbp6b066wxwwws310p7h809apl81bhb8ad55hqlzy1rg3";
+  })
+  (fetchNuGet {
+    name = "Wcwidth";
+    version = "0.2.0";
+    sha256 = "0p7zaisix9ql4v5nyl9gfc93xcyj74j01rwvgm7jw29js3wlj10s";
+  })
+]
diff --git a/pkgs/tools/backup/discordchatexporter-cli/updater.sh b/pkgs/tools/backup/discordchatexporter-cli/updater.sh
new file mode 100755
index 00000000000..ff5c44a19bc
--- /dev/null
+++ b/pkgs/tools/backup/discordchatexporter-cli/updater.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl jq common-updater-scripts dotnet-sdk_5
+set -eo pipefail
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+deps_file="$(realpath "./deps.nix")"
+
+new_version="$(curl -s "https://api.github.com/repos/tyrrrz/DiscordChatExporter/releases?per_page=1" | jq -r '.[0].name')"
+old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
+if [[ "$new_version" == "$old_version" ]]; then
+  echo "Up to date"
+  exit 0
+fi
+
+cd ../../../..
+update-source-version discordchatexporter-cli "$new_version"
+store_src="$(nix-build . -A discordchatexporter-cli.src --no-out-link)"
+src="$(mktemp -d /tmp/discordexporter-src.XXX)"
+cp -rT "$store_src" "$src"
+chmod -R +w "$src"
+
+pushd "$src"
+
+mkdir ./nuget_tmp.packages
+dotnet restore DiscordChatExporter.Cli/DiscordChatExporter.Cli.csproj --packages ./nuget_tmp.packages
+
+echo "{ fetchNuGet }: [" >"$deps_file"
+while read pkg_spec; do
+  { read pkg_name; read pkg_version; } < <(
+    # Build version part should be ignored: `3.0.0-beta2.20059.3+77df2220` -> `3.0.0-beta2.20059.3`
+    sed -nE 's/.*<id>([^<]*).*/\1/p; s/.*<version>([^<+]*).*/\1/p' "$pkg_spec")
+  pkg_sha256="$(nix-hash --type sha256 --flat --base32 "$(dirname "$pkg_spec")"/*.nupkg)"
+  cat >>"$deps_file" <<EOF
+  (fetchNuGet {
+    name = "$pkg_name";
+    version = "$pkg_version";
+    sha256 = "$pkg_sha256";
+  })
+EOF
+done < <(find ./nuget_tmp.packages -name '*.nuspec' | sort)
+echo "]" >>"$deps_file"
+
+popd
+rm -r "$src"
diff --git a/pkgs/tools/backup/diskrsync/default.nix b/pkgs/tools/backup/diskrsync/default.nix
index 1057eb71dd6..97870d5dedd 100644
--- a/pkgs/tools/backup/diskrsync/default.nix
+++ b/pkgs/tools/backup/diskrsync/default.nix
@@ -1,4 +1,4 @@
-{ buildGoPackage, fetchFromGitHub, stdenv, openssh, makeWrapper }:
+{ buildGoPackage, fetchFromGitHub, lib, openssh, makeWrapper }:
 
 buildGoPackage rec {
   pname = "diskrsync";
@@ -14,13 +14,13 @@ buildGoPackage rec {
   goPackagePath = "github.com/dop251/diskrsync";
   goDeps = ./deps.nix;
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
   preFixup = ''
     wrapProgram "$out/bin/diskrsync" --argv0 diskrsync --prefix PATH : ${openssh}/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Rsync for block devices and disk images";
     homepage = "https://github.com/dop251/diskrsync";
     license = licenses.mit;
diff --git a/pkgs/tools/backup/dump/default.nix b/pkgs/tools/backup/dump/default.nix
new file mode 100644
index 00000000000..75a449a1276
--- /dev/null
+++ b/pkgs/tools/backup/dump/default.nix
@@ -0,0 +1,24 @@
+# Tested with simple dump and restore -i, but complains that
+# /nix/store/.../etc/dumpdates doesn't exist.
+
+{ lib, stdenv, fetchurl, pkg-config,
+  e2fsprogs, ncurses, readline }:
+
+stdenv.mkDerivation rec {
+  pname = "dump";
+  version = "0.4b47";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/dump/dump-${version}.tar.gz";
+    sha256 = "sha256-0CGs3k+77T2T662YFCL2cfSNZrKeyI196DZC7Pv/T9A=";
+  };
+
+  buildInputs = [ e2fsprogs pkg-config ncurses readline ];
+
+  meta = with lib; {
+    homepage = "https://dump.sourceforge.io/";
+    description = "Linux Ext2 filesystem dump/restore utilities";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ falsifian ];
+  };
+}
diff --git a/pkgs/tools/backup/duplicacy/default.nix b/pkgs/tools/backup/duplicacy/default.nix
index b261289f0bf..9fecfb70f39 100644
--- a/pkgs/tools/backup/duplicacy/default.nix
+++ b/pkgs/tools/backup/duplicacy/default.nix
@@ -2,7 +2,7 @@
 
 buildGoPackage rec {
   pname = "duplicacy";
-  version = "2.3.0";
+  version = "2.7.2";
 
   goPackagePath = "github.com/gilbertchen/duplicacy";
 
@@ -10,7 +10,7 @@ buildGoPackage rec {
     owner = "gilbertchen";
     repo = "duplicacy";
     rev = "v${version}";
-    sha256 = "12swp3kbwkmwn3g2mp964m60kabmz0ip7kkhvhiqq7k74nxzj312";
+    sha256 = "0j37sqicj7rl982czqsl3ipxw7k8k4smcr63s0yklxwz7ch3353c";
   };
   goDeps = ./deps.nix;
   buildPhase = ''
diff --git a/pkgs/tools/backup/duplicacy/deps.nix b/pkgs/tools/backup/duplicacy/deps.nix
index 12d30b53b6c..83d69d398cb 100644
--- a/pkgs/tools/backup/duplicacy/deps.nix
+++ b/pkgs/tools/backup/duplicacy/deps.nix
@@ -4,27 +4,18 @@
     goPackagePath  = "cloud.google.com/go";
     fetch = {
       type = "git";
-      url = "https://code.googlesource.com/gocloud";
+      url = "https://github.com/googleapis/google-cloud-go";
       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";
+      rev =  "9bc4033dd347c7f416fca46b2f42a043dc1fbdf6";
+      sha256 = "158xbd8wn1bna1k1ichlirz6a1zvlh3rg7klr9cnp72l2q8jwvcl";
     };
   }
   {
@@ -41,8 +32,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/aws/aws-sdk-go";
-      rev =  "a32b1dcd091264b5dee7b386149b6cc3823395c9";
-      sha256 = "1yicb7l6m4hs3mi724hz74wn8305qvx6g73mjqafaaqvh6dyn86m";
+      rev =  "851d5ffb66720c2540cc68020d4d8708950686c8";
+      sha256 = "16qp8ywcf04d2y1ibf3mpglcrxk07x8gak46a2l53lchps2mgcrp";
     };
   }
   {
@@ -59,8 +50,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/dgrijalva/jwt-go";
-      rev =  "dbeaa9332f19a944acb5736b4456cfcc02140e29";
-      sha256 = "0zk6l6kzsjdijfn7c4h0aywdjx5j2hjwi67vy1k6wr46hc8ks2hs";
+      rev =  "06ea1031745cb8b3dab3f6a236daf2b0aa468b7e";
+      sha256 = "08m27vlms74pfy5z79w67f9lk9zkx6a9jd68k3c4msxy75ry36mp";
     };
   }
   {
@@ -68,8 +59,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/gilbertchen/azure-sdk-for-go";
-      rev =  "bbf89bd4d716c184f158d1e1428c2dbef4a18307";
-      sha256 = "14563izc2y05k8s20fmhanvjydbcq8k5adp4cgw91d9bs52qivx7";
+      rev =  "8fd4663cab7c7c1c46d00449291c92ad23b0d0d9";
+      sha256 = "123fj5jni1pjj8i9adzd4r07n9hnlmfprlcjf5hqb1zjb72xi1p7";
     };
   }
   {
@@ -86,8 +77,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/gilbertchen/go-dropbox";
-      rev =  "90711b603312b1f973f3a5da3793ac4f1e5c2f2a";
-      sha256 = "0y2ydl3mjbkfbqyygrwq7vqig9hjh7cxvzsn2gxc1851haqp4h19";
+      rev =  "2233fa1dd846b3a3e8060b6c1ea12883deb9d288";
+      sha256 = "01fqxad5mm7rs0mp1ipp9aw80ski6sqyqljpf9dgify8dbiffl97";
     };
   }
   {
@@ -145,12 +136,12 @@
     };
   }
   {
-    goPackagePath  = "github.com/go-ini/ini";
+    goPackagePath  = "github.com/golang/groupcache";
     fetch = {
       type = "git";
-      url = "https://github.com/go-ini/ini";
-      rev =  "32e4c1e6bc4e7d0d8451aa6b75200d19e37a536a";
-      sha256 = "0mhgxw5q6b0pryhikx3k4wby7g32rwjjljzihi47lwn34kw5y1qn";
+      url = "https://github.com/golang/groupcache";
+      rev =  "8c9f03a8e57eb486e42badaed3fb287da51807ba";
+      sha256 = "0vjjr79r32icjzlb05wn02k59av7jx0rn1jijml8r4whlg7dnkfh";
     };
   }
   {
@@ -158,8 +149,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/golang/protobuf";
-      rev =  "1e59b77b52bf8e4b449a57e6f79f21226d571845";
-      sha256 = "19bkh81wnp6njg3931wky6hsnnl2d1ig20vfjxpv450sd3k6yys8";
+      rev =  "84668698ea25b64748563aa20726db66a6b8d299";
+      sha256 = "1gkd1942vk9n8kfzdwy1iil6wgvlwjq7a3y5jc49ck4lz9rhmgkq";
     };
   }
   {
@@ -167,8 +158,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/googleapis/gax-go";
-      rev =  "317e0006254c44a0ac427cc52a0e083ff0b9622f";
-      sha256 = "0h92x579vbrv2fka8q2ddy1kq6a63qbqa8zc09ygl6skzn9gw1dh";
+      rev =  "c8a15bac9b9fe955bd9f900272f9a306465d28cf";
+      sha256 = "13x3x7agq0b46wpchbd2sqli5l33z6hvfn1qjbiqvsgpbv7wd140";
     };
   }
   {
@@ -176,8 +167,26 @@
     fetch = {
       type = "git";
       url = "https://github.com/jmespath/go-jmespath";
-      rev =  "0b12d6b5";
-      sha256 = "1vv6hph8j6xgv7gwl9vvhlsaaqsm22sxxqmgmldi4v11783pc1ld";
+      rev =  "c2b33e84";
+      sha256 = "1r6w7ydx8ydryxk3sfhzsk8m6f1nsik9jg3i1zhi69v4kfl4d5cz";
+    };
+  }
+  {
+    goPackagePath  = "github.com/klauspost/cpuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/klauspost/cpuid";
+      rev =  "750c0591dbbd50ef88371c665ad49e426a4b830b";
+      sha256 = "1yiby4xa12j3kcw5q7dfsbcybhaxjkppvgz6ac2p2lcwha303b1g";
+    };
+  }
+  {
+    goPackagePath  = "github.com/klauspost/reedsolomon";
+    fetch = {
+      type = "git";
+      url = "https://github.com/klauspost/reedsolomon";
+      rev =  "7daa20bf74337a939c54f892a2eca9d9b578eb7f";
+      sha256 = "1xk4wqgrl63l95lqnszzbpa06apzxfmpwfnkrn1n8jb0ws7mi01m";
     };
   }
   {
@@ -185,8 +194,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/kr/fs";
-      rev =  "2788f0dbd16903de03cb8186e5c7d97b69ad387b";
-      sha256 = "1c0fipl4rsh0v5liq1ska1dl83v3llab4k6lm8mvrx9c4dyp71ly";
+      rev =  "1455def202f6e05b95cc7bfc7e8ae67ae5141eba";
+      sha256 = "11zg176x9hr9q7fsk95r6q0wf214gg4czy02slax4x56n79g6a7q";
     };
   }
   {
@@ -208,12 +217,30 @@
     };
   }
   {
+    goPackagePath  = "github.com/minio/highwayhash";
+    fetch = {
+      type = "git";
+      url = "https://github.com/minio/highwayhash";
+      rev =  "86a2a969d04373bf05ca722517d30fb1c9a3e4f9";
+      sha256 = "0kj2hs82sphag0h25xvprvf2fz3zlinmlif89sk9jp8h518aiahf";
+    };
+  }
+  {
+    goPackagePath  = "github.com/mmcloughlin/avo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mmcloughlin/avo";
+      rev =  "443f81d771042b019379ae4bfcd0a591cb47c88a";
+      sha256 = "1zc95crbyi7ylqq3jwv4ya55lyzn9x730szdm307vdss4gqlx8yn";
+    };
+  }
+  {
     goPackagePath  = "github.com/ncw/swift";
     fetch = {
       type = "git";
       url = "https://github.com/ncw/swift";
-      rev =  "ae9f0ea1605b9aa6434ed5c731ca35d83ba67c55";
-      sha256 = "0a0iwynhgxsl3czabl7ajnxpyw6x0dzbiqz6il8aw7kn10ld1rvl";
+      rev =  "3e1a09f21340e4828e7265aa89f4dc1495fa7ccc";
+      sha256 = "19gb8xh400hzlbdp3nx1f85jxzs36zk0py39vmjcg3fnvdjzblm2";
     };
   }
   {
@@ -221,8 +248,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/pkg/errors";
-      rev =  "645ef00459ed84a119197bfb8d8205042c6df63d";
-      sha256 = "001i6n71ghp2l6kdl3qq1v2vmghcz3kicv9a5wgcihrzigm75pp5";
+      rev =  "614d223910a179a466c1767a985424175c39b465";
+      sha256 = "1761pybhc2kqr6v5fm8faj08x9bql8427yqg6vnfv6nhrasx1mwq";
     };
   }
   {
@@ -230,8 +257,17 @@
     fetch = {
       type = "git";
       url = "https://github.com/pkg/sftp";
-      rev =  "3edd153f213d8d4191a0ee4577c61cca19436632";
-      sha256 = "0iw6lijdljwh5xw5hsy0b578cr52h6vvm7hbnzlrvciwhh4sfhhp";
+      rev =  "5616182052227b951e76d9c9b79a616c608bd91b";
+      sha256 = "1rjlhlkr505a0wvync1ycfn9njfc6bib6bw44qnnm50hlfs59hz2";
+    };
+  }
+  {
+    goPackagePath  = "github.com/pkg/xattr";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/xattr";
+      rev =  "dd870b5cfebab49617ea0c1da6176474e8a52bf4";
+      sha256 = "11ynkc61qrmf853g04sav8vawz8i6a8b73w71f3cq4djb4cnsw0d";
     };
   }
   {
@@ -253,12 +289,30 @@
     };
   }
   {
+    goPackagePath  = "go.opencensus.io";
+    fetch = {
+      type = "git";
+      url = "https://github.com/census-instrumentation/opencensus-go";
+      rev =  "d835ff86be02193d324330acdb7d65546b05f814";
+      sha256 = "0xj16iq5jp26hi2py7lsd8cvqh651fgn39y05gzvjdi88d9xd3nw";
+    };
+  }
+  {
     goPackagePath  = "golang.org/x/crypto";
     fetch = {
       type = "git";
       url = "https://go.googlesource.com/crypto";
-      rev =  "9f005a07e0d31d45e6656d241bb5c0f2efd4bc94";
-      sha256 = "1mhmr6ljzl3iafsz4qy8vval7rmr828wh59dlqqqjqx6sqmcs1dv";
+      rev =  "056763e48d71961566155f089ac0f02f1dda9b5a";
+      sha256 = "0dcmns62hwid7hk4bmpl22z6ygjh168p23x3arzy320sd1lvap92";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/mod";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/mod";
+      rev =  "859b3ef565e237f9f1a0fb6b55385c497545680d";
+      sha256 = "0ldgbx2zpprbsfn6p8pfgs4nn87gwbfcv2z0fa7n8alwsq2yw78q";
     };
   }
   {
@@ -266,8 +320,8 @@
     fetch = {
       type = "git";
       url = "https://go.googlesource.com/net";
-      rev =  "9dfe39835686865bff950a07b394c12a98ddc811";
-      sha256 = "0z8mnl4mi88syafrgqys2ak2gg3yrbna25hpz88y3anl8x4jhg1a";
+      rev =  "d3edc9973b7eb1fb302b0ff2c62357091cea9a30";
+      sha256 = "12zbjwcsh9b0lwycqlkrnbyg5a6a9dzgj8hhgq399bdda5bd97y7";
     };
   }
   {
@@ -275,8 +329,8 @@
     fetch = {
       type = "git";
       url = "https://go.googlesource.com/oauth2";
-      rev =  "f95fa95eaa936d9d87489b15d1d18b97c1ba9c28";
-      sha256 = "0p9kis69wvhv8a2qbcjxvn9ggpdh81cbfjpq5pjga7n8k6d065fh";
+      rev =  "bf48bf16ab8d622ce64ec6ce98d2c98f916b6303";
+      sha256 = "1sirdib60zwmh93kf9qrx51r8544k1p9rs5mk0797wibz3m4mrdg";
     };
   }
   {
@@ -284,8 +338,8 @@
     fetch = {
       type = "git";
       url = "https://go.googlesource.com/sys";
-      rev =  "82aafbf43bf885069dc71b7e7c2f9d7a614d47da";
-      sha256 = "1jvngpvy0q40f7krkgmwf5bbjzhv449297awcr0y78kzn0cyawi2";
+      rev =  "59c9f1ba88faf592b225274f69c5ef1e4ebacf82";
+      sha256 = "014iiqjh9sikbcvacqiwhg6mvrsrr1va91wmc9yrnsm11c63yxfa";
     };
   }
   {
@@ -293,17 +347,35 @@
     fetch = {
       type = "git";
       url = "https://go.googlesource.com/text";
-      rev =  "88f656faf3f37f690df1a32515b479415e1a6769";
-      sha256 = "0zakmgg6dlwnkhignwjajn0dckzqq18zxvnmmg0fq6455x7fs673";
+      rev =  "342b2e1fbaa52c93f31447ad2c6abc048c63e475";
+      sha256 = "0flv9idw0jm5nm8lx25xqanbkqgfiym6619w575p7nrdh0riqwqh";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev =  "5d1fdd8fa3469142b9369713b23d8413d6d83189";
+      sha256 = "0xp5ggnjnl1gqwi2ks042zimgkfv2qda9a57ar198xpyzdn1bv5s";
+    };
+  }
+  {
+    goPackagePath  = "golang.org/x/xerrors";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/xerrors";
+      rev =  "5ec99f83aff198f5fbd629d6c8d8eb38a04218ca";
+      sha256 = "1dbzc3gmf2haazpv7cgmv97rq40g2xzwbglc17vas8dwhgwgwrzb";
     };
   }
   {
     goPackagePath  = "google.golang.org/api";
     fetch = {
       type = "git";
-      url = "https://code.googlesource.com/google-api-go-client";
-      rev =  "17b5f22a248d6d3913171c1a557552ace0d9c806";
-      sha256 = "0gs78qsxfg89kpiiray1x9jiv6bh328jmjkwd3ghnygf3l98kc8c";
+      url = "https://github.com/googleapis/google-api-go-client";
+      rev =  "52f0532eadbcc6f6b82d6f5edf66e610d10bfde6";
+      sha256 = "0l7q0mmq0v51wc72bk50nwaz9frl1pqp7gn5jhy1vzxdry930gkc";
     };
   }
   {
@@ -311,17 +383,17 @@
     fetch = {
       type = "git";
       url = "https://github.com/golang/appengine";
-      rev =  "150dc57a1b433e64154302bdc40b6bb8aefa313a";
-      sha256 = "0w3knznv39k8bm85ri62f83czcrxknql7dv6p9hk1a5jx3xljgxq";
+      rev =  "971852bfffca25b069c31162ae8f247a3dba083b";
+      sha256 = "05hbq4cs7bqw0zl17bx8rzdkszid3nyl92100scg3jjrg70dhm7w";
     };
   }
   {
     goPackagePath  = "google.golang.org/genproto";
     fetch = {
       type = "git";
-      url = "https://github.com/google/go-genproto";
-      rev =  "891aceb7c239e72692819142dfca057bdcbfcb96";
-      sha256 = "1axim84fqzsp6iialk6zl4fsbfpx658vssc6ccakn4yy1xc9h854";
+      url = "https://github.com/googleapis/go-genproto";
+      rev =  "baae70f3302d3efdff74db41e48a5d476d036906";
+      sha256 = "1xacik4i5w2bpkrxzrfm00ggy5vygbzh8jmm2yq4mxiv0lnsh9nk";
     };
   }
   {
@@ -329,8 +401,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/grpc/grpc-go";
-      rev =  "5a9f7b402fe85096d2e1d0383435ee1876e863d0";
-      sha256 = "1hlirgvmzb929jpb1dvh930646ih5ffg3b6pmlilqr7ffdkl5z3j";
+      rev =  "ac54eec90516cee50fc6b9b113b34628a85f976f";
+      sha256 = "17zfx4xgqjamk7rc1sivm5gppkh3j4qp3i294w9rqbv0rqi0c9pq";
     };
   }
-]
\ No newline at end of file
+]
diff --git a/pkgs/tools/backup/duplicati/default.nix b/pkgs/tools/backup/duplicati/default.nix
index 63f35538796..48ce604cd71 100644
--- a/pkgs/tools/backup/duplicati/default.nix
+++ b/pkgs/tools/backup/duplicati/default.nix
@@ -1,33 +1,33 @@
-{ stdenv, fetchzip, mono, sqlite, makeWrapper }:
+{ lib, stdenv, fetchzip, mono, sqlite, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "duplicati";
-  version = "2.0.5.1";
+  version = "2.0.6.1";
   channel = "beta";
-  build_date = "2020-01-18";
+  build_date = "2021-05-03";
 
   src = fetchzip {
     url = "https://github.com/duplicati/duplicati/releases/download/v${version}-${version}_${channel}_${build_date}/duplicati-${version}_${channel}_${build_date}.zip";
-    sha256 = "1k3gfwcw7snxkqn4lf9rx1vzradpyq5vc48pwvaa8wwqnlykiimw";
+    sha256 = "09537hswpicsx47vfdm78j3h7vvjd7nqjd2461jrln57nl7v7dac";
     stripRoot = false;
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ 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 [
+      --prefix LD_LIBRARY_PATH : ${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 [
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [
           sqlite ]}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/backup/duplicity/default.nix b/pkgs/tools/backup/duplicity/default.nix
index 6d6da3c9874..bd8af80193f 100644
--- a/pkgs/tools/backup/duplicity/default.nix
+++ b/pkgs/tools/backup/duplicity/default.nix
@@ -1,29 +1,31 @@
-{ stdenv
+{ lib, stdenv
+, fetchFromGitLab
 , fetchpatch
-, fetchurl
-, pythonPackages
+, python3
 , librsync
 , ncftp
 , gnupg
 , gnutar
 , par2cmdline
-, utillinux
+, util-linux
 , rsync
-, backblaze-b2
 , makeWrapper
 , gettext
 }:
 let
-  inherit (stdenv.lib.versions) majorMinor splitVersion;
-  majorMinorPatch = v: builtins.concatStringsSep "." (stdenv.lib.take 3 (splitVersion v));
+  pythonPackages = python3.pkgs;
+  inherit (lib.versions) majorMinor splitVersion;
+  majorMinorPatch = v: builtins.concatStringsSep "." (lib.take 3 (splitVersion v));
 in
 pythonPackages.buildPythonApplication rec {
   pname = "duplicity";
-  version = "0.8.13";
+  version = "0.8.20";
 
-  src = fetchurl {
-    url = "https://code.launchpad.net/duplicity/${majorMinor version}-series/${majorMinorPatch version}/+download/duplicity-${version}.tar.gz";
-    sha256 = "0lflg1ay4q4w9qzpmh6y2hza4fc3ig12q44qkd80ks17hj21bxa6";
+  src = fetchFromGitLab {
+    owner = "duplicity";
+    repo = "duplicity";
+    rev = "rel.${version}";
+    sha256 = "13ghra0myq6h6yx8qli55bh8dg91nf1hpd8l7d7xamgrw6b188sm";
   };
 
   patches = [
@@ -33,23 +35,42 @@ pythonPackages.buildPythonApplication rec {
     # Our Python infrastructure runs test in installCheckPhase so we need
     # to make the testing code stop assuming it is run from the source directory.
     ./use-installed-scripts-in-test.patch
-  ] ++ stdenv.lib.optionals stdenv.isLinux [
+
+    # https://gitlab.com/duplicity/duplicity/-/merge_requests/64
+    # remove on next release
+    (fetchpatch {
+      url = "https://gitlab.com/duplicity/duplicity/-/commit/5c229a9b42f67257c747fbc0022c698fec405bbc.patch";
+      sha256 = "05v931rnawfv11cyxj8gykmal8rj5vq2ksdysyr2mb4sl81mi7v0";
+    })
+  ] ++ lib.optionals stdenv.isLinux [
+    # Broken on Linux in Nix' build environment
     ./linux-disable-timezone-test.patch
   ];
 
+  SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  preConfigure = ''
+    # fix version displayed by duplicity --version
+    # see SourceCopy in setup.py
+    ls
+    for i in bin/*.1 duplicity/__init__.py; do
+      substituteInPlace "$i" --replace '$version' "${version}"
+    done
+  '';
+
   nativeBuildInputs = [
     makeWrapper
     gettext
     pythonPackages.wrapPython
+    pythonPackages.setuptools-scm
   ];
   buildInputs = [
     librsync
   ];
 
-  propagatedBuildInputs = [
-    backblaze-b2
-  ] ++ (with pythonPackages; [
-    boto
+  pythonPath = with pythonPackages; [
+    b2sdk
+    boto3
     cffi
     cryptography
     ecdsa
@@ -63,28 +84,28 @@ pythonPackages.buildPythonApplication rec {
     pycrypto
     pydrive
     future
-  ] ++ stdenv.lib.optionals (!isPy3k) [
+  ] ++ lib.optionals (!isPy3k) [
     enum
-  ]);
+  ];
 
   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.
+  ] ++ lib.optionals stdenv.isLinux [
+    util-linux # Add 'setsid' to PATH.
   ] ++ (with pythonPackages; [
     lockfile
     mock
     pexpect
     pytest
-    pytestrunner
+    pytest-runner
   ]);
 
   postInstall = ''
     wrapProgram $out/bin/duplicity \
-      --prefix PATH : "${stdenv.lib.makeBinPath [ gnupg ncftp rsync ]}"
+      --prefix PATH : "${lib.makeBinPath [ gnupg ncftp rsync ]}"
   '';
 
   preCheck = ''
@@ -100,7 +121,10 @@ pythonPackages.buildPythonApplication rec {
 
     # Don't run developer-only checks (pep8, etc.).
     export RUN_CODE_TESTS=0
-  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+
+    # check version string
+    duplicity --version | grep ${version}
+  '' + 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.
@@ -112,7 +136,7 @@ pythonPackages.buildPythonApplication rec {
   # > OSError: out of pty devices
   doCheck = !stdenv.isDarwin;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Encrypted bandwidth-efficient backup using the rsync algorithm";
     homepage = "https://www.nongnu.org/duplicity";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/backup/duplicity/gnutar-in-test.patch b/pkgs/tools/backup/duplicity/gnutar-in-test.patch
index 694fc881950..ee95b68e2ab 100644
--- a/pkgs/tools/backup/duplicity/gnutar-in-test.patch
+++ b/pkgs/tools/backup/duplicity/gnutar-in-test.patch
@@ -1,9 +1,11 @@
+diff --git a/testing/functional/test_restart.py b/testing/functional/test_restart.py
+index 6d972c82..e8435fd5 100644
 --- a/testing/functional/test_restart.py
 +++ b/testing/functional/test_restart.py
-@@ -323,14 +323,7 @@ class RestartTestWithoutEncryption(RestartTest):
+@@ -350,14 +350,7 @@ class RestartTestWithoutEncryption(RestartTest):
          https://launchpad.net/bugs/929067
          """
-
+ 
 -        if platform.system().startswith(u'Linux'):
 -            tarcmd = u"tar"
 -        elif platform.system().startswith(u'Darwin'):
@@ -13,6 +15,6 @@
 -        else:
 -            raise Exception(u"Platform %s not supported by tar/gtar." % platform.platform())
 +        tarcmd = u"tar"
-
+ 
          # Intial normal backup
-         self.backup("full", "testfiles/blocktartest")
+         self.backup(u"full", u"{0}/testfiles/blocktartest".format(_runtest_dir))
diff --git a/pkgs/tools/backup/duplicity/linux-disable-timezone-test.patch b/pkgs/tools/backup/duplicity/linux-disable-timezone-test.patch
index b5e6df18a15..e322625cdbf 100644
--- a/pkgs/tools/backup/duplicity/linux-disable-timezone-test.patch
+++ b/pkgs/tools/backup/duplicity/linux-disable-timezone-test.patch
@@ -1,10 +1,16 @@
+commit f0142706c377b7c133753db57b5c4c90baa2de30
+Author: Guillaume Girol <symphorien+git@xlumurb.eu>
+Date:   Sun Jul 11 17:48:15 2021 +0200
+
+diff --git a/testing/unit/test_statistics.py b/testing/unit/test_statistics.py
+index 4be5000c..80545853 100644
 --- a/testing/unit/test_statistics.py
 +++ b/testing/unit/test_statistics.py
-@@ -59,6 +59,7 @@ class StatsObjTest(UnitTestCase):
+@@ -63,6 +63,7 @@ class StatsObjTest(UnitTestCase):
          s1 = StatsDeltaProcess()
-         assert s1.get_stat('SourceFiles') == 0
-
+         assert s1.get_stat(u'SourceFiles') == 0
+ 
 +    @unittest.skip("Broken on Linux in Nix' build environment")
      def test_get_stats_string(self):
-         """Test conversion of stat object into string"""
+         u"""Test conversion of stat object into string"""
          s = StatsObj()
diff --git a/pkgs/tools/backup/duplicity/use-installed-scripts-in-test.patch b/pkgs/tools/backup/duplicity/use-installed-scripts-in-test.patch
index a3ba1422915..a5ddc4381bd 100644
--- a/pkgs/tools/backup/duplicity/use-installed-scripts-in-test.patch
+++ b/pkgs/tools/backup/duplicity/use-installed-scripts-in-test.patch
@@ -1,49 +1,63 @@
+commit ccd4dd92cd37acce1da20966ad9e4e0c7bcf1709
+Author: Guillaume Girol <symphorien+git@xlumurb.eu>
+Date:   Sun Jul 11 12:00:00 2021 +0000
+
+    use installed duplicity when running tests
+
+diff --git a/setup.py b/setup.py
+index fa474f20..604a242a 100755
 --- a/setup.py
 +++ b/setup.py
-@@ -92,10 +92,6 @@ class TestCommand(test):
+@@ -205,10 +205,6 @@ class TestCommand(test):
                  except Exception:
                      pass
-
+ 
 -        os.environ[u'PATH'] = u"%s:%s" % (
 -            os.path.abspath(build_scripts_cmd.build_dir),
 -            os.environ.get(u'PATH'))
 -
          test.run(self)
-
-     def run_tests(self):
+ 
+ 
+diff --git a/testing/functional/__init__.py b/testing/functional/__init__.py
+index 4221576d..3cf44945 100644
 --- a/testing/functional/__init__.py
 +++ b/testing/functional/__init__.py
-@@ -107,7 +107,7 @@ class FunctionalTestCase(DuplicityTestCase):
-         if basepython is not None:
-             cmd_list.extend([basepython])
+@@ -111,7 +111,7 @@ class FunctionalTestCase(DuplicityTestCase):
+         run_coverage = os.environ.get(u'RUN_COVERAGE', None)
+         if run_coverage is not None:
              cmd_list.extend([u"-m", u"coverage", u"run", u"--source=duplicity", u"-p"])
--        cmd_list.extend([u"../bin/duplicity"])
+-        cmd_list.extend([u"{0}/bin/duplicity".format(_top_dir)])
 +        cmd_list.extend([u"duplicity"])
          cmd_list.extend(options)
          cmd_list.extend([u"-v0"])
          cmd_list.extend([u"--no-print-statistics"])
+diff --git a/testing/functional/test_log.py b/testing/functional/test_log.py
+index 9dfc86a6..b9cb55db 100644
 --- a/testing/functional/test_log.py
 +++ b/testing/functional/test_log.py
-@@ -47,9 +47,9 @@ class LogTest(FunctionalTestCase):
+@@ -49,9 +49,9 @@ class LogTest(FunctionalTestCase):
          # Run actual duplicity command (will fail, because no arguments passed)
          basepython = os.environ.get(u'TOXPYTHON', None)
          if basepython is not None:
--            os.system(u"{} ../bin/duplicity --log-file={} >/dev/null 2>&1".format(basepython, self.logfile))
-+            os.system(u"{} duplicity --log-file={} >/dev/null 2>&1".format(basepython, self.logfile))
+-            os.system(u"{0} {1}/bin/duplicity --log-file={2} >/dev/null 2>&1".format(basepython, _top_dir, self.logfile))
++            os.system(u"{0} duplicity --log-file={1} >/dev/null 2>&1".format(basepython, self.logfile))
          else:
--            os.system(u"../bin/duplicity --log-file={} >/dev/null 2>&1".format(self.logfile))
-+            os.system(u"duplicity --log-file={} >/dev/null 2>&1".format(self.logfile))
+-            os.system(u"{0}/bin/duplicity --log-file={1} >/dev/null 2>&1".format(_top_dir, self.logfile))
++            os.system(u"duplicity --log-file={0} >/dev/null 2>&1".format(self.logfile))
  
          # The format of the file should be:
          # """ERROR 2
+diff --git a/testing/functional/test_rdiffdir.py b/testing/functional/test_rdiffdir.py
+index 0cbfdb33..47acd029 100644
 --- a/testing/functional/test_rdiffdir.py
 +++ b/testing/functional/test_rdiffdir.py
-@@ -38,7 +38,7 @@ class RdiffdirTest(FunctionalTestCase):
- 
-     def run_rdiffdir(self, argstring):
-         u"""Run rdiffdir with given arguments"""
--        self.run_cmd(u"../bin/rdiffdir " + argstring)
-+        self.run_cmd(u"rdiffdir " + argstring)
- 
-     def run_cycle(self, dirname_list):
-         u"""Run diff/patch cycle on directories in dirname_list"""
+@@ -44,7 +44,7 @@ class RdiffdirTest(FunctionalTestCase):
+         basepython = os.environ.get(u'TOXPYTHON', None)
+         if basepython is not None:
+             cmd_list.extend([basepython])
+-        cmd_list.extend([u"{0}/bin/rdiffdir".format(_top_dir)])
++        cmd_list.extend([u"rdiffdir"])
+         cmd_list.extend(argstring.split())
+         cmdline = u" ".join([u'"%s"' % x for x in cmd_list])
+         self.run_cmd(cmdline)
diff --git a/pkgs/tools/backup/duply/default.nix b/pkgs/tools/backup/duply/default.nix
index 7808a0925b1..49ac6452918 100644
--- a/pkgs/tools/backup/duply/default.nix
+++ b/pkgs/tools/backup/duply/default.nix
@@ -1,17 +1,18 @@
-{ stdenv, fetchurl, coreutils, python2, duplicity, gawk, gnupg, bash
+{ lib, stdenv, fetchurl, coreutils, python2, duplicity, gawk, gnupg, bash
 , gnugrep, txt2man, makeWrapper, which
 }:
 
 stdenv.mkDerivation rec {
   pname = "duply";
-  version = "2.2";
+  version = "2.3.1";
 
   src = fetchurl {
-    url = "mirror://sourceforge/project/ftplicity/duply%20%28simple%20duplicity%29/2.2.x/duply_${version}.tgz";
-    sha256 = "1bd7ivswxmxg64n0fnwgz6bkgckhdhz2qnnlkqqx4ccdxx15krbr";
+    url = "mirror://sourceforge/project/ftplicity/duply%20%28simple%20duplicity%29/2.3.x/duply_${version}.tgz";
+    sha256 = "149hb9bk7hm5h3aqf19k37d0i2jf0viaqmpq2997i48qp3agji7h";
   };
 
-  buildInputs = [ txt2man makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ txt2man ];
 
   postPatch = "patchShebangs .";
 
@@ -20,11 +21,11 @@ stdenv.mkDerivation rec {
     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 ]}
+        ${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; {
+  meta = with lib; {
     description = "Shell front end for the duplicity backup tool";
     longDescription = ''
       Duply is a shell front end for the duplicity backup tool
@@ -35,6 +36,6 @@ stdenv.mkDerivation rec {
     homepage = "https://duply.net/";
     license = licenses.gpl2;
     maintainers = [ maintainers.bjornfor ];
-    platforms = stdenv.lib.platforms.unix;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/backup/easysnap/default.nix b/pkgs/tools/backup/easysnap/default.nix
index 5c2ad1a50a7..815dedc998d 100644
--- a/pkgs/tools/backup/easysnap/default.nix
+++ b/pkgs/tools/backup/easysnap/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchFromGitHub, zfs }:
+{lib, stdenv, fetchFromGitHub, zfs }:
 
 stdenv.mkDerivation {
   pname = "easysnap";
@@ -21,7 +21,7 @@ stdenv.mkDerivation {
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage    = "https://github.com/sjau/easysnap";
     description = "Customizable ZFS Snapshotting tool with zfs send/recv pulling";
     license     = licenses.gpl3;
diff --git a/pkgs/tools/backup/flockit/default.nix b/pkgs/tools/backup/flockit/default.nix
index 53baa6a6d93..cd17f8e2438 100644
--- a/pkgs/tools/backup/flockit/default.nix
+++ b/pkgs/tools/backup/flockit/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, runtimeShell }:
+{ lib, stdenv, fetchFromGitHub, runtimeShell }:
 
 stdenv.mkDerivation {
   pname = "flockit";
@@ -23,7 +23,7 @@ stdenv.mkDerivation {
     chmod +x $out/bin/flockit
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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.
diff --git a/pkgs/tools/backup/gamerbackup/default.nix b/pkgs/tools/backup/gamerbackup/default.nix
new file mode 100644
index 00000000000..5512ce2b7b1
--- /dev/null
+++ b/pkgs/tools/backup/gamerbackup/default.nix
@@ -0,0 +1,30 @@
+{ lib, makeWrapper, buildGoModule, fetchFromGitHub, lepton }:
+
+buildGoModule {
+  pname = "gb-backup";
+  version = "unstable-2021-04-07";
+
+  src = fetchFromGitHub {
+    owner = "leijurv";
+    repo = "gb";
+    rev = "904813bf0bbce048af5795618d58c0b1953f9ff8";
+    sha256 = "111jrcv4x38sc19xha5q3pd2297s13qh1maa7sa1k09hgypvgsxf";
+  };
+
+  vendorSha256 = "0m2aa6p04b4fs7zncar1mlykc94pp527phv71cdsbx58jgsm1jnx";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  checkInputs = [ lepton ];
+
+  postFixup = ''
+    wrapProgram $out/bin/gb --prefix PATH : ${lib.makeBinPath [ lepton ]}
+  '';
+
+  meta = with lib; {
+    description = "Gamer Backup, a super opinionated cloud backup system";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ babbaj ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/backup/gphotos-sync/default.nix b/pkgs/tools/backup/gphotos-sync/default.nix
new file mode 100644
index 00000000000..e7cd29e1a81
--- /dev/null
+++ b/pkgs/tools/backup/gphotos-sync/default.nix
@@ -0,0 +1,44 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "gphotos-sync";
+  version = "2.14.2";
+
+  src = fetchFromGitHub {
+    owner = "gilesknap";
+    repo = "gphotos-sync";
+    rev = version;
+    sha256 = "0cfmbrdy6w18hb623rjn0a4hnn3n63jw2jlmgn4a2k1sjqhpx3bf";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    appdirs
+    attrs
+    exif
+    psutil
+    pyyaml
+    requests_oauthlib
+  ];
+  checkInputs = with python3Packages; [
+    pytestCheckHook
+    mock
+  ];
+  checkPhase = ''
+    export HOME=$(mktemp -d)
+
+    # patch to skip all tests that do network access
+    cat >>test/test_setup.py <<EOF
+    import pytest, requests
+    requests.Session.__init__ = lambda *args, **kwargs: pytest.skip("no network access")
+    EOF
+
+    pytestCheckPhase
+  '';
+
+  meta = with lib; {
+    description = "Google Photos and Albums backup with Google Photos Library API";
+    homepage    = "https://github.com/gilesknap/gphotos-sync";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ dnr ];
+  };
+}
diff --git a/pkgs/tools/backup/grab-site/default.nix b/pkgs/tools/backup/grab-site/default.nix
index 81e16ad005b..2f2f01356b4 100644
--- a/pkgs/tools/backup/grab-site/default.nix
+++ b/pkgs/tools/backup/grab-site/default.nix
@@ -1,18 +1,38 @@
-{ stdenv, python3Packages, fetchFromGitHub }:
+{ lib, python37, fetchFromGitHub }:
+let
+  python = python37.override {
+    self = python;
+    packageOverrides = self: super: {
+      tornado = super.tornado_4;
+    };
+  };
 
-python3Packages.buildPythonApplication rec {
-  version = "2.1.19";
-  name = "grab-site-${version}";
+in
+with python.pkgs; buildPythonApplication rec {
+  pname = "grab-site";
+  version = "2.2.0";
 
   src = fetchFromGitHub {
     rev = version;
     owner = "ArchiveTeam";
     repo = "grab-site";
-    sha256 = "1v1hnhv5knzdl0kj3574ccwlh171vcb7faddp095ycdmiiybalk4";
+    sha256 = "1jxcv9dral6h7vfpfqkp1yif6plj0vspzakymkj8hfl75nh0wpv8";
   };
 
-  propagatedBuildInputs = with python3Packages; [
-    click ludios_wpull manhole lmdb autobahn fb-re2 websockets cchardet
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace '"wpull @ https://github.com/ArchiveTeam/ludios_wpull/tarball/master#egg=wpull-3.0.7"' '"wpull"'
+  '';
+
+  propagatedBuildInputs = [
+    click
+    ludios_wpull
+    manhole
+    lmdb
+    autobahn
+    fb-re2
+    websockets
+    cchardet
   ];
 
   checkPhase = ''
@@ -20,7 +40,7 @@ python3Packages.buildPythonApplication rec {
     bash ./tests/offline-tests
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Crawler for web archiving with WARC output";
     homepage = "https://github.com/ArchiveTeam/grab-site";
     license = licenses.mit;
diff --git a/pkgs/tools/backup/hpe-ltfs/default.nix b/pkgs/tools/backup/hpe-ltfs/default.nix
index e34155bb238..ec8e6392e9c 100644
--- a/pkgs/tools/backup/hpe-ltfs/default.nix
+++ b/pkgs/tools/backup/hpe-ltfs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fuse, icu, pkgconfig, libxml2, libuuid }:
+{ lib, stdenv, fetchFromGitHub, fuse, icu, pkg-config, libxml2, libuuid }:
 
 stdenv.mkDerivation rec {
   version = "3.4.2_Z7550-02501";
@@ -13,13 +13,13 @@ stdenv.mkDerivation rec {
 
   sourceRoot = "source/ltfs";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
-  buildInputs = [ 
+  buildInputs = [
     fuse icu libxml2 libuuid
   ];
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/backup/httrack/default.nix b/pkgs/tools/backup/httrack/default.nix
index 9a77153e2ff..a01565c43a0 100644
--- a/pkgs/tools/backup/httrack/default.nix
+++ b/pkgs/tools/backup/httrack/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, zlib, openssl, libiconv }:
+{ lib, stdenv, fetchurl, zlib, openssl, libiconv }:
 
 stdenv.mkDerivation rec {
   version = "3.49.2";
@@ -9,11 +9,11 @@ stdenv.mkDerivation rec {
     sha256 = "09a0gm67nml86qby1k1gh7rdxamnrnzwr6l9r5iiq94favjs0xrl";
   };
 
-  buildInputs = [ zlib openssl ] ++ stdenv.lib.optional stdenv.isDarwin libiconv;
+  buildInputs = [ zlib openssl ] ++ lib.optional stdenv.isDarwin libiconv;
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Easy-to-use offline browser / website mirroring utility";
     homepage    = "http://www.httrack.com";
     license     = licenses.gpl3;
diff --git a/pkgs/tools/backup/httrack/qt.nix b/pkgs/tools/backup/httrack/qt.nix
index 6ee7f6e6a21..2a7c4ff5176 100644
--- a/pkgs/tools/backup/httrack/qt.nix
+++ b/pkgs/tools/backup/httrack/qt.nix
@@ -1,4 +1,4 @@
-{ mkDerivation, stdenv, fetchurl, cmake, pkgconfig, makeWrapper
+{ mkDerivation, lib, fetchurl, cmake, pkg-config, makeWrapper
 , httrack, qtbase, qtmultimedia }:
 
 mkDerivation rec {
@@ -12,9 +12,7 @@ mkDerivation rec {
 
   buildInputs = [ httrack qtbase qtmultimedia ];
 
-  nativeBuildInputs = [ cmake makeWrapper pkgconfig ];
-
-  enableParallelBuilding = true;
+  nativeBuildInputs = [ cmake makeWrapper pkg-config ];
 
   prePatch = ''
     substituteInPlace cmake/HTTRAQTFindHttrack.cmake \
@@ -30,7 +28,7 @@ mkDerivation rec {
       --replace /usr/share/httraqt/ $out/share/httraqt
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Easy-to-use offline browser / website mirroring utility - QT frontend";
     homepage    = "http://www.httrack.com";
     license     = licenses.gpl3;
diff --git a/pkgs/tools/backup/iceshelf/default.nix b/pkgs/tools/backup/iceshelf/default.nix
index 546339ca002..c066cb76695 100644
--- a/pkgs/tools/backup/iceshelf/default.nix
+++ b/pkgs/tools/backup/iceshelf/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchFromGitHub, git, awscli, python3 }:
+{ lib, fetchFromGitHub, git, awscli, python3 }:
 
 python3.pkgs.buildPythonApplication rec {
   pname = "iceshelf";
@@ -6,11 +6,11 @@ python3.pkgs.buildPythonApplication rec {
 
   format = "other";
 
-	src = fetchFromGitHub {
-		owner = "mrworf";
-		repo = pname;
-		rev = "26768dde3fc54fa412e523eb8f8552e866b4853b";
-		sha256 = "08rcbd14vn7312rmk2hyvdzvhibri31c4r5lzdrwb1n1y9q761qm";
+  src = fetchFromGitHub {
+    owner = "mrworf";
+    repo = pname;
+    rev = "26768dde3fc54fa412e523eb8f8552e866b4853b";
+    sha256 = "08rcbd14vn7312rmk2hyvdzvhibri31c4r5lzdrwb1n1y9q761qm";
   };
 
   propagatedBuildInputs = [
@@ -19,12 +19,12 @@ python3.pkgs.buildPythonApplication rec {
     python3.pkgs.python-gnupg
   ];
 
-	installPhase = ''
-		mkdir -p $out/bin $out/share/doc/${pname} $out/${python3.sitePackages}
+  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";
diff --git a/pkgs/tools/backup/kopia/default.nix b/pkgs/tools/backup/kopia/default.nix
index 4c338eed4b0..32f051f5ad9 100644
--- a/pkgs/tools/backup/kopia/default.nix
+++ b/pkgs/tools/backup/kopia/default.nix
@@ -1,17 +1,17 @@
-{ lib, buildGoModule, fetchFromGitHub, coreutils }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "kopia";
-  version = "0.6.2";
+  version = "0.8.4";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "v${version}";
-    sha256 = "1wz4sqjcih1m4bjxxdrsggai931q72zz8ikf2rwkp4alz12wr355";
+    sha256 = "sha256-Or6RL6yT/X3rVIySqt5lWbXbI25f8HNLBpY3cOhMC0g=";
   };
 
-  vendorSha256 = "1npxr7gp59xv38zdx1diilfxij6lb0cmvsnzvjx6n8g0326gf2ii";
+  vendorSha256 = "sha256-1FK5IIvm2iyzGqj8IPL3/qvxFj0dC37aycQQ5MO0mBI=";
 
   doCheck = false;
 
@@ -23,17 +23,6 @@ buildGoModule rec {
        -X github.com/kopia/kopia/repo.BuildInfo=${src.rev}
   '';
 
-  postConfigure = ''
-    # make 'vendor' writable
-    cp -L -r vendor tmp-vendor
-    rm -rf vendor
-    mv tmp-vendor vendor
-
-    # speakeasy hardcodes /bin/stty https://github.com/bgentry/speakeasy/issues/22
-    substituteInPlace vendor/github.com/bgentry/speakeasy/speakeasy_unix.go \
-      --replace "/bin/stty" "${coreutils}/bin/stty"
-  '';
-
   meta = with lib; {
     homepage = "https://kopia.io";
     description = "Cross-platform backup tool with fast, incremental backups, client-side end-to-end encryption, compression and data deduplication";
diff --git a/pkgs/tools/backup/luckybackup/default.nix b/pkgs/tools/backup/luckybackup/default.nix
index 7203ba480e6..a8f88e88b0e 100644
--- a/pkgs/tools/backup/luckybackup/default.nix
+++ b/pkgs/tools/backup/luckybackup/default.nix
@@ -1,9 +1,9 @@
-{ mkDerivation, stdenv, fetchurl
-, pkgconfig, libtool, qmake
+{ mkDerivation, lib, fetchurl
+, pkg-config, libtool, qmake
 , rsync, ssh
 }:
 
-with stdenv.lib;
+with lib;
 mkDerivation rec {
   pname = "luckybackup";
   version = "0.5.0";
@@ -15,8 +15,8 @@ mkDerivation rec {
 
   buildInputs = [ rsync ssh ];
 
-  nativeBuildInputs = [ pkgconfig libtool qmake ];
-  
+  nativeBuildInputs = [ pkg-config libtool qmake ];
+
   prePatch = ''
     for File in luckybackup.pro menu/luckybackup-pkexec \
         menu/luckybackup-su.desktop menu/luckybackup.desktop \
@@ -29,12 +29,12 @@ mkDerivation rec {
   meta = {
     description = "A powerful, fast and reliable backup & sync tool";
     longDescription = ''
-      luckyBackup is an application for data back-up and synchronization 
+      luckyBackup is an application for data back-up and synchronization
       powered by the rsync tool.
-      
+
       It is simple to use, fast (transfers over only changes made and not
       all data), safe (keeps your data safe by checking all declared directories
-      before proceeding in any data manipulation), reliable and fully 
+      before proceeding in any data manipulation), reliable and fully
       customizable.
     '';
     homepage = "http://luckybackup.sourceforge.net/";
diff --git a/pkgs/tools/backup/lvmsync/default.nix b/pkgs/tools/backup/lvmsync/default.nix
index 75962c98f8b..e36e20902df 100644
--- a/pkgs/tools/backup/lvmsync/default.nix
+++ b/pkgs/tools/backup/lvmsync/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, bundlerEnv, ruby, bundlerUpdateScript, makeWrapper }:
+{ lib, stdenv, bundlerEnv, ruby, bundlerUpdateScript, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "lvmsync";
@@ -6,7 +6,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ makeWrapper ];
 
-  phases = ["installPhase"];
+  dontUnpack = true;
 
   installPhase = let
     env = bundlerEnv {
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
 
   passthru.updateScript = bundlerUpdateScript "lvmsync";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Optimised synchronisation of LVM snapshots over a network";
     homepage = "https://theshed.hezmatt.org/lvmsync/";
     license = licenses.gpl3;
diff --git a/pkgs/tools/backup/lvmsync/gemset.nix b/pkgs/tools/backup/lvmsync/gemset.nix
index 7f80e928660..f17aa513a1f 100644
--- a/pkgs/tools/backup/lvmsync/gemset.nix
+++ b/pkgs/tools/backup/lvmsync/gemset.nix
@@ -33,4 +33,4 @@
     };
     version = "1.6.9";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/backup/mastodon-archive/default.nix b/pkgs/tools/backup/mastodon-archive/default.nix
new file mode 100644
index 00000000000..10e500339ee
--- /dev/null
+++ b/pkgs/tools/backup/mastodon-archive/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "mastodon-archive";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "kensanata";
+    repo = "mastodon-backup";
+    rev = "v${version}";
+    sha256 = "1dlrkygywxwm6xbn0pnfwd3f7641wnvxdyb5qihbsf62w1w08x8r";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    html2text
+    mastodon-py
+    progress
+  ];
+
+  # There is no test
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Utility for backing up your Mastodon content";
+    homepage = "https://alexschroeder.ch/software/Mastodon_Archive";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ julm ];
+  };
+}
diff --git a/pkgs/tools/backup/monolith/default.nix b/pkgs/tools/backup/monolith/default.nix
index 9d33ce1f3f8..8c2be78af2a 100644
--- a/pkgs/tools/backup/monolith/default.nix
+++ b/pkgs/tools/backup/monolith/default.nix
@@ -1,34 +1,35 @@
-{ stdenv
+{ lib, stdenv
 , rustPlatform
 , fetchFromGitHub
 , pkg-config
 , openssl
+, libiconv
 , Security
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "monolith";
-  version = "2.3.1";
+  version = "2.4.1";
 
   src = fetchFromGitHub {
     owner = "Y2Z";
     repo = pname;
     rev = "v${version}";
-    sha256 = "16k5mp64a5l063rdj65hbpx414xv0bqdvhvz49k8018f2a2jj5xl";
+    sha256 = "sha256-n89rfZwR8B6SKeLtzmbeHRyw2G9NIQ1BY6JvJuZmC/w=";
   };
 
-  cargoSha256 = "0s5mv8mymycz4ga4zh9kbrhwmhgl4j01pw1sdzxy49l9waryk9p3";
+  cargoSha256 = "sha256-+UGGsBU12PzkrZ8Po8fJBs1pygdOvoHp0tKmipjVMQ4=";
 
-  nativeBuildInputs = stdenv.lib.optionals stdenv.isLinux [ pkg-config ];
-  buildInputs = stdenv.lib.optionals stdenv.isLinux [ openssl ]
-    ++ stdenv.lib.optionals stdenv.isDarwin [ Security ];
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config ];
+  buildInputs = lib.optionals stdenv.isLinux [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ libiconv Security ];
 
   checkFlagsArray = [ "--skip=tests::cli" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Bundle any web page into a single HTML file";
     homepage = "https://github.com/Y2Z/monolith";
     license = licenses.unlicense;
-    maintainers = with maintainers; [ filalex77 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/backup/mt-st/default.nix b/pkgs/tools/backup/mt-st/default.nix
index 57201d69dba..804c50830ce 100644
--- a/pkgs/tools/backup/mt-st/default.nix
+++ b/pkgs/tools/backup/mt-st/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "mt-st-1.3";
@@ -16,8 +16,8 @@ stdenv.mkDerivation rec {
       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;
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.redvers ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/backup/mtx/default.nix b/pkgs/tools/backup/mtx/default.nix
index 2a2dd80c566..aa72b02afbb 100644
--- a/pkgs/tools/backup/mtx/default.nix
+++ b/pkgs/tools/backup/mtx/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "mtx-1.3.12";
@@ -20,8 +20,8 @@ stdenv.mkDerivation rec {
       specification.
     '';
     homepage = "https://sourceforge.net/projects/mtx/";
-    license = stdenv.lib.licenses.gpl2;
-    maintainers = [ stdenv.lib.maintainers.redvers ];
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.redvers ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/backup/mydumper/default.nix b/pkgs/tools/backup/mydumper/default.nix
index 88a72762990..a923724419d 100644
--- a/pkgs/tools/backup/mydumper/default.nix
+++ b/pkgs/tools/backup/mydumper/default.nix
@@ -1,6 +1,8 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config
 , glib, zlib, pcre, libmysqlclient, libressl }:
 
+let inherit (lib) getDev; in
+
 stdenv.mkDerivation rec {
   version = "0.9.5";
   pname = "mydumper";
@@ -12,12 +14,14 @@ stdenv.mkDerivation rec {
     sha256 = "0vbz0ri5hm6yzkrcgnaj8px6bf59myr5dbhyy7fd4cv44hr685k6";
   };
 
-  nativeBuildInputs = [ cmake pkgconfig ];
+  nativeBuildInputs = [ cmake pkg-config ];
 
   buildInputs = [ glib zlib pcre libmysqlclient libressl ];
 
-  meta = with stdenv.lib; {
-    description = ''High-perfomance MySQL backup tool'';
+  cmakeFlags = [ "-DMYSQL_INCLUDE_DIR=${getDev libmysqlclient}/include/mysql" ];
+
+  meta = with lib; {
+    description = "High-perfomance MySQL backup tool";
     homepage = "https://github.com/maxbube/mydumper";
     license = licenses.gpl3;
     platforms = platforms.linux;
diff --git a/pkgs/tools/backup/ori/default.nix b/pkgs/tools/backup/ori/default.nix
index e3b4a0fb537..01da407695a 100644
--- a/pkgs/tools/backup/ori/default.nix
+++ b/pkgs/tools/backup/ori/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, boost, pkgconfig, scons, utillinux, fuse, libevent, openssl, zlib }:
+{ lib, stdenv, fetchurl, boost, pkg-config, scons, util-linux, fuse, libevent, openssl, zlib }:
 
 stdenv.mkDerivation {
   version = "0.8.1";
@@ -9,17 +9,17 @@ stdenv.mkDerivation {
     sha256 = "8ce1a3dfbb6d1538885e993616bdfe71be44711d48f7f6798ff6bc0a39b3deca";
   };
 
-  buildInputs = [ 
-    boost pkgconfig scons utillinux fuse libevent openssl zlib
+  buildInputs = [
+    boost pkg-config scons util-linux fuse libevent openssl zlib
   ];
 
   buildPhase = ''
     scons PREFIX=$out WITH_ORILOCAL=1 install
   '';
 
-  installPhase = ":";
+  dontInstall = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A secure distributed file system";
     homepage = "http://ori.scs.stanford.edu/";
     license = licenses.mit;
diff --git a/pkgs/tools/backup/partclone/default.nix b/pkgs/tools/backup/partclone/default.nix
index 2a325046123..06c20747157 100644
--- a/pkgs/tools/backup/partclone/default.nix
+++ b/pkgs/tools/backup/partclone/default.nix
@@ -1,22 +1,22 @@
-{ stdenv, fetchFromGitHub, autoreconfHook
-, pkgconfig, libuuid, e2fsprogs, nilfs-utils, ntfs3g
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
+, pkg-config, libuuid, e2fsprogs, nilfs-utils, ntfs3g, openssl
 }:
 
 stdenv.mkDerivation rec {
   pname = "partclone";
-  version = "0.3.11";
+  version = "0.3.17";
 
   src = fetchFromGitHub {
     owner = "Thomas-Tsai";
     repo = "partclone";
     rev = version;
-    sha256 = "0bv15i0gxym4dv48rgaavh8p94waryn1l6viis6qh5zm9cd08skg";
+    sha256 = "sha256-tMdBo26JvHxbVI/Y2KDMejH+YT4IVx2H/y36u9ss0C8=";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [
-    e2fsprogs libuuid stdenv.cc.libc nilfs-utils ntfs3g 
-    (stdenv.lib.getOutput "static" stdenv.cc.libc)
+    e2fsprogs libuuid stdenv.cc.libc nilfs-utils ntfs3g openssl
+    (lib.getOutput "static" stdenv.cc.libc)
   ];
 
   configureFlags = [
@@ -34,7 +34,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = {
+  meta = with lib; {
     description = "Utilities to save and restore used blocks on a partition";
     longDescription = ''
       Partclone provides utilities to save and restore used blocks on a
@@ -43,8 +43,8 @@ stdenv.mkDerivation rec {
       ext2 partition.
     '';
     homepage = "https://partclone.org";
-    license = stdenv.lib.licenses.gpl2;
-    maintainers = [stdenv.lib.maintainers.marcweber];
-    platforms = stdenv.lib.platforms.linux;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ marcweber ];
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/backup/partimage/default.nix b/pkgs/tools/backup/partimage/default.nix
index 51a1a05fe6c..2477fa6e443 100644
--- a/pkgs/tools/backup/partimage/default.nix
+++ b/pkgs/tools/backup/partimage/default.nix
@@ -1,11 +1,11 @@
-{stdenv
+{lib, stdenv
 , fetchurl
 , fetchpatch
 , bzip2
 , zlib
 , newt
 , openssl
-, pkgconfig
+, pkg-config
 , slang
 , autoreconfHook
 }:
@@ -20,7 +20,7 @@ stdenv.mkDerivation {
 
   configureFlags = [ "--with-ssl-headers=${openssl.dev}/include/openssl" ];
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
   buildInputs = [ bzip2 zlib newt newt openssl slang ];
 
   patches = [
@@ -31,13 +31,17 @@ stdenv.mkDerivation {
         + "partimage-0.6.9-openssl-1.1-compatibility.patch?id=3fe8e9910002b6523d995512a646b063565d0447";
       sha256 = "1hs0krxrncxq1w36bhad02yk8yx71zcfs35cw87c82sl2sfwasjg";
     })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/p/partimage/0.6.9-8/debian/patches/04-fix-FTBFS-glic-2.28.patch";
+      sha256 = "0xid5636g58sxbhxnjmfjdy7y8rf3c77zmmpfbbqv4lv9jd2gmxm";
+    })
   ];
 
   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;
+    license = lib.licenses.gpl2;
+    maintainers = [lib.maintainers.marcweber];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/backup/percona-xtrabackup/generic.nix b/pkgs/tools/backup/percona-xtrabackup/generic.nix
index 9339e8155ea..6d66c80585f 100644
--- a/pkgs/tools/backup/percona-xtrabackup/generic.nix
+++ b/pkgs/tools/backup/percona-xtrabackup/generic.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, bison, boost, cmake, makeWrapper, pkgconfig
+{ lib, stdenv, fetchFromGitHub, bison, boost, cmake, makeWrapper, pkg-config
 , curl, cyrus_sasl, libaio, libedit, libev, libevent, libgcrypt, libgpgerror, lz4
 , ncurses, numactl, openssl, protobuf, valgrind, xxd, zlib
 , perlPackages
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
     inherit sha256;
   };
 
-  nativeBuildInputs = [ bison boost cmake makeWrapper pkgconfig ];
+  nativeBuildInputs = [ bison boost cmake makeWrapper pkg-config ];
 
   buildInputs = [
     curl cyrus_sasl libaio libedit libev libevent libgcrypt libgpgerror lz4
@@ -48,7 +48,7 @@ stdenv.mkDerivation rec {
     rm -r "$out"/lib/plugin/debug
   '' + extraPostInstall;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Non-blocking backup tool for MySQL";
     homepage = "http://www.percona.com/software/percona-xtrabackup";
     license = licenses.lgpl2;
diff --git a/pkgs/tools/backup/pyznap/default.nix b/pkgs/tools/backup/pyznap/default.nix
index b04aab34532..81f3a99ecd9 100644
--- a/pkgs/tools/backup/pyznap/default.nix
+++ b/pkgs/tools/backup/pyznap/default.nix
@@ -6,16 +6,16 @@
 
 buildPythonApplication rec {
   pname = "pyznap";
-  version = "1.5.0";
+  version = "1.6.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0s8glb6kbwwha6zgzfrf195r1qkrv1a9wagyhhm3kryv7c88mqnp";
+    sha256 = "88bf1d6de2c11f14acbdfa01b61eb95c94f95d829ddebdaee3786b64ccb93ae3";
   };
 
   propagatedBuildInputs = [
     setuptools
-  ];  
+  ];
 
   # tests aren't included in the PyPI packages
   doCheck = false;
diff --git a/pkgs/tools/backup/rdedup/default.nix b/pkgs/tools/backup/rdedup/default.nix
index 83b14d87db7..482d1aec8da 100644
--- a/pkgs/tools/backup/rdedup/default.nix
+++ b/pkgs/tools/backup/rdedup/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub, rustPlatform, pkgconfig, openssl, libsodium
-, llvmPackages, clang, lzma
+{ lib, stdenv, fetchFromGitHub, rustPlatform, pkg-config, openssl, libsodium
+, llvmPackages, clang, xz
 , Security }:
 
 rustPlatform.buildRustPackage rec {
@@ -13,21 +13,21 @@ rustPlatform.buildRustPackage rec {
     sha256 = "0y34a3mpghdmcb2rx4z62q0s351bfmy1287d75mm07ryfgglgsd7";
   };
 
-  cargoSha256 = "0akwb7ak4h1i1zk4wcn27zyqjz6mrchs47014xbzw22rj8h8dx92";
+  cargoSha256 = "1k0pl9i7zf1ki5ch2zxc1fqsf94bxjlvjrkh0500cycwqcdys296";
 
   cargoPatches = [
     ./v3.1.1-fix-Cargo.lock.patch
   ];
 
-  nativeBuildInputs = [ pkgconfig llvmPackages.libclang clang ];
-  buildInputs = [ openssl libsodium lzma ]
-    ++ (stdenv.lib.optional stdenv.isDarwin Security);
+  nativeBuildInputs = [ pkg-config llvmPackages.libclang clang ];
+  buildInputs = [ openssl libsodium xz ]
+    ++ (lib.optional stdenv.isDarwin Security);
 
   configurePhase = ''
-    export LIBCLANG_PATH="${llvmPackages.libclang}/lib"
+    export LIBCLANG_PATH="${llvmPackages.libclang.lib}/lib"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Data deduplication with compression and public key encryption";
     homepage = "https://github.com/dpc/rdedup";
     license = licenses.mpl20;
diff --git a/pkgs/tools/backup/rdiff-backup/default.nix b/pkgs/tools/backup/rdiff-backup/default.nix
index 707ba8a9885..3307ba08b11 100644
--- a/pkgs/tools/backup/rdiff-backup/default.nix
+++ b/pkgs/tools/backup/rdiff-backup/default.nix
@@ -1,23 +1,36 @@
-{stdenv, fetchurl, python2Packages, librsync, gnused }:
+{ lib, python3Packages, librsync }:
 
-python2Packages.buildPythonApplication {
-  name = "rdiff-backup-1.3.3";
+let
+  pypkgs = python3Packages;
 
-  src = fetchurl {
-    url = "mirror://savannah/rdiff-backup/rdiff-backup-1.3.3.tar.gz";
-    sha256 = "01hcwf5rgqi303fa4kdjkbpa7n8mvvh7h9gpgh2b23nz73k0q0zf";
+in
+pypkgs.buildPythonApplication rec {
+  pname = "rdiff-backup";
+  version = "2.0.5";
+
+  src = pypkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-VNFgOOYgFO2RbHHIMDsH0vphpqaAOMoYn8LTFTSw84s=";
   };
 
-  patches = [ ./fix-librsync-rs_default_strong_len.patch ];
+  # pkg_resources fails to find the version and then falls back to "DEV"
+  postPatch = ''
+    substituteInPlace src/rdiff_backup/Globals.py \
+      --replace 'version = "DEV"' 'version = "${version}"'
+  '';
+
+  buildInputs = [ librsync ];
 
-  buildInputs = [ librsync gnused ];
+  nativeBuildInputs = with pypkgs; [ setuptools-scm ];
 
+  # no tests from pypi
   doCheck = false;
 
-  meta = {
+  meta = with lib; {
     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;
+    homepage = "https://rdiff-backup.net";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/backup/rdiff-backup/fix-librsync-rs_default_strong_len.patch b/pkgs/tools/backup/rdiff-backup/fix-librsync-rs_default_strong_len.patch
deleted file mode 100644
index ce23c8a8124..00000000000
--- a/pkgs/tools/backup/rdiff-backup/fix-librsync-rs_default_strong_len.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-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/pkgs/tools/backup/rdup/default.nix b/pkgs/tools/backup/rdup/default.nix
index 0df4ecda89e..f75285e9ef9 100644
--- a/pkgs/tools/backup/rdup/default.nix
+++ b/pkgs/tools/backup/rdup/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook, glib, pcre }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook, glib, pcre }:
 
 stdenv.mkDerivation {
   pname = "rdup";
@@ -11,14 +11,14 @@ stdenv.mkDerivation {
     sha256 = "0bzyv6qmnivxnv9nw7lnfn46k0m1dlxcjj53zcva6v8y8084l1iw";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   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 ];
+    license    = lib.licenses.gpl3;
+    platforms   = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ sternenseemann ];
   };
 }
diff --git a/pkgs/tools/backup/restic/0001-Skip-testing-restore-with-permission-failure.patch b/pkgs/tools/backup/restic/0001-Skip-testing-restore-with-permission-failure.patch
new file mode 100644
index 00000000000..148b9a1a957
--- /dev/null
+++ b/pkgs/tools/backup/restic/0001-Skip-testing-restore-with-permission-failure.patch
@@ -0,0 +1,25 @@
+From 8e6186be04e2819b6e3586e5d1aeb8a824e1979f Mon Sep 17 00:00:00 2001
+From: Simon Bruder <simon@sbruder.de>
+Date: Thu, 25 Feb 2021 09:20:51 +0100
+Subject: [PATCH] Skip testing restore with permission failure
+
+The test fails in sandboxed builds.
+---
+ cmd/restic/integration_test.go | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/cmd/restic/integration_test.go b/cmd/restic/integration_test.go
+index 7d198d33..1588ccb1 100644
+--- a/cmd/restic/integration_test.go
++++ b/cmd/restic/integration_test.go
+@@ -1170,6 +1170,7 @@ func TestRestoreLatest(t *testing.T) {
+ }
+ 
+ func TestRestoreWithPermissionFailure(t *testing.T) {
++	t.Skip("Skipping testing restore with permission failure")
+ 	env, cleanup := withTestEnvironment(t)
+ 	defer cleanup()
+ 
+-- 
+2.29.2
+
diff --git a/pkgs/tools/backup/restic/default.nix b/pkgs/tools/backup/restic/default.nix
index 33cac4ad229..65ff53bf677 100644
--- a/pkgs/tools/backup/restic/default.nix
+++ b/pkgs/tools/backup/restic/default.nix
@@ -1,25 +1,34 @@
-{ stdenv, lib, buildGoPackage, fetchFromGitHub, installShellFiles, makeWrapper
+{ stdenv, lib, buildGoModule, fetchFromGitHub, installShellFiles, makeWrapper
 , nixosTests, rclone }:
 
-buildGoPackage rec {
+buildGoModule rec {
   pname = "restic";
-  version = "0.9.6";
-
-  goPackagePath = "github.com/restic/restic";
+  version = "0.12.0";
 
   src = fetchFromGitHub {
     owner = "restic";
     repo = "restic";
     rev = "v${version}";
-    sha256 = "0lydll93n1lcn1fl669b9cikmzz9d6vfpc8ky3ng5fi8kj3v1dz7";
+    sha256 = "07gxf56g45gj2arvdnrr9656i9ykhy1y6k6zdlni1sa3aa2x2bbf";
   };
 
+  patches = [
+    # The TestRestoreWithPermissionFailure test fails in Nix’s build sandbox
+    ./0001-Skip-testing-restore-with-permission-failure.patch
+  ];
+
+  vendorSha256 = "14z22lmdd681rn61alpqbn3i9fn0kcc74321vjvhz2ix2mch3c1z";
+
   subPackages = [ "cmd/restic" ];
 
   nativeBuildInputs = [ installShellFiles makeWrapper ];
 
   passthru.tests.restic = nixosTests.restic;
 
+  postPatch = ''
+    rm cmd/restic/integration_fuse_test.go
+  '';
+
   postInstall = ''
     wrapProgram $out/bin/restic --prefix PATH : '${rclone}/bin'
   '' + lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform) ''
diff --git a/pkgs/tools/backup/restic/rest-server.nix b/pkgs/tools/backup/restic/rest-server.nix
index 45a4df74b15..9f2a52d64dc 100644
--- a/pkgs/tools/backup/restic/rest-server.nix
+++ b/pkgs/tools/backup/restic/rest-server.nix
@@ -1,25 +1,20 @@
-{ lib, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
-buildGoPackage rec {
+buildGoModule rec {
   pname = "restic-rest-server";
-  version = "0.9.7";
-
-  goPackagePath = "github.com/restic/rest-server";
+  version = "0.10.0";
 
   src = fetchFromGitHub {
     owner = "restic";
     repo = "rest-server";
     rev = "v${version}";
-    sha256 = "1g47ly1pxwn0znbj3v5j6kqhn66d4wf0d5gjqzig75pzknapv8qj";
+    sha256 = "1msa6mah76zfif5wp0129jjk2jlq5ff38p9p6d241mw45i1xjfy7";
   };
 
-  buildPhase = ''
-    cd go/src/${goPackagePath}
-    go run build.go
-  '';
+  vendorSha256 = "04w63sx7p0fm9xq0m7xab808az7lgw7i3p8basndszky8kgvxhmg";
 
-  installPhase = ''
-    install -Dt $out/bin rest-server
+  preCheck = ''
+    substituteInPlace handlers_test.go --replace "TestJoin" "SkipTestJoin"
   '';
 
   meta = with lib; {
diff --git a/pkgs/tools/backup/rotate-backups/default.nix b/pkgs/tools/backup/rotate-backups/default.nix
index c0a06e1b9ae..405fc6c3955 100644
--- a/pkgs/tools/backup/rotate-backups/default.nix
+++ b/pkgs/tools/backup/rotate-backups/default.nix
@@ -1,17 +1,33 @@
-{ lib, buildPythonPackage, fetchFromGitHub, update-dotdee, simpleeval, dateutil }:
+{ lib
+, python3
+, fetchFromGitHub
+}:
 
-buildPythonPackage rec {
+python3.pkgs.buildPythonApplication rec {
   pname = "rotate-backups";
-  version = "6.0";
+  version = "8.1";
 
   src = fetchFromGitHub {
     owner = "xolox";
     repo = "python-rotate-backups";
     rev = version;
-    sha256 = "0i59qfv1cfm0ss63ab2nrkn5wr4rxpqqmvfd7pf9c3pl9dbfq20c";
+    sha256 = "0r4dyd7hj403rksgp3vh1azp9n4af75r3wq3x39wxcqizpms3vkx";
   };
 
-  propagatedBuildInputs = [ update-dotdee simpleeval dateutil ];
+  propagatedBuildInputs = with python3.pkgs; [
+    python-dateutil
+    simpleeval
+    update-dotdee
+  ];
+
+  checkInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # https://github.com/xolox/python-rotate-backups/issues/33
+    "test_removal_command"
+  ];
 
   meta = with lib; {
     description = "Simple command line interface for backup rotation";
@@ -20,4 +36,3 @@ buildPythonPackage rec {
     maintainers = with maintainers; [ eyjhb ];
   };
 }
-
diff --git a/pkgs/tools/backup/rsbep/default.nix b/pkgs/tools/backup/rsbep/default.nix
index d7967c018a2..7f59b0af944 100644
--- a/pkgs/tools/backup/rsbep/default.nix
+++ b/pkgs/tools/backup/rsbep/default.nix
@@ -1,12 +1,14 @@
-{ stdenv, lib, coreutils, gnused, gawk, fetchurl }:
+{ lib, stdenv, coreutils, gawk, fetchFromGitHub }:
 
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "rsbep";
-  version = "0.1.0";
+  version = "0.2.0";
 
-  src = fetchurl {
-    url = "https://www.thanassis.space/rsbep-0.1.0-ttsiodras.tar.bz2";
-    sha256 = "1zji34kc9srxp0h1s1m7k60mvgsir1wrx1n3wc990jszfplr32zc";
+  src = fetchFromGitHub {
+    owner = "ttsiodras";
+    repo = "rsbep-backup";
+    rev = "v${version}";
+    sha256 = "0is4jgil3wdqbvx9h66xcyzbqy84ndyydnnay2g9k81a4mcz4dns";
   };
 
   postFixup = ''
@@ -18,20 +20,27 @@ stdenv.mkDerivation {
     mv rsbep_chopper $libexecDir
 
     # Fix store dependencies in scripts
-    path="export PATH=$out/bin:$libexecDir:${lib.makeBinPath [ coreutils gnused gawk ]}"
+    path="export PATH=$out/bin:$libexecDir:${lib.makeBinPath [ coreutils 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
   '';
 
+  doInstallCheck = true;
+  installCheckPhase = ''
+    cd $TMP
+    echo hello > input
+    $out/bin/freeze.sh input > packed
+    $out/bin/melt.sh packed > output
+    diff -u input output
+  '';
+
   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;
+    license = licenses.gpl3Plus;
     maintainers = [ maintainers.earvstedt ];
   };
 }
diff --git a/pkgs/tools/backup/rsnapshot/default.nix b/pkgs/tools/backup/rsnapshot/default.nix
index 0503dc3b657..9322e62a3dc 100644
--- a/pkgs/tools/backup/rsnapshot/default.nix
+++ b/pkgs/tools/backup/rsnapshot/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, perl, openssh, rsync, logger }:
+{ fetchurl, lib, stdenv, perl, openssh, rsync, logger }:
 
 stdenv.mkDerivation rec {
   name = "rsnapshot-1.4.3";
@@ -18,10 +18,10 @@ stdenv.mkDerivation rec {
       "/usr/bin/pod2man" "${perl}/bin/pod2man"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A filesystem snapshot utility for making backups of local and remote systems";
     homepage = "https://rsnapshot.org/";
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/backup/s3ql/default.nix b/pkgs/tools/backup/s3ql/default.nix
index 346f8d27964..f67b5467078 100644
--- a/pkgs/tools/backup/s3ql/default.nix
+++ b/pkgs/tools/backup/s3ql/default.nix
@@ -1,20 +1,20 @@
-{ stdenv, fetchFromGitHub, python3Packages, sqlite, which }:
+{ lib, fetchFromGitHub, python3Packages, sqlite, which }:
 
 python3Packages.buildPythonApplication rec {
   pname = "s3ql";
-  version = "3.3.2";
+  version = "3.7.2";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "release-${version}";
-    sha256 = "1x0xj8clfs8fdczn8skc2wag5i4z47bsvlczn22iaf20hll1bb2w";
+    sha256 = "11f8k5vzfq69slzv17vddj135mzlcpmcj3cj3bigq717qb8vd6wl";
   };
 
-  checkInputs = [ which ] ++ (with python3Packages; [ cython pytest ]);
+  checkInputs = [ which ] ++ (with python3Packages; [ cython pytest pytest-trio ]);
   propagatedBuildInputs = with python3Packages; [
-    sqlite apsw pycrypto requests defusedxml dugong llfuse
-    cython pytest pytest-catchlog google_auth google-auth-oauthlib
+    sqlite apsw pycrypto requests defusedxml dugong
+    google-auth google-auth-oauthlib trio pyfuse3
   ];
 
   preBuild = ''
@@ -27,7 +27,7 @@ python3Packages.buildPythonApplication rec {
     pytest tests
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A full-featured file system for online data storage";
     homepage = "https://github.com/s3ql/s3ql/";
     license = licenses.gpl3;
diff --git a/pkgs/tools/backup/sanoid/default.nix b/pkgs/tools/backup/sanoid/default.nix
index 569a07a459b..5c61763f258 100644
--- a/pkgs/tools/backup/sanoid/default.nix
+++ b/pkgs/tools/backup/sanoid/default.nix
@@ -1,46 +1,27 @@
-{ lib, stdenv, fetchFromGitHub, fetchpatch, makeWrapper, coreutils, zfs
-, perlPackages, procps, which, openssh, sudo, mbuffer, pv, lzop, gzip, pigz }:
+{ lib, stdenv, fetchFromGitHub, nixosTests, makeWrapper, zfs
+, perlPackages, procps, which, openssh, mbuffer, pv, lzop, gzip, pigz }:
 
 with lib;
 
 stdenv.mkDerivation rec {
   pname = "sanoid";
-  version = "2.0.3";
+  version = "2.1.0";
 
   src = fetchFromGitHub {
     owner = "jimsalterjrs";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1wmymzqg503nmhw8hrblfs67is1l3ljbk2fjvrqwyb01b7mbn80x";
+    sha256 = "12g5cjx34ys6ix6ivahsbr3bbbi1fmjwdfdk382z6q71w3pyxxzf";
   };
 
-  patches = [
-    # Make sanoid look for programs in PATH
-    (fetchpatch {
-      url = "https://github.com/jimsalterjrs/sanoid/commit/dc2371775afe08af799d3097d47b48182d1716eb.patch";
-      sha256 = "16hlwcbcb8h3ar1ywd2bzr3h3whgbcfk6walmp8z6j74wbx81aav";
-    })
-    # Make findoid look for programs in PATH
-    (fetchpatch {
-      url = "https://github.com/jimsalterjrs/sanoid/commit/44bcd21f269e17765acd1ad0d45161902a205c7b.patch";
-      sha256 = "0zqyl8q5sfscqcc07acw68ysnlnh3nb57cigjfwbccsm0zwlwham";
-    })
-    # Add --cache-dir option
-    (fetchpatch {
-      url = "https://github.com/jimsalterjrs/sanoid/commit/a1f5e4c0c006e16a5047a16fc65c9b3663adb81e.patch";
-      sha256 = "1bb4g2zxrbvf7fvcgzzxsr1cvxzrxg5dzh89sx3h7qlrd6grqhdy";
-    })
-    # Add --run-dir option
-    (fetchpatch {
-      url = "https://github.com/jimsalterjrs/sanoid/commit/59a07f92b4920952cc9137b03c1533656f48b121.patch";
-      sha256 = "11v4jhc36v839gppzvhvzp5jd22904k8xqdhhpx6ghl75yyh4f4s";
-    })
-  ];
-
   nativeBuildInputs = [ makeWrapper ];
   buildInputs = with perlPackages; [ perl ConfigIniFiles CaptureTiny ];
 
+  passthru.tests = nixosTests.sanoid;
+
   installPhase = ''
+    runHook preInstall
+
     mkdir -p "$out/bin"
     mkdir -p "$out/etc/sanoid"
     cp sanoid.defaults.conf "$out/etc/sanoid/sanoid.defaults.conf"
@@ -63,12 +44,14 @@ stdenv.mkDerivation rec {
     wrapProgram "$out/bin/findoid" \
       --prefix PERL5LIB : "$PERL5LIB" \
       --prefix PATH : "${makeBinPath [ "/run/booted-system/sw" zfs ]}"
+
+    runHook postInstall
   '';
 
   meta = {
     description = "A policy-driven snapshot management tool for ZFS filesystems";
     homepage = "https://github.com/jimsalterjrs/sanoid";
-    license = licenses.gpl3;
+    license = licenses.gpl3Plus;
     maintainers = with maintainers; [ lopsided98 ];
     platforms = platforms.all;
   };
diff --git a/pkgs/tools/backup/stenc/default.nix b/pkgs/tools/backup/stenc/default.nix
index 11859c4f8be..b2a53f8ad07 100644
--- a/pkgs/tools/backup/stenc/default.nix
+++ b/pkgs/tools/backup/stenc/default.nix
@@ -1,21 +1,34 @@
-{ stdenv, fetchFromGitHub }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, genericUpdater
+, common-updater-scripts
+, autoreconfHook
+}:
 
 stdenv.mkDerivation rec {
-  version = "1.0.7";
   pname = "stenc";
+  version = "1.0.8";
 
   src = fetchFromGitHub {
     owner = "scsitape";
     repo = "stenc";
-    rev = "${version}";
-    sha256 = "1778m1zcyzyf42k5m496yqh0gv6kqhb0sq5983dhky1fccjl905k";
+    rev = version;
+    sha256 = "0dsmvr1xpwkcd9yawv4c4vna67yag7jb8jcgn2amywz7nkpzmyxd";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  passthru.updateScript = genericUpdater {
+    inherit pname version;
+    versionLister = "${common-updater-scripts}/bin/list-git-tags ${src.meta.homepage}";
   };
 
   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;
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ woffs ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/backup/store-backup/default.nix b/pkgs/tools/backup/store-backup/default.nix
index bd1c0d802aa..afa667ec072 100644
--- a/pkgs/tools/backup/store-backup/default.nix
+++ b/pkgs/tools/backup/store-backup/default.nix
@@ -1,4 +1,4 @@
-{stdenv, which, coreutils, perl, fetchurl, perlPackages, makeWrapper, diffutils , writeScriptBin, bzip2}:
+{lib, stdenv, which, coreutils, perl, fetchurl, makeWrapper, diffutils , writeScriptBin, bzip2}:
 
 # quick usage:
 # storeBackup.pl --sourceDir /home/user --backupDir /tmp/my_backup_destination
@@ -20,7 +20,8 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  buildInputs = [ perl makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
 
   src = fetchurl {
     url = "https://download.savannah.gnu.org/releases/storebackup/storeBackup-${version}.tar.bz2";
@@ -36,12 +37,10 @@ stdenv.mkDerivation rec {
     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@'
+      -e '1 s@/usr/bin/env perl@${perl.withPackages (p: [ p.DBFile ])}/bin/perl@'
 
     for p in $out/bin/*
-      do wrapProgram "$p" \
-      --prefix PERL5LIB ":" "${perlPackages.DBFile}/${perlPackages.perl.libPrefix}" \
-      --prefix PATH ":" "${stdenv.lib.makeBinPath [ which bzip2 ]}"
+      do wrapProgram "$p" --prefix PATH ":" "${lib.makeBinPath [ which bzip2 ]}"
     done
 
     patchShebangs $out
@@ -104,8 +103,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl3Plus;
+    maintainers = [lib.maintainers.marcweber];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/backup/tarsnap/default.nix b/pkgs/tools/backup/tarsnap/default.nix
index 8d23e955095..1b151ece3d9 100644
--- a/pkgs/tools/backup/tarsnap/default.nix
+++ b/pkgs/tools/backup/tarsnap/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, openssl, zlib, e2fsprogs }:
+{ lib, stdenv, fetchurl, openssl, zlib, e2fsprogs }:
 
 let
   zshCompletion = fetchurl {
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
   };
 
   preConfigure = ''
-    configureFlags="--with-bash-completion-dir=$out/etc/bash_completion.d"
+    configureFlags="--with-bash-completion-dir=$out/share/bash-completion/completions"
   '';
 
   patchPhase = ''
@@ -29,13 +29,13 @@ stdenv.mkDerivation rec {
     install -m 444 -D ${zshCompletion} $out/share/zsh/site-functions/_tarsnap
   '';
 
-  buildInputs = [ openssl zlib ] ++ stdenv.lib.optional stdenv.isLinux e2fsprogs ;
+  buildInputs = [ openssl zlib ] ++ 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 ];
+    license     = lib.licenses.unfree;
+    platforms   = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ thoughtpolice roconnor ];
   };
 }
diff --git a/pkgs/tools/backup/tarsnapper/default.nix b/pkgs/tools/backup/tarsnapper/default.nix
index b02ce82291a..a5ad2c3625c 100644
--- a/pkgs/tools/backup/tarsnapper/default.nix
+++ b/pkgs/tools/backup/tarsnapper/default.nix
@@ -17,7 +17,7 @@ python3Packages.buildPythonApplication rec {
     py.test .
   '';
 
-  propagatedBuildInputs = with python3Packages; [ pyyaml dateutil pexpect ];
+  propagatedBuildInputs = with python3Packages; [ pyyaml python-dateutil pexpect ];
 
   patches = [ ./remove-argparse.patch ];
 
diff --git a/pkgs/tools/backup/ugarit-manifest-maker/default.nix b/pkgs/tools/backup/ugarit-manifest-maker/default.nix
index f763296e1d6..8c37a7b72ac 100644
--- a/pkgs/tools/backup/ugarit-manifest-maker/default.nix
+++ b/pkgs/tools/backup/ugarit-manifest-maker/default.nix
@@ -1,4 +1,4 @@
-{ pkgs, stdenv, eggDerivation, fetchegg }:
+{ pkgs, lib, eggDerivation, fetchegg }:
 let
   eggs = import ./eggs.nix { inherit eggDerivation fetchegg; };
 in with pkgs; eggDerivation rec {
@@ -21,7 +21,7 @@ in with pkgs; eggDerivation rec {
     numbers
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.kitten-technologies.co.uk/project/ugarit-manifest-maker/";
     description = "A tool for generating import manifests for Ugarit";
     license = licenses.bsd3;
diff --git a/pkgs/tools/backup/ugarit/default.nix b/pkgs/tools/backup/ugarit/default.nix
index bc69662dc2b..39c11cc0c91 100644
--- a/pkgs/tools/backup/ugarit/default.nix
+++ b/pkgs/tools/backup/ugarit/default.nix
@@ -1,4 +1,4 @@
-{ pkgs, stdenv, eggDerivation, fetchegg }:
+{ pkgs, lib, eggDerivation, fetchegg }:
 let
   eggs = import ./eggs.nix { inherit eggDerivation fetchegg; };
 in with pkgs; eggDerivation rec {
@@ -31,7 +31,7 @@ in with pkgs; eggDerivation rec {
     z3
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.kitten-technologies.co.uk/project/ugarit/";
     description = "A backup/archival system based around content-addressible storage";
     license = licenses.bsd3;
diff --git a/pkgs/tools/backup/wal-e/default.nix b/pkgs/tools/backup/wal-e/default.nix
index af1506bff6e..8e54b58e201 100644
--- a/pkgs/tools/backup/wal-e/default.nix
+++ b/pkgs/tools/backup/wal-e/default.nix
@@ -1,22 +1,24 @@
-{ stdenv, fetchurl, pythonPackages, lzop, postgresql, pv }:
+{ lib, fetchurl, python3Packages, lzop, postgresql, pv }:
 
-pythonPackages.buildPythonApplication rec {
+python3Packages.buildPythonApplication rec {
   pname = "wal-e";
-  version = "0.6.10";
+  version = "1.1.1";
 
   namePrefix = "";
 
   src = fetchurl {
     url = "https://github.com/wal-e/wal-e/archive/v${version}.tar.gz";
-    sha256 = "1hms24xz7wx3b91vv56fhcc3j0cszwqwnmwhka4yl90202hvdir2";
+    sha256 = "5TTd7NTO73+MCJf3dHIcNojjHdoaKJ1T051iW7Kt9Ow=";
   };
 
   # needs tox
   doCheck = false;
 
-  propagatedBuildInputs = [
-    pythonPackages.boto
-    pythonPackages.gevent
+  propagatedBuildInputs = (with python3Packages; [
+    boto
+    gevent
+    google-cloud-storage
+  ]) ++ [
     postgresql
     lzop
     pv
@@ -26,7 +28,7 @@ pythonPackages.buildPythonApplication rec {
     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;
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/backup/wal-g/default.nix b/pkgs/tools/backup/wal-g/default.nix
index 85a6b169f74..e9be1c83005 100644
--- a/pkgs/tools/backup/wal-g/default.nix
+++ b/pkgs/tools/backup/wal-g/default.nix
@@ -1,23 +1,26 @@
-{ lib, buildGoModule, fetchFromGitHub, brotli }:
+{ lib, buildGoModule, fetchFromGitHub, brotli, libsodium }:
 
 buildGoModule rec {
   pname = "wal-g";
-  version = "0.2.17";
+  version = "1.0";
 
   src = fetchFromGitHub {
     owner = "wal-g";
     repo = "wal-g";
     rev = "v${version}";
-    sha256 = "0r6vy2b3xqwa22286srwngk63sq4aza6aj7brwc130vypcps7svp";
+    sha256 = "0al8xg57fh3zqwgmm6lkcnpnisividhqld9jry3sqk2k45856y8j";
   };
 
-  vendorSha256 = "0r73l4kxzldca1vg5mshq6iqsxcrndcbmbp3d7i9pxyb2kig8gv5";
+  vendorSha256 = "0n0ymgcgkjlp0indih8h55jjj6372rdfcq717kwln6sxm4r9mb17";
 
-  buildInputs = [ brotli ];
+  buildInputs = [ brotli libsodium ];
 
   subPackages = [ "main/pg" ];
 
-  buildFlagsArray = [ "-ldflags=-s -w -X github.com/wal-g/wal-g/cmd/pg.WalgVersion=${version} -X github.com/wal-g/wal-g/cmd/pg.GitRevision=${src.rev}" ];
+  buildFlagsArray = [
+    "-tags=brotli libsodium"
+    "-ldflags=-s -w -X github.com/wal-g/wal-g/cmd/pg.WalgVersion=${version} -X github.com/wal-g/wal-g/cmd/pg.GitRevision=${src.rev}"
+  ];
 
   postInstall = ''
     mv $out/bin/pg $out/bin/wal-g
@@ -27,6 +30,6 @@ buildGoModule rec {
     homepage = "https://github.com/wal-g/wal-g";
     license = licenses.asl20;
     description = "An archival restoration tool for PostgreSQL";
-    maintainers = with maintainers; [ ocharles marsam ];
+    maintainers = with maintainers; [ marsam ];
   };
 }
diff --git a/pkgs/tools/backup/zbackup/default.nix b/pkgs/tools/backup/zbackup/default.nix
index 5de58c56f00..12913ed6222 100644
--- a/pkgs/tools/backup/zbackup/default.nix
+++ b/pkgs/tools/backup/zbackup/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, zlib, openssl, protobuf, protobufc, lzo, libunwind } :
+{ lib, stdenv, fetchurl, cmake, zlib, openssl, protobuf, protobufc, lzo, libunwind } :
 stdenv.mkDerivation {
   pname = "zbackup";
   version = "1.4.4";
@@ -11,7 +11,7 @@ stdenv.mkDerivation {
   meta = {
     description = "A versatile deduplicating backup tool";
     homepage = "http://zbackup.org/";
-    platforms = stdenv.lib.platforms.linux;
-    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl2Plus;
   };
 }
diff --git a/pkgs/tools/backup/zfs-prune-snapshots/default.nix b/pkgs/tools/backup/zfs-prune-snapshots/default.nix
index 434c86b343a..f8a3adfecda 100644
--- a/pkgs/tools/backup/zfs-prune-snapshots/default.nix
+++ b/pkgs/tools/backup/zfs-prune-snapshots/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, go-md2man }:
+{ lib, stdenv, fetchFromGitHub, go-md2man }:
 
 stdenv.mkDerivation rec {
   version = "1.1.0";
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
     install -m 644 -D man/zfs-prune-snapshots.1 $out/share/man/man1/zfs-prune-snapshots.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Remove snapshots from one or more zpools that match given criteria";
     homepage = "https://github.com/bahamas10/zfs-prune-snapshots";
     license = licenses.mit;
diff --git a/pkgs/tools/backup/zfs-replicate/default.nix b/pkgs/tools/backup/zfs-replicate/default.nix
index ff2f6062554..fa2f69bb3ef 100644
--- a/pkgs/tools/backup/zfs-replicate/default.nix
+++ b/pkgs/tools/backup/zfs-replicate/default.nix
@@ -1,25 +1,25 @@
 { buildPythonApplication, click, fetchPypi, hypothesis, mypy, pytest
-, pytestcov, pytestrunner, stdenv, stringcase
+, pytest-cov, pytest-runner, lib, stringcase
 }:
 
 buildPythonApplication rec {
   pname = "zfs-replicate";
-  version = "1.1.14";
+  version = "1.2.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0iqyk6q112ylcqrhrgvgbgqqvaikhwk0sb5kc7kg2wwqdc9rfwys";
+    sha256 = "b2cb9d4670a6e12d14a446c10d857862e91af6e4526f607e08b41bde89953bb8";
   };
 
   checkInputs = [
     hypothesis
     mypy
     pytest
-    pytestcov
+    pytest-cov
   ];
 
   buildInputs = [
-    pytestrunner
+    pytest-runner
   ];
 
   propagatedBuildInputs = [
@@ -33,7 +33,7 @@ buildPythonApplication rec {
     pytest --doctest-modules
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/alunduil/zfs-replicate";
     description = "ZFS Snapshot Replication";
     license = licenses.bsd2;
diff --git a/pkgs/tools/backup/zfsbackup/default.nix b/pkgs/tools/backup/zfsbackup/default.nix
index 7b3cbdeaa10..5cdb39c3ecb 100644
--- a/pkgs/tools/backup/zfsbackup/default.nix
+++ b/pkgs/tools/backup/zfsbackup/default.nix
@@ -2,8 +2,8 @@
 
 buildGoPackage rec {
   pname = "zfsbackup";
-  version = "unstable-2019-03-05";
-  rev = "78fea6e99f0a5a4c8513d3a3d1d45fb6750cfddf";
+  version = "unstable-2020-09-30";
+  rev = "092f80846b23e02f99d2aa72d9d889eabfdcb053";
 
   goPackagePath = "github.com/someone1/zfsbackup-go";
 
@@ -11,7 +11,7 @@ buildGoPackage rec {
     owner = "someone1";
     repo = "zfsbackup-go";
     inherit rev;
-    sha256 = "0yalsfvzmcnc8yfzm3r5dikqrp57spwa16l7gbzvgqqcz4vlnw3n";
+    sha256 = "1xiacaf4r9jkx0m8wjfis14cq622yhljldwkflh9ni3khax7dlgi";
   };
 
   goDeps = ./deps.nix;
diff --git a/pkgs/tools/backup/zfsbackup/deps.nix b/pkgs/tools/backup/zfsbackup/deps.nix
index f1fa23755bc..28be9fa141c 100644
--- a/pkgs/tools/backup/zfsbackup/deps.nix
+++ b/pkgs/tools/backup/zfsbackup/deps.nix
@@ -1,12 +1,21 @@
-# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+# 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 = "b9197a057a6cb1129f29cd21ca11d1bb043666d1";
-      sha256 = "0f1p361apzj30i9vcza60ldhhjxff8581gr5xqim7x4d5rgmpwil";
+      url = "https://github.com/googleapis/google-cloud-go";
+      rev = "v0.57.0";
+      sha256 = "0lcq68h0x56qb14yx2df584ad0g9s1s19py813dy9nzqp0bmjig8";
+    };
+  }
+  {
+    goPackagePath = "dmitri.shuralyov.com/gpu/mtl";
+    fetch = {
+      type = "git";
+      url = "https://dmitri.shuralyov.com/gpu/mtl";
+      rev = "666a987793e9";
+      sha256 = "1isd03hgiwcf2ld1rlp0plrnfz7r4i7c5q4kb6hkcd22axnmrv0z";
     };
   }
   {
@@ -14,26 +23,98 @@
     fetch = {
       type = "git";
       url = "https://github.com/Azure/azure-pipeline-go";
-      rev = "232aee85e8e3a6223a11c0943f7df2ae0fac00e4";
+      rev = "v0.2.2";
       sha256 = "1agn2nzmm1dkwggm4w7h4bnrav4n5jrl0vqbqy2s49vqlr8zirn6";
     };
   }
   {
+    goPackagePath = "github.com/Azure/azure-sdk-for-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Azure/azure-sdk-for-go";
+      rev = "v42.3.0";
+      sha256 = "1nqxpifrr8n17irkfzhx253b17cwd15x4vfqxx80l5y7dn0jqavq";
+    };
+  }
+  {
     goPackagePath = "github.com/Azure/azure-storage-blob-go";
     fetch = {
       type = "git";
       url = "https://github.com/Azure/azure-storage-blob-go";
-      rev = "fc700035fe4a7020f50d49f420b3c088aed57e03";
+      rev = "v0.8.0";
       sha256 = "00gsnk9s1rlrakqvcm917hn4r47jannxwp7rkhrb71pamzm46752";
     };
   }
   {
+    goPackagePath = "github.com/BurntSushi/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/toml";
+      rev = "v0.3.1";
+      sha256 = "1fjdwwfzyzllgiwydknf1pwjvy49qxfsczqx5gz3y0izs7as99j6";
+    };
+  }
+  {
+    goPackagePath = "github.com/BurntSushi/xgb";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/xgb";
+      rev = "27f122750802";
+      sha256 = "18lp2x8f5bljvlz0r7xn744f0c9rywjsb9ifiszqqdcpwhsa0kvj";
+    };
+  }
+  {
+    goPackagePath = "github.com/OneOfOne/xxhash";
+    fetch = {
+      type = "git";
+      url = "https://github.com/OneOfOne/xxhash";
+      rev = "v1.2.2";
+      sha256 = "1mjfhrwhvxa48rycjnqpqzm521i38h1hdyz6pdwmhd7xb8j6gwi6";
+    };
+  }
+  {
+    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/armon/consul-api";
+    fetch = {
+      type = "git";
+      url = "https://github.com/armon/consul-api";
+      rev = "eb2c6b5be1b6";
+      sha256 = "1j6fdr1sg36qy4n4xjl7brq739fpm5npq98cmvklzjc9qrx98nk9";
+    };
+  }
+  {
     goPackagePath = "github.com/aws/aws-sdk-go";
     fetch = {
       type = "git";
       url = "https://github.com/aws/aws-sdk-go";
-      rev = "3576772d916b5db1cb5516b772bcdc362349a177";
-      sha256 = "04clzbyg5cmqz98i5hxbik6sd7aclas1707rhaixmmckgisqxb8i";
+      rev = "v1.31.4";
+      sha256 = "07ia78j6j2y139iq9x5gin0fwc77wv8x0zhg47kibykxn4iyx85y";
+    };
+  }
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "v1.0.0";
+      sha256 = "1i1nz1f6g55xi2y3aiaz5kqfgvknarbfl4f0sx4nyyb4s7xb1z9x";
     };
   }
   {
@@ -41,8 +122,161 @@
     fetch = {
       type = "git";
       url = "https://github.com/cenkalti/backoff";
-      rev = "4b4cebaf850ec58f1bb1fec5bdebdf8501c2bc3f";
-      sha256 = "0vwd6nbadrqgaljb5grmw2iljvv963qd15axr5cvvgpd465q3kzc";
+      rev = "v2.2.1";
+      sha256 = "1mf4lsl3rbb8kk42x0mrhzzy4ikqy0jf6nxpzhkr02rdgwh6rjk8";
+    };
+  }
+  {
+    goPackagePath = "github.com/census-instrumentation/opencensus-proto";
+    fetch = {
+      type = "git";
+      url = "https://github.com/census-instrumentation/opencensus-proto";
+      rev = "v0.2.1";
+      sha256 = "19fcx3sc99i5dsklny6r073z5j20vlwn2xqm6di1q3b1xwchzqfj";
+    };
+  }
+  {
+    goPackagePath = "github.com/cespare/xxhash";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cespare/xxhash";
+      rev = "v1.1.0";
+      sha256 = "1qyzlcdcayavfazvi03izx83fvip8h36kis44zr2sg7xf6sx6l4x";
+    };
+  }
+  {
+    goPackagePath = "github.com/chzyer/logex";
+    fetch = {
+      type = "git";
+      url = "https://github.com/chzyer/logex";
+      rev = "v1.1.10";
+      sha256 = "08pbjj3wx9acavlwyr055isa8a5hnmllgdv5k6ra60l5y1brmlq4";
+    };
+  }
+  {
+    goPackagePath = "github.com/chzyer/readline";
+    fetch = {
+      type = "git";
+      url = "https://github.com/chzyer/readline";
+      rev = "2972be24d48e";
+      sha256 = "104q8dazj8yf6b089jjr82fy9h1g80zyyzvp3g8b44a7d8ngjj6r";
+    };
+  }
+  {
+    goPackagePath = "github.com/chzyer/test";
+    fetch = {
+      type = "git";
+      url = "https://github.com/chzyer/test";
+      rev = "a1ea475d72b1";
+      sha256 = "0rns2aqk22i9xsgyap0pq8wi4cfaxsri4d9q6xxhhyma8jjsnj2k";
+    };
+  }
+  {
+    goPackagePath = "github.com/client9/misspell";
+    fetch = {
+      type = "git";
+      url = "https://github.com/client9/misspell";
+      rev = "v0.3.4";
+      sha256 = "1vwf33wsc4la25zk9nylpbp9px3svlmldkm0bha4hp56jws4q9cs";
+    };
+  }
+  {
+    goPackagePath = "github.com/cncf/udpa";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cncf/udpa";
+      rev = "269d4d468f6f";
+      sha256 = "0i1jiaw2k3hlwwmg4hap81vb4s1p25xp9kdfww37v0fbgjariccs";
+    };
+  }
+  {
+    goPackagePath = "github.com/coreos/bbolt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/bbolt";
+      rev = "v1.3.2";
+      sha256 = "13d5l6p6c5wvkr6vn9hkhz9c593qifn7fgx0hg4d6jcvg1y0bnm2";
+    };
+  }
+  {
+    goPackagePath = "github.com/coreos/etcd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/etcd";
+      rev = "v3.3.10";
+      sha256 = "1x2ii1hj8jraba8rbxz6dmc03y3sjxdnzipdvg6fywnlq1f3l3wl";
+    };
+  }
+  {
+    goPackagePath = "github.com/coreos/go-semver";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/go-semver";
+      rev = "v0.2.0";
+      sha256 = "1gghi5bnqj50hfxhqc1cxmynqmh2yk9ii7ab9gsm75y5cp94ymk0";
+    };
+  }
+  {
+    goPackagePath = "github.com/coreos/go-systemd";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/go-systemd";
+      rev = "95778dfbb74e";
+      sha256 = "1s3bg9p78wkixn2bqb2p23wbsqfg949ml6crw2b498s71mwh8rcf";
+    };
+  }
+  {
+    goPackagePath = "github.com/coreos/pkg";
+    fetch = {
+      type = "git";
+      url = "https://github.com/coreos/pkg";
+      rev = "399ea9e2e55f";
+      sha256 = "0nxbn0m7lr4dg0yrwnvlkfiyg3ndv8vdpssjx7b714nivpc6ar0y";
+    };
+  }
+  {
+    goPackagePath = "github.com/cpuguy83/go-md2man";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cpuguy83/go-md2man";
+      rev = "v2.0.0";
+      sha256 = "0r1f7v475dxxgzqci1mxfliwadcrk86ippflx9n411325l4g3ghv";
+    };
+  }
+  {
+    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/dgrijalva/jwt-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dgrijalva/jwt-go";
+      rev = "v3.2.0";
+      sha256 = "08m27vlms74pfy5z79w67f9lk9zkx6a9jd68k3c4msxy75ry36mp";
+    };
+  }
+  {
+    goPackagePath = "github.com/dgryski/go-sip13";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dgryski/go-sip13";
+      rev = "e10d5fee7954";
+      sha256 = "15fyibfas209ljz3f7g07kdmfbl3hhyd9n5n7aq5n5p9m5mn41d6";
+    };
+  }
+  {
+    goPackagePath = "github.com/dnaeon/go-vcr";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dnaeon/go-vcr";
+      rev = "v1.0.1";
+      sha256 = "1d0kpqr12qrqlamz5a47bp05mx49za2v6l1k7c6z71xahfmb7v2d";
     };
   }
   {
@@ -50,17 +284,125 @@
     fetch = {
       type = "git";
       url = "https://github.com/dustin/go-humanize";
-      rev = "9f541cc9db5d55bce703bd99987c9d5cb8eea45e";
+      rev = "v1.0.0";
       sha256 = "1kqf1kavdyvjk7f8kx62pnm7fbypn9z1vbf8v2qdh3y7z7a0cbl3";
     };
   }
   {
+    goPackagePath = "github.com/envoyproxy/go-control-plane";
+    fetch = {
+      type = "git";
+      url = "https://github.com/envoyproxy/go-control-plane";
+      rev = "v0.9.4";
+      sha256 = "0m0crzx70lp7vz13v20wxb1fcfdnzp7h3mkh3bn6a8mbfz6w5asj";
+    };
+  }
+  {
+    goPackagePath = "github.com/envoyproxy/protoc-gen-validate";
+    fetch = {
+      type = "git";
+      url = "https://github.com/envoyproxy/protoc-gen-validate";
+      rev = "v0.1.0";
+      sha256 = "0kxd3wwh3xwqk0r684hsy281xq4y71cd11d4q2hspcjbnlbwh7cy";
+    };
+  }
+  {
+    goPackagePath = "github.com/fsnotify/fsnotify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fsnotify/fsnotify";
+      rev = "v1.4.7";
+      sha256 = "07va9crci0ijlivbb7q57d2rz9h27zgn2fsm60spjsqpdbvyrx4g";
+    };
+  }
+  {
+    goPackagePath = "github.com/ghodss/yaml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ghodss/yaml";
+      rev = "v1.0.0";
+      sha256 = "0skwmimpy7hlh7pva2slpcplnm912rp3igs98xnqmn859kwa5v8g";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-gl/glfw";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-gl/glfw";
+      rev = "6f7a984d4dc4";
+      sha256 = "1nyv7h08qf4dp8w9pmcnrc6vv9bkwj8fil6pz0mkbss5hf4i8xcq";
+    };
+  }
+  {
+    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.4.0";
+      sha256 = "06smxc112xmixz78nyvk3b2hmc7wasf2sl5vxj1xz62kqcq9lzm9";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-sql-driver/mysql";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-sql-driver/mysql";
+      rev = "v1.5.0";
+      sha256 = "11x0m9yf3kdnf6981182r824psgxwfaqhn3x3in4yiidp0w0hk3v";
+    };
+  }
+  {
+    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.1";
+      sha256 = "06yqa6h0kw3gr5pc3qmas7f7435a96zf7iw7p0l00r2hqf6fqq6m";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/glog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/glog";
+      rev = "23def4e6c14b";
+      sha256 = "0jb2834rw5sykfr937fxi8hxi2zy80sj2bdn9b3jb4b26ksqng30";
+    };
+  }
+  {
     goPackagePath = "github.com/golang/groupcache";
     fetch = {
       type = "git";
       url = "https://github.com/golang/groupcache";
-      rev = "404acd9df4cc9859d64fb9eed42e5c026187287a";
-      sha256 = "1zmhdr758wn0kfh5xr4hg026f9qvy00s3midb5iqnpx1kh647j2g";
+      rev = "8c9f03a8e57e";
+      sha256 = "0vjjr79r32icjzlb05wn02k59av7jx0rn1jijml8r4whlg7dnkfh";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/mock";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/mock";
+      rev = "v1.4.3";
+      sha256 = "1p37xnja1dgq5ykx24n7wincwz2gahjh71b95p8vpw7ss2g8j8wx";
     };
   }
   {
@@ -68,8 +410,53 @@
     fetch = {
       type = "git";
       url = "https://github.com/golang/protobuf";
-      rev = "1680a479a2cfb3fa22b972af7e36d0a0fde47bf8";
-      sha256 = "1w0aivn2rqf7bcpz84nbn0alh1q3nglqgp7il835fmvvc94rrkqn";
+      rev = "v1.4.1";
+      sha256 = "0w7ks4vffnnkp0miwgc3chrsnmya45lzvpahb2wmw0jwhdp5kdx7";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/btree";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/btree";
+      rev = "v1.0.0";
+      sha256 = "0ba430m9fbnagacp57krgidsyrgp3ycw5r7dj71brgp5r52g82p6";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/go-cmp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/go-cmp";
+      rev = "v0.4.0";
+      sha256 = "1x5pvl3fb5sbyng7i34431xycnhmx8xx94gq2n19g6p0vz68z2v2";
+    };
+  }
+  {
+    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 = "fc25d7d30c6d";
+      sha256 = "0ba28qx2i1bi6n6x5g670v8hmqavwj8lwl8psnc6vzagmdhjw0vg";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/renameio";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/renameio";
+      rev = "v0.1.0";
+      sha256 = "1ki2x5a9nrj17sn092d6n4zr29lfg5ydv4xz5cp58z6cw8ip43jx";
     };
   }
   {
@@ -77,8 +464,107 @@
     fetch = {
       type = "git";
       url = "https://github.com/googleapis/gax-go";
-      rev = "a170e83f27ee4e20c66e51b66a99a4a349a1b75a";
-      sha256 = "0a5ir1v5cd6m40hscqy0qpc3ibd703kiw419m66ddxnkvzykvp0i";
+      rev = "v2.0.5";
+      sha256 = "1lxawwngv6miaqd25s3ba0didfzylbwisd2nz7r4gmbmin6jsjrx";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/websocket";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/websocket";
+      rev = "v1.4.0";
+      sha256 = "00i4vb31nsfkzzk7swvx3i75r2d960js3dri1875vypk3v2s0pzk";
+    };
+  }
+  {
+    goPackagePath = "github.com/grpc-ecosystem/go-grpc-middleware";
+    fetch = {
+      type = "git";
+      url = "https://github.com/grpc-ecosystem/go-grpc-middleware";
+      rev = "v1.0.0";
+      sha256 = "0lwgxih021xfhfb1xb9la5f98bpgpaiz63sbllx77qwwl2rmhrsp";
+    };
+  }
+  {
+    goPackagePath = "github.com/grpc-ecosystem/go-grpc-prometheus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/grpc-ecosystem/go-grpc-prometheus";
+      rev = "v1.2.0";
+      sha256 = "1lzk54h7np32b3acidg1ggbn8ppbnns0m71gcg9d1qkkdh8zrijl";
+    };
+  }
+  {
+    goPackagePath = "github.com/grpc-ecosystem/grpc-gateway";
+    fetch = {
+      type = "git";
+      url = "https://github.com/grpc-ecosystem/grpc-gateway";
+      rev = "v1.9.0";
+      sha256 = "1r4y48c76yxc2hpqszfjirvh7zxjb6z72qmk95li12ar79dhv3dy";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/golang-lru";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/golang-lru";
+      rev = "v0.5.1";
+      sha256 = "13f870cvk161bzjj6x41l45r5x9i1z9r2ymwmvm7768kg08zznpy";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/hcl";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/hcl";
+      rev = "v1.0.0";
+      sha256 = "0q6ml0qqs0yil76mpn4mdx4lp94id8vbv575qm60jzl1ijcl5i66";
+    };
+  }
+  {
+    goPackagePath = "github.com/ianlancetaylor/demangle";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ianlancetaylor/demangle";
+      rev = "5e5cf60278f6";
+      sha256 = "1fhjk11cip9c3jyj1byz9z77n6n2rlxmyz0xjx1zpn1da3cvri75";
+    };
+  }
+  {
+    goPackagePath = "github.com/inconshreveable/mousetrap";
+    fetch = {
+      type = "git";
+      url = "https://github.com/inconshreveable/mousetrap";
+      rev = "v1.0.0";
+      sha256 = "1mn0kg48xkd74brf48qf5hzp0bc6g8cf5a77w895rl3qnlpfw152";
+    };
+  }
+  {
+    goPackagePath = "github.com/jmespath/go-jmespath";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jmespath/go-jmespath";
+      rev = "v0.3.0";
+      sha256 = "12qgp7yb7yfjxhd311kb820fcjmg7gd4hp2fc4v6x8s7121pwnjp";
+    };
+  }
+  {
+    goPackagePath = "github.com/jonboulle/clockwork";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jonboulle/clockwork";
+      rev = "v0.1.0";
+      sha256 = "1pqxhsdavbp1n5grgyx2j6ylvql2fzn2cvpsgkc8li69dil7sibl";
+    };
+  }
+  {
+    goPackagePath = "github.com/jstemmer/go-junit-report";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jstemmer/go-junit-report";
+      rev = "v0.9.1";
+      sha256 = "1knip80yir1cdsjlb3rzy0a4w3kl4ljpiciaz6hjzwqlfhnv7bkw";
     };
   }
   {
@@ -86,8 +572,35 @@
     fetch = {
       type = "git";
       url = "https://github.com/juju/ratelimit";
-      rev = "f60b32039441cd828005f82f3a54aafd00bc9882";
-      sha256 = "1qbjcm4y53awkqmpxb1nm9c1xdylc44vph4mn30qjb5wrcqy7c1r";
+      rev = "v1.0.1";
+      sha256 = "0ppwvwbh9jdpdk4f9924vw373cpfz5g5ad10c707p22a984vanrz";
+    };
+  }
+  {
+    goPackagePath = "github.com/julienschmidt/httprouter";
+    fetch = {
+      type = "git";
+      url = "https://github.com/julienschmidt/httprouter";
+      rev = "v1.2.0";
+      sha256 = "1k8bylc9s4vpvf5xhqh9h246dl1snxrzzz0614zz88cdh8yzs666";
+    };
+  }
+  {
+    goPackagePath = "github.com/kisielk/errcheck";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kisielk/errcheck";
+      rev = "v1.1.0";
+      sha256 = "19vd4rxmqbk5lpiav3pf7df3yjlz0l0dwx9mn0gjq5f998iyhy6y";
+    };
+  }
+  {
+    goPackagePath = "github.com/kisielk/gotool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kisielk/gotool";
+      rev = "v1.0.0";
+      sha256 = "14af2pa0ssyp8bp2mvdw184s5wcysk6akil3wzxmr05wwy951iwn";
     };
   }
   {
@@ -95,8 +608,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/klauspost/compress";
-      rev = "30993c63e1b02b47dd3878e74c8db50833706ecc";
-      sha256 = "07d0r56ic91rdd0xvfr7zpn015kl6g9jwlgq5avczbz4fnyx5x8m";
+      rev = "v1.10.6";
+      sha256 = "0jnm5mjazxkjwzb7z6sjlqm2l68z4h4xjhir2lgfkf04rj4l290s";
     };
   }
   {
@@ -104,8 +617,53 @@
     fetch = {
       type = "git";
       url = "https://github.com/klauspost/pgzip";
-      rev = "083b1c3f84dd6486588802e5ce295de3a7f41a8b";
-      sha256 = "0ddigh096fz3lixbdm679hjvnfivbpkijrclk5sn9091hyj38pb3";
+      rev = "v1.2.4";
+      sha256 = "0mnhfdn0isbkra455jynqjbmrwymx09shlbzbyvgfycih3nbrif0";
+    };
+  }
+  {
+    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/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";
     };
   }
   {
@@ -113,8 +671,17 @@
     fetch = {
       type = "git";
       url = "https://github.com/kurin/blazer";
-      rev = "cf2f27cc0be3dac3c1a94c3c8b76834ce741439e";
-      sha256 = "02nwxrczg8c9zj3hdmbyg458qvhfwl60ci1pjl7f0y07kgiv1rg3";
+      rev = "v0.5.3";
+      sha256 = "18jsq7n31ycvaivpvyksbddj82spw4g29w6dx92x2wab2hzbc7ik";
+    };
+  }
+  {
+    goPackagePath = "github.com/magiconair/properties";
+    fetch = {
+      type = "git";
+      url = "https://github.com/magiconair/properties";
+      rev = "v1.8.0";
+      sha256 = "1a10362wv8a8qwb818wygn2z48lgzch940hvpv81hv8gc747ajxn";
     };
   }
   {
@@ -122,8 +689,17 @@
     fetch = {
       type = "git";
       url = "https://github.com/mattn/go-ieproxy";
-      rev = "f9202b1cfdeb0c82ddd3dc1e8e9cd94b3c0c1b13";
-      sha256 = "0r8c17znlv32750qy3p96fbyp8ys8xfdccpzv0z9lr2y88jnzhpz";
+      rev = "v0.0.1";
+      sha256 = "0x1ijwwp22s20vjbca5ac7y7bx2jp6jizzqa38ks4943q7vi4w09";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "v1.0.1";
+      sha256 = "1d0c1isd2lk9pnfq2nk0aih356j30k3h1gi2w0ixsivi5csl7jya";
     };
   }
   {
@@ -131,8 +707,35 @@
     fetch = {
       type = "git";
       url = "https://github.com/miolini/datacounter";
-      rev = "aa48df3a02c1fbcd3040271f631887991c3071fb";
-      sha256 = "12ldh5jhafjhh3jvh979mldwygkkcnm97axs7dhlai6gqwlhls87";
+      rev = "v1.0.2";
+      sha256 = "0lqhdb9glx65ycjjrqqqpd28zi95qnr2sdz93y6fma0khss46c5f";
+    };
+  }
+  {
+    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/mitchellh/mapstructure";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/mapstructure";
+      rev = "v1.1.2";
+      sha256 = "03bpv28jz9zhn4947saqwi328ydj7f6g6pf1m2d4m5zdh5jlfkrr";
+    };
+  }
+  {
+    goPackagePath = "github.com/mwitkow/go-conntrack";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mwitkow/go-conntrack";
+      rev = "cc309e4a2223";
+      sha256 = "0nbrnpk7bkmqg9mzwsxlm0y8m7s9qd9phr1q30qlx2qmdmz7c1mf";
     };
   }
   {
@@ -140,8 +743,17 @@
     fetch = {
       type = "git";
       url = "https://github.com/nightlyone/lockfile";
-      rev = "0ad87eef1443f64d3d8c50da647e2b1552851124";
-      sha256 = "19vfswcvdy937da7w6hap3wp83drj5a084sqszy8r2ph4fbkln41";
+      rev = "v1.0.0";
+      sha256 = "0jzlngank7yaq5pl5mipsfglmalv9x2b9yhqr78w5dmx4hikh7kr";
+    };
+  }
+  {
+    goPackagePath = "github.com/oklog/ulid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/oklog/ulid";
+      rev = "v1.3.1";
+      sha256 = "0hybwyid820n80axrk863k2py93hbqlq6hxhf84ppmz0qd0ys0gq";
     };
   }
   {
@@ -149,17 +761,170 @@
     fetch = {
       type = "git";
       url = "https://github.com/op/go-logging";
-      rev = "970db520ece77730c7e4724c61121037378659d9";
+      rev = "970db520ece7";
       sha256 = "1cpna2x5l071z1vrnk7zipdkka8dzwsjyx7m79xk0lr08rip0kcj";
     };
   }
   {
+    goPackagePath = "github.com/pelletier/go-toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pelletier/go-toml";
+      rev = "v1.2.0";
+      sha256 = "1fjzpcjng60mc3a4b2ql5a00d5gah84wj740dabv9kq67mpg8fxy";
+    };
+  }
+  {
     goPackagePath = "github.com/pkg/errors";
     fetch = {
       type = "git";
       url = "https://github.com/pkg/errors";
-      rev = "27936f6d90f9c8e1145f11ed52ffffbfdb9e0af7";
-      sha256 = "0yzmgi6g4ak4q8y7w6x0n5cbinlcn8yc3gwgzy4yck00qdn25d6y";
+      rev = "v0.9.1";
+      sha256 = "1761pybhc2kqr6v5fm8faj08x9bql8427yqg6vnfv6nhrasx1mwq";
+    };
+  }
+  {
+    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 = "v0.9.3";
+      sha256 = "1608rm1y2p3iv8k2x7wyc6hshvpbfkv2k77hy0x870syms1g3g1p";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "14fe0d1b01d4";
+      sha256 = "0zdmk6rbbx39cvfz0r59v2jg5sg9yd02b4pds5n5llgvivi99550";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev = "v0.4.0";
+      sha256 = "00008pczafy982m59n1j31pnp41f4grbc2c40jccp52xg3m5klmr";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "5867b95ac084";
+      sha256 = "1rahdk62ajj4zpfb3mgzjqip773la9fb0m87m7s9a0b39l3fmzvr";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/tsdb";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/tsdb";
+      rev = "v0.7.1";
+      sha256 = "1c1da8i5byvhh4fp3vqjfb65aaksjskn3ggb8wg9hcfzjrhgpz04";
+    };
+  }
+  {
+    goPackagePath = "github.com/rogpeppe/fastuuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rogpeppe/fastuuid";
+      rev = "6724a57986af";
+      sha256 = "12s65phfx6hxj4v0b5kj8akgrbf5mxpa101fyzw03h6hld1f70cz";
+    };
+  }
+  {
+    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/russross/blackfriday";
+    fetch = {
+      type = "git";
+      url = "https://github.com/russross/blackfriday";
+      rev = "v2.0.1";
+      sha256 = "0nlz7isdd4rgnwzs68499hlwicxz34j2k2a0b8jy0y7ycd2bcr5j";
+    };
+  }
+  {
+    goPackagePath = "github.com/satori/go.uuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/satori/go.uuid";
+      rev = "v1.2.0";
+      sha256 = "1j4s5pfg2ldm35y8ls8jah4dya2grfnx2drb4jcbjsyrp4cm5yfb";
+    };
+  }
+  {
+    goPackagePath = "github.com/shurcooL/sanitized_anchor_name";
+    fetch = {
+      type = "git";
+      url = "https://github.com/shurcooL/sanitized_anchor_name";
+      rev = "v1.0.0";
+      sha256 = "1gv9p2nr46z80dnfjsklc6zxbgk96349sdsxjz05f3z6wb6m5l8f";
+    };
+  }
+  {
+    goPackagePath = "github.com/sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus";
+      rev = "v1.2.0";
+      sha256 = "0r6334x2bls8ddznvzaldx4g88msjjns4mlks95rqrrg7h0ijigg";
+    };
+  }
+  {
+    goPackagePath = "github.com/soheilhy/cmux";
+    fetch = {
+      type = "git";
+      url = "https://github.com/soheilhy/cmux";
+      rev = "v0.1.4";
+      sha256 = "1f736g68d9vwlyfb6g0fxkr0r875369xafk30cz8kaq5niaqwv0h";
+    };
+  }
+  {
+    goPackagePath = "github.com/spaolacci/murmur3";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spaolacci/murmur3";
+      rev = "f09979ecbc72";
+      sha256 = "1lv3zyz3jy2d76bhvvs8svygx66606iygdvwy5cwc0p5z8yghq25";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/afero";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/afero";
+      rev = "v1.1.2";
+      sha256 = "0miv4faf5ihjfifb1zv6aia6f6ik7h1s4954kcb8n6ixzhx9ck6k";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/cast";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cast";
+      rev = "v1.3.0";
+      sha256 = "0xq1ffqj8y8h7dcnm0m9lfrh0ga7pssnn2c1dnr09chqbpn4bdc5";
     };
   }
   {
@@ -167,8 +932,17 @@
     fetch = {
       type = "git";
       url = "https://github.com/spf13/cobra";
-      rev = "8a4b46fadf756f30eff047abf2f8edba4eac6fef";
-      sha256 = "0f9pxni3lghl205wrnssw58iliqifrxcdabrbww20887zwn3ki7q";
+      rev = "v1.0.0";
+      sha256 = "0vbppqqhby302a5ayn0296jqr71qkcd4c9am7wzsk6z71fwdsa7h";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/jwalterweatherman";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/jwalterweatherman";
+      rev = "v1.0.0";
+      sha256 = "093fmmvavv84pv4q84hav7ph3fmrq87bvspjj899q0qsx37yvdr8";
     };
   }
   {
@@ -176,17 +950,125 @@
     fetch = {
       type = "git";
       url = "https://github.com/spf13/pflag";
-      rev = "2e9d26c8c37aae03e3f9d4e90b7116f5accb7cab";
+      rev = "v1.0.5";
       sha256 = "0gpmacngd0gpslnbkzi263f5ishigzgh6pbdv9hp092rnjl4nd31";
     };
   }
   {
+    goPackagePath = "github.com/spf13/viper";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/viper";
+      rev = "v1.4.0";
+      sha256 = "1zpzxvn13wpvbblbbn73svaq39zgxfjqhci9d68g3qf309pcfy19";
+    };
+  }
+  {
+    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.5.1";
+      sha256 = "09r89m1wy4cjv2nps1ykp00qjpi0531r07q3s34hr7m6njk4srkl";
+    };
+  }
+  {
+    goPackagePath = "github.com/tmc/grpc-websocket-proxy";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tmc/grpc-websocket-proxy";
+      rev = "0ad062ec5ee5";
+      sha256 = "1anw4v9wspnw9xf2z5r9w0sszwjklyanl0l85wgg6nxak9gnrqp4";
+    };
+  }
+  {
+    goPackagePath = "github.com/ugorji/go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ugorji/go";
+      rev = "v1.1.4";
+      sha256 = "0ma2qvn5wqvjidpdz74x832a813qnr1cxbx6n6n125ak9b3wbn5w";
+    };
+  }
+  {
+    goPackagePath = "github.com/xiang90/probing";
+    fetch = {
+      type = "git";
+      url = "https://github.com/xiang90/probing";
+      rev = "43a291ad63a2";
+      sha256 = "1z22ms16j5j42775mf31isanwx2pwr1d8wqw8006dczjv36qnz5i";
+    };
+  }
+  {
+    goPackagePath = "github.com/xordataexchange/crypt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/xordataexchange/crypt";
+      rev = "b2862e3d0a77";
+      sha256 = "04q3856anpzl4gdfgmg7pbp9cx231nkz3ymq2xp27rnmmwhfxr8y";
+    };
+  }
+  {
+    goPackagePath = "github.com/yuin/goldmark";
+    fetch = {
+      type = "git";
+      url = "https://github.com/yuin/goldmark";
+      rev = "v1.1.27";
+      sha256 = "1872cqnii0kwiqcy81yin0idvjy5mdy4zlzz0csb319lcjs3b923";
+    };
+  }
+  {
+    goPackagePath = "go.etcd.io/bbolt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/etcd-io/bbolt";
+      rev = "v1.3.2";
+      sha256 = "13d5l6p6c5wvkr6vn9hkhz9c593qifn7fgx0hg4d6jcvg1y0bnm2";
+    };
+  }
+  {
     goPackagePath = "go.opencensus.io";
     fetch = {
       type = "git";
       url = "https://github.com/census-instrumentation/opencensus-go";
-      rev = "3b5a343282fe4b4fccdb0f24cbd1d7169d20858a";
-      sha256 = "0qzx8p019r4qzm0knvs3kcx5vc9qg6ksgf1amk5djr1h00w460aw";
+      rev = "v0.22.3";
+      sha256 = "0xj16iq5jp26hi2py7lsd8cvqh651fgn39y05gzvjdi88d9xd3nw";
+    };
+  }
+  {
+    goPackagePath = "go.uber.org/atomic";
+    fetch = {
+      type = "git";
+      url = "https://github.com/uber-go/atomic";
+      rev = "v1.4.0";
+      sha256 = "0c6yzx15c20719xii3dm0vyjd8i9jx45m0wh5yp1zf29b0gbljcy";
+    };
+  }
+  {
+    goPackagePath = "go.uber.org/multierr";
+    fetch = {
+      type = "git";
+      url = "https://github.com/uber-go/multierr";
+      rev = "v1.1.0";
+      sha256 = "1slfc6syvw8cvr6rbrjsy6ja5w8gsx0f8aq8qm16rp2x5c2pj07w";
+    };
+  }
+  {
+    goPackagePath = "go.uber.org/zap";
+    fetch = {
+      type = "git";
+      url = "https://github.com/uber-go/zap";
+      rev = "v1.10.0";
+      sha256 = "10hdzr1rghwbsl6bbd30779dx44fh9mg9pq8d2cgqlknqxxpvpvr";
     };
   }
   {
@@ -194,8 +1076,53 @@
     fetch = {
       type = "git";
       url = "https://go.googlesource.com/crypto";
-      rev = "87dc89f01550277dc22b74ffcf4cd89fa2f40f4c";
-      sha256 = "0z4i1m2yn3f31ci7wvcm2rxkx2yiv7a78mfzklncmsz2k97rlh2g";
+      rev = "06a226fb4e37";
+      sha256 = "0fdig6jx81g7a44dnxggibl909wchsj4nakmmhhz7db36sl0d7m5";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/exp";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/exp";
+      rev = "6cc2880d07d6";
+      sha256 = "1iia6hiif6hcp0cg1i6nq63qg0pmvm2kq24pf2r2il3597rfmlgy";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/image";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/image";
+      rev = "cff245a6509b";
+      sha256 = "0hiznlkiaay30acwvvyq8g6bm32r7bc6gv47pygrcxqpapasbz84";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/lint";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/lint";
+      rev = "738671d3881b";
+      sha256 = "0jkiz4py59jjnkyxbxifpf7bsar11lbgmj5jiq2kic5k03shkn9c";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/mobile";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/mobile";
+      rev = "d2bd2a29d028";
+      sha256 = "1nv6vvhnjr01nx9y06q46ww87dppdwpbqrlsfg1xf2587wxl8xiv";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/mod";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/mod";
+      rev = "v0.2.0";
+      sha256 = "1fp6885dclq77mh73v7i54v2b9llpv4di193zc8vmsbbkkc483cl";
     };
   }
   {
@@ -203,8 +1130,8 @@
     fetch = {
       type = "git";
       url = "https://go.googlesource.com/net";
-      rev = "da9a3fd4c5820e74b24a6cb7fb438dc9b0dd377c";
-      sha256 = "0iavs400534jn7drmdphx0f18vgg060p2r59xw5d85ji1l5rin1l";
+      rev = "7e3656a0809f";
+      sha256 = "1rmj59bd0hvf8cbp42c0y8y38prs5ill1zszhqp9i8m86cvkfqk9";
     };
   }
   {
@@ -212,8 +1139,8 @@
     fetch = {
       type = "git";
       url = "https://go.googlesource.com/oauth2";
-      rev = "0f29369cfe4552d0e4bcddc57cc75f4d7e672a33";
-      sha256 = "06jwpvx0x2gjn2y959drbcir5kd7vg87k0r1216abk6rrdzzrzi2";
+      rev = "bf48bf16ab8d";
+      sha256 = "1sirdib60zwmh93kf9qrx51r8544k1p9rs5mk0797wibz3m4mrdg";
     };
   }
   {
@@ -221,8 +1148,8 @@
     fetch = {
       type = "git";
       url = "https://go.googlesource.com/sync";
-      rev = "cd5d95a43a6e21273425c7ae415d3df9ea832eeb";
-      sha256 = "1nqkyz2y1qvqcma52ijh02s8aiqmkfb95j08f6zcjhbga3ds6hds";
+      rev = "43a5402ce75a";
+      sha256 = "0j6zrrb81qjr1926kkwmn0di9a0jn8qyjd9dw614rfkihxgq1vsm";
     };
   }
   {
@@ -230,8 +1157,8 @@
     fetch = {
       type = "git";
       url = "https://go.googlesource.com/sys";
-      rev = "b09406accb4736d857a32bf9444cd7edae2ffa79";
-      sha256 = "00lbhsr2p3mi2n35mv3yy6lmgzjjav45yv9bmrxgyahbac5qnz5m";
+      rev = "7e40ca221e25";
+      sha256 = "1fkhs1sn6prfsqaj70kya2gn1sqqa85lmgff6j6s7027zc1yjvqa";
     };
   }
   {
@@ -239,26 +1166,62 @@
     fetch = {
       type = "git";
       url = "https://go.googlesource.com/text";
-      rev = "3d0f7978add91030e5e8976ff65ccdd828286cba";
-      sha256 = "0iagl5icarfrbiv6m3dhqy51r30cnl07r66im5c88dz7lrvpy5z3";
+      rev = "v0.3.2";
+      sha256 = "0flv9idw0jm5nm8lx25xqanbkqgfiym6619w575p7nrdh0riqwqh";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/time";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/time";
+      rev = "555d28b269f0";
+      sha256 = "1rhl4lyz030kwfsg63yk83yd3ivryv1afmzdz9sxbhcj84ym6h4r";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "2bc93b1c0c88";
+      sha256 = "10sg7nvw40f2d6hxmsy4nvhmawbidk022v3arbh8acsjxglw84zs";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/xerrors";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/xerrors";
+      rev = "9bdfabe68543";
+      sha256 = "1yjfi1bk9xb81lqn85nnm13zz725wazvrx3b50hx19qmwg7a4b0c";
     };
   }
   {
     goPackagePath = "google.golang.org/api";
     fetch = {
       type = "git";
-      url = "https://code.googlesource.com/google-api-go-client";
-      rev = "e6ade80c6e2a122a6588f9f827207dcb99da433e";
-      sha256 = "1mk0ab6f2dyx1lack436zdhspq1hgip2s5m3pqjrqk18s8vvn4bd";
+      url = "https://github.com/googleapis/google-api-go-client";
+      rev = "v0.25.0";
+      sha256 = "0bfpii160ns1pl3iqc38h5db258mv58igf2ifglds3dajgsj2qrr";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/appengine";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/appengine";
+      rev = "v1.6.6";
+      sha256 = "15c38h6fbv06cnkr6yknygfrpibyms2mya4w0l29kaxf42jn1qi5";
     };
   }
   {
     goPackagePath = "google.golang.org/genproto";
     fetch = {
       type = "git";
-      url = "https://github.com/google/go-genproto";
-      rev = "548a555dbc03994223efbaba0090152849259498";
-      sha256 = "15sbfwrh6m18fn3n369cb5c8qsmw17wibwmjssblgp64gvmx5b18";
+      url = "https://github.com/googleapis/go-genproto";
+      rev = "f5ebc3bea380";
+      sha256 = "1v5dyp6g35rwjwx1ixjy7yh1hay4n7ya5aq5h4ckvd9h0j7rw5sz";
     };
   }
   {
@@ -266,8 +1229,98 @@
     fetch = {
       type = "git";
       url = "https://github.com/grpc/grpc-go";
-      rev = "7c8e60372e19da88fb3fe8ac6a8de781eef7f547";
-      sha256 = "03fb7j1gfglzp77hkhlm8dgg3if1j1pvry0nhx915ww0hmz6sr00";
+      rev = "v1.29.1";
+      sha256 = "1465947r6536si36cl2ppx7929la9zba1y6xfczfyp4kgf8988hf";
+    };
+  }
+  {
+    goPackagePath = "google.golang.org/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/protobuf";
+      rev = "v1.22.0";
+      sha256 = "0n7lc4m7kfvj01glc0gnjy0zsnsic7cxnbvlajy0h14cxbab87pj";
+    };
+  }
+  {
+    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/errgo.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/errgo.v2";
+      rev = "v2.1.0";
+      sha256 = "065mbihiy7q67wnql0bzl9y1kkvck5ivra68254zbih52jxwrgr2";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/resty.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/resty.v1";
+      rev = "v1.12.0";
+      sha256 = "062mn735rqzhha5ag07z4gz08hxzrfm2yx067jfmaaxmb6797lmp";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "v2.2.2";
+      sha256 = "01wj12jzsdqlnidpyjssmj0r4yavlqy7dwrg7adqd8dicjc4ncsa";
+    };
+  }
+  {
+    goPackagePath = "honnef.co/go/tools";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dominikh/go-tools";
+      rev = "v0.0.1-2020.1.3";
+      sha256 = "0pvi1mzhy6zgx4zfgdypbl4zhvgg11hl5qv7blf2qs0a96j2djhf";
+    };
+  }
+  {
+    goPackagePath = "rsc.io/binaryregexp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rsc/binaryregexp";
+      rev = "v0.2.0";
+      sha256 = "1kar0myy85waw418zslviwx8846zj0m9cmqkxjx0fvgjdi70nc4b";
+    };
+  }
+  {
+    goPackagePath = "rsc.io/quote";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rsc/quote";
+      rev = "v3.1.0";
+      sha256 = "0nvv97hwwrl1mx5gzsbdm1ndnwpg3m7i2jb10ig9wily7zmvki0i";
+    };
+  }
+  {
+    goPackagePath = "rsc.io/sampler";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rsc/sampler";
+      rev = "v1.3.0";
+      sha256 = "0byxk2ynba50py805kcvbvjzh59l1r308i1xgyzpw6lff4xx9xjh";
     };
   }
 ]
diff --git a/pkgs/tools/backup/zfsnap/default.nix b/pkgs/tools/backup/zfsnap/default.nix
index 89d7414246c..36e369b4f30 100644
--- a/pkgs/tools/backup/zfsnap/default.nix
+++ b/pkgs/tools/backup/zfsnap/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, coreutils, installShellFiles }:
+{ lib, stdenv, fetchFromGitHub, coreutils, installShellFiles }:
 
 stdenv.mkDerivation rec {
   version = "2.0.0-beta3";
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
     installShellCompletion completion/*.{bash,zsh}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A portable, performant script to make rolling ZFS snapshots easy";
     homepage = "https://github.com/zfsnap/zfsnap";
     license = licenses.bsd3;
diff --git a/pkgs/tools/backup/znapzend/default.nix b/pkgs/tools/backup/znapzend/default.nix
index 5ca460beb3b..9c3e4fca95d 100644
--- a/pkgs/tools/backup/znapzend/default.nix
+++ b/pkgs/tools/backup/znapzend/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fetchurl, perl, perlPackages, wget, autoconf, automake, autoreconfHook }:
+{ lib, stdenv, fetchFromGitHub, fetchurl, perl, perlPackages, wget, autoconf, automake, autoreconfHook }:
 
 let
   # when upgrade znapzend, check versions of Perl libs here: https://github.com/oetiker/znapzend/blob/master/cpanfile
@@ -21,6 +21,11 @@ let
     propagatedBuildInputs = [ perlPackages.IOPipely Mojolicious-8-35 ];
   };
 
+  perl' = perl.withPackages (p:
+    [ MojoIOLoopForkCall-0-20
+      p.TAPParserSourceHandlerpgTAP
+    ]);
+
   version = "0.20.0";
   checksum = "15lb5qwksa508m9bj6d3n4rrjpakfaas9qxspg408bcqfp7pqjw3";
 in
@@ -35,7 +40,7 @@ stdenv.mkDerivation {
     sha256 = checksum;
   };
 
-  buildInputs = [ wget perl MojoIOLoopForkCall-0-20 perlPackages.TAPParserSourceHandlerpgTAP ];
+  buildInputs = [ wget perl' ];
 
   nativeBuildInputs = [ autoconf automake autoreconfHook ];
 
@@ -53,31 +58,7 @@ stdenv.mkDerivation {
     automake
   '';
 
-  postInstall = ''
-    substituteInPlace $out/bin/znapzend --replace "${perl}/bin/perl" \
-      "${perl}/bin/perl \
-      -I${Mojolicious-8-35}/${perl.libPrefix} \
-      -I${perlPackages.TAPParserSourceHandlerpgTAP}/${perl.libPrefix} \
-      -I${MojoIOLoopForkCall-0-20}/${perl.libPrefix} \
-      -I${perlPackages.IOPipely}/${perl.libPrefix} \
-      "
-    substituteInPlace $out/bin/znapzendzetup --replace "${perl}/bin/perl" \
-      "${perl}/bin/perl \
-      -I${Mojolicious-8-35}/${perl.libPrefix} \
-      -I${perlPackages.TAPParserSourceHandlerpgTAP}/${perl.libPrefix} \
-      -I${MojoIOLoopForkCall-0-20}/${perl.libPrefix} \
-      -I${perlPackages.IOPipely}/${perl.libPrefix} \
-      "
-    substituteInPlace $out/bin/znapzendztatz --replace "${perl}/bin/perl" \
-      "${perl}/bin/perl \
-      -I${Mojolicious-8-35}/${perl.libPrefix} \
-      -I${perlPackages.TAPParserSourceHandlerpgTAP}/${perl.libPrefix} \
-      -I${MojoIOLoopForkCall-0-20}/${perl.libPrefix} \
-      -I${perlPackages.IOPipely}/${perl.libPrefix} \
-      "
-  '';
-
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "High performance open source ZFS backup with mbuffer and ssh support";
     homepage    = "http://www.znapzend.org";
     license     = licenses.gpl3;
diff --git a/pkgs/tools/backup/zrepl/default.nix b/pkgs/tools/backup/zrepl/default.nix
new file mode 100644
index 00000000000..59dbfc0be72
--- /dev/null
+++ b/pkgs/tools/backup/zrepl/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, makeWrapper
+, openssh
+}:
+buildGoModule rec {
+  pname = "zrepl";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "zrepl";
+    repo = "zrepl";
+    rev = "v${version}";
+    sha256 = "5Bp8XGCjibDJgeAjW98rcABuddI+CV4Fh3hFJaKKwbo=";
+  };
+
+  vendorSha256 = "MwmYiK2z7ZK5kKBZV7K6kCZRSd7v5Sgjoih1eeOh6go=";
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  postInstall = ''
+    mkdir -p $out/lib/systemd/system
+    substitute dist/systemd/zrepl.service $out/lib/systemd/system/zrepl.service \
+      --replace /usr/local/bin/zrepl $out/bin/zrepl
+
+    wrapProgram $out/bin/zrepl \
+      --prefix PATH : ${lib.makeBinPath [ openssh ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://zrepl.github.io/";
+    description = "A one-stop, integrated solution for ZFS replication";
+    platforms = platforms.linux;
+    license = licenses.mit;
+    maintainers = with maintainers; [ cole-h danderson ];
+  };
+}
diff --git a/pkgs/tools/bluetooth/blueberry/default.nix b/pkgs/tools/bluetooth/blueberry/default.nix
index 16563c38099..95413986e8a 100644
--- a/pkgs/tools/bluetooth/blueberry/default.nix
+++ b/pkgs/tools/bluetooth/blueberry/default.nix
@@ -3,24 +3,24 @@
 , fetchFromGitHub
 , bluez-tools
 , cinnamon
-, gnome3
+, gnome
 , gobject-introspection
 , intltool
 , pavucontrol
 , python3Packages
-, utillinux
+, util-linux
 , wrapGAppsHook
 }:
 
 stdenv.mkDerivation rec {
   pname = "blueberry";
-  version = "1.3.9";
+  version = "1.4.4";
 
   src = fetchFromGitHub {
     owner = "linuxmint";
     repo = pname;
     rev = version;
-    sha256 = "0llvz1h2dmvhvwkkvl0q4ggi1nmdbllw34ppnravs5lybqkicyw9";
+    sha256 = "sha256-dz0uGesyuQVXI7aEONCeOsa2vVw5yuStSFPnrqv2VcM=";
   };
 
   nativeBuildInputs = [
@@ -32,9 +32,9 @@ stdenv.mkDerivation rec {
   buildInputs = [
     bluez-tools
     cinnamon.xapps
-    gnome3.gnome-bluetooth
+    gnome.gnome-bluetooth
     python3Packages.python
-    utillinux
+    util-linux
   ];
 
   pythonPath = with python3Packages; [
@@ -68,8 +68,8 @@ stdenv.mkDerivation rec {
       --replace /usr/lib/blueberry $out/lib/blueberry \
       --replace /usr/share $out/share
     substituteInPlace $out/lib/blueberry/rfkillMagic.py \
-      --replace /usr/bin/rfkill ${utillinux}/bin/rfkill \
-      --replace /usr/sbin/rfkill ${utillinux}/bin/rfkill \
+      --replace /usr/bin/rfkill ${util-linux}/bin/rfkill \
+      --replace /usr/sbin/rfkill ${util-linux}/bin/rfkill \
       --replace /usr/lib/blueberry $out/lib/blueberry
     substituteInPlace $out/share/applications/blueberry.desktop \
       --replace Exec=blueberry Exec=$out/bin/blueberry
diff --git a/pkgs/tools/bluetooth/blueman/default.nix b/pkgs/tools/bluetooth/blueman/default.nix
index aa8693b365a..0939584fa97 100644
--- a/pkgs/tools/bluetooth/blueman/default.nix
+++ b/pkgs/tools/bluetooth/blueman/default.nix
@@ -1,44 +1,32 @@
-{ config, stdenv, lib, fetchurl, intltool, pkgconfig, python3Packages, bluez, gtk3
-, obex_data_server, xdg_utils, dnsmasq, dhcp, libappindicator, iproute
-, gnome3, librsvg, wrapGAppsHook, gobject-introspection, autoreconfHook
+{ config, stdenv, lib, fetchurl, intltool, pkg-config, python3Packages, bluez, gtk3
+, obex_data_server, xdg-utils, dnsmasq, dhcp, libappindicator, iproute2
+, gnome, 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 ];
+  binPath = lib.makeBinPath [ xdg-utils dnsmasq dhcp iproute2 ];
 
 in stdenv.mkDerivation rec {
   pname = "blueman";
-  version = "2.1.3";
+  version = "2.2.1";
 
   src = fetchurl {
     url = "https://github.com/blueman-project/blueman/releases/download/${version}/${pname}-${version}.tar.xz";
-    sha256 = "1pngqbwapbvywhkmflapqvs0wa0af7d1a87wy56l5hg2r462xl1v";
+    sha256 = "0whs1bqnn1fgzrq7y2w1d06ldvfafq6h2xzmcfncbwmyb4i0mhgw";
   };
 
   nativeBuildInputs = [
-    gobject-introspection intltool pkgconfig pythonPackages.cython
+    gobject-introspection intltool pkg-config 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 ]
+                  gnome.adwaita-icon-theme iproute2 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
   '';
diff --git a/pkgs/tools/bluetooth/bluez-alsa/default.nix b/pkgs/tools/bluetooth/bluez-alsa/default.nix
index 09f5471de48..a108d55c6b5 100644
--- a/pkgs/tools/bluetooth/bluez-alsa/default.nix
+++ b/pkgs/tools/bluetooth/bluez-alsa/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook
-, alsaLib, bluez, glib, sbc, dbus
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook
+, alsa-lib, bluez, glib, sbc, dbus
 
 # optional, but useful utils
 , readline, libbsd, ncurses
@@ -9,23 +9,23 @@
 # TODO: aptxSupport
 }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   pname = "bluez-alsa";
-  version = "2.1.0";
+  version = "3.1.0";
 
   src = fetchFromGitHub {
     owner = "Arkq";
     repo = "bluez-alsa";
     rev = "v${version}";
-    sha256 = "112dfqxc144a61jqil2s3181gngfw5vz7yy10ml4f5a1nd90qnci";
+    sha256 = "sha256-bohc/0hUr1mcV2JbFy71TjY8MXOU3oBBPCcupgkWsWY=";
   };
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
 
   buildInputs = [
-    alsaLib bluez glib sbc dbus
+    alsa-lib bluez glib sbc dbus
     readline libbsd ncurses
   ]
   ++ optional aacSupport fdk_aac;
diff --git a/pkgs/tools/bluetooth/bluez-tools/default.nix b/pkgs/tools/bluetooth/bluez-tools/default.nix
index 47aaadc9ccf..6b87a54be63 100644
--- a/pkgs/tools/bluetooth/bluez-tools/default.nix
+++ b/pkgs/tools/bluetooth/bluez-tools/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, autoreconfHook, readline
-, fetchFromGitHub, glib, pkgconfig }:
+{ lib, stdenv, autoreconfHook, readline
+, fetchFromGitHub, glib, pkg-config }:
 
 stdenv.mkDerivation rec {
   date    = "2016-12-12";
@@ -13,11 +13,11 @@ stdenv.mkDerivation rec {
     sha256 = "08xp77sf5wnq5086halmyk3vla4bfls06q1zrqdcq36hw6d409i6";
   };
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
 
   buildInputs = [ readline glib ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Command line bluetooth manager for Bluez5";
     license = licenses.gpl2;
     maintainers = [ maintainers.dasuxullebt ];
diff --git a/pkgs/tools/bluetooth/obex-data-server/default.nix b/pkgs/tools/bluetooth/obex-data-server/default.nix
index f95869e789c..f580080e879 100644
--- a/pkgs/tools/bluetooth/obex-data-server/default.nix
+++ b/pkgs/tools/bluetooth/obex-data-server/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, libusb-compat-0_1, glib, dbus-glib, bluez, openobex, dbus }:
+{ lib, stdenv, fetchurl, pkg-config, libusb-compat-0_1, glib, dbus-glib, bluez, openobex, dbus }:
 
 stdenv.mkDerivation rec {
   name = "obex-data-server-0.4.6";
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "0kq940wqs9j8qjnl58d6l3zhx0jaszci356xprx23l6nvdfld6dk";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libusb-compat-0_1 glib dbus-glib bluez openobex dbus ];
 
   patches = [ ./obex-data-server-0.4.6-build-fixes-1.patch ];
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
   export PKG_CONFIG_PATH="${dbus.dev}/lib/pkgconfig:$PKG_CONFIG_PATH"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://wiki.muiline.com/obex-data-server";
     platforms = platforms.linux;
     license = licenses.gpl2;
diff --git a/pkgs/tools/bluetooth/obexd/default.nix b/pkgs/tools/bluetooth/obexd/default.nix
index c235c99d762..6ddbcd5652d 100644
--- a/pkgs/tools/bluetooth/obexd/default.nix
+++ b/pkgs/tools/bluetooth/obexd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, glib, dbus, openobex, bluez, libical }:
+{ lib, stdenv, fetchurl, pkg-config, glib, dbus, openobex, bluez, libical }:
 
 stdenv.mkDerivation rec {
   name = "obexd-0.48";
@@ -10,9 +10,9 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ glib dbus openobex bluez libical ];
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.bluez.org/";
     platforms = platforms.linux;
     license = licenses.gpl3;
diff --git a/pkgs/tools/bluetooth/obexfs/default.nix b/pkgs/tools/bluetooth/obexfs/default.nix
index 1c24697c689..b81e8c4ea55 100644
--- a/pkgs/tools/bluetooth/obexfs/default.nix
+++ b/pkgs/tools/bluetooth/obexfs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, bluez, fuse, obexftp }:
+{ lib, stdenv, fetchurl, pkg-config, bluez, fuse, obexftp }:
 
 stdenv.mkDerivation rec {
   name = "obexfs-0.12";
@@ -8,10 +8,10 @@ stdenv.mkDerivation rec {
     sha256 = "1g3krpygk6swa47vbmp9j9s8ahqqcl9ra8r25ybgzv2d9pmjm9kj";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ fuse obexftp bluez ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://dev.zuckschwerdt.org/openobex/wiki/ObexFs";
     description = "A tool to mount OBEX-based devices (such as Bluetooth phones)";
     platforms = platforms.linux;
diff --git a/pkgs/tools/bluetooth/obexftp/default.nix b/pkgs/tools/bluetooth/obexftp/default.nix
index 69779557300..fc2ff6128f7 100644
--- a/pkgs/tools/bluetooth/obexftp/default.nix
+++ b/pkgs/tools/bluetooth/obexftp/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchurl, pkgconfig, openobex, bluez, cmake }:
-   
+{ lib, stdenv, fetchurl, pkg-config, 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 ];
+  nativeBuildInputs = [ pkg-config cmake ];
 
   buildInputs = [ bluez ];
 
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
     sed -i 's,^Requires: bluetooth,Requires:,' $out/lib/pkgconfig/obexftp.pc
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/bluetooth/openobex/default.nix b/pkgs/tools/bluetooth/openobex/default.nix
index 7ac0234852c..1079623cf2a 100644
--- a/pkgs/tools/bluetooth/openobex/default.nix
+++ b/pkgs/tools/bluetooth/openobex/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchurl, pkgconfig, bluez, libusb-compat-0_1, cmake }:
-   
+{ lib, stdenv, fetchurl, pkg-config, bluez, libusb-compat-0_1, cmake }:
+
 stdenv.mkDerivation rec {
   name = "openobex-1.7.2";
-   
+
   src = fetchurl {
     url = "mirror://sourceforge/openobex/${name}-Source.tar.gz";
     sha256 = "1z6l7pbwgs5pjx3861cyd3r6vq5av984bdp4r3hgrw2jxam6120m";
   };
 
-  nativeBuildInputs = [ pkgconfig cmake ];
+  nativeBuildInputs = [ pkg-config cmake ];
   buildInputs = [ bluez libusb-compat-0_1 ];
 
   configureFlags = [ "--enable-apps" ];
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     sed -i "/if ( PKGCONFIG_UDEV_FOUND )/,/endif ( PKGCONFIG_UDEV_FOUND )/d" udev/CMakeLists.txt
     '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://dev.zuckschwerdt.org/openobex/";
     description = "An open source implementation of the Object Exchange (OBEX) protocol";
     platforms = platforms.linux;
diff --git a/pkgs/tools/bootloaders/refind/default.nix b/pkgs/tools/bootloaders/refind/default.nix
index 5c7c68d9d9e..600967e996c 100644
--- a/pkgs/tools/bootloaders/refind/default.nix
+++ b/pkgs/tools/bootloaders/refind/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, gnu-efi }:
+{ lib, stdenv, fetchurl, gnu-efi }:
 
 let
   archids = {
@@ -14,15 +14,15 @@ in
 
 stdenv.mkDerivation rec {
   pname = "refind";
-  version = "0.12.0";
-  srcName = "refind-src-${version}";
+  version = "0.13.1";
 
   src = fetchurl {
-    url = "mirror://sourceforge/project/refind/${version}/${srcName}.tar.gz";
-    sha256 = "1i5p3sir3mx4i2q5w78360xn2kbgsj8rmgrqvsvag1zzr5dm1f3v";
+    url = "mirror://sourceforge/project/refind/${version}/${pname}-src-${version}.tar.gz";
+    sha256 = "1yjni0mr3rqrrk4ynwb8i0whpqhd56cck4mxd97qmxn7wbr826i9";
   };
 
   patches = [
+    # Removes hardcoded toolchain for aarch64, allowing successful aarch64 builds.
     ./0001-toolchain.patch
   ];
 
@@ -43,6 +43,8 @@ stdenv.mkDerivation rec {
   buildFlags = [ "gnuefi" "fs_gnuefi" ];
 
   installPhase = ''
+    runHook preInstall
+
     install -d $out/bin/
     install -d $out/share/refind/drivers_${efiPlatform}/
     install -d $out/share/refind/tools_${efiPlatform}/
@@ -101,9 +103,11 @@ stdenv.mkDerivation rec {
     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
+
+    runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A graphical {,U}EFI boot manager";
     longDescription = ''
       rEFInd is a graphical boot manager for EFI- and UEFI-based
diff --git a/pkgs/tools/cd-dvd/bashburn/default.nix b/pkgs/tools/cd-dvd/bashburn/default.nix
index 9b232be8ce0..d9664f1072f 100644
--- a/pkgs/tools/cd-dvd/bashburn/default.nix
+++ b/pkgs/tools/cd-dvd/bashburn/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, utillinux
+{ lib, stdenv, fetchurl, util-linux
 , cdparanoia, cdrdao, dvdplusrwtools, flac, lame, mpg123, normalize
 , vorbis-tools, xorriso }:
 
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
     name = "${pname}-${version}.tar.gz";
   };
 
-  nativeBuildInputs = [ utillinux ];
+  nativeBuildInputs = [ util-linux ];
 
   postPatch = ''
     for path in \
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
       BB_OGGENC=${vorbis-tools}/bin/oggenc \
       BB_OGGDEC=${vorbis-tools}/bin/oggdec \
       BB_FLACCMD=${flac.bin}/bin/flac \
-      BB_EJECT=${utillinux}/bin/eject \
+      BB_EJECT=${util-linux}/bin/eject \
       BB_NORMCMD=${normalize}/bin/normalize \
     ; do
       echo $path
@@ -43,7 +43,7 @@ stdenv.mkDerivation rec {
     sh Install.sh --prefix $out
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Bash script CD Burner Writer";
     longDescription = ''
       It might not be the best looking application out there, but it works.
diff --git a/pkgs/tools/cd-dvd/bchunk/default.nix b/pkgs/tools/cd-dvd/bchunk/default.nix
index df63ced882f..df8ca279107 100644
--- a/pkgs/tools/cd-dvd/bchunk/default.nix
+++ b/pkgs/tools/cd-dvd/bchunk/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "bchunk";
@@ -9,14 +9,14 @@ stdenv.mkDerivation rec {
     sha256 = "12dxx98kbpc5z4dgni25280088bhlsb677rp832r82zzc1drpng7";
   };
 
-  makeFlags = stdenv.lib.optionals stdenv.cc.isClang [ "CC=cc" "LD=cc" ];
+  makeFlags = lib.optionals stdenv.cc.isClang [ "CC=${stdenv.cc.targetPrefix}cc" "LD=${stdenv.cc.targetPrefix}cc" ];
 
   installPhase = ''
     install -Dt $out/bin bchunk
     install -Dt $out/share/man/man1 bchunk.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/cd-dvd/bootiso/default.nix b/pkgs/tools/cd-dvd/bootiso/default.nix
new file mode 100644
index 00000000000..5acb901a549
--- /dev/null
+++ b/pkgs/tools/cd-dvd/bootiso/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, bash
+, makeWrapper
+, bc
+, jq
+, coreutils
+, util-linux
+, wimlib
+, file
+, syslinux
+, busybox
+, gnugrep # We can't use busybox's 'grep' as it doesn't support perl '-P' expressions.
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "bootiso";
+  version = "4.2.0";
+
+  src = fetchFromGitHub {
+    owner = "jsamr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1l09d543b73r0wbpsj5m6kski8nq48lbraq1myxhidkgl3mm3d5i";
+  };
+
+  strictDeps = true;
+  buildInputs = [ bash ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  makeFlags = [ "prefix=${placeholder "out"}" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/bootiso \
+      --prefix PATH : ${lib.makeBinPath [ bc jq coreutils util-linux wimlib file syslinux gnugrep busybox ]} \
+      --prefix BOOTISO_SYSLINUX_LIB_ROOT : ${syslinux}/share/syslinux
+  '';
+
+  meta = with lib; {
+    description = "Script for securely creating a bootable USB device from one image file";
+    homepage = "https://github.com/jsamr/bootiso";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ musfay ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/cd-dvd/brasero/default.nix b/pkgs/tools/cd-dvd/brasero/default.nix
index cdc19887333..ea720f4f3eb 100644
--- a/pkgs/tools/cd-dvd/brasero/default.nix
+++ b/pkgs/tools/cd-dvd/brasero/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchurl, pkgconfig, gtk3, itstool, gst_all_1, libxml2, libnotify
+{ stdenv, lib, fetchurl, pkg-config, gtk3, itstool, gst_all_1, libxml2, libnotify
 , libcanberra-gtk3, intltool, dvdauthor, libburn, libisofs
 , vcdimager, wrapGAppsHook, hicolor-icon-theme }:
 
@@ -16,7 +16,7 @@ in stdenv.mkDerivation rec {
     sha256 = "0h90y674j26rvjahb8cc0w79zx477rb6zaqcj26wzvq8kmpic8k8";
   };
 
-  nativeBuildInputs = [ pkgconfig itstool intltool wrapGAppsHook ];
+  nativeBuildInputs = [ pkg-config itstool intltool wrapGAppsHook ];
 
   buildInputs = [ gtk3 libxml2 libnotify libcanberra-gtk3 libburn libisofs
                   hicolor-icon-theme
@@ -36,10 +36,10 @@ in stdenv.mkDerivation rec {
   ];
 
   preFixup = ''
-    gappsWrapperArgs+=(--prefix PATH : "${binpath}" --prefix GST_PLUGIN_SYSTEM_PATH : "$GST_PLUGIN_SYSTEM_PATH")
+    gappsWrapperArgs+=(--prefix PATH : "${binpath}")
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A Gnome CD/DVD Burner";
     homepage = "https://wiki.gnome.org/Apps/Brasero";
     maintainers = [ maintainers.bdimcheff ];
diff --git a/pkgs/tools/cd-dvd/brasero/wrapper.nix b/pkgs/tools/cd-dvd/brasero/wrapper.nix
index 8112b0971f3..5371e8d526b 100644
--- a/pkgs/tools/cd-dvd/brasero/wrapper.nix
+++ b/pkgs/tools/cd-dvd/brasero/wrapper.nix
@@ -6,7 +6,7 @@ in symlinkJoin {
   name = "brasero-${brasero-original.version}";
 
   paths = [ brasero-original ];
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
   postBuild = ''
     wrapProgram $out/bin/brasero \
diff --git a/pkgs/tools/cd-dvd/ccd2iso/default.nix b/pkgs/tools/cd-dvd/ccd2iso/default.nix
index a6ba7fd332f..10f8d9701d4 100644
--- a/pkgs/tools/cd-dvd/ccd2iso/default.nix
+++ b/pkgs/tools/cd-dvd/ccd2iso/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "ccd2iso-0.3";
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "1z000zi7hpr2h9cabj6hzf3n6a6gd6glmm8nn36v4b8i4vzbhx7q";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "CloneCD to ISO converter";
     homepage = "https://sourceforge.net/projects/ccd2iso/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/cd-dvd/cdi2iso/default.nix b/pkgs/tools/cd-dvd/cdi2iso/default.nix
index 9d7336663a8..26768747a46 100644
--- a/pkgs/tools/cd-dvd/cdi2iso/default.nix
+++ b/pkgs/tools/cd-dvd/cdi2iso/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl}:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "cdi2iso";
@@ -9,16 +9,20 @@ stdenv.mkDerivation rec {
     sha256 = "0fj2fxhpr26z649m0ph71378c41ljflpyk89g87x8r1mc4rbq3kh";
   };
 
+  postPatch = ''
+    substituteInPlace Makefile --replace "gcc" "${stdenv.cc.targetPrefix}cc"
+  '';
+
   installPhase = ''
-    mkdir -p $out/bin/
-    cp cdi2iso $out/bin/
+    mkdir -p $out/bin
+    cp cdi2iso $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/cd-dvd/cdimgtools/default.nix b/pkgs/tools/cd-dvd/cdimgtools/default.nix
index fde9eb1a332..5f8d6016aa2 100644
--- a/pkgs/tools/cd-dvd/cdimgtools/default.nix
+++ b/pkgs/tools/cd-dvd/cdimgtools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromRepoOrCz, autoreconfHook, makeWrapper, libdvdcss, libdvdread, perl, perlPackages, asciidoc, xmlto, sourceHighlight, docbook_xsl, docbook_xml_dtd_45 }:
+{ lib, stdenv, fetchFromRepoOrCz, autoreconfHook, makeWrapper, libdvdcss, libdvdread, perl, perlPackages, asciidoc, xmlto, sourceHighlight, docbook_xsl, docbook_xml_dtd_45 }:
 
 stdenv.mkDerivation {
   pname = "cdimgtools";
@@ -26,7 +26,7 @@ stdenv.mkDerivation {
 
   installTargets = [ "install" "install-doc" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/cd-dvd/cdrdao/default.nix b/pkgs/tools/cd-dvd/cdrdao/default.nix
index d0d12c34c05..3fca8b2cd3c 100644
--- a/pkgs/tools/cd-dvd/cdrdao/default.nix
+++ b/pkgs/tools/cd-dvd/cdrdao/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, libvorbis, libmad, pkgconfig, libao}:
+{lib, stdenv, fetchurl, libvorbis, libmad, pkg-config, libao}:
 
 stdenv.mkDerivation {
   name = "cdrdao-1.2.3";
@@ -10,7 +10,7 @@ stdenv.mkDerivation {
 
   makeFlags = [ "RM=rm" "LN=ln" "MV=mv" ];
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libvorbis libmad libao ];
 
   hardeningDisable = [ "format" ];
@@ -28,7 +28,7 @@ stdenv.mkDerivation {
   # Needed on gcc >= 6.
   NIX_CFLAGS_COMPILE = "-Wno-narrowing";
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/cd-dvd/cdrkit/default.nix b/pkgs/tools/cd-dvd/cdrkit/default.nix
index 251eee66f9c..28ed61ebd55 100644
--- a/pkgs/tools/cd-dvd/cdrkit/default.nix
+++ b/pkgs/tools/cd-dvd/cdrkit/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, cmake, libcap, zlib, bzip2, perl}:
+{lib, stdenv, fetchurl, cmake, libcap, zlib, bzip2, perl}:
 
 stdenv.mkDerivation rec {
   name = "cdrkit-1.1.11";
@@ -8,7 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "1nj7iv3xrq600i37na9a5idd718piiiqbs4zxvpjs66cdrsk1h6i";
   };
 
-  buildInputs = [cmake libcap zlib bzip2 perl];
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libcap zlib bzip2 perl ];
 
   hardeningDisable = [ "format" ];
 
@@ -36,9 +37,9 @@ stdenv.mkDerivation rec {
       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;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/cd-dvd/cdrtools/default.nix b/pkgs/tools/cd-dvd/cdrtools/default.nix
index f4f07143a20..bca1a1c689c 100644
--- a/pkgs/tools/cd-dvd/cdrtools/default.nix
+++ b/pkgs/tools/cd-dvd/cdrtools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, m4, acl, libcap, Carbon, IOKit }:
+{ lib, stdenv, fetchurl, m4, acl, libcap, Carbon, IOKit }:
 
 stdenv.mkDerivation rec {
   pname = "cdrtools";
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = false; # parallel building fails on some linux machines
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/cd-dvd/cue2pops/default.nix b/pkgs/tools/cd-dvd/cue2pops/default.nix
index 87e633c504a..795589a64ec 100644
--- a/pkgs/tools/cd-dvd/cue2pops/default.nix
+++ b/pkgs/tools/cd-dvd/cue2pops/default.nix
@@ -1,9 +1,11 @@
-{ stdenv, fetchFromGitHub }:
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
 
-with stdenv.lib;
 stdenv.mkDerivation {
   pname = "cue2pops";
-  version = "git-2018-01-04";
+  version = "unstable-2018-01-04";
 
   src = fetchFromGitHub {
     owner = "makefu";
@@ -14,14 +16,14 @@ stdenv.mkDerivation {
 
   dontConfigure = true;
 
-  makeFlags = ["CC=cc"];
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
 
   installPhase = ''
     install --directory --mode=755 $out/bin
     install --mode=755 cue2pops $out/bin
   '';
 
-  meta = {
+  meta = with lib; {
     description = "Convert CUE to ISO suitable to POPStarter";
     homepage = "https://github.com/makefu/cue2pops-linux";
     maintainers = with maintainers; [ AndersonTorres ];
diff --git a/pkgs/tools/cd-dvd/cuetools/default.nix b/pkgs/tools/cd-dvd/cuetools/default.nix
index ebc63152177..a6cf5506138 100644
--- a/pkgs/tools/cd-dvd/cuetools/default.nix
+++ b/pkgs/tools/cd-dvd/cuetools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
 , bison, flac, flex, id3v2, vorbis-tools
 }:
 
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     ln -s $out/bin/cuetag.sh $out/bin/cuetag
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A set of utilities for working with cue files and toc files";
     homepage = "https://github.com/svend/cuetools";
     license = licenses.gpl2;
diff --git a/pkgs/tools/cd-dvd/dvd+rw-tools/default.nix b/pkgs/tools/cd-dvd/dvd+rw-tools/default.nix
index 40925a14537..d396bf030ca 100644
--- a/pkgs/tools/cd-dvd/dvd+rw-tools/default.nix
+++ b/pkgs/tools/cd-dvd/dvd+rw-tools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, cdrtools, m4 }:
+{ lib, stdenv, fetchurl, fetchpatch, cdrtools, m4 }:
 
 stdenv.mkDerivation rec {
   pname = "dvd+rw-tools";
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "prefix=${placeholder "out"}" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/cd-dvd/dvd-vr/default.nix b/pkgs/tools/cd-dvd/dvd-vr/default.nix
index aef0c3a636f..4375aebe299 100644
--- a/pkgs/tools/cd-dvd/dvd-vr/default.nix
+++ b/pkgs/tools/cd-dvd/dvd-vr/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "dvd-vr";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
   };
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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";
diff --git a/pkgs/tools/cd-dvd/dvdisaster/default.nix b/pkgs/tools/cd-dvd/dvdisaster/default.nix
index 5a3828d8013..e6f98bdee31 100644
--- a/pkgs/tools/cd-dvd/dvdisaster/default.nix
+++ b/pkgs/tools/cd-dvd/dvdisaster/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, gettext, which
+{ lib, stdenv, fetchurl, pkg-config, gettext, which
 , glib, gtk2
 , enableSoftening ? true
 }:
@@ -12,10 +12,10 @@ stdenv.mkDerivation rec {
     sha256 = "0f8gjnia2fxcbmhl8b3qkr5b7idl8m855dw7xw2fnmbqwvcm6k4w";
   };
 
-  nativeBuildInputs = [ gettext pkgconfig which ];
+  nativeBuildInputs = [ gettext pkg-config which ];
   buildInputs = [ glib gtk2 ];
 
-  patches = stdenv.lib.optional enableSoftening [
+  patches = lib.optional enableSoftening [
     ./encryption.patch
     ./dvdrom.patch
   ];
@@ -33,7 +33,7 @@ stdenv.mkDerivation rec {
     "--docdir=share/doc"
     "--with-nls=yes"
     "--with-embedded-src-path=no"
-  ] ++ stdenv.lib.optional (stdenv.hostPlatform.isx86_64) "--with-sse2=yes";
+  ] ++ lib.optional (stdenv.hostPlatform.isx86_64) "--with-sse2=yes";
 
   # fatal error: inlined-icons.h: No such file or directory
   enableParallelBuilding = false;
@@ -72,7 +72,7 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://dvdisaster.net/";
     description = "Data loss/scratch/aging protection for CD/DVD media";
     longDescription = ''
diff --git a/pkgs/tools/cd-dvd/ecm-tools/default.nix b/pkgs/tools/cd-dvd/ecm-tools/default.nix
index 2ebf8e65551..18ef6f02d80 100644
--- a/pkgs/tools/cd-dvd/ecm-tools/default.nix
+++ b/pkgs/tools/cd-dvd/ecm-tools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "ecm-tools";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
     (cd $out/bin; ln -s bin2ecm ecm2bin)
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A utility to uncompress ECM files to BIN CD format";
     homepage = "https://github.com/alucryd/ecm-tools";
     license = licenses.gpl3;
diff --git a/pkgs/tools/cd-dvd/isolyzer/default.nix b/pkgs/tools/cd-dvd/isolyzer/default.nix
index 1fd704d90f1..c175eb45aa0 100644
--- a/pkgs/tools/cd-dvd/isolyzer/default.nix
+++ b/pkgs/tools/cd-dvd/isolyzer/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib
 , python3
 , fetchFromGitHub
 }:
@@ -16,7 +16,7 @@ python3.pkgs.buildPythonApplication rec {
 
   propagatedBuildInputs = with python3.pkgs; [ setuptools six ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/KBNLresearch/isolyzer";
     description = "Verify size of ISO 9660 image against Volume Descriptor fields";
     license = licenses.asl20;
diff --git a/pkgs/tools/cd-dvd/isomd5sum/default.nix b/pkgs/tools/cd-dvd/isomd5sum/default.nix
index 0c30f0fe980..9cb033e15d1 100644
--- a/pkgs/tools/cd-dvd/isomd5sum/default.nix
+++ b/pkgs/tools/cd-dvd/isomd5sum/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub
+{ lib, stdenv, fetchFromGitHub
 , python3
 , popt
 }:
@@ -14,7 +14,9 @@ stdenv.mkDerivation rec {
     sha256 = "1wjnh2hlp1hjjm4a8wzdhdrm73jq41lmpmy3ls0rh715p3j7z4q9";
   };
 
-  buildInputs = [ python3 popt ] ;
+  strictDeps = true;
+  nativeBuildInputs = [ python3 ];
+  buildInputs = [ popt ] ;
 
   postPatch = ''
     substituteInPlace Makefile --replace "#/usr/" "#"
@@ -28,7 +30,7 @@ stdenv.mkDerivation rec {
   # we don't install python stuff as it borks up directories
   installTargets = [ "install-bin" "install-devel" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/rhinstaller/isomd5sum";
     description = "Utilities for working with md5sum implanted in ISO images";
     platforms = platforms.linux;
diff --git a/pkgs/tools/cd-dvd/lsdvd/default.nix b/pkgs/tools/cd-dvd/lsdvd/default.nix
index 39d0ab5fc2d..59e8bf8843a 100644
--- a/pkgs/tools/cd-dvd/lsdvd/default.nix
+++ b/pkgs/tools/cd-dvd/lsdvd/default.nix
@@ -1,20 +1,17 @@
-{ stdenv, fetchurl, libdvdread, pkgconfig }:
+{ lib, stdenv, fetchurl, libdvdread, pkg-config }:
 
-let
-  version = "0.17";
-in
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "lsdvd";
-  inherit version;
+  version = "0.17";
   src = fetchurl {
     url = "mirror://sourceforge/lsdvd/lsdvd-${version}.tar.gz";
     sha256 = "1274d54jgca1prx106iyir7200aflr70bnb1kawndlmcckcmnb3x";
   };
 
   buildInputs = [ libdvdread ];
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://sourceforge.net/projects/lsdvd/";
     description = "Display information about audio, video, and subtitle tracks on a DVD";
     license = licenses.gpl2;
diff --git a/pkgs/tools/cd-dvd/mdf2iso/default.nix b/pkgs/tools/cd-dvd/mdf2iso/default.nix
index dbad9d36247..e737e38d1bd 100644
--- a/pkgs/tools/cd-dvd/mdf2iso/default.nix
+++ b/pkgs/tools/cd-dvd/mdf2iso/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchgit}:
+{lib, stdenv, fetchgit}:
 
 stdenv.mkDerivation rec {
   pname = "mdf2iso";
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
     sha256 = "0xg43jlvrk8adfjgbjir15nxwcj0nhz4gxpqx7jdfvhg0kwliq0n";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Small utility that converts MDF images to ISO format";
     homepage = src.url;
     license = licenses.gpl2;
diff --git a/pkgs/tools/cd-dvd/mkcue/default.nix b/pkgs/tools/cd-dvd/mkcue/default.nix
index 357992d7291..596164f13ff 100644
--- a/pkgs/tools/cd-dvd/mkcue/default.nix
+++ b/pkgs/tools/cd-dvd/mkcue/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "mkcue";
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
   preInstall = "mkdir -pv $out/bin";
   postInstall = "chmod -v +w $out/bin/mkcue";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Generates CUE sheets from a CD TOC";
     license = licenses.lgpl2Plus;
     platforms = platforms.linux;
diff --git a/pkgs/tools/cd-dvd/nrg2iso/default.nix b/pkgs/tools/cd-dvd/nrg2iso/default.nix
index 082dada85fd..e57948a80dd 100644
--- a/pkgs/tools/cd-dvd/nrg2iso/default.nix
+++ b/pkgs/tools/cd-dvd/nrg2iso/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation rec {
   pname = "nrg2iso";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
     cp -v nrg2iso $out/bin/nrg2iso
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/cd-dvd/sacd/default.nix b/pkgs/tools/cd-dvd/sacd/default.nix
index a3ce3d36182..23bf808c50f 100644
--- a/pkgs/tools/cd-dvd/sacd/default.nix
+++ b/pkgs/tools/cd-dvd/sacd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , fetchpatch
 }:
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
     "PREFIX=$(out)"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Converts SACD image files, Philips DSDIFF and Sony DSF files to 24-bit high resolution wave files. Handles both DST and DSD streams. ";
     longDescription = ''
       Super Audio CD decoder. Converts SACD image files, Philips DSDIFF and Sony DSF files to 24-bit high resolution wave files.
diff --git a/pkgs/tools/cd-dvd/srt-to-vtt-cl/default.nix b/pkgs/tools/cd-dvd/srt-to-vtt-cl/default.nix
index 8efc50c4493..70fcedde858 100644
--- a/pkgs/tools/cd-dvd/srt-to-vtt-cl/default.nix
+++ b/pkgs/tools/cd-dvd/srt-to-vtt-cl/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, substituteAll }:
+{ lib, stdenv, fetchFromGitHub, substituteAll }:
 
 stdenv.mkDerivation rec {
   pname = "srt-to-vtt-cl";
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     cp bin/$(uname -s)/$(uname -m)/srt-vtt $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Convert SRT files to VTT";
     license = licenses.mit;
     maintainers = with maintainers; [ ericdallo ];
diff --git a/pkgs/tools/cd-dvd/uif2iso/default.nix b/pkgs/tools/cd-dvd/uif2iso/default.nix
index 4e3a2daafe8..ac0879e3217 100644
--- a/pkgs/tools/cd-dvd/uif2iso/default.nix
+++ b/pkgs/tools/cd-dvd/uif2iso/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, unzip, zlib }:
+{ lib, stdenv, fetchurl, unzip, zlib }:
 
 stdenv.mkDerivation rec {
   nameNoVer = "uif2iso";
@@ -9,7 +9,8 @@ stdenv.mkDerivation rec {
     sha256 = "1v18fmlzhkkhv8xdc9dyvl8vamwg3ka4dsrg7vvmk1f2iczdx3dp";
   };
 
-  buildInputs = [unzip zlib];
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [zlib];
 
   installPhase = ''
     make -C . prefix="$out" install;
@@ -18,7 +19,7 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl1Plus;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/cd-dvd/unetbootin/default.nix b/pkgs/tools/cd-dvd/unetbootin/default.nix
index ae9e6724fac..71a0a763285 100644
--- a/pkgs/tools/cd-dvd/unetbootin/default.nix
+++ b/pkgs/tools/cd-dvd/unetbootin/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, makeWrapper, qt4, utillinux, coreutils, which, qmake4Hook
+{ lib, stdenv, fetchFromGitHub, makeWrapper, qt4, util-linux, coreutils, which, qmake4Hook
 , p7zip, mtools, syslinux }:
 
 stdenv.mkDerivation rec {
@@ -24,9 +24,9 @@ stdenv.mkDerivation rec {
   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 /sbin/blkid         ${util-linux}/sbin/blkid \
+      --replace /sbin/fdisk         ${util-linux}/sbin/fdisk \
+      --replace /sbin/sfdisk        ${util-linux}/sbin/sfdisk \
       --replace /usr/bin/syslinux   ${syslinux}/bin/syslinux \
       --replace /usr/bin/extlinux   ${syslinux}/sbin/extlinux \
       --replace /usr/share/syslinux ${syslinux}/share/syslinux
@@ -51,13 +51,13 @@ stdenv.mkDerivation rec {
     install -Dm644 -t $out/share/applications unetbootin.desktop
 
     wrapProgram $out/bin/unetbootin \
-      --prefix PATH : ${stdenv.lib.makeBinPath [ mtools p7zip which ]} \
+      --prefix PATH : ${lib.makeBinPath [ mtools p7zip which ]} \
       --set QT_X11_NO_MITSHM 1
 
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage    = "http://unetbootin.sourceforge.net/";
     description = "A tool to create bootable live USB drives from ISO images";
     license     = licenses.gpl2Plus;
diff --git a/pkgs/tools/cd-dvd/vobcopy/default.nix b/pkgs/tools/cd-dvd/vobcopy/default.nix
index 2b918c4ffeb..a31354670a0 100644
--- a/pkgs/tools/cd-dvd/vobcopy/default.nix
+++ b/pkgs/tools/cd-dvd/vobcopy/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libdvdread, libdvdcss }:
+{ lib, stdenv, fetchurl, libdvdread, libdvdcss }:
 
 stdenv.mkDerivation rec {
   name = "vobcopy-1.2.0";
@@ -14,9 +14,9 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2;
 
-    maintainers = [ stdenv.lib.maintainers.bluescreen303 ];
-    platforms = stdenv.lib.platforms.all;
+    maintainers = [ lib.maintainers.bluescreen303 ];
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/cd-dvd/vobsub2srt/default.nix b/pkgs/tools/cd-dvd/vobsub2srt/default.nix
index 9e5ee52fca8..5262fe06963 100644
--- a/pkgs/tools/cd-dvd/vobsub2srt/default.nix
+++ b/pkgs/tools/cd-dvd/vobsub2srt/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, cmake, libtiff, pkgconfig, tesseract }:
+{ lib, stdenv, fetchgit, cmake, libtiff, pkg-config, tesseract }:
 
 let rev = "a6abbd61127a6392d420bbbebdf7612608c943c2";
     shortRev = builtins.substring 0 7 rev;
@@ -12,15 +12,15 @@ stdenv.mkDerivation {
     sha256 = "1rpanrv8bgdh95v2320qbd44xskncvq6y84cbbfc86gw0qxpd9cb";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ cmake libtiff ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ 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 ];
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.ttuegel ];
   };
 }
diff --git a/pkgs/tools/cd-dvd/xorriso/default.nix b/pkgs/tools/cd-dvd/xorriso/default.nix
index b3f268214db..34fdb8d03af 100644
--- a/pkgs/tools/cd-dvd/xorriso/default.nix
+++ b/pkgs/tools/cd-dvd/xorriso/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, libcdio, zlib, bzip2, readline, acl, attr, libiconv }:
+{ fetchurl, lib, stdenv, libcdio, zlib, bzip2, readline, acl, attr, libiconv }:
 
 stdenv.mkDerivation rec {
   name = "xorriso-${version}";
@@ -12,9 +12,9 @@ stdenv.mkDerivation rec {
   doCheck = true;
 
   buildInputs = [ libcdio zlib bzip2 readline libiconv ]
-    ++ stdenv.lib.optionals stdenv.isLinux [ acl attr ];
+    ++ lib.optionals stdenv.isLinux [ acl attr ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "ISO 9660 Rock Ridge file system manipulator";
 
     longDescription =
diff --git a/pkgs/tools/compression/advancecomp/default.nix b/pkgs/tools/compression/advancecomp/default.nix
index e648aa6feb6..7f8733b9b4e 100644
--- a/pkgs/tools/compression/advancecomp/default.nix
+++ b/pkgs/tools/compression/advancecomp/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , fetchpatch
 , autoreconfHook
@@ -35,8 +35,8 @@ stdenv.mkDerivation rec {
     echo "${version}" >.version
   '';
 
-  meta = with stdenv.lib; {
-    description = ''A set of tools to optimize deflate-compressed files'';
+  meta = with lib; {
+    description = "A set of tools to optimize deflate-compressed files";
     license = licenses.gpl3 ;
     maintainers = [ maintainers.raskin ];
     platforms = platforms.linux ++ platforms.darwin;
diff --git a/pkgs/tools/compression/brotli/default.nix b/pkgs/tools/compression/brotli/default.nix
index 229c6c8b8e4..dfac5af0980 100644
--- a/pkgs/tools/compression/brotli/default.nix
+++ b/pkgs/tools/compression/brotli/default.nix
@@ -1,27 +1,34 @@
-{ stdenv, fetchFromGitHub, cmake, fetchpatch, staticOnly ? false }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, fetchpatch
+, staticOnly ? stdenv.hostPlatform.isStatic
+}:
 
 # ?TODO: there's also python lib in there
 
 stdenv.mkDerivation rec {
   pname = "brotli";
-  version = "1.0.7";
+  version = "1.0.9";
 
   src = fetchFromGitHub {
     owner = "google";
     repo = "brotli";
-    rev = "v" + version;
-    sha256 = "1811b55wdfg4kbsjcgh1kc938g118jpvif97ilgrmbls25dfpvvw";
+    rev = "v${version}";
+    sha256 = "z6Dhrabav1MDQ4rAcXaDv0aN+qOoh9cvoXZqEWBB13c=";
   };
 
   nativeBuildInputs = [ cmake ];
 
-  patches = stdenv.lib.optional staticOnly (fetchpatch {
-    url = "https://github.com/google/brotli/pull/655/commits/7289e5a378ba13801996a84d89d8fe95c3fc4c11.patch";
-    sha256 = "1bghbdvj24jrvb0sqfdif9vwg7wx6pn8dvl6flkrcjkhpj0gi0jg";
+  patches = lib.optional staticOnly (fetchpatch {
+    # context from https://github.com/google/brotli/pull/655
+    # updated patch from https://github.com/google/brotli/pull/655
+    url = "https://github.com/google/brotli/commit/47a554804ceabb899ae924aaee54df806053d0d1.patch";
+    sha256 = "sOeXNVsCaBSD9i82GRUDrkyreGeQ7qaJWjjy/uLL0/0=";
   });
 
-  cmakeFlags = []
-    ++ stdenv.lib.optional staticOnly "-DBUILD_SHARED_LIBS=OFF";
+  cmakeFlags = lib.optional staticOnly "-DBUILD_SHARED_LIBS=OFF";
 
   outputs = [ "out" "dev" "lib" ];
 
@@ -31,7 +38,14 @@ stdenv.mkDerivation rec {
 
   # 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";
+  prePatch = ''
+    rm BUILD
+
+    # Upstream fixed this reference to runtime-path after the release
+    # and with this references g++ complains about invalid option -R
+    sed -i 's/ -R''${libdir}//' scripts/libbrotli*.pc.in
+    cat scripts/libbrotli*.pc.in
+  '';
 
   # Don't bother with "man" output for now,
   # it currently only makes the manpages hard to use.
@@ -41,11 +55,9 @@ stdenv.mkDerivation rec {
     cp ../docs/*.3 $out/share/man/man3/
   '';
 
-  meta = with stdenv.lib; {
-    inherit (src.meta) homepage;
-
+  meta = with lib; {
+    homepage = "https://github.com/google/brotli";
     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
@@ -58,9 +70,8 @@ stdenv.mkDerivation rec {
           in the following internet draft:
           http://www.ietf.org/id/draft-alakuijala-brotli
       '';
-
     license = licenses.mit;
-    maintainers = [ maintainers.vcunat ];
+    maintainers = with maintainers; [ freezeboy ];
     platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/compression/bsc/default.nix b/pkgs/tools/compression/bsc/default.nix
index 384cbfc3839..93b715f853c 100644
--- a/pkgs/tools/compression/bsc/default.nix
+++ b/pkgs/tools/compression/bsc/default.nix
@@ -1,30 +1,31 @@
-{ stdenv, fetchurl, openmp ? null }:
+{ lib, stdenv, fetchFromGitHub, openmp }:
 
 stdenv.mkDerivation rec {
   pname = "bsc";
   version = "3.1.0";
 
-  src = fetchurl {
-    url = "https://github.com/IlyaGrebnov/libbsc/archive/${version}.tar.gz";
-    sha256 = "01yhizaf6qjv1plyrx0fcib264maa5qwvgfvvid9rzlzj9fxjib6";
+  src = fetchFromGitHub {
+    owner = "IlyaGrebnov";
+    repo = "libbsc";
+    rev = version;
+    sha256 = "0c0jmirh9y23kyi1jnrm13sa3xsjn54jazfr84ag45pai279fciz";
   };
 
   enableParallelBuilding = true;
 
-  buildInputs = stdenv.lib.optional stdenv.isDarwin openmp;
+  buildInputs = lib.optional stdenv.isDarwin openmp;
 
-  prePatch = ''
+  postPatch = ''
     substituteInPlace makefile \
         --replace 'g++' '$(CXX)'
   '';
 
-  preInstall = ''
-    makeFlagsArray+=("PREFIX=$out")
-  '';
+  makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "High performance block-sorting data compression library";
     homepage = "http://libbsc.com/";
+    maintainers = with maintainers; [ ];
     # Later commits changed the licence to Apache2 (no release yet, though)
     license = with licenses; [ lgpl3Plus ];
     platforms = platforms.unix;
diff --git a/pkgs/tools/compression/bsdiff/default.nix b/pkgs/tools/compression/bsdiff/default.nix
index a5b527d70b7..8f8818781ab 100644
--- a/pkgs/tools/compression/bsdiff/default.nix
+++ b/pkgs/tools/compression/bsdiff/default.nix
@@ -1,11 +1,11 @@
-{ stdenv, fetchurl, bzip2 }:
+{ lib, stdenv, fetchurl, bzip2 }:
 
 stdenv.mkDerivation rec {
   pname = "bsdiff";
   version = "4.3";
 
   src = fetchurl {
-    url    = "https://www.daemonology.net/bsdiff/${pname}-${version}.tar.gz";
+    url = "https://www.daemonology.net/bsdiff/${pname}-${version}.tar.gz";
     sha256 = "0j2zm3z271x5aw63mwhr3vymzn45p2vvrlrpm9cz2nywna41b0hq";
   };
 
@@ -27,11 +27,11 @@ stdenv.mkDerivation rec {
     cp bspatch.1 $out/share/man/man1
   '';
 
-  meta = {
+  meta = with lib; {
     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 ];
+    homepage = "https://www.daemonology.net/bsdiff/";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.thoughtpolice ];
   };
 }
diff --git a/pkgs/tools/compression/bzip2/1_1.nix b/pkgs/tools/compression/bzip2/1_1.nix
new file mode 100644
index 00000000000..ca5670a2e51
--- /dev/null
+++ b/pkgs/tools/compression/bzip2/1_1.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv
+, fetchFromGitLab
+, meson
+, python3
+, ninja
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bzip2-unstable";
+  version = "2020-08-11";
+
+  src = fetchFromGitLab {
+    owner = "federicomenaquintero";
+    repo = "bzip2";
+    rev = "15255b553e7c095fb7a26d4dc5819a11352ebba1";
+    sha256 = "sha256-BAyz35D62LWi47B/gNcCSKpdaECHBGSpt21vtnk3fKs=";
+  };
+
+  postPatch = ''
+    patchShebangs install_links.py
+  '';
+
+  nativeBuildInputs = [
+    meson
+    python3
+    ninja
+  ];
+
+  outputs = [ "bin" "dev" "out" "man" ];
+
+  mesonFlags = [
+    "-Ddocs=disabled"
+  ];
+
+  strictDeps = true;
+
+  meta = with lib; {
+    description = "High-quality data compression program";
+    license = licenses.bsdOriginal;
+    platforms = platforms.all;
+    maintainers = [];
+  };
+}
diff --git a/pkgs/tools/compression/bzip2/default.nix b/pkgs/tools/compression/bzip2/default.nix
index 3e20258cbbe..da37cf9fbd8 100644
--- a/pkgs/tools/compression/bzip2/default.nix
+++ b/pkgs/tools/compression/bzip2/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl
-, linkStatic ? (stdenv.hostPlatform.system == "i686-cygwin")
+{ lib, stdenv, fetchurl
+, linkStatic ? with stdenv.hostPlatform; isStatic || isCygwin
 , autoreconfHook
 }:
 
@@ -10,7 +10,7 @@
 
 stdenv.mkDerivation rec {
   pname = "bzip2";
-  version = "1.0.6.0.1";
+  version = "1.0.6.0.2";
 
   /* We use versions patched to use autotools style properly,
       saving lots of trouble. */
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
         "ftp://ftp.mplayerhq.hu/pub/linux/suse"
         "http://ftp.suse.com/pub" # the original patched version but slow
       ];
-    sha256 = "0b5b5p8c7bslc6fslcr1nj9136412v3qcvbg6yxi9argq9g72v8c";
+    sha256 = "sha256-FnhwNy4OHe8d5M6iYCClkxzcB/EHXg0veXwv43ZlxbA=";
   };
 
   nativeBuildInputs = [ autoreconfHook ];
@@ -40,14 +40,16 @@ stdenv.mkDerivation rec {
   outputs = [ "bin" "dev" "out" "man" ];
 
   configureFlags =
-    stdenv.lib.optionals linkStatic [ "--enable-static" "--disable-shared" ];
+    lib.optionals linkStatic [ "--enable-static" "--disable-shared" ];
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "High-quality data compression program";
+    homepage = "https://www.sourceware.org/bzip2";
+    changelog = "https://sourceware.org/git/?p=bzip2.git;a=blob;f=CHANGES;hb=HEAD";
     license = licenses.bsdOriginal;
     platforms = platforms.all;
-    maintainers = [];
+    maintainers = with maintainers; [ mic92 ];
   };
 }
diff --git a/pkgs/tools/compression/dejsonlz4/default.nix b/pkgs/tools/compression/dejsonlz4/default.nix
index 7520fc824c0..0dd703035fa 100644
--- a/pkgs/tools/compression/dejsonlz4/default.nix
+++ b/pkgs/tools/compression/dejsonlz4/default.nix
@@ -1,28 +1,30 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
+
 stdenv.mkDerivation rec {
-    pname = "dejsonlz4";
-    version = "1.1";
-    src = fetchFromGitHub {
-      owner = "avih";
-      repo = pname;
-      rev = "v${version}";
-      sha256 = "0ggs69qamaama5mid07mhp95m1x42wljdb953lrwfr7p8p6f8czh";
-    };
+  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
-    '';
+  buildPhase = ''
+    ${stdenv.cc.targetPrefix}cc -o dejsonlz4 src/dejsonlz4.c src/lz4.c
+  '';
 
-    installPhase = ''
-      mkdir -p $out/bin/
-      cp dejsonlz4 $out/bin/
-    '';
+  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;
-    };
-  }
+  meta = with lib; {
+    description = "Decompress Mozilla Firefox bookmarks backup files";
+    homepage = "https://github.com/avih/dejsonlz4";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ mt-caret ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/compression/dtrx/default.nix b/pkgs/tools/compression/dtrx/default.nix
index 81a446066d9..6c4f2f6e854 100644
--- a/pkgs/tools/compression/dtrx/default.nix
+++ b/pkgs/tools/compression/dtrx/default.nix
@@ -1,4 +1,4 @@
-{stdenv, lib, fetchurl, pythonPackages
+{ lib, fetchurl, python2Packages
 , gnutar, unzip, lhasa, rpm, binutils, cpio, gzip, p7zip, cabextract, unrar, unshield
 , bzip2, xz, lzip
 # unzip is handled by p7zip
@@ -11,7 +11,7 @@ let
   ++ lib.optional (unrarSupport) unrar
   ++ [ bzip2 xz lzip ]);
 
-in pythonPackages.buildPythonApplication rec {
+in python2Packages.buildPythonApplication rec {
   pname = "dtrx";
   version = "7.1";
 
@@ -24,7 +24,18 @@ in pythonPackages.buildPythonApplication rec {
     wrapProgram "$out/bin/dtrx" --prefix PATH : "${archivers}"
   '';
 
-  meta = with stdenv.lib; {
+  checkPhase = ''
+    python2 tests/compare.py
+  '';
+
+  checkInputs = with python2Packages; [
+    pyyaml
+  ];
+
+  # custom test suite fails
+  doCheck = false;
+
+  meta = with 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;
diff --git a/pkgs/tools/compression/flips/default.nix b/pkgs/tools/compression/flips/default.nix
new file mode 100644
index 00000000000..b4a79aac212
--- /dev/null
+++ b/pkgs/tools/compression/flips/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, gtk3, libdivsufsort, pkg-config, wrapGAppsHook }:
+
+stdenv.mkDerivation {
+  pname = "flips";
+  version = "unstable-2021-05-18";
+
+  src = fetchFromGitHub {
+    owner = "Alcaro";
+    repo = "Flips";
+    rev = "3476e5e46fc6f10df475f0cad1714358ba04c756";
+    sha256 = "0s13qrmqfmlb2vy0smpgw39vjkl8vzsmpzk52jnc9r7b4hisii39";
+  };
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook ];
+  buildInputs = [ gtk3 libdivsufsort ];
+  patches = [ ./use-system-libdivsufsort.patch ];
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+  buildPhase = ''
+    runHook preBuild
+    ./make.sh
+    runHook postBuild
+  '';
+
+  meta = with lib; {
+    description = "A patcher for IPS and BPS files";
+    homepage = "https://github.com/Alcaro/Flips";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.xfix ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/compression/flips/use-system-libdivsufsort.patch b/pkgs/tools/compression/flips/use-system-libdivsufsort.patch
new file mode 100644
index 00000000000..aa741decb01
--- /dev/null
+++ b/pkgs/tools/compression/flips/use-system-libdivsufsort.patch
@@ -0,0 +1,15 @@
+diff --git a/Makefile b/Makefile
+index c9d8b6d..9d66b0b 100644
+--- a/Makefile
++++ b/Makefile
+@@ -79,9 +79,7 @@ endif
+ MOREFLAGS := $(CFLAGS_$(TARGET))
+ 
+ 
+-DIVSUF := libdivsufsort-2.0.1
+-SOURCES += $(DIVSUF)/lib/divsufsort.c $(DIVSUF)/lib/sssort.c $(DIVSUF)/lib/trsort.c
+-MOREFLAGS += -I$(DIVSUF)/include -DHAVE_CONFIG_H -D__STDC_FORMAT_MACROS
++MOREFLAGS += -ldivsufsort
+ 
+ ifeq ($(TARGET),gtk)
+   CFLAGS_G += -fopenmp
diff --git a/pkgs/tools/compression/gzip/default.nix b/pkgs/tools/compression/gzip/default.nix
index 9628e100c1c..6bcd5ae0c42 100644
--- a/pkgs/tools/compression/gzip/default.nix
+++ b/pkgs/tools/compression/gzip/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , xz
 , writeText
@@ -57,8 +57,8 @@ stdenv.mkDerivation rec {
         is just a bonus.
       '';
 
-    platforms = stdenv.lib.platforms.all;
+    platforms = lib.platforms.all;
 
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
   };
 }
diff --git a/pkgs/tools/compression/gzrt/default.nix b/pkgs/tools/compression/gzrt/default.nix
index 4367f4b6d61..664c1eb7856 100644
--- a/pkgs/tools/compression/gzrt/default.nix
+++ b/pkgs/tools/compression/gzrt/default.nix
@@ -1,10 +1,11 @@
-{ stdenv, fetchurl, zlib }:
+{ lib, stdenv, fetchurl, zlib }:
 
 stdenv.mkDerivation rec {
-  name = "gzrt-0.8";
+  pname = "gzrt";
+  version = "0.8";
 
   src = fetchurl {
-    url = "https://www.urbanophile.com/arenn/coding/gzrt/${name}.tar.gz";
+    url = "https://www.urbanophile.com/arenn/coding/gzrt/gzrt-${version}.tar.gz";
     sha256 = "1vhzazj47xfpbfhzkwalz27cc0n5gazddmj3kynhk0yxv99xrdxh";
   };
 
@@ -15,10 +16,11 @@ stdenv.mkDerivation rec {
     cp gzrecover $out/bin
   '';
 
-  meta = {
+  meta = with lib; {
     homepage = "https://www.urbanophile.com/arenn/hacking/gzrt/";
     description = "The gzip Recovery Toolkit";
-    license = stdenv.lib.licenses.gpl2Plus;
-    platforms = stdenv.lib.platforms.unix;
+    maintainers = with maintainers; [ ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/compression/hacpack/default.nix b/pkgs/tools/compression/hacpack/default.nix
new file mode 100644
index 00000000000..e60d483574b
--- /dev/null
+++ b/pkgs/tools/compression/hacpack/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "hacpack";
+  version = "1.36";
+
+  src = fetchFromGitHub {
+    owner = "The-4n";
+    repo = "hacpack";
+    rev = "v${version}";
+    sha256 = "0d846l36w1n9rxv79fbyhl2zdbqhlgrvk21b9vzr9x77yki89ygs";
+  };
+
+  preConfigure = ''
+    mv config.mk.template config.mk
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ./hacpack $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/The-4n/hacPack";
+    description = "Make and repack Nintendo Switch NCAs/NSPs";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.ivar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/compression/hactool/default.nix b/pkgs/tools/compression/hactool/default.nix
index d34ca73556b..c6e0a3a2851 100644
--- a/pkgs/tools/compression/hactool/default.nix
+++ b/pkgs/tools/compression/hactool/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "hactool";
@@ -15,13 +15,13 @@ stdenv.mkDerivation rec {
     mv config.mk.template config.mk
   '';
 
-  makeFlags = stdenv.lib.optionals stdenv.isDarwin [ "CC=cc" ];
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
 
   installPhase = ''
     install -D hactool $out/bin/hactool
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/SciresM/hactool";
     description = "A tool to manipulate common file formats for the Nintendo Switch";
     longDescription = "A tool to view information about, decrypt, and extract common file formats for the Nintendo Switch, especially Nintendo Content Archives";
diff --git a/pkgs/tools/compression/imagelol/default.nix b/pkgs/tools/compression/imagelol/default.nix
new file mode 100644
index 00000000000..d54d2da2f90
--- /dev/null
+++ b/pkgs/tools/compression/imagelol/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "imagelol";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "MCRedstoner2004";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0978zdrfj41jsqm78afyyd1l64iki9nwjvhd8ynii1b553nn4dmd";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ./ImageLOL $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/MCredstoner2004/ImageLOL";
+    description = "Simple program to store a file into a PNG image";
+    license = licenses.mit;
+    maintainers = [ maintainers.ivar ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/compression/kzipmix/default.nix b/pkgs/tools/compression/kzipmix/default.nix
index f68b0cdc751..9072a24b7fb 100644
--- a/pkgs/tools/compression/kzipmix/default.nix
+++ b/pkgs/tools/compression/kzipmix/default.nix
@@ -1,25 +1,26 @@
-{stdenv, fetchurl}:
+{ lib, stdenv, fetchurl }:
 
-stdenv.mkDerivation {
-  name = "kzipmix-20091108";
+stdenv.mkDerivation rec {
+  pname = "kzipmix";
+  version = "20200115";
 
   src = fetchurl {
-    url = "http://static.jonof.id.au/dl/kenutils/kzipmix-20091108-linux.tar.gz";
-    sha256 = "19gyn8pblffdz1bf3xkbpzx8a8wn3xb0v411pqzmz5g5l6pm5gph";
+    url = "http://static.jonof.id.au/dl/kenutils/kzipmix-${version}-linux.tar.gz";
+    sha256 = "sha256-ePgye0D6/ED53zx6xffLnYhkjed7SPU4BLOZQr9E3yA=";
   };
 
   installPhase = ''
     mkdir -p $out/bin
-    cp kzip zipmix $out/bin
-    
+    cp amd64/{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 = {
+  meta = with lib; {
     description = "A tool that aggressively optimizes the sizes of Zip archives";
-    license = stdenv.lib.licenses.unfree;
+    license = licenses.unfree;
     homepage = "http://advsys.net/ken/utils.htm";
-    maintainers = [ stdenv.lib.maintainers.sander ];
+    maintainers = [ maintainers.sander ];
   };
 }
diff --git a/pkgs/tools/compression/lbzip2/default.nix b/pkgs/tools/compression/lbzip2/default.nix
index 99d41c06ec6..6d4017ac62c 100644
--- a/pkgs/tools/compression/lbzip2/default.nix
+++ b/pkgs/tools/compression/lbzip2/default.nix
@@ -1,24 +1,25 @@
-{ stdenv, fetchFromGitHub, gnulib, perl, autoconf, automake }:
+{ lib, stdenv, fetchFromGitHub, gnulib, perl, autoconf, automake }:
 
 stdenv.mkDerivation rec {
+  pname = "lbzip2";
   version = "2.5";
-  name = "lbzip2-${version}";
 
   src = fetchFromGitHub {
     owner = "kjn";
     repo = "lbzip2";
-    sha256 = "1h321wva6fp6khz6x0i6rqb76xh327nw6v5jhgjpcckwdarj5jv8";
     rev = "v${version}";
+    sha256 = "1h321wva6fp6khz6x0i6rqb76xh327nw6v5jhgjpcckwdarj5jv8";
   };
 
   buildInputs = [ gnulib perl ];
   nativeBuildInputs = [ autoconf automake ];
 
   preConfigure = ''
+    substituteInPlace configure.ac --replace 'AC_PREREQ([2.63])' 'AC_PREREQ(2.64)'
     ./build-aux/autogen.sh
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/kjn/lbzip2"; # Formerly http://lbzip2.org/
     description = "Parallel bzip2 compression utility";
     license = licenses.gpl3;
diff --git a/pkgs/tools/compression/lhasa/default.nix b/pkgs/tools/compression/lhasa/default.nix
index edf42266acd..4f1ba702831 100644
--- a/pkgs/tools/compression/lhasa/default.nix
+++ b/pkgs/tools/compression/lhasa/default.nix
@@ -1,21 +1,24 @@
-{stdenv, fetchurl}:
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "lhasa";
+  version = "0.3.1";
 
-stdenv.mkDerivation {
-  name = "lhasa-0.3.1";
   src = fetchurl {
-    url = "https://soulsphere.org/projects/lhasa/lhasa-0.3.1.tar.gz";
+    url = "https://soulsphere.org/projects/lhasa/lhasa-${version}.tar.gz";
     sha256 = "092zi9av18ma20c6h9448k0bapvx2plnp292741dvfd9hmgqxc1z";
   };
-  meta = {
+
+  meta = with lib; {
     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;
+    license = licenses.isc;
     homepage = "http://fragglet.github.io/lhasa";
-    maintainers = with stdenv.lib; [ maintainers.sander ];
-    platforms = with stdenv.lib.platforms; linux ++ darwin;
+    maintainers = [ maintainers.sander ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/compression/lrzip/default.nix b/pkgs/tools/compression/lrzip/default.nix
index aaddb6299c4..02f62c3e3c0 100644
--- a/pkgs/tools/compression/lrzip/default.nix
+++ b/pkgs/tools/compression/lrzip/default.nix
@@ -1,21 +1,25 @@
-{stdenv, fetchurl, zlib, lzo, bzip2, nasm, perl}:
+{ lib, stdenv, fetchurl, zlib, lzo, bzip2, lz4, nasm, perl }:
 
 stdenv.mkDerivation rec {
-  version = "0.631";
   pname = "lrzip";
+  version = "0.641";
 
   src = fetchurl {
-    url = "http://ck.kolivas.org/apps/lrzip/${pname}-${version}.tar.bz2";
-    sha256 = "0mb449vmmwpkalq732jdyginvql57nxyd31sszb108yps1lf448d";
+    url = "http://ck.kolivas.org/apps/lrzip/${pname}-${version}.tar.xz";
+    sha256 = "0ziyanspd96dc3lp2qdcylc7aq8dhb511jhqrhxvlp502fjqjqrc";
   };
 
-  buildInputs = [ zlib lzo bzip2 nasm perl ];
+  buildInputs = [ zlib lzo bzip2 lz4 nasm perl ];
 
-  meta = {
+  configureFlags = [
+    "--disable-asm"
+  ];
+
+  meta = with lib; {
     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;
+    maintainers = with maintainers; [ ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/compression/lz4/default.nix b/pkgs/tools/compression/lz4/default.nix
index 6bc365b8e1e..94f739a6c53 100644
--- a/pkgs/tools/compression/lz4/default.nix
+++ b/pkgs/tools/compression/lz4/default.nix
@@ -1,22 +1,36 @@
-{ stdenv, fetchFromGitHub, valgrind, fetchpatch
-, enableStatic ? false, enableShared ? true
+{ lib, stdenv, fetchFromGitHub, valgrind, fetchpatch
+, enableStatic ? stdenv.hostPlatform.isStatic
+, enableShared ? !stdenv.hostPlatform.isStatic
 }:
 
 stdenv.mkDerivation rec {
   pname = "lz4";
-  version = "1.9.2";
+  version = "1.9.3";
 
   src = fetchFromGitHub {
-    sha256 = "0lpaypmk70ag2ks3kf2dl4ac3ba40n5kc1ainkp9wfjawz76mh61";
+    sha256 = "1w02kazh1fps3sji2sn89fz862j1199c5ajrqcgl1bnlxj09kcbz";
     rev = "v${version}";
     repo = pname;
     owner = pname;
   };
 
+  patches = [
+    (fetchpatch { # https://github.com/lz4/lz4/pull/972
+      name = "CVE-2021-3520.patch";
+      url = "https://github.com/lz4/lz4/commit/8301a21773ef61656225e264f4f06ae14462bca7.patch";
+      sha256 = "0r1cwpqdkdc8im0pf2r5jp7mwwn69xcw405rrk7rc0mpjcp5ydfk";
+    })
+    (fetchpatch { # https://github.com/lz4/lz4/pull/973
+      name = "avoid-null-pointer-dereference.patch";
+      url = "https://github.com/lz4/lz4/commit/29a6a1f4941e7243241fe00d6c13b749fd6b60c2.patch";
+      sha256 = "0v5yl5hd3qrfm3xm7m06j4b21qwllb4cqkjn2az7x1vnzqgpf8y7";
+    })
+  ];
+
   # TODO(@Ericson2314): Separate binaries and libraries
   outputs = [ "bin" "out" "dev" ];
 
-  buildInputs = stdenv.lib.optional doCheck valgrind;
+  buildInputs = lib.optional doCheck valgrind;
 
   enableParallelBuilding = true;
 
@@ -28,7 +42,7 @@ stdenv.mkDerivation rec {
     "WINDRES:=${stdenv.cc.bintools.targetPrefix}windres"
   ]
     # TODO make full dictionary
-    ++ stdenv.lib.optional stdenv.hostPlatform.isMinGW "TARGET_OS=MINGW"
+    ++ lib.optional stdenv.hostPlatform.isMinGW "TARGET_OS=MINGW"
     ;
 
   doCheck = false; # tests take a very long time
@@ -36,7 +50,7 @@ stdenv.mkDerivation rec {
 
   # TODO(@Ericson2314): Make resusable setup hook for this issue on Windows.
   postInstall =
-    stdenv.lib.optionalString stdenv.hostPlatform.isWindows ''
+    lib.optionalString stdenv.hostPlatform.isWindows ''
       mv $out/bin/*.dll $out/lib
       ln -s $out/lib/*.dll
     ''
@@ -44,7 +58,7 @@ stdenv.mkDerivation rec {
       moveToOutput bin "$bin"
     '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Extremely fast compression algorithm";
     longDescription = ''
       Very fast lossless compression algorithm, providing compression speed
diff --git a/pkgs/tools/compression/lzbench/default.nix b/pkgs/tools/compression/lzbench/default.nix
index be0491007e2..93ccc67f7d1 100644
--- a/pkgs/tools/compression/lzbench/default.nix
+++ b/pkgs/tools/compression/lzbench/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "lzbench";
-  version = "1.8";
+  version = "1.8.1";
 
   src = fetchFromGitHub {
     owner = "inikep";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0gxw9b3yjj3z2b1y9mx3yfhklyxpfmb8fjf9mfpg9hlbr9mcpff3";
+    sha256 = "19zlvcjb1qg4fx30rrp6m650660y35736j8szvdxmqh9ipkisyia";
   };
 
   enableParallelBuilding = true;
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     cp lzbench $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit (src.meta) homepage;
     description = "In-memory benchmark of open-source LZ77/LZSS/LZMA compressors";
     license = licenses.free;
diff --git a/pkgs/tools/compression/lzfse/default.nix b/pkgs/tools/compression/lzfse/default.nix
index bd97620dba6..13764971bb5 100644
--- a/pkgs/tools/compression/lzfse/default.nix
+++ b/pkgs/tools/compression/lzfse/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake }:
+{ lib, stdenv, fetchFromGitHub, cmake }:
 
 stdenv.mkDerivation rec {
   pname = "lzfse";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ cmake ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/lzfse/lzfse";
     description = "a reference C implementation of the LZFSE compressor";
     longDescription = ''
diff --git a/pkgs/tools/compression/lzham/default.nix b/pkgs/tools/compression/lzham/default.nix
index 9c18e4d69fe..7f4273163a3 100644
--- a/pkgs/tools/compression/lzham/default.nix
+++ b/pkgs/tools/compression/lzham/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake } :
+{ lib, stdenv, fetchFromGitHub, cmake } :
 
 stdenv.mkDerivation {
   name = "lzham-1.0";
@@ -10,16 +10,14 @@ stdenv.mkDerivation {
     sha256 = "14c1zvzmp1ylp4pgayfdfk1kqjb23xj4f7ll1ra7b18wjxc9ja1v";
   };
 
-  buildInputs = [ cmake ];
-
-  enableParallelBuilding = true;
+  nativeBuildInputs = [ cmake ];
 
   installPhase = ''
     mkdir -p $out/bin
     cp ../bin_linux/lzhamtest $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/compression/lzip/default.nix b/pkgs/tools/compression/lzip/default.nix
index e55af8b94ed..aa6b6d31a89 100644
--- a/pkgs/tools/compression/lzip/default.nix
+++ b/pkgs/tools/compression/lzip/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, texinfo }:
+{ lib, stdenv, fetchurl, texinfo }:
 
 # Note: this package is used for bootstrapping fetchurl, and thus
 # cannot use fetchpatch! All mutable patches (generated by GitHub or
@@ -7,20 +7,20 @@
 
 stdenv.mkDerivation rec {
   pname = "lzip";
-  version = "1.21";
+  version = "1.22";
 
   nativeBuildInputs = [ texinfo ];
 
   src = fetchurl {
     url = "mirror://savannah/lzip/${pname}-${version}.tar.gz";
-    sha256 = "12qdcw5k1cx77brv9yxi1h4dzwibhfmdpigrj43nfk8nscwm12z4";
+    sha256 = "sha256-wzQtQuZxOcFluLEo0DO1yWiToTrF8lkzGQMVIU6HqUg=";
   };
 
   configureFlags = [
     "CPPFLAGS=-DNDEBUG"
     "CFLAGS=-O3"
     "CXXFLAGS=-O3"
-  ] ++ stdenv.lib.optional (stdenv.hostPlatform != stdenv.buildPlatform)
+  ] ++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform)
     "CXX=${stdenv.cc.targetPrefix}c++";
 
   setupHook = ./lzip-setup-hook.sh;
@@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/compression/lzop/default.nix b/pkgs/tools/compression/lzop/default.nix
index 48645942038..8bf58d9cc35 100644
--- a/pkgs/tools/compression/lzop/default.nix
+++ b/pkgs/tools/compression/lzop/default.nix
@@ -1,17 +1,20 @@
-{stdenv, fetchurl, lzo}:
+{ lib, stdenv, fetchurl, lzo }:
 
 stdenv.mkDerivation rec {
-  name = "lzop-1.04";
+  pname = "lzop";
+  version = "1.04";
+
   src = fetchurl {
-    url = "https://www.lzop.org/download/${name}.tar.gz";
+    url = "https://www.lzop.org/download/lzop-${version}.tar.gz";
     sha256 = "0h9gb8q7y54m9mvy3jvsmxf21yx8fc3ylzh418hgbbv0i8mbcwky";
   };
 
   buildInputs = [ lzo ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.lzop.org";
     description = "Fast file compressor";
+    maintainers = with maintainers; [ ];
     license = licenses.gpl2;
     platforms = platforms.unix;
   };
diff --git a/pkgs/tools/compression/mozlz4a/default.nix b/pkgs/tools/compression/mozlz4a/default.nix
index 04323f8c49e..0aec49827e6 100644
--- a/pkgs/tools/compression/mozlz4a/default.nix
+++ b/pkgs/tools/compression/mozlz4a/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, python3, runtimeShell }:
+{ lib, stdenv, fetchurl, python3, runtimeShell }:
 
 stdenv.mkDerivation rec {
   pname = "mozlz4a";
@@ -24,11 +24,10 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.bsd2;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
     homepage = "https://gist.githubusercontent.com/Tblue/62ff47bef7f894e92ed5";
   };
 }
diff --git a/pkgs/tools/compression/ncompress/default.nix b/pkgs/tools/compression/ncompress/default.nix
index b60a23e660c..f580709495e 100644
--- a/pkgs/tools/compression/ncompress/default.nix
+++ b/pkgs/tools/compression/ncompress/default.nix
@@ -1,21 +1,20 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation rec {
-  name = "ncompress-4.2.4.5";
+  pname = "ncompress";
+  version = "5.0";
 
   builder = ./builder.sh;
 
-  patches = [ ./makefile.patch ];
-
   src = fetchurl {
-    url = "mirror://sourceforge/project/ncompress/${name}.tar.gz";
-    sha256 = "0fwhfijnzggqpbmln82zq7zp6sra7p9arfakswicwi7qsp6vnxgm";
+    url = "mirror://sourceforge/project/ncompress/${pname}-${version}.tar.gz";
+    sha256 = "004r086c11sw9vg2j3srgxpz98w8pycjl33bk3pgqnd0s92igrn4";
   };
 
   meta = {
     homepage = "http://ncompress.sourceforge.net/";
-    license = stdenv.lib.licenses.publicDomain;
+    license = lib.licenses.publicDomain;
     description = "A fast, simple LZW file compressor";
-    platforms = stdenv.lib.platforms.unix;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/compression/ncompress/makefile.patch b/pkgs/tools/compression/ncompress/makefile.patch
deleted file mode 100644
index 49aa4e65c76..00000000000
--- a/pkgs/tools/compression/ncompress/makefile.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-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/pkgs/tools/compression/nx2elf/default.nix b/pkgs/tools/compression/nx2elf/default.nix
new file mode 100644
index 00000000000..8b7f094bf39
--- /dev/null
+++ b/pkgs/tools/compression/nx2elf/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, lz4 }:
+
+stdenv.mkDerivation rec {
+  pname = "nx2elf";
+  version = "unstable-2020-05-26";
+
+  src = fetchFromGitHub {
+    owner = "shuffle2";
+    repo = "nx2elf";
+    rev = "7212e82a77b84fcc18ef2d050970350dbf63649b";
+    sha256 = "1j4k5s86c6ixa3wdqh4cfm31fxabwn6jcjc6pippx8mii98ac806";
+  };
+
+  buildInputs = [ lz4 ];
+
+  postPatch = ''
+    # This project does not comply with C++14 standards, and compilation on that fails.
+    # This does however succesfully compile with the gnu++20 standard.
+    substituteInPlace Makefile --replace "c++14" "gnu++20"
+
+    # pkg-config is not supported, so we'll manually use a non-ancient version of lz4
+    cp ${lz4.src}/lib/lz4.{h,c} .
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -D nx2elf $out/bin/nx2elf
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/shuffle2/nx2elf";
+    description = "Convert Nintendo Switch executable files to ELFs";
+    license = licenses.unfree; # No license specified upstream
+    platforms = [ "x86_64-linux" ]; # Should work on Darwin as well, but this is untested. aarch64-linux fails.
+    maintainers = [ maintainers.ivar ];
+  };
+}
diff --git a/pkgs/tools/compression/pbzip2/default.nix b/pkgs/tools/compression/pbzip2/default.nix
index 1c78d27654d..6d27b84e8c4 100644
--- a/pkgs/tools/compression/pbzip2/default.nix
+++ b/pkgs/tools/compression/pbzip2/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, bzip2 }:
+{ lib, stdenv, fetchurl, bzip2 }:
 
 let major = "1.1";
     version = "${major}.13";
@@ -18,9 +18,9 @@ stdenv.mkDerivation rec {
 
   installFlags = [ "PREFIX=$(out)" ];
 
-  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.cc.isClang "-Wno-error=reserved-user-defined-literal";
+  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=reserved-user-defined-literal";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://compression.ca/pbzip2/";
     description = "A parallel implementation of bzip2 for multi-core machines";
     license = licenses.bsd2;
diff --git a/pkgs/tools/compression/pbzx/default.nix b/pkgs/tools/compression/pbzx/default.nix
index 13e5882788d..03b984bb643 100644
--- a/pkgs/tools/compression/pbzx/default.nix
+++ b/pkgs/tools/compression/pbzx/default.nix
@@ -1,4 +1,4 @@
-{stdenv, lib, fetchFromGitHub, lzma, xar}:
+{stdenv, lib, fetchFromGitHub, xz, xar}:
 
 stdenv.mkDerivation rec {
   pname = "pbzx";
@@ -9,16 +9,16 @@ stdenv.mkDerivation rec {
     rev = "v${version}";
     sha256 = "0bwd7wmnhpz1n5p39mh6asfyccj4cm06hwigslcwbb3pdwmvxc90";
   };
-  buildInputs = [ lzma xar ];
+  buildInputs = [ xz xar ];
   buildPhase = ''
-    cc pbzx.c -llzma -lxar -o pbzx
+    ${stdenv.cc.targetPrefix}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.";
+    description = "Stream parser of Apple's pbzx compression format";
     platforms = platforms.unix;
     license = licenses.gpl3;
     maintainers = [ maintainers.matthewbauer ];
diff --git a/pkgs/tools/compression/pigz/default.nix b/pkgs/tools/compression/pigz/default.nix
index 1953b793657..6dbe190c400 100644
--- a/pkgs/tools/compression/pigz/default.nix
+++ b/pkgs/tools/compression/pigz/default.nix
@@ -1,36 +1,34 @@
-{ stdenv, fetchurl, zlib, utillinux }:
+{ lib, stdenv, fetchurl, zlib, util-linux }:
 
-let name = "pigz";
-    version = "2.4";
-in
-stdenv.mkDerivation {
-  name = name + "-" + version;
+stdenv.mkDerivation rec {
+  pname = "pigz";
+  version = "2.6";
 
   src = fetchurl {
-    url = "https://www.zlib.net/${name}/${name}-${version}.tar.gz";
-    sha256 = "0wsgw5vwl23jrnpsvd8v3xcp5k4waw5mk0164fynjhkv58i1dy54";
+    url = "https://www.zlib.net/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-Lu17DXRJ0dcJA/KmLNYAXSYus6jJ6YaHvIy7WAnbKn0=";
   };
 
   enableParallelBuilding = true;
 
-  buildInputs = [zlib] ++ stdenv.lib.optional stdenv.isLinux utillinux;
+  buildInputs = [ zlib ] ++ lib.optional stdenv.isLinux util-linux;
 
   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"
+  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/";
+  meta = with lib; {
+    homepage = "https://www.zlib.net/pigz/";
     description = "A parallel implementation of gzip for multi-core machines";
+    maintainers = with maintainers; [ ];
     license = licenses.zlib;
     platforms = platforms.unix;
   };
diff --git a/pkgs/tools/compression/pixz/default.nix b/pkgs/tools/compression/pixz/default.nix
index c7b4b46328d..ec05a44a518 100644
--- a/pkgs/tools/compression/pixz/default.nix
+++ b/pkgs/tools/compression/pixz/default.nix
@@ -1,25 +1,42 @@
-{
-  stdenv, fetchFromGitHub, autoconf, automake, libtool, pkgconfig
-  , asciidoc, libxslt, libxml2, docbook_xml_dtd_45, docbook_xsl
-  , libarchive, lzma
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoconf
+, automake
+, libtool
+, pkg-config
+, asciidoc
+, libxslt
+, libxml2
+, docbook_xml_dtd_45
+, docbook_xsl
+, libarchive
+, xz
 }:
+
 stdenv.mkDerivation rec {
-  baseName = "pixz";
+  pname = "pixz";
   version = "1.0.7";
-  name = "${baseName}-${version}";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [
-    autoconf automake libtool asciidoc libxslt libxml2
-    docbook_xml_dtd_45 docbook_xsl
-    libarchive lzma
+    autoconf
+    automake
+    libtool
+    asciidoc
+    libxslt
+    libxml2
+    docbook_xml_dtd_45
+    docbook_xsl
+    libarchive
+    xz
   ];
   preBuild = ''
     echo "XML_CATALOG_FILES='$XML_CATALOG_FILES'"
   '';
   src = fetchFromGitHub {
     owner = "vasi";
-    repo = baseName;
+    repo = pname;
     rev = "v${version}";
     sha256 = "163axxs22w7pghr786hda22mnlpvmi50hzhfr9axwyyjl9n41qs2";
   };
@@ -27,11 +44,10 @@ stdenv.mkDerivation rec {
     ./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;
+  meta = with lib; {
+    description = "A parallel compressor/decompressor for xz format";
+    license = licenses.bsd2;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/compression/pxz/_SC_ARG_MAX.patch b/pkgs/tools/compression/pxz/_SC_ARG_MAX.patch
deleted file mode 100644
index fac8f1fc147..00000000000
--- a/pkgs/tools/compression/pxz/_SC_ARG_MAX.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-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/pkgs/tools/compression/pxz/default.nix b/pkgs/tools/compression/pxz/default.nix
index e731d91f6d6..4ea95a3f78a 100644
--- a/pkgs/tools/compression/pxz/default.nix
+++ b/pkgs/tools/compression/pxz/default.nix
@@ -1,20 +1,17 @@
-{ stdenv, fetchgit, xz, lzma }:
+{ lib, stdenv, fetchFromGitHub, xz }:
 
-let name = "pxz";
-    version = "4.999.9beta+git";
-in
-stdenv.mkDerivation {
-  name = name + "-" + version;
+stdenv.mkDerivation rec {
+  pname = "pxz";
+  version = "4.999.9beta+git";
 
-  src = fetchgit {
-    url = "https://github.com/jnovy/pxz.git";
-    rev = "ae808463c2950edfdedb8fb49f95006db0a18667";
-    sha256 = "0na2kw8cf0qd8l1aywlv9m3xrxnqlcwxfdwp3f7x9vxwqx3k32kc";
+  src = fetchFromGitHub {
+    owner = "jnovy";
+    repo = "pxz";
+    rev = "124382a6d0832b13b7c091f72264f8f3f463070a";
+    sha256 = "15mmv832iqsqwigidvwnf0nyivxf0y8m22j2szy4h0xr76x4z21m";
   };
 
-  buildInputs = [ lzma ];
-
-  patches = [ ./_SC_ARG_MAX.patch ];
+  buildInputs = [ xz ];
 
   buildPhase = ''
     gcc -o pxz pxz.c -llzma \
@@ -30,15 +27,18 @@ stdenv.mkDerivation {
     cp pxz.1 $out/share/man/man1
   '';
 
-  meta = {
+  meta = with lib; {
     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
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ pashev ];
+    description = "compression utility that runs LZMA compression of different parts on multiple cores simultaneously";
+    longDescription = ''
+      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;
+      on compression ratio
+    '';
+    platforms = with platforms; linux;
   };
 }
diff --git a/pkgs/tools/compression/rzip/default.nix b/pkgs/tools/compression/rzip/default.nix
index fe4ac14ad02..5f878f8c494 100644
--- a/pkgs/tools/compression/rzip/default.nix
+++ b/pkgs/tools/compression/rzip/default.nix
@@ -1,9 +1,11 @@
-{stdenv, fetchurl, fetchpatch, bzip2}:
+{ lib, stdenv, fetchurl, fetchpatch, bzip2 }:
+
+stdenv.mkDerivation rec {
+  pname = "rzip";
+  version = "2.1";
 
-stdenv.mkDerivation {
-  name = "rzip-2.1";
   src = fetchurl {
-    url = "mirror://samba/rzip/rzip-2.1.tar.gz";
+    url = "mirror://samba/rzip/rzip-${version}.tar.gz";
     sha256 = "4bb96f4d58ccf16749ed3f836957ce97dbcff3e3ee5fd50266229a48f89815b7";
   };
   buildInputs = [ bzip2 ];
@@ -16,10 +18,11 @@ stdenv.mkDerivation {
     })
   ];
 
-  meta = {
+  meta = with lib; {
     homepage = "https://rzip.samba.org/";
     description = "Compression program";
-    license = stdenv.lib.licenses.gpl2Plus;
-    platforms = stdenv.lib.platforms.unix;
+    maintainers = with maintainers; [ ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/compression/upx/default.nix b/pkgs/tools/compression/upx/default.nix
index 06dcaa26077..10e02626c01 100644
--- a/pkgs/tools/compression/upx/default.nix
+++ b/pkgs/tools/compression/upx/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, ucl, zlib, perl }:
+{ lib, stdenv, fetchurl, ucl, zlib, perl }:
 
 stdenv.mkDerivation rec {
   pname = "upx";
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
     cp src/upx.out $out/bin/upx
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://upx.github.io/";
     description = "The Ultimate Packer for eXecutables";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/compression/xar/0001-Add-useless-descriptions-to-AC_DEFINE.patch b/pkgs/tools/compression/xar/0001-Add-useless-descriptions-to-AC_DEFINE.patch
new file mode 100644
index 00000000000..a605d2db170
--- /dev/null
+++ b/pkgs/tools/compression/xar/0001-Add-useless-descriptions-to-AC_DEFINE.patch
@@ -0,0 +1,95 @@
+From a14be07c0aae3bf6f732d1ca5f625ba375702121 Mon Sep 17 00:00:00 2001
+From: Andrew Childs <andrew.childs@bibo.com.ph>
+Date: Sun, 15 Nov 2020 19:12:33 +0900
+Subject: [PATCH 1/2] Add useless descriptions to AC_DEFINE
+
+Removes autoheader warnings.
+---
+ configure.ac | 42 +++++++++++++++++++++---------------------
+ 1 file changed, 21 insertions(+), 21 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 812b5ff..358ab89 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -210,48 +210,48 @@ AC_CHECK_MEMBERS([struct stat.st_flags])
+ 
+ AC_CHECK_SIZEOF(uid_t)
+ if test $ac_cv_sizeof_uid_t = "4"; then
+-AC_DEFINE(UID_STRING, RId32)
+-AC_DEFINE(UID_CAST, (uint32_t))
++AC_DEFINE([UID_STRING], RId32, [UID_STRING])
++AC_DEFINE([UID_CAST], (uint32_t), [UID_CAST])
+ elif test $ac_cv_sizeof_uid_t = "8"; then
+-AC_DEFINE(UID_STRING, PRId64)
+-AC_DEFINE(UID_CAST, (uint64_t))
++AC_DEFINE([UID_STRING], PRId64, [UID_STRING])
++AC_DEFINE([UID_CAST], (uint64_t), [UID_CAST])
+ else
+ AC_ERROR(can not detect the size of your system's uid_t type)
+ fi
+ 
+ AC_CHECK_SIZEOF(gid_t)
+ if test $ac_cv_sizeof_gid_t = "4"; then
+-AC_DEFINE(GID_STRING, PRId32)
+-AC_DEFINE(GID_CAST, (uint32_t))
++AC_DEFINE([GID_STRING], PRId32, [GID_STRING])
++AC_DEFINE([GID_CAST], (uint32_t), [GID_CAST])
+ elif test $ac_cv_sizeof_gid_t = "8"; then
+-AC_DEFINE(GID_STRING, PRId64)
+-AC_DEFINE(GID_CAST, (uint64_t))
++AC_DEFINE([GID_STRING], PRId64, [GID_STRING])
++AC_DEFINE([GID_CAST], (uint64_t), [GID_CAST])
+ else
+ AC_ERROR(can not detect the size of your system's gid_t type)
+ fi
+ 
+ AC_CHECK_SIZEOF(ino_t)
+ if test $ac_cv_sizeof_ino_t = "4"; then
+-AC_DEFINE(INO_STRING, PRId32)
+-AC_DEFINE(INO_HEXSTRING, PRIx32)
+-AC_DEFINE(INO_CAST, (uint32_t))
++AC_DEFINE([INO_STRING], PRId32, [INO_STRING])
++AC_DEFINE([INO_HEXSTRING], PRIx32, [INO_HEXSTRING])
++AC_DEFINE([INO_CAST], (uint32_t), [INO_CAST])
+ elif test $ac_cv_sizeof_ino_t = "8"; then
+-AC_DEFINE(INO_STRING, PRId64)
+-AC_DEFINE(INO_HEXSTRING, PRIx64)
+-AC_DEFINE(INO_CAST, (uint64_t))
++AC_DEFINE([INO_STRING], PRId64, [INO_STRING])
++AC_DEFINE([INO_HEXSTRING], PRIx64, [INO_HEXSTRING])
++AC_DEFINE([INO_CAST], (uint64_t), [INO_CAST])
+ else
+ AC_ERROR(can not detect the size of your system's ino_t type)
+ fi
+ 
+ AC_CHECK_SIZEOF(dev_t)
+ if test $ac_cv_sizeof_dev_t = "4"; then
+-AC_DEFINE(DEV_STRING, PRId32)
+-AC_DEFINE(DEV_HEXSTRING, PRIx32)
+-AC_DEFINE(DEV_CAST, (uint32_t))
++AC_DEFINE([DEV_STRING], PRId32, [DEV_STRING])
++AC_DEFINE([DEV_HEXSTRING], PRIx32, [DEV_HEXSTRING])
++AC_DEFINE([DEV_CAST], (uint32_t), [DEV_CAST])
+ elif test $ac_cv_sizeof_dev_t = "8"; then
+-AC_DEFINE(DEV_STRING, PRId64)
+-AC_DEFINE(DEV_HEXSTRING, PRIx64)
+-AC_DEFINE(DEV_CAST, (uint64_t))
++AC_DEFINE([DEV_STRING], PRId64, [DEV_STRING])
++AC_DEFINE([DEV_HEXSTRING], PRIx64, [DEV_HEXSTRING])
++AC_DEFINE([DEV_CAST], (uint64_t), [DEV_CAST])
+ else
+ AC_ERROR(can not detect the size of your system's dev_t type)
+ fi
+@@ -261,7 +261,7 @@ AC_CHECK_LIB(acl, acl_get_file)
+ dnl Check for paths
+ AC_PREFIX_DEFAULT(/usr/local)
+ 
+-AC_CHECK_FUNC([asprintf], AC_DEFINE([HAVE_ASPRINTF]))
++AC_CHECK_FUNC([asprintf], AC_DEFINE([HAVE_ASPRINTF], [], [HAVE_ASPRINTF]))
+ 
+ dnl 
+ dnl Configure libxml2.
+-- 
+2.28.0
+
diff --git a/pkgs/tools/compression/xar/0002-Use-pkg-config-for-libxml2.patch b/pkgs/tools/compression/xar/0002-Use-pkg-config-for-libxml2.patch
new file mode 100644
index 00000000000..d71ad4b753c
--- /dev/null
+++ b/pkgs/tools/compression/xar/0002-Use-pkg-config-for-libxml2.patch
@@ -0,0 +1,89 @@
+From 276833851657c85651c053ee16b8e1a8dc768a50 Mon Sep 17 00:00:00 2001
+From: Andrew Childs <andrew.childs@bibo.com.ph>
+Date: Sun, 15 Nov 2020 19:12:56 +0900
+Subject: [PATCH 2/2] Use pkg-config for libxml2
+
+---
+ configure.ac | 66 +++++++++-------------------------------------------
+ 1 file changed, 11 insertions(+), 55 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 358ab89..984a694 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -268,61 +268,17 @@ dnl Configure libxml2.
+ dnl 
+ LIBXML2_VERSION_MIN=2.6.11
+ 
+-have_libxml2="1"
+-
+-AC_ARG_WITH([xml2-config], [  --with-xml2-config      libxml2 config program],
+-if test "x${with_xml2_config}" = "xno" ; then
+-  XML2_CONFIG=
+-else
+-  XML2_CONFIG="${with_xml2_config}"
+-fi
+-,
+-  XML2_CONFIG=
+-)
+-if test "x${XML2_CONFIG}" != "x" ; then
+-   if test ! -x "${XML2_CONFIG}" ; then
+-     AC_MSG_ERROR([Unusable or missing xml2-config: ${XML2_CONFIG}])
+-   fi
+-else
+-  AC_PATH_PROG([XML2_CONFIG], [xml2-config], , [${PATH}])
+-  if test "x${XML2_CONFIG}" = "x" ; then
+-    AC_MSG_ERROR([Cannot configure without xml2-config])
+-  fi
+-fi
+-
+-dnl Make sure the version of libxml2 found is sufficient.
+-AC_MSG_CHECKING([for libxml >= ${LIBXML2_VERSION_MIN}])
+-LIBXML2_FOUND=`2>&1 ${XML2_CONFIG} --version`
+-LIBXML2_MAJOR=`echo ${LIBXML2_FOUND} | tr . " " | awk '{print $1}'`
+-LIBXML2_MINOR=`echo ${LIBXML2_FOUND} | tr . " " | awk '{print $2}' | tr a-z " " |awk '{print $1}'`
+-LIBXML2_BRANCH=`echo ${LIBXML2_FOUND} | tr . " " | awk '{print $3}' | tr a-z " " |awk '{print $1}'`
+-if test "x${LIBXML2_BRANCH}" = "x" ; then
+-  LIBXML2_BRANCH=0
+-fi
+-LIBXML2_MAJOR_MIN=`echo ${LIBXML2_VERSION_MIN} | tr . " " | awk '{print $1}'`
+-LIBXML2_MINOR_MIN=`echo ${LIBXML2_VERSION_MIN} | tr . " " | awk '{print $2}'`
+-LIBXML2_BRANCH_MIN=`echo ${LIBXML2_VERSION_MIN} | tr . " " | awk '{print $3}'`
+-if test ${LIBXML2_MAJOR} -gt ${LIBXML2_MAJOR_MIN} \
+-     -o ${LIBXML2_MAJOR} -eq ${LIBXML2_MAJOR_MIN} \
+-     -a ${LIBXML2_MINOR} -gt ${LIBXML2_MINOR_MIN} \
+-     -o ${LIBXML2_MAJOR} -eq ${LIBXML2_MAJOR_MIN} \
+-     -a ${LIBXML2_MINOR} -eq ${LIBXML2_MINOR_MIN} \
+-     -a ${LIBXML2_BRANCH} -ge $LIBXML2_BRANCH_MIN ; then
+-  AC_MSG_RESULT([${LIBXML2_MAJOR}.${LIBXML2_MINOR}.${LIBXML2_BRANCH}])
+-  have_libxml2="1"
+-  CPPFLAGS="${CPPFLAGS} `${XML2_CONFIG} --cflags`"
+-  LIBS="${LIBS} `${XML2_CONFIG} --libs`"
+-else
+-  AC_MSG_RESULT([no])
+-  have_libxml2="0"
+-fi
+-if test "x${have_libxml2}" = "x1" ; then
+-  dnl Final sanity check, to make sure that xmlwriter is present.
+-  AC_CHECK_HEADER([libxml/xmlwriter.h], , [have_libxml2="0"])
+-fi
+-if test "x${have_libxml2}" = "x0" ; then
+-  AC_MSG_ERROR([Cannot build without libxml2])
+-fi
++PKG_PROG_PKG_CONFIG
++
++PKG_CHECK_MODULES(LIBXML2_PKGCONFIG, [libxml-2.0 >= ${LIBXML2_VERSION_MIN}],
++  [
++    have_libxml2=1
++    CPPFLAGS="${CPPFLAGS} ${LIBXML2_PKGCONFIG_CFLAGS}"
++    LIBS="${LIBS} ${LIBXML2_PKGCONFIG_LIBS}"
++  ],
++  [
++    have_libxml2=0
++  ])
+ 
+ dnl 
+ dnl Configure libcrypto (part of OpenSSL).
+-- 
+2.28.0
+
diff --git a/pkgs/tools/compression/xar/default.nix b/pkgs/tools/compression/xar/default.nix
index b877f78b8c3..d4baab17b91 100644
--- a/pkgs/tools/compression/xar/default.nix
+++ b/pkgs/tools/compression/xar/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libxml2, lzma, openssl, zlib, bzip2, fts, autoconf }:
+{ lib, stdenv, fetchurl, pkg-config, libxml2, xz, openssl, zlib, bzip2, fts, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   version = "1.6.1";
@@ -9,16 +9,20 @@ stdenv.mkDerivation rec {
     sha256 = "0ghmsbs6xwg1092v7pjcibmk5wkyifwxw6ygp08gfz25d2chhipf";
   };
 
-  buildInputs = [ libxml2 lzma openssl zlib bzip2 fts autoconf ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libxml2 xz openssl zlib bzip2 fts ];
 
-  prePatch = ''
+  patches = [
+    ./0001-Add-useless-descriptions-to-AC_DEFINE.patch
+    ./0002-Use-pkg-config-for-libxml2.patch
+  ];
+
+  postPatch = ''
     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";
@@ -35,8 +39,8 @@ stdenv.mkDerivation rec {
          of content's rich meta-data.
       '';
 
-    license     = stdenv.lib.licenses.bsd3;
-    maintainers = with stdenv.lib.maintainers; [ copumpkin ];
-    platforms   = stdenv.lib.platforms.all;
+    license     = lib.licenses.bsd3;
+    maintainers = with lib.maintainers; [ copumpkin ];
+    platforms   = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/compression/xdelta/default.nix b/pkgs/tools/compression/xdelta/default.nix
index 2420f3fab61..ee52f35c979 100644
--- a/pkgs/tools/compression/xdelta/default.nix
+++ b/pkgs/tools/compression/xdelta/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
 , lzmaSupport ? true, xz ? null
 }:
 
@@ -21,7 +21,7 @@ in stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ autoreconfHook ];
   buildInputs = []
-    ++ stdenv.lib.optionals lzmaSupport [ xz ];
+    ++ lib.optionals lzmaSupport [ xz ];
 
   postPatch = ''
     cd xdelta3
@@ -47,7 +47,7 @@ in stdenv.mkDerivation rec {
     install -D -m644 xdelta3.1 $out/share/man/man1/xdelta3.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Binary differential compression in VCDIFF (RFC 3284) format";
     longDescription = ''
       xdelta is a command line program for delta encoding, which generates two
diff --git a/pkgs/tools/compression/xdelta/unstable.nix b/pkgs/tools/compression/xdelta/unstable.nix
index ae4a5ebac3e..03366e5b1ce 100644
--- a/pkgs/tools/compression/xdelta/unstable.nix
+++ b/pkgs/tools/compression/xdelta/unstable.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
 , lzmaSupport ? true, xz ? null
 }:
 
@@ -21,7 +21,7 @@ in stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ autoreconfHook ];
   buildInputs = []
-    ++ stdenv.lib.optionals lzmaSupport [ xz ];
+    ++ lib.optionals lzmaSupport [ xz ];
 
   postPatch = ''
     cd xdelta3
@@ -51,7 +51,7 @@ in stdenv.mkDerivation rec {
     install -D -m644 xdelta3.1 $out/share/man/man1/xdelta3.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Binary differential compression in VCDIFF (RFC 3284) format";
     longDescription = ''
       xdelta is a command line program for delta encoding, which generates two
diff --git a/pkgs/tools/compression/xz/default.nix b/pkgs/tools/compression/xz/default.nix
index 5cf88288d81..cc021a1ef05 100644
--- a/pkgs/tools/compression/xz/default.nix
+++ b/pkgs/tools/compression/xz/default.nix
@@ -1,4 +1,6 @@
-{ stdenv, fetchurl, enableStatic ? false }:
+{ lib, stdenv, fetchurl
+, enableStatic ? stdenv.hostPlatform.isStatic
+}:
 
 # Note: this package is used for bootstrapping fetchurl, and thus
 # cannot use fetchpatch! All mutable patches (generated by GitHub or
@@ -15,7 +17,7 @@ stdenv.mkDerivation rec {
 
   outputs = [ "bin" "dev" "out" "man" "doc" ];
 
-  configureFlags = stdenv.lib.optional enableStatic "--disable-shared";
+  configureFlags = lib.optional enableStatic "--disable-shared";
 
   doCheck = true;
 
@@ -29,9 +31,9 @@ stdenv.mkDerivation rec {
 
   postInstall = "rm -rf $out/share/doc";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://tukaani.org/xz/";
-    description = "XZ, general-purpose data compression software, successor of LZMA";
+    description = "A general-purpose data compression software, successor of LZMA";
 
     longDescription =
       '' XZ Utils is free general-purpose data compression software with high
diff --git a/pkgs/tools/compression/zdelta/builder.sh b/pkgs/tools/compression/zdelta/builder.sh
deleted file mode 100644
index 03db413181d..00000000000
--- a/pkgs/tools/compression/zdelta/builder.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-source $stdenv/setup
-
-installPhase() {
-    mkdir -p $out/bin
-    cp -p zdc zdu $out/bin
-}
-
-genericBuild
diff --git a/pkgs/tools/compression/zdelta/default.nix b/pkgs/tools/compression/zdelta/default.nix
index b59e7d5708b..b30a43f33c1 100644
--- a/pkgs/tools/compression/zdelta/default.nix
+++ b/pkgs/tools/compression/zdelta/default.nix
@@ -1,16 +1,24 @@
-{stdenv, fetchurl}:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
-  name = "zdelta-2.1";
-  builder = ./builder.sh;
+  pname = "zdelta";
+  version = "2.1";
+
   src = fetchurl {
-    url = "${meta.homepage}/downloads/${name}.tar.gz";
-    sha256 = "0k6y0r9kv5qiglnr2j4a0yvfynjkvm0pyv8ly28j0pr3w6rbxrh3";
+    url = "https://web.archive.org/web/20160316212948/http://cis.poly.edu/zdelta/downloads/zdelta-2.1.tar.gz";
+    sha256 = "sha256-WiQKWxJkINIwRBcdiuVLMDiupQ8gOsiXOEZvHDa5iFg=";
   };
 
-  meta = with stdenv.lib; {
-	  homepage = "http://cis.poly.edu/zdelta";
-    platforms = platforms.linux;
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -p zdc zdu $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://web.archive.org/web/20160316212948/http://cis.poly.edu/zdelta/";
+    platforms = platforms.all;
     license = licenses.zlib;
   };
 }
diff --git a/pkgs/tools/compression/zopfli/default.nix b/pkgs/tools/compression/zopfli/default.nix
index 13e1d836938..753368b70b9 100644
--- a/pkgs/tools/compression/zopfli/default.nix
+++ b/pkgs/tools/compression/zopfli/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fetchpatch, cmake }:
+{ lib, stdenv, fetchFromGitHub, fetchpatch, cmake }:
 
 stdenv.mkDerivation rec {
   pname = "zopfli";
@@ -22,9 +22,7 @@ stdenv.mkDerivation rec {
     cp $src/src/zopfli/*.h $dev/include/
   '';
 
-  enableParallelBuilding = true;
-
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit (src.meta) homepage;
     description = "Very good, but slow, deflate or zlib compression";
     longDescription = ''
diff --git a/pkgs/tools/compression/zstd/default.nix b/pkgs/tools/compression/zstd/default.nix
index 8ce434741a5..5253d7faa40 100644
--- a/pkgs/tools/compression/zstd/default.nix
+++ b/pkgs/tools/compression/zstd/default.nix
@@ -1,52 +1,51 @@
-{ stdenv, fetchFromGitHub, fetchpatch, cmake, bash, gnugrep
+{ lib, stdenv, fetchFromGitHub, cmake, bash, gnugrep
 , fixDarwinDylibNames
 , file
 , legacySupport ? false
-, static ? false
+, static ? stdenv.hostPlatform.isStatic
 }:
 
 stdenv.mkDerivation rec {
   pname = "zstd";
-  version = "1.4.5";
+  version = "1.5.0";
 
   src = fetchFromGitHub {
     owner = "facebook";
     repo = "zstd";
     rev = "v${version}";
-    sha256 = "0ay3qlk4sffnmcl3b34q4zd7mkcmjds023icmib1mdli97qcp38l";
+    sha256 = "0icc0x89c35rq5bxd4d241vqxnz2i1qj2wwy01xls63p0z93brj7";
   };
 
   nativeBuildInputs = [ cmake ]
-   ++ stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames;
-  buildInputs = [ bash ];
+   ++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
+  buildInputs = lib.optional stdenv.hostPlatform.isUnix bash;
 
   patches = [
+    # This patches makes sure we do not attempt to use the MD5 implementation
+    # of the host platform when running the tests
     ./playtests-darwin.patch
-    (fetchpatch {
-      url = "https://github.com/facebook/zstd/pull/2163.patch";
-      sha256 = "07mfjc5f9wy0w2xlj36hyf7g5ax9r2rf6ixhkffhnwc6rwy0q54p";
-    })
-  ] # This I didn't upstream because if you use posix threads with MinGW it will
-    # work fine, and I'm not sure how to write the condition.
-    ++ stdenv.lib.optional stdenv.hostPlatform.isWindows ./mcfgthreads-no-pthread.patch;
+  ];
 
-  postPatch = stdenv.lib.optionalString (!static) ''
+  postPatch = lib.optionalString (!static) ''
     substituteInPlace build/cmake/CMakeLists.txt \
       --replace 'message(SEND_ERROR "You need to build static library to build tests")' ""
     substituteInPlace build/cmake/tests/CMakeLists.txt \
       --replace 'libzstd_static' 'libzstd_shared'
     sed -i \
-      "1aexport ${stdenv.lib.optionalString stdenv.isDarwin "DY"}LD_LIBRARY_PATH=$PWD/build_/lib" \
+      "1aexport ${lib.optionalString stdenv.isDarwin "DY"}LD_LIBRARY_PATH=$PWD/build_/lib" \
       tests/playTests.sh
   '';
 
-  cmakeFlags = [
-    "-DZSTD_BUILD_SHARED:BOOL=${if (!static) then "ON" else "OFF"}"
-    "-DZSTD_BUILD_STATIC:BOOL=${if static then "ON" else "OFF"}"
-    "-DZSTD_PROGRAMS_LINK_SHARED:BOOL=${if (!static) then "ON" else "OFF"}"
-    "-DZSTD_LEGACY_SUPPORT:BOOL=${if legacySupport then "ON" else "OFF"}"
-    "-DZSTD_BUILD_TESTS:BOOL=ON"
-  ];
+  cmakeFlags = lib.attrsets.mapAttrsToList
+    (name: value: "-DZSTD_${name}:BOOL=${if value then "ON" else "OFF"}") {
+      BUILD_SHARED = !static;
+      BUILD_STATIC = static;
+      BUILD_CONTRIB = true;
+      PROGRAMS_LINK_SHARED = !static;
+      LEGACY_SUPPORT = legacySupport;
+      BUILD_TESTS = doCheck;
+    };
+
   cmakeDir = "../build/cmake";
   dontUseCmakeBuildDir = true;
   preConfigure = ''
@@ -54,7 +53,7 @@ stdenv.mkDerivation rec {
   '';
 
   checkInputs = [ file ];
-  doCheck = true;
+  doCheck = stdenv.hostPlatform == stdenv.buildPlatform;
   checkPhase = ''
     runHook preCheck
     # Patch shebangs for playTests
@@ -64,17 +63,23 @@ stdenv.mkDerivation rec {
   '';
 
   preInstall = ''
+    mkdir -p $bin/bin
+    cp contrib/pzstd/pzstd $bin/bin/pzstd
     substituteInPlace ../programs/zstdgrep \
       --replace ":-grep" ":-${gnugrep}/bin/grep" \
       --replace ":-zstdcat" ":-$bin/bin/zstdcat"
 
     substituteInPlace ../programs/zstdless \
       --replace "zstdcat" "$bin/bin/zstdcat"
+  '' + lib.optionalString stdenv.isDarwin ''
+    install_name_tool -change @rpath/libzstd.1.dylib $out/lib/libzstd.1.dylib $bin/bin/pzstd
   '';
 
-  outputs = [ "bin" "dev" "man" "out" ];
+  outputs = [ "bin" "dev" ]
+    ++ lib.optional stdenv.hostPlatform.isUnix "man"
+    ++ [ "out" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Zstandard real-time compression algorithm";
     longDescription = ''
       Zstd, short for Zstandard, is a fast lossless compression algorithm,
@@ -86,6 +91,7 @@ stdenv.mkDerivation rec {
       property shared by most LZ compression algorithms, such as zlib.
     '';
     homepage = "https://facebook.github.io/zstd/";
+    changelog = "https://github.com/facebook/zstd/blob/v${version}/CHANGELOG";
     license = with licenses; [ bsd3 ]; # Or, at your opinion, GPL-2.0-only.
 
     platforms = platforms.all;
diff --git a/pkgs/tools/compression/zstd/mcfgthreads-no-pthread.patch b/pkgs/tools/compression/zstd/mcfgthreads-no-pthread.patch
deleted file mode 100644
index 69921c0c7ba..00000000000
--- a/pkgs/tools/compression/zstd/mcfgthreads-no-pthread.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-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/pkgs/tools/compression/zstd/playtests-darwin.patch b/pkgs/tools/compression/zstd/playtests-darwin.patch
index a98365eec33..bcb895a697c 100644
--- a/pkgs/tools/compression/zstd/playtests-darwin.patch
+++ b/pkgs/tools/compression/zstd/playtests-darwin.patch
@@ -1,18 +1,33 @@
 --- a/tests/playTests.sh
 +++ b/tests/playTests.sh
-@@ -109,5 +109,2 @@ esac
+@@ -112,22 +112,12 @@ case "$OS" in
+ esac
+ 
  case "$UNAME" in
 -  Darwin) MD5SUM="md5 -r" ;;
 -  FreeBSD) MD5SUM="gmd5sum" ;;
+-  NetBSD) MD5SUM="md5 -n" ;;
 -  OpenBSD) MD5SUM="md5" ;;
    *) MD5SUM="md5sum" ;;
-@@ -116,5 +113,2 @@ esac
+ esac
+ 
  MTIME="stat -c %Y"
 -case "$UNAME" in
--    Darwin | FreeBSD | OpenBSD) MTIME="stat -f %m" ;;
+-    Darwin | FreeBSD | OpenBSD | NetBSD) MTIME="stat -f %m" ;;
+-esac
+ 
+ GET_PERMS="stat -c %a"
+-case "$UNAME" in
+-    Darwin | FreeBSD | OpenBSD | NetBSD) GET_PERMS="stat -f %Lp" ;;
 -esac
  
-@@ -752,3 +746,2 @@ zstd -d --rm dirTestDict/*.zst -D tmpDictC  # note : use internal checksum by de
+ assertFilePermissions() {
+     STAT1=$($GET_PERMS "$1")
+@@ -967,7 +957,6 @@ $MD5SUM dirTestDict/* > tmph1
+ zstd -f --rm dirTestDict/* -D tmpDictC
+ zstd -d --rm dirTestDict/*.zst -D tmpDictC  # note : use internal checksum by default
  case "$UNAME" in
 -  Darwin) println "md5sum -c not supported on OS-X : test skipped" ;;  # not compatible with OS-X's md5
    *) $MD5SUM -c tmph1 ;;
+ esac
+ rm -rf dirTestDict
diff --git a/pkgs/tools/compression/zsync/default.nix b/pkgs/tools/compression/zsync/default.nix
index 7984e2bd589..b92112a4816 100644
--- a/pkgs/tools/compression/zsync/default.nix
+++ b/pkgs/tools/compression/zsync/default.nix
@@ -1,20 +1,21 @@
-{stdenv, fetchurl}:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
-  name = "zsync-0.6.2";
+  pname = "zsync";
+  version = "0.6.2";
 
   src = fetchurl {
-    url = "http://zsync.moria.org.uk/download/${name}.tar.bz2";
+    url = "http://zsync.moria.org.uk/download/${pname}-${version}.tar.bz2";
     sha256 = "1wjslvfy76szf0mgg2i9y9q30858xyjn6v2acc24zal76d1m778b";
   };
 
   makeFlags = [ "AR=${stdenv.cc.bintools.targetPrefix}ar" ];
 
-  meta = {
+  meta = with lib; {
     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;
+    license = licenses.free;
+    maintainers = with maintainers; [ viric ];
+    platforms = with platforms; all;
   };
 }
diff --git a/pkgs/tools/filesystems/9pfs/default.nix b/pkgs/tools/filesystems/9pfs/default.nix
index 9664526761b..bf817a50873 100644
--- a/pkgs/tools/filesystems/9pfs/default.nix
+++ b/pkgs/tools/filesystems/9pfs/default.nix
@@ -10,6 +10,10 @@ stdenv.mkDerivation {
     sha256 = "007s2idsn6bspmfxv1qabj39ggkgvn6gwdbhczwn04lb4c6gh3xc";
   };
 
+  # Upstream development has stopped and is no longer accepting patches
+  # https://github.com/mischief/9pfs/pull/3
+  patches = [ ./fix-darwin-build.patch ];
+
   preConfigure =
     ''
       substituteInPlace Makefile --replace '-g bin' ""
@@ -25,7 +29,7 @@ stdenv.mkDerivation {
     homepage = "https://github.com/mischief/9pfs";
     description = "FUSE-based client of the 9P network filesystem protocol";
     maintainers = [ lib.maintainers.eelco ];
-    platforms = lib.platforms.linux;
+    platforms = lib.platforms.unix;
     license = with lib.licenses; [ lpl-102 bsd2 ];
   };
 }
diff --git a/pkgs/tools/filesystems/9pfs/fix-darwin-build.patch b/pkgs/tools/filesystems/9pfs/fix-darwin-build.patch
new file mode 100644
index 00000000000..a565248f19d
--- /dev/null
+++ b/pkgs/tools/filesystems/9pfs/fix-darwin-build.patch
@@ -0,0 +1,47 @@
+From 6b7863b51c97f8ecd9a93fc4347f8938f9b5c05f Mon Sep 17 00:00:00 2001
+From: midchildan <git@midchildan.org>
+Date: Tue, 30 Mar 2021 22:21:51 +0900
+Subject: [PATCH] build: fix build for macOS
+
+---
+ 9pfs.c | 4 ++--
+ libc.h | 4 ++++
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/9pfs.c b/9pfs.c
+index 2c481bd..f5c487c 100644
+--- a/9pfs.c
++++ b/9pfs.c
+@@ -30,7 +30,7 @@
+ enum
+ {
+ 	CACHECTLSIZE = 8, /* sizeof("cleared\n") - 1 */
+-	MSIZE = 8192
++	MSIZE_9P = 8192
+ };
+ 
+ void	dir2stat(struct stat*, Dir*);
+@@ -505,7 +505,7 @@ main(int argc, char *argv[])
+ 		freeaddrinfo(ainfo);
+ 
+ 	init9p();
+-	msize = _9pversion(MSIZE);
++	msize = _9pversion(MSIZE_9P);
+ 	if(doauth){
+ 		authfid = _9pauth(AUTHFID, user, NULL);
+ 		ai = auth_proxy(authfid, auth_getkey, "proto=p9any role=client");
+diff --git a/libc.h b/libc.h
+index 099adba..aac03c5 100644
+--- a/libc.h
++++ b/libc.h
+@@ -61,6 +61,10 @@ typedef unsigned char uchar;
+ typedef unsigned long long uvlong;
+ typedef long long vlong;
+ 
++#ifndef __GLIBC__
++typedef unsigned long ulong;
++#endif
++
+ typedef
+ struct Qid
+ {
diff --git a/pkgs/tools/filesystems/aefs/default.nix b/pkgs/tools/filesystems/aefs/default.nix
index ea94c26248e..fb6fa01894e 100644
--- a/pkgs/tools/filesystems/aefs/default.nix
+++ b/pkgs/tools/filesystems/aefs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fuse }:
+{ lib, stdenv, fetchurl, fetchpatch, fuse }:
 
 stdenv.mkDerivation rec {
   name = "aefs-0.4pre259-8843b7c";
@@ -8,12 +8,29 @@ stdenv.mkDerivation rec {
     sha256 = "167hp58hmgdavg2mqn5dx1xgq24v08n8d6psf33jhbdabzx6a6zq";
   };
 
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/edolstra/aefs/commit/15d8df8b8d5dc1ee20d27a86c4d23163a67f3123.patch";
+      sha256 = "0k36hsyvf8a0ji2hpghgqff2fncj0pllxn8p0rs0aj4h7j2vp4iv";
+    })
+  ];
+
+  # autoconf's AC_CHECK_HEADERS and AC_CHECK_LIBS fail to detect libfuse on
+  # Darwin if FUSE_USE_VERSION isn't set at configure time.
+  #
+  # NOTE: Make sure the value of FUSE_USE_VERSION specified here matches the
+  # actual version used in the source code:
+  #
+  #     $ tar xf "$(nix-build -A aefs.src)"
+  #     $ grep -R FUSE_USE_VERSION
+  configureFlags = lib.optional stdenv.isDarwin "CPPFLAGS=-DFUSE_USE_VERSION=26";
+
   buildInputs = [ fuse ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/edolstra/aefs";
     description = "A cryptographic filesystem implemented in userspace using FUSE";
-    platforms = platforms.linux;
+    platforms = platforms.unix;
     maintainers = [ maintainers.eelco ];
     license = licenses.gpl2;
   };
diff --git a/pkgs/tools/filesystems/afpfs-ng/default.nix b/pkgs/tools/filesystems/afpfs-ng/default.nix
index 3340bdba0e6..9c4268e402d 100644
--- a/pkgs/tools/filesystems/afpfs-ng/default.nix
+++ b/pkgs/tools/filesystems/afpfs-ng/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fuse, readline, libgcrypt, gmp }:
+{ lib, stdenv, fetchFromGitHub, fuse, readline, libgcrypt, gmp }:
 
 stdenv.mkDerivation {
   pname = "afpfs-ng";
@@ -13,7 +13,7 @@ stdenv.mkDerivation {
 
   buildInputs = [ fuse readline libgcrypt gmp ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage    = "https://github.com/simonvetter/afpfs-ng";
     description = "A client implementation of the Apple Filing Protocol";
     license     = licenses.gpl2;
diff --git a/pkgs/tools/filesystems/android-file-transfer/darwin-dont-vendor-dependencies.patch b/pkgs/tools/filesystems/android-file-transfer/darwin-dont-vendor-dependencies.patch
new file mode 100644
index 00000000000..6e0f38582cc
--- /dev/null
+++ b/pkgs/tools/filesystems/android-file-transfer/darwin-dont-vendor-dependencies.patch
@@ -0,0 +1,21 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 8b05ab0..81e31f5 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -236,16 +236,6 @@ endif()
+
+ if (''${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+ 	set(MACOSX_BUNDLE_LIBS)
+-	if (OPENSSL_FOUND)
+-		list(APPEND MACOSX_BUNDLE_LIBS /usr/local/opt/openssl@1.1/lib/libcrypto.1.1.dylib)
+-	endif()
+-	if (TAGLIB_FOUND)
+-		list(APPEND MACOSX_BUNDLE_LIBS /usr/local/opt/taglib/lib/libtag.1.dylib)
+-	endif()
+-	if (FUSE_FOUND)
+-		list(APPEND MACOSX_BUNDLE_LIBS /usr/local/lib/libosxfuse.2.dylib)
+-	endif()
+-
+ 	set(MACOSX_BUNDLE_LIBS_INSTALL)
+ 	set(MACOSX_BUNDLE_ROOT_DIR "''${CMAKE_INSTALL_PREFIX}/''${CMAKE_PROJECT_NAME}.app")
+ 	message(STATUS "bundle root dir: ''${MACOSX_BUNDLE_ROOT_DIR}")
diff --git a/pkgs/tools/filesystems/android-file-transfer/default.nix b/pkgs/tools/filesystems/android-file-transfer/default.nix
index 48e964bf687..a8511f8b99a 100644
--- a/pkgs/tools/filesystems/android-file-transfer/default.nix
+++ b/pkgs/tools/filesystems/android-file-transfer/default.nix
@@ -1,24 +1,44 @@
-{ stdenv, mkDerivation, fetchFromGitHub, cmake, fuse, readline, pkgconfig, qtbase }:
+{ lib
+, stdenv
+, mkDerivation
+, fetchFromGitHub
+, cmake
+, fuse
+, readline
+, pkg-config
+, qtbase
+, qttools
+, wrapQtAppsHook }:
 
 mkDerivation rec {
   pname = "android-file-transfer";
-  version = "3.9";
+  version = "4.2";
 
   src = fetchFromGitHub {
     owner = "whoozle";
     repo = "android-file-transfer-linux";
     rev = "v${version}";
-    sha256 = "1pwayyd5xrmngfrmv2vwr8ns2wi199xkxf7dks8fl9zmlpizg3c3";
+    sha256 = "125rq8ji83nw6chfw43i0h9c38hjqh1qjibb0gnf9wrigar9zc8b";
   };
 
-  nativeBuildInputs = [ cmake readline pkgconfig ];
-  buildInputs = [ fuse qtbase ];
+  patches = [ ./darwin-dont-vendor-dependencies.patch ];
 
-  meta = with stdenv.lib; {
+  nativeBuildInputs = [ cmake readline pkg-config wrapQtAppsHook ];
+  buildInputs = [ fuse qtbase qttools ];
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    mkdir $out/Applications
+    mv $out/*.app $out/Applications
+    for f in $out/Applications/android-file-transfer.app/Contents/MacOS/*; do
+      wrapQtApp "$f"
+    done
+  '';
+
+  meta = with lib; {
     description = "Reliable MTP client with minimalistic UI";
     homepage = "https://whoozle.github.io/android-file-transfer-linux/";
-    license = licenses.lgpl21;
+    license = licenses.lgpl21Plus;
     maintainers = [ maintainers.xaverdh ];
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/filesystems/apfs-fuse/default.nix b/pkgs/tools/filesystems/apfs-fuse/default.nix
index 2c7b1c27156..b5d08770ed7 100644
--- a/pkgs/tools/filesystems/apfs-fuse/default.nix
+++ b/pkgs/tools/filesystems/apfs-fuse/default.nix
@@ -1,24 +1,28 @@
-{ stdenv, fetchFromGitHub, fuse3, bzip2, zlib, attr, cmake }:
+{ lib, stdenv, fetchFromGitHub, fuse3, bzip2, zlib, attr, cmake }:
 
 stdenv.mkDerivation {
   pname = "apfs-fuse-unstable";
-  version = "2019-07-23";
+  version = "2020-09-28";
 
   src = fetchFromGitHub {
     owner  = "sgan81";
     repo   = "apfs-fuse";
-    rev    = "309ecb030f38edac4c10fa741a004c5eb7a23e15";
-    sha256 = "0wq6rlqi00m5dp5gbzy65i1plm40j6nsm7938zvfgx5laal4wzr2";
+    rev    = "ee71aa5c87c0831c1ae17048951fe9cd7579c3db";
+    sha256 = "0wvsx708km1lnhghny5y69k694x0zy8vlbndswkb7sq81j1r6kwx";
     fetchSubmodules = true;
   };
 
   buildInputs = [ fuse3 bzip2 zlib attr ];
   nativeBuildInputs = [ cmake ];
 
-  meta = with stdenv.lib; {
+  postFixup = ''
+    ln -s $out/bin/apfs-fuse $out/bin/mount.fuse.apfs-fuse
+  '';
+
+  meta = with lib; {
     homepage    = "https://github.com/sgan81/apfs-fuse";
     description = "FUSE driver for APFS (Apple File System)";
-    license     = licenses.gpl2;
+    license     = licenses.gpl2Plus;
     maintainers = with maintainers; [ ealasu ];
     platforms   = platforms.linux;
   };
diff --git a/pkgs/tools/filesystems/apfsprogs/default.nix b/pkgs/tools/filesystems/apfsprogs/default.nix
new file mode 100644
index 00000000000..b50eaf39636
--- /dev/null
+++ b/pkgs/tools/filesystems/apfsprogs/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation {
+  pname = "apfsprogs";
+  version = "unstable-2021-05-07";
+
+  src = fetchFromGitHub {
+    owner = "linux-apfs";
+    repo = "apfsprogs";
+    rev = "d360211a30608a907e3ee8ad4468d606c40ec2d7";
+    sha256 = "sha256-SeFs/GQfIEvnxERyww+mnynjR7E02DdtBA6JsknEM+Q=";
+  };
+
+  buildPhase = ''
+    runHook preBuild
+    make -C apfsck $makeFlags
+    make -C mkapfs $makeFlags
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    make -C apfsck install BINDIR="$out/bin" MANDIR="$out/share/man8" $installFlags
+    make -C mkapfs install BINDIR="$out/bin" MANDIR="$out/share/man8" $installFlags
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Experimental APFS tools for linux";
+    homepage = "https://github.com/linux-apfs/apfsprogs";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ Luflosi ];
+  };
+}
diff --git a/pkgs/tools/filesystems/archivemount/default.nix b/pkgs/tools/filesystems/archivemount/default.nix
index d1d4ba6adf1..32c942aea5b 100644
--- a/pkgs/tools/filesystems/archivemount/default.nix
+++ b/pkgs/tools/filesystems/archivemount/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, fuse, libarchive }:
+{ lib, stdenv, fetchurl, pkg-config, fuse, libarchive }:
 
 let
   name = "archivemount-0.9.1";
@@ -11,12 +11,12 @@ stdenv.mkDerivation {
     sha256 = "1cy5b6qril9c3ry6fv7ir87s8iyy5vxxmbyx90dm86fbra0vjaf5";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   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;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/filesystems/avfs/default.nix b/pkgs/tools/filesystems/avfs/default.nix
index edfcaa0d8f8..b4fc7f1e4f6 100644
--- a/pkgs/tools/filesystems/avfs/default.nix
+++ b/pkgs/tools/filesystems/avfs/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchurl, pkgconfig, fuse, xz }:
+{ lib, stdenv, fetchurl, pkg-config, fuse, xz }:
 
 stdenv.mkDerivation rec {
   pname = "avfs";
-  version = "1.1.3";
+  version = "1.1.4";
   src = fetchurl {
     url = "mirror://sourceforge/avf/${version}/${pname}-${version}.tar.bz2";
-    sha256 = "1psh8k7g7rb0gn7aygbjv86kxyi9xq07barxksa99nnmq3lc2kjg";
+    sha256 = "0ax1zbw4pmggx1b784bfabdqyn39k7109cnl22p69y2phnpq2y9s";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   buildInputs = [ fuse xz ];
 
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
   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;
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl2Only;
   };
 }
diff --git a/pkgs/tools/filesystems/bashmount/default.nix b/pkgs/tools/filesystems/bashmount/default.nix
index 70a4c1419c8..ef7bfd492e3 100644
--- a/pkgs/tools/filesystems/bashmount/default.nix
+++ b/pkgs/tools/filesystems/bashmount/default.nix
@@ -1,14 +1,14 @@
-{stdenv, fetchFromGitHub}:
+{lib, stdenv, fetchFromGitHub}:
 
 stdenv.mkDerivation rec {
   pname = "bashmount";
-  version = "4.3.1";
+  version = "4.3.2";
 
   src = fetchFromGitHub {
     owner = "jamielinux";
     repo = "bashmount";
     rev = version;
-    sha256 = "0pqjaib0qiwjq0ral5yjz4iq8hpaj9mqkhlihgfz0xigcn9lxwpf";
+    sha256 = "1irw47s6i1qwxd20cymzlfw5sv579cw877l27j3p66qfhgadwxrl";
   };
 
   installPhase = ''
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
     cp NEWS    $out/share/doc/bashmount
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/jamielinux/bashmount";
     description = "A menu-driven bash script for the management of removable media with udisks";
     maintainers = [ maintainers.koral ];
diff --git a/pkgs/tools/filesystems/bcache-tools/default.nix b/pkgs/tools/filesystems/bcache-tools/default.nix
index c3b1759bcdd..ba6cb79fbd5 100644
--- a/pkgs/tools/filesystems/bcache-tools/default.nix
+++ b/pkgs/tools/filesystems/bcache-tools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, utillinux, bash }:
+{ lib, stdenv, fetchurl, pkg-config, util-linux, bash }:
 
 stdenv.mkDerivation rec {
   pname = "bcache-tools";
@@ -10,8 +10,8 @@ stdenv.mkDerivation rec {
     sha256 = "1gbsh2qw0a7kgck6w0apydiy37nnz5xvdgipa0yqrfmghl86vmv4";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ utillinux ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ util-linux ];
 
   # * Remove broken install rules (they ignore $PREFIX) for stuff we don't need
   #   anyway (it's distro specific stuff).
@@ -42,13 +42,13 @@ stdenv.mkDerivation rec {
     mkdir -p "$out/sbin" "$out/lib/udev/rules.d" "$out/share/man/man8"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/filesystems/bcachefs-tools/default.nix b/pkgs/tools/filesystems/bcachefs-tools/default.nix
index 26158b0361d..be7a42e19e9 100644
--- a/pkgs/tools/filesystems/bcachefs-tools/default.nix
+++ b/pkgs/tools/filesystems/bcachefs-tools/default.nix
@@ -1,17 +1,34 @@
-{ stdenv, fetchgit, pkgconfig, attr, libuuid, libscrypt, libsodium, keyutils
-, liburcu, zlib, libaio, zstd, lz4, valgrind, python3Packages
-, fuseSupport ? false, fuse3 ? null }:
-
-assert fuseSupport -> fuse3 != null;
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, docutils
+, libuuid
+, libscrypt
+, libsodium
+, keyutils
+, liburcu
+, zlib
+, libaio
+, zstd
+, lz4
+, python3Packages
+, udev
+, valgrind
+, nixosTests
+, fuse3
+, fuseSupport ? false
+}:
 
 stdenv.mkDerivation {
   pname = "bcachefs-tools";
-  version = "2020-04-04";
+  version = "unstable-2021-07-08";
 
-  src = fetchgit {
-    url = "https://evilpiepirate.org/git/bcachefs-tools.git";
-    rev = "5d6e237b728cfb7c3bf2cb1a613e64bdecbd740d";
-    sha256 = "1syym9k3njb0bk2mg6832cbf6r42z6y8b6hjv7dg4gmv2h7v7l7g";
+  src = fetchFromGitHub {
+    owner = "koverstreet";
+    repo = "bcachefs-tools";
+    rev = "050d5f7bcf08bd02f5077a1c5559f352fa449e1e";
+    sha256 = "15bl9ni0ckmvs5d7hi6v26z690rrmkb7dx00skn6gwq87ffz3imw";
   };
 
   postPatch = ''
@@ -21,40 +38,32 @@ stdenv.mkDerivation {
                 "INITRAMFS_DIR=${placeholder "out"}/etc/initramfs-tools"
   '';
 
-  enableParallelBuilding = true;
-
-  nativeBuildInputs = [
-    pkgconfig
-  ];
+  nativeBuildInputs = [ pkg-config docutils ];
 
   buildInputs = [
     libuuid libscrypt libsodium keyutils liburcu zlib libaio
-    zstd lz4 python3Packages.pytest
-  ] ++ stdenv.lib.optional fuseSupport fuse3;
-
-  doCheck = true;
+    zstd lz4 python3Packages.pytest udev valgrind
+  ] ++ lib.optional fuseSupport fuse3;
 
-  checkFlags = [
-    "BCACHEFS_TEST_USE_VALGRIND=no"
-  ];
+  doCheck = false; # needs bcachefs module loaded on builder
+  checkFlags = [ "BCACHEFS_TEST_USE_VALGRIND=no" ];
+  checkInputs = [ valgrind ];
 
-  checkInputs = [
-    valgrind
-  ];
-
-  preCheck = stdenv.lib.optionalString fuseSupport ''
+  preCheck = lib.optionalString fuseSupport ''
     rm tests/test_fuse.py
   '';
 
-  installFlags = [
-    "PREFIX=${placeholder "out"}"
-  ];
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  passthru.tests = {
+    smoke-test = nixosTests.bcachefs;
+  };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tool for managing bcachefs filesystems";
     homepage = "https://bcachefs.org/";
     license = licenses.gpl2;
     maintainers = with maintainers; [ davidak chiiruno ];
-    platforms = platforms.linux;
+    platforms = [ "x86_64-linux" ]; # does not build on aarch64, see https://github.com/koverstreet/bcachefs-tools/issues/39
   };
 }
diff --git a/pkgs/tools/filesystems/bees/default.nix b/pkgs/tools/filesystems/bees/default.nix
index e87cecbf8fd..c82ea23debd 100644
--- a/pkgs/tools/filesystems/bees/default.nix
+++ b/pkgs/tools/filesystems/bees/default.nix
@@ -1,28 +1,35 @@
-{ stdenv, runCommand, fetchFromGitHub, bash, btrfs-progs, coreutils, python3Packages, utillinux }:
+{ lib
+, stdenv
+, runCommand
+, fetchFromGitHub
+, bash
+, btrfs-progs
+, coreutils
+, python3Packages
+, util-linux
+, nixosTests
+}:
 
 let
 
-  version = "0.6.2";
-  sha256 = "05niv9rivd3j3cwcx3n3vjr85wr0l5i76giq9n54d2vdwmn8qjib";
-
-  bees = stdenv.mkDerivation {
+  bees = stdenv.mkDerivation rec {
     pname = "bees";
-    inherit version;
+    version = "0.6.5";
 
     src = fetchFromGitHub {
       owner = "Zygo";
       repo = "bees";
       rev = "v${version}";
-      inherit sha256;
+      sha256 = "11ppbf23b8ngzfy02am0skxlybzmgsp6kna21jimb01x9pp1q7l7";
     };
 
     buildInputs = [
-      btrfs-progs               # for btrfs/ioctl.h
-      utillinux                 # for uuid.h
+      btrfs-progs # for btrfs/ioctl.h
+      util-linux # for uuid.h
     ];
 
     nativeBuildInputs = [
-      python3Packages.markdown   # documentation build
+      python3Packages.markdown # documentation build
     ];
 
     preBuild = ''
@@ -46,7 +53,7 @@ let
       "SYSTEMD_SYSTEM_UNIT_DIR=$(out)/etc/systemd/system"
     ];
 
-    meta = with stdenv.lib; {
+    meta = with lib; {
       homepage = "https://github.com/Zygo/bees";
       description = "Block-oriented BTRFS deduplication service";
       license = licenses.gpl3;
@@ -58,12 +65,18 @@ let
 
 in
 
-runCommand "bees-service-${version}" {
-  inherit bash bees coreutils utillinux;
-  btrfsProgs = btrfs-progs; # needs to be a valid shell variable name
-} ''
+(runCommand "bees-service"
+  {
+    inherit bash bees coreutils;
+    utillinux = util-linux; # needs to be a valid shell variable name
+    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
-''
+'').overrideAttrs (old: {
+  passthru.tests = {
+    smoke-test = nixosTests.bees;
+  };
+})
diff --git a/pkgs/tools/filesystems/bindfs/default.nix b/pkgs/tools/filesystems/bindfs/default.nix
index f8968260ce7..12052100db3 100644
--- a/pkgs/tools/filesystems/bindfs/default.nix
+++ b/pkgs/tools/filesystems/bindfs/default.nix
@@ -1,17 +1,15 @@
-{ stdenv, fetchurl, fuse, pkgconfig }:
+{ lib, stdenv, fetchurl, fuse, pkg-config }:
 
 stdenv.mkDerivation rec {
-  version = "1.14.7";
+  version = "1.15.1";
   pname = "bindfs";
 
   src = fetchurl {
     url    = "https://bindfs.org/downloads/${pname}-${version}.tar.gz";
-    sha256 = "1lbqyc9vpgck05n0q3qsvsr34142iv721z6iwxhc5j98370ff9i8";
+    sha256 = "sha256-BN01hKbN+a9DRNQDxiGFyp+rMc465aJdAQG8EJNsaKs=";
   };
 
-  dontStrip = true;
-
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ fuse ];
   postFixup = ''
     ln -s $out/bin/bindfs $out/bin/mount.fuse.bindfs
@@ -20,8 +18,8 @@ stdenv.mkDerivation rec {
   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;
+    license     = lib.licenses.gpl2Only;
+    maintainers = with lib.maintainers; [ lovek323 lovesegfault ];
+    platforms   = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/filesystems/blobfuse/default.nix b/pkgs/tools/filesystems/blobfuse/default.nix
index 3c6f6228329..a620a07d475 100644
--- a/pkgs/tools/filesystems/blobfuse/default.nix
+++ b/pkgs/tools/filesystems/blobfuse/default.nix
@@ -1,22 +1,35 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig, curl, gnutls, libgcrypt, libuuid, fuse }:
-
-stdenv.mkDerivation rec {
-  pname = "blobfuse";
-  version = "1.0.2";
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, curl, gnutls, libgcrypt, libuuid, fuse, boost }:
 
+let
+  version = "1.3.7";
   src = fetchFromGitHub {
     owner  = "Azure";
     repo   = "azure-storage-fuse";
-    rev    = "v${version}";
-    sha256 = "1qh04z1fsj1l6l12sz9yl2sy9hwlrnzac54hwrr7wvsgv90n9gbp";
+    rev    = "blobfuse-${version}-Linux";
+    sha256 = "sha256-yihIuS4AG489U7eBi/p7H6S7Cg54kkQeNVCexxQZ60A=";
   };
+  cpplite = stdenv.mkDerivation rec {
+    pname = "cpplite";
+    inherit version src;
+
+    sourceRoot = "source/cpplite";
+    patches = [ ./install-adls.patch ];
+
+    cmakeFlags = [ "-DBUILD_ADLS=ON" "-DUSE_OPENSSL=OFF" ];
+
+    buildInputs = [ curl libuuid gnutls ];
+    nativeBuildInputs = [ cmake pkg-config ];
+  };
+in stdenv.mkDerivation rec {
+  pname = "blobfuse";
+  inherit version src;
 
   NIX_CFLAGS_COMPILE = "-Wno-error=catch-value";
 
-  buildInputs = [ curl gnutls libgcrypt libuuid fuse ];
-  nativeBuildInputs = [ cmake pkgconfig ];
+  buildInputs = [ curl gnutls libgcrypt libuuid fuse boost cpplite ];
+  nativeBuildInputs = [ cmake pkg-config ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Mount an Azure Blob storage as filesystem through FUSE";
     license = licenses.mit;
     maintainers = with maintainers; [ jbgi ];
diff --git a/pkgs/tools/filesystems/blobfuse/install-adls.patch b/pkgs/tools/filesystems/blobfuse/install-adls.patch
new file mode 100644
index 00000000000..e48f4d592f6
--- /dev/null
+++ b/pkgs/tools/filesystems/blobfuse/install-adls.patch
@@ -0,0 +1,14 @@
+diff --git a/adls/CMakeLists.txt b/adls/CMakeLists.txt
+index 1fb7146..22e663a 100644
+--- a/adls/CMakeLists.txt
++++ b/adls/CMakeLists.txt
+@@ -50,3 +50,9 @@ if(BUILD_TESTS)
+   string(REGEX REPLACE "([^;]+)" "${CMAKE_CURRENT_SOURCE_DIR}/\\1" AZURE_STORAGE_ADLS_TEST_SOURCES "${AZURE_STORAGE_ADLS_TEST_SOURCES}")
+   set(AZURE_STORAGE_ADLS_TEST_SOURCES ${AZURE_STORAGE_ADLS_TEST_SOURCES} PARENT_SCOPE)
+ endif()
++
++install(TARGETS azure-storage-adls
++        ARCHIVE DESTINATION lib
++        LIBRARY DESTINATION lib
++        RUNTIME DESTINATION bin)
++
diff --git a/pkgs/tools/filesystems/bonnie/default.nix b/pkgs/tools/filesystems/bonnie/default.nix
index ab49ce02225..e34e5289ad6 100644
--- a/pkgs/tools/filesystems/bonnie/default.nix
+++ b/pkgs/tools/filesystems/bonnie/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl }:
+{ lib, stdenv, fetchurl, perl }:
 
 stdenv.mkDerivation rec {
   name = "bonnie++-1.98";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux ++ lib.platforms.darwin;
   };
 }
diff --git a/pkgs/tools/filesystems/boxfs/default.nix b/pkgs/tools/filesystems/boxfs/default.nix
index 5dba4b4bbf1..ef611afd5d0 100644
--- a/pkgs/tools/filesystems/boxfs/default.nix
+++ b/pkgs/tools/filesystems/boxfs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, curl, fuse, libxml2, pkgconfig }:
+{ lib, stdenv, fetchFromGitHub, curl, fuse, libxml2, pkg-config }:
 
 let
   srcs = {
@@ -35,16 +35,19 @@ in stdenv.mkDerivation {
   patches = [ ./work-around-API-borkage.patch ];
 
   buildInputs = [ curl fuse libxml2 ];
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
-  buildFlags = [ "static" ];
+  buildFlags = [
+    "static"
+    "CC=${stdenv.cc.targetPrefix}cc"
+  ] ++ lib.optional stdenv.isDarwin "CFLAGS=-D_BSD_SOURCE";
 
   installPhase = ''
     mkdir -p $out/bin
     install boxfs boxfs-init $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "FUSE file system for box.com accounts";
     longDescription = ''
       Store files on box.com (an account is required). The first time you run
@@ -55,6 +58,6 @@ in stdenv.mkDerivation {
     '';
     homepage = "https://github.com/drotiro/boxfs2";
     license = licenses.gpl3;
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/filesystems/btrfs-heatmap/default.nix b/pkgs/tools/filesystems/btrfs-heatmap/default.nix
index 04d74d78cfd..9de91738e74 100644
--- a/pkgs/tools/filesystems/btrfs-heatmap/default.nix
+++ b/pkgs/tools/filesystems/btrfs-heatmap/default.nix
@@ -2,25 +2,17 @@
 , fetchFromGitHub
 , python3
 , installShellFiles
-, fetchurl
 }:
 
 stdenv.mkDerivation rec {
   pname = "btrfs-heatmap";
-  version = "8";
+  version = "9";
 
   src = fetchFromGitHub {
     owner = "knorrie";
     repo = "btrfs-heatmap";
     rev = "v${version}";
-    sha256 = "035frvk3s7g18y81srssvm550nfq7jylr7w60nvixidxvrc0yrnh";
-  };
-
-  # man page is currently only in the debian branch
-  # https://github.com/knorrie/btrfs-heatmap/issues/11
-  msrc = fetchurl {
-    url = "https://raw.githubusercontent.com/knorrie/btrfs-heatmap/45d844e12d7f5842ebb99e65d7b968a5e1a89066/debian/man/btrfs-heatmap.8";
-    sha256 = "1md7xc426sc8lq4w29gjd6gv7vjqhcwrqqcr6z39kihvi04d5f6q";
+    sha256 = "sha256-yCkuZqWwxrs2eS7EXY6pAOVVVSq7dAMxJtf581gX8vg=";
   };
 
   buildInputs = [ python3 ];
@@ -29,11 +21,15 @@ stdenv.mkDerivation rec {
   outputs = [ "out" "man" ];
 
   installPhase = ''
-    install -Dm 0755 heatmap.py $out/sbin/btrfs-heatmap
-    installManPage ${msrc}
+    runHook preInstall
+
+    install -Dm 0755 btrfs-heatmap $out/sbin/btrfs-heatmap
+    installManPage man/btrfs-heatmap.1
 
     buildPythonPath ${python3.pkgs.btrfs}
     patchPythonScript $out/sbin/btrfs-heatmap
+
+    runHook postInstall
   '';
 
   meta = with lib; {
diff --git a/pkgs/tools/filesystems/btrfs-progs/default.nix b/pkgs/tools/filesystems/btrfs-progs/default.nix
index 8ff72421a59..aad633f3ba4 100644
--- a/pkgs/tools/filesystems/btrfs-progs/default.nix
+++ b/pkgs/tools/filesystems/btrfs-progs/default.nix
@@ -1,18 +1,18 @@
-{ stdenv, fetchurl, pkgconfig, attr, acl, zlib, libuuid, e2fsprogs, lzo
+{ lib, stdenv, fetchurl, pkg-config, 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.7";
+  version = "5.12.1";
 
   src = fetchurl {
     url = "mirror://kernel/linux/kernel/people/kdave/btrfs-progs/btrfs-progs-v${version}.tar.xz";
-    sha256 = "0p6ycbr8sw5bq3mj84gh9rvh5sk8sjr2l9hb9dhm4j41ij5h8bsw";
+    sha256 = "sha256-lQhG/qRU+0scOfD6RUmDZEVy35HfXAYEezNb8tVHN1k=";
   };
 
   nativeBuildInputs = [
-    pkgconfig asciidoc xmlto docbook_xml_dtd_45 docbook_xsl libxslt
+    pkg-config asciidoc xmlto docbook_xml_dtd_45 docbook_xsl libxslt
     python3 python3.pkgs.setuptools
   ];
 
@@ -26,12 +26,12 @@ stdenv.mkDerivation rec {
   postPatch = "sed -i s/-O1/-O2/ configure";
 
   postInstall = ''
-    install -v -m 444 -D btrfs-completion $out/etc/bash_completion.d/btrfs
+    install -v -m 444 -D btrfs-completion $out/share/bash-completion/completions/btrfs
   '';
 
-  configureFlags = stdenv.lib.optional stdenv.hostPlatform.isMusl "--disable-backtrace";
+  configureFlags = lib.optional stdenv.hostPlatform.isMusl "--disable-backtrace";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Utilities for the btrfs filesystem";
     homepage = "https://btrfs.wiki.kernel.org/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/filesystems/catcli/default.nix b/pkgs/tools/filesystems/catcli/default.nix
index 25de04467ef..be9349daa27 100644
--- a/pkgs/tools/filesystems/catcli/default.nix
+++ b/pkgs/tools/filesystems/catcli/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib
 , fetchFromGitHub
 , buildPythonApplication
 , docopt, anytree
@@ -7,24 +7,24 @@
 buildPythonApplication rec {
 
   pname = "catcli";
-  version = "0.6.0";
+  version = "0.6.2";
 
   src = fetchFromGitHub {
     owner = "deadc0de6";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0myhvflph4fayl2bg8m9a7prh5pcnvnb75p0jb4jpmbx7jyn7ihp";
+    sha256 = "0704022gbm987q6x6vcflq4b4p4hvcqm5ikiyndy5n8fj1q8lq95";
   };
 
   propagatedBuildInputs = [ docopt anytree ];
 
-  postPatch = '' patchShebangs . '';
+  postPatch = "patchShebangs . ";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "The command line catalog tool for your offline data";
     homepage = "https://github.com/deadc0de6/catcli";
     license = licenses.gpl3;
     maintainers = with maintainers; [ petersjt014 ];
-    platforms = platforms.linux;
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/filesystems/ceph-csi/default.nix b/pkgs/tools/filesystems/ceph-csi/default.nix
new file mode 100644
index 00000000000..7f468c80964
--- /dev/null
+++ b/pkgs/tools/filesystems/ceph-csi/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, go, ceph, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "ceph-csi";
+  version = "3.3.1";
+
+  nativeBuildInputs = [ go ];
+  buildInputs = [ ceph ];
+
+  src = fetchFromGitHub {
+    owner = "ceph";
+    repo = "ceph-csi";
+    rev = "v${version}";
+    sha256 = "16nh4bh8a9s2zbxnnhq1ldww4dzp2fmf5idgq99vkyw2kfp017lf";
+  };
+
+  preConfigure = ''
+    export GOCACHE=$(pwd)/.cache
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ./_output/* $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://ceph.com/";
+    description = "Container Storage Interface (CSI) driver for Ceph RBD and CephFS";
+    license = [ licenses.asl20 ];
+    maintainers = with maintainers; [ johanot ];
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+  };
+}
diff --git a/pkgs/tools/filesystems/ceph/default.nix b/pkgs/tools/filesystems/ceph/default.nix
index 767730c4030..0ccc96ce188 100644
--- a/pkgs/tools/filesystems/ceph/default.nix
+++ b/pkgs/tools/filesystems/ceph/default.nix
@@ -1,17 +1,27 @@
-{ stdenv, runCommand, fetchurl
+{ lib, stdenv, runCommand, fetchurl
 , ensureNewerSourcesHook
-, cmake, pkgconfig
+, cmake, pkg-config
 , which, git
-, boost, python3Packages
+, boost
 , libxml2, zlib, lz4
 , openldap, lttng-ust
 , babeltrace, gperf
 , gtest
 , cunit, snappy
-, rocksdb, makeWrapper
+, makeWrapper
 , leveldb, oathToolkit
 , libnl, libcap_ng
 , rdkafka
+, nixosTests
+, cryptsetup
+, sqlite
+, lua
+, icu
+, bzip2
+, doxygen
+, graphviz
+, fmt
+, python3
 
 # Optional Dependencies
 , yasm ? null, fcgi ? null, expat ? null
@@ -27,15 +37,14 @@
 , nss ? null, nspr ? null
 
 # Linux Only Dependencies
-, linuxHeaders, utillinux, libuuid, udev, keyutils, rdma-core, rabbitmq-c
-, libaio ? null, libxfs ? null, zfs ? null
+, linuxHeaders, util-linux, libuuid, udev, keyutils, rdma-core, rabbitmq-c
+, libaio ? null, libxfs ? null, zfs ? null, liburing ? 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;
 
@@ -75,27 +84,43 @@ let
     none = [ ];
   };
 
-  getMeta = description: {
+  getMeta = description: with lib; {
      homepage = "https://ceph.com/";
      inherit description;
      license = with licenses; [ lgpl21 gpl2 bsd3 mit publicDomain ];
      maintainers = with maintainers; [ adev ak johanot krav ];
-     platforms = [ "x86_64-linux" ];
+     platforms = [ "x86_64-linux" "aarch64-linux" ];
    };
 
-  ceph-common = python3Packages.buildPythonPackage rec{
+  ceph-common = python.pkgs.buildPythonPackage rec{
     pname = "ceph-common";
     inherit src version;
 
     sourceRoot = "ceph-${version}/src/python-common";
 
-    checkInputs = [ python3Packages.pytest ];
-    propagatedBuildInputs = with python3Packages; [ pyyaml six ];
+    checkInputs = [ python.pkgs.pytest ];
+    propagatedBuildInputs = with python.pkgs; [ pyyaml six ];
 
     meta = getMeta "Ceph common module for code shared by manager modules";
   };
 
-  ceph-python-env = python3Packages.python.withPackages (ps: [
+  python = python3.override {
+    packageOverrides = self: super: {
+      # scipy > 1.3 breaks diskprediction_local, leading to mgr hang on startup
+      # Bump once these issues are resolved:
+      # https://tracker.ceph.com/issues/42764 https://tracker.ceph.com/issues/45147
+      scipy = super.scipy.overridePythonAttrs (oldAttrs: rec {
+        version = "1.3.3";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "02iqb7ws7fw5fd1a83hx705pzrw1imj7z0bphjsl4bfvw254xgv4";
+        };
+        doCheck = false;
+      });
+    };
+  };
+
+  ceph-python-env = python.withPackages (ps: [
     ps.sphinx
     ps.flask
     ps.cython
@@ -105,26 +130,26 @@ let
     ps.Mako
     ceph-common
     ps.cherrypy
-    ps.dateutil
+    ps.cmd2
+    ps.colorama
+    ps.python-dateutil
     ps.jsonpatch
     ps.pecan
     ps.prettytable
+    ps.pyopenssl
     ps.pyjwt
     ps.webob
     ps.bcrypt
-    # scipy > 1.3 breaks diskprediction_local, leading to mgr hang on startup
-    # Bump (and get rid of scipy_1_3) once these issues are resolved:
-    # https://tracker.ceph.com/issues/42764 https://tracker.ceph.com/issues/45147
-    ps.scipy_1_3
+    ps.scipy
     ps.six
     ps.pyyaml
   ]);
   sitePackages = ceph-python-env.python.sitePackages;
 
-  version = "15.2.4";
+  version = "16.2.4";
   src = fetchurl {
     url = "http://download.ceph.com/tarballs/ceph-${version}.tar.gz";
-    sha256 = "0jy5dp4r1bqk1l7nrv8l8zpl984k61p3vkvf73ygcn03bxyjjlax";
+    sha256 = "sha256-J6FVK7feNN8cGO5BSDlfRGACAzchmRUSWR+a4ZgeWy0=";
   };
 in rec {
   ceph = stdenv.mkDerivation {
@@ -137,20 +162,26 @@ in rec {
 
     nativeBuildInputs = [
       cmake
-      pkgconfig which git python3Packages.wrapPython makeWrapper
-      python3Packages.python # for the toPythonPath function
+      pkg-config which git python.pkgs.wrapPython makeWrapper
+      python.pkgs.python # for the toPythonPath function
       (ensureNewerSourcesHook { year = "1980"; })
+      python
+      fmt
+      # for building docs/man-pages presumably
+      doxygen
+      graphviz
     ];
 
     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 rdkafka
-    ] ++ optionals stdenv.isLinux [
-      linuxHeaders utillinux libuuid udev keyutils optLibaio optLibxfs optZfs
+      snappy lz4 oathToolkit leveldb libnl libcap_ng rdkafka
+      cryptsetup sqlite lua icu bzip2
+    ] ++ lib.optionals stdenv.isLinux [
+      linuxHeaders util-linux libuuid udev keyutils liburing optLibaio optLibxfs optZfs
       # ceph 14
       rdma-core rabbitmq-c
-    ] ++ optionals hasRadosgw [
+    ] ++ lib.optionals hasRadosgw [
       optFcgi optExpat optCurl optFuse optLibedit
     ];
 
@@ -159,6 +190,7 @@ in rec {
     preConfigure =''
       substituteInPlace src/common/module.c --replace "/sbin/modinfo"  "modinfo"
       substituteInPlace src/common/module.c --replace "/sbin/modprobe" "modprobe"
+      substituteInPlace src/common/module.c --replace "/bin/grep" "grep"
 
       # for pybind/rgw to find internal dep
       export LD_LIBRARY_PATH="$PWD/build/lib''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"
@@ -169,20 +201,20 @@ in rec {
     '';
 
     cmakeFlags = [
-      "-DWITH_PYTHON3=ON"
-      "-DWITH_SYSTEM_ROCKSDB=OFF"
+      "-DWITH_SYSTEM_ROCKSDB=OFF"  # breaks Bluestore
       "-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"
+      "-DWITH_CEPHFS_SHELL=ON"
       # TODO breaks with sandbox, tries to download stuff with npm
       "-DWITH_MGR_DASHBOARD_FRONTEND=OFF"
-    ];
+      # WITH_XFS has been set default ON from Ceph 16, keeping it optional in nixpkgs for now
+      ''-DWITH_XFS=${if optLibxfs != null then "ON" else "OFF"}''
+    ] ++ lib.optional stdenv.isLinux "-DWITH_SYSTEM_LIBURING=ON";
 
     postFixup = ''
       wrapPythonPrograms
@@ -193,26 +225,28 @@ in rec {
       test -f $out/bin/ceph-volume
     '';
 
-    enableParallelBuilding = true;
-
     outputs = [ "out" "lib" "dev" "doc" "man" ];
 
     doCheck = false; # uses pip to install things from the internet
 
+    # Takes 7+h to build with 2 cores.
+    requiredSystemFeatures = [ "big-parallel" ];
+
     meta = getMeta "Distributed storage system";
 
     passthru.version = version;
+    passthru.tests = { inherit (nixosTests) ceph-single-node ceph-multi-node ceph-single-node-bluestore; };
   };
 
   ceph-client = runCommand "ceph-client-${version}" {
       meta = getMeta "Tools needed to mount Ceph's RADOS Block Devices";
     } ''
-      mkdir -p $out/{bin,etc,${sitePackages}}
+      mkdir -p $out/{bin,etc,${sitePackages},share/bash-completion/completions}
       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}/${sitePackages} $out/${sitePackages}
-      cp -r ${ceph}/etc/bash_completion.d $out/etc
+      cp -r ${ceph}/etc/bash_completion.d $out/share/bash-completion/completions
       # 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/pkgs/tools/filesystems/chunkfs/default.nix b/pkgs/tools/filesystems/chunkfs/default.nix
index c18bbe5a455..e4a20e3da5a 100644
--- a/pkgs/tools/filesystems/chunkfs/default.nix
+++ b/pkgs/tools/filesystems/chunkfs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl, fuse }:
+{ lib, stdenv, fetchurl, perl, fuse }:
 
 stdenv.mkDerivation rec {
   version = "0.7";
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2;
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/filesystems/ciopfs/default.nix b/pkgs/tools/filesystems/ciopfs/default.nix
index 8b633ecbe0f..cfe80cfce65 100644
--- a/pkgs/tools/filesystems/ciopfs/default.nix
+++ b/pkgs/tools/filesystems/ciopfs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, fuse, glib, attr }:
+{ lib, stdenv, fetchurl, pkg-config, fuse, glib, attr }:
 
 stdenv.mkDerivation rec {
   name = "ciopfs-0.4";
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "0sr9i9b3qfwbfvzvk00yrrg3x2xqk1njadbldkvn7hwwa4z5bm9l";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ fuse glib attr ];
 
   makeFlags = [ "DESTDIR=$(out)" "PREFIX=" ];
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://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;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/filesystems/convoy/default.nix b/pkgs/tools/filesystems/convoy/default.nix
index f12187be810..774568fdde1 100644
--- a/pkgs/tools/filesystems/convoy/default.nix
+++ b/pkgs/tools/filesystems/convoy/default.nix
@@ -1,5 +1,5 @@
 # This file was generated by go2nix.
-{ stdenv, buildGoPackage, fetchFromGitHub, lvm2 }:
+{ lib, buildGoPackage, fetchFromGitHub, lvm2 }:
 
 buildGoPackage rec {
   pname = "convoy";
@@ -16,9 +16,9 @@ buildGoPackage rec {
 
   buildInputs = [lvm2];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/rancher/convoy";
-    description = "A Docker volume plugin, managing persistent container volumes.";
+    description = "A Docker volume plugin, managing persistent container volumes";
     license = licenses.asl20;
     maintainers = with maintainers; [ offline ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/filesystems/cpcfs/default.nix b/pkgs/tools/filesystems/cpcfs/default.nix
index 46635aa6741..a439e29358f 100644
--- a/pkgs/tools/filesystems/cpcfs/default.nix
+++ b/pkgs/tools/filesystems/cpcfs/default.nix
@@ -1,10 +1,10 @@
-{ stdenv, fetchFromGitHub, makeWrapper, ncurses, readline, ronn }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper, ncurses, readline, ronn }:
 
 stdenv.mkDerivation rec {
 
   pname = "cpcfs";
   version = "0.85.4";
-  
+
   src = fetchFromGitHub {
     owner = "derikz";
     repo = "cpcfs";
@@ -31,11 +31,11 @@ stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Manipulating CPC dsk images and files";
     homepage = "https://github.com/derikz/cpcfs/" ;
     license = licenses.bsd2;
-    maintainers = [ maintainers.genesis ];
-    platforms = platforms.linux;
+    maintainers = [ ];
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/filesystems/cryfs/default.nix b/pkgs/tools/filesystems/cryfs/default.nix
index 8f7f4f1a313..0da6c4c2099 100644
--- a/pkgs/tools/filesystems/cryfs/default.nix
+++ b/pkgs/tools/filesystems/cryfs/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub, fetchpatch
-, cmake, pkgconfig, python, gtest
+{ lib, stdenv, fetchFromGitHub, fetchpatch
+, cmake, pkg-config, python3, gtest
 , boost, cryptopp, curl, fuse, openssl
 }:
 
@@ -25,6 +25,9 @@ stdenv.mkDerivation rec {
       url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/sys-fs/cryfs/files/cryfs-0.10.2-unbundle-libs.patch?id=192ac7421ddd4093125f4997898fb62e8a140a44";
       sha256 = "0hzss5rawcjrh8iqzc40w5yjhxdqya4gbg6dzap70180s50mahzs";
     })
+
+    # Backported from https://github.com/cryfs/cryfs/pull/378
+    ./use-macfuse.patch
   ];
 
   postPatch = ''
@@ -44,20 +47,23 @@ stdenv.mkDerivation rec {
       --replace "(4.5L*1024*1024*1024)" "(0.5L*1024*1024*1024)"
   '';
 
-  nativeBuildInputs = [ cmake gtest pkgconfig python ];
+  nativeBuildInputs = [ cmake pkg-config python3 ];
+
+  strictDeps = true;
 
   buildInputs = [ boost cryptopp curl fuse openssl ];
 
-  enableParallelBuilding = true;
+  checkInputs = [ gtest ];
 
   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"
-  ];
+    "-DBUILD_TESTING:BOOL=${if doCheck then "TRUE" else "FALSE"}"
+  ] ++ lib.optional doCheck "-DCMAKE_PREFIX_PATH=${gtest.dev}/lib/cmake";
 
-  doCheck = (!stdenv.isDarwin); # Cryfs tests are broken on darwin
+  # macFUSE needs to be installed for the test to succeed on Darwin
+  doCheck = !stdenv.isDarwin;
 
   checkPhase = ''
     # Skip CMakeFiles directory and tests depending on fuse (does not work well with sandboxing)
@@ -68,11 +74,11 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Cryptographic filesystem for the cloud";
     homepage    = "https://www.cryfs.org";
     license     = licenses.lgpl3;
     maintainers = with maintainers; [ peterhoeg c0bw3b ];
-    platforms   = with platforms; linux;
+    platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/tools/filesystems/cryfs/use-macfuse.patch b/pkgs/tools/filesystems/cryfs/use-macfuse.patch
new file mode 100644
index 00000000000..47e7845cf3d
--- /dev/null
+++ b/pkgs/tools/filesystems/cryfs/use-macfuse.patch
@@ -0,0 +1,207 @@
+diff --git a/.travisci/install.sh b/.travisci/install.sh
+index 9057a75b..2929c360 100755
+--- a/.travisci/install.sh
++++ b/.travisci/install.sh
+@@ -6,12 +6,11 @@ set -e
+ if [ "${CXX}" == "g++" ]; then
+     # We need to uninstall oclint because it creates a /usr/local/include/c++ symlink that clashes with the gcc5 package
+     # see https://github.com/Homebrew/homebrew-core/issues/21172
+-    brew cask uninstall oclint
++    brew uninstall oclint
+     brew install gcc@7
+ fi
+ 
+-brew cask install osxfuse
+-brew install libomp
++brew install libomp pkg-config macfuse
+ 
+ # By default, travis only fetches the newest 50 commits. We need more in case we're further from the last version tag, so the build doesn't fail because it can't generate the version number.
+ git fetch --unshallow --tags
+diff --git a/README.md b/README.md
+index b0f4a684..7001119a 100644
+--- a/README.md
++++ b/README.md
+@@ -19,7 +19,7 @@ OSX
+ 
+ CryFS is distributed via Homebrew. Just do
+ 
+-    brew cask install osxfuse
++    brew install osxfuse
+     brew install cryfs
+     
+ Windows (experimental)
+@@ -45,6 +45,7 @@ Requirements
+   - Git (for getting the source code)
+   - GCC version >= 5.0 or Clang >= 4.0
+   - CMake version >= 3.0 
++  - pkg-config (on Unix)
+   - libcurl4 (including development headers)
+   - Boost libraries version >= 1.65.1 (including development headers)
+     - filesystem
+@@ -53,20 +54,20 @@ Requirements
+     - program_options
+     - thread
+   - SSL development libraries (including development headers, e.g. libssl-dev)
+-  - libFUSE version >= 2.8.6 (including development headers), on Mac OS X instead install osxfuse from https://osxfuse.github.io/
++  - libFUSE version >= 2.8.6 (including development headers), on Mac OS X instead install macFUSE from https://osxfuse.github.io/
+   - Python >= 2.7
+   - OpenMP
+ 
+ You can use the following commands to install these requirements
+ 
+         # Ubuntu
+-        $ sudo apt install git g++ cmake make libcurl4-openssl-dev libboost-filesystem-dev libboost-system-dev libboost-chrono-dev libboost-program-options-dev libboost-thread-dev libssl-dev libfuse-dev python
++        $ sudo apt install git g++ cmake make pkg-config libcurl4-openssl-dev libboost-filesystem-dev libboost-system-dev libboost-chrono-dev libboost-program-options-dev libboost-thread-dev libssl-dev libfuse-dev python
+ 
+         # Fedora
+-        sudo dnf install git gcc-c++ cmake make libcurl-devel boost-devel boost-static openssl-devel fuse-devel python
++        sudo dnf install git gcc-c++ cmake make pkgconf libcurl-devel boost-devel boost-static openssl-devel fuse-devel python
+ 
+         # Macintosh
+-        brew install cmake boost openssl libomp
++        brew install cmake pkg-config boost openssl libomp
+ 
+ Build & Install
+ ---------------
+@@ -116,17 +117,17 @@ On most systems, CMake should find the libraries automatically. However, that do
+ 
+         cmake .. -DBoost_USE_STATIC_LIBS=off
+ 
+-2. **Fuse/Osxfuse library not found**
++2. **Fuse library not found**
+ 
+     Pass in the library path with
+ 
+-        cmake .. -DFUSE_LIB_PATH=/path/to/fuse/or/osxfuse
++        PKG_CONFIG_PATH=/path-to-fuse-or-macFUSE/lib/pkgconfig cmake ..
+ 
+-3. **Fuse/Osxfuse headers not found**
++3. **Fuse headers not found**
+ 
+     Pass in the include path with
+ 
+-        cmake .. -DCMAKE_CXX_FLAGS="-I/path/to/fuse/or/osxfuse/headers"
++        PKG_CONFIG_PATH=/path-to-fuse-or-macFUSE/lib/pkgconfig cmake ..
+ 
+ 4. **Openssl headers not found**
+ 
+diff --git a/cmake-utils/utils.cmake b/cmake-utils/utils.cmake
+index da4dff8c..66021c5c 100644
+--- a/cmake-utils/utils.cmake
++++ b/cmake-utils/utils.cmake
+@@ -157,33 +157,6 @@ function(require_clang_version VERSION)
+     endif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ endfunction(require_clang_version)
+ 
+-##################################################
+-# Find the location of a library and return its full path in OUTPUT_VARIABLE.
+-# If PATH_VARIABLE points to a defined variable, then the library will only be searched in this path.
+-# If PATH_VARIABLE points to a undefined variable, default system locations will be searched.
+-#
+-# Uses (the following will search for fuse in system locations by default, and if the user passes -DFUSE_LIB_PATH to cmake, it will only search in this path.
+-#  find_library_with_path(MYLIBRARY fuse FUSE_LIB_PATH)
+-#  target_link_library(target ${MYLIBRARY})
+-##################################################
+-function(find_library_with_path OUTPUT_VARIABLE LIBRARY_NAME PATH_VARIABLE)
+-    if(${PATH_VARIABLE})
+-        find_library(${OUTPUT_VARIABLE} ${LIBRARY_NAME} PATHS ${${PATH_VARIABLE}} NO_DEFAULT_PATH)
+-        if (${OUTPUT_VARIABLE} MATCHES NOTFOUND)
+-            message(FATAL_ERROR "Didn't find ${LIBRARY_NAME} in path specified by the ${PATH_VARIABLE} parameter (${${PATH_VARIABLE}}). Pass in the correct path or remove the parameter to try common system locations.")
+-        else(${OUTPUT_VARIABLE} MATCHES NOTFOUND)
+-            message(STATUS "Found ${LIBRARY_NAME} in user-defined path ${${PATH_VARIABLE}}")
+-        endif(${OUTPUT_VARIABLE} MATCHES NOTFOUND)
+-    else(${PATH_VARIABLE})
+-        find_library(${OUTPUT_VARIABLE} ${LIBRARY_NAME})
+-        if (${OUTPUT_VARIABLE} MATCHES NOTFOUND)
+-            message(FATAL_ERROR "Didn't find ${LIBRARY_NAME} library. If ${LIBRARY_NAME} is installed, try passing in the library location with -D${PATH_VARIABLE}=/path/to/${LIBRARY_NAME}/lib.")
+-        else(${OUTPUT_VARIABLE} MATCHES NOTFOUND)
+-            message(STATUS "Found ${LIBRARY_NAME} in system location")
+-        endif(${OUTPUT_VARIABLE} MATCHES NOTFOUND)
+-    endif(${PATH_VARIABLE})
+-endfunction(find_library_with_path)
+-
+ include(cmake-utils/TargetArch.cmake)
+ function(get_target_architecture output_var)
+ 	target_architecture(local_output_var)
+diff --git a/src/fspp/fuse/CMakeLists.txt b/src/fspp/fuse/CMakeLists.txt
+index b991bd72..8df3dbb7 100644
+--- a/src/fspp/fuse/CMakeLists.txt
++++ b/src/fspp/fuse/CMakeLists.txt
+@@ -35,12 +35,12 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+     DESTINATION "${CMAKE_INSTALL_BINDIR}"
+   )
+ 
+-elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+-  set(CMAKE_FIND_FRAMEWORK LAST)
+-  find_library_with_path(FUSE "osxfuse" FUSE_LIB_PATH)
+-  target_link_libraries(${PROJECT_NAME} PUBLIC ${FUSE})
+-else() # Linux
+-  find_library_with_path(FUSE "fuse" FUSE_LIB_PATH)
+-  target_link_libraries(${PROJECT_NAME} PUBLIC ${FUSE})
++else() # Linux and macOS
++  find_package(PkgConfig REQUIRED)
++  pkg_check_modules(Fuse REQUIRED IMPORTED_TARGET fuse)
++  target_link_libraries(${PROJECT_NAME} PUBLIC PkgConfig::Fuse)
+ endif()
+ 
++if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
++  set(CMAKE_FIND_FRAMEWORK LAST)
++endif()
+diff --git a/src/fspp/fuse/Fuse.cpp b/src/fspp/fuse/Fuse.cpp
+index 52cd5644..df0b400d 100644
+--- a/src/fspp/fuse/Fuse.cpp
++++ b/src/fspp/fuse/Fuse.cpp
+@@ -295,7 +295,7 @@ vector<char *> Fuse::_build_argv(const bf::path &mountdir, const vector<string>
+   // Make volume name default to mountdir on macOS
+   _add_fuse_option_if_not_exists(&argv, "volname", mountdir.filename().string());
+ #endif
+-  // TODO Also set read/write size for osxfuse. The options there are called differently.
++  // TODO Also set read/write size for macFUSE. The options there are called differently.
+   // large_read not necessary because reads are large anyhow. This option is only important for 2.4.
+   //argv.push_back(_create_c_string("-o"));
+   //argv.push_back(_create_c_string("large_read"));
+diff --git a/src/fspp/fuse/params.h b/src/fspp/fuse/params.h
+index 4a45ef79..9903ac82 100644
+--- a/src/fspp/fuse/params.h
++++ b/src/fspp/fuse/params.h
+@@ -3,14 +3,6 @@
+ #define MESSMER_FSPP_FUSE_PARAMS_H_
+ 
+ #define FUSE_USE_VERSION 26
+-#if defined(__linux__) || defined(__FreeBSD__)
+ #include <fuse.h>
+-#elif __APPLE__
+-#include <osxfuse/fuse.h>
+-#elif defined(_MSC_VER)
+-#include <fuse.h> // Dokany fuse
+-#else
+-#error System not supported
+-#endif
+ 
+ #endif
+diff --git a/src/fspp/impl/FilesystemImpl.cpp b/src/fspp/impl/FilesystemImpl.cpp
+index bc0ffbd7..23b28601 100644
+--- a/src/fspp/impl/FilesystemImpl.cpp
++++ b/src/fspp/impl/FilesystemImpl.cpp
+@@ -321,7 +321,7 @@ void FilesystemImpl::statfs(struct ::statvfs *fsstat) {
+   fsstat->f_namemax = stat.max_filename_length;
+ 
+   //f_frsize, f_favail, f_fsid and f_flag are ignored in fuse, see http://fuse.sourcearchive.com/documentation/2.7.0/structfuse__operations_4e765e29122e7b6b533dc99849a52655.html#4e765e29122e7b6b533dc99849a52655
+-  fsstat->f_frsize = fsstat->f_bsize; // even though this is supposed to be ignored, osxfuse needs it.
++  fsstat->f_frsize = fsstat->f_bsize; // even though this is supposed to be ignored, macFUSE needs it.
+ }
+ 
+ void FilesystemImpl::createSymlink(const bf::path &to, const bf::path &from, ::uid_t uid, ::gid_t gid) {
+diff --git a/test/fspp/testutils/FuseThread.cpp b/test/fspp/testutils/FuseThread.cpp
+index 277a2dac..7f3638db 100644
+--- a/test/fspp/testutils/FuseThread.cpp
++++ b/test/fspp/testutils/FuseThread.cpp
+@@ -23,7 +23,7 @@ void FuseThread::start(const bf::path &mountDir, const vector<string> &fuseOptio
+   //Wait until it is running (busy waiting is simple and doesn't hurt much here)
+   while(!_fuse->running()) {}
+ #ifdef __APPLE__
+-  // On Mac OS X, _fuse->running() returns true too early, because osxfuse calls init() when it's not ready yet. Give it a bit time.
++  // On Mac OS X, _fuse->running() returns true too early, because macFUSE calls init() when it's not ready yet. Give it a bit time.
+   std::this_thread::sleep_for(std::chrono::milliseconds(200));
+ #endif
+ }
diff --git a/pkgs/tools/filesystems/curlftpfs/default.nix b/pkgs/tools/filesystems/curlftpfs/default.nix
index a0306693b28..8c8fe31624f 100644
--- a/pkgs/tools/filesystems/curlftpfs/default.nix
+++ b/pkgs/tools/filesystems/curlftpfs/default.nix
@@ -1,21 +1,40 @@
-{stdenv, fetchurl, fuse, curl, pkgconfig, glib, zlib}:
+{ lib, stdenv, fetchurl, autoreconfHook, fuse, curl, pkg-config, glib, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "curlftpfs";
+  version = "0.9.2";
 
-stdenv.mkDerivation {
-  name = "curlftpfs-0.9.2";
   src = fetchurl {
-    url = "mirror://sourceforge/curlftpfs/curlftpfs-0.9.2.tar.gz";
+    url = "mirror://sourceforge/curlftpfs/curlftpfs-${version}.tar.gz";
     sha256 = "0n397hmv21jsr1j7zx3m21i7ryscdhkdsyqpvvns12q7qwwlgd2f";
   };
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [fuse curl glib zlib];
+
+  patches = [
+    # This removes AC_FUNC_MALLOC and AC_FUNC_REALLOC from configure.ac because
+    # it is known to cause problems. Search online for "rpl_malloc" and
+    # "rpl_realloc" to find out more.
+    ./fix-rpl_malloc.patch
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ fuse curl glib zlib ];
+
+  CFLAGS = lib.optionalString stdenv.isDarwin "-D__off_t=off_t";
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    # Fix the build on macOS with macFUSE installed. Needs autoreconfHook for
+    # this change to effect
+    substituteInPlace configure.ac --replace \
+      'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' \
+      ""
+  '';
 
   doCheck = false; # fails, doesn't work well too, btw
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Filesystem for accessing FTP hosts based on FUSE and libcurl";
     homepage = "http://curlftpfs.sourceforge.net";
-    license = licenses.gpl2;
-    platforms = platforms.linux;
-
+    license = licenses.gpl2Only;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/filesystems/curlftpfs/fix-rpl_malloc.patch b/pkgs/tools/filesystems/curlftpfs/fix-rpl_malloc.patch
new file mode 100644
index 00000000000..0265e1d8289
--- /dev/null
+++ b/pkgs/tools/filesystems/curlftpfs/fix-rpl_malloc.patch
@@ -0,0 +1,13 @@
+diff -Naur a/configure.ac b/configure.ac
+--- a/configure.ac	2008-04-23 20:37:42.000000000 +0900
++++ b/configure.ac	2021-05-16 01:28:24.000000000 +0900
+@@ -46,9 +46,7 @@
+ 
+ # Checks for library functions.
+ AC_FUNC_CHOWN
+-AC_FUNC_MALLOC
+ AC_FUNC_MKTIME
+-AC_FUNC_REALLOC
+ AC_FUNC_SELECT_ARGTYPES
+ AC_FUNC_STRFTIME
+ AC_FUNC_UTIME_NULL
diff --git a/pkgs/tools/filesystems/darling-dmg/default.nix b/pkgs/tools/filesystems/darling-dmg/default.nix
index 43823e5b51a..54d23e770db 100644
--- a/pkgs/tools/filesystems/darling-dmg/default.nix
+++ b/pkgs/tools/filesystems/darling-dmg/default.nix
@@ -1,26 +1,30 @@
-{ stdenv, fetchFromGitHub, cmake, fuse, zlib, bzip2, openssl, libxml2, icu } :
+{ lib, stdenv, fetchFromGitHub, cmake, fuse, zlib, bzip2, openssl, libxml2, icu, lzfse, libiconv }:
 
 stdenv.mkDerivation rec {
   pname = "darling-dmg";
-  version = "1.0.4+git20180914";
+  version = "1.0.4+git20200427";
 
   src = fetchFromGitHub {
     owner = "darlinghq";
     repo = "darling-dmg";
-    rev = "97a92a6930e43cdbc9dedaee62716e3223deb027";
-    sha256 = "1bngr4827qnl4s2f7z39wjp13nfm3zzzykjshb43wvjz536bnqdj";
+    rev = "71cc76c792db30328663272788c0b64aca27fdb0";
+    sha256 = "08iphkxlmjddrxpbm13gxyqwcrd0k65z3l1944n4pccb6qbyj8gv";
   };
 
   nativeBuildInputs = [ cmake ];
-  buildInputs = [ fuse openssl zlib bzip2 libxml2 icu ];
+  buildInputs = [ fuse openssl zlib bzip2 libxml2 icu lzfse ]
+    ++ lib.optionals stdenv.isDarwin [ libiconv ];
 
-  # compat with icu61+ https://github.com/unicode-org/icu/blob/release-64-2/icu4c/readme.html#L554
-  CXXFLAGS = [ "-DU_USING_ICU_NAMESPACE=1" ];
+  CXXFLAGS = [
+    "-DCOMPILE_WITH_LZFSE=1"
+    "-llzfse"
+  ];
 
-  meta = {
+  meta = with lib; {
     homepage = "https://www.darlinghq.org/";
     description = "Darling lets you open macOS dmgs on Linux";
-    platforms = stdenv.lib.platforms.linux;
-    license = stdenv.lib.licenses.gpl3;
+    platforms = platforms.unix;
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ Luflosi ];
   };
 }
diff --git a/pkgs/tools/filesystems/davfs2/0002-Make-sure-that-the-setuid-wrapped-umount-is-invoked.patch b/pkgs/tools/filesystems/davfs2/0002-Make-sure-that-the-setuid-wrapped-umount-is-invoked.patch
new file mode 100644
index 00000000000..0e31725936f
--- /dev/null
+++ b/pkgs/tools/filesystems/davfs2/0002-Make-sure-that-the-setuid-wrapped-umount-is-invoked.patch
@@ -0,0 +1,42 @@
+From 56873cf29974ff0dfc1ba1afb7022ce49e300835 Mon Sep 17 00:00:00 2001
+From: Maximilian Bosch <maximilian@mbosch.me>
+Date: Wed, 11 Nov 2020 11:58:25 +0100
+Subject: [PATCH 2/2] Make sure that the setuid-wrapped `umount` is invoked
+
+---
+ src/dav_fuse.c     | 2 +-
+ src/umount_davfs.c | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/dav_fuse.c b/src/dav_fuse.c
+index 734bc1f..4501433 100644
+--- a/src/dav_fuse.c
++++ b/src/dav_fuse.c
+@@ -187,7 +187,7 @@ dav_fuse_loop(int device, char *mpoint, size_t bufsize, time_t idle_time,
+             unmounting = 1;
+             pid_t pid = fork();
+             if (pid == 0) {
+-                execl("/bin/umount", "umount", "-il", mountpoint, NULL);
++                execl("@wrapperDir@/umount", "umount", "-il", mountpoint, NULL);
+                 _exit(EXIT_FAILURE);
+             }
+         }
+diff --git a/src/umount_davfs.c b/src/umount_davfs.c
+index b7019c3..75e3b4b 100644
+--- a/src/umount_davfs.c
++++ b/src/umount_davfs.c
+@@ -122,9 +122,9 @@ main(int argc, char *argv[])
+ 
+     char *umount_command = NULL;
+     if (mpoint) {
+-        umount_command = ne_concat("umount -i '", mpoint, "'", NULL);
++        umount_command = ne_concat("@wrapperDir@/umount -i '", mpoint, "'", NULL);
+     } else {
+-        umount_command = ne_concat("umount -i '", argv[optind], "'", NULL);
++        umount_command = ne_concat("@wrapperDir@/umount -i '", argv[optind], "'", NULL);
+         error(0, 0,
+               _("\n"
+                 "  can't evaluate PID file name;\n"
+-- 
+2.28.0
+
diff --git a/pkgs/tools/filesystems/davfs2/default.nix b/pkgs/tools/filesystems/davfs2/default.nix
index 4f818ed213b..7652cc97878 100644
--- a/pkgs/tools/filesystems/davfs2/default.nix
+++ b/pkgs/tools/filesystems/davfs2/default.nix
@@ -1,42 +1,32 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , fetchpatch
-, autoreconfHook
 , neon
 , procps
 , substituteAll
 , zlib
+, wrapperDir ? "/run/wrappers/bin"
 }:
 
 stdenv.mkDerivation rec {
-  name = "davfs2-1.5.6";
+  name = "davfs2-1.6.0";
 
   src = fetchurl {
     url = "mirror://savannah/davfs2/${name}.tar.gz";
-    sha256 = "00fqadhmhi2bmdar5a48nicmjcagnmaj9wgsvjr6cffmrz6pcx21";
+    sha256 = "sha256-LmtnVoW9kXdyvmDwmZrgmMgPef8g3BMej+xFR8u2O1A=";
   };
 
-  nativeBuildInputs = [
-    autoreconfHook # neon-0.31.patch requires reconfiguration
-  ];
-
   buildInputs = [ neon zlib ];
 
   patches = [
-    ./isdir.patch
     ./fix-sysconfdir.patch
     (substituteAll {
       src = ./0001-umount_davfs-substitute-ps-command.patch;
       ps = "${procps}/bin/ps";
     })
-
-    # Fix build with neon 0.31
-    # http://savannah.nongnu.org/bugs/?58101
-    (fetchpatch {
-      name = "neon-0.31.patch";
-      url = "http://savannah.nongnu.org/bugs/download.php?file_id=48737";
-      sha256 = "117x9rql6wk230pl1nram3pp8svll9wzfs5nf407z4jnrdr1zm0j";
-      extraPrefix = ""; # empty means add 'a/' and 'b/'
+    (substituteAll {
+      src = ./0002-Make-sure-that-the-setuid-wrapped-umount-is-invoked.patch;
+      inherit wrapperDir;
     })
   ];
 
@@ -50,7 +40,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://savannah.nongnu.org/projects/davfs2";
     description = "Mount WebDAV shares like a typical filesystem";
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
 
     longDescription = ''
       Web Distributed Authoring and Versioning (WebDAV), an extension to
@@ -60,6 +50,6 @@ stdenv.mkDerivation rec {
       with no built-in support for WebDAV.
     '';
 
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/filesystems/dduper/default.nix b/pkgs/tools/filesystems/dduper/default.nix
new file mode 100644
index 00000000000..5d91e8d0dcc
--- /dev/null
+++ b/pkgs/tools/filesystems/dduper/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchpatch, fetchFromGitHub, btrfs-progs, python3 }:
+
+let
+  btrfsProgsPatched = btrfs-progs.overrideAttrs (oldAttrs: {
+    patches = [
+      (fetchpatch {
+        name = "0001-Print-csum-for-a-given-file-on-stdout.patch";
+        url = "https://raw.githubusercontent.com/Lakshmipathi/dduper/8fab08e0f1901bf54411d25f1767b48c978074cb/patch/btrfs-progs-v5.9/0001-Print-csum-for-a-given-file-on-stdout.patch";
+        sha256 = "1li9lslrap70ibad8sij3bgpxn5lqs0j10l60bmy3c36y866q3g1";
+      })
+    ];
+  });
+  py3 = python3.withPackages (ps: with ps; [
+    prettytable
+    numpy
+  ]);
+in
+stdenv.mkDerivation rec {
+  pname = "dduper";
+  version = "0.04";
+
+  src = fetchFromGitHub {
+    owner = "lakshmipathi";
+    repo = "dduper";
+    rev = "v${version}";
+    sha256 = "09ncdawxkffldadqhfblqlkdl05q2qmywxyg6p61fv3dr2f2v5wm";
+  };
+
+  buildInputs = [
+    btrfsProgsPatched
+    py3
+  ];
+
+  patchPhase = ''
+    substituteInPlace ./dduper --replace "/usr/sbin/btrfs.static" "${btrfsProgsPatched}/bin/btrfs"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -m755 ./dduper $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Fast block-level out-of-band BTRFS deduplication tool.";
+    homepage = "https://github.com/Lakshmipathi/dduper";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ thesola10 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/filesystems/dislocker/default.nix b/pkgs/tools/filesystems/dislocker/default.nix
index 10e6e2f9c80..10559985f86 100644
--- a/pkgs/tools/filesystems/dislocker/default.nix
+++ b/pkgs/tools/filesystems/dislocker/default.nix
@@ -1,6 +1,8 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
+, fetchpatch
 , cmake
+, pkg-config
 , mbedtls
 , fuse
 }:
@@ -8,23 +10,36 @@
 
 stdenv.mkDerivation rec {
   pname = "dislocker";
-  version = "0.7.1";
+  version = "0.7.3";
 
   src = fetchFromGitHub {
     owner = "aorimn";
     repo = "dislocker";
     rev = "v${version}";
-    sha256 = "1crh2sg5x1kgqmdrl1nmrqwxjykxa4zwnbggcpdn97mj2gvdw7sb";
+    sha256 = "1ak68s1v5dwh8y2dy5zjybmrh0pnqralmyqzis67y21m87g47h2k";
   };
 
-  nativeBuildInputs = [ cmake ];
+  patches = [
+    # This patch
+    #   1. adds support for the latest FUSE on macOS
+    #   2. uses pkg-config to find libfuse instead of searching in predetermined
+    #      paths
+    #
+    # https://github.com/Aorimn/dislocker/pull/246
+    (fetchpatch {
+      url = "https://github.com/Aorimn/dislocker/commit/7744f87c75fcfeeb414d0957771042b10fb64e62.diff";
+      sha256 = "0bpyccbbfjsidsrd2q9qylb95nvi8g3glb3jss7xmhywj86bhzr5";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake pkg-config ];
   buildInputs = [ fuse mbedtls ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Read BitLocker encrypted partitions in Linux";
     homepage    = "https://github.com/aorimn/dislocker";
     license     = licenses.gpl2;
     maintainers = with maintainers; [ elitak ];
-    platforms   = platforms.linux;
+    platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/tools/filesystems/disorderfs/default.nix b/pkgs/tools/filesystems/disorderfs/default.nix
index 5137719790a..27dc55fb926 100644
--- a/pkgs/tools/filesystems/disorderfs/default.nix
+++ b/pkgs/tools/filesystems/disorderfs/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchurl, pkgconfig, fuse, attr, asciidoc }:
+{ lib, stdenv, fetchurl, pkg-config, fuse, attr, asciidoc }:
 
 stdenv.mkDerivation rec {
   pname = "disorderfs";
-  version = "0.5.6";
+  version = "0.5.11";
 
   src = fetchurl {
     url = "http://http.debian.net/debian/pool/main/d/disorderfs/disorderfs_${version}.orig.tar.bz2";
-    sha256 = "0xlsl6cw1p0d92crknrcf4iabgig0185dzp80qxh9iyjy42d27gk";
+    sha256 = "sha256-KqAMKVUykCgVdNyjacZjpVXqVdeob76v0iOuSd4TNIY=";
   };
 
-  nativeBuildInputs = [ pkgconfig asciidoc ];
+  nativeBuildInputs = [ pkg-config asciidoc ];
 
   buildInputs = [ fuse attr ];
 
   installFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "An overlay FUSE filesystem that introduces non-determinism into filesystem metadata";
     license = licenses.gpl3;
     platforms = platforms.linux;
diff --git a/pkgs/tools/filesystems/djmount/default.nix b/pkgs/tools/filesystems/djmount/default.nix
index 15086d28c98..f5b0a0315df 100644
--- a/pkgs/tools/filesystems/djmount/default.nix
+++ b/pkgs/tools/filesystems/djmount/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, fuse }:
+{ lib, stdenv, fetchurl, pkg-config, fuse }:
 
 stdenv.mkDerivation rec {
   pname = "djmount";
@@ -8,14 +8,14 @@ stdenv.mkDerivation rec {
     sha256 = "0kqf0cy3h4cfiy5a2sigmisx0lvvsi1n0fbyb9ll5gacmy1b8nxa";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   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;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.jagajaga ];
+    license = lib.licenses.gpl2;
   };
 }
diff --git a/pkgs/tools/filesystems/dosfstools/default.nix b/pkgs/tools/filesystems/dosfstools/default.nix
index 5af1580d0a5..14d054364fd 100644
--- a/pkgs/tools/filesystems/dosfstools/default.nix
+++ b/pkgs/tools/filesystems/dosfstools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, libiconv }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, libiconv }:
 
 stdenv.mkDerivation rec {
   pname = "dosfstools";
@@ -11,15 +11,15 @@ stdenv.mkDerivation rec {
     sha256 = "1a2zn1655d5f1m6jp9vpn3bp8yfxhcmxx3mx23ai9hmxiydiykr1";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ]
-    ++ stdenv.lib.optional stdenv.isDarwin libiconv;
+  nativeBuildInputs = [ autoreconfHook pkg-config ]
+    ++ 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;
+    platforms = lib.platforms.linux ++ lib.platforms.darwin;
+    license = lib.licenses.gpl3;
   };
 }
diff --git a/pkgs/tools/filesystems/duff/default.nix b/pkgs/tools/filesystems/duff/default.nix
index 48511b97c04..f980c761333 100644
--- a/pkgs/tools/filesystems/duff/default.nix
+++ b/pkgs/tools/filesystems/duff/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, gettext }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, gettext }:
 
 stdenv.mkDerivation {
   pname = "duff";
@@ -27,7 +27,7 @@ stdenv.mkDerivation {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Quickly find duplicate files";
     longDescription = ''
       Duff is a Unix command-line utility for quickly finding duplicates in
diff --git a/pkgs/tools/filesystems/duperemove/default.nix b/pkgs/tools/filesystems/duperemove/default.nix
index 53ebbb2f8d4..bbc346d46f7 100644
--- a/pkgs/tools/filesystems/duperemove/default.nix
+++ b/pkgs/tools/filesystems/duperemove/default.nix
@@ -1,23 +1,23 @@
-{ stdenv, fetchFromGitHub, libgcrypt
-, pkgconfig, glib, linuxHeaders ? stdenv.cc.libc.linuxHeaders, sqlite }:
+{ lib, stdenv, fetchFromGitHub, libgcrypt
+, pkg-config, glib, linuxHeaders ? stdenv.cc.libc.linuxHeaders, sqlite }:
 
 stdenv.mkDerivation rec {
   pname = "duperemove";
-  version = "0.11.1";
+  version = "0.11.2";
 
   src = fetchFromGitHub {
     owner = "markfasheh";
     repo = "duperemove";
     rev = "v${version}";
-    sha256 = "1scz76pvpljvrpfn176125xwaqwyy4pirlm11sc9spb2hyzknw2z";
+    sha256 = "1a87mka2sfzhbch2jip6wlvvs0glxq9lqwmyrp359d1rmwwmqiw9";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libgcrypt glib linuxHeaders sqlite ];
 
   makeFlags = [ "PREFIX=${placeholder "out"}" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A simple tool for finding duplicated extents and submitting them for deduplication";
     homepage = "https://github.com/markfasheh/duperemove";
     license = licenses.gpl2;
diff --git a/pkgs/tools/filesystems/e2fsprogs/default.nix b/pkgs/tools/filesystems/e2fsprogs/default.nix
index 469ed6fdf34..327ddbf8d6d 100644
--- a/pkgs/tools/filesystems/e2fsprogs/default.nix
+++ b/pkgs/tools/filesystems/e2fsprogs/default.nix
@@ -1,18 +1,20 @@
-{ stdenv, buildPackages, fetchurl, fetchpatch, pkgconfig, libuuid, gettext, texinfo, shared ? true }:
+{ lib, stdenv, buildPackages, fetchurl, fetchpatch, pkg-config, libuuid, gettext, texinfo
+, shared ? !stdenv.hostPlatform.isStatic
+}:
 
 stdenv.mkDerivation rec {
   pname = "e2fsprogs";
-  version = "1.45.5";
+  version = "1.46.2";
 
   src = fetchurl {
     url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
-    sha256 = "1n8ffss5044j9382rlvmhyr1f6kmnfjfbv6q4jbbh8gfdwpjmrwi";
+    sha256 = "sha256-958mtPZb3AWfyhLh7GowQMPOGlA/tw65Fb7nGQOBXNU=";
   };
 
   outputs = [ "bin" "dev" "out" "man" "info" ];
 
   depsBuildBuild = [ buildPackages.stdenv.cc ];
-  nativeBuildInputs = [ pkgconfig texinfo ];
+  nativeBuildInputs = [ pkg-config texinfo ];
   buildInputs = [ libuuid gettext ];
 
   # Only use glibc's __GNUC_PREREQ(X,Y) (checks if compiler is gcc version >= X.Y) when using glibc
@@ -63,10 +65,15 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://e2fsprogs.sourceforge.net/";
     description = "Tools for creating and checking ext2/ext3/ext4 filesystems";
-    license = licenses.gpl2;
+    license = with licenses; [
+      gpl2Plus
+      lgpl2Plus # lib/ext2fs, lib/e2p
+      bsd3      # lib/uuid
+      mit       # lib/et, lib/ss
+    ];
     platforms = platforms.unix;
     maintainers = [ maintainers.eelco ];
   };
diff --git a/pkgs/tools/filesystems/e2tools/default.nix b/pkgs/tools/filesystems/e2tools/default.nix
index 9c86ced90f7..d448b0f67b5 100644
--- a/pkgs/tools/filesystems/e2tools/default.nix
+++ b/pkgs/tools/filesystems/e2tools/default.nix
@@ -1,24 +1,26 @@
-{ stdenv, fetchurl, pkgconfig, e2fsprogs }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, e2fsprogs }:
 
 stdenv.mkDerivation rec {
   pname = "e2tools";
-  version = "0.0.16";
+  version = "0.1.0";
 
-  src = fetchurl {
-    url = "http://home.earthlink.net/~k_sheff/sw/${pname}/${pname}-${version}.tar.gz";
-    sha256 = "16wlc54abqz06dpipjdkw58bncpkxlj5f55lkzy07k3cg0bqwg2f";
+  src = fetchFromGitHub {
+    owner = "e2tools";
+    repo = "e2tools";
+    rev = "6ee7c2d9015dce7b90c3388096602e307e3bd790";
+    sha256 = "0nlqynrhj6ww7bnfhhfcx6bawii8iyvhgp6vz60zbnpgd68ifcx7";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ e2fsprogs ];
 
   enableParallelBuilding = true;
 
   meta = {
-    homepage = "http://home.earthlink.net/~k_sheff/sw/e2tools/";
+    homepage = "https://e2tools.github.io/";
     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 ];
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.leenaars ];
   };
 }
diff --git a/pkgs/tools/filesystems/encfs/default.nix b/pkgs/tools/filesystems/encfs/default.nix
index 24aa52e366f..14701a615c0 100644
--- a/pkgs/tools/filesystems/encfs/default.nix
+++ b/pkgs/tools/filesystems/encfs/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub
-, cmake, pkgconfig, perl
+{ lib, stdenv, fetchFromGitHub
+, cmake, pkg-config, perl
 , gettext, fuse, openssl, tinyxml2
 }:
 
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ gettext fuse openssl tinyxml2 ];
-  nativeBuildInputs = [ cmake pkgconfig perl ];
+  nativeBuildInputs = [ cmake pkg-config perl ];
 
   cmakeFlags =
     [ "-DUSE_INTERNAL_TINYXML=OFF"
@@ -23,12 +23,10 @@ stdenv.mkDerivation rec {
       "-DINSTALL_LIBENCFS=ON"
     ];
 
-  enableParallelBuilding = true;
-
-  meta = with stdenv.lib; {
+  meta = with 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;
+    license = with licenses; [ gpl3Plus lgpl3Plus ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/filesystems/exfat/default.nix b/pkgs/tools/filesystems/exfat/default.nix
index 24db663aee0..488ae337a33 100644
--- a/pkgs/tools/filesystems/exfat/default.nix
+++ b/pkgs/tools/filesystems/exfat/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, fuse }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, fuse }:
 
 stdenv.mkDerivation rec {
   pname = "exfat";
@@ -11,14 +11,14 @@ stdenv.mkDerivation rec {
     sha256 = "1q29pcysv747y6dis07953dkax8k9x50b5gg99gpz6rr46xwgkgb";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ fuse ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Free exFAT file system implementation";
     inherit (src.meta) homepage;
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ dywedir ];
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/filesystems/exfatprogs/default.nix b/pkgs/tools/filesystems/exfatprogs/default.nix
new file mode 100644
index 00000000000..88e50a2adc3
--- /dev/null
+++ b/pkgs/tools/filesystems/exfatprogs/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook, file }:
+
+stdenv.mkDerivation rec {
+  pname = "exfatprogs";
+  version = "1.1.2";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "19pbybgbfnvjb3n944ihrn1r8ch4dm8dr0d44d6w7p63dcp372xy";
+  };
+
+  nativeBuildInputs = [ pkg-config autoreconfHook file ];
+
+  meta = with lib; {
+    description = "exFAT filesystem userspace utilities";
+    homepage = "https://github.com/exfatprogs/exfatprogs";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ zane ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/filesystems/ext4magic/default.nix b/pkgs/tools/filesystems/ext4magic/default.nix
index 19e0e4ee63e..9917bf8d965 100644
--- a/pkgs/tools/filesystems/ext4magic/default.nix
+++ b/pkgs/tools/filesystems/ext4magic/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, file, libuuid, e2fsprogs, zlib, bzip2 }:
+{ lib, stdenv, fetchurl, fetchpatch, file, libuuid, e2fsprogs, zlib, bzip2 }:
 
 stdenv.mkDerivation rec {
   version = "0.3.2";
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
   buildInputs = [ file libuuid e2fsprogs zlib bzip2 ];
   installFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Recover / undelete files from ext3 or ext4 partitions";
     longDescription = ''
       ext4magic can recover/undelete files from ext3 or ext4 partitions
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
 
       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. 
+      file mode bits and also the old atime/mtime stamps.
 
       It's much more effective and works much better than extundelete.
     '';
diff --git a/pkgs/tools/filesystems/extundelete/default.nix b/pkgs/tools/filesystems/extundelete/default.nix
index 447f7a656d1..5992fd6a78e 100644
--- a/pkgs/tools/filesystems/extundelete/default.nix
+++ b/pkgs/tools/filesystems/extundelete/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, e2fsprogs }:
+{ lib, stdenv, fetchurl, e2fsprogs }:
 
 stdenv.mkDerivation {
   version = "0.2.4";
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
       --replace "inode.i_dir_acl" "inode.i_size_high"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Utility that can recover deleted files from an ext3 or ext4 partition";
     homepage = "http://extundelete.sourceforge.net/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/filesystems/f2fs-tools/default.nix b/pkgs/tools/filesystems/f2fs-tools/default.nix
index 2ab168a19a5..4b3d5c9ac1e 100644
--- a/pkgs/tools/filesystems/f2fs-tools/default.nix
+++ b/pkgs/tools/filesystems/f2fs-tools/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchgit, autoreconfHook, libselinux, libuuid, pkgconfig }:
+{ lib, stdenv, fetchgit, autoreconfHook, libselinux, libuuid, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "f2fs-tools";
-  version = "1.13.0";
+  version = "1.14.0";
 
   src = fetchgit {
     url = "https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git";
     rev = "refs/tags/v${version}";
-    sha256 = "0h6wincsvg6s232ajxblg66r5nx87v00a4w7xkbxgbl1qyny477j";
+    sha256 = "06ss05n87i1c3149qb3n7j1qp2scv3g2adx0v6ljkl59ab9b5saj";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ libselinux libuuid ];
 
   patches = [ ./f2fs-tools-cross-fix.patch ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs-tools.git/";
     description = "Userland tools for the f2fs filesystem";
     license = licenses.gpl2;
diff --git a/pkgs/tools/filesystems/f3/default.nix b/pkgs/tools/filesystems/f3/default.nix
index 3559579fe80..b9817ecb05c 100644
--- a/pkgs/tools/filesystems/f3/default.nix
+++ b/pkgs/tools/filesystems/f3/default.nix
@@ -1,38 +1,57 @@
-{ stdenv, fetchFromGitHub
-, parted, udev
+{ stdenv, lib, fetchFromGitHub
+, parted, systemd ? null
 }:
 
 stdenv.mkDerivation rec {
   pname = "f3";
-  version = "7.2";
-
-  enableParallelBuilding = true;
+  version = "8.0";
 
   src = fetchFromGitHub {
     owner = "AltraMayor";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1iwdg0r4wkgc8rynmw1qcqz62l0ldgc8lrazq33msxnk5a818jgy";
+    sha256 = "17l5vspfcgfbkqg7bakp3gql29yb05gzawm8n3im30ilzdr53678";
   };
 
-  buildInputs = [ parted udev ];
+  postPatch = ''
+     sed -i 's/-oroot -groot//' Makefile
+
+     for f in f3write.h2w log-f3wr; do
+      substituteInPlace $f \
+        --replace '$(dirname $0)' $out/bin
+     done
+  '';
+
+  buildInputs = [
+    parted
+  ]
+  ++ lib.optional stdenv.isLinux systemd;
+
+  enableParallelBuilding = true;
+
+  buildFlags   = [
+    "all" # f3read, f3write
+  ]
+  ++ lib.optional stdenv.isLinux "extra"; # f3brew, f3fix, f3probe
 
-  patchPhase = "sed -i 's/-oroot -groot//' Makefile";
+  installFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
 
-  buildFlags   = [ "all"                    # f3read, f3write
-                   "extra"                  # f3brew, f3fix, f3probe
-                 ];
+  installTargets = [
+    "install"
+  ]
+  ++ lib.optional stdenv.isLinux "install-extra";
 
-  installFlags = [ "PREFIX=$(out)"
-                   "install"
-                   "install-extra"
-                 ];
+  postInstall = ''
+    install -Dm555 -t $out/bin f3write.h2w log-f3wr
+    install -Dm444 -t $out/share/doc/${pname} LICENSE README.rst
+  '';
 
-  meta = {
+  meta = with lib; {
     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 ];
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ makefu ];
   };
 }
diff --git a/pkgs/tools/filesystems/fatresize/default.nix b/pkgs/tools/filesystems/fatresize/default.nix
index c1d048889c7..8f258a79f7d 100644
--- a/pkgs/tools/filesystems/fatresize/default.nix
+++ b/pkgs/tools/filesystems/fatresize/default.nix
@@ -1,38 +1,26 @@
-{ stdenv, fetchurl, parted, utillinux }:
+{ lib, stdenv, fetchFromGitHub, parted, util-linux, pkg-config }:
 
 stdenv.mkDerivation rec {
 
-  version = "1.0.2";
+  version = "1.1.0";
   pname = "fatresize";
 
-  src = fetchurl {
-    url = "mirror://sourceforge/fatresize/fatresize-${version}.tar.bz2";
-    sha256 = "04wp48jpdvq4nn0dgbw5za07g842rnxlh9mig4mslz70zqs0izjm";
+  src = fetchFromGitHub {
+    owner = "ya-mouse";
+    repo = "fatresize";
+    rev = "v${version}";
+    sha256 = "1vhz84kxfyl0q7mkqn68nvzzly0a4xgzv76m6db0bk7xyczv1qr2";
   };
 
-  buildInputs = [ parted utillinux ];
+  buildInputs = [ parted util-linux ];
+  nativeBuildInputs = [ pkg-config ];
 
-  # 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 ];
+  propagatedBuildInputs = [ parted util-linux ];
 
-  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; {
+  meta = with lib; {
     description = "The FAT16/FAT32 non-destructive resizer";
-    homepage = "https://sourceforge.net/projects/fatresize";
+    homepage = "https://github.com/ya-mouse/fatresize";
     platforms = platforms.linux;
-    license = licenses.gpl2;
+    license = licenses.gpl3;
   };
 }
diff --git a/pkgs/tools/filesystems/fatresize/fatresize_parted_nix.patch b/pkgs/tools/filesystems/fatresize/fatresize_parted_nix.patch
deleted file mode 100644
index e9aa87a2d56..00000000000
--- a/pkgs/tools/filesystems/fatresize/fatresize_parted_nix.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-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/pkgs/tools/filesystems/fatsort/default.nix b/pkgs/tools/filesystems/fatsort/default.nix
index 90ab3a6df41..7c9edf2f84d 100644
--- a/pkgs/tools/filesystems/fatsort/default.nix
+++ b/pkgs/tools/filesystems/fatsort/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, help2man}:
+{lib, stdenv, fetchurl, help2man}:
 
 stdenv.mkDerivation rec {
   version = "1.6.3.622";
@@ -15,12 +15,11 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=${placeholder "out"}" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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/pkgs/tools/filesystems/file-rename/default.nix b/pkgs/tools/filesystems/file-rename/default.nix
index 588295f7791..133f446f8a9 100644
--- a/pkgs/tools/filesystems/file-rename/default.nix
+++ b/pkgs/tools/filesystems/file-rename/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perlPackages, makeWrapper }:
+{ lib, stdenv, fetchurl, perl, perlPackages }:
 
 perlPackages.buildPerlPackage {
   pname = "File-Rename";
@@ -9,22 +9,20 @@ perlPackages.buildPerlPackage {
     sha256 = "1cf6xx2hiy1xalp35fh8g73j67r0w0g66jpcbc6971x9jbm7bvjy";
   };
 
-  nativeBuildInputs = [ makeWrapper ];
-
   # Fix an incorrect platform test that misidentifies Darwin as Windows
   postPatch = ''
     substituteInPlace Makefile.PL \
       --replace '/win/i' '/MSWin32/'
   '';
 
-  postInstall = ''
-    wrapProgram $out/bin/rename \
-      --prefix PERL5LIB : $out/${perlPackages.perl.libPrefix}
+  postFixup = ''
+    substituteInPlace $out/bin/rename \
+      --replace "#!${perl}/bin/perl" "#!${perl}/bin/perl -I $out/${perl.libPrefix}"
   '';
 
   doCheck = !stdenv.isDarwin;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Perl extension for renaming multiple files";
     license = licenses.artistic1;
     maintainers = with maintainers; [ peterhoeg ];
diff --git a/pkgs/tools/filesystems/fsfs/default.nix b/pkgs/tools/filesystems/fsfs/default.nix
index 3e76653dd3e..114c83e84f4 100644
--- a/pkgs/tools/filesystems/fsfs/default.nix
+++ b/pkgs/tools/filesystems/fsfs/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, openssl, fuse}:
+{lib, stdenv, fetchurl, openssl, fuse}:
 
 throw "It still does not build"
 
@@ -25,6 +25,6 @@ stdenv.mkDerivation {
   meta = {
     homepage = "http://fsfs.sourceforge.net/";
     description = "Secure distributed file system in user space";
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
   };
 }
diff --git a/pkgs/tools/filesystems/fuse-7z-ng/default.nix b/pkgs/tools/filesystems/fuse-7z-ng/default.nix
index a8eb1118f4d..0149071ab0d 100644
--- a/pkgs/tools/filesystems/fuse-7z-ng/default.nix
+++ b/pkgs/tools/filesystems/fuse-7z-ng/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fuse, p7zip, autoconf, automake, pkgconfig, makeWrapper }:
+{ lib, stdenv, fetchFromGitHub, fuse, p7zip, autoconf, automake, pkg-config, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "fuse-7z-ng";
@@ -11,12 +11,12 @@ stdenv.mkDerivation rec {
     sha256 = "17v1gcmg5q661b047zxjar735i4d3508dimw1x3z1pk4d1zjhp3x";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ fuse autoconf automake makeWrapper ];
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [ fuse autoconf automake ];
 
   preConfigure = "./autogen.sh";
 
-  libs = stdenv.lib.makeLibraryPath [ p7zip ]; # 'cause 7z.so is loaded manually
+  libs = lib.makeLibraryPath [ p7zip ]; # 'cause 7z.so is loaded manually
   postInstall = ''
     wrapProgram $out/bin/${pname} --suffix LD_LIBRARY_PATH : "${libs}/p7zip"
 
@@ -24,8 +24,7 @@ stdenv.mkDerivation rec {
     cp TODO README NEWS COPYING ChangeLog AUTHORS $out/share/doc/${pname}/
   '';
 
-  meta = with stdenv.lib; {
-    inherit version;
+  meta = with lib; {
     inherit (src.homepage);
     description = "A FUSE-based filesystem that uses the p7zip library";
     longDescription = ''
diff --git a/pkgs/tools/filesystems/fuse-overlayfs/default.nix b/pkgs/tools/filesystems/fuse-overlayfs/default.nix
index 11a3615a84c..a3cb67c1bd3 100644
--- a/pkgs/tools/filesystems/fuse-overlayfs/default.nix
+++ b/pkgs/tools/filesystems/fuse-overlayfs/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkg-config, fuse3, nixosTests }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, fuse3, nixosTests }:
 
 stdenv.mkDerivation rec {
   pname = "fuse-overlayfs";
-  version = "1.1.2";
+  version = "1.6";
 
   src = fetchFromGitHub {
     owner = "containers";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1ivz65nnyisha3lkk6ywx175f2sdacjz3q5vy9xddr7dixwd2b18";
+    sha256 = "sha256-YNR9Cj2StbmA2MjoQEWgJCMoHXQ1wIYikXGUEkmJEIg=";
   };
 
   nativeBuildInputs = [ autoreconfHook pkg-config ];
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
 
   passthru.tests = { inherit (nixosTests) podman; };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "FUSE implementation for overlayfs";
     longDescription = "An implementation of overlay+shiftfs in FUSE for rootless containers.";
     license = licenses.gpl3;
diff --git a/pkgs/tools/filesystems/fuseiso/default.nix b/pkgs/tools/filesystems/fuseiso/default.nix
index 0a4472d7123..7e44e7c15f9 100644
--- a/pkgs/tools/filesystems/fuseiso/default.nix
+++ b/pkgs/tools/filesystems/fuseiso/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, autoreconfHook, pkgconfig, fuse, glib, zlib }:
+{ lib, stdenv, fetchurl, fetchpatch, autoreconfHook, pkg-config, fuse, glib, zlib }:
 
 stdenv.mkDerivation rec {
   pname = "fuseiso";
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
     })
   ];
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
   buildInputs = [ fuse glib zlib ];
 
@@ -46,7 +46,7 @@ stdenv.mkDerivation rec {
     install -Dm444 -t $out/share/doc/${pname} NEWS README
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "FUSE module to mount ISO filesystem images";
     homepage = "https://sourceforge.net/projects/fuseiso";
     license = licenses.gpl2;
diff --git a/pkgs/tools/filesystems/fwanalyzer/default.nix b/pkgs/tools/filesystems/fwanalyzer/default.nix
new file mode 100644
index 00000000000..00266817390
--- /dev/null
+++ b/pkgs/tools/filesystems/fwanalyzer/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, e2tools
+, makeWrapper
+, mtools
+}:
+
+buildGoModule rec {
+  pname = "fwanalyzer";
+  version = "1.4.3";
+
+  src = fetchFromGitHub {
+    owner = "cruise-automation";
+    repo = pname;
+    rev = version;
+    sha256 = "1pj6s7lzw7490488a30pzvqy2riprfnhb4nzxm6sh2nsp51xalzv";
+  };
+
+  vendorSha256 = "1cjbqx75cspnkx7fgc665q920dsxnsdhqgyiawkvx0i8akczbflw";
+
+  subPackages = [ "cmd/${pname}" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/fwanalyzer" --prefix PATH : "${lib.makeBinPath [ e2tools mtools ]}"
+  '';
+
+  # The tests requires an additional setup (unpacking images, etc.)
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool to analyze filesystem images";
+    homepage = "https://github.com/cruise-automation/fwanalyzer";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/filesystems/gcsfuse/default.nix b/pkgs/tools/filesystems/gcsfuse/default.nix
index 89fa3ebe33b..92d35338d18 100644
--- a/pkgs/tools/filesystems/gcsfuse/default.nix
+++ b/pkgs/tools/filesystems/gcsfuse/default.nix
@@ -2,13 +2,13 @@
 
 buildGoPackage rec {
   pname = "gcsfuse";
-  version = "0.30.0";
+  version = "0.35.1";
 
   src = fetchFromGitHub {
     owner = "googlecloudplatform";
     repo = "gcsfuse";
     rev = "v${version}";
-    sha256 = "1ai1dgf07g2c08rp87kygrl67hyj7x793093wmnwaxfpylx5flv0";
+    sha256 = "sha256-A6vhdECKMq0kcR7mUTPu9F0N7gVj7tOg7UXeJ/gmbnM=";
   };
 
   goPackagePath = "github.com/googlecloudplatform/gcsfuse";
diff --git a/pkgs/tools/filesystems/genext2fs/default.nix b/pkgs/tools/filesystems/genext2fs/default.nix
index 8d0c0325aa9..ccc048f7572 100644
--- a/pkgs/tools/filesystems/genext2fs/default.nix
+++ b/pkgs/tools/filesystems/genext2fs/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation {
   name = "genext2fs-1.4.1";
-  
+
   src = fetchurl {
     url = "mirror://sourceforge/genext2fs/genext2fs-1.4.1.tar.gz";
     sha256 = "1z7czvsf3ircvz2cw1cf53yifsq29ljxmj15hbgc79l6gbxbnka0";
@@ -14,7 +14,7 @@ stdenv.mkDerivation {
     sed -e 's@4 [*] (EXT2_TIND_BLOCK+1)@-1+&@' -i genext2fs.c
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://genext2fs.sourceforge.net/";
     description = "A tool to generate ext2 filesystem images without requiring root privileges";
     license = licenses.gpl2;
diff --git a/pkgs/tools/filesystems/genimage/default.nix b/pkgs/tools/filesystems/genimage/default.nix
index c3b867fbb60..b3ca1ae8394 100644
--- a/pkgs/tools/filesystems/genimage/default.nix
+++ b/pkgs/tools/filesystems/genimage/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, libconfuse, gettext }:
+{ lib, stdenv, fetchurl, pkg-config, libconfuse, gettext }:
 
 stdenv.mkDerivation rec {
   pname = "genimage";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "0y4h8x8lqxam8m90rdfq8cg5137kvilxr3d1qzddpx7nxpvmmwv9";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libconfuse gettext ];
 
   postInstall = ''
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
     cp -v README "$docdir"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://git.pengutronix.de/cgit/genimage";
     description = "Generate filesystem images from directory trees";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/filesystems/genromfs/default.nix b/pkgs/tools/filesystems/genromfs/default.nix
index 4adf124d529..205d84791ec 100644
--- a/pkgs/tools/filesystems/genromfs/default.nix
+++ b/pkgs/tools/filesystems/genromfs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   version = "0.5.2";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
       --replace "gcc" "cc"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://romfs.sourceforge.net/";
     description = "Tool for creating romfs file system images";
     license = licenses.gpl2;
diff --git a/pkgs/tools/filesystems/gitfs/default.nix b/pkgs/tools/filesystems/gitfs/default.nix
index 0f66955360f..b5b1256a9b5 100644
--- a/pkgs/tools/filesystems/gitfs/default.nix
+++ b/pkgs/tools/filesystems/gitfs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python3Packages }:
+{ lib, fetchFromGitHub, python3Packages }:
 
 python3Packages.buildPythonApplication rec {
   pname = "gitfs";
@@ -14,9 +14,15 @@ python3Packages.buildPythonApplication rec {
   patchPhase = ''
     # requirement checks are unnecessary at runtime
     echo > requirements.txt
+
+    # NOTE: As of gitfs 0.5.2, The pygit2 release that upstream uses is a major
+    # version behind the one packaged in nixpkgs.
+    substituteInPlace gitfs/mounter.py --replace \
+      'from pygit2.remote import RemoteCallbacks' \
+      'from pygit2 import RemoteCallbacks'
   '';
 
-  checkInputs = with python3Packages; [ pytest pytestcov mock ];
+  checkInputs = with python3Packages; [ pytest pytest-cov mock ];
   propagatedBuildInputs = with python3Packages; [ atomiclong fusepy pygit2 six ];
 
   checkPhase = "py.test";
@@ -30,8 +36,8 @@ python3Packages.buildPythonApplication rec {
       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 ];
+    license = lib.licenses.asl20;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.robbinch ];
   };
 }
diff --git a/pkgs/tools/filesystems/glusterfs/default.nix b/pkgs/tools/filesystems/glusterfs/default.nix
index 44880638e65..9933498d07e 100644
--- a/pkgs/tools/filesystems/glusterfs/default.nix
+++ b/pkgs/tools/filesystems/glusterfs/default.nix
@@ -1,30 +1,23 @@
-{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
+{lib, stdenv, fetchFromGitHub, fuse, bison, flex_2_5_35, openssl, python3, ncurses, readline,
+ autoconf, automake, libtool, pkg-config, zlib, libaio, libxml2, acl, sqlite,
+ liburcu, liburing, attr, makeWrapper, coreutils, gnused, gnugrep, which,
+ openssh, gawk, findutils, util-linux, lvm2, btrfs-progs, e2fsprogs, xfsprogs, systemd,
+ rsync, glibc, rpcsvc-proto, libtirpc
 }:
 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.6";
-    name="${baseName}-${version}";
-    url="https://github.com/gluster/glusterfs/archive/v${version}.tar.gz";
-    sha256 = "0zdcv2jk8dp67id8ic30mkn97ccp07jf20g7v09a5k31pw9aqyih";
-  };
+  # 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.
 
   buildInputs = [
     fuse bison flex_2_5_35 openssl ncurses readline
-    autoconf automake libtool pkgconfig zlib libaio libxml2
-    acl sqlite liburcu attr makeWrapper utillinux
+    autoconf automake libtool pkg-config zlib libaio libxml2
+    acl sqlite liburcu attr makeWrapper util-linux libtirpc
+    liburing
     (python3.withPackages (pkgs: [
       pkgs.flask
       pkgs.prettytable
@@ -56,29 +49,30 @@ let
     openssh # ssh
     rsync # rsync, e.g. for geo-replication
     systemd # systemctl
-    utillinux # mount umount
+    util-linux # mount umount
     which # which
     xfsprogs # xfs_info
   ];
-in
-stdenv.mkDerivation
-{
-  inherit (s) name version;
+in stdenv.mkDerivation rec {
+  pname = "glusterfs";
+  version = "9.3";
+
+  src = fetchFromGitHub {
+    owner = "gluster";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-xV7griN453f63jwX5jTdW0KJdLi14Km7JengbNeh4iI=";
+  };
   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
     substituteInPlace libglusterfs/src/glusterfs/lvm-defaults.h \
       --replace '/sbin/' '${lvm2}/bin/'
     substituteInPlace libglusterfs/src/glusterfs/compat.h \
-      --replace '/bin/umount' '${utillinux}/bin/umount'
+      --replace '/bin/umount' '${util-linux}/bin/umount'
     substituteInPlace contrib/fuse-lib/mount-gluster-compat.h \
-      --replace '/bin/mount' '${utillinux}/bin/mount'
+      --replace '/bin/mount' '${util-linux}/bin/mount'
   '';
 
   # Note that the VERSION file is something that is present in release tarballs
@@ -91,15 +85,17 @@ stdenv.mkDerivation
   # 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
+    echo "v${version}" > VERSION
     ./autogen.sh
     export PYTHON=${python3}/bin/python
     '';
 
   configureFlags = [
-    ''--localstatedir=/var''
+    "--localstatedir=/var"
     ];
 
+  nativeBuildInputs = [ rpcsvc-proto ];
+
   makeFlags = [ "DESTDIR=$(out)" ];
 
   enableParallelBuilding = true;
@@ -107,7 +103,7 @@ stdenv.mkDerivation
   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.
@@ -116,7 +112,7 @@ stdenv.mkDerivation
     # 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_PATH="${lib.makeBinPath runtimePATHdeps}:$out/bin"
     GLUSTER_PYTHONPATH="$(toPythonPath $out):$out/libexec/glusterfs"
     GLUSTER_LD_LIBRARY_PATH="$out/lib"
 
@@ -151,7 +147,7 @@ stdenv.mkDerivation
     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;
 
@@ -185,12 +181,7 @@ stdenv.mkDerivation
     rm -r $out/bin/conf.py
     '';
 
-  src = fetchurl {
-    inherit (s) url sha256;
-  };
-
-  meta = with stdenv.lib; {
-    inherit (s) version;
+  meta = with lib; {
     description = "Distributed storage system";
     homepage = "https://www.gluster.org";
     license = licenses.lgpl3Plus; # dual licese: choice of lgpl3Plus or gpl2
diff --git a/pkgs/tools/filesystems/glusterfs/glusterfs-fix-bug-1489610-glusterfind-var-data-under-prefix.patch b/pkgs/tools/filesystems/glusterfs/glusterfs-fix-bug-1489610-glusterfind-var-data-under-prefix.patch
deleted file mode 100644
index f08d73cf3a6..00000000000
--- a/pkgs/tools/filesystems/glusterfs/glusterfs-fix-bug-1489610-glusterfind-var-data-under-prefix.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-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/pkgs/tools/filesystems/go-mtpfs/default.nix b/pkgs/tools/filesystems/go-mtpfs/default.nix
index 605e341c4d7..bd6e0fe67fc 100644
--- a/pkgs/tools/filesystems/go-mtpfs/default.nix
+++ b/pkgs/tools/filesystems/go-mtpfs/default.nix
@@ -1,4 +1,4 @@
-{ pkgconfig, libusb1, buildGoPackage, fetchgit }:
+{ pkg-config, libusb1, buildGoPackage, fetchgit }:
 
 buildGoPackage rec {
   pname = "go-mtpfs";
@@ -7,7 +7,7 @@ buildGoPackage rec {
 
   goPackagePath = "github.com/hanwen/go-mtpfs";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libusb1 ];
 
   src = fetchgit {
diff --git a/pkgs/tools/filesystems/gocryptfs/default.nix b/pkgs/tools/filesystems/gocryptfs/default.nix
index 70a0aff118d..c2e022ca4bd 100644
--- a/pkgs/tools/filesystems/gocryptfs/default.nix
+++ b/pkgs/tools/filesystems/gocryptfs/default.nix
@@ -1,50 +1,66 @@
-# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
-{ stdenv, buildGoPackage, fetchFromGitHub, openssl, pandoc, pkgconfig }:
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, openssl
+, pandoc
+, pkg-config
+, libfido2
+}:
 
 let
-  goFuseVersion = with stdenv.lib; substring 0 7 (head (filter (
-    d: d.goPackagePath == "github.com/hanwen/go-fuse"
-  ) (import ./deps.nix))).fetch.rev;
+  # pandoc is currently broken on aarch64-darwin
+  # because of missing ghc
+  brokenPandoc = stdenv.isDarwin && stdenv.isAarch64;
 in
-buildGoPackage rec {
-  pname = "gocryptfs";
-  version = "1.7.1";
-
-  goPackagePath = "github.com/rfjakob/gocryptfs";
 
-  nativeBuildInputs = [ pandoc pkgconfig ];
-  buildInputs = [ openssl ];
+buildGoModule rec {
+  pname = "gocryptfs";
+  version = "2.0.1";
 
   src = fetchFromGitHub {
     owner = "rfjakob";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1zhzhvjhvi6xzib985bsnj9yzp4zsnm91m1679nbab6vm3kanq06";
+    sha256 = "0wiagmym8mwi0vpvrs5ryn3zjwha8ilh7xkavvkd1gqd5laln0kp";
   };
 
-  postPatch = "rm -r tests";
+  vendorSha256 = "10az8n7z4rhsk1af2x6v3pmxg4zp7c9cal35ily8bdzzcb9cpgs0";
+
+  nativeBuildInputs = [
+    pkg-config
+  ] ++ lib.optionals (!brokenPandoc) [
+    pandoc
+  ];
+
+  buildInputs = [ openssl ];
+
+  propagatedBuildInputs = [ libfido2 ];
 
   buildFlagsArray = ''
     -ldflags=
       -X main.GitVersion=${version}
-      -X main.GitVersionFuse=${goFuseVersion}
+      -X main.GitVersionFuse=[vendored]
+      -X main.BuildDate=unknown
   '';
 
-  goDeps = ./deps.nix;
+  subPackages = [ "." "gocryptfs-xray" "contrib/statfs" ];
 
-  postBuild = ''
-    pushd go/src/github.com/rfjakob/gocryptfs/Documentation/
+  postBuild = lib.optionalString (!brokenPandoc) ''
+    pushd Documentation/
     mkdir -p $out/share/man/man1
+    # taken from Documentation/MANPAGE-render.bash
     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
+    pandoc MANPAGE-STATFS.md -s -t man -o $out/share/man/man1/statfs.1
     popd
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Encrypted overlay filesystem written in Go";
     license = licenses.mit;
     homepage = "https://nuetzlich.net/gocryptfs/";
-    maintainers = with maintainers; [ flokli offline ];
+    maintainers = with maintainers; [ flokli offline prusnak ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/filesystems/gocryptfs/deps.nix b/pkgs/tools/filesystems/gocryptfs/deps.nix
deleted file mode 100644
index cebad12327e..00000000000
--- a/pkgs/tools/filesystems/gocryptfs/deps.nix
+++ /dev/null
@@ -1,75 +0,0 @@
-# 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/pkgs/tools/filesystems/goofys/default.nix b/pkgs/tools/filesystems/goofys/default.nix
new file mode 100644
index 00000000000..94ce7be08e5
--- /dev/null
+++ b/pkgs/tools/filesystems/goofys/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule {
+  pname = "goofys";
+  version = "unstable-2021-03-26";
+
+  src = fetchFromGitHub {
+    owner = "kahing";
+    repo = "goofys";
+    # Same as v0.24.0 but migrated to Go modules
+    rev = "0c993271269b539196330a18716a33fbeeebd624";
+    sha256 = "18is5sv2a9wmsm0qpakly988z1qyl2b2hf2105lpxrgl659sf14p";
+  };
+
+  vendorSha256 = "15yq0msh9icxd5n2zkkqrlwxifizhpa99d4aznv8clg32ybs61fj";
+
+  subPackages = [ "." ];
+
+  # Tests are using networking
+  postPatch = ''
+    rm internal/*_test.go
+  '';
+
+  meta = {
+    homepage = "https://github.com/kahing/goofys";
+    description = "A high-performance, POSIX-ish Amazon S3 file system written in Go.";
+    license = [ lib.licenses.mit ];
+    maintainers = [ lib.maintainers.adisbladis ];
+  };
+
+}
diff --git a/pkgs/tools/filesystems/gpart/default.nix b/pkgs/tools/filesystems/gpart/default.nix
index 59b4785888b..eafbe066ac9 100644
--- a/pkgs/tools/filesystems/gpart/default.nix
+++ b/pkgs/tools/filesystems/gpart/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   pname = "gpart";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit (src.meta) homepage;
     description = "Guess PC-type hard disk partitions";
     longDescription = ''
diff --git a/pkgs/tools/filesystems/grive2/default.nix b/pkgs/tools/filesystems/grive2/default.nix
index 01b63003d62..68475b9e290 100644
--- a/pkgs/tools/filesystems/grive2/default.nix
+++ b/pkgs/tools/filesystems/grive2/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, yajl, cmake, libgcrypt, curl, expat, boost, libiberty }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, yajl, cmake, libgcrypt, curl, expat, boost, libiberty }:
 
 stdenv.mkDerivation rec {
   version = "0.5.1";
@@ -11,11 +11,11 @@ stdenv.mkDerivation rec {
     sha256 = "1kv34ys8qarjsxpb1kd8dp7b3b4ycyiwjzd6mg97d3jk7405g6nm";
   };
 
-  nativeBuildInputs = [ cmake pkgconfig ];
+  nativeBuildInputs = [ cmake pkg-config ];
 
   buildInputs = [ libgcrypt yajl curl expat stdenv boost libiberty ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A console Google Drive client";
     homepage = "https://github.com/vitalif/grive2";
     license = licenses.gpl2;
diff --git a/pkgs/tools/filesystems/hfsprogs/default.nix b/pkgs/tools/filesystems/hfsprogs/default.nix
index 2032ca1c1e7..8a2a8572b5c 100644
--- a/pkgs/tools/filesystems/hfsprogs/default.nix
+++ b/pkgs/tools/filesystems/hfsprogs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, openssl, libbsd }:
+{ lib, stdenv, fetchurl, openssl, libbsd }:
 
 let version = "332.25";
     package_name = "hfsprogs"; in
@@ -15,6 +15,10 @@ stdenv.mkDerivation {
     })
   ];
 
+  postPatch = ''
+    sed -ie '/sys\/sysctl.h/d' newfs_hfs.tproj/makehfs.c
+  '';
+
   sourceRoot = "diskdev_cmds-" + version;
   patches = [ "../debian/patches/*.patch" ];
 
@@ -39,7 +43,7 @@ stdenv.mkDerivation {
 
   meta = {
     description = "HFS/HFS+ user space utils";
-    license = stdenv.lib.licenses.apsl20;
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.apsl20;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/filesystems/httpfs/default.nix b/pkgs/tools/filesystems/httpfs/default.nix
index d97b05abb6c..f107add29c0 100644
--- a/pkgs/tools/filesystems/httpfs/default.nix
+++ b/pkgs/tools/filesystems/httpfs/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, pkgconfig, fuse, openssl, asciidoc
+{ fetchurl, lib, stdenv, pkg-config, fuse, openssl, asciidoc
 , docbook_xml_dtd_45, docbook_xsl , libxml2, libxslt }:
 
 stdenv.mkDerivation rec {
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs =
-    [ pkgconfig fuse openssl
+    [ pkg-config fuse openssl
       asciidoc docbook_xml_dtd_45 docbook_xsl libxml2 libxslt
     ];
 
@@ -23,13 +23,13 @@ stdenv.mkDerivation rec {
     '';
 
   meta = {
-    description = "HTTPFS2, a FUSE-based HTTP file system for Linux";
+    description = "FUSE-based HTTP filesystem for Linux";
 
     homepage = "http://httpfs.sourceforge.net/";
 
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
 
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.unix;
     maintainers = [ ];
   };
 }
diff --git a/pkgs/tools/filesystems/hubicfuse/default.nix b/pkgs/tools/filesystems/hubicfuse/default.nix
index 5bb8b4e91e2..0ebc1f23223 100644
--- a/pkgs/tools/filesystems/hubicfuse/default.nix
+++ b/pkgs/tools/filesystems/hubicfuse/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, curl, openssl, fuse, libxml2, json_c, file }:
+{ lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config, curl, openssl, fuse, libxml2, json_c, file }:
 
 stdenv.mkDerivation rec {
   pname = "hubicfuse";
@@ -11,7 +11,16 @@ stdenv.mkDerivation rec {
     sha256 = "1x988hfffxgvqxh083pv3lj5031fz03sbgiiwrjpaiywfbhm8ffr";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  patches = [
+    # Fix Darwin build
+    # https://github.com/TurboGit/hubicfuse/pull/159
+    (fetchpatch {
+      url = "https://github.com/TurboGit/hubicfuse/commit/b460f40d86bc281a21379158a7534dfb9f283786.patch";
+      sha256 = "0nqvcbrgbc5dms8fkz3brlj40yn48p36drabrnc26gvb3hydh5dl";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ curl openssl fuse libxml2 json_c file ];
   postInstall = ''
     install hubic_token $out/bin
@@ -19,10 +28,10 @@ stdenv.mkDerivation rec {
     ln -sf $out/bin/hubicfuse $out/sbin/mount.hubicfuse
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/TurboGit/hubicfuse";
     description = "FUSE-based filesystem to access hubic cloud storage";
-    platforms = platforms.linux;
+    platforms = platforms.unix;
     license = licenses.mit;
     maintainers = [ maintainers.jpierre03 ];
   };
diff --git a/pkgs/tools/filesystems/idsk/default.nix b/pkgs/tools/filesystems/idsk/default.nix
index 72ed4f0ee1b..0b7ae339053 100644
--- a/pkgs/tools/filesystems/idsk/default.nix
+++ b/pkgs/tools/filesystems/idsk/default.nix
@@ -1,15 +1,15 @@
-{ stdenv, fetchFromGitHub, cmake }:
+{ lib, stdenv, fetchFromGitHub, cmake }:
 
 stdenv.mkDerivation rec {
 
   pname = "idsk";
-  version = "0.19";
+  version = "0.20";
 
   src = fetchFromGitHub {
     repo = "idsk";
     owner = "cpcsdk";
     rev = "v${version}";
-    sha256 = "0b4my5cz5kbzh4n65jr721piha6zixaxmfiss2zidip978k9rb6f";
+    sha256 = "05zbdkb9s6sfkni6k927795w2fqdhnf3i7kgl27715sdmmdab05d";
   };
 
   nativeBuildInputs = [ cmake ];
@@ -19,11 +19,11 @@ stdenv.mkDerivation rec {
     cp iDSK $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Manipulating CPC dsk images and files";
     homepage = "https://github.com/cpcsdk/idsk" ;
     license = licenses.mit;
-    maintainers = [ maintainers.genesis ];
-    platforms = platforms.linux;
+    maintainers = [ ];
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/filesystems/ifuse/default.nix b/pkgs/tools/filesystems/ifuse/default.nix
index 5e6025c0348..09be33384d5 100644
--- a/pkgs/tools/filesystems/ifuse/default.nix
+++ b/pkgs/tools/filesystems/ifuse/default.nix
@@ -1,19 +1,19 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, usbmuxd, fuse, libimobiledevice }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, usbmuxd, fuse, libimobiledevice }:
 
 stdenv.mkDerivation rec {
   pname = "ifuse";
-  version = "2018-10-08";
+  version = "1.1.4";
 
   src = fetchFromGitHub {
     owner = "libimobiledevice";
     repo = pname;
-    rev = "e75d32c34d0e8b80320f0a007d5ecbb3f55ef7f0";
-    sha256 = "1b9w2i0sliswlkkb890l9i0rxrf631xywxf8ihygfmjdsfw47h1m";
+    rev = version;
+    sha256 = "1r12y3h1j7ikkwk874h9969kr4ksyamvrwywx19ml6rsr01arw84";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig fuse usbmuxd libimobiledevice ];
+  nativeBuildInputs = [ autoreconfHook pkg-config fuse usbmuxd libimobiledevice ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/libimobiledevice/ifuse";
     description = "A fuse filesystem implementation to access the contents of iOS devices";
     longDescription = ''
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
       devices.
     '';
     license = licenses.lgpl21Plus;
-    platforms = platforms.linux;
+    platforms = platforms.unix;
     maintainers = with maintainers; [ infinisil ];
   };
 }
diff --git a/pkgs/tools/filesystems/irods/common.nix b/pkgs/tools/filesystems/irods/common.nix
index fb90c3b0aeb..87bb2b9051c 100644
--- a/pkgs/tools/filesystems/irods/common.nix
+++ b/pkgs/tools/filesystems/irods/common.nix
@@ -1,13 +1,10 @@
-{ stdenv, bzip2, zlib, autoconf, automake, cmake, gnumake, help2man , texinfo, libtool , cppzmq , libarchive, avro-cpp, boost, jansson, zeromq, openssl, pam, libiodbc, kerberos, gcc, libcxx, which, catch2 }:
+{ lib, stdenv, bzip2, zlib, autoconf, automake, cmake, gnumake, help2man , texinfo, libtool , cppzmq , libarchive, avro-cpp, boost, jansson, zeromq, openssl, pam, libiodbc, libkrb5, gcc, libcxx, which, catch2 }:
 
 # 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 catch2 ];
+  nativeBuildInputs = [ autoconf automake cmake gnumake help2man texinfo which gcc ];
+  buildInputs = [ bzip2 zlib libtool cppzmq libarchive avro-cpp jansson zeromq openssl pam libiodbc libkrb5 boost libcxx catch2 ];
 
   cmakeFlags = [
     "-DIRODS_EXTERNALS_FULLPATH_CLANG=${stdenv.cc}"
@@ -22,7 +19,7 @@ with stdenv;
     "-DIRODS_LINUX_DISTRIBUTION_NAME=nix"
     "-DIRODS_LINUX_DISTRIBUTION_VERSION_MAJOR=${builtins.nixVersion}"
     "-DCPACK_GENERATOR=TGZ"
-    "-DCMAKE_CXX_FLAGS=-I${libcxx}/include/c++/v1"
+    "-DCMAKE_CXX_FLAGS=-I${lib.getDev libcxx}/include/c++/v1"
   ];
 
   preConfigure = ''
@@ -36,7 +33,7 @@ with stdenv;
     "
   '';
 
-  meta = {
+  meta = with lib; {
     description = "Integrated Rule-Oriented Data System (iRODS)";
     longDescription = ''
       The Integrated Rule-Oriented Data System (iRODS) is open source data management
@@ -49,8 +46,8 @@ with stdenv;
       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;
+    license = lib.licenses.bsd3;
+    maintainers = [ lib.maintainers.bzizou ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/filesystems/irods/default.nix b/pkgs/tools/filesystems/irods/default.nix
index 8dfdd96dbeb..cbc9f19c664 100644
--- a/pkgs/tools/filesystems/irods/default.nix
+++ b/pkgs/tools/filesystems/irods/default.nix
@@ -1,15 +1,13 @@
-{ stdenv, fetchFromGitHub, bzip2, zlib, autoconf, automake, cmake, gnumake, help2man , texinfo, libtool , cppzmq , libarchive, avro-cpp_llvm, boost, jansson, zeromq, openssl , pam, libiodbc, kerberos, gcc, libcxx, which, catch2 }:
-
-with stdenv;
+{ lib, stdenv, fetchFromGitHub, bzip2, zlib, autoconf, automake, cmake, gnumake, help2man , texinfo, libtool , cppzmq , libarchive, avro-cpp_llvm, boost, jansson, zeromq, openssl , pam, libiodbc, libkrb5, gcc, libcxx, which, catch2 }:
 
 let
   avro-cpp=avro-cpp_llvm;
 in
 let
   common = import ./common.nix {
-    inherit stdenv bzip2 zlib autoconf automake cmake gnumake
+    inherit lib stdenv bzip2 zlib autoconf automake cmake gnumake
             help2man texinfo libtool cppzmq libarchive jansson
-            zeromq openssl pam libiodbc kerberos gcc libcxx
+            zeromq openssl pam libiodbc libkrb5 gcc libcxx
             boost avro-cpp which catch2;
   };
 in rec {
@@ -57,8 +55,7 @@ in rec {
     '';
 
     meta = common.meta // {
-      longDescription = common.meta.longDescription + ''
-        This package provides the servers and libraries.'';
+      longDescription = common.meta.longDescription + "This package provides the servers and libraries.";
     };
   });
 
@@ -84,7 +81,7 @@ in rec {
      '';
 
      cmakeFlags = common.cmakeFlags ++ [
-       "-DCMAKE_INSTALL_PREFIX=${out}"
+       "-DCMAKE_INSTALL_PREFIX=${stdenv.out}"
        "-DIRODS_DIR=${irods}/lib/irods/cmake"
        "-DCMAKE_EXE_LINKER_FLAGS=-Wl,-rpath,${irods}/lib"
        "-DCMAKE_MODULE_LINKER_FLAGS=-Wl,-rpath,${irods}/lib"
@@ -93,8 +90,7 @@ in rec {
 
      meta = common.meta // {
        description = common.meta.description + " CLI clients";
-       longDescription = common.meta.longDescription + ''
-         This package provides the CLI clients, called 'icommands'.'';
+       longDescription = common.meta.longDescription + "This package provides the CLI clients, called 'icommands'.";
      };
   });
 }
diff --git a/pkgs/tools/filesystems/jfsutils/default.nix b/pkgs/tools/filesystems/jfsutils/default.nix
index 954393e4589..fadc639fbf6 100644
--- a/pkgs/tools/filesystems/jfsutils/default.nix
+++ b/pkgs/tools/filesystems/jfsutils/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, libuuid, autoreconfHook }:
+{ lib, stdenv, fetchurl, fetchpatch, libuuid, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   name = "jfsutils-1.1.15";
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ autoreconfHook ];
   buildInputs = [ libuuid ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "IBM JFS utilities";
     homepage = "http://jfs.sourceforge.net";
     license = licenses.gpl3;
diff --git a/pkgs/tools/filesystems/jmtpfs/default.nix b/pkgs/tools/filesystems/jmtpfs/default.nix
index 56afb8f0f55..2754d223a6b 100644
--- a/pkgs/tools/filesystems/jmtpfs/default.nix
+++ b/pkgs/tools/filesystems/jmtpfs/default.nix
@@ -1,9 +1,8 @@
-{ stdenv, fetchFromGitHub, pkgconfig, file, fuse, libmtp }:
+{ lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config, file, fuse, libmtp }:
 
-let version = "0.5"; in
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "jmtpfs";
-  inherit version;
+  version = "0.5";
 
   src = fetchFromGitHub {
     sha256 = "1pm68agkhrwgrplrfrnbwdcvx5lrivdmqw8pb5gdmm3xppnryji1";
@@ -12,14 +11,22 @@ stdenv.mkDerivation {
     owner = "JasonFerrara";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  patches = [
+    # Fix Darwin build (https://github.com/JasonFerrara/jmtpfs/pull/12)
+    (fetchpatch {
+      url = "https://github.com/JasonFerrara/jmtpfs/commit/b89084303477d1bc4dc9a887ba9cdd75221f497d.patch";
+      sha256 = "0s7x3jfk8i86rd5bwhj7mb1lffcdlpj9bd7b41s1768ady91rb29";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ file fuse libmtp ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A FUSE filesystem for MTP devices like Android phones";
     homepage = "https://github.com/JasonFerrara/jmtpfs";
-    license = licenses.gpl3;
-    platforms = platforms.linux;
+    license = licenses.gpl3Only;
+    platforms = platforms.unix;
     maintainers = [ maintainers.coconnor ];
   };
 }
diff --git a/pkgs/tools/filesystems/lizardfs/default.nix b/pkgs/tools/filesystems/lizardfs/default.nix
index 3ae898d4ba8..a9e0cd12d9d 100644
--- a/pkgs/tools/filesystems/lizardfs/default.nix
+++ b/pkgs/tools/filesystems/lizardfs/default.nix
@@ -1,9 +1,10 @@
-{ stdenv
+{ lib
+, stdenv
 , fetchFromGitHub
 , fetchpatch
 , cmake
 , makeWrapper
-, python2
+, python3
 , db
 , fuse
 , asciidoc
@@ -12,48 +13,40 @@
 , docbook_xml_dtd_412
 , docbook_xsl
 , boost
-, pkgconfig
+, pkg-config
 , judy
 , pam
 , spdlog
+, fmt
+, systemdMinimal
 , zlib # optional
 }:
 
 stdenv.mkDerivation rec {
   pname = "lizardfs";
-  version = "3.12.0";
+  version = "3.13.0-rc3";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
-    rev = "v${version}";
-    sha256 = "0zk73wmx82ari3m2mv0zx04x1ggsdmwcwn7k6bkl5c0jnxffc4ax";
+    rev = version;
+    sha256 = "sha256-rgaFhJvmA1RVDL4+vQLMC0GrdlgUlvJeZ5/JJ67C20Q=";
   };
 
-  nativeBuildInputs = [ cmake pkgconfig makeWrapper ];
+  nativeBuildInputs = [ cmake pkg-config 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";
-    })
+  buildInputs = [
+    db fuse asciidoc libxml2 libxslt docbook_xml_dtd_412 docbook_xsl
+    zlib boost judy pam spdlog fmt python3 systemdMinimal
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://lizardfs.com";
     description = "A highly reliable, scalable and efficient distributed file system";
     platforms = platforms.linux;
     license = licenses.gpl3;
-    maintainers = [ maintainers.rushmorem ];
+    maintainers = with maintainers; [ rushmorem shamilton ];
+    # 'fprintf' was not declared in this scope
+    broken = true;
   };
 }
diff --git a/pkgs/tools/filesystems/mergerfs/default.nix b/pkgs/tools/filesystems/mergerfs/default.nix
index a7c9421f46a..6f0a40d76af 100644
--- a/pkgs/tools/filesystems/mergerfs/default.nix
+++ b/pkgs/tools/filesystems/mergerfs/default.nix
@@ -1,26 +1,29 @@
-{ stdenv, fetchFromGitHub, automake, autoconf, pkgconfig, gettext, libtool, pandoc, which, attr, libiconv }:
+{ lib, stdenv, fetchFromGitHub, automake, autoconf, pkg-config, gettext, libtool, pandoc, which, attr, libiconv }:
 
 stdenv.mkDerivation rec {
   pname = "mergerfs";
-  version = "2.28.3";
+  version = "2.32.4";
 
   src = fetchFromGitHub {
     owner = "trapexit";
     repo = pname;
     rev = version;
-    sha256 = "1w6p3svc2yknp6swqg8lax6n9b31lyplb3j7r8nv14hbq4hymylx";
+    sha256 = "sha256-VTnAAJWya1JLZA0gjzpUsdnO5XQP8sJzEP8qHBH+t5k=";
   };
 
   nativeBuildInputs = [
-    automake autoconf pkgconfig gettext libtool pandoc which
+    automake autoconf pkg-config gettext libtool pandoc which
   ];
+  prePatch = ''
+    sed -i -e '/chown/d' -e '/chmod/d' libfuse/Makefile
+  '';
   buildInputs = [ attr libiconv ];
 
   preConfigure = ''
     echo "${version}" > VERSION
   '';
 
-  makeFlags = [ "PREFIX=${placeholder "out"}" "XATTR_AVAILABLE=1" ];
+  makeFlags = [ "DESTDIR=${placeholder "out"}" "XATTR_AVAILABLE=1" "PREFIX=/" "SBINDIR=/bin" ];
   enableParallelBuilding = true;
 
   postFixup = ''
@@ -31,8 +34,8 @@ stdenv.mkDerivation rec {
   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 ];
+    license = lib.licenses.isc;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ jfrankenau makefu ];
   };
 }
diff --git a/pkgs/tools/filesystems/mergerfs/tools.nix b/pkgs/tools/filesystems/mergerfs/tools.nix
index 44337cf1161..e559fd9d4cd 100644
--- a/pkgs/tools/filesystems/mergerfs/tools.nix
+++ b/pkgs/tools/filesystems/mergerfs/tools.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, coreutils, makeWrapper
+{ lib, stdenv, fetchFromGitHub, coreutils, makeWrapper
 , rsync, python3, pythonPackages }:
 
 stdenv.mkDerivation rec {
@@ -20,13 +20,13 @@ stdenv.mkDerivation rec {
     "PREFIX=${placeholder "out"}"
   ];
 
-  postInstall = with stdenv.lib; ''
+  postInstall = with 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; {
+  meta = with lib; {
     description = "Optional tools to help manage data in a mergerfs pool";
     homepage = "https://github.com/trapexit/mergerfs-tools";
     license = licenses.isc;
diff --git a/pkgs/tools/filesystems/mhddfs/default.nix b/pkgs/tools/filesystems/mhddfs/default.nix
index 94aa07b1043..3a0d0ab2f65 100644
--- a/pkgs/tools/filesystems/mhddfs/default.nix
+++ b/pkgs/tools/filesystems/mhddfs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fuse, pkgconfig, attr, uthash }:
+{ lib, stdenv, fetchurl, fuse, pkg-config, attr, uthash }:
 
 stdenv.mkDerivation rec {
   pname = "mhddfs";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "14ggmh91vv69fp2qpz0nxp0hprlw2wsijss2k2485hb0ci4cabvh";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ fuse attr uthash ];
 
   patches = [
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
   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 ];
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.makefu ];
   };
 }
diff --git a/pkgs/tools/filesystems/mkspiffs/default.nix b/pkgs/tools/filesystems/mkspiffs/default.nix
index 086791de787..30312ec7dc7 100644
--- a/pkgs/tools/filesystems/mkspiffs/default.nix
+++ b/pkgs/tools/filesystems/mkspiffs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, git }:
+{ lib, 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.
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     cp mkspiffs $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tool to build and unpack SPIFFS images";
     license = licenses.mit;
     homepage = "https://github.com/igrr/mkspiffs";
diff --git a/pkgs/tools/filesystems/moosefs/default.nix b/pkgs/tools/filesystems/moosefs/default.nix
index df3dd661d75..ee0d5eedc92 100644
--- a/pkgs/tools/filesystems/moosefs/default.nix
+++ b/pkgs/tools/filesystems/moosefs/default.nix
@@ -1,39 +1,53 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , makeWrapper
 , python
 , fuse
-, pkgconfig
+, pkg-config
 , libpcap
 , zlib
 }:
 
 stdenv.mkDerivation rec {
   pname = "moosefs";
-  version = "3.0.114";
+  version = "3.0.115";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "v${version}";
-    sha256 = "0bilrzzlg599xy21cm7r0xb2sanngr74j3z03xgybcm10kl97i7j";
+    sha256 = "0dap9dqwwx8adma6arxg015riqc86cmjv2m44hk0kz7s24h79ipq";
   };
 
-  nativeBuildInputs = [ pkgconfig makeWrapper ];
+  nativeBuildInputs = [ pkg-config makeWrapper ];
 
   buildInputs =
-    [ fuse libpcap zlib ];
+    [ fuse libpcap zlib python ];
+
+  buildFlags = lib.optionals stdenv.isDarwin [ "CPPFLAGS=-UHAVE_STRUCT_STAT_ST_BIRTHTIME" ];
+
+  # Fix the build on macOS with macFUSE installed
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace configure --replace \
+      "/usr/local/lib/pkgconfig" "/nonexistent"
+  '';
+
+  preBuild = lib.optional stdenv.isDarwin ''
+    substituteInPlace config.h --replace \
+      "#define HAVE_STRUCT_STAT_ST_BIRTHTIME 1" \
+      "#undef HAVE_STRUCT_STAT_ST_BIRTHTIME"
+  '';
 
   postInstall = ''
     substituteInPlace $out/sbin/mfscgiserv --replace "datapath=\"$out" "datapath=\""
-    wrapProgram $out/sbin/mfscgiserv \
-        --prefix PATH ":" "${python}/bin"
   '';
 
-  meta = with stdenv.lib; {
+  doCheck = true;
+
+  meta = with lib; {
     homepage = "https://moosefs.com";
     description = "Open Source, Petabyte, Fault-Tolerant, Highly Performing, Scalable Network Distributed File System";
-    platforms = platforms.linux;
+    platforms = platforms.unix;
     license = licenses.gpl2;
     maintainers = [ maintainers.mfossen ];
   };
diff --git a/pkgs/tools/filesystems/mp3fs/default.nix b/pkgs/tools/filesystems/mp3fs/default.nix
index 9675f44583a..1b80adc843a 100644
--- a/pkgs/tools/filesystems/mp3fs/default.nix
+++ b/pkgs/tools/filesystems/mp3fs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, flac, fuse, lame, libid3tag, pkgconfig }:
+{ lib, stdenv, fetchurl, flac, fuse, lame, libid3tag, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "mp3fs";
@@ -12,11 +12,11 @@ stdenv.mkDerivation rec {
   patches = [ ./fix-statfs-operation.patch ];
 
   buildInputs = [ flac fuse lame libid3tag ];
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "FUSE file system that transparently transcodes to MP3";
     longDescription = ''
       A read-only FUSE filesystem which transcodes between audio formats
@@ -27,6 +27,6 @@ stdenv.mkDerivation rec {
     '';
     homepage = "https://khenriks.github.io/mp3fs/";
     license = licenses.gpl3Plus;
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/filesystems/mtdutils/default.nix b/pkgs/tools/filesystems/mtdutils/default.nix
index 3b355c92226..cb40e72c30b 100644
--- a/pkgs/tools/filesystems/mtdutils/default.nix
+++ b/pkgs/tools/filesystems/mtdutils/default.nix
@@ -1,30 +1,29 @@
-{ stdenv, fetchurl, autoreconfHook, pkgconfig, cmocka, acl, libuuid, lzo, zlib, zstd }:
+{ lib, stdenv, fetchurl, autoreconfHook, pkg-config, cmocka, acl, libuuid, lzo, zlib, zstd }:
 
 stdenv.mkDerivation rec {
   pname = "mtd-utils";
-  version = "2.1.1";
+  version = "2.1.2";
 
   src = fetchurl {
     url = "ftp://ftp.infradead.org/pub/${pname}/${pname}-${version}.tar.bz2";
-    sha256 = "1lijl89l7hljx8xx70vrz9srd3h41v5gh4b0lvqnlv831yvyh5cd";
+    sha256 = "sha256-itTF80cW1AZGqihySi9WFtMlpvEZJU+RTiaXbx926dY=";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ] ++ stdenv.lib.optional doCheck cmocka;
+  nativeBuildInputs = [ autoreconfHook pkg-config ] ++ lib.optional doCheck cmocka;
   buildInputs = [ acl libuuid lzo zlib zstd ];
 
-  configureFlags = [
-    (stdenv.lib.enableFeature doCheck "unit-tests")
-    (stdenv.lib.enableFeature doCheck "tests")
+  configureFlags = with lib; [
+    (enableFeature doCheck "unit-tests")
+    (enableFeature doCheck "tests")
   ];
-  enableParallelBuilding = true;
 
   doCheck = stdenv.hostPlatform == stdenv.buildPlatform;
 
-  meta = {
+  meta = with lib; {
     description = "Tools for MTD filesystems";
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = licenses.gpl2Plus;
     homepage = "http://www.linux-mtd.infradead.org/";
-    maintainers = with stdenv.lib.maintainers; [ viric ];
-    platforms = with stdenv.lib.platforms; linux;
+    maintainers = with maintainers; [ viric superherointj ];
+    platforms = with platforms; linux;
   };
 }
diff --git a/pkgs/tools/filesystems/mtools/default.nix b/pkgs/tools/filesystems/mtools/default.nix
index 58bd9340c5b..f82b008e41d 100644
--- a/pkgs/tools/filesystems/mtools/default.nix
+++ b/pkgs/tools/filesystems/mtools/default.nix
@@ -1,21 +1,22 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
-  name = "mtools-4.0.24";
+  pname = "mtools";
+  version = "4.0.33";
 
   src = fetchurl {
-    url = "mirror://gnu/mtools/${name}.tar.bz2";
-    sha256 = "1f9g7g8zspp8nvg1nz869il9pvxpdpchqd0vxfc89y8rjbda5x14";
+    url = "mirror://gnu/mtools/${pname}-${version}.tar.bz2";
+    sha256 = "0m5rx8djvg4jfvdgs4dxjkfd2na55wkdpid9xa32yc103s70zc8w";
   };
 
-  patches = stdenv.lib.optional stdenv.isDarwin ./UNUSED-darwin.patch;
+  patches = lib.optional stdenv.isDarwin ./UNUSED-darwin.patch;
 
   # fails to find X on darwin
-  configureFlags = stdenv.lib.optional stdenv.isDarwin "--without-x";
+  configureFlags = lib.optional stdenv.isDarwin "--without-x";
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.gnu.org/software/mtools/";
     description = "Utilities to access MS-DOS disks";
     platforms = platforms.unix;
diff --git a/pkgs/tools/filesystems/mtpfs/default.nix b/pkgs/tools/filesystems/mtpfs/default.nix
index bede0e5fca0..e0b1cffe4dd 100644
--- a/pkgs/tools/filesystems/mtpfs/default.nix
+++ b/pkgs/tools/filesystems/mtpfs/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchurl, pkgconfig, fuse, libmtp, glib, libmad, libid3tag }:
+{ lib, stdenv, fetchurl, pkg-config, fuse, libmtp, glib, libmad, libid3tag }:
 
 stdenv.mkDerivation rec {
   name = "mtpfs-1.1";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ fuse libmtp glib libid3tag libmad ];
 
   # adding LIBS is a hack, duno why it does not find libid3tag.so by adding buildInputs
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     sha256 = "07acrqb17kpif2xcsqfqh5j4axvsa4rnh6xwnpqab5b9w5ykbbqv";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/cjd/mtpfs";
     description = "FUSE Filesystem providing access to MTP devices";
     platforms = platforms.all;
diff --git a/pkgs/tools/filesystems/netatalk/default.nix b/pkgs/tools/filesystems/netatalk/default.nix
index f7732cd76fd..486963f44b9 100644
--- a/pkgs/tools/filesystems/netatalk/default.nix
+++ b/pkgs/tools/filesystems/netatalk/default.nix
@@ -1,6 +1,6 @@
-{ fetchurl, stdenv, autoreconfHook, pkgconfig, perl, python
+{ fetchurl, lib, stdenv, autoreconfHook, pkg-config, perl, python
 , db, libgcrypt, avahi, libiconv, pam, openssl, acl
-, ed, glibc, libevent
+, ed, libtirpc, libevent
 }:
 
 stdenv.mkDerivation rec {
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
     ./omitLocalstatedirCreation.patch
   ];
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig perl python python.pkgs.wrapPython ];
+  nativeBuildInputs = [ autoreconfHook pkg-config perl python python.pkgs.wrapPython ];
 
   buildInputs = [ db libgcrypt avahi libiconv pam openssl acl libevent ];
 
@@ -38,7 +38,7 @@ stdenv.mkDerivation rec {
     /^afpd_LDADD
     /am__append_2
     a
-      ${glibc.static}/lib/librpcsvc.a \\
+      ${libtirpc}/lib/libtirpc.so \\
     .
     w
     EOF
@@ -54,8 +54,8 @@ stdenv.mkDerivation rec {
   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 ];
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ jcumming ];
   };
 }
diff --git a/pkgs/tools/filesystems/nilfs-utils/default.nix b/pkgs/tools/filesystems/nilfs-utils/default.nix
index dd8116ff401..0639c6a6f21 100644
--- a/pkgs/tools/filesystems/nilfs-utils/default.nix
+++ b/pkgs/tools/filesystems/nilfs-utils/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, libuuid, libselinux }:
+{ lib, stdenv, fetchurl, fetchpatch, libuuid, libselinux }:
 let
   sourceInfo = rec {
     version = "2.2.7";
@@ -37,7 +37,7 @@ stdenv.mkDerivation {
 
   configureFlags = [
     "--with-libmount"
-  ] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+  ] ++ 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"
@@ -52,7 +52,7 @@ stdenv.mkDerivation {
     find . -name .libs | xargs rm -rf
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "NILFS utilities";
     maintainers = [ maintainers.raskin ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/filesystems/nixpart/0.4/blivet.nix b/pkgs/tools/filesystems/nixpart/0.4/blivet.nix
index b05abd72bac..94ed258d332 100644
--- a/pkgs/tools/filesystems/nixpart/0.4/blivet.nix
+++ b/pkgs/tools/filesystems/nixpart/0.4/blivet.nix
@@ -1,7 +1,7 @@
 # FIXME: Unify with pkgs/development/python-modules/blivet/default.nix.
 
-{ stdenv, fetchurl, buildPythonApplication, pykickstart, pyparted, pyblock
-, libselinux, cryptsetup, multipath_tools, lsof, utillinux
+{ lib, fetchurl, buildPythonApplication, pykickstart, pyparted, pyblock
+, libselinux, cryptsetup, multipath_tools, lsof, util-linux
 , useNixUdev ? true, systemd ? null
 # useNixUdev is here for bw compatibility
 }:
@@ -24,24 +24,24 @@ buildPythonApplication rec {
     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|wipefs|${util-linux.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 -r -e 's|"(u?mount)"|"${util-linux.bin}/bin/\1"|' blivet/util.py
     sed -i -e '/find_library/,/find_library/ {
-      c libudev = "${systemd.lib}/lib/libudev.so.1"
+      c libudev = "${lib.getLib systemd}/lib/libudev.so.1"
     }' blivet/pyudev.py
   '';
 
   propagatedBuildInputs = [
     pykickstart pyparted pyblock libselinux cryptsetup
-  ] ++ stdenv.lib.optional useNixUdev systemd;
+  ] ++ lib.optional useNixUdev systemd;
 
   # tests are currently _heavily_ broken upstream
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://fedoraproject.org/wiki/Blivet";
     description = "Module for management of a system's storage configuration";
     license = with licenses; [ gpl2Plus lgpl21Plus ];
diff --git a/pkgs/tools/filesystems/nixpart/0.4/cryptsetup.nix b/pkgs/tools/filesystems/nixpart/0.4/cryptsetup.nix
index 88a1716a0e1..6e372b75a7d 100644
--- a/pkgs/tools/filesystems/nixpart/0.4/cryptsetup.nix
+++ b/pkgs/tools/filesystems/nixpart/0.4/cryptsetup.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, lvm2, libgcrypt, libuuid, pkgconfig, popt
+{ lib, stdenv, fetchurl, fetchpatch, lvm2, libgcrypt, libuuid, pkg-config, popt
 , enablePython ? true, python ? null
 }:
 
@@ -22,17 +22,17 @@ stdenv.mkDerivation rec {
   ];
 
   configureFlags = [ "--enable-cryptsetup-reencrypt" ]
-                ++ stdenv.lib.optional enablePython "--enable-python";
+                ++ lib.optional enablePython "--enable-python";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ lvm2 libgcrypt libuuid popt ]
-             ++ stdenv.lib.optional enablePython python;
+             ++ lib.optional enablePython python;
 
-  meta = {
+  meta = with lib; {
     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;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ];
+    platforms = with platforms; linux;
   };
 }
diff --git a/pkgs/tools/filesystems/nixpart/0.4/default.nix b/pkgs/tools/filesystems/nixpart/0.4/default.nix
index 1f672701d38..7b773a61a5f 100644
--- a/pkgs/tools/filesystems/nixpart/0.4/default.nix
+++ b/pkgs/tools/filesystems/nixpart/0.4/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, python, buildPythonApplication
+{ lib, stdenv, fetchurl, python, buildPythonApplication
 , libselinux
 # Propagated to blivet
 , useNixUdev ? true
@@ -10,47 +10,47 @@
 
 let
   blivet = import ./blivet.nix {
-    inherit stdenv fetchurl buildPythonApplication;
+    inherit lib fetchurl buildPythonApplication;
     inherit pykickstart pyparted pyblock cryptsetup libselinux multipath_tools;
     inherit useNixUdev;
-    inherit (pkgs) lsof utillinux systemd;
+    inherit (pkgs) lsof util-linux systemd;
   };
 
   cryptsetup = import ./cryptsetup.nix {
-    inherit stdenv fetchurl python;
-    inherit (pkgs) fetchpatch pkgconfig libgcrypt libuuid popt lvm2;
+    inherit lib stdenv fetchurl python;
+    inherit (pkgs) fetchpatch pkg-config libgcrypt libuuid popt lvm2;
   };
 
   dmraid = import ./dmraid.nix {
-    inherit stdenv fetchurl lvm2;
+    inherit lib stdenv fetchurl lvm2;
   };
 
   lvm2 = import ./lvm2.nix {
-    inherit stdenv fetchurl;
-    inherit (pkgs) fetchpatch pkgconfig utillinux systemd coreutils;
+    inherit lib stdenv fetchurl;
+    inherit (pkgs) fetchpatch pkg-config util-linux systemd coreutils;
   };
 
   multipath_tools = import ./multipath-tools.nix {
-    inherit stdenv fetchurl lvm2;
+    inherit lib stdenv fetchurl lvm2;
     inherit (pkgs) fetchpatch readline systemd libaio gzip;
   };
 
   parted = import ./parted.nix {
-    inherit stdenv fetchurl;
-    inherit (pkgs) fetchpatch utillinux readline libuuid gettext check lvm2;
+    inherit lib stdenv fetchurl;
+    inherit (pkgs) fetchpatch util-linux readline libuuid gettext check lvm2;
   };
 
   pyblock = import ./pyblock.nix {
-    inherit stdenv fetchurl python lvm2 dmraid;
+    inherit lib stdenv fetchurl python lvm2 dmraid;
   };
 
   pykickstart = import ./pykickstart.nix {
-    inherit stdenv fetchurl python buildPythonApplication urlgrabber;
+    inherit lib fetchurl python buildPythonApplication urlgrabber;
   };
 
   pyparted = import ./pyparted.nix {
-    inherit stdenv fetchurl python buildPythonApplication parted;
-    inherit (pkgs) pkgconfig e2fsprogs;
+    inherit lib stdenv fetchurl python buildPythonApplication parted;
+    inherit (pkgs) pkg-config e2fsprogs;
   };
 
 in buildPythonApplication rec {
@@ -67,7 +67,7 @@ in buildPythonApplication rec {
 
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "NixOS storage manager/partitioner";
     homepage = "https://github.com/NixOS/nixpart";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/filesystems/nixpart/0.4/dmraid.nix b/pkgs/tools/filesystems/nixpart/0.4/dmraid.nix
index fd608889102..c5d8eebc47c 100644
--- a/pkgs/tools/filesystems/nixpart/0.4/dmraid.nix
+++ b/pkgs/tools/filesystems/nixpart/0.4/dmraid.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, lvm2 }:
+{ lib, stdenv, fetchurl, lvm2 }:
 
 stdenv.mkDerivation rec {
   name = "dmraid-1.0.0.rc15";
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ lvm2 ];
 
-  meta = {
+  meta = with lib; {
     description = "Old-style RAID configuration utility";
     longDescription = ''
       Old RAID configuration utility (still under development, though).
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
       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;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/filesystems/nixpart/0.4/lvm2.nix b/pkgs/tools/filesystems/nixpart/0.4/lvm2.nix
index fc0005a14d4..ca349c7f42e 100644
--- a/pkgs/tools/filesystems/nixpart/0.4/lvm2.nix
+++ b/pkgs/tools/filesystems/nixpart/0.4/lvm2.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, pkgconfig, systemd, utillinux, coreutils }:
+{ lib, stdenv, fetchurl, fetchpatch, pkg-config, systemd, util-linux, coreutils }:
 
 let
   v = "2.02.106";
@@ -28,11 +28,11 @@ stdenv.mkDerivation {
     "--disable-readline"
     "--enable-udev_rules"
     "--enable-udev_sync"
-    "--enable-pkgconfig"
+    "--enable-pkg-config"
     "--enable-applib"
   ];
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ systemd ];
 
   preConfigure =
@@ -60,7 +60,7 @@ stdenv.mkDerivation {
   postInstall =
     ''
       substituteInPlace $out/lib/udev/rules.d/13-dm-disk.rules \
-        --replace $out/sbin/blkid ${utillinux.bin}/sbin/blkid
+        --replace $out/sbin/blkid ${util-linux.bin}/sbin/blkid
 
       # Systemd stuff
       mkdir -p $out/etc/systemd/system $out/lib/systemd/system-generators
@@ -68,9 +68,9 @@ stdenv.mkDerivation {
       cp scripts/lvm2_activation_generator_systemd_red_hat $out/lib/systemd/system-generators
     '';
 
-  meta = {
+  meta = with lib; {
     homepage = "http://sourceware.org/lvm2/";
     description = "Tools to support Logical Volume Management (LVM) on Linux";
-    platforms = stdenv.lib.platforms.linux;
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/filesystems/nixpart/0.4/multipath-tools.nix b/pkgs/tools/filesystems/nixpart/0.4/multipath-tools.nix
index ffed57e6345..976a3ce2567 100644
--- a/pkgs/tools/filesystems/nixpart/0.4/multipath-tools.nix
+++ b/pkgs/tools/filesystems/nixpart/0.4/multipath-tools.nix
@@ -1,6 +1,6 @@
 # FIXME: unify with pkgs/os-specific/linux/multipath-tools/default.nix.
 
-{ stdenv, fetchurl, fetchpatch, lvm2, libaio, gzip, readline, systemd }:
+{ lib, stdenv, fetchurl, fetchpatch, lvm2, libaio, gzip, readline, systemd }:
 
 stdenv.mkDerivation rec {
   name = "multipath-tools-0.4.9";
@@ -36,8 +36,8 @@ stdenv.mkDerivation rec {
       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
+      substituteInPlace libmultipath/defaults.h --replace /lib/udev/scsi_id ${lib.getLib systemd}/lib/udev/scsi_id
+      substituteInPlace libmultipath/hwtable.c --replace /lib/udev/scsi_id ${lib.getLib systemd}/lib/udev/scsi_id
 
       sed -i -re '
          s,^( *#define +DEFAULT_MULTIPATHDIR\>).*,\1 "'"$out/lib/multipath"'",
@@ -45,9 +45,9 @@ stdenv.mkDerivation rec {
 
     '';
 
-  meta = {
+  meta = with lib; {
     description = "Tools for the Linux multipathing driver";
     homepage = "http://christophe.varoqui.free.fr/";
-    platforms = stdenv.lib.platforms.linux;
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/filesystems/nixpart/0.4/parted.nix b/pkgs/tools/filesystems/nixpart/0.4/parted.nix
index 16f3a57ea14..2891f990afb 100644
--- a/pkgs/tools/filesystems/nixpart/0.4/parted.nix
+++ b/pkgs/tools/filesystems/nixpart/0.4/parted.nix
@@ -1,5 +1,7 @@
-{ stdenv, fetchurl, fetchpatch, lvm2, libuuid, gettext, readline
-, utillinux, check, enableStatic ? false }:
+{ lib,stdenv, fetchurl, fetchpatch, lvm2, libuuid, gettext, readline
+, util-linux, check
+, enableStatic ? stdenv.hostPlatform.isStatic
+}:
 
 stdenv.mkDerivation rec {
   name = "parted-3.1";
@@ -19,21 +21,21 @@ stdenv.mkDerivation rec {
   ];
 
   buildInputs = [ libuuid ]
-    ++ stdenv.lib.optional (readline != null) readline
-    ++ stdenv.lib.optional (gettext != null) gettext
-    ++ stdenv.lib.optional (lvm2 != null) lvm2;
+    ++ lib.optional (readline != null) readline
+    ++ lib.optional (gettext != null) gettext
+    ++ 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";
+    ++ lib.optional (lvm2 == null) "--disable-device-mapper"
+    ++ lib.optional enableStatic "--enable-static";
 
   doCheck = true;
-  checkInputs = [ check utillinux ];
+  checkInputs = [ check util-linux ];
 
-  meta = {
+  meta = with lib; {
     description = "Create, destroy, resize, check, and copy partitions";
 
     longDescription = ''
@@ -47,13 +49,13 @@ stdenv.mkDerivation rec {
     '';
 
     homepage = "https://www.gnu.org/software/parted/";
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = licenses.gpl3Plus;
 
     maintainers = [
       # Add your name here!
     ];
 
     # GNU Parted requires libuuid, which is part of util-linux-ng.
-    platforms = stdenv.lib.platforms.linux;
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/filesystems/nixpart/0.4/pyblock.nix b/pkgs/tools/filesystems/nixpart/0.4/pyblock.nix
index f087edd853d..ddf260300fb 100644
--- a/pkgs/tools/filesystems/nixpart/0.4/pyblock.nix
+++ b/pkgs/tools/filesystems/nixpart/0.4/pyblock.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, python, lvm2, dmraid }:
+{ lib, stdenv, fetchurl, python, lvm2, dmraid }:
 
 stdenv.mkDerivation rec {
   pname = "pyblock";
@@ -29,8 +29,8 @@ stdenv.mkDerivation rec {
     "SITELIB=$(out)/lib/${python.libPrefix}/site-packages"
   ];
 
-  meta = {
+  meta = with lib; {
     description = "Interface for working with block devices";
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = licenses.gpl2Plus;
   };
 }
diff --git a/pkgs/tools/filesystems/nixpart/0.4/pykickstart.nix b/pkgs/tools/filesystems/nixpart/0.4/pykickstart.nix
index 0698dcd9ecb..092db8ee7c4 100644
--- a/pkgs/tools/filesystems/nixpart/0.4/pykickstart.nix
+++ b/pkgs/tools/filesystems/nixpart/0.4/pykickstart.nix
@@ -1,4 +1,4 @@
-{ stdenv, python, buildPythonApplication, fetchurl, urlgrabber }:
+{ lib, python, buildPythonApplication, fetchurl, urlgrabber }:
 
 buildPythonApplication rec {
   pname = "pykickstart";
@@ -22,9 +22,9 @@ buildPythonApplication rec {
     ${python}/bin/${python.executable} tests/baseclass.py -vv
   '';
 
-  meta = {
+  meta = with lib; {
     homepage = "http://fedoraproject.org/wiki/Pykickstart";
     description = "Read and write Fedora kickstart files";
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = licenses.gpl2Plus;
   };
 }
diff --git a/pkgs/tools/filesystems/nixpart/0.4/pyparted.nix b/pkgs/tools/filesystems/nixpart/0.4/pyparted.nix
index f71e7c3a06d..9d1eff2bab7 100644
--- a/pkgs/tools/filesystems/nixpart/0.4/pyparted.nix
+++ b/pkgs/tools/filesystems/nixpart/0.4/pyparted.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, python, buildPythonApplication, parted, e2fsprogs }:
+{ lib, stdenv, fetchurl, pkg-config, python, buildPythonApplication, parted, e2fsprogs }:
 
 buildPythonApplication rec {
   pname = "pyparted";
@@ -14,7 +14,7 @@ buildPythonApplication rec {
     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 ''
+  '' + 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
@@ -24,7 +24,7 @@ buildPythonApplication rec {
     PATH="${parted}/sbin:$PATH"
   '';
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   propagatedBuildInputs = [ parted ];
 
@@ -33,10 +33,10 @@ buildPythonApplication rec {
     make test PYTHON=${python.executable}
   '';
 
-  meta = {
+  meta = with lib; {
     homepage = "https://fedorahosted.org/pyparted/";
     description = "Python interface for libparted";
-    license = stdenv.lib.licenses.gpl2Plus;
-    platforms = stdenv.lib.platforms.linux;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/filesystems/nixpart/default.nix b/pkgs/tools/filesystems/nixpart/default.nix
index 809c5256873..80ae8ca2b3c 100644
--- a/pkgs/tools/filesystems/nixpart/default.nix
+++ b/pkgs/tools/filesystems/nixpart/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, buildPythonApplication, blivet }:
+{ lib, fetchurl, buildPythonApplication, blivet }:
 
 buildPythonApplication rec {
   pname = "nixpart";
@@ -13,8 +13,8 @@ buildPythonApplication rec {
 
   meta = {
     description = "NixOS storage manager/partitioner";
-    license = stdenv.lib.licenses.gpl2Plus;
-    maintainers = [ stdenv.lib.maintainers.aszlig ];
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.gpl2Plus;
+    maintainers = [ lib.maintainers.aszlig ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/filesystems/ntfs-3g/default.nix b/pkgs/tools/filesystems/ntfs-3g/default.nix
index abe171170d4..89ef27827a1 100644
--- a/pkgs/tools/filesystems/ntfs-3g/default.nix
+++ b/pkgs/tools/filesystems/ntfs-3g/default.nix
@@ -1,5 +1,7 @@
-{stdenv, fetchurl, utillinux, libuuid
-, crypto ? false, libgcrypt, gnutls, pkgconfig}:
+{ lib, stdenv, fetchurl, pkg-config, mount, libuuid
+, macfuse-stubs, DiskArbitration
+, crypto ? false, libgcrypt, gnutls
+}:
 
 stdenv.mkDerivation rec {
   pname = "ntfs3g";
@@ -7,8 +9,9 @@ stdenv.mkDerivation rec {
 
   outputs = [ "out" "dev" "man" "doc" ];
 
-  buildInputs = [ libuuid ] ++ stdenv.lib.optionals crypto [ gnutls libgcrypt ];
-  nativeBuildInputs = stdenv.lib.optional crypto pkgconfig;
+  buildInputs = [ libuuid ] ++ lib.optionals crypto [ gnutls libgcrypt ]
+    ++ lib.optionals stdenv.isDarwin [ macfuse-stubs DiskArbitration ];
+  nativeBuildInputs = [ pkg-config ];
 
   src = fetchurl {
     url = "https://tuxera.com/opensource/ntfs-3g_ntfsprogs-${version}.tgz";
@@ -19,8 +22,8 @@ stdenv.mkDerivation rec {
     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
+      --replace /bin/mount ${mount}/bin/mount \
+      --replace /bin/umount ${mount}/bin/umount
   '';
 
   configureFlags = [
@@ -39,11 +42,14 @@ stdenv.mkDerivation rec {
       ln -sv mount.ntfs-3g $out/sbin/mount.ntfs
     '';
 
-  meta = with stdenv.lib; {
+  meta = with 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+
+    platforms = with platforms; darwin ++ linux;
+    license = with licenses; [
+      gpl2Plus # ntfs-3g itself
+      lgpl2Plus # fuse-lite
+    ];
   };
 }
diff --git a/pkgs/tools/filesystems/orangefs/default.nix b/pkgs/tools/filesystems/orangefs/default.nix
index 37f4026799b..f6a35437fb9 100644
--- a/pkgs/tools/filesystems/orangefs/default.nix
+++ b/pkgs/tools/filesystems/orangefs/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchurl, bison, flex, autoreconfHook
+{ lib, stdenv, fetchurl, bison, flex, autoreconfHook
 , openssl, db, attr, perl, tcsh
 } :
 
 stdenv.mkDerivation rec {
   pname = "orangefs";
-  version = "2.9.7";
+  version = "2.9.8";
 
   src = fetchurl {
     url = "http://download.orangefs.org/current/source/orangefs-${version}.tar.gz";
-    sha256 = "15669f5rcvn44wkas0mld0qmyclrmhbrw4bbbp66sw3a12vgn4sm";
+    sha256 = "0c2yla615j04ygclfavh8g5miqhbml2r0zs2c5mvkacf9in7p7sq";
   };
 
   nativeBuildInputs = [ bison flex perl autoreconfHook ];
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
     "--sysconfdir=/etc/orangefs"
     "--enable-shared"
     "--enable-fast"
-    "--with-ssl=${stdenv.lib.getDev openssl}"
+    "--with-ssl=${lib.getDev openssl}"
   ];
 
 
@@ -51,7 +51,7 @@ stdenv.mkDerivation rec {
     sed -i 's:openssl:${openssl}/bin/openssl:' $out/bin/pvfs2-gen-keys.sh
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/filesystems/rar2fs/default.nix b/pkgs/tools/filesystems/rar2fs/default.nix
index 81cd1191b0b..19db209cbf9 100644
--- a/pkgs/tools/filesystems/rar2fs/default.nix
+++ b/pkgs/tools/filesystems/rar2fs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , autoreconfHook
 , fuse
@@ -7,13 +7,13 @@
 
 stdenv.mkDerivation rec {
   pname = "rar2fs";
-  version = "1.29.0";
+  version = "1.29.5";
 
   src = fetchFromGitHub {
     owner = "hasse69";
     repo = pname;
     rev = "v${version}";
-    sha256 = "137hv2fhlbdca6qyf4vjv1sl87g02zn137ja0fdjbzcc9y1n96d3";
+    sha256 = "sha256-x3QBnnwt9pXT0egOJ2rnUcZP99y9eVcw3rNTkdH2LYs=";
   };
 
   postPatch = ''
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
     "--disable-static-unrar"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "FUSE file system for reading RAR archives";
     homepage = "https://hasse69.github.io/rar2fs/";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/filesystems/rdfind/default.nix b/pkgs/tools/filesystems/rdfind/default.nix
index 54cb54b1df4..08562aed363 100644
--- a/pkgs/tools/filesystems/rdfind/default.nix
+++ b/pkgs/tools/filesystems/rdfind/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, nettle }:
+{ lib, stdenv, fetchurl, nettle }:
 
 stdenv.mkDerivation rec {
   pname = "rdfind";
@@ -11,10 +11,10 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ nettle ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://rdfind.pauldreik.se/";
     description = "Removes or hardlinks duplicate files very swiftly";
-    license = stdenv.lib.licenses.gpl2;
+    license = lib.licenses.gpl2;
     maintainers = [ maintainers.wmertens ];
     platforms = platforms.all;
   };
diff --git a/pkgs/tools/filesystems/reiser4progs/default.nix b/pkgs/tools/filesystems/reiser4progs/default.nix
index 896d472b832..f833d562972 100644
--- a/pkgs/tools/filesystems/reiser4progs/default.nix
+++ b/pkgs/tools/filesystems/reiser4progs/default.nix
@@ -1,13 +1,12 @@
-{stdenv, fetchurl, libaal}:
+{lib, stdenv, fetchurl, libaal}:
 
-let version = "2.0.0"; in
 stdenv.mkDerivation rec {
   pname = "reiser4progs";
-  inherit version;
+  version = "2.0.4";
 
   src = fetchurl {
     url = "mirror://sourceforge/reiser4/reiser4-utils/${pname}-${version}.tar.gz";
-    sha256 = "00kx9prz3d5plp1hn4xdkkd99cw42sanlsjnjhj0fsrlmi9yfs8n";
+    sha256 = "sha256-WmIkISnRp5BngSfPEKY95HVEt5TBtPKu+RMBwlLsnuA=";
   };
 
   buildInputs = [libaal];
@@ -22,7 +21,7 @@ stdenv.mkDerivation rec {
     substituteInPlace Makefile --replace ./run-ldconfig true
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit version;
     homepage = "https://sourceforge.net/projects/reiser4/";
     description = "Reiser4 utilities";
diff --git a/pkgs/tools/filesystems/reiserfsprogs/default.nix b/pkgs/tools/filesystems/reiserfsprogs/default.nix
index daafdbf231f..c6583410ff3 100644
--- a/pkgs/tools/filesystems/reiserfsprogs/default.nix
+++ b/pkgs/tools/filesystems/reiserfsprogs/default.nix
@@ -1,9 +1,8 @@
-{ stdenv, fetchurl, libuuid, autoreconfHook }:
+{ lib, stdenv, fetchurl, libuuid, autoreconfHook }:
 
-let version = "3.6.24"; in
 stdenv.mkDerivation rec {
   pname = "reiserfsprogs";
-  inherit version;
+  version = "3.6.24";
 
   src = fetchurl {
     url = "https://www.kernel.org/pub/linux/kernel/people/jeffm/reiserfsprogs/v${version}/${pname}-${version}.tar.xz";
@@ -20,7 +19,7 @@ stdenv.mkDerivation rec {
     inherit version;
     homepage = "http://www.namesys.com/";
     description = "ReiserFS utilities";
-    license = stdenv.lib.licenses.gpl2;
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/filesystems/rmfuse/default.nix b/pkgs/tools/filesystems/rmfuse/default.nix
new file mode 100644
index 00000000000..b7850f7023f
--- /dev/null
+++ b/pkgs/tools/filesystems/rmfuse/default.nix
@@ -0,0 +1,26 @@
+{ poetry2nix, pkgs, lib }:
+
+let
+  pythonPackages = (poetry2nix.mkPoetryPackages {
+    projectDir = ./.;
+    overrides = [
+      poetry2nix.defaultPoetryOverrides
+      (import ./poetry-git-overlay.nix { inherit pkgs; })
+      (self: super: {
+
+        rmfuse = super.rmfuse.overridePythonAttrs(old: {
+          meta = old.meta // {
+            description = "RMfuse provides access to your reMarkable Cloud files in the form of a FUSE filesystem.";
+            longDescription = ''
+              RMfuse provides access to your reMarkable Cloud files in the form of a FUSE filesystem. These files are exposed either in their original format, or as PDF files that contain your annotations. This lets you manage files in the reMarkable Cloud using the same tools you use on your local system.
+            '';
+            license = lib.licenses.mit;
+            homepage = "https://github.com/rschroll/rmfuse";
+            maintainers = [ lib.maintainers.adisbladis ];
+          };
+        });
+
+      })
+    ];
+  }).python.pkgs;
+in pythonPackages.rmfuse
diff --git a/pkgs/tools/filesystems/rmfuse/poetry-git-overlay.nix b/pkgs/tools/filesystems/rmfuse/poetry-git-overlay.nix
new file mode 100644
index 00000000000..8fa2bc7a010
--- /dev/null
+++ b/pkgs/tools/filesystems/rmfuse/poetry-git-overlay.nix
@@ -0,0 +1,14 @@
+{ pkgs }:
+self: super: {
+
+  rmfuse = super.rmfuse.overridePythonAttrs (
+    _: {
+      src = pkgs.fetchgit {
+        url = "https://github.com/rschroll/rmfuse.git";
+        rev = "fca03bcdd6dc118f2ba981410ec9dff7f7cb88ec";
+        sha256 = "0i7dvvi2bp3hydjpzvr7vg10bx0wxz87spf7pg455aga8d0qhxgk";
+      };
+    }
+  );
+
+}
diff --git a/pkgs/tools/filesystems/rmfuse/poetry.lock b/pkgs/tools/filesystems/rmfuse/poetry.lock
new file mode 100644
index 00000000000..920fbddd0b6
--- /dev/null
+++ b/pkgs/tools/filesystems/rmfuse/poetry.lock
@@ -0,0 +1,548 @@
+[[package]]
+name = "anyio"
+version = "2.2.0"
+description = "High level compatibility layer for multiple asynchronous event loop implementations"
+category = "main"
+optional = false
+python-versions = ">=3.6.2"
+
+[package.dependencies]
+idna = ">=2.8"
+sniffio = ">=1.1"
+
+[package.extras]
+curio = ["curio (>=1.4)"]
+doc = ["sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"]
+test = ["coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "pytest (>=6.0)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"]
+trio = ["trio (>=0.16)"]
+
+[[package]]
+name = "asks"
+version = "2.4.12"
+description = "asks - async http"
+category = "main"
+optional = false
+python-versions = ">= 3.6.2"
+
+[package.dependencies]
+anyio = ">=2.0,<3.0"
+async_generator = "*"
+h11 = "*"
+
+[[package]]
+name = "async-generator"
+version = "1.10"
+description = "Async generators and context managers for Python 3.5+"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
+name = "attrs"
+version = "20.3.0"
+description = "Classes Without Boilerplate"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[package.extras]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"]
+docs = ["furo", "sphinx", "zope.interface"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"]
+
+[[package]]
+name = "bidict"
+version = "0.21.2"
+description = "The bidirectional mapping library for Python."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+coverage = ["coverage (<6)", "pytest-cov (<3)"]
+dev = ["setuptools-scm", "hypothesis (<6)", "py (<2)", "pytest (<7)", "pytest-benchmark (>=3.2.0,<4)", "sortedcollections (<2)", "sortedcontainers (<3)", "Sphinx (<4)", "sphinx-autodoc-typehints (<2)", "coverage (<6)", "pytest-cov (<3)", "pre-commit (<3)", "tox (<4)"]
+docs = ["Sphinx (<4)", "sphinx-autodoc-typehints (<2)"]
+precommit = ["pre-commit (<3)"]
+test = ["hypothesis (<6)", "py (<2)", "pytest (<7)", "pytest-benchmark (>=3.2.0,<4)", "sortedcollections (<2)", "sortedcontainers (<3)", "Sphinx (<4)", "sphinx-autodoc-typehints (<2)"]
+
+[[package]]
+name = "cffi"
+version = "1.14.5"
+description = "Foreign Function Interface for Python calling C code."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+pycparser = "*"
+
+[[package]]
+name = "cssselect2"
+version = "0.4.1"
+description = "cssselect2"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+tinycss2 = "*"
+webencodings = "*"
+
+[package.extras]
+doc = ["sphinx", "sphinx-rtd-theme"]
+test = ["pytest", "pytest-cov", "pytest-flake8", "pytest-isort", "coverage"]
+
+[[package]]
+name = "h11"
+version = "0.12.0"
+description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "idna"
+version = "3.1"
+description = "Internationalized Domain Names in Applications (IDNA)"
+category = "main"
+optional = false
+python-versions = ">=3.4"
+
+[[package]]
+name = "lxml"
+version = "4.6.2"
+description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*"
+
+[package.extras]
+cssselect = ["cssselect (>=0.7)"]
+html5 = ["html5lib"]
+htmlsoup = ["beautifulsoup4"]
+source = ["Cython (>=0.29.7)"]
+
+[[package]]
+name = "outcome"
+version = "1.1.0"
+description = "Capture the outcome of Python function calls."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+attrs = ">=19.2.0"
+
+[[package]]
+name = "pdfrw"
+version = "0.4"
+description = "PDF file reader/writer library"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "pillow"
+version = "8.1.2"
+description = "Python Imaging Library (Fork)"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "pycparser"
+version = "2.20"
+description = "C parser in Python"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "pyfuse3"
+version = "3.2.0"
+description = "Python 3 bindings for libfuse 3 with async I/O support"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.dependencies]
+trio = ">=0.15"
+
+[[package]]
+name = "reportlab"
+version = "3.5.65"
+description = "The Reportlab Toolkit"
+category = "main"
+optional = false
+python-versions = ">=2.7, >=3.6, <4"
+
+[package.dependencies]
+pillow = ">=4.0.0"
+
+[package.extras]
+rlpycairo = ["rlPyCairo (>=0.0.5)"]
+
+[[package]]
+name = "rmcl"
+version = "0.4.0"
+description = "reMarkable Cloud Library"
+category = "main"
+optional = false
+python-versions = ">=3.7,<4.0"
+
+[package.dependencies]
+asks = ">=2.4.12,<3.0.0"
+trio = ">=0.18.0,<0.19.0"
+xdg = ">=5.0.1,<6.0.0"
+
+[[package]]
+name = "rmfuse"
+version = "0.2.1"
+description = ""
+category = "main"
+optional = false
+python-versions = "^3.7"
+develop = false
+
+[package.dependencies]
+bidict = "^0.21.2"
+pyfuse3 = {version = "^3.2.0", optional = true}
+rmcl = "^0.4.0"
+rmrl = "^0.2.1"
+xdg = "^5.0.1"
+
+[package.extras]
+pyfuse3 = ["pyfuse3 (>=3.2.0,<4.0.0)"]
+llfuse = ["llfuse (>=1.4.1,<2.0.0)"]
+
+[package.source]
+type = "git"
+url = "https://github.com/rschroll/rmfuse.git"
+reference = "master"
+resolved_reference = "fca03bcdd6dc118f2ba981410ec9dff7f7cb88ec"
+
+[[package]]
+name = "rmrl"
+version = "0.2.1"
+description = "Render reMarkable documents to PDF"
+category = "main"
+optional = false
+python-versions = ">=3.7,<4.0"
+
+[package.dependencies]
+pdfrw = ">=0.4,<0.5"
+reportlab = ">=3.5.59,<4.0.0"
+svglib = ">=1.0.1,<2.0.0"
+xdg = ">=5.0.1,<6.0.0"
+
+[[package]]
+name = "sniffio"
+version = "1.2.0"
+description = "Sniff out which async library your code is running under"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
+name = "sortedcontainers"
+version = "2.3.0"
+description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "svglib"
+version = "1.0.1"
+description = "A pure-Python library for reading and converting SVG"
+category = "main"
+optional = false
+python-versions = ">=3"
+
+[package.dependencies]
+cssselect2 = ">=0.2.0"
+lxml = "*"
+reportlab = "*"
+tinycss2 = ">=0.6.0"
+
+[[package]]
+name = "tinycss2"
+version = "1.1.0"
+description = "tinycss2"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+webencodings = ">=0.4"
+
+[package.extras]
+doc = ["sphinx", "sphinx-rtd-theme"]
+test = ["pytest", "pytest-cov", "pytest-flake8", "pytest-isort", "coverage"]
+
+[[package]]
+name = "trio"
+version = "0.18.0"
+description = "A friendly Python library for async concurrency and I/O"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+async-generator = ">=1.9"
+attrs = ">=19.2.0"
+cffi = {version = ">=1.14", markers = "os_name == \"nt\" and implementation_name != \"pypy\""}
+idna = "*"
+outcome = "*"
+sniffio = "*"
+sortedcontainers = "*"
+
+[[package]]
+name = "webencodings"
+version = "0.5.1"
+description = "Character encoding aliases for legacy web content"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "xdg"
+version = "5.0.1"
+description = "Variables defined by the XDG Base Directory Specification"
+category = "main"
+optional = false
+python-versions = ">=3.6,<4.0"
+
+[metadata]
+lock-version = "1.1"
+python-versions = "^3.8"
+content-hash = "3da90f3013f1220c9081c0a11dac7d8cd05c5a47ebda40fbb4357e44503e99a3"
+
+[metadata.files]
+anyio = [
+    {file = "anyio-2.2.0-py3-none-any.whl", hash = "sha256:aa3da546ed17f097ca876c78024dea380a3b7fa80759abfdda59f12176a3dac8"},
+    {file = "anyio-2.2.0.tar.gz", hash = "sha256:4a41c5b3a65ed92e469d51b6fba3779301850ea2e352afcf9e36c46f21ee14a9"},
+]
+asks = [
+    {file = "asks-2.4.12.tar.gz", hash = "sha256:38de944eb350e7e4e3a918055fa8ff033da5f7b5ff385c1160a2d6b9d84783b0"},
+]
+async-generator = [
+    {file = "async_generator-1.10-py3-none-any.whl", hash = "sha256:01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b"},
+    {file = "async_generator-1.10.tar.gz", hash = "sha256:6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144"},
+]
+attrs = [
+    {file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"},
+    {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"},
+]
+bidict = [
+    {file = "bidict-0.21.2-py2.py3-none-any.whl", hash = "sha256:929d056e8d0d9b17ceda20ba5b24ac388e2a4d39802b87f9f4d3f45ecba070bf"},
+    {file = "bidict-0.21.2.tar.gz", hash = "sha256:4fa46f7ff96dc244abfc437383d987404ae861df797e2fd5b190e233c302be09"},
+]
+cffi = [
+    {file = "cffi-1.14.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:bb89f306e5da99f4d922728ddcd6f7fcebb3241fc40edebcb7284d7514741991"},
+    {file = "cffi-1.14.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:34eff4b97f3d982fb93e2831e6750127d1355a923ebaeeb565407b3d2f8d41a1"},
+    {file = "cffi-1.14.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99cd03ae7988a93dd00bcd9d0b75e1f6c426063d6f03d2f90b89e29b25b82dfa"},
+    {file = "cffi-1.14.5-cp27-cp27m-win32.whl", hash = "sha256:65fa59693c62cf06e45ddbb822165394a288edce9e276647f0046e1ec26920f3"},
+    {file = "cffi-1.14.5-cp27-cp27m-win_amd64.whl", hash = "sha256:51182f8927c5af975fece87b1b369f722c570fe169f9880764b1ee3bca8347b5"},
+    {file = "cffi-1.14.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:43e0b9d9e2c9e5d152946b9c5fe062c151614b262fda2e7b201204de0b99e482"},
+    {file = "cffi-1.14.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:cbde590d4faaa07c72bf979734738f328d239913ba3e043b1e98fe9a39f8b2b6"},
+    {file = "cffi-1.14.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:5de7970188bb46b7bf9858eb6890aad302577a5f6f75091fd7cdd3ef13ef3045"},
+    {file = "cffi-1.14.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:a465da611f6fa124963b91bf432d960a555563efe4ed1cc403ba5077b15370aa"},
+    {file = "cffi-1.14.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:d42b11d692e11b6634f7613ad8df5d6d5f8875f5d48939520d351007b3c13406"},
+    {file = "cffi-1.14.5-cp35-cp35m-win32.whl", hash = "sha256:72d8d3ef52c208ee1c7b2e341f7d71c6fd3157138abf1a95166e6165dd5d4369"},
+    {file = "cffi-1.14.5-cp35-cp35m-win_amd64.whl", hash = "sha256:29314480e958fd8aab22e4a58b355b629c59bf5f2ac2492b61e3dc06d8c7a315"},
+    {file = "cffi-1.14.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:3d3dd4c9e559eb172ecf00a2a7517e97d1e96de2a5e610bd9b68cea3925b4892"},
+    {file = "cffi-1.14.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:48e1c69bbacfc3d932221851b39d49e81567a4d4aac3b21258d9c24578280058"},
+    {file = "cffi-1.14.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:69e395c24fc60aad6bb4fa7e583698ea6cc684648e1ffb7fe85e3c1ca131a7d5"},
+    {file = "cffi-1.14.5-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:9e93e79c2551ff263400e1e4be085a1210e12073a31c2011dbbda14bda0c6132"},
+    {file = "cffi-1.14.5-cp36-cp36m-win32.whl", hash = "sha256:58e3f59d583d413809d60779492342801d6e82fefb89c86a38e040c16883be53"},
+    {file = "cffi-1.14.5-cp36-cp36m-win_amd64.whl", hash = "sha256:005a36f41773e148deac64b08f233873a4d0c18b053d37da83f6af4d9087b813"},
+    {file = "cffi-1.14.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2894f2df484ff56d717bead0a5c2abb6b9d2bf26d6960c4604d5c48bbc30ee73"},
+    {file = "cffi-1.14.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:0857f0ae312d855239a55c81ef453ee8fd24136eaba8e87a2eceba644c0d4c06"},
+    {file = "cffi-1.14.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:cd2868886d547469123fadc46eac7ea5253ea7fcb139f12e1dfc2bbd406427d1"},
+    {file = "cffi-1.14.5-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:35f27e6eb43380fa080dccf676dece30bef72e4a67617ffda586641cd4508d49"},
+    {file = "cffi-1.14.5-cp37-cp37m-win32.whl", hash = "sha256:9ff227395193126d82e60319a673a037d5de84633f11279e336f9c0f189ecc62"},
+    {file = "cffi-1.14.5-cp37-cp37m-win_amd64.whl", hash = "sha256:9cf8022fb8d07a97c178b02327b284521c7708d7c71a9c9c355c178ac4bbd3d4"},
+    {file = "cffi-1.14.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8b198cec6c72df5289c05b05b8b0969819783f9418e0409865dac47288d2a053"},
+    {file = "cffi-1.14.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:ad17025d226ee5beec591b52800c11680fca3df50b8b29fe51d882576e039ee0"},
+    {file = "cffi-1.14.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6c97d7350133666fbb5cf4abdc1178c812cb205dc6f41d174a7b0f18fb93337e"},
+    {file = "cffi-1.14.5-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8ae6299f6c68de06f136f1f9e69458eae58f1dacf10af5c17353eae03aa0d827"},
+    {file = "cffi-1.14.5-cp38-cp38-win32.whl", hash = "sha256:b85eb46a81787c50650f2392b9b4ef23e1f126313b9e0e9013b35c15e4288e2e"},
+    {file = "cffi-1.14.5-cp38-cp38-win_amd64.whl", hash = "sha256:1f436816fc868b098b0d63b8920de7d208c90a67212546d02f84fe78a9c26396"},
+    {file = "cffi-1.14.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1071534bbbf8cbb31b498d5d9db0f274f2f7a865adca4ae429e147ba40f73dea"},
+    {file = "cffi-1.14.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:9de2e279153a443c656f2defd67769e6d1e4163952b3c622dcea5b08a6405322"},
+    {file = "cffi-1.14.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:6e4714cc64f474e4d6e37cfff31a814b509a35cb17de4fb1999907575684479c"},
+    {file = "cffi-1.14.5-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:158d0d15119b4b7ff6b926536763dc0714313aa59e320ddf787502c70c4d4bee"},
+    {file = "cffi-1.14.5-cp39-cp39-win32.whl", hash = "sha256:afb29c1ba2e5a3736f1c301d9d0abe3ec8b86957d04ddfa9d7a6a42b9367e396"},
+    {file = "cffi-1.14.5-cp39-cp39-win_amd64.whl", hash = "sha256:f2d45f97ab6bb54753eab54fffe75aaf3de4ff2341c9daee1987ee1837636f1d"},
+    {file = "cffi-1.14.5.tar.gz", hash = "sha256:fd78e5fee591709f32ef6edb9a015b4aa1a5022598e36227500c8f4e02328d9c"},
+]
+cssselect2 = [
+    {file = "cssselect2-0.4.1-py3-none-any.whl", hash = "sha256:2f4a9f20965367bae459e3bb42561f7927e0cfe5b7ea1692757cf67ef5d7dace"},
+    {file = "cssselect2-0.4.1.tar.gz", hash = "sha256:93fbb9af860e95dd40bf18c3b2b6ed99189a07c0f29ba76f9c5be71344664ec8"},
+]
+h11 = [
+    {file = "h11-0.12.0-py3-none-any.whl", hash = "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6"},
+    {file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"},
+]
+idna = [
+    {file = "idna-3.1-py3-none-any.whl", hash = "sha256:5205d03e7bcbb919cc9c19885f9920d622ca52448306f2377daede5cf3faac16"},
+    {file = "idna-3.1.tar.gz", hash = "sha256:c5b02147e01ea9920e6b0a3f1f7bb833612d507592c837a6c49552768f4054e1"},
+]
+lxml = [
+    {file = "lxml-4.6.2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a9d6bc8642e2c67db33f1247a77c53476f3a166e09067c0474facb045756087f"},
+    {file = "lxml-4.6.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:791394449e98243839fa822a637177dd42a95f4883ad3dec2a0ce6ac99fb0a9d"},
+    {file = "lxml-4.6.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:68a5d77e440df94011214b7db907ec8f19e439507a70c958f750c18d88f995d2"},
+    {file = "lxml-4.6.2-cp27-cp27m-win32.whl", hash = "sha256:fc37870d6716b137e80d19241d0e2cff7a7643b925dfa49b4c8ebd1295eb506e"},
+    {file = "lxml-4.6.2-cp27-cp27m-win_amd64.whl", hash = "sha256:69a63f83e88138ab7642d8f61418cf3180a4d8cd13995df87725cb8b893e950e"},
+    {file = "lxml-4.6.2-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:42ebca24ba2a21065fb546f3e6bd0c58c3fe9ac298f3a320147029a4850f51a2"},
+    {file = "lxml-4.6.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:f83d281bb2a6217cd806f4cf0ddded436790e66f393e124dfe9731f6b3fb9afe"},
+    {file = "lxml-4.6.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:535f067002b0fd1a4e5296a8f1bf88193080ff992a195e66964ef2a6cfec5388"},
+    {file = "lxml-4.6.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:366cb750140f221523fa062d641393092813b81e15d0e25d9f7c6025f910ee80"},
+    {file = "lxml-4.6.2-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:97db258793d193c7b62d4e2586c6ed98d51086e93f9a3af2b2034af01450a74b"},
+    {file = "lxml-4.6.2-cp35-cp35m-win32.whl", hash = "sha256:648914abafe67f11be7d93c1a546068f8eff3c5fa938e1f94509e4a5d682b2d8"},
+    {file = "lxml-4.6.2-cp35-cp35m-win_amd64.whl", hash = "sha256:4e751e77006da34643ab782e4a5cc21ea7b755551db202bc4d3a423b307db780"},
+    {file = "lxml-4.6.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:681d75e1a38a69f1e64ab82fe4b1ed3fd758717bed735fb9aeaa124143f051af"},
+    {file = "lxml-4.6.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:127f76864468d6630e1b453d3ffbbd04b024c674f55cf0a30dc2595137892d37"},
+    {file = "lxml-4.6.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4fb85c447e288df535b17ebdebf0ec1cf3a3f1a8eba7e79169f4f37af43c6b98"},
+    {file = "lxml-4.6.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:5be4a2e212bb6aa045e37f7d48e3e1e4b6fd259882ed5a00786f82e8c37ce77d"},
+    {file = "lxml-4.6.2-cp36-cp36m-win32.whl", hash = "sha256:8c88b599e226994ad4db29d93bc149aa1aff3dc3a4355dd5757569ba78632bdf"},
+    {file = "lxml-4.6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:6e4183800f16f3679076dfa8abf2db3083919d7e30764a069fb66b2b9eff9939"},
+    {file = "lxml-4.6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d8d3d4713f0c28bdc6c806a278d998546e8efc3498949e3ace6e117462ac0a5e"},
+    {file = "lxml-4.6.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:8246f30ca34dc712ab07e51dc34fea883c00b7ccb0e614651e49da2c49a30711"},
+    {file = "lxml-4.6.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:923963e989ffbceaa210ac37afc9b906acebe945d2723e9679b643513837b089"},
+    {file = "lxml-4.6.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:1471cee35eba321827d7d53d104e7b8c593ea3ad376aa2df89533ce8e1b24a01"},
+    {file = "lxml-4.6.2-cp37-cp37m-win32.whl", hash = "sha256:2363c35637d2d9d6f26f60a208819e7eafc4305ce39dc1d5005eccc4593331c2"},
+    {file = "lxml-4.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:f4822c0660c3754f1a41a655e37cb4dbbc9be3d35b125a37fab6f82d47674ebc"},
+    {file = "lxml-4.6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0448576c148c129594d890265b1a83b9cd76fd1f0a6a04620753d9a6bcfd0a4d"},
+    {file = "lxml-4.6.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:60a20bfc3bd234d54d49c388950195d23a5583d4108e1a1d47c9eef8d8c042b3"},
+    {file = "lxml-4.6.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2e5cc908fe43fe1aa299e58046ad66981131a66aea3129aac7770c37f590a644"},
+    {file = "lxml-4.6.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:50c348995b47b5a4e330362cf39fc503b4a43b14a91c34c83b955e1805c8e308"},
+    {file = "lxml-4.6.2-cp38-cp38-win32.whl", hash = "sha256:94d55bd03d8671686e3f012577d9caa5421a07286dd351dfef64791cf7c6c505"},
+    {file = "lxml-4.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:7a7669ff50f41225ca5d6ee0a1ec8413f3a0d8aa2b109f86d540887b7ec0d72a"},
+    {file = "lxml-4.6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e0bfe9bb028974a481410432dbe1b182e8191d5d40382e5b8ff39cdd2e5c5931"},
+    {file = "lxml-4.6.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6fd8d5903c2e53f49e99359b063df27fdf7acb89a52b6a12494208bf61345a03"},
+    {file = "lxml-4.6.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7e9eac1e526386df7c70ef253b792a0a12dd86d833b1d329e038c7a235dfceb5"},
+    {file = "lxml-4.6.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:7ee8af0b9f7de635c61cdd5b8534b76c52cd03536f29f51151b377f76e214a1a"},
+    {file = "lxml-4.6.2-cp39-cp39-win32.whl", hash = "sha256:2e6fd1b8acd005bd71e6c94f30c055594bbd0aa02ef51a22bbfa961ab63b2d75"},
+    {file = "lxml-4.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:535332fe9d00c3cd455bd3dd7d4bacab86e2d564bdf7606079160fa6251caacf"},
+    {file = "lxml-4.6.2.tar.gz", hash = "sha256:cd11c7e8d21af997ee8079037fff88f16fda188a9776eb4b81c7e4c9c0a7d7fc"},
+]
+outcome = [
+    {file = "outcome-1.1.0-py2.py3-none-any.whl", hash = "sha256:c7dd9375cfd3c12db9801d080a3b63d4b0a261aa996c4c13152380587288d958"},
+    {file = "outcome-1.1.0.tar.gz", hash = "sha256:e862f01d4e626e63e8f92c38d1f8d5546d3f9cce989263c521b2e7990d186967"},
+]
+pdfrw = [
+    {file = "pdfrw-0.4-py2.py3-none-any.whl", hash = "sha256:758289edaa3b672e9a1a67504be73c18ec668d4e5b9d5ac9cbc0dc753d8d196b"},
+    {file = "pdfrw-0.4.tar.gz", hash = "sha256:0dc0494a0e6561b268542b28ede2280387c2728114f117d3bb5d8e4787b93ef4"},
+]
+pillow = [
+    {file = "Pillow-8.1.2-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:5cf03b9534aca63b192856aa601c68d0764810857786ea5da652581f3a44c2b0"},
+    {file = "Pillow-8.1.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:f91b50ad88048d795c0ad004abbe1390aa1882073b1dca10bfd55d0b8cf18ec5"},
+    {file = "Pillow-8.1.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5762ebb4436f46b566fc6351d67a9b5386b5e5de4e58fdaa18a1c83e0e20f1a8"},
+    {file = "Pillow-8.1.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:e2cd8ac157c1e5ae88b6dd790648ee5d2777e76f1e5c7d184eaddb2938594f34"},
+    {file = "Pillow-8.1.2-cp36-cp36m-win32.whl", hash = "sha256:72027ebf682abc9bafd93b43edc44279f641e8996fb2945104471419113cfc71"},
+    {file = "Pillow-8.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:d1d6bca39bb6dd94fba23cdb3eeaea5e30c7717c5343004d900e2a63b132c341"},
+    {file = "Pillow-8.1.2-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:90882c6f084ef68b71bba190209a734bf90abb82ab5e8f64444c71d5974008c6"},
+    {file = "Pillow-8.1.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:89e4c757a91b8c55d97c91fa09c69b3677c227b942fa749e9a66eef602f59c28"},
+    {file = "Pillow-8.1.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:8c4e32218c764bc27fe49b7328195579581aa419920edcc321c4cb877c65258d"},
+    {file = "Pillow-8.1.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:a01da2c266d9868c4f91a9c6faf47a251f23b9a862dce81d2ff583135206f5be"},
+    {file = "Pillow-8.1.2-cp37-cp37m-win32.whl", hash = "sha256:30d33a1a6400132e6f521640dd3f64578ac9bfb79a619416d7e8802b4ce1dd55"},
+    {file = "Pillow-8.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:71b01ee69e7df527439d7752a2ce8fb89e19a32df484a308eca3e81f673d3a03"},
+    {file = "Pillow-8.1.2-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:5a2d957eb4aba9d48170b8fe6538ec1fbc2119ffe6373782c03d8acad3323f2e"},
+    {file = "Pillow-8.1.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:87f42c976f91ca2fc21a3293e25bd3cd895918597db1b95b93cbd949f7d019ce"},
+    {file = "Pillow-8.1.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:15306d71a1e96d7e271fd2a0737038b5a92ca2978d2e38b6ced7966583e3d5af"},
+    {file = "Pillow-8.1.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:71f31ee4df3d5e0b366dd362007740106d3210fb6a56ec4b581a5324ba254f06"},
+    {file = "Pillow-8.1.2-cp38-cp38-win32.whl", hash = "sha256:98afcac3205d31ab6a10c5006b0cf040d0026a68ec051edd3517b776c1d78b09"},
+    {file = "Pillow-8.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:328240f7dddf77783e72d5ed79899a6b48bc6681f8d1f6001f55933cb4905060"},
+    {file = "Pillow-8.1.2-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:bead24c0ae3f1f6afcb915a057943ccf65fc755d11a1410a909c1fefb6c06ad1"},
+    {file = "Pillow-8.1.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81b3716cc9744ffdf76b39afb6247eae754186838cedad0b0ac63b2571253fe6"},
+    {file = "Pillow-8.1.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:63cd413ac52ee3f67057223d363f4f82ce966e64906aea046daf46695e3c8238"},
+    {file = "Pillow-8.1.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:8565355a29655b28fdc2c666fd9a3890fe5edc6639d128814fafecfae2d70910"},
+    {file = "Pillow-8.1.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:1940fc4d361f9cc7e558d6f56ff38d7351b53052fd7911f4b60cd7bc091ea3b1"},
+    {file = "Pillow-8.1.2-cp39-cp39-win32.whl", hash = "sha256:46c2bcf8e1e75d154e78417b3e3c64e96def738c2a25435e74909e127a8cba5e"},
+    {file = "Pillow-8.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:aeab4cd016e11e7aa5cfc49dcff8e51561fa64818a0be86efa82c7038e9369d0"},
+    {file = "Pillow-8.1.2-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:74cd9aa648ed6dd25e572453eb09b08817a1e3d9f8d1bd4d8403d99e42ea790b"},
+    {file = "Pillow-8.1.2-pp36-pypy36_pp73-manylinux2010_i686.whl", hash = "sha256:e5739ae63636a52b706a0facec77b2b58e485637e1638202556156e424a02dc2"},
+    {file = "Pillow-8.1.2-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:903293320efe2466c1ab3509a33d6b866dc850cfd0c5d9cc92632014cec185fb"},
+    {file = "Pillow-8.1.2-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:5daba2b40782c1c5157a788ec4454067c6616f5a0c1b70e26ac326a880c2d328"},
+    {file = "Pillow-8.1.2-pp37-pypy37_pp73-manylinux2010_i686.whl", hash = "sha256:1f93f2fe211f1ef75e6f589327f4d4f8545d5c8e826231b042b483d8383e8a7c"},
+    {file = "Pillow-8.1.2-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:6efac40344d8f668b6c4533ae02a48d52fd852ef0654cc6f19f6ac146399c733"},
+    {file = "Pillow-8.1.2-pp37-pypy37_pp73-win32.whl", hash = "sha256:f36c3ff63d6fc509ce599a2f5b0d0732189eed653420e7294c039d342c6e204a"},
+    {file = "Pillow-8.1.2.tar.gz", hash = "sha256:b07c660e014852d98a00a91adfbe25033898a9d90a8f39beb2437d22a203fc44"},
+]
+pycparser = [
+    {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
+    {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"},
+]
+pyfuse3 = [
+    {file = "pyfuse3-3.2.0.tar.gz", hash = "sha256:45f0053ad601b03a36e2c283a5271403674245a66a0daf50e3deaab0ea4fa82f"},
+]
+reportlab = [
+    {file = "reportlab-3.5.65-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:fd6712a8a6dca12181a3a12316f97810927861e77f2a98029efd2c5cfc8546dc"},
+    {file = "reportlab-3.5.65-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:ee711804acdaf3ea7f0f2cd27f19478af993e730df8c8d923a678eb0e2572fba"},
+    {file = "reportlab-3.5.65-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4c42e85851f969e21fa4d6414587b7544e877ce685e2495d7d422589c70b6281"},
+    {file = "reportlab-3.5.65-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d8fefd07072bfae2715283a821fb1acf8fc4946cf925509d5cc2af791c611809"},
+    {file = "reportlab-3.5.65-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:bdf751289efee4891f4f354ce9122da8de8258a40f328b3f11540c4888363337"},
+    {file = "reportlab-3.5.65-cp36-cp36m-win32.whl", hash = "sha256:f0634740b099b69caed081acd89692996b5504c59f86f39781b6bebc82b267f5"},
+    {file = "reportlab-3.5.65-cp36-cp36m-win_amd64.whl", hash = "sha256:d810bffd4bcd50fdcb2bab0d1fe9ea4e6187ed5237687e41c6ade6c884b00c1e"},
+    {file = "reportlab-3.5.65-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:46745826657d35f86843487f4bc6f6f805f61260428f8ee13642bf6372f9df55"},
+    {file = "reportlab-3.5.65-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:bc62187181582772688d65c557ad6a40a4c3bb8d1f74de463d35ea81983e9b75"},
+    {file = "reportlab-3.5.65-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:58bec163f727c1c60515fc4704a961b3b4ccf2c76b4e6ec1a457ea7ed0c2d756"},
+    {file = "reportlab-3.5.65-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d92834993bf998853a04946729266a3276965e7b13f7423212f1c1abdfc4a1c7"},
+    {file = "reportlab-3.5.65-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:9ec95808b742ce70c1dab28b2c5bef9093816b92315b948419c2c6968658f9cc"},
+    {file = "reportlab-3.5.65-cp37-cp37m-win32.whl", hash = "sha256:b9494986f35d82350b0ce0c29704a49a3945421b789dff92e93fbd3de554fa34"},
+    {file = "reportlab-3.5.65-cp37-cp37m-win_amd64.whl", hash = "sha256:07f9d9c0360cb8fc780ca05264faa68b90583cd28dbdf2cda6bda34379b6e66c"},
+    {file = "reportlab-3.5.65-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:81898de0a0be2c8318468ae0ae1590f828805e9b7fd68e5a50667dce8b942171"},
+    {file = "reportlab-3.5.65-cp38-cp38-manylinux1_i686.whl", hash = "sha256:99aeee49a61c85f1af1087e9e418f3d0c2352c4dd0f0abbfac17ae6c467185aa"},
+    {file = "reportlab-3.5.65-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:3ec70873d99c14570e2a9c44b86c8c01526871e7af5ee4b2855246db15cb0c9f"},
+    {file = "reportlab-3.5.65-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:c12432575c793b8cd8552fddc219bbf2813541c64d02854ae345a108fb875b9d"},
+    {file = "reportlab-3.5.65-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:b2cf692ae7af995b499a31a3f58f2001d98e310e03f74812bcb97a08078239c0"},
+    {file = "reportlab-3.5.65-cp38-cp38-win32.whl", hash = "sha256:f92388e30bf6b5d2eceb3d7b05ee2df856635f74ce7d950a8f45d2b70c685a5b"},
+    {file = "reportlab-3.5.65-cp38-cp38-win_amd64.whl", hash = "sha256:6f007142f2b166f52cbb3e5d23319e3e496c429831e53b904e6db28c3370f279"},
+    {file = "reportlab-3.5.65-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:8707cc21a769150154bf4634dca6e9581ae24a05f0fb81a84fcc1143b1cbbfde"},
+    {file = "reportlab-3.5.65-cp39-cp39-manylinux1_i686.whl", hash = "sha256:27a831da0d17153e33c985bd7a88307e206c5a28778cddb755d5372598d12637"},
+    {file = "reportlab-3.5.65-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:fe5d98cdac07dd702bcd49f5723aacdd0af8c84d70fc82a5cc3781e52aedad52"},
+    {file = "reportlab-3.5.65-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:ba2d10f368c9ea1e76c84b3bb6b9982eb5a8f243c434e821c505b75ca8d85852"},
+    {file = "reportlab-3.5.65-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:289539f7888239343ef7ebcd30c55e6204ef78d5f70e1547fdeb854a2da8bfa1"},
+    {file = "reportlab-3.5.65-cp39-cp39-win32.whl", hash = "sha256:cdf8ff72cd6fa9303744c8409fb81ef7720da2e034c369762c2fdf496462179e"},
+    {file = "reportlab-3.5.65-cp39-cp39-win_amd64.whl", hash = "sha256:4a784ecdf3008f533e5a032b96c395e8592ed5e679baaf5ef4dcc136b01c72e9"},
+    {file = "reportlab-3.5.65.tar.gz", hash = "sha256:b2c7eedb4d19db63301c27ad1076086a099fd4c8ca0a6f62f6e9ed749fa5908f"},
+]
+rmcl = [
+    {file = "rmcl-0.4.0-py3-none-any.whl", hash = "sha256:d2fc5d183b213797f5886a6af52c5531c87b4e1770cc720e0e8ba5992e728473"},
+    {file = "rmcl-0.4.0.tar.gz", hash = "sha256:14bd199ff2c71269c3c1ac63d10932de6c68a250a454550940dae3f06b07527a"},
+]
+rmfuse = []
+rmrl = [
+    {file = "rmrl-0.2.1-py3-none-any.whl", hash = "sha256:c35b9f20494a6034a16e916d7351575efb3e3f77acabe9094453a7f6013eaa86"},
+    {file = "rmrl-0.2.1.tar.gz", hash = "sha256:c532bef4168350e6ab17cf37c6481dc12b6a78e007c073503f082f36215b71c9"},
+]
+sniffio = [
+    {file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"},
+    {file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"},
+]
+sortedcontainers = [
+    {file = "sortedcontainers-2.3.0-py2.py3-none-any.whl", hash = "sha256:37257a32add0a3ee490bb170b599e93095eed89a55da91fa9f48753ea12fd73f"},
+    {file = "sortedcontainers-2.3.0.tar.gz", hash = "sha256:59cc937650cf60d677c16775597c89a960658a09cf7c1a668f86e1e4464b10a1"},
+]
+svglib = [
+    {file = "svglib-1.0.1.tar.gz", hash = "sha256:ff01593e8c07ea462d3742e1f4141bfa261cbd4400ceb25dfb8fec3508ad0e50"},
+]
+tinycss2 = [
+    {file = "tinycss2-1.1.0-py3-none-any.whl", hash = "sha256:0353b5234bcaee7b1ac7ca3dea7e02cd338a9f8dcbb8f2dcd32a5795ec1e5f9a"},
+    {file = "tinycss2-1.1.0.tar.gz", hash = "sha256:fbdcac3044d60eb85fdb2aa840ece43cf7dbe798e373e6ee0be545d4d134e18a"},
+]
+trio = [
+    {file = "trio-0.18.0-py3-none-any.whl", hash = "sha256:a42af0634ba729cbfe8578be058750c6471dac19fbc7167ec6a3ca3f966fb424"},
+    {file = "trio-0.18.0.tar.gz", hash = "sha256:87a66ae61f27fe500c9024926a9ba482c07e1e0f56380b70a264d19c435ba076"},
+]
+webencodings = [
+    {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"},
+    {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"},
+]
+xdg = [
+    {file = "xdg-5.0.1-py3-none-any.whl", hash = "sha256:9ddd6649bee9148f952305603a08474e3ef37c909eb19dfcb9737d54ebcc407e"},
+    {file = "xdg-5.0.1.tar.gz", hash = "sha256:97a27058caa61b4ce04e05471643caa6bc8c563d2638f92c0516ac50208146d8"},
+]
diff --git a/pkgs/tools/filesystems/rmfuse/pyproject.toml b/pkgs/tools/filesystems/rmfuse/pyproject.toml
new file mode 100644
index 00000000000..e3f1767b4cf
--- /dev/null
+++ b/pkgs/tools/filesystems/rmfuse/pyproject.toml
@@ -0,0 +1,15 @@
+[tool.poetry]
+name = "rmfuse-env"
+version = "0.1.0"
+description = ""
+authors = []
+
+[tool.poetry.dependencies]
+python = "^3.8"
+rmfuse = {git = "https://github.com/rschroll/rmfuse.git", extras = ["pyfuse3"]}
+
+[tool.poetry.dev-dependencies]
+
+[build-system]
+requires = ["poetry-core>=1.0.0"]
+build-backend = "poetry.core.masonry.api"
diff --git a/pkgs/tools/filesystems/rmfuse/update b/pkgs/tools/filesystems/rmfuse/update
new file mode 100755
index 00000000000..77cfe9ff86d
--- /dev/null
+++ b/pkgs/tools/filesystems/rmfuse/update
@@ -0,0 +1,5 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p poetry poetry2nix.cli
+set -eu
+poetry lock
+poetry2nix lock
diff --git a/pkgs/tools/filesystems/rmount/default.nix b/pkgs/tools/filesystems/rmount/default.nix
index 529fc024491..1d8ced17aae 100644
--- a/pkgs/tools/filesystems/rmount/default.nix
+++ b/pkgs/tools/filesystems/rmount/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, nmap, jq, cifs-utils, sshfs, fetchFromGitHub, makeWrapper }:
+{ lib, stdenv, nmap, jq, cifs-utils, sshfs, fetchFromGitHub, makeWrapper }:
 
 stdenv.mkDerivation rec {
 
@@ -12,17 +12,17 @@ stdenv.mkDerivation rec {
     sha256 = "0j1ayncw1nnmgna7vyx44vwinh4ah1b0l5y8agc7i4s8clbvy3h0";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ 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 ]}
+    wrapProgram $out/bin/rmount --prefix PATH : ${lib.makeBinPath [ nmap jq cifs-utils sshfs ]}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/Luis-Hebendanz/rmount";
     description = "Remote mount utility which parses a json file";
     license = licenses.mit;
diff --git a/pkgs/tools/filesystems/romdirfs/default.nix b/pkgs/tools/filesystems/romdirfs/default.nix
index 96389214c7e..0304508d41e 100644
--- a/pkgs/tools/filesystems/romdirfs/default.nix
+++ b/pkgs/tools/filesystems/romdirfs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig, fuse }:
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, fuse }:
 
 stdenv.mkDerivation rec {
   pname = "romdirfs";
@@ -11,14 +11,14 @@ stdenv.mkDerivation rec {
     sha256 = "1jbsmpklrycz5q86qmzvbz4iz2g5fvd7p9nca160aw2izwpws0g7";
   };
 
-  nativeBuildInputs = [ cmake pkgconfig ];
+  nativeBuildInputs = [ cmake pkg-config ];
   buildInputs = [ fuse ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "FUSE for access Playstation 2 IOP IOPRP images and BIOS dumps";
     homepage = "https://github.com/mlafeldt/romdirfs";
     license = licenses.gpl3;
-    platforms = platforms.linux;
-    maintainers = with maintainers; [ genesis ];
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/tools/filesystems/s3backer/default.nix b/pkgs/tools/filesystems/s3backer/default.nix
index 1906f680535..b196b294839 100644
--- a/pkgs/tools/filesystems/s3backer/default.nix
+++ b/pkgs/tools/filesystems/s3backer/default.nix
@@ -1,30 +1,36 @@
-{ stdenv, fetchFromGitHub
-, autoreconfHook, pkgconfig
+{ lib, stdenv, fetchFromGitHub
+, autoreconfHook, pkg-config
 , fuse, curl, expat }:
 
 stdenv.mkDerivation rec {
   pname = "s3backer";
-  version = "1.5.4";
+  version = "1.6.1";
 
   src = fetchFromGitHub {
-    sha256 = "1228qlfgz48k9vv72hrz488zg73zls99cppb9vmikc0pzv1xndsx";
+    sha256 = "sha256-67sVT72i8tOMdGH/+Oh1N7Vh/2/qD56ImGWI+tprMOM=";
     rev = version;
     repo = "s3backer";
     owner = "archiecobbs";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ fuse curl expat ];
 
+  # AC_CHECK_DECLS doesn't work with clang
+  postPatch = lib.optionalString stdenv.cc.isClang ''
+    substituteInPlace configure.ac --replace \
+      'AC_CHECK_DECLS(fdatasync)' ""
+  '';
+
   autoreconfPhase = ''
     patchShebangs ./autogen.sh
     ./autogen.sh
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/archiecobbs/s3backer";
     description = "FUSE-based single file backing store via Amazon S3";
     license = licenses.gpl2Plus;
-    platforms = with platforms; linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/filesystems/s3fs/default.nix b/pkgs/tools/filesystems/s3fs/default.nix
index 3e91a1b0c47..95b5b6ab34a 100644
--- a/pkgs/tools/filesystems/s3fs/default.nix
+++ b/pkgs/tools/filesystems/s3fs/default.nix
@@ -1,20 +1,18 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, curl, openssl, libxml2, fuse, osxfuse }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, curl, openssl, libxml2, fuse }:
 
 stdenv.mkDerivation rec {
   pname = "s3fs-fuse";
-  version = "1.87";
+  version = "1.89";
 
   src = fetchFromGitHub {
     owner  = "s3fs-fuse";
     repo   = "s3fs-fuse";
     rev    = "v${version}";
-    sha256 = "09ib3sh6vg3z7cpccj3ysgpdyf84a98lf6nz15a61r4l27h111f2";
+    sha256 = "sha256-Agb0tq7B98Ioe0G/XEZCYcFQKnMuYXX9x0yg4Gvu3/k=";
   };
 
-  buildInputs = [ curl openssl libxml2 ]
-    ++ stdenv.lib.optionals stdenv.isLinux [ fuse ]
-    ++ stdenv.lib.optionals stdenv.isDarwin [ osxfuse ];
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  buildInputs = [ curl openssl libxml2 fuse ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
   configureFlags = [
     "--with-openssl"
@@ -24,7 +22,7 @@ stdenv.mkDerivation rec {
     ln -s $out/bin/s3fs $out/bin/mount.s3fs
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Mount an S3 bucket as filesystem through FUSE";
     license = licenses.gpl2;
     platforms = platforms.linux ++ platforms.darwin;
diff --git a/pkgs/tools/filesystems/sandboxfs/Cargo.lock.patch b/pkgs/tools/filesystems/sandboxfs/Cargo.lock.patch
new file mode 100644
index 00000000000..fbc4c80872c
--- /dev/null
+++ b/pkgs/tools/filesystems/sandboxfs/Cargo.lock.patch
@@ -0,0 +1,640 @@
+diff --git a/Cargo.lock b/Cargo.lock
+new file mode 100644
+index 0000000..5e16611
+--- /dev/null
++++ b/Cargo.lock
+@@ -0,0 +1,634 @@
++# This file is automatically @generated by Cargo.
++# It is not intended for manual editing.
++[[package]]
++name = "addr2line"
++version = "0.13.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1b6a2d3371669ab3ca9797670853d61402b03d0b4b9ebf33d677dfa720203072"
++dependencies = [
++ "gimli",
++]
++
++[[package]]
++name = "adler"
++version = "0.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e"
++
++[[package]]
++name = "aho-corasick"
++version = "0.7.13"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "043164d8ba5c4c3035fec9bbee8647c0261d788f3474306f93bb65901cae0e86"
++dependencies = [
++ "memchr",
++]
++
++[[package]]
++name = "arc-swap"
++version = "0.4.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4d25d88fd6b8041580a654f9d0c581a047baee2b3efee13275f2fc392fc75034"
++
++[[package]]
++name = "atty"
++version = "0.2.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
++dependencies = [
++ "hermit-abi",
++ "libc",
++ "winapi",
++]
++
++[[package]]
++name = "autocfg"
++version = "1.0.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
++
++[[package]]
++name = "backtrace"
++version = "0.3.51"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ec1931848a574faa8f7c71a12ea00453ff5effbb5f51afe7f77d7a48cace6ac1"
++dependencies = [
++ "addr2line",
++ "cfg-if",
++ "libc",
++ "miniz_oxide",
++ "object",
++ "rustc-demangle",
++]
++
++[[package]]
++name = "bitflags"
++version = "1.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
++
++[[package]]
++name = "cc"
++version = "1.0.60"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ef611cc68ff783f18535d77ddd080185275713d852c4f5cbb6122c462a7a825c"
++
++[[package]]
++name = "cfg-if"
++version = "0.1.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
++
++[[package]]
++name = "cpuprofiler"
++version = "0.0.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "43f8479dbcfd2bbaa0c0c26779b913052b375981cdf533091f2127ea3d42e52b"
++dependencies = [
++ "error-chain",
++ "lazy_static",
++ "pkg-config",
++]
++
++[[package]]
++name = "env_logger"
++version = "0.5.13"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "15b0a4d2e39f8420210be8b27eeda28029729e2fd4291019455016c348240c38"
++dependencies = [
++ "atty",
++ "humantime",
++ "log 0.4.11",
++ "regex",
++ "termcolor",
++]
++
++[[package]]
++name = "error-chain"
++version = "0.12.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc"
++dependencies = [
++ "backtrace",
++ "version_check",
++]
++
++[[package]]
++name = "failure"
++version = "0.1.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
++dependencies = [
++ "backtrace",
++ "failure_derive",
++]
++
++[[package]]
++name = "failure_derive"
++version = "0.1.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++ "synstructure",
++]
++
++[[package]]
++name = "fuse"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "80e57070510966bfef93662a81cb8aa2b1c7db0964354fa9921434f04b9e8660"
++dependencies = [
++ "libc",
++ "log 0.3.9",
++ "pkg-config",
++ "thread-scoped",
++ "time",
++]
++
++[[package]]
++name = "getopts"
++version = "0.2.21"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
++dependencies = [
++ "unicode-width",
++]
++
++[[package]]
++name = "getrandom"
++version = "0.1.15"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6"
++dependencies = [
++ "cfg-if",
++ "libc",
++ "wasi 0.9.0+wasi-snapshot-preview1",
++]
++
++[[package]]
++name = "gimli"
++version = "0.22.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "aaf91faf136cb47367fa430cd46e37a788775e7fa104f8b4bcb3861dc389b724"
++
++[[package]]
++name = "hermit-abi"
++version = "0.1.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4c30f6d0bc6b00693347368a67d41b58f2fb851215ff1da49e90fe2c5c667151"
++dependencies = [
++ "libc",
++]
++
++[[package]]
++name = "humantime"
++version = "1.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
++dependencies = [
++ "quick-error",
++]
++
++[[package]]
++name = "itoa"
++version = "0.4.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6"
++
++[[package]]
++name = "lazy_static"
++version = "1.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
++
++[[package]]
++name = "libc"
++version = "0.2.78"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "aa7087f49d294270db4e1928fc110c976cd4b9e5a16348e0a1df09afa99e6c98"
++
++[[package]]
++name = "log"
++version = "0.3.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
++dependencies = [
++ "log 0.4.11",
++]
++
++[[package]]
++name = "log"
++version = "0.4.11"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b"
++dependencies = [
++ "cfg-if",
++]
++
++[[package]]
++name = "memchr"
++version = "2.3.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
++
++[[package]]
++name = "miniz_oxide"
++version = "0.4.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c60c0dfe32c10b43a144bad8fc83538c52f58302c92300ea7ec7bf7b38d5a7b9"
++dependencies = [
++ "adler",
++ "autocfg",
++]
++
++[[package]]
++name = "nix"
++version = "0.12.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "319fffb13b63c0f4ff5a4e1c97566e7e741561ff5d03bf8bbf11653454bbd70b"
++dependencies = [
++ "bitflags",
++ "cc",
++ "cfg-if",
++ "libc",
++ "void",
++]
++
++[[package]]
++name = "num_cpus"
++version = "1.13.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
++dependencies = [
++ "hermit-abi",
++ "libc",
++]
++
++[[package]]
++name = "object"
++version = "0.20.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1ab52be62400ca80aa00285d25253d7f7c437b7375c4de678f5405d3afe82ca5"
++
++[[package]]
++name = "pkg-config"
++version = "0.3.18"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33"
++
++[[package]]
++name = "ppv-lite86"
++version = "0.2.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c36fa947111f5c62a733b652544dd0016a43ce89619538a8ef92724a6f501a20"
++
++[[package]]
++name = "proc-macro2"
++version = "1.0.24"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
++dependencies = [
++ "unicode-xid",
++]
++
++[[package]]
++name = "quick-error"
++version = "1.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
++
++[[package]]
++name = "quote"
++version = "1.0.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37"
++dependencies = [
++ "proc-macro2",
++]
++
++[[package]]
++name = "rand"
++version = "0.7.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
++dependencies = [
++ "getrandom",
++ "libc",
++ "rand_chacha",
++ "rand_core",
++ "rand_hc",
++]
++
++[[package]]
++name = "rand_chacha"
++version = "0.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
++dependencies = [
++ "ppv-lite86",
++ "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.57"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
++
++[[package]]
++name = "regex"
++version = "1.3.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9c3780fcf44b193bc4d09f36d2a3c87b251da4a046c87795a0d35f4f927ad8e6"
++dependencies = [
++ "aho-corasick",
++ "memchr",
++ "regex-syntax",
++ "thread_local",
++]
++
++[[package]]
++name = "regex-syntax"
++version = "0.6.18"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "26412eb97c6b088a6997e05f69403a802a92d520de2f8e63c2b65f9e0f47c4e8"
++
++[[package]]
++name = "remove_dir_all"
++version = "0.5.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
++dependencies = [
++ "winapi",
++]
++
++[[package]]
++name = "rustc-demangle"
++version = "0.1.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
++
++[[package]]
++name = "ryu"
++version = "1.0.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
++
++[[package]]
++name = "sandboxfs"
++version = "0.2.0"
++dependencies = [
++ "cpuprofiler",
++ "env_logger",
++ "failure",
++ "fuse",
++ "getopts",
++ "log 0.4.11",
++ "nix",
++ "num_cpus",
++ "pkg-config",
++ "serde",
++ "serde_derive",
++ "serde_json",
++ "signal-hook",
++ "tempfile",
++ "threadpool",
++ "time",
++ "users",
++ "xattr",
++]
++
++[[package]]
++name = "serde"
++version = "1.0.116"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "96fe57af81d28386a513cbc6858332abc6117cfdb5999647c6444b8f43a370a5"
++
++[[package]]
++name = "serde_derive"
++version = "1.0.116"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f630a6370fd8e457873b4bd2ffdae75408bc291ba72be773772a4c2a065d9ae8"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++]
++
++[[package]]
++name = "serde_json"
++version = "1.0.58"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a230ea9107ca2220eea9d46de97eddcb04cd00e92d13dda78e478dd33fa82bd4"
++dependencies = [
++ "itoa",
++ "ryu",
++ "serde",
++]
++
++[[package]]
++name = "signal-hook"
++version = "0.1.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "604508c1418b99dfe1925ca9224829bb2a8a9a04dda655cc01fcad46f4ab05ed"
++dependencies = [
++ "libc",
++ "signal-hook-registry",
++]
++
++[[package]]
++name = "signal-hook-registry"
++version = "1.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a3e12110bc539e657a646068aaf5eb5b63af9d0c1f7b29c97113fad80e15f035"
++dependencies = [
++ "arc-swap",
++ "libc",
++]
++
++[[package]]
++name = "syn"
++version = "1.0.42"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9c51d92969d209b54a98397e1b91c8ae82d8c87a7bb87df0b29aa2ad81454228"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "unicode-xid",
++]
++
++[[package]]
++name = "synstructure"
++version = "0.12.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++ "unicode-xid",
++]
++
++[[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.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f"
++dependencies = [
++ "winapi-util",
++]
++
++[[package]]
++name = "thread-scoped"
++version = "1.0.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "bcbb6aa301e5d3b0b5ef639c9a9c7e2f1c944f177b460c04dc24c69b1fa2bd99"
++
++[[package]]
++name = "thread_local"
++version = "1.0.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
++dependencies = [
++ "lazy_static",
++]
++
++[[package]]
++name = "threadpool"
++version = "1.8.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
++dependencies = [
++ "num_cpus",
++]
++
++[[package]]
++name = "time"
++version = "0.1.44"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
++dependencies = [
++ "libc",
++ "wasi 0.10.0+wasi-snapshot-preview1",
++ "winapi",
++]
++
++[[package]]
++name = "unicode-width"
++version = "0.1.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
++
++[[package]]
++name = "unicode-xid"
++version = "0.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
++
++[[package]]
++name = "users"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c72f4267aea0c3ec6d07eaabea6ead7c5ddacfafc5e22bcf8d186706851fb4cf"
++dependencies = [
++ "libc",
++]
++
++[[package]]
++name = "version_check"
++version = "0.9.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed"
++
++[[package]]
++name = "void"
++version = "1.0.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
++
++[[package]]
++name = "wasi"
++version = "0.9.0+wasi-snapshot-preview1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
++
++[[package]]
++name = "wasi"
++version = "0.10.0+wasi-snapshot-preview1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
++
++[[package]]
++name = "winapi"
++version = "0.3.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
++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.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
++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 = "xattr"
++version = "0.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c"
++dependencies = [
++ "libc",
++]
diff --git a/pkgs/tools/filesystems/sandboxfs/default.nix b/pkgs/tools/filesystems/sandboxfs/default.nix
new file mode 100644
index 00000000000..7d6d6119878
--- /dev/null
+++ b/pkgs/tools/filesystems/sandboxfs/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, fuse
+, pkg-config
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sandboxfs";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "bazelbuild";
+    repo = pname;
+    rev = "sandboxfs-${version}";
+    sha256 = "Ia6rq6FN4abnvLXjlQh4Q+8ra5JThKnC86UXC7s9//U=";
+  };
+
+  cargoSha256 = "sha256-fAPMAVvcI3pm3zTLATO7SUdZpG469fjlBZshFhgv6gY=";
+
+  # Issue to add Cargo.lock upstream: https://github.com/bazelbuild/sandboxfs/pull/115
+  cargoPatches = [ ./Cargo.lock.patch ];
+
+  nativeBuildInputs = [ pkg-config installShellFiles ];
+
+  buildInputs = [ fuse ];
+
+  postInstall = "installManPage man/sandboxfs.1";
+
+  meta = with lib; {
+    description = "A virtual file system for sandboxing";
+    homepage = "https://github.com/bazelbuild/sandboxfs";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ jeremyschlatter ];
+  };
+}
diff --git a/pkgs/tools/filesystems/sasquatch/default.nix b/pkgs/tools/filesystems/sasquatch/default.nix
index d4c7d9b7667..b14dc620e42 100644
--- a/pkgs/tools/filesystems/sasquatch/default.nix
+++ b/pkgs/tools/filesystems/sasquatch/default.nix
@@ -1,35 +1,43 @@
-{ fetchFromGitHub
-, fetchurl
-, lz4 ? null
-, lz4Support ? false
-, lzma
-, lzo
+{ lib
 , stdenv
+, fetchFromGitHub
+, fetchurl
 , xz
+, lzo
 , zlib
+, zstd
+, lz4
+, lz4Support ? false
 }:
 
-assert lz4Support -> (lz4 != null);
-
 let
-  patch = fetchFromGitHub {
-    owner = "devttys0";
-    repo = "sasquatch";
-    rev = "3e0cc40fc6dbe32bd3a5e6c553b3320d5d91ceed";
-    sha256 = "19lhndjv7v9w6nmszry63zh5rqii9v7wvsbpc2n6q606hyz955g2";
-  } + "/patches/patch0.txt";
+  patch = fetchFromGitHub
+    {
+      # NOTE: This uses my personal fork for now, until
+      # https://github.com/devttys0/sasquatch/pull/40 is merged.
+      # I, cole-h, will keep this fork available until that happens.
+      owner = "cole-h";
+      repo = "sasquatch";
+      rev = "6edc54705454c6410469a9cb5bc58e412779731a";
+      sha256 = "x+PuPYGD4Pd0fcJtlLWByGy/nggsmZkxwSXxJfPvUgo=";
+    } + "/patches/patch0.txt";
 in
 stdenv.mkDerivation rec {
   pname = "sasquatch";
-  version = "4.3";
+  version = "4.4";
 
   src = fetchurl {
-    url = "mirror://sourceforge/squashfs/squashfs4.3.tar.gz";
-    sha256 = "1xpklm0y43nd9i6jw43y2xh5zvlmj9ar2rvknh0bh7kv8c95aq0d";
+    url = "mirror://sourceforge/squashfs/squashfs${version}.tar.gz";
+    sha256 = "qYGz8/IFS1ouZYhRo8BqJGCtBKmopkXgr+Bjpj/bsH4=";
   };
 
-  buildInputs = [ lzma lzo xz zlib ]
-    ++ stdenv.lib.optional lz4Support lz4;
+  buildInputs = [
+    xz
+    lzo
+    zlib
+    zstd
+  ]
+  ++ lib.optionals lz4Support [ lz4 ];
 
   patches = [ patch ];
   patchFlags = [ "-p0" ];
@@ -41,9 +49,9 @@ stdenv.mkDerivation rec {
   installFlags = [ "INSTALL_DIR=\${out}/bin" ];
 
   makeFlags = [ "XZ_SUPPORT=1" ]
-    ++ stdenv.lib.optional lz4Support "LZ4_SUPPORT=1";
+    ++ lib.optional lz4Support "LZ4_SUPPORT=1";
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/filesystems/securefs/add-macfuse-support.patch b/pkgs/tools/filesystems/securefs/add-macfuse-support.patch
new file mode 100644
index 00000000000..217f637ff9d
--- /dev/null
+++ b/pkgs/tools/filesystems/securefs/add-macfuse-support.patch
@@ -0,0 +1,188 @@
+From 8c65c2219976c02a68e27c28156ec0c4c02857e0 Mon Sep 17 00:00:00 2001
+From: midchildan <git@midchildan.org>
+Date: Sun, 28 Mar 2021 23:39:59 +0900
+Subject: [PATCH] Support the latest FUSE on macOS
+
+This drops osxfuse support in favor of macFUSE. macFUSE is a newer
+version of osxfuse that supports the latest release of macOS, and is a
+rebranded version of the same project.
+---
+ CMakeLists.txt             |  8 ++----
+ LICENSE.md                 | 58 ++++++++++++++++++++------------------
+ README.md                  |  2 +-
+ sources/commands.cpp       |  6 ----
+ 4 files changed, 33 insertions(+), 41 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 7b5e57d..c176554 100755
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -18,12 +18,8 @@ git_describe(GIT_VERSION --tags)
+ configure_file(${CMAKE_SOURCE_DIR}/sources/git-version.cpp.in ${CMAKE_BINARY_DIR}/git-version.cpp)
+ 
+ if (UNIX)
+-    find_path(FUSE_INCLUDE_DIR fuse.h PATHS /usr/local/include PATH_SUFFIXES osxfuse)
+-    if (APPLE)
+-        find_library(FUSE_LIBRARIES osxfuse PATHS /usr/local/lib)
+-    else()
+-        find_library(FUSE_LIBRARIES fuse PATHS /usr/local/lib)
+-    endif()
++    find_path(FUSE_INCLUDE_DIR fuse.h PATHS /usr/local/include)
++    find_library(FUSE_LIBRARIES fuse PATHS /usr/local/lib)
+     include_directories(${FUSE_INCLUDE_DIR})
+     link_libraries(${FUSE_LIBRARIES})
+     add_compile_options(-Wall -Wextra -Wno-unknown-pragmas)
+diff --git a/LICENSE.md b/LICENSE.md
+index a8f920c..b134532 100644
+--- a/LICENSE.md
++++ b/LICENSE.md
+@@ -758,13 +758,11 @@ Public License instead of this License.
+ 
+ ------------------------------------------------------------------------------
+ 
+-# [osxfuse] (https://github.com/osxfuse/osxfuse)
++# [macFUSE] (https://github.com/osxfuse/osxfuse)
+ 
+-FUSE for macOS is a software developed by the osxfuse project and is covered
+-under the following BSD-style license:
++macFUSE is covered under the following license:
+ 
+-  Copyright (c) 2011-2016 Benjamin Fleischer
+-  Copyright (c) 2011-2012 Erik Larsson
++  Copyright (c) 2011-2021 Benjamin Fleischer
+   All rights reserved.
+ 
+   Redistribution  and  use  in  source  and  binary  forms,  with   or   without
+@@ -775,9 +773,13 @@ under the following BSD-style license:
+   2. Redistributions in binary form must reproduce the above  copyright  notice,
+      this list of conditions and the following disclaimer in  the  documentation
+      and/or other materials provided with the distribution.
+-  3. Neither the name of osxfuse nor the names of its contributors may  be  used
+-     to endorse or promote products derived from this software without  specific
+-     prior written permission.
++  3. Neither the name of the copyright holder nor the names of its  contributors
++     may be used to endorse or  promote  products  derived  from  this  software 
++     without specific prior written permission.
++  4. Redistributions in binary form, bundled with commercial software,  are  not
++     allowed without  specific  prior  written  permission.  This  includes  the
++     automated download or installation or  both  of  the  binary  form  in  the
++     context of commercial software.
+ 
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND  CONTRIBUTORS  "AS  IS"
+   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,  BUT  NOT  LIMITED  TO,  THE
+@@ -791,9 +793,9 @@ under the following BSD-style license:
+   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN  IF  ADVISED  OF  THE
+   POSSIBILITY OF SUCH DAMAGE.
+ 
+-FUSE for macOS is a fork of MacFUSE. MacFUSE has been developed by Google Inc..
+-Additional information and the original source of MacFUSE are available on
+-http://code.google.com/p/macfuse/. MacFUSE is covered under the following
++macFUSE is a fork of the legacy Google MacFUSE software. Additional information
++and the original source code of Google MacFUSE are available on
++http://code.google.com/p/macfuse/. Google MacFUSE is covered under the following
+ BSD-style license:
+ 
+   Copyright (c) 2007—2009 Google Inc.
+@@ -830,9 +832,9 @@ BSD-style license:
+ Portions of this package were derived from code developed by other authors.
+ Please read further for specific details.
+ 
+-* Unless otherwise noted, parts of the FUSE for macOS kernel extension contain
+-  code derived from the FreeBSD version of FUSE, which is covered under the
+-  following BSD-style license:
++* Unless otherwise noted, parts of the macFUSE kernel extension contain code
++  derived from the FreeBSD version of FUSE, which is covered under the following
++  BSD-style license:
+ 
+     Copyright (C) 2005 Csaba Henk. All rights reserved.
+ 
+@@ -856,12 +858,13 @@ Please read further for specific details.
+     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  OF  THE  USE  OF
+     THIS  SOFTWARE,  EVEN  IF  ADVISED  OF  THE  POSSIBILITY  OF  SUCH   DAMAGE.
+ 
+-* Parts of the FUSE for macOS kernel extension contain code derived from Tuxera
+-  Inc.'s "rebel" branch. The original source of the "rebel" branch is available
+-  on https://github.com/tuxera. These modifications are covered under the
+-  following BSD-style license:
++* Parts of the macFUSE kernel extension contain code derived from Tuxera's
++  "rebel" branch. The original source code of the "rebel" branch is available on
++  https://github.com/tuxera. These modifications are covered under the following
++  BSD-style license:
+ 
+     Copyright (c) 2010 Tuxera Inc.
++    Copyright (c) 2011-2012 Erik Larsson
+     All rights reserved.
+ 
+     Redistribution  and  use  in  source  and  binary  forms,  with  or  without
+@@ -888,9 +891,9 @@ Please read further for specific details.
+     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED  OF  THE
+     POSSIBILITY OF SUCH DAMAGE.
+ 
+-* Parts of FUSE for macOS contain code derived from Fuse4X. The original source
+-  of Fuse4X is available on https://github.com/fuse4x. Fuse4X is covered under
+-  the following BSD-style license:
++* Parts of macFUSE contain code derived from Fuse4X. The original source code of
++  Fuse4X is available on https://github.com/fuse4x. Fuse4X is covered under the
++  following BSD-style license:
+ 
+     Copyright (c) 2011 Anatol Pomozov
+     All rights reserved.
+@@ -916,21 +919,20 @@ Please read further for specific details.
+     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED  OF  THE
+     POSSIBILITY OF SUCH DAMAGE.
+ 
+-* Parts of the mount_osxfuse command-line program are covered under the Apple
++* Parts of the mount_macfuse command-line program are covered under the Apple
+   Public Source License (APSL). You can read the APSL at:
+ 
+     http://www.opensource.apple.com/license/apsl/
+ 
+-* fuse_kernel.h is an unmodified copy of the interface header from the Linux
++* fuse_kernel.h is a modified copy of the interface header from the Linux
+   FUSE distribution (https://github.com/libfuse/libfuse). fuse_kernel.h can be
+   redistributed either under the GPL or under the BSD license. It is being
+   redistributed here under the BSD license.
+ 
+-* fuse_nodehash.c is a slightly modified version of HashNode.c from an
+-  Apple Developer Technical Support (DTS) sample code example. The original
+-  source, which is available on
+-  http://developer.apple.com/library/mac/#samplecode/MFSLives/, has the
+-  following disclaimer:
++* fuse_nodehash.c is a modified version of HashNode.c from an Apple Developer
++  Technical Support (DTS) sample code example. The original source, which is
++  available on http://developer.apple.com/library/mac/#samplecode/MFSLives/,
++  has the following disclaimer:
+ 
+     Disclaimer: IMPORTANT: This Apple software  is  supplied  to  you  by  Apple
+     Computer, Inc.  Apple") in consideration of your agreement to the  following
+diff --git a/README.md b/README.md
+index 9085e96..6fe3592 100644
+--- a/README.md
++++ b/README.md
+@@ -28,7 +28,7 @@ There are already many encrypting filesystem in widespread use. Some notable one
+ 
+ ### macOS
+ 
+-Install with [Homebrew](https://brew.sh). [osxfuse](https://osxfuse.github.io) has to be installed beforehand.
++Install with [Homebrew](https://brew.sh). [macFUSE](https://osxfuse.github.io) has to be installed beforehand.
+ ```
+ brew install securefs
+ ```
+diff --git a/sources/commands.cpp b/sources/commands.cpp
+index a371212..862602b 100644
+--- a/sources/commands.cpp
++++ b/sources/commands.cpp
+@@ -1252,12 +1252,6 @@ class VersionCommand : public CommandBase
+                 printf("WinFsp %u.%u\n", vn >> 16, vn & 0xFFFFu);
+             }
+         }
+-#elif defined(__APPLE__)
+-        typedef const char* version_function(void);
+-        auto osx_version_func
+-            = reinterpret_cast<version_function*>(::dlsym(RTLD_DEFAULT, "osxfuse_version"));
+-        if (osx_version_func)
+-            printf("osxfuse %s\n", osx_version_func());
+ #else
+         typedef int version_function(void);
+         auto fuse_version_func
+
diff --git a/pkgs/tools/filesystems/securefs/default.nix b/pkgs/tools/filesystems/securefs/default.nix
index c5a5af212d9..44e547b01c2 100644
--- a/pkgs/tools/filesystems/securefs/default.nix
+++ b/pkgs/tools/filesystems/securefs/default.nix
@@ -1,24 +1,29 @@
-{ stdenv, fetchFromGitHub
+{ lib, stdenv, fetchFromGitHub
 , cmake
 , fuse }:
 
 stdenv.mkDerivation rec {
   pname = "securefs";
-  version = "0.8.3";
+  version = "0.11.1";
 
   src = fetchFromGitHub {
-    sha256 = "0nf0bd163gz844mikqab2mh7xjlj31ixa6hi85qxdifyjpfjv7y4";
+    sha256 = "1sxfgqgy63ml7vg7zj3glvra4wj2qmfv9jzmpm1jqy8hq7qlqlsx";
     rev = version;
     repo = "securefs";
     owner = "netheril96";
+    fetchSubmodules = true;
   };
 
+  patches = [
+    # Make it build with macFUSE
+    # Backported from https://github.com/netheril96/securefs/pull/114
+    ./add-macfuse-support.patch
+  ];
+
   nativeBuildInputs = [ cmake ];
   buildInputs = [ fuse ];
 
-  enableParallelBuilding = true;
-
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit (src.meta) homepage;
     description = "Transparent encryption filesystem";
     longDescription = ''
@@ -32,6 +37,6 @@ stdenv.mkDerivation rec {
       contents.
     '';
     license = with licenses; [ bsd2 mit ];
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/filesystems/sftpman/default.nix b/pkgs/tools/filesystems/sftpman/default.nix
new file mode 100644
index 00000000000..e89012b76f6
--- /dev/null
+++ b/pkgs/tools/filesystems/sftpman/default.nix
@@ -0,0 +1,25 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "sftpman";
+  version = "1.1.3";
+
+  src = fetchFromGitHub {
+    owner = "spantaleev";
+    repo = pname;
+    rev = version;
+    sha256 = "04awwwfw51fi1q18xdysp54jyhr0rhb4kfyrgv0vhhrlpwwyhnqy";
+  };
+
+  checkPhase = ''
+    $out/bin/sftpman help
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/spantaleev/sftpman";
+    description = "Application that handles sshfs/sftp file systems mounting";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ contrun ];
+  };
+}
diff --git a/pkgs/tools/filesystems/simg2img/default.nix b/pkgs/tools/filesystems/simg2img/default.nix
index 6782987c027..d0d7304c9d2 100644
--- a/pkgs/tools/filesystems/simg2img/default.nix
+++ b/pkgs/tools/filesystems/simg2img/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, zlib }:
+{ lib, stdenv, fetchFromGitHub, zlib }:
 
 stdenv.mkDerivation rec {
   pname = "simg2img";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tool to convert Android sparse images to raw images";
     homepage = "https://github.com/anestisb/android-simg2img";
     license = licenses.asl20;
diff --git a/pkgs/tools/filesystems/smbnetfs/default.nix b/pkgs/tools/filesystems/smbnetfs/default.nix
index 04c7d7c9d2a..bb042a95ecc 100644
--- a/pkgs/tools/filesystems/smbnetfs/default.nix
+++ b/pkgs/tools/filesystems/smbnetfs/default.nix
@@ -1,28 +1,23 @@
-{ stdenv, fetchurl, fuse, samba, pkgconfig, glib, autoconf, attr, libsecret }:
+{ lib, stdenv, fetchurl, fuse, samba, pkg-config, glib, autoconf, attr, libsecret }:
 
 stdenv.mkDerivation rec {
   pname = "smbnetfs";
-  version = "0.6.2";
+  version = "0.6.3";
   src = fetchurl {
     url = "mirror://sourceforge/project/smbnetfs/smbnetfs/SMBNetFS-${version}/${pname}-${version}.tar.bz2";
-    sha256 = "19x9978k90w9a65lrpsphk7swsq8zkws9jc27q4zbndrm0r2snr0";
+    sha256 = "sha256-6sN7l2n76cP0uvPrZMYaa1mtTyqgXf3culoaxK301WA=";
   };
 
-  nativeBuildInputs = [ pkgconfig autoconf ];
+  nativeBuildInputs = [ pkg-config autoconf ];
   buildInputs = [ fuse samba glib attr libsecret ];
 
-  postPatch = ''
-    substituteInPlace src/function.c --replace "attr/xattr.h" "sys/xattr.h"
-  '';
-
-  meta = with stdenv.lib; {
+  meta = with 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/pkgs/tools/filesystems/snapraid/default.nix b/pkgs/tools/filesystems/snapraid/default.nix
index de6d25e128a..d854558b792 100644
--- a/pkgs/tools/filesystems/snapraid/default.nix
+++ b/pkgs/tools/filesystems/snapraid/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   pname = "snapraid";
@@ -21,8 +21,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.makefu ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/filesystems/squashfs-tools-ng/default.nix b/pkgs/tools/filesystems/squashfs-tools-ng/default.nix
index 0c977799db8..cb4f3820bcc 100644
--- a/pkgs/tools/filesystems/squashfs-tools-ng/default.nix
+++ b/pkgs/tools/filesystems/squashfs-tools-ng/default.nix
@@ -1,24 +1,37 @@
-{ stdenv, lib, fetchurl, doxygen, graphviz, perl, pkgconfig
-, lz4, lzo, xz, zlib, zstd
+{ stdenv, lib, fetchurl, doxygen, graphviz, perl, pkg-config
+, bzip2, lz4, lzo, xz, zlib, zstd
 }:
 
 stdenv.mkDerivation rec {
   pname = "squashfs-tools-ng";
-  version = "1.0.1";
+  version = "1.1.2";
 
   src = fetchurl {
     url = "https://infraroot.at/pub/squashfs/squashfs-tools-ng-${version}.tar.xz";
-    sha256 = "120x2hlbhpm90bzxz70z764552ffrjpidmp1y6gafx70zp0hrks4";
+    sha256 = "0hlrbiy8xmccczi11ml0lzmg3946l9ck5wpfyw03wn5zgvx29zja";
   };
 
-  nativeBuildInputs = [ doxygen graphviz pkgconfig perl ];
-  buildInputs = [ zlib xz lz4 lzo zstd ];
+  nativeBuildInputs = [ doxygen graphviz pkg-config perl ];
+  buildInputs = [ bzip2 zlib xz lz4 lzo zstd ];
+
+  enableParallelBuilding = true;
 
   meta = with lib; {
     homepage = "https://github.com/AgentD/squashfs-tools-ng";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ qyliss ];
     platforms = platforms.unix;
-    broken = stdenv.isDarwin;
+
+    # TODO: Remove once nixpkgs uses newer SDKs that supports '*at' functions.
+    # Probably macOS SDK 10.13 or later. Check the current version in
+    # ../../../../os-specific/darwin/apple-sdk/default.nix
+    #
+    # From the build logs:
+    #
+    # > Undefined symbols for architecture x86_64:
+    # >   "_utimensat", referenced from:
+    # >       _set_attribs in rdsquashfs-restore_fstree.o
+    # > ld: symbol(s) not found for architecture x86_64
+    broken = stdenv.isDarwin && stdenv.isx86_64;
   };
 }
diff --git a/pkgs/tools/filesystems/squashfs/4k-align.patch b/pkgs/tools/filesystems/squashfs/4k-align.patch
index e73c0678875..db0af95601c 100644
--- a/pkgs/tools/filesystems/squashfs/4k-align.patch
+++ b/pkgs/tools/filesystems/squashfs/4k-align.patch
@@ -1,6 +1,7 @@
-This patch has been edited to apply to squashfs 4.4, commit
-52eb4c279cd283ed9802dd1ceb686560b22ffb67. Below is the original
-message body of the patch.
+This patch is an old patch; see below for the original message body. The patch
+has been updated twice: Once to apply to squashfs 4.4, commit
+52eb4c279cd283ed9802dd1ceb686560b22ffb67, and later to apply to squashfs 4.5,
+commit 0496d7c3de3e09da37ba492081c86159806ebb07.
 
 From 7bda7c75748f36b0a50f93e46144d5a4de4974ad Mon Sep 17 00:00:00 2001
 From: Amin Hassani <ahassani@google.com>
@@ -20,24 +21,23 @@ increased_size = (number_of_unfragmented_files_in_image + number of fragments) *
 
 The 4k alignment can be enabled by flag '-4k-align'
 ---
- squashfs-tools/mksquashfs.c | 16 ++++++++++++++++
- 1 file changed, 16 insertions(+)
+ squashfs-tools/mksquashfs.c | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
 
 diff --git a/squashfs-tools/mksquashfs.c b/squashfs-tools/mksquashfs.c
-index a45b77f..07b1c06 100644
+index aaa4b00..eb2fb23 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;
+@@ -99,6 +99,8 @@ int nopad = FALSE;
  int exit_on_error = FALSE;
-+int do_4k_align = FALSE;
  long long start_offset = 0;
+ int sleep_time = 0;
++int do_4k_align = FALSE;
 +#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()
+@@ -1553,6 +1555,9 @@ static void unlock_fragments()
  	 * queue at this time.
  	 */
  	while(!queue_empty(locked_fragment)) {
@@ -47,7 +47,7 @@ index a45b77f..07b1c06 100644
  		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)
+@@ -2460,6 +2465,9 @@ static void *frag_deflator(void *arg)
  		write_buffer->size = compressed_size;
  		pthread_mutex_lock(&fragment_mutex);
  		if(fragments_locked == FALSE) {
@@ -57,18 +57,26 @@ index a45b77f..07b1c06 100644
  			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;
+@@ -2850,6 +2858,10 @@ static struct file_info *write_file_blocks(int *status, struct dir_ent *dir_ent,
+ 	struct file_info *file;
+ 	int bl_hash = 0;
  
 +	// 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);
+ 	if(pre_duplicate(read_size, dir_ent->inode, read_buffer, &bl_hash))
+ 		return write_file_blocks_dup(status, dir_ent, read_buffer, dup, bl_hash);
  
-@@ -4972,6 +4984,7 @@ void write_filesystem_tables(struct squashfs_super_block *sBlk, int nopad)
+@@ -5975,6 +5987,7 @@ static void print_options(FILE *stream, char *name, int total_mem)
+ 	fprintf(stream, "actions from <f>\n");
+ 	fprintf(stream, "-false-action-file <f>\tas -false-action, but read ");
+ 	fprintf(stream, "actions from <f>\n");
++	fprintf(stream, "-4k-align\t\tenables 4k alignment of all files\n");
+ 	fprintf(stream, "\nFilesystem filter options:\n");
+ 	fprintf(stream, "-p <pseudo-definition>\tAdd pseudo file definition\n");
+ 	fprintf(stream, "-pf <pseudo-file>\tAdd list of pseudo file definitions\n");
+@@ -6198,6 +6211,7 @@ static void print_summary()
  		"compressed", no_fragments ? "no" : noF ? "uncompressed" :
  		"compressed", no_xattrs ? "no" : noX ? "uncompressed" :
  		"compressed", noI || noId ? "uncompressed" : "compressed");
@@ -76,23 +84,15 @@ index a45b77f..07b1c06 100644
  	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:
+@@ -7499,6 +7513,9 @@ print_compressor_options:
  			root_name = argv[i];
  		} else if(strcmp(argv[i], "-version") == 0) {
- 			VERSION();
+ 			print_version("mksquashfs");
++
 +		} 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");
+ 			print_options(stderr, argv[0], total_mem);
 -- 
-2.23.0
-
+2.32.0
diff --git a/pkgs/tools/filesystems/squashfs/default.nix b/pkgs/tools/filesystems/squashfs/default.nix
index 645633a87e1..2c8cd317f66 100644
--- a/pkgs/tools/filesystems/squashfs/default.nix
+++ b/pkgs/tools/filesystems/squashfs/default.nix
@@ -1,44 +1,50 @@
-{ stdenv, fetchFromGitHub, zlib, xz
-, lz4 ? null
-, lz4Support ? false
+{ lib
+, stdenv
+, fetchFromGitHub
+, zlib
+, xz
+, lz4
+, lzo
 , zstd
 }:
 
-assert lz4Support -> (lz4 != null);
-
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "squashfs";
-  version = "4.4";
+  version = "4.5";
 
   src = fetchFromGitHub {
     owner = "plougher";
     repo = "squashfs-tools";
-    sha256 = "0697fv8n6739mcyn57jclzwwbbqwpvjdfkv1qh9s56lvyqnplwaw";
-    # Tag "4.4" points to this commit.
-    rev = "52eb4c279cd283ed9802dd1ceb686560b22ffb67";
+    rev = version;
+    sha256 = "1nanwz5qvsakxfm37md5i7xqagv69nfik9hpj8qlp6ymw266vgxr";
   };
 
   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;
+  ] ++ lib.optional stdenv.isDarwin ./darwin.patch;
 
-  buildInputs = [ zlib xz zstd ]
-    ++ stdenv.lib.optional lz4Support lz4;
+  buildInputs = [ zlib xz zstd lz4 lzo ];
 
-  preBuild = "cd squashfs-tools";
+  preBuild = ''
+    cd squashfs-tools
+  '' ;
 
-  installFlags = [ "INSTALL_DIR=\${out}/bin" ];
+  installFlags = [ "INSTALL_DIR=${placeholder "out"}/bin" ];
 
-  makeFlags = [ "XZ_SUPPORT=1" "ZSTD_SUPPORT=1" ]
-    ++ stdenv.lib.optional lz4Support "LZ4_SUPPORT=1";
+  makeFlags = [
+    "XZ_SUPPORT=1"
+    "ZSTD_SUPPORT=1"
+    "LZ4_SUPPORT=1"
+    "LZO_SUPPORT=1"
+  ];
 
-  meta = {
-    homepage = "http://squashfs.sourceforge.net/";
+  meta = with lib; {
+    homepage = "https://github.com/plougher/squashfs-tools";
     description = "Tool for creating and unpacking squashfs filesystems";
-    platforms = stdenv.lib.platforms.unix;
-    license = stdenv.lib.licenses.gpl2Plus;
-    maintainers = with stdenv.lib.maintainers; [ ruuda ];
+    platforms = platforms.unix;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ruuda ];
   };
 }
diff --git a/pkgs/tools/filesystems/squashfuse/default.nix b/pkgs/tools/filesystems/squashfuse/default.nix
index 27335a9cf5d..14a7f602430 100644
--- a/pkgs/tools/filesystems/squashfuse/default.nix
+++ b/pkgs/tools/filesystems/squashfuse/default.nix
@@ -1,25 +1,13 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, libtool, fuse,
-  pkgconfig, lz4, xz, zlib, lzo, zstd }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libtool, fuse,
+  pkg-config, lz4, xz, zlib, lzo, zstd }:
 
-with stdenv.lib;
+with 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;
@@ -27,6 +15,14 @@ stdenv.mkDerivation rec {
     sha256 = "062s77y32p80vc24a79z31g90b9wxzvws1xvicgx5fn1pd0xa0q6";
   };
 
-  nativeBuildInputs = [ autoreconfHook libtool pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook libtool pkg-config ];
   buildInputs = [ lz4 xz zlib lzo zstd fuse ];
+
+  meta = {
+    description = "FUSE filesystem to mount squashfs archives";
+    homepage = "https://github.com/vasi/squashfuse";
+    maintainers = [  ];
+    platforms = platforms.unix;
+    license = "BSD-2-Clause";
+  };
 }
diff --git a/pkgs/tools/filesystems/sshfs-fuse/common.nix b/pkgs/tools/filesystems/sshfs-fuse/common.nix
new file mode 100644
index 00000000000..f85faa712dd
--- /dev/null
+++ b/pkgs/tools/filesystems/sshfs-fuse/common.nix
@@ -0,0 +1,61 @@
+{ version, sha256, platforms, patches ? [ ] }:
+
+{ lib, stdenv, fetchFromGitHub
+, meson, pkg-config, ninja, docutils, makeWrapper
+, fuse3, macfuse-stubs, glib
+, which, python3Packages
+, openssh
+}:
+
+let
+  fuse = if stdenv.isDarwin then macfuse-stubs else fuse3;
+in stdenv.mkDerivation rec {
+  pname = "sshfs-fuse";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "libfuse";
+    repo = "sshfs";
+    rev = "sshfs-${version}";
+    inherit sha256;
+  };
+
+  inherit patches;
+
+  nativeBuildInputs = [ meson pkg-config ninja docutils makeWrapper ];
+  buildInputs = [ fuse glib ];
+  checkInputs = [ which python3Packages.pytest ];
+
+  NIX_CFLAGS_COMPILE = 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
+  '' + lib.optionalString (!stdenv.isDarwin) ''
+    wrapProgram $out/bin/sshfs --prefix PATH : "${openssh}/bin"
+  '';
+
+  # doCheck = true;
+  checkPhase = lib.optionalString (!stdenv.isDarwin) ''
+    # The tests need fusermount:
+    mkdir bin
+    cp ${fuse}/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
+    ${python3Packages.python.interpreter} -m pytest test/
+  '';
+
+  meta = with lib; {
+    inherit platforms;
+    description = "FUSE-based filesystem that allows remote filesystems to be mounted over SSH";
+    longDescription = macfuse-stubs.warning;
+    homepage = "https://github.com/libfuse/sshfs";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/pkgs/tools/filesystems/sshfs-fuse/default.nix b/pkgs/tools/filesystems/sshfs-fuse/default.nix
index 018dfe7858e..879199347bd 100644
--- a/pkgs/tools/filesystems/sshfs-fuse/default.nix
+++ b/pkgs/tools/filesystems/sshfs-fuse/default.nix
@@ -1,52 +1,28 @@
-{ stdenv, fetchFromGitHub
-, meson, pkgconfig, ninja, docutils, makeWrapper
-, fuse3, glib
-, which, python3Packages
-, openssh
-}:
+{ lib, stdenv, callPackage, fetchpatch }:
 
-stdenv.mkDerivation rec {
-  version = "3.7.0";
-  pname = "sshfs-fuse";
+let mkSSHFS = args: callPackage (import ./common.nix args) { };
+in if stdenv.isDarwin then
+  mkSSHFS {
+    version = "2.10"; # macFUSE isn't yet compatible with libfuse 3.x
+    sha256 = "1dmw4kx6vyawcywiv8drrajnam0m29mxfswcp4209qafzx3mjlp1";
+    patches = [
+      # remove reference to fuse_darwin.h which doens't exist on recent macFUSE
+      ./fix-fuse-darwin-h.patch
 
-  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 ];
-  };
-}
+      # From https://github.com/libfuse/sshfs/pull/185:
+      # > With this patch, setting I/O size to a reasonable large value, will
+      # > result in much improved performance, e.g.: -o iosize=1048576
+      (fetchpatch {
+        name = "fix-configurable-blksize.patch";
+        url = "https://github.com/libfuse/sshfs/commit/667cf34622e2e873db776791df275c7a582d6295.patch";
+        sha256 = "0d65lawd2g2aisk1rw2vl65dgxywf4vqgv765n9zj9zysyya8a54";
+      })
+    ];
+    platforms = lib.platforms.darwin;
+  }
+else
+  mkSSHFS {
+    version = "3.7.2";
+    sha256 = "0i0ycgwdxja8313hlkrlwrl85a4ykkyqddgg484jkr4rnr7ylk8w";
+    platforms = lib.platforms.linux;
+  }
diff --git a/pkgs/tools/filesystems/sshfs-fuse/fix-fuse-darwin-h.patch b/pkgs/tools/filesystems/sshfs-fuse/fix-fuse-darwin-h.patch
new file mode 100644
index 00000000000..045cc0e61f3
--- /dev/null
+++ b/pkgs/tools/filesystems/sshfs-fuse/fix-fuse-darwin-h.patch
@@ -0,0 +1,14 @@
+diff --git a/sshfs.c b/sshfs.c
+index 97eaf06..d442577 100644
+--- a/sshfs.c
++++ b/sshfs.c
+@@ -14,9 +14,6 @@
+ #if !defined(__CYGWIN__)
+ #include <fuse_lowlevel.h>
+ #endif
+-#ifdef __APPLE__
+-#  include <fuse_darwin.h>
+-#endif
+ #include <assert.h>
+ #include <stdio.h>
+ #include <stdlib.h>
diff --git a/pkgs/tools/filesystems/supertag/default.nix b/pkgs/tools/filesystems/supertag/default.nix
new file mode 100644
index 00000000000..a9a16582c11
--- /dev/null
+++ b/pkgs/tools/filesystems/supertag/default.nix
@@ -0,0 +1,41 @@
+{ lib, rustPlatform, fetchFromGitHub
+, clang, llvmPackages, pkg-config
+, dbus, fuse, sqlite
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "supertag";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "amoffat";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0jzm7pn38hlr96n0z8gqfsfdbw48y0nnbsgjdq7hpgwmcgvgqdam";
+  };
+
+  cargoSha256 = "093vrpp4in8854hb0h1lxrp8v6i9vfja0l69dnnp7z15qkpbir4f";
+
+  LIBCLANG_PATH = "${llvmPackages.libclang.lib}/lib";
+
+  nativeBuildInputs = [ clang pkg-config ];
+  buildInputs = [ dbus fuse sqlite ];
+
+  # The test are requiring extended permissions.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A tag-based filesystem";
+    longDescription = ''
+      Supertag is a tag-based filesystem, written in Rust, for Linux and MacOS.
+      It provides a tag-based view of your files by removing the hierarchy
+      constraints typically imposed on files and folders. In other words, it
+      allows you to think about your files not as objects stored in folders, but
+      as objects that can be filtered by folders.
+    '';
+    homepage = "https://github.com/amoffat/supertag";
+    license = licenses.agpl3Plus;
+    platforms = [ "i686-linux" "x86_64-linux" ];
+    maintainers = with maintainers; [ oxzi ];
+  };
+}
diff --git a/pkgs/tools/filesystems/svnfs/default.nix b/pkgs/tools/filesystems/svnfs/default.nix
index 4ae4ebb6f19..a192032aa93 100644
--- a/pkgs/tools/filesystems/svnfs/default.nix
+++ b/pkgs/tools/filesystems/svnfs/default.nix
@@ -1,14 +1,26 @@
-{ stdenv, fetchurl, automake, autoconf, subversion, fuse, apr, perl }: 
+{ lib, stdenv, fetchurl, autoreconfHook, subversion, fuse, apr, perl }:
 
-stdenv.mkDerivation {
-  name = "svnfs-0.4";
+stdenv.mkDerivation rec {
+  pname = "svnfs";
+  version = "0.4";
 
   src = fetchurl {
-    url = "http://www.jmadden.eu/wp-content/uploads/svnfs/svnfs-0.4.tgz";
+    url = "http://www.jmadden.eu/wp-content/uploads/svnfs/svnfs-${version}.tgz";
     sha256 = "1lrzjr0812lrnkkwk60bws9k1hq2iibphm0nhqyv26axdsygkfky";
   };
 
-  buildInputs = [automake autoconf subversion fuse apr perl];
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ subversion fuse apr perl ];
+
+  # autoconf's AC_CHECK_HEADERS and AC_CHECK_LIBS fail to detect libfuse on
+  # Darwin if FUSE_USE_VERSION isn't set at configure time.
+  #
+  # NOTE: Make sure the value of FUSE_USE_VERSION specified here matches the
+  # actual version used in the source code:
+  #
+  #     $ tar xf "$(nix-build -A svnfs.src)"
+  #     $ grep -R FUSE_USE_VERSION
+  configureFlags = lib.optionals stdenv.isDarwin [ "CFLAGS=-DFUSE_USE_VERSION=25" ];
 
   # why is this required?
   preConfigure=''
@@ -21,8 +33,8 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.gpl2Only;
+    maintainers = [lib.maintainers.marcweber];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/filesystems/tmsu/default.nix b/pkgs/tools/filesystems/tmsu/default.nix
index 5efa218ed08..aa3057202c7 100644
--- a/pkgs/tools/filesystems/tmsu/default.nix
+++ b/pkgs/tools/filesystems/tmsu/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub, fuse, installShellFiles }:
+{ lib, buildGoPackage, fetchFromGitHub, installShellFiles }:
 
 buildGoPackage rec {
   pname = "tmsu";
@@ -14,7 +14,6 @@ buildGoPackage rec {
 
   goDeps = ./deps.nix;
 
-  buildInputs = [ fuse ];
   nativeBuildInputs = [ installShellFiles ];
 
   preBuild = ''
@@ -24,17 +23,20 @@ buildGoPackage rec {
   '';
 
   postInstall = ''
-    mv $out/bin/{TMSU,tmsu}
+    # can't do "mv TMSU tmsu" on case-insensitive filesystems
+    mv $out/bin/{TMSU,tmsu.tmp}
+    mv $out/bin/{tmsu.tmp,tmsu}
+
     cp src/misc/bin/* $out/bin/
     installManPage src/misc/man/tmsu.1
     installShellCompletion --zsh src/misc/zsh/_tmsu
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    license     = licenses.gpl3Plus;
+    platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/tools/filesystems/tmsu/deps.nix b/pkgs/tools/filesystems/tmsu/deps.nix
index 90e64b434c4..7dee6324b67 100644
--- a/pkgs/tools/filesystems/tmsu/deps.nix
+++ b/pkgs/tools/filesystems/tmsu/deps.nix
@@ -5,8 +5,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/hanwen/go-fuse";
-      rev = "730713460d4fc41afdc2533bd37ff60c94c0c586";
-      sha256 = "1y44d08fxyis99s6jxdr6dbbw5kv3wb8lkhq3xmr886i4w41lz03";
+      rev = "0f728ba15b38579efefc3dc47821882ca18ffea7";
+      sha256 = "05ymw2pp58avf19wvi0cgdzqf3d88k1jdf6ldj4hmhbkm3waqf7l";
     };
   }
   {
diff --git a/pkgs/tools/filesystems/u3-tool/default.nix b/pkgs/tools/filesystems/u3-tool/default.nix
index f18eb9e8227..6abab83b0fd 100644
--- a/pkgs/tools/filesystems/u3-tool/default.nix
+++ b/pkgs/tools/filesystems/u3-tool/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "u3-tool";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
     sha256 = "1p9c9kibd1pdbdfa0nd0i3n7bvzi3xg0chm38jg3xfl8gsn0390f";
   };
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/filesystems/ubidump/default.nix b/pkgs/tools/filesystems/ubidump/default.nix
new file mode 100644
index 00000000000..bf141c8d94d
--- /dev/null
+++ b/pkgs/tools/filesystems/ubidump/default.nix
@@ -0,0 +1,40 @@
+{ lib, fetchFromGitHub, python3, makeWrapper }:
+
+python3.pkgs.buildPythonApplication rec {
+
+  pname = "ubidump";
+  version = "unstable-2019-09-11";
+
+  src = fetchFromGitHub {
+    owner = "nlitsme";
+    repo = pname;
+    rev = "0691f1a9a38604c2baf8c9af6b826eb2632af74a";
+    sha256 = "1hiivlgni4r3nd5n2rzl5qzw6y2wpjpmyls5lybrc8imd6rmj3w2";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [ crcmod python-lzo ];
+
+  dontBuild = true;
+
+  patchPhase = ''
+    sed -i '1s;^;#!${python3.interpreter}\n;' ubidump.py
+    patchShebangs ubidump.py
+  '';
+
+  installPhase = ''
+    install -D -m755 ubidump.py $out/bin/ubidump
+    wrapProgram $out/bin/ubidump --set PYTHONPATH $PYTHONPATH
+  '';
+
+  installCheckPhase = ''
+    $out/bin/ubidump -h  > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "View or extract the contents of UBIFS images";
+    homepage = "https://github.com/nlitsme/ubidump";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sgo ];
+  };
+}
+
diff --git a/pkgs/tools/filesystems/udftools/default.nix b/pkgs/tools/filesystems/udftools/default.nix
index 0f52635efc6..ec3fd6efefa 100644
--- a/pkgs/tools/filesystems/udftools/default.nix
+++ b/pkgs/tools/filesystems/udftools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, ncurses, readline, autoreconfHook }:
+{ lib, stdenv, fetchFromGitHub, ncurses, readline, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   pname = "udftools";
@@ -33,7 +33,7 @@ stdenv.mkDerivation rec {
     sed -i -e "s@/usr/sbin/pktsetup@$out/sbin/pktsetup@" $out/lib/udev/rules.d/80-pktsetup.rules
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "UDF tools";
     maintainers = with maintainers; [ raskin ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/filesystems/unionfs-fuse/default.nix b/pkgs/tools/filesystems/unionfs-fuse/default.nix
index 359d8b7abbe..6a34657d3d1 100644
--- a/pkgs/tools/filesystems/unionfs-fuse/default.nix
+++ b/pkgs/tools/filesystems/unionfs-fuse/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, fuse }:
+{ lib, stdenv, fetchFromGitHub, cmake, fuse }:
 
 stdenv.mkDerivation rec {
   pname = "unionfs-fuse";
@@ -11,15 +11,21 @@ stdenv.mkDerivation rec {
     sha256 = "0bwx70x834qgqh53vqp18bhbxbsny80hz922rbgj8k9wj7cbfilm";
   };
 
-  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
-    ];
+  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 ];
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace CMakeLists.txt \
+      --replace '/usr/local/include/osxfuse/fuse' '${fuse}/include/fuse'
+  '';
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ fuse ];
 
   # Put the unionfs mount helper in place as mount.unionfs-fuse. This makes it
   # possible to do:
@@ -27,18 +33,18 @@ stdenv.mkDerivation rec {
   #
   # This must be done in preConfigure because the build process removes
   # helper from the source directory during the build.
-  preConfigure = ''
+  preConfigure = lib.optionalString (!stdenv.isDarwin) ''
     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; {
+  meta = with lib; {
     description = "FUSE UnionFS implementation";
     homepage = "https://github.com/rpodgorny/unionfs-fuse";
     license = licenses.bsd3;
-    platforms = platforms.linux;
+    platforms = platforms.unix;
     maintainers = with maintainers; [ orivej ];
   };
 }
diff --git a/pkgs/tools/filesystems/vmfs-tools/default.nix b/pkgs/tools/filesystems/vmfs-tools/default.nix
index f473fa04334..b60dccc4e68 100644
--- a/pkgs/tools/filesystems/vmfs-tools/default.nix
+++ b/pkgs/tools/filesystems/vmfs-tools/default.nix
@@ -1,6 +1,6 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
-, pkgconfig
+, pkg-config
 , asciidoc
 , docbook_xsl
 , fuse
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
     sha256 = "14y412ww5hxk336ils62s3fwykfh6mx1j0iiaa5cwc615pi6qvi4";
   };
 
-  nativeBuildInputs = [ asciidoc docbook_xsl libxslt pkgconfig ];
+  nativeBuildInputs = [ asciidoc docbook_xsl libxslt pkg-config ];
 
   buildInputs = [ fuse libuuid ];
 
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
     install -Dm444 -t $out/share/doc/${pname} AUTHORS LICENSE README TODO
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "FUSE-based VMFS (vmware) file system tools";
     maintainers = with maintainers; [ peterhoeg ];
     license = licenses.gpl2;
diff --git a/pkgs/tools/filesystems/wdfs/default.nix b/pkgs/tools/filesystems/wdfs/default.nix
index af1caecfd74..29d8b4c2887 100644
--- a/pkgs/tools/filesystems/wdfs/default.nix
+++ b/pkgs/tools/filesystems/wdfs/default.nix
@@ -1,18 +1,27 @@
-{stdenv, fetchurl, glib, neon, fuse, pkgconfig}:
+{lib, stdenv, fetchurl, glib, neon, fuse, autoreconfHook, pkg-config}:
+
+stdenv.mkDerivation rec {
+  pname = "wdfs-fuse";
+  version = "1.4.2";
 
-stdenv.mkDerivation {
-  name = "wdfs-fuse-1.4.2";
   src = fetchurl {
-    url = "http://noedler.de/projekte/wdfs/wdfs-1.4.2.tar.gz";
+    url = "http://noedler.de/projekte/wdfs/wdfs-${version}.tar.gz";
     sha256 = "fcf2e1584568b07c7f3683a983a9be26fae6534b8109e09167e5dff9114ba2e5";
   };
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [fuse glib neon];
 
-  meta = with stdenv.lib; {
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    # Fix the build on macOS with macFUSE installed. Needs autoreconfHook to
+    # take effect.
+    substituteInPlace configure.ac --replace \
+      'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' ""
+  '';
+
+  meta = with lib; {
     homepage = "http://noedler.de/projekte/wdfs/";
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
     description = "User-space filesystem that allows to mount a webdav share";
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/filesystems/wiimms-iso-tools/default.nix b/pkgs/tools/filesystems/wiimms-iso-tools/default.nix
index cb09fdcf131..70c44501409 100644
--- a/pkgs/tools/filesystems/wiimms-iso-tools/default.nix
+++ b/pkgs/tools/filesystems/wiimms-iso-tools/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, zlib, ncurses, fuse}:
+{lib, stdenv, fetchurl, zlib, ncurses, fuse}:
 
 stdenv.mkDerivation rec {
   name = "wiimms-iso-tools";
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
     ./install.sh --no-sudo
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://wit.wiimm.de";
     description = "A set of command line tools to manipulate Wii and GameCube ISO images and WBFS containers";
     license = licenses.gpl2;
diff --git a/pkgs/tools/filesystems/xfsprogs/default.nix b/pkgs/tools/filesystems/xfsprogs/default.nix
index b5254a92024..85efb13b82e 100644
--- a/pkgs/tools/filesystems/xfsprogs/default.nix
+++ b/pkgs/tools/filesystems/xfsprogs/default.nix
@@ -1,51 +1,41 @@
-{ stdenv, buildPackages, fetchpatch, fetchgit, autoconf, automake, gettext, libtool, pkgconfig
-, icu, libuuid, readline
+{ lib, stdenv, buildPackages, fetchpatch, fetchurl, autoconf, automake, gettext, libtool, pkg-config
+, icu, libuuid, readline, inih
 }:
 
-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";
+  version = "5.11.0";
 
-  src = fetchgit {
-    url = "https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git";
-    rev = "v${version}";
-    sha256 = "18728hzfxr1bg4bdzqlxjs893ac1zwlfr7nmc2q4a1sxs0sphd1d";
+  src = fetchurl {
+    url = "mirror://kernel/linux/utils/fs/xfs/xfsprogs/${pname}-${version}.tar.xz";
+    sha256 = "0lxks616nmdk8zkdbwpq5sf9zz19smgy5rpmp3hpk2mvrl7kk70f";
   };
 
   outputs = [ "bin" "dev" "out" "doc" ];
 
   depsBuildBuild = [ buildPackages.stdenv.cc ];
   nativeBuildInputs = [
-    autoconf automake libtool gettext pkgconfig
+    autoconf automake libtool gettext pkg-config
     libuuid # codegen tool uses libuuid
   ];
-  buildInputs = [ readline icu ];
+  buildInputs = [ readline icu inih ];
   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")
-  ];
-
+  # @sbindir@ is replaced with /run/current-system/sw/bin to fix dependency cycles
   preConfigure = ''
-    sed -i Makefile -e '/cp include.install-sh/d'
+    for file in scrub/{xfs_scrub_all.cron.in,xfs_scrub@.service.in,xfs_scrub_all.service.in}; do
+      substituteInPlace "$file" \
+        --replace '@sbindir@' '/run/current-system/sw/bin'
+    done
     make configure
+    patchShebangs ./install-sh
   '';
 
   configureFlags = [
     "--disable-lib64"
-    "--enable-readline"
+    "--with-systemd-unit-dir=${placeholder "out"}/lib/systemd/system"
   ];
 
   installFlags = [ "install-dev" ];
@@ -55,11 +45,11 @@ stdenv.mkDerivation rec {
     find . -type d -name .libs | xargs rm -rf
   '';
 
-  meta = with stdenv.lib; {
-    homepage = "http://xfs.org/";
+  meta = with lib; {
+    homepage = "https://xfs.org/";
     description = "SGI XFS utilities";
-    license = licenses.lgpl21;
+    license = with licenses; [ gpl2Only lgpl21 gpl3Plus ];  # see https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git/tree/debian/copyright
     platforms = platforms.linux;
-    maintainers = with maintainers; [ dezgeg ];
+    maintainers = with maintainers; [ dezgeg ajs124 ];
   };
 }
diff --git a/pkgs/tools/filesystems/xtreemfs/default.nix b/pkgs/tools/filesystems/xtreemfs/default.nix
index d8d41450079..9c49c4677d2 100644
--- a/pkgs/tools/filesystems/xtreemfs/default.nix
+++ b/pkgs/tools/filesystems/xtreemfs/default.nix
@@ -13,7 +13,8 @@ stdenv.mkDerivation {
   pname = "XtreemFS";
   version = "1.5.1.81";
 
-  buildInputs = [ which attr makeWrapper python ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ which attr python ];
 
   patches = [
     (fetchpatch {
diff --git a/pkgs/tools/filesystems/yandex-disk/default.nix b/pkgs/tools/filesystems/yandex-disk/default.nix
index 334aa6ad9c6..e837350abd6 100644
--- a/pkgs/tools/filesystems/yandex-disk/default.nix
+++ b/pkgs/tools/filesystems/yandex-disk/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchurl, writeText, zlib, rpmextract, patchelf, which }:
+{ lib, stdenv, fetchurl, writeText, zlib, rpmextract, patchelf, which }:
 
 let
   p = if stdenv.is64bit then {
       arch = "x86_64";
       gcclib = "${stdenv.cc.cc.lib}/lib64";
-      sha256 = "14bpc5ddhxvgfxkxhj5q9z443s7z4nn1zf4k1hxj7rbf13rcpg00";
+      sha256 = "e4f579963199f05476657f0066beaa32d1261aef2203382f3919e1ed4bc4594e";
     }
     else {
       arch = "i386";
       gcclib = "${stdenv.cc.cc.lib}/lib";
-      sha256 = "1s829q8gy9xgz0jm7w70aljqs2h49x402blqfr9zvn806aprmrm5";
+      sha256 = "69113bf33ba0c57a363305b76361f2866c3b8394b173eed0f49db1f50bfe0373";
     };
 in
 stdenv.mkDerivation rec {
 
   pname = "yandex-disk";
-  version = "0.1.5.1039";
+  version = "0.1.6.1074";
 
   src = fetchurl {
     url = "https://repo.yandex.ru/yandex-disk/rpm/stable/${p.arch}/${pname}-${version}-1.fedora.${p.arch}.rpm";
@@ -32,12 +32,13 @@ stdenv.mkDerivation rec {
     cd unpacked
     ${rpmextract}/bin/rpmextract $src
 
+    mkdir -p $out/share/bash-completion/completions
     cp -r -t $out/bin usr/bin/*
     cp -r -t $out/share usr/share/*
-    cp -r -t $out/etc etc/*
+    cp -r -t $out/share/bash-completion/completions etc/bash_completion.d/*
 
     sed -i 's@have@${which}/bin/which >/dev/null 2>\&1@' \
-      $out/etc/bash_completion.d/yandex-disk-completion.bash
+      $out/share/bash-completion/completions/yandex-disk-completion.bash
 
     ${patchelf}/bin/patchelf \
       --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
@@ -48,9 +49,9 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://help.yandex.com/disk/cli-clients.xml";
     description = "A free cloud file storage service";
-    maintainers = with stdenv.lib.maintainers; [ smironov jagajaga ];
+    maintainers = with lib.maintainers; [ smironov jagajaga ];
     platforms = ["i686-linux" "x86_64-linux"];
-    license = stdenv.lib.licenses.unfree;
+    license = 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
diff --git a/pkgs/tools/filesystems/zerofree/default.nix b/pkgs/tools/filesystems/zerofree/default.nix
index f9fd8a3c7f3..1447ca36a13 100644
--- a/pkgs/tools/filesystems/zerofree/default.nix
+++ b/pkgs/tools/filesystems/zerofree/default.nix
@@ -1,6 +1,11 @@
-{ stdenv, fetchurl, e2fsprogs }:
+{ lib, stdenv, fetchurl, installShellFiles, e2fsprogs }:
 
-stdenv.mkDerivation rec {
+let
+  manpage = fetchurl {
+    url = "https://manpages.ubuntu.com/manpages.gz/xenial/man8/zerofree.8.gz";
+    sha256 = "0y132xmjl02vw41k794psa4nmjpdyky9f6sf0h4f7rvf83z3zy4k";
+  };
+in stdenv.mkDerivation rec {
   pname = "zerofree";
   version = "1.1.1";
 
@@ -9,18 +14,20 @@ stdenv.mkDerivation rec {
     sha256 = "0rrqfa5z103ws89vi8kfvbks1cfs74ix6n1wb6vs582vnmhwhswm";
   };
 
-  buildInputs = [ e2fsprogs ];
+  buildInputs = [ e2fsprogs installShellFiles ];
 
   installPhase = ''
-    mkdir -p $out/bin
+    mkdir -p $out/bin $out/share/zerofree
     cp zerofree $out/bin
-'';
+    cp COPYING $out/share/zerofree/COPYING
+    installManPage ${manpage}
+  '';
 
   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 ];
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.theuni ];
   };
 }
diff --git a/pkgs/tools/filesystems/zfstools/default.nix b/pkgs/tools/filesystems/zfstools/default.nix
index 476d8065312..feb5b23df52 100644
--- a/pkgs/tools/filesystems/zfstools/default.nix
+++ b/pkgs/tools/filesystems/zfstools/default.nix
@@ -1,9 +1,8 @@
-{ stdenv, fetchFromGitHub, ruby, zfs }:
+{ lib, stdenv, fetchFromGitHub, ruby, zfs }:
 
-let version = "0.3.6"; in
 stdenv.mkDerivation rec {
   pname = "zfstools";
-  inherit version;
+  version = "0.3.6";
 
   src = fetchFromGitHub {
     sha256 = "16lvw3xbmxp2pr8nixqn7lf4504zaaxvbbdnjkv4dggwd4lsdjyg";
@@ -27,7 +26,7 @@ stdenv.mkDerivation rec {
     sed -e 's|cmd.*=.*"zfs |cmd = "${zfs}/sbin/zfs |g' -i $out/lib/zfstools/{dataset,snapshot}.rb
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit version;
     inherit (src.meta) homepage;
     description = "OpenSolaris-compatible auto-snapshotting script for ZFS";
diff --git a/pkgs/tools/filesystems/zkfuse/default.nix b/pkgs/tools/filesystems/zkfuse/default.nix
index 89516d525af..456444f3bf5 100644
--- a/pkgs/tools/filesystems/zkfuse/default.nix
+++ b/pkgs/tools/filesystems/zkfuse/default.nix
@@ -1,14 +1,30 @@
-{ stdenv, lib, zookeeper, zookeeper_mt, fuse, autoreconfHook, log4cxx, boost }:
+{ stdenv
+, lib
+, autoreconfHook
+, gnused
+, boost
+, fuse
+, log4cxx
+, zookeeper
+, zookeeper_mt
+}:
 
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "zkfuse";
-  inherit (zookeeper) version src;
+  inherit (zookeeper_mt) version src;
 
-  sourceRoot = "${zookeeper.name}/src/contrib/zkfuse";
+  sourceRoot = "apache-${zookeeper.pname}-${version}/zookeeper-contrib/zookeeper-contrib-zkfuse";
 
-  nativeBuildInputs = [ autoreconfHook ];
+  nativeBuildInputs = [ autoreconfHook gnused ];
   buildInputs = [ zookeeper_mt log4cxx boost fuse ];
 
+  postPatch = ''
+    # Make the async API accessible, and use the proper include path.
+    sed -i src/zkadapter.h \
+        -e '/"zookeeper\.h"/i#define THREADED' \
+        -e 's,"zookeeper\.h",<zookeeper/zookeeper.h>,'
+  '';
+
   installPhase = ''
     mkdir -p $out/bin
     cp -v src/zkfuse $out/bin
@@ -16,7 +32,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     platforms = platforms.linux;
-    maintainers = with maintainers; [ cstrahan ];
+    maintainers = with maintainers; [ cstrahan ztzg ];
     license = licenses.asl20;
   };
 }
diff --git a/pkgs/tools/games/ajour/default.nix b/pkgs/tools/games/ajour/default.nix
new file mode 100644
index 00000000000..1e102a950b9
--- /dev/null
+++ b/pkgs/tools/games/ajour/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, autoPatchelfHook
+, cmake
+, makeWrapper
+, pkg-config
+, python3
+, expat
+, freetype
+, kdialog
+, zenity
+, openssl
+, libX11
+, libxcb
+, libXcursor
+, libXi
+, libxkbcommon
+, libXrandr
+, vulkan-loader
+, wayland
+}:
+
+let
+  rpathLibs = [
+    libXcursor
+    libXi
+    libxkbcommon
+    libXrandr
+    libX11
+    vulkan-loader
+    wayland
+  ];
+
+in rustPlatform.buildRustPackage rec {
+  pname = "Ajour";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "casperstorm";
+    repo = "ajour";
+    rev = version;
+    sha256 = "sha256-arb6wPoDlNdBxSQ+G0KyN4Pbd0nPhb+DbvRlbPaPtPI=";
+  };
+
+  cargoSha256 = "sha256-1hK6C10oM5b8anX+EofekR686AZR5LcpXyhVkmHcSwA=";
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    cmake
+    makeWrapper
+    pkg-config
+    python3
+  ];
+
+  buildInputs = [
+    expat
+    freetype
+    openssl
+    libxcb
+    libX11
+  ];
+
+  fixupPhase = ''
+    patchelf --set-rpath "${lib.makeLibraryPath rpathLibs}:$(patchelf --print-rpath $out/bin/ajour)" $out/bin/ajour
+    wrapProgram $out/bin/ajour --prefix PATH ":" ${lib.makeBinPath [ zenity kdialog ]}
+  '';
+
+  meta = with lib; {
+    description = "World of Warcraft addon manager written in Rust";
+    longDescription = ''
+      Ajour is a World of Warcraft addon manager written in Rust with a
+      strong focus on performance and simplicity. The project is
+      completely advertisement free, privacy respecting and open source.
+    '';
+    homepage = "https://github.com/casperstorm/ajour";
+    changelog = "https://github.com/casperstorm/ajour/blob/master/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/pkgs/tools/games/gamemode/default.nix b/pkgs/tools/games/gamemode/default.nix
new file mode 100644
index 00000000000..e9fdec59220
--- /dev/null
+++ b/pkgs/tools/games/gamemode/default.nix
@@ -0,0 +1,104 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, libgamemode32
+, meson
+, ninja
+, pkg-config
+, dbus
+, inih
+, systemd
+, appstream
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gamemode";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "FeralInteractive";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-P00OnZiPZyxBu9zuG+3JNorXHBhJZy+cKPjX+duZrJ0=";
+  };
+
+  outputs = [ "out" "dev" "lib" "man" "static" ];
+
+  patches = [
+    # Run executables from PATH instead of /usr/bin
+    # See https://github.com/FeralInteractive/gamemode/pull/323
+    (fetchpatch {
+      url = "https://github.com/FeralInteractive/gamemode/commit/be44b7091baa33be6dda60392e4c06c2f398ee72.patch";
+      sha256 = "TlDUETs4+N3pvrVd0FQGlGmC+6ByhJ2E7gKXa7suBtE=";
+    })
+
+    # Fix loading shipped config when using a prefix other than /usr
+    # See https://github.com/FeralInteractive/gamemode/pull/324
+    (fetchpatch {
+      url = "https://github.com/FeralInteractive/gamemode/commit/b29aa903ce5acc9141cfd3960c98ccb047eca872.patch";
+      sha256 = "LwBzBJQ7dfm2mFVSOSPjJP+skgV5N6h77i66L1Sq+ZM=";
+    })
+
+    # Add @libraryPath@ template variable to fix loading the PRELOAD library
+    ./preload-nix-workaround.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace data/gamemoderun \
+      --subst-var-by libraryPath ${lib.makeLibraryPath ([
+        (placeholder "lib")
+      ] ++ lib.optionals (stdenv.hostPlatform.system == "x86_64-linux") [
+        # Support wrapping 32bit applications on a 64bit linux system
+        libgamemode32
+      ])}
+  '';
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    dbus
+    inih
+    systemd
+  ];
+
+  mesonFlags = [
+    # libexec is just a way to package binaries without including them
+    # in PATH. It doesn't make sense to install them to $lib
+    # (the default behaviour in the meson hook).
+    "--libexecdir=${placeholder "out"}/libexec"
+
+    "-Dwith-systemd-user-unit-dir=lib/systemd/user"
+  ];
+
+  doCheck = true;
+  checkInputs = [
+    appstream
+  ];
+
+  # Move static libraries to $static so $lib only contains dynamic libraries.
+  postInstall = ''
+    moveToOutput lib/*.a "$static"
+  '';
+
+  # Add $lib/lib to gamemoded & gamemode-simulate-game's rpath since
+  # they use dlopen to load libgamemode. Can't use makeWrapper since
+  # it would break the security wrapper in the NixOS module.
+  postFixup = ''
+    for bin in "$out/bin/gamemoded" "$out/bin/gamemode-simulate-game"; do
+      patchelf --set-rpath "$lib/lib:$(patchelf --print-rpath "$bin")" "$bin"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Optimise Linux system performance on demand";
+    homepage = "https://github.com/FeralInteractive/GameMode";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ kira-bruneau ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/games/gamemode/preload-nix-workaround.patch b/pkgs/tools/games/gamemode/preload-nix-workaround.patch
new file mode 100644
index 00000000000..06989ff984a
--- /dev/null
+++ b/pkgs/tools/games/gamemode/preload-nix-workaround.patch
@@ -0,0 +1,12 @@
+diff --git a/data/gamemoderun b/data/gamemoderun
+index 573b3e4..6f2799e 100755
+--- a/data/gamemoderun
++++ b/data/gamemoderun
+@@ -5,5 +5,6 @@ GAMEMODEAUTO_NAME="libgamemodeauto.so.0"
+ 
+ # ld will find the right path to load the library, including for 32-bit apps.
+ LD_PRELOAD="${GAMEMODEAUTO_NAME}${LD_PRELOAD:+:$LD_PRELOAD}"
++LD_LIBRARY_PATH="@libraryPath@${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
+ 
+-exec env LD_PRELOAD="${LD_PRELOAD}" $GAMEMODERUNEXEC "$@"
++exec env LD_PRELOAD="${LD_PRELOAD}" LD_LIBRARY_PATH="${LD_LIBRARY_PATH}" $GAMEMODERUNEXEC "$@"
diff --git a/pkgs/tools/games/joystickwake/default.nix b/pkgs/tools/games/joystickwake/default.nix
new file mode 100644
index 00000000000..01800aff849
--- /dev/null
+++ b/pkgs/tools/games/joystickwake/default.nix
@@ -0,0 +1,26 @@
+{ lib, python3, fetchFromGitHub }:
+python3.pkgs.buildPythonApplication rec {
+  pname = "joystickwake";
+  version = "0.2.4";
+
+  src = fetchFromGitHub {
+    owner = "foresto";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0j8xwfmzzmc9s88zvzc3lv67821r6x28vy6vli3srvx859wprppd";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [ pyudev xlib ];
+
+  meta = with lib; {
+    description = "A joystick-aware screen waker";
+    longDescription = ''
+      Linux gamers often find themselves unexpectedly staring at a blank screen, because their display server fails to recognize game controllers as input devices, allowing the screen blanker to activate during gameplay.
+      This program works around the problem by temporarily disabling screen blankers when joystick activity is detected.
+    '';
+    homepage = "https://github.com/foresto/joystickwake";
+    maintainers = with maintainers; [ bertof ];
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/games/minecraft/amidst/default.nix b/pkgs/tools/games/minecraft/amidst/default.nix
new file mode 100644
index 00000000000..8ec65a1dd39
--- /dev/null
+++ b/pkgs/tools/games/minecraft/amidst/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchurl
+, makeWrapper
+, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "amidst";
+  version = "4.7";
+
+  src = fetchurl { # TODO: Compile from src
+    url = "https://github.com/toolbox4minecraft/amidst/releases/download/v${version}/amidst-v${lib.replaceStrings [ "." ] [ "-" ] version}.jar";
+    sha256 = "sha256-oecRjD7JUuvFym8N/hSE5cbAFQojS6yxOuxpwWRlW9M=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ jre makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,lib/amidst}
+    cp $src $out/lib/amidst/amidst.jar
+    makeWrapper ${jre}/bin/java $out/bin/amidst \
+      --add-flags "-jar $out/lib/amidst/amidst.jar"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/toolbox4minecraft/amidst";
+    description = "Advanced Minecraft Interface and Data/Structure Tracking";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.ivar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/games/minecraft/fabric-installer/default.nix b/pkgs/tools/games/minecraft/fabric-installer/default.nix
new file mode 100644
index 00000000000..ef978875049
--- /dev/null
+++ b/pkgs/tools/games/minecraft/fabric-installer/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchurl
+, makeWrapper
+, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "fabric-installer";
+  version = "0.7.4";
+
+  src = fetchurl {
+    url = "https://maven.fabricmc.net/net/fabricmc/fabric-installer/${version}/fabric-installer-${version}.jar";
+    sha256 = "0s3nmwpq1qg90c27qh4anvvsg4yzsgcp6kwsb35fsiaaakxn0b8r";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ jre makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,lib/fabric}
+
+    cp $src $out/lib/fabric/fabric-installer.jar
+    makeWrapper ${jre}/bin/java $out/bin/fabric-installer \
+      --add-flags "-jar $out/lib/fabric/fabric-installer.jar"
+  '';
+
+  meta = with lib; {
+    homepage = "https://fabricmc.net/";
+    description = "A lightweight, experimental modding toolchain for Minecraft";
+    license = licenses.asl20;
+    maintainers = [ maintainers.ivar ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/games/minecraft/optifine/default.nix b/pkgs/tools/games/minecraft/optifine/default.nix
new file mode 100644
index 00000000000..06425e6b67e
--- /dev/null
+++ b/pkgs/tools/games/minecraft/optifine/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchurl
+, makeWrapper
+, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "optifine";
+  version = "1.16.5_HD_U_G8";
+
+  src = fetchurl {
+    url = "https://optifine.net/download?f=OptiFine_${version}.jar";
+    sha256 = "0ks91d6n4vkgb5ykdrc67br2c69nqjr0xhp7rrkybg24xn8bqxiw";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ jre makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,lib/optifine}
+    cp $src $out/lib/optifine/optifine.jar
+
+    makeWrapper ${jre}/bin/java $out/bin/optifine \
+      --add-flags "-jar $out/lib/optifine/optifine.jar"
+  '';
+
+  meta = with lib; {
+    homepage = "https://optifine.net/";
+    description = "A Minecraft optimization mod";
+    longDescription = ''
+      OptiFine is a Minecraft optimization mod.
+      It allows Minecraft to run faster and look better with full support for HD textures and many configuration options.
+    '';
+    license = licenses.unfree;
+    maintainers = [ maintainers.ivar ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/games/weidu/default.nix b/pkgs/tools/games/weidu/default.nix
new file mode 100644
index 00000000000..d325746dc8c
--- /dev/null
+++ b/pkgs/tools/games/weidu/default.nix
@@ -0,0 +1,65 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, elkhound
+, ocaml-ng
+, perl
+, which
+}:
+
+let
+  # 1. Needs ocaml >= 4.04 and <= 4.11
+  # 2. ocaml 4.10 defaults to safe (immutable) strings so we need a version with
+  #    that disabled as weidu is strongly dependent on mutable strings
+  ocaml' = ocaml-ng.ocamlPackages_4_10.ocaml.overrideAttrs (old: {
+    configureFlags = old.configureFlags ++ [
+      # https://github.com/WeiDUorg/weidu/issues/197
+      "--disable-force-safe-string"
+    ];
+  });
+
+in
+stdenv.mkDerivation rec {
+  pname = "weidu";
+  version = "247.00";
+
+  src = fetchFromGitHub {
+    owner = "WeiDUorg";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-vAIIYn0urQnnL82mdfwJtahrS3uWPFferm+0F13TKcw=";
+  };
+
+  postPatch = ''
+    substitute sample.Configuration Configuration \
+      --replace /usr/bin ${lib.makeBinPath [ ocaml' ]} \
+      --replace elkhound ${elkhound}/bin/elkhound
+
+    mkdir -p obj/{.depend,x86_LINUX}
+  '';
+
+  nativeBuildInputs = [ elkhound ocaml' perl which ];
+
+  buildFlags = [ "weidu" "weinstall" "tolower" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    for b in tolower weidu weinstall; do
+      install -Dm555 $b.asm.exe $out/bin/$b
+    done
+
+    install -Dm444 -t $out/share/doc/weidu README* COPYING
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "InfinityEngine Modding Engine";
+    homepage = "https://weidu.org";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ peterhoeg ];
+    # should work fine on both Darwin and Windows
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/graphics/adriconf/default.nix b/pkgs/tools/graphics/adriconf/default.nix
new file mode 100644
index 00000000000..74ff4f1ed66
--- /dev/null
+++ b/pkgs/tools/graphics/adriconf/default.nix
@@ -0,0 +1,41 @@
+{ stdenv
+, lib
+, fetchFromGitLab
+, cmake
+, pkg-config
+, libdrm
+, libGL
+, atkmm
+, pcre
+, gtkmm3
+, boost
+, libxmlxx3
+, mesa
+, pciutils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "adriconf";
+  version = "2.4.1";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "mesa";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "hZy+FpKKBKuho/fALu2O+44zzK6s/M8CTbhrO00ANgo=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ libdrm libGL atkmm pcre gtkmm3 boost libxmlxx3 mesa pciutils ];
+
+  cmakeFlags = [ "-DENABLE_UNIT_TESTS=off" ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.freedesktop.org/mesa/adriconf/";
+    description = "A GUI tool used to configure open source graphics drivers";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ musfay ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/graphics/agi/default.nix b/pkgs/tools/graphics/agi/default.nix
new file mode 100644
index 00000000000..57f9d7e3314
--- /dev/null
+++ b/pkgs/tools/graphics/agi/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, stdenv
+, fetchzip
+, autoPatchelfHook
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, wrapGAppsHook
+, gobject-introspection
+, gdk-pixbuf
+, jre
+, androidenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "agi";
+  version = "1.1.0-dev-20210521";
+
+  src = fetchzip {
+    url = "https://github.com/google/agi-dev-releases/releases/download/v${version}/agi-${version}-linux.zip";
+    sha256 = "sha256-otdthD5p+12JmBltFtXgVaa1fgsItluHv0S4k/GbB9Q=";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    makeWrapper
+    wrapGAppsHook
+    gdk-pixbuf
+    gobject-introspection
+    copyDesktopItems
+  ];
+
+  buildInputs = [
+    stdenv.cc.cc.lib
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/{bin,lib}
+    cp ./{agi,gapis,gapir,gapit,device-info} $out/bin
+    cp lib/gapic.jar $out/lib
+    wrapProgram $out/bin/agi \
+      --add-flags "--vm ${jre}/bin/java" \
+      --add-flags "--jar $out/lib/gapic.jar" \
+      --add-flags "--adb ${androidenv.androidPkgs_9_0.platform-tools}/bin/adb"
+    for i in 16 32 48 64 96 128 256 512 1024; do
+      install -D ${src}/icon.png $out/share/icons/hicolor/''${i}x$i/apps/agi.png
+    done
+    runHook postInstall
+  '';
+
+  desktopItems = [(makeDesktopItem {
+    name = "agi";
+    desktopName = "Android GPU Inspector";
+    exec = "$out/bin/agi";
+    icon = "agi";
+    type = "Application";
+    categories = "Development;Debugger;Graphics;3DGraphics";
+    terminal = "false";
+  })];
+
+  meta = with lib; {
+    homepage = "https://github.com/google/agi/";
+    description = "Android GPU Inspector";
+    license = licenses.asl20;
+    platforms = [ "x86_64-linux" ];
+    maintainers = [ maintainers.ivar ];
+  };
+}
diff --git a/pkgs/tools/graphics/amber/default.nix b/pkgs/tools/graphics/amber/default.nix
new file mode 100644
index 00000000000..f5156dd08ab
--- /dev/null
+++ b/pkgs/tools/graphics/amber/default.nix
@@ -0,0 +1,95 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, python3
+, vulkan-headers
+, vulkan-loader
+}:
+let
+  glslang = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "glslang";
+    rev = "3ee5f2f1d3316e228916788b300d786bb574d337";
+    sha256 = "1l5h9d92mzd35pgs0wibqfg7vbl771lwnvdlcsyhf6999khn5dzv";
+  };
+
+  lodepng = fetchFromGitHub {
+    owner = "lvandeve";
+    repo = "lodepng";
+    rev = "34628e89e80cd007179b25b0b2695e6af0f57fac";
+    sha256 = "10yaf218xnmhv7rsq6dysqrps43r30cgrs1z63h47z40x43ikia0";
+  };
+
+  shaderc = fetchFromGitHub {
+    owner = "google";
+    repo = "shaderc";
+    rev = "ba92b11e1fcaf4c38a64f84d643d6429175bf650";
+    sha256 = "041hip43siy2sr7h6habk9sxdmd45ag4kqgi8jk0vm1b8pqzkhqn";
+  };
+
+  spirv-headers = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "SPIRV-Headers";
+    rev = "3fdabd0da2932c276b25b9b4a988ba134eba1aa6";
+    sha256 = "17h5cn4dyw8ixp1cpw8vf1z90m0fn1hhlvh0iycmknccbb1z34q7";
+  };
+
+  spirv-tools = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "SPIRV-Tools";
+    rev = "fd3cabd8b5fc43ce83884ac06486c283b9902b4f";
+    sha256 = "1h3smicw5gzpa17syb30085zccydzs4f41fl30bcmiipdn2xfpjr";
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "amber";
+  version = "unstable-2020-09-23";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = pname;
+    rev = "0eee2d45d053dfc566baa58442a9b1b708e4f2a7";
+    sha256 = "1rrbvmn9hvhj7xj89yqvy9mx0vg1qapdm5fkca8mkd3516d9f5pw";
+  };
+
+  buildInputs = [
+    vulkan-headers
+    vulkan-loader
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    python3
+  ];
+
+  # Tests are disabled so we do not have to pull in googletest and more dependencies
+  cmakeFlags = [ "-DAMBER_SKIP_TESTS=ON" ];
+
+  prePatch = ''
+    cp -r ${glslang}/ third_party/glslang
+    cp -r ${lodepng}/ third_party/lodepng
+    cp -r ${shaderc}/ third_party/shaderc
+    cp -r ${spirv-tools}/ third_party/spirv-tools
+    cp -r ${spirv-headers}/ third_party/spirv-headers
+    chmod u+w -R third_party
+
+    substituteInPlace CMakeLists.txt \
+      --replace "-Werror" ""
+    substituteInPlace tools/update_build_version.py \
+      --replace "not os.path.exists(directory)" "True"
+  '';
+
+  installPhase = ''
+    install -Dm755 -t $out/bin amber image_diff
+  '';
+
+  meta = with lib; {
+    description = "Multi-API shader test framework";
+    homepage = "https://github.com/google/amber";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Flakebi ];
+  };
+}
diff --git a/pkgs/tools/graphics/appleseed/default.nix b/pkgs/tools/graphics/appleseed/default.nix
index e9e57595e3d..1436aacad09 100644
--- a/pkgs/tools/graphics/appleseed/default.nix
+++ b/pkgs/tools/graphics/appleseed/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub, cmake, boost165, pkgconfig, guile,
+{ lib, stdenv, fetchFromGitHub, cmake, boost165, pkg-config, guile,
 eigen, libpng, python, libGLU, qt4, openexr, openimageio,
-opencolorio, xercesc, ilmbase, osl, seexpr, makeWrapper
+opencolorio_1, xercesc, ilmbase, osl, seexpr, makeWrapper
 }:
 
 let boost_static = boost165.override {
@@ -18,10 +18,11 @@ in stdenv.mkDerivation rec {
     rev    = version;
     sha256 = "1sq9s0rzjksdn8ayp1g17gdqhp7fqks8v1ddd3i5rsl96b04fqx5";
   };
+  nativeBuildInputs = [ cmake pkg-config makeWrapper ];
   buildInputs = [
-    cmake pkgconfig boost_static guile eigen libpng python
-    libGLU qt4 openexr openimageio opencolorio xercesc
-    osl seexpr makeWrapper
+    boost_static guile eigen libpng python
+    libGLU qt4 openexr openimageio opencolorio_1 xercesc
+    osl seexpr
   ];
 
   NIX_CFLAGS_COMPILE = toString [
@@ -46,9 +47,8 @@ in stdenv.mkDerivation rec {
       "-DUSE_SSE=ON"
       "-DUSE_SSE42=ON"
   ];
-  enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Open source, physically-based global illumination rendering engine";
     homepage = "https://appleseedhq.net/";
     maintainers = with maintainers; [ hodapp ];
diff --git a/pkgs/tools/graphics/argyllcms/default.nix b/pkgs/tools/graphics/argyllcms/default.nix
index 115a9a3e4a5..8ebccd8047a 100644
--- a/pkgs/tools/graphics/argyllcms/default.nix
+++ b/pkgs/tools/graphics/argyllcms/default.nix
@@ -1,12 +1,10 @@
 { stdenv, fetchzip, jam, unzip, libX11, libXxf86vm, libXrandr, libXinerama
 , libXrender, libXext, libtiff, libjpeg, libpng, libXScrnSaver, writeText
 , libXdmcp, libXau, lib, openssl }:
-let
-  version = "2.1.2";
- in
+
 stdenv.mkDerivation rec {
   pname = "argyllcms";
-  inherit version;
+  version = "2.1.2";
 
   src = fetchzip {
     # Kind of flacky URL, it was reaturning 406 and inconsistent binaries for a
@@ -97,7 +95,7 @@ stdenv.mkDerivation rec {
   buildFlags = [ "all" ];
 
   makeFlags = [
-    "PREFIX=${placeholder ''out''}"
+    "PREFIX=${placeholder "out"}"
   ];
 
   # Install udev rules, but remove lines that set up the udev-acl
@@ -114,7 +112,7 @@ stdenv.mkDerivation rec {
     mv $out/ref $out/share/argyllcms
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.argyllcms.com";
     description = "Color management system (compatible with ICC)";
     license = licenses.gpl3;
diff --git a/pkgs/tools/graphics/astc-encoder/default.nix b/pkgs/tools/graphics/astc-encoder/default.nix
new file mode 100644
index 00000000000..10bd5d3edf4
--- /dev/null
+++ b/pkgs/tools/graphics/astc-encoder/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, gccStdenv
+, fetchFromGitHub
+, cmake
+, simdExtensions ? null
+}:
+
+with rec {
+  # SIMD instruction sets to compile for. If none are specified by the user,
+  # an appropriate one is selected based on the detected host system
+  isas = with gccStdenv.hostPlatform;
+    if simdExtensions != null then lib.toList simdExtensions
+    else if avx2Support then [ "AVX2" ]
+    else if sse4_1Support then [ "SSE41" ]
+    else if isx86_64 then [ "SSE2" ]
+    else if isAarch64 then [ "NEON" ]
+    else [ "NONE" ];
+
+  archFlags = lib.optionals gccStdenv.hostPlatform.isAarch64 [ "-DARCH=aarch64" ];
+
+  # CMake Build flags for the selected ISAs. For a list of flags, see
+  # https://github.com/ARM-software/astc-encoder/blob/main/Docs/Building.md
+  isaFlags = map ( isa: "-DISA_${isa}=ON" ) isas;
+
+  # The suffix of the binary to link as 'astcenc'
+  mainBinary = builtins.replaceStrings
+    [ "AVX2" "SSE41"  "SSE2" "NEON" "NONE" ]
+    [ "avx2" "sse4.1" "sse2" "neon" "none" ]
+    ( builtins.head isas );
+};
+
+gccStdenv.mkDerivation rec {
+  pname = "astc-encoder";
+  version = "3.1";
+
+  src = fetchFromGitHub {
+    owner = "ARM-software";
+    repo = "astc-encoder";
+    rev = version;
+    sha256 = "sha256-WWxk8F1MtFv1tWbSs45fmu4k9VCAAOjJP8zBz80zLTo=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = isaFlags ++ archFlags ++ [
+    "-DCMAKE_BUILD_TYPE=Release"
+  ];
+
+  # Link binaries into environment and provide 'astcenc' link
+  postInstall = ''
+    mv $out/astcenc $out/bin
+    ln -s $out/bin/astcenc-${mainBinary} $out/bin/astcenc
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ARM-software/astc-encoder";
+    description = "An encoder for the ASTC texture compression format";
+    longDescription = ''
+      The Adaptive Scalable Texture Compression (ASTC) format is
+      widely supported by mobile and desktop graphics hardware and
+      provides better quality at a given bitrate compared to ETC2.
+
+      This program supports both compression and decompression in LDR
+      and HDR mode and can read various image formats. Run `astcenc
+      -help` to see all the options.
+    '';
+    platforms = platforms.unix;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dasisdormax ];
+  };
+}
diff --git a/pkgs/tools/graphics/asymptote/default.nix b/pkgs/tools/graphics/asymptote/default.nix
index 67afac2cdcc..30a3b9cc98f 100644
--- a/pkgs/tools/graphics/asymptote/default.nix
+++ b/pkgs/tools/graphics/asymptote/default.nix
@@ -1,36 +1,44 @@
-{ stdenv, fetchFromGitHub, fetchurl
-, autoreconfHook, bison, glm, yacc, flex
+{ lib, stdenv, fetchFromGitHub, fetchurl, fetchpatch
+, autoreconfHook, bison, glm, flex
 , freeglut, ghostscriptX, imagemagick, fftw
 , boehmgc, libGLU, libGL, mesa, ncurses, readline, gsl, libsigsegv
 , python3Packages
-, zlib, perl
+, zlib, perl, curl
 , texLive, texinfo
 , darwin
 }:
 
 stdenv.mkDerivation rec {
-  version = "2.66";
+  version = "2.67";
   pname = "asymptote";
 
   src = fetchFromGitHub {
     owner = "vectorgraphics";
     repo = pname;
     rev = version;
-    sha256 = "0c445j950n6nxgr1zxj7a26daa5d9f3i91506b7r7627s943b1kd";
+    sha256 = "sha256:1lawj2gf0985clzbyym26s5mxxp2syl1dqqxfzk0sq9s30l2rj3l";
   };
 
+  patches =
+    (lib.optional (lib.versionOlder version "2.68")
+      (fetchpatch {
+        url = "https://github.com/vectorgraphics/asymptote/commit/3361214340d58235f4dbb8f24017d0cd5d94da72.patch";
+        sha256 = "sha256:1z2b41x8v7683myd45lq6niixpdjy0b185x0xl61130vrijhq5nm";
+      }))
+  ;
+
   nativeBuildInputs = [
     autoreconfHook
     bison
     flex
-    yacc
+    bison
     texinfo
   ];
 
   buildInputs = [
     ghostscriptX imagemagick fftw
     boehmgc ncurses readline gsl libsigsegv
-    zlib perl
+    zlib perl curl
     texLive
   ] ++ (with python3Packages; [
     python
@@ -39,9 +47,9 @@ stdenv.mkDerivation rec {
 
   propagatedBuildInputs = [
     glm
-  ] ++ stdenv.lib.optionals stdenv.isLinux [
+  ] ++ lib.optionals stdenv.isLinux [
     freeglut libGLU libGL mesa.osmesa
-  ] ++ stdenv.lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
+  ] ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
     OpenGL GLUT Cocoa
   ]);
 
@@ -68,7 +76,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description =  "A tool for programming graphics intended to replace Metapost";
     license = licenses.gpl3Plus;
     maintainers = [ maintainers.raskin maintainers.peti ];
diff --git a/pkgs/tools/graphics/asymptote/default.upstream b/pkgs/tools/graphics/asymptote/default.upstream
deleted file mode 100644
index e86d81ba443..00000000000
--- a/pkgs/tools/graphics/asymptote/default.upstream
+++ /dev/null
@@ -1,4 +0,0 @@
-url https://sourceforge.net/projects/asymptote/files/
-SF_version_dir
-version_link 'src[.]tgz/download$'
-SF_redirect
diff --git a/pkgs/tools/graphics/barcode/default.nix b/pkgs/tools/graphics/barcode/default.nix
index 48558d02259..2906304a6d2 100644
--- a/pkgs/tools/graphics/barcode/default.nix
+++ b/pkgs/tools/graphics/barcode/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   version = "0.99";
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
 
   hardeningDisable = [ "format" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "GNU barcode generator";
     maintainers = with maintainers; [ raskin ];
     platforms = platforms.linux; # Maybe other non-darwin Unix
diff --git a/pkgs/tools/graphics/blockhash/default.nix b/pkgs/tools/graphics/blockhash/default.nix
index b4f99a9192c..b3426722f79 100644
--- a/pkgs/tools/graphics/blockhash/default.nix
+++ b/pkgs/tools/graphics/blockhash/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python, pkgconfig, imagemagick, wafHook }:
+{ lib, stdenv, fetchFromGitHub, python2, pkg-config, imagemagick, wafHook }:
 
 stdenv.mkDerivation rec {
   pname = "blockhash";
@@ -11,10 +11,12 @@ stdenv.mkDerivation rec {
     sha256 = "0m7ikppl42iicgmwsb7baajmag7v0p1ab06xckifvrr0zm21bq9p";
   };
 
-  nativeBuildInputs = [ python pkgconfig wafHook ];
+  nativeBuildInputs = [ python2 pkg-config wafHook ];
   buildInputs = [ imagemagick ];
 
-  meta = with stdenv.lib; {
+  strictDeps = true;
+
+  meta = with lib; {
     homepage = "http://blockhash.io/";
     description = ''
       This is a perceptual image hash calculation tool based on algorithm
diff --git a/pkgs/tools/graphics/blur-effect/default.nix b/pkgs/tools/graphics/blur-effect/default.nix
index b22a2e8970b..e393da50832 100644
--- a/pkgs/tools/graphics/blur-effect/default.nix
+++ b/pkgs/tools/graphics/blur-effect/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, cmake, gdk-pixbuf, libGL, mesa }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, cmake, gdk-pixbuf, libGL, mesa }:
 
 stdenv.mkDerivation rec {
   pname = "blur-effect";
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     cmake
   ];
 
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     mesa
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/sonald/blur-effect";
     description = "Off-screen image blurring utility using OpenGL ES 3.0";
     license = licenses.gpl3;
diff --git a/pkgs/tools/graphics/briss/default.nix b/pkgs/tools/graphics/briss/default.nix
index 3ac49b690d7..07f7b63ad7d 100644
--- a/pkgs/tools/graphics/briss/default.nix
+++ b/pkgs/tools/graphics/briss/default.nix
@@ -1,18 +1,13 @@
 # The releases of this project are apparently precompiled to .jar files.
 
-{ stdenv, fetchurl, jre, makeWrapper }:
+{ lib, stdenv, fetchurl, jre, makeWrapper }:
 
-let
-
-  version = "0.9";
-  sha256 = "45dd668a9ceb9cd59529a9fefe422a002ee1554a61be07e6fc8b3baf33d733d9";
-
-in stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "briss";
-  inherit version;
+  version = "0.9";
   src = fetchurl {
     url = "mirror://sourceforge/briss/briss-${version}.tar.gz";
-    inherit sha256;
+    sha256 = "45dd668a9ceb9cd59529a9fefe422a002ee1554a61be07e6fc8b3baf33d733d9";
   };
 
   nativeBuildInputs = [makeWrapper];
@@ -27,7 +22,7 @@ in stdenv.mkDerivation {
   meta = {
     homepage = "https://sourceforge.net/projects/briss/";
     description = "Java application for cropping PDF files";
-    license = stdenv.lib.licenses.gpl3;
-    platforms = stdenv.lib.platforms.unix;
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/graphics/cfdg/default.nix b/pkgs/tools/graphics/cfdg/default.nix
index 2cbf43407ff..44a1e0d1d2a 100644
--- a/pkgs/tools/graphics/cfdg/default.nix
+++ b/pkgs/tools/graphics/cfdg/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libpng, bison, flex, ffmpeg_3, icu }:
+{ lib, stdenv, fetchFromGitHub, libpng, bison, flex, ffmpeg, icu }:
 
 stdenv.mkDerivation rec {
   pname = "cfdg";
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
     sha256 = "13m8npccacmgxbs4il45zw53dskjh53ngv2nxahwqw8shjrws4mh";
   };
 
-  buildInputs = [ libpng bison flex ffmpeg_3 icu ];
+  buildInputs = [ libpng bison flex ffmpeg icu ];
 
   postPatch = ''
     sed -e "/YY_NO_UNISTD/a#include <stdio.h>" -i src-common/cfdg.l
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
     cp *.txt $out/share/doc/${pname}-${version}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Context-free design grammar - a tool for graphics generation";
     maintainers = with maintainers; [ raskin ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/graphics/cfdg/src-for-default.nix b/pkgs/tools/graphics/cfdg/src-for-default.nix
index 6d98ea240de..7ff076a5b0a 100644
--- a/pkgs/tools/graphics/cfdg/src-for-default.nix
+++ b/pkgs/tools/graphics/cfdg/src-for-default.nix
@@ -4,6 +4,6 @@
    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/pkgs/tools/graphics/cfdg/src-info-for-default.nix b/pkgs/tools/graphics/cfdg/src-info-for-default.nix
index 0e2018b6bfd..b84376e9882 100644
--- a/pkgs/tools/graphics/cfdg/src-info-for-default.nix
+++ b/pkgs/tools/graphics/cfdg/src-info-for-default.nix
@@ -1,6 +1,6 @@
 {
   downloadPage = "https://contextfreeart.org/mediawiki/index.php/Download_page";
   baseName = "cfdg";
-  sourceRegexp = ''.*[.]tgz'';
+  sourceRegexp = ".*[.]tgz";
   versionExtractorSedScript = ''s/[^0-9]*([0-9.]*)[.]tgz/\1/'';
 }
diff --git a/pkgs/tools/graphics/convchain/default.nix b/pkgs/tools/graphics/convchain/default.nix
index b1ce3082d25..20f29b2a0ad 100644
--- a/pkgs/tools/graphics/convchain/default.nix
+++ b/pkgs/tools/graphics/convchain/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchFromGitHub, mono}:
+{lib, stdenv, fetchFromGitHub, mono}:
 stdenv.mkDerivation rec {
   pname = "convchain";
   version = "0.0pre20160901";
@@ -31,10 +31,9 @@ stdenv.mkDerivation rec {
   '';
   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;
+    description = "Bitmap generation from a single example with convolutions and MCMC";
+    license = lib.licenses.mit;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/graphics/cuneiform/default.nix b/pkgs/tools/graphics/cuneiform/default.nix
index 5213245b7d4..3d7608ac094 100644
--- a/pkgs/tools/graphics/cuneiform/default.nix
+++ b/pkgs/tools/graphics/cuneiform/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, imagemagick }:
+{ lib, stdenv, fetchurl, cmake, imagemagick }:
 
 stdenv.mkDerivation {
   pname = "cuneiform";
@@ -11,7 +11,7 @@ stdenv.mkDerivation {
 
   patches = [
   (fetchurl {
-    url = "https://git.archlinux.org/svntogit/community.git/plain/cuneiform/trunk/build-fix.patch?id=a2ec92f05de006b56d16ac6a6c370d54a554861a";
+    url = "https://raw.githubusercontent.com/archlinux/svntogit-community/a2ec92f05de006b56d16ac6a6c370d54a554861a/cuneiform/trunk/build-fix.patch";
     sha256 = "19cmrlx4khn30qqrpyayn7bicg8yi0wpz1x1bvqqrbvr3kwldxyj";
   })
   ];
@@ -24,7 +24,7 @@ stdenv.mkDerivation {
 
   nativeBuildInputs = [ cmake ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Multi-language OCR system";
     homepage = "https://launchpad.net/cuneiform-linux";
     license = licenses.bsd3;
diff --git a/pkgs/tools/graphics/dcraw/default.nix b/pkgs/tools/graphics/dcraw/default.nix
index f8e78d01712..488fdb2b267 100644
--- a/pkgs/tools/graphics/dcraw/default.nix
+++ b/pkgs/tools/graphics/dcraw/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, libjpeg, lcms2, gettext, jasper, libiconv }:
+{lib, stdenv, fetchurl, libjpeg, lcms2, gettext, libiconv }:
 
 stdenv.mkDerivation rec {
   name = "dcraw-9.28.0";
@@ -8,13 +8,16 @@ stdenv.mkDerivation rec {
     sha256 = "1fdl3xa1fbm71xzc3760rsjkvf0x5jdjrvdzyg2l9ka24vdc7418";
   };
 
-  nativeBuildInputs = stdenv.lib.optional stdenv.isDarwin libiconv;
-  buildInputs = [ libjpeg lcms2 gettext jasper ];
+  nativeBuildInputs = lib.optional stdenv.isDarwin libiconv;
+  buildInputs = [ libjpeg lcms2 gettext ];
 
+  # Jasper is disabled because the library is abandoned and has many
+  # CVEs.
   patchPhase = ''
     substituteInPlace install \
       --replace 'prefix=/usr/local' 'prefix=$out' \
-      --replace gcc '$CC'
+      --replace gcc '$CC' \
+      --replace '-ljasper' '-DNO_JASPER=1'
   '';
 
   buildPhase = ''
@@ -25,8 +28,8 @@ stdenv.mkDerivation rec {
   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
+    license = lib.licenses.free;
+    platforms = lib.platforms.unix; # Once had cygwin problems
     maintainers = [ ];
     knownVulnerabilities = [
       "CVE-2018-19655"
diff --git a/pkgs/tools/graphics/diagrams-builder/default.nix b/pkgs/tools/graphics/diagrams-builder/default.nix
index a12e5dbb8bb..9337d5cca23 100644
--- a/pkgs/tools/graphics/diagrams-builder/default.nix
+++ b/pkgs/tools/graphics/diagrams-builder/default.nix
@@ -2,7 +2,7 @@
   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];
@@ -10,12 +10,12 @@
   ­~~~
 */
 
-{ stdenv, ghcWithPackages, makeWrapper, diagrams-builder, extraPackages ? (self: []) }:
+{ lib, stdenv, ghcWithPackages, makeWrapper, diagrams-builder, extraPackages ? (self: []) }:
 
 let
 
   # Used same technique as for the yiCustom package.
-  wrappedGhc = ghcWithPackages 
+  wrappedGhc = ghcWithPackages
     (self: [ diagrams-builder ] ++ extraPackages self);
   ghcVersion = wrappedGhc.version;
 
@@ -25,7 +25,7 @@ let
       --set NIX_GHC ${wrappedGhc}/bin/ghc \
       --set NIX_GHC_LIBDIR ${wrappedGhc}/lib/ghc-${ghcVersion}
   '';
-  
+
   backends = ["svg" "cairo" "ps"];
 
 in
@@ -33,12 +33,12 @@ in
 stdenv.mkDerivation {
   name = "diagrams-builder";
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
-  buildCommand = with stdenv.lib; 
+  buildCommand = with 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/pkgs/tools/graphics/directx-shader-compiler/default.nix b/pkgs/tools/graphics/directx-shader-compiler/default.nix
new file mode 100644
index 00000000000..6bab32ff27f
--- /dev/null
+++ b/pkgs/tools/graphics/directx-shader-compiler/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub, cmake, python3, git }:
+
+stdenv.mkDerivation rec {
+  pname = "directx-shader-compiler";
+  version = "1.5.2010";
+
+  # Put headers in dev, there are lot of them which aren't necessary for
+  # using the compiler binary.
+  outputs = [ "out" "dev" ];
+
+  src = fetchFromGitHub {
+    owner = "microsoft";
+    repo = "DirectXShaderCompiler";
+    rev = "v${version}";
+    sha256 = "0ccfy1bfp0cm0pq63ri4yl1sr3fdn1a526bsnakg4bl6z4fwrnnj";
+    # We rely on the side effect of leaving the .git directory here for the
+    # version-grabbing functionality of the build system.
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake git python3 ];
+
+  configurePhase = ''
+    # Requires some additional flags to cmake from a file in the repo
+    additionalCMakeFlags=$(< utils/cmake-predefined-config-params)
+    cmakeFlags="$additionalCMakeFlags''${cmakeFlags:+ $cmakeFlags}"
+    cmakeConfigurePhase
+  '';
+
+  # The default install target installs heaps of LLVM stuff.
+  #
+  # Upstream issue: https://github.com/microsoft/DirectXShaderCompiler/issues/3276
+  #
+  # The following is based on the CI script:
+  # https://github.com/microsoft/DirectXShaderCompiler/blob/master/appveyor.yml#L63-L66
+  installPhase = ''
+    mkdir -p $out/bin $out/lib $dev/include
+    mv bin/dxc* $out/bin/
+    mv lib/libdxcompiler.so* lib/libdxcompiler.*dylib $out/lib/
+    cp -r $src/include/dxc $dev/include/
+  '';
+
+  meta = with lib; {
+    description = "A compiler to compile HLSL programs into DXIL and SPIR-V";
+    homepage = "https://github.com/microsoft/DirectXShaderCompiler";
+    platforms = with platforms; linux ++ darwin;
+    license = licenses.ncsa;
+    maintainers = with maintainers; [ expipiplus1 ];
+  };
+}
diff --git a/pkgs/tools/graphics/ditaa/default.nix b/pkgs/tools/graphics/ditaa/default.nix
index 89a18ae1fe2..a22f402b5d1 100644
--- a/pkgs/tools/graphics/ditaa/default.nix
+++ b/pkgs/tools/graphics/ditaa/default.nix
@@ -1,18 +1,18 @@
-{ stdenv, fetchurl, jre }:
+{ lib, stdenv, fetchurl, jre }:
 
 stdenv.mkDerivation rec {
-  name = "ditaa-0.11.0";
+  pname = "ditaa";
+  version = "0.11.0";
 
   src = fetchurl {
-    url = "https://github.com/stathissideris/ditaa/releases/download/v0.11.0/ditaa-0.11.0-standalone.jar";
+    url = "https://github.com/stathissideris/ditaa/releases/download/v${version}/ditaa-${version}-standalone.jar";
     sha256 = "1acnl7khz8aasg230nbsx9dyf8716scgb5l3679cb2bdzxisl64l";
   };
 
-  phases = [ "installPhase" ];
+  dontUnpack = true;
 
   installPhase = ''
-    mkdir -p "$out/bin"
-    mkdir -p "$out/lib"
+    mkdir -p $out/bin $out/lib
 
     cp ${src} "$out/lib/ditaa.jar"
 
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
     chmod a+x "$out/bin/ditaa"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Convert ascii art diagrams into proper bitmap graphics";
     homepage = "https://github.com/stathissideris/ditaa";
     license = licenses.lgpl3;
diff --git a/pkgs/tools/graphics/dmtx-utils/default.nix b/pkgs/tools/graphics/dmtx-utils/default.nix
index bb816e48940..f4cc746a24f 100644
--- a/pkgs/tools/graphics/dmtx-utils/default.nix
+++ b/pkgs/tools/graphics/dmtx-utils/default.nix
@@ -1,30 +1,35 @@
-{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;
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, libdmtx
+, imagemagick
+, Foundation
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dmtx-utils";
+  version = "0.7.6";
+
+  src = fetchFromGitHub {
+    owner = "dmtx";
+    repo = "dmtx-utils";
+    rev = "v${version}";
+    sha256 = "06m3qncqdlcnmw83n95yrx2alaq6bld320ax26z4ndnla41yk0p4";
   };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ libdmtx imagemagick ]
+    ++ lib.optional stdenv.isDarwin Foundation;
+
   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;
+    homepage = "https://github.com/dmtx/dmtx-utils";
+    changelog = "https://github.com/dmtx/dmtx-utils/blob/v${version}/ChangeLog";
+    license = lib.licenses.lgpl2;
+    maintainers = [ lib.maintainers.raskin ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/graphics/dmtx-utils/default.upstream b/pkgs/tools/graphics/dmtx-utils/default.upstream
deleted file mode 100644
index 2bb7fe31bf7..00000000000
--- a/pkgs/tools/graphics/dmtx-utils/default.upstream
+++ /dev/null
@@ -1,4 +0,0 @@
-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/pkgs/tools/graphics/dpic/default.nix b/pkgs/tools/graphics/dpic/default.nix
index 7b7eea3d509..fa6880f6f91 100644
--- a/pkgs/tools/graphics/dpic/default.nix
+++ b/pkgs/tools/graphics/dpic/default.nix
@@ -1,18 +1,18 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "dpic";
-  version = "2020.06.01";
+  version = "2021.01.01";
 
   src = fetchurl {
     url = "https://ece.uwaterloo.ca/~aplevich/dpic/${pname}-${version}.tar.gz";
-    sha256 = "1gbkpbjwjaaifxff8amm9b47dynq4l4698snjdgnn4flndw62q88";
+    sha256 = "sha256-vrBiTQqdaIslDd/WWMbdgornRkZmC2m+RF2J78F5Pm8=";
   };
 
   # The prefix passed to configure is not used.
   makeFlags = [ "DESTDIR=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "An implementation of the pic little language for creating drawings";
     homepage = "https://ece.uwaterloo.ca/~aplevich/dpic/";
     license = licenses.bsd2;
diff --git a/pkgs/tools/graphics/editres/default.nix b/pkgs/tools/graphics/editres/default.nix
index 1dc4891d642..3a55524dc00 100644
--- a/pkgs/tools/graphics/editres/default.nix
+++ b/pkgs/tools/graphics/editres/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, libXt, libXaw, libXres, utilmacros }:
+{ lib, stdenv, fetchurl, pkg-config, libXt, libXaw, libXres, utilmacros }:
 
 stdenv.mkDerivation rec {
   name = "editres-1.0.7";
@@ -8,14 +8,14 @@ stdenv.mkDerivation rec {
     sha256 = "10mbgijb6ac6wqb2grpy9mrazzw68jxjkxr9cbdf1111pa64yj19";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libXt libXaw libXres utilmacros ];
 
   configureFlags = [ "--with-appdefaultdir=$(out)/share/X11/app-defaults/editres" ];
 
   hardeningDisable = [ "format" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://cgit.freedesktop.org/xorg/app/editres/";
     description = "A dynamic resource editor for X Toolkit applications";
     license = licenses.mit;
diff --git a/pkgs/tools/graphics/enblend-enfuse/default.nix b/pkgs/tools/graphics/enblend-enfuse/default.nix
index 89c861267f0..5ca9704eee3 100644
--- a/pkgs/tools/graphics/enblend-enfuse/default.nix
+++ b/pkgs/tools/graphics/enblend-enfuse/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchurl
+{ lib, stdenv, fetchurl
 , boost, freeglut, glew, gsl, lcms2, libpng, libtiff, libGLU, libGL, vigra
-, help2man, pkgconfig, perl, texlive }:
+, help2man, pkg-config, perl, texlive }:
 
 stdenv.mkDerivation rec {
   pname = "enblend-enfuse";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ boost freeglut glew gsl lcms2 libpng libtiff libGLU libGL vigra ];
 
-  nativeBuildInputs = [ help2man perl pkgconfig texlive.combined.scheme-small ];
+  nativeBuildInputs = [ help2man perl pkg-config texlive.combined.scheme-small ];
 
   preConfigure = ''
     patchShebangs src/embrace
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://enblend.sourceforge.net/";
     description = "Blends away the seams in a panoramic image mosaic using a multiresolution spline";
     license = licenses.gpl2;
diff --git a/pkgs/tools/graphics/eplot/default.nix b/pkgs/tools/graphics/eplot/default.nix
index de729e38662..2e69bc8a263 100644
--- a/pkgs/tools/graphics/eplot/default.nix
+++ b/pkgs/tools/graphics/eplot/default.nix
@@ -1,7 +1,8 @@
-{ stdenv, fetchurl, gnuplot, ruby }:
+{ lib, stdenv, fetchurl, gnuplot, ruby }:
 
 stdenv.mkDerivation {
-  name = "eplot-2.07";
+  pname = "eplot";
+  version = "2.09";
 
   # Upstream has been contacted (2015-03) regarding providing versioned
   # download URLs. Initial response was positive, but no action yet.
@@ -20,15 +21,19 @@ stdenv.mkDerivation {
   dontUnpack = true;
 
   installPhase = ''
+    runHook preInstall
+
     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"
+
+    runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Create plots quickly with gnuplot";
     longDescription = ''
       eplot ("easy gnuplot") is a ruby script which allows to pipe data easily
@@ -39,9 +44,9 @@ stdenv.mkDerivation {
       This package also includes the complementary 'ec' tool (say "extract
       column").
     '';
-    homepage = "http://liris.cnrs.fr/christian.wolf/software/eplot/";
+    homepage = "https://perso.liris.cnrs.fr/christian.wolf/software/eplot/";
     license = licenses.gpl2Plus;
     platforms = platforms.all;
-    maintainers = [ maintainers.bjornfor ];
+    maintainers = with maintainers; [ bjornfor shamilton ];
   };
 }
diff --git a/pkgs/tools/graphics/epstool/default.nix b/pkgs/tools/graphics/epstool/default.nix
index aed49158599..6910f458a17 100644
--- a/pkgs/tools/graphics/epstool/default.nix
+++ b/pkgs/tools/graphics/epstool/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   version = "3.08";
@@ -9,17 +9,23 @@ stdenv.mkDerivation rec {
     sha256 = "1pfgqbipwk36clhma2k365jkpvyy75ahswn8jczzys382jalpwgk";
   };
 
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "CLINK=${stdenv.cc.targetPrefix}cc"
+    "LINK=${stdenv.cc.targetPrefix}cc"
+  ];
+
   installPhase = ''
     make EPSTOOL_ROOT=$out install
   '';
 
   patches = [ ./gcc43.patch ];
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/graphics/escrotum/default.nix b/pkgs/tools/graphics/escrotum/default.nix
index 4a887688c4f..decb92615f9 100644
--- a/pkgs/tools/graphics/escrotum/default.nix
+++ b/pkgs/tools/graphics/escrotum/default.nix
@@ -1,9 +1,7 @@
-{ lib, fetchFromGitHub, buildPythonApplication
-, pygtk
-, numpy ? null
+{ lib, python2Packages, fetchFromGitHub
 }:
 
-buildPythonApplication {
+with python2Packages; buildPythonApplication {
   name = "escrotum-2019-06-10";
 
   src = fetchFromGitHub {
diff --git a/pkgs/tools/graphics/exif/default.nix b/pkgs/tools/graphics/exif/default.nix
index 68007ec3a6b..130e2d96124 100644
--- a/pkgs/tools/graphics/exif/default.nix
+++ b/pkgs/tools/graphics/exif/default.nix
@@ -1,20 +1,23 @@
-{ stdenv, fetchurl, pkgconfig, libexif, popt, libintl }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, libexif, popt, libintl }:
 
 stdenv.mkDerivation rec {
-  name = "exif-0.6.21";
+  pname = "exif";
+  version = "0.6.22";
 
-  src = fetchurl {
-    url = "mirror://sourceforge/libexif/${name}.tar.bz2";
-    sha256 = "1zb9hwdl783d4vd2s2rw642hg8hd6n0mfp6lrbiqmp9jmhlq5rsr";
+  src = fetchFromGitHub {
+    owner = "libexif";
+    repo = pname;
+    rev = "${pname}-${builtins.replaceStrings ["."] ["_"] version}-release";
+    sha256 = "1xlb1gdwxm3rmw7vlrynhvjp9dkwmvw23mxisdbdmma7ah2nda3i";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ libexif popt libintl ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://libexif.github.io";
     description = "A utility to read and manipulate EXIF data in digital photographs";
     platforms = platforms.unix;
-    license = licenses.lgpl21;
+    license = licenses.lgpl21Plus;
   };
 }
diff --git a/pkgs/tools/graphics/exifprobe/default.nix b/pkgs/tools/graphics/exifprobe/default.nix
new file mode 100644
index 00000000000..7331ac69185
--- /dev/null
+++ b/pkgs/tools/graphics/exifprobe/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "exifprobe";
+  version = "unstable-2018-06-19";
+
+  src = fetchFromGitHub {
+    owner = "hfiguiere";
+    repo = "exifprobe";
+    rev = "ce1ea2bc3dbbe8092b26f41cd89831cafe633d69";
+    sha256 = "1c1fhc0v1m452lgnfcijnvrc0by06qfbhn3zkliqi60kv8l2isbp";
+  };
+
+  CFLAGS = [ "-O2" ];
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  postInstall = ''
+    mv $out/usr/bin $out/bin
+    mv $out/usr/share $out/share
+    rm -r $out/usr
+  '';
+
+  meta = with lib; {
+    description = "Tool for reading EXIF data from image files produced by digital cameras";
+    homepage = "https://github.com/hfiguiere/exifprobe";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ siraben ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/graphics/exiftags/default.nix b/pkgs/tools/graphics/exiftags/default.nix
index 3ca748aa956..afe8a5ecbcc 100644
--- a/pkgs/tools/graphics/exiftags/default.nix
+++ b/pkgs/tools/graphics/exiftags/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation {
   name = "exiftags-1.01";
@@ -19,8 +19,8 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.free;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; unix;
   };
 }
diff --git a/pkgs/tools/graphics/facedetect/default.nix b/pkgs/tools/graphics/facedetect/default.nix
index 690c7336b69..26a9b3e24bd 100644
--- a/pkgs/tools/graphics/facedetect/default.nix
+++ b/pkgs/tools/graphics/facedetect/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python2Packages }:
+{ lib, stdenv, fetchFromGitHub, python2Packages }:
 
 stdenv.mkDerivation rec {
   pname = "facedetect";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
   buildInputs = [ python2Packages.python python2Packages.wrapPython ];
   pythonPath = [ python2Packages.numpy python2Packages.opencv4 ];
 
-  phases = [ "unpackPhase" "patchPhase" "installPhase" ];
+  dontConfigure = true;
 
   patchPhase = ''
     substituteInPlace facedetect \
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
     wrapPythonPrograms
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.thregr.org/~wavexx/software/facedetect/";
     description = "A simple face detector for batch processing";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/graphics/fbv/default.nix b/pkgs/tools/graphics/fbv/default.nix
index 561c007ff16..5b46d5d2268 100644
--- a/pkgs/tools/graphics/fbv/default.nix
+++ b/pkgs/tools/graphics/fbv/default.nix
@@ -1,14 +1,25 @@
-{ stdenv, fetchurl, getopt, libjpeg, libpng12, libungif }:
+{ lib, stdenv, fetchurl, fetchpatch, getopt, libjpeg, libpng12, giflib }:
 
 stdenv.mkDerivation rec {
-  name = "fbv-1.0b";
+  pname = "fbv";
+  version = "1.0b";
 
   src = fetchurl {
-    url = "http://s-tech.elsat.net.pl/fbv/${name}.tar.gz";
+    url = "http://s-tech.elsat.net.pl/fbv/fbv-${version}.tar.gz";
     sha256 = "0g5b550vk11l639y8p5sx1v1i6ihgqk0x1hd0ri1bc2yzpdbjmcv";
   };
 
-  buildInputs = [ getopt libjpeg libpng12 libungif ];
+  patches = [
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/void-linux/void-packages/4a5bfe522ea5afd8203e804dc6a642d0871cd6dd/srcpkgs/fbv/patches/giflib-5.1.patch";
+      sha256 = "00q1zcn92yvvyij68bnq0m1sr3a411w914f4nyp6mpz0j5xc6dc7";
+    })
+  ];
+
+  patchFlags = [ "-p0" ];
+
+  buildInputs = [ getopt libjpeg libpng12 giflib ];
+  makeFlags = [ "LDFLAGS=-lgif" ];
 
   enableParallelBuilding = true;
 
@@ -16,10 +27,10 @@ stdenv.mkDerivation rec {
     mkdir -p $out/{bin,man/man1}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "View pictures on a linux framebuffer device";
     homepage = "http://s-tech.elsat.net.pl/fbv/";
-    license = licenses.gpl2;
+    license = licenses.gpl2Only;
     maintainers = with maintainers; [ peterhoeg ];
   };
 }
diff --git a/pkgs/tools/graphics/feedgnuplot/default.nix b/pkgs/tools/graphics/feedgnuplot/default.nix
index ef699b5437a..51d3e1e868d 100644
--- a/pkgs/tools/graphics/feedgnuplot/default.nix
+++ b/pkgs/tools/graphics/feedgnuplot/default.nix
@@ -1,5 +1,6 @@
-{ stdenv, fetchFromGitHub, makeWrapper, gawk
+{ lib, fetchFromGitHub, makeWrapper, gawk
 , makeFontsConf, freefont_ttf, gnuplot, perl, perlPackages
+, stdenv, shortenPerlShebang
 }:
 
 let
@@ -10,18 +11,18 @@ in
 
 perlPackages.buildPerlPackage rec {
   pname = "feedgnuplot";
-  version = "1.51";
+  version = "1.58";
 
   src = fetchFromGitHub {
     owner = "dkogan";
     repo = "feedgnuplot";
     rev = "v${version}";
-    sha256 = "0npk2l032cnmibjj5zf3ii09mpxciqn32lx6g5bal91bkxwn7r5i";
+    sha256 = "1qix4lwwyhqibz0a6q2rrb497rmk00v1fvmdyinj0dqmgjw155zr";
   };
 
   outputs = [ "out" ];
 
-  nativeBuildInputs = [ makeWrapper gawk ];
+  nativeBuildInputs = [ makeWrapper gawk ] ++ lib.optional stdenv.isDarwin shortenPerlShebang;
 
   buildInputs = [ gnuplot perl ]
     ++ (with perlPackages; [ ListMoreUtils IPCRun StringShellQuote ]);
@@ -36,7 +37,9 @@ perlPackages.buildPerlPackage rec {
   # Tests require gnuplot 4.6.4 and are completely skipped with gnuplot 5.
   doCheck = false;
 
-  postInstall = ''
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang $out/bin/feedgnuplot
+  '' + ''
     wrapProgram $out/bin/feedgnuplot \
         --prefix "PATH" ":" "$PATH" \
         --prefix "PERL5LIB" ":" "$PERL5LIB"
@@ -46,7 +49,7 @@ perlPackages.buildPerlPackage rec {
         completions/zsh/_feedgnuplot
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "General purpose pipe-oriented plotting tool";
     homepage = "https://github.com/dkogan/feedgnuplot/";
     license = with licenses; [ artistic1 gpl1Plus ];
diff --git a/pkgs/tools/graphics/fgallery/default.nix b/pkgs/tools/graphics/fgallery/default.nix
index cc387e29412..28deabb98d1 100644
--- a/pkgs/tools/graphics/fgallery/default.nix
+++ b/pkgs/tools/graphics/fgallery/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, unzip, makeWrapper, perlPackages
+{ lib, stdenv, fetchurl, unzip, makeWrapper, perlPackages
 , coreutils, zip, imagemagick, pngcrush, lcms2
 , facedetect, fbida }:
 
@@ -16,7 +16,8 @@ stdenv.mkDerivation rec {
     sha256 = "18wlvqbxcng8pawimbc8f2422s8fnk840hfr6946lzsxr0ijakvf";
   };
 
-  buildInputs = [ unzip makeWrapper ] ++ (with perlPackages; [ perl ImageExifTool CpanelJSONXS ]);
+  nativeBuildInputs = [ makeWrapper unzip ];
+  buildInputs = (with perlPackages; [ perl ImageExifTool CpanelJSONXS ]);
 
   installPhase = ''
     mkdir -p "$out/bin"
@@ -32,11 +33,11 @@ stdenv.mkDerivation rec {
 
     wrapProgram "$out/share/fgallery/fgallery" \
         --set PERL5LIB "$PERL5LIB" \
-        --set PATH "${stdenv.lib.makeBinPath
+        --set PATH "${lib.makeBinPath
                      [ coreutils zip imagemagick pngcrush lcms2 facedetect fbida ]}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Static photo gallery generator";
     homepage = "http://www.thregr.org/~wavexx/software/fgallery/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/graphics/fim/default.nix b/pkgs/tools/graphics/fim/default.nix
index dd2dcc1f5bf..252510f8059 100644
--- a/pkgs/tools/graphics/fim/default.nix
+++ b/pkgs/tools/graphics/fim/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchurl, autoconf, automake, pkgconfig
+{ gcc9Stdenv, fetchurl, autoconf, automake, pkg-config, lib
 , perl, flex, bison, readline, libexif
 , x11Support ? true, SDL
-, svgSupport ? true, inkscape_0
+, svgSupport ? true, inkscape
 , asciiArtSupport ? true, aalib
 , gifSupport ? true, giflib
 , tiffSupport ? true, libtiff
@@ -9,7 +9,7 @@
 , pngSupport ? true, libpng
 }:
 
-stdenv.mkDerivation rec {
+gcc9Stdenv.mkDerivation rec {
   pname = "fim";
   version = "0.6";
 
@@ -23,21 +23,21 @@ stdenv.mkDerivation rec {
      --replace /usr/bin/perl ${perl}/bin/perl
   '';
 
-  nativeBuildInputs = [ autoconf automake pkgconfig ];
+  nativeBuildInputs = [ autoconf automake pkg-config ];
 
-  buildInputs = with stdenv.lib;
+  buildInputs = with lib;
     [ perl flex bison readline libexif ]
     ++ optional x11Support SDL
-    ++ optional svgSupport inkscape_0
+    ++ 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";
+  NIX_CFLAGS_COMPILE = lib.optionalString x11Support "-lSDL";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A lightweight, highly customizable and scriptable image viewer";
     longDescription = ''
       FIM (Fbi IMproved) is a lightweight, console based image viewer that aims
diff --git a/pkgs/tools/graphics/flam3/default.nix b/pkgs/tools/graphics/flam3/default.nix
index 29560cfe6e5..bd959e3227e 100644
--- a/pkgs/tools/graphics/flam3/default.nix
+++ b/pkgs/tools/graphics/flam3/default.nix
@@ -1,8 +1,8 @@
-{stdenv, fetchFromGitHub, zlib, libpng, libxml2, libjpeg }:
+{lib, stdenv, fetchFromGitHub, zlib, libpng, libxml2, libjpeg }:
 
 stdenv.mkDerivation rec {
   pname = "flam3";
-  version = "3.1.1-${stdenv.lib.strings.substring 0 7 rev}";
+  version = "3.1.1-${lib.strings.substring 0 7 rev}";
   rev = "e0801543538451234d7a8a240ba3b417cbda5b21";
 
   src = fetchFromGitHub {
@@ -14,10 +14,10 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ zlib libpng libxml2 libjpeg ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Cosmic recursive fractal flames";
     homepage = "https://flam3.com/";
-    maintainers = [ maintainers.nand0p ];
+    maintainers = with maintainers; [ ];
     platforms = platforms.linux;
     license = licenses.gpl3Plus;
   };
diff --git a/pkgs/tools/graphics/ggobi/default.nix b/pkgs/tools/graphics/ggobi/default.nix
index 82ee194ad12..4e1b851735f 100644
--- a/pkgs/tools/graphics/ggobi/default.nix
+++ b/pkgs/tools/graphics/ggobi/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, libxml2, gtk2 }:
+{ lib, stdenv, fetchurl, pkg-config, libxml2, gtk2 }:
 
 stdenv.mkDerivation rec {
   version = "2.1.11";
@@ -9,14 +9,14 @@ stdenv.mkDerivation rec {
     sha256 = "2c4ddc3ab71877ba184523e47b0637526e6f3701bd9afb6472e6dfc25646aed7";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libxml2 gtk2 ];
 
   configureFlags = [ "--with-all-plugins" ];
 
   hardeningDisable = [ "format" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Visualization program for exploring high-dimensional data";
     homepage = "http://www.ggobi.org/";
     license = licenses.cpl10;
diff --git a/pkgs/tools/graphics/gifsicle/default.nix b/pkgs/tools/graphics/gifsicle/default.nix
index 007ba0f9972..b200f487b23 100644
--- a/pkgs/tools/graphics/gifsicle/default.nix
+++ b/pkgs/tools/graphics/gifsicle/default.nix
@@ -1,14 +1,17 @@
-{ stdenv, fetchurl, xorgproto, libXt, libX11, gifview ? false, static ? false }:
+{ lib, stdenv, fetchurl, xorgproto, libXt, libX11
+, gifview ? false
+, static ? stdenv.hostPlatform.isStatic
+}:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   pname = "gifsicle";
-  version = "1.92";
+  version = "1.93";
 
   src = fetchurl {
     url = "https://www.lcdf.org/gifsicle/${pname}-${version}.tar.gz";
-    sha256 = "0rffpzxcak19k6cngpxn73khvm3z1gswrqs90ycdzzb53p05ddas";
+    sha256 = "sha256-kvZweXMr9MHaCH5q4JBSBYRuWsd3ulyqZtEqc6qUNEc=";
   };
 
   buildInputs = optionals gifview [ xorgproto libXt libX11 ];
@@ -25,8 +28,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2;
     platforms = platforms.all;
-    maintainers = with stdenv.lib.maintainers; [ zimbatm ];
+    maintainers = with lib.maintainers; [ zimbatm ];
   };
 }
diff --git a/pkgs/tools/graphics/gifski/default.nix b/pkgs/tools/graphics/gifski/default.nix
index 4758dece42f..f79b15a9890 100644
--- a/pkgs/tools/graphics/gifski/default.nix
+++ b/pkgs/tools/graphics/gifski/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, rustPlatform, fetchFromGitHub, pkgconfig }:
+{ lib, rustPlatform, fetchFromGitHub, pkg-config }:
 
 rustPlatform.buildRustPackage rec {
   pname = "gifski";
-  version = "1.2.0";
+  version = "1.4.3";
 
   src = fetchFromGitHub {
     owner = "ImageOptim";
     repo = "gifski";
     rev = version;
-    sha256 = "0yziqgvjjb5bblmm060li7dv1i23gpn0f75jb72z8cdf2wg1qmxb";
+    sha256 = "034csv43vc0q2ycwjfskv1zx08c40ykf1m22fh9wvms0860k2ysn";
   };
 
-  cargoSha256 = "1y4q6p6hbmpwdpahmspgngm842qrq1srl7319wslq9ydl09m1x3x";
+  cargoSha256 = "0jgwf30gqwwpaf2g5zbsglcmsa00vixrnlizvcd41afi1wkjgiyd";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "GIF encoder based on libimagequant (pngquant)";
     homepage = "https://gif.ski/";
     license = licenses.agpl3;
diff --git a/pkgs/tools/graphics/glee/default.nix b/pkgs/tools/graphics/glee/default.nix
index 58fcfbfd9ac..aeec2ffb493 100644
--- a/pkgs/tools/graphics/glee/default.nix
+++ b/pkgs/tools/graphics/glee/default.nix
@@ -1,9 +1,9 @@
-{stdenv, fetchgit, cmake, libGLU, libGL, xorg }:
+{lib, stdenv, fetchgit, cmake, libGLU, libGL, xorg }:
 
 stdenv.mkDerivation rec {
   pname = "glee";
   rev = "f727ec7463d514b6279981d12833f2e11d62b33d";
-  version = "20170205-${stdenv.lib.strings.substring 0 7 rev}";
+  version = "20170205-${lib.strings.substring 0 7 rev}";
 
   src = fetchgit {
     inherit rev;
@@ -23,10 +23,10 @@ stdenv.mkDerivation rec {
     sed -i 's/readme/Readme/' cmake_install.cmake
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "GL Easy Extension Library";
     homepage = "https://sourceforge.net/p/glee/glee/";
-    maintainers = with maintainers; [ nand0p ];
+    maintainers = with maintainers; [ ];
     platforms = platforms.linux;
     license = licenses.gpl3;
   };
diff --git a/pkgs/tools/graphics/glmark2/default.nix b/pkgs/tools/graphics/glmark2/default.nix
index deea9e10a1a..64294481257 100644
--- a/pkgs/tools/graphics/glmark2/default.nix
+++ b/pkgs/tools/graphics/glmark2/default.nix
@@ -1,25 +1,57 @@
-{ stdenv, fetchFromGitHub, pkgconfig, libjpeg, libpng, xorg, libX11, libGL, libdrm,
-  python27, wayland, udev, mesa, wafHook }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, makeWrapper
+, libjpeg
+, libpng
+, xorg
+, libX11
+, libGL
+, libdrm
+, udev
+, python3
+, wayland
+, wayland-protocols
+, mesa
+, wafHook
+}:
 
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "glmark2";
-  version = "2017-09-01";
+  version = "2021.02";
 
   src = fetchFromGitHub {
     owner = "glmark2";
     repo = "glmark2";
-    rev = "7265e8e6c77c4f60302507eca0e18560b1117a86";
-    sha256 = "076l75rfl6pnp1wgiwlaihy1vg2advg1z8bi0x84kk259kldgvwn";
+    rev = version;
+    sha256 = "1a75gg1dn03d3jq7n74wsw7kc14ildbb8azzbj4k28xik1m6khr9";
   };
 
-  nativeBuildInputs = [ pkgconfig wafHook ];
+  nativeBuildInputs = [ pkg-config wafHook makeWrapper ];
   buildInputs = [
-    libjpeg libpng xorg.libxcb libX11 libGL libdrm python27 wayland udev mesa
+    libjpeg
+    libpng
+    xorg.libxcb
+    libX11
+    libdrm
+    python3
+    udev
+    wayland
+    wayland-protocols
+    mesa
   ];
 
-  wafConfigureFlags = ["--with-flavors=x11-gl,x11-glesv2,drm-gl,drm-glesv2,wayland-gl,wayland-glesv2"];
+  wafConfigureFlags = [ "--with-flavors=x11-gl,x11-glesv2,drm-gl,drm-glesv2,wayland-gl,wayland-glesv2" ];
 
-  meta = with stdenv.lib; {
+  postInstall = ''
+    for binary in $out/bin/glmark2*; do
+      wrapProgram $binary \
+        --set LD_LIBRARY_PATH ${libGL}/lib
+    done
+  '';
+
+  meta = with lib; {
     description = "OpenGL (ES) 2.0 benchmark";
     homepage = "https://github.com/glmark2/glmark2";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/graphics/glxinfo/default.nix b/pkgs/tools/graphics/glxinfo/default.nix
index 6518a74512b..0dcf30fda15 100644
--- a/pkgs/tools/graphics/glxinfo/default.nix
+++ b/pkgs/tools/graphics/glxinfo/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libGL, libX11 }:
+{ lib, stdenv, fetchurl, libGL, libX11 }:
 
 stdenv.mkDerivation rec {
   pname = "glxinfo";
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
     install -Dm 555 -t $out/bin glx{info,gears} es2{_info,gears} eglinfo
   ";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Test utilities for OpenGL";
     homepage = "https://www.mesa3d.org/";
     license = licenses.mit;
diff --git a/pkgs/tools/graphics/gmic-qt/default.nix b/pkgs/tools/graphics/gmic-qt/default.nix
index b7650b22080..1d26379c396 100644
--- a/pkgs/tools/graphics/gmic-qt/default.nix
+++ b/pkgs/tools/graphics/gmic-qt/default.nix
@@ -6,7 +6,7 @@
 , fetchFromGitHub
 , fetchFromGitLab
 , cmake
-, pkgconfig
+, pkg-config
 , opencv3
 , openexr
 , graphicsmagick
@@ -51,7 +51,7 @@ assert lib.assertMsg (builtins.hasAttr variant variants) "gmic-qt variant “${v
 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}''}";
+  pname = "gmic-qt${lib.optionalString (variant != "standalone") "-${variant}"}";
   version = "2.7.1";
 
   gmic-community = fetchFromGitHub {
@@ -109,7 +109,7 @@ mkDerivation rec {
 
   nativeBuildInputs = [
     cmake
-    pkgconfig
+    pkg-config
   ];
 
   buildInputs = [
diff --git a/pkgs/tools/graphics/gmic/default.nix b/pkgs/tools/graphics/gmic/default.nix
index b167a73466d..d12a213a31e 100644
--- a/pkgs/tools/graphics/gmic/default.nix
+++ b/pkgs/tools/graphics/gmic/default.nix
@@ -1,9 +1,9 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , cmake
 , ninja
 , pkg-config
-, opencv3
+, opencv
 , openexr
 , graphicsmagick
 , fftw
@@ -15,13 +15,13 @@
 
 stdenv.mkDerivation rec {
   pname = "gmic";
-  version = "2.9.1";
+  version = "2.9.8";
 
   outputs = [ "out" "lib" "dev" "man" ];
 
   src = fetchurl {
     url = "https://gmic.eu/files/source/gmic_${version}.tar.gz";
-    sha256 = "13axx7nwchn6ysgpvlw3fib474q4nrwv3qn20g3q03ldid0xvjah";
+    sha256 = "sha256-GNa7xzGuO02oplasGJR2eTsRGp3Rn3LbIxLwdN983II=";
   };
 
   nativeBuildInputs = [
@@ -36,7 +36,7 @@ stdenv.mkDerivation rec {
     libjpeg
     libtiff
     libpng
-    opencv3
+    opencv
     openexr
     graphicsmagick
   ];
@@ -47,7 +47,7 @@ stdenv.mkDerivation rec {
     "-DENABLE_DYNAMIC_LINKING=ON"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Open and full-featured framework for image processing";
     homepage = "https://gmic.eu/";
     license = licenses.cecill20;
diff --git a/pkgs/tools/graphics/gnuplot/default.nix b/pkgs/tools/graphics/gnuplot/default.nix
index ce2a87981e7..b46fd88ab99 100644
--- a/pkgs/tools/graphics/gnuplot/default.nix
+++ b/pkgs/tools/graphics/gnuplot/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, makeWrapper, pkgconfig, texinfo
+{ lib, stdenv, fetchurl, makeWrapper, pkg-config, texinfo
 , cairo, gd, libcerf, pango, readline, zlib
 , withTeXLive ? false, texlive
 , withLua ? false, lua
@@ -20,14 +20,14 @@ let
 in
 (if withQt then mkDerivation else stdenv.mkDerivation) rec {
   pname = "gnuplot";
-  version = "5.4.0";
+  version = "5.4.2";
 
   src = fetchurl {
     url = "mirror://sourceforge/gnuplot/${pname}-${version}.tar.gz";
-    sha256 = "0iwwliq5a6qcawbpxk4d7l17fpkq9xxcz05kwblx37rr7bq84h7b";
+    sha256 = "sha256-5Xx14TGBM5UdMqg7zcSv8X/tKHIsTnHyMFz8KuHK57o=";
   };
 
-  nativeBuildInputs = [ makeWrapper pkgconfig texinfo ] ++ lib.optional withQt qttools;
+  nativeBuildInputs = [ makeWrapper pkg-config texinfo ] ++ lib.optional withQt qttools;
 
   buildInputs =
     [ cairo gd libcerf pango readline zlib ]
diff --git a/pkgs/tools/graphics/goverlay/default.nix b/pkgs/tools/graphics/goverlay/default.nix
new file mode 100644
index 00000000000..2296743694e
--- /dev/null
+++ b/pkgs/tools/graphics/goverlay/default.nix
@@ -0,0 +1,108 @@
+{ lib
+, writeScriptBin
+, bash
+, stdenv
+, fetchFromGitHub
+, fpc
+, lazarus-qt
+, qt5
+, libX11
+, libqt5pas
+, coreutils
+, git
+, gnugrep
+, libnotify
+, mesa-demos
+, polkit
+, procps
+, systemd
+, vulkan-tools
+, which
+}:
+
+let
+  # Finds data files using the XDG Base Directory Specification
+  # See https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
+  find-xdg-data-files = writeScriptBin "find-xdg-data-files" ''
+    #!${bash}/bin/sh
+    IFS=:
+    for xdg_data_dir in ''${XDG_DATA_HOME:-$HOME/.local/share}:''${XDG_DATA_DIRS:-/usr/local/share:/usr/share}; do
+      if [ -f "$xdg_data_dir/$1" ]; then
+        echo "$xdg_data_dir/$1"
+      fi
+    done
+  '';
+in stdenv.mkDerivation rec {
+  pname = "goverlay";
+  version = "0.6";
+
+  src = fetchFromGitHub {
+    owner = "benjamimgois";
+    repo = pname;
+    rev = version;
+    hash = "sha256-E4SMUL9rpDSSdprX4fPyGCHCowdQavjhGIhV3r4jeiw=";
+  };
+
+  outputs = [ "out" "man" ];
+
+  patches = [
+    # Find MangoHud & vkBasalt Vulkan layers using the XDG Base Directory Specification
+    ./find-xdg-data-files.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace 'prefix = /usr/local' "prefix = $out"
+
+    substituteInPlace overlayunit.pas \
+      --replace '/usr/share/icons/hicolor/128x128/apps/goverlay.png' "$out/share/icons/hicolor/128x128/apps/goverlay.png"
+  '';
+
+  nativeBuildInputs = [
+    fpc
+    lazarus-qt
+    qt5.wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    libX11
+    libqt5pas
+  ];
+
+  NIX_LDFLAGS = "--as-needed -rpath ${lib.makeLibraryPath buildInputs}";
+
+  buildPhase = ''
+    runHook preBuild
+    HOME=$(mktemp -d) lazbuild --lazarusdir=${lazarus-qt}/share/lazarus -B goverlay.lpi
+    runHook postBuild
+  '';
+
+  qtWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [
+      bash
+      coreutils
+      find-xdg-data-files
+      git
+      gnugrep
+      libnotify
+      mesa-demos
+      polkit
+      procps
+      systemd
+      vulkan-tools
+      which
+    ]}"
+
+    # Force xcb since libqt5pas doesn't support Wayland
+    # See https://github.com/benjamimgois/goverlay/issues/107
+    "--set QT_QPA_PLATFORM xcb"
+  ];
+
+  meta = with lib; {
+    description = "An opensource project that aims to create a Graphical UI to help manage Linux overlays";
+    homepage = "https://github.com/benjamimgois/goverlay";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kira-bruneau ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/graphics/goverlay/find-xdg-data-files.patch b/pkgs/tools/graphics/goverlay/find-xdg-data-files.patch
new file mode 100644
index 00000000000..51d4dcdc54e
--- /dev/null
+++ b/pkgs/tools/graphics/goverlay/find-xdg-data-files.patch
@@ -0,0 +1,40 @@
+diff --git a/overlayunit.pas b/overlayunit.pas
+index de8725f..005f171 100644
+--- a/overlayunit.pas
++++ b/overlayunit.pas
+@@ -5377,7 +5377,7 @@ begin
+    //Determine Mangohud dependency status
+ 
+           //locate MangoHud and store result in tmp folder
+-          RunCommand('bash -c ''find /usr/share/vulkan/implicit_layer.d/MangoHud.json >> /tmp/goverlay/dependency_mangohud''', s);
++          RunCommand('bash -c ''find-xdg-data-files vulkan/implicit_layer.d/MangoHud.json >> /tmp/goverlay/dependency_mangohud''', s);
+ 
+           // Assign Text file dependency_mangohud to variable mangohudVAR
+           AssignFile(mangohudVAR, '/tmp/goverlay/dependency_mangohud');
+@@ -5386,7 +5386,7 @@ begin
+           CloseFile(mangohudVAR);
+ 
+           // Read String and store value on mangohuddependencyVALUE based on result
+-          if mangohudSTR = '/usr/share/vulkan/implicit_layer.d/MangoHud.json' then
++          if mangohudSTR <> '' then
+           mangohuddependencyVALUE := 1
+           else
+           mangohuddependencyVALUE := 0;
+@@ -5395,7 +5395,7 @@ begin
+    //Determine vkBasalt dependency staus
+ 
+            //locate vkBasalt and store result in tmp folder
+-           RunCommand('bash -c ''find /usr/share/vulkan/implicit_layer.d/vkBasalt.json >> /tmp/goverlay/dependency_vkbasalt''', s);
++           RunCommand('bash -c ''find-xdg-data-files vulkan/implicit_layer.d/vkBasalt.json >> /tmp/goverlay/dependency_vkbasalt''', s);
+ 
+            // Assign Text file dependency_mangohud to variable mangohudVAR
+            AssignFile(vkbasaltVAR, '/tmp/goverlay/dependency_vkbasalt');
+@@ -5404,7 +5404,7 @@ begin
+            CloseFile(vkbasaltVAR);
+ 
+            // Read String and store value on vkbasaltdependencyVALUE based on result
+-           if vkbasaltSTR = '/usr/share/vulkan/implicit_layer.d/vkBasalt.json' then
++           if vkbasaltSTR <> '' then
+            vkbasaltdependencyVALUE := 1
+            else
+            vkbasaltdependencyVALUE := 0;
diff --git a/pkgs/tools/graphics/graph-cli/default.nix b/pkgs/tools/graphics/graph-cli/default.nix
new file mode 100644
index 00000000000..4da4f50cef8
--- /dev/null
+++ b/pkgs/tools/graphics/graph-cli/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "graph-cli";
+  version = "0.1.7";
+
+  src = python3Packages.fetchPypi {
+    inherit version;
+    pname = "graph_cli";
+    sha256 = "sha256-/v9COgAjuunJ06HHl55J0moV1p4uO+N+w2QwE8tgebQ=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    numpy
+    pandas
+    matplotlib
+  ];
+
+  # does not contain tests despite reference in Makefile
+  doCheck = false;
+  pythonImportsCheck = [ "graph_cli" ];
+
+  meta = with lib; {
+    description = "CLI to create graphs from CSV files";
+    homepage = "https://github.com/mcastorina/graph-cli/";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ leungbk ];
+  };
+}
diff --git a/pkgs/tools/graphics/graph-easy/default.nix b/pkgs/tools/graphics/graph-easy/default.nix
index 009a86094ec..341d6dea90a 100644
--- a/pkgs/tools/graphics/graph-easy/default.nix
+++ b/pkgs/tools/graphics/graph-easy/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, perlPackages, fetchurl }:
+{ lib, perlPackages, fetchurl }:
 
 perlPackages.buildPerlPackage {
   pname = "Graph-Easy";
@@ -8,7 +8,7 @@ perlPackages.buildPerlPackage {
     sha256 = "d4a2c10aebef663b598ea37f3aa3e3b752acf1fbbb961232c3dbe1155008d1fa";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Render/convert graphs in/from various formats";
     license = licenses.gpl1;
     platforms = platforms.unix;
diff --git a/pkgs/tools/graphics/graphviz/base.nix b/pkgs/tools/graphics/graphviz/base.nix
index a65f5ce455c..f225f2196cc 100644
--- a/pkgs/tools/graphics/graphviz/base.nix
+++ b/pkgs/tools/graphics/graphviz/base.nix
@@ -1,13 +1,11 @@
 { rev, sha256, version }:
 
-{ stdenv, fetchFromGitLab, autoreconfHook, pkgconfig, cairo, expat, flex
+{ lib, stdenv, fetchFromGitLab, autoreconfHook, pkg-config, cairo, expat, flex
 , fontconfig, gd, gettext, gts, libdevil, libjpeg, libpng, libtool, pango
-, yacc, fetchpatch, xorg ? null, ApplicationServices ? null }:
-
-assert stdenv.isDarwin -> ApplicationServices != null;
+, bison, fetchpatch, xorg, ApplicationServices, python3 }:
 
 let
-  inherit (stdenv.lib) optional optionals optionalString;
+  inherit (lib) optional optionals optionalString;
   raw_patch =
     # https://gitlab.com/graphviz/graphviz/issues/1367 CVE-2018-10196
     fetchpatch {
@@ -17,13 +15,20 @@ let
       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
+  patchToUse = if 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;
+  patches = optional (lib.versionOlder version "2.42") patchToUse
+  ++ optionals (lib.versionOlder version "2.46.0") [
+    (fetchpatch {
+      name = "CVE-2020-18032.patch";
+      url = "https://gitlab.com/graphviz/graphviz/-/commit/784411ca3655c80da0f6025ab20634b2a6ff696b.patch";
+      sha256 = "1nkw9ism8lkfvxsp5fh95i2l5s5cbjsidbb3g1kjfv10rxkyb41m";
+    })
+  ];
 in
 
 stdenv.mkDerivation {
@@ -36,23 +41,23 @@ stdenv.mkDerivation {
     inherit sha256 rev;
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config python3 ];
 
   buildInputs = [
-    libpng libjpeg expat yacc libtool fontconfig gd gts libdevil flex pango
+    libpng libjpeg expat bison 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)
+  CPPFLAGS = 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";
+  ] ++ lib.optional (xorg == null) "--without-x";
 
   inherit patches;
 
@@ -79,7 +84,9 @@ stdenv.mkDerivation {
       --replace /usr/bin/vimdot $out/bin/vimdot \
   '';
 
-  meta = with stdenv.lib; {
+  enableParallelBuilding = true;
+
+  meta = with lib; {
     homepage = "https://graphviz.org";
     description = "Graph visualization tools";
     license = licenses.epl10;
diff --git a/pkgs/tools/graphics/graphviz/default.nix b/pkgs/tools/graphics/graphviz/default.nix
index c79fe3aaf4d..0662205d17e 100644
--- a/pkgs/tools/graphics/graphviz/default.nix
+++ b/pkgs/tools/graphics/graphviz/default.nix
@@ -1,5 +1,5 @@
 import ./base.nix rec {
-  rev = "da4c2ec6f24ca1b6d1752c6b5bc4389e55682147"; # use rev as tags have disappeared before
-  version = "2.42.2";
-  sha256 = "0lacl11amyvj04j78m63qifljl4c0nkyy50z4bkg8mg9j4hjdy0x";
+  rev = "a11eb938514725493324d18db1686f9a99c8569f"; # use rev as tags have disappeared before
+  version = "2.47.2";
+  sha256 = "sha256-6JFjM/2xl7KVmGhSr6RWgO23UwLDyAif3ONsBG4t/Wc=";
  }
diff --git a/pkgs/tools/graphics/grim/default.nix b/pkgs/tools/graphics/grim/default.nix
index a357277ed12..f678b2bcae9 100644
--- a/pkgs/tools/graphics/grim/default.nix
+++ b/pkgs/tools/graphics/grim/default.nix
@@ -1,20 +1,20 @@
-{ stdenv, fetchFromGitHub, cairo, libjpeg, meson, ninja, wayland, pkgconfig, scdoc, wayland-protocols }:
+{ lib, stdenv, fetchFromGitHub, cairo, libjpeg, meson, ninja, wayland, pkg-config, scdoc, wayland-protocols }:
 
 stdenv.mkDerivation rec {
   pname = "grim";
-  version = "1.3.1";
+  version = "1.3.2";
 
   src = fetchFromGitHub {
     owner = "emersion";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0fjmjq0ws9rlblkcqxxw2lv7zvvyi618jqzlnz5z9zb477jwdfib";
+    sha256 = "sha256-71dmYENfPX8YHcTlR2F67EheoewicePMKm9/wPbmj9A=";
   };
 
   nativeBuildInputs = [
     meson
     ninja
-    pkgconfig
+    pkg-config
     scdoc
   ];
 
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
     wayland-protocols
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Grab images from a Wayland compositor";
     homepage = "https://github.com/emersion/grim";
     license = licenses.mit;
diff --git a/pkgs/tools/graphics/gromit-mpx/default.nix b/pkgs/tools/graphics/gromit-mpx/default.nix
index c7f0beba8fb..710ed04006c 100644
--- a/pkgs/tools/graphics/gromit-mpx/default.nix
+++ b/pkgs/tools/graphics/gromit-mpx/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config
 , gtk, glib, pcre, libappindicator, libpthreadstubs, libXdmcp
 , libxkbcommon, epoxy, at-spi2-core, dbus, libdbusmenu
 , wrapGAppsHook
@@ -6,24 +6,23 @@
 
 stdenv.mkDerivation rec {
   pname = "gromit-mpx";
-  version = "1.3.1";
+  version = "1.4";
 
   src = fetchFromGitHub {
     owner = "bk138";
     repo = "gromit-mpx";
     rev = version;
-    sha256 = "1dvn7vwg4fg1a3lfj5f7nij1vcxm27gyf2wr817f3qb4sx5xmjwy";
+    sha256 = "1xn14r7lhay720y78j1fs4amp5lia39kpq7vzv02x4nnwhgbsd9r";
   };
 
-  nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
+  nativeBuildInputs = [ cmake pkg-config wrapGAppsHook ];
   buildInputs = [
-    cmake
     gtk glib pcre libappindicator libpthreadstubs
     libXdmcp libxkbcommon epoxy at-spi2-core
     dbus libdbusmenu
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Desktop annotation tool";
 
     longDescription = ''
diff --git a/pkgs/tools/graphics/guff/default.nix b/pkgs/tools/graphics/guff/default.nix
index f03adb7bff0..daca6f4344e 100644
--- a/pkgs/tools/graphics/guff/default.nix
+++ b/pkgs/tools/graphics/guff/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "guff";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib;  {
+  meta = with lib;  {
     description = "A plot device";
     homepage = "https://github.com/silentbicycle/guff";
     license = licenses.isc;
diff --git a/pkgs/tools/graphics/ibniz/default.nix b/pkgs/tools/graphics/ibniz/default.nix
index 564685c1cea..227ab5d082d 100644
--- a/pkgs/tools/graphics/ibniz/default.nix
+++ b/pkgs/tools/graphics/ibniz/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, SDL }:
+{ lib, stdenv, fetchurl, SDL }:
 
 stdenv.mkDerivation rec {
   pname = "ibniz";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
     cp ibniz $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Virtual machine designed for extremely compact low-level audiovisual programs";
     homepage = "http://www.pelulamu.net/ibniz/";
     license = licenses.zlib;
diff --git a/pkgs/tools/graphics/icoutils/default.nix b/pkgs/tools/graphics/icoutils/default.nix
index 0689c9cc248..9fe41d91db2 100644
--- a/pkgs/tools/graphics/icoutils/default.nix
+++ b/pkgs/tools/graphics/icoutils/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libpng, perl, perlPackages, makeWrapper }:
+{ lib, stdenv, fetchurl, libpng, perl, perlPackages, makeWrapper }:
 
 stdenv.mkDerivation rec {
   name = "icoutils-0.32.3";
@@ -8,7 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "1q66cksms4l62y0wizb8vfavhmf7kyfgcfkynil3n99s0hny1aqp";
   };
 
-  buildInputs = [ makeWrapper libpng perl ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ libpng perl ];
   propagatedBuildInputs = [ perlPackages.LWP ];
 
   patchPhase = ''
@@ -26,7 +27,7 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl3Plus;
+    platforms = with lib.platforms; linux ++ darwin;
   };
 }
diff --git a/pkgs/tools/graphics/imageworsener/default.nix b/pkgs/tools/graphics/imageworsener/default.nix
index 3eade7ee76b..120643ddde0 100644
--- a/pkgs/tools/graphics/imageworsener/default.nix
+++ b/pkgs/tools/graphics/imageworsener/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , zlib
 , libpng
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A raster image scaling and processing utility";
     homepage = "https://entropymine.com/imageworsener/";
     changelog = "https://github.com/jsummers/${pname}/blob/${version}/changelog.txt";
diff --git a/pkgs/tools/graphics/imgur-screenshot/default.nix b/pkgs/tools/graphics/imgur-screenshot/default.nix
index c994ee02811..885638c28b8 100644
--- a/pkgs/tools/graphics/imgur-screenshot/default.nix
+++ b/pkgs/tools/graphics/imgur-screenshot/default.nix
@@ -1,25 +1,25 @@
-{ stdenv, fetchFromGitHub, makeWrapper, curl, gnugrep, libnotify, scrot, which, xclip }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper, curl, jq, gnugrep, libnotify, scrot, which, xclip }:
 
-let deps = stdenv.lib.makeBinPath [ curl gnugrep libnotify scrot which xclip ];
+let deps = lib.makeBinPath [ curl jq gnugrep libnotify scrot which xclip ];
 in stdenv.mkDerivation rec {
-  version = "1.7.4";
+  version = "2.0.0";
   pname = "imgur-screenshot";
 
   src = fetchFromGitHub {
     owner = "jomo";
     repo = "imgur-screenshot";
     rev = "v${version}";
-    sha256 = "1bhi9sk8v7szh2fj13qwvdwzy5dw2w4kml86sy1ns1rn0xin0cgr";
+    sha256 = "0fkhvfraijbrw806pgij41bn1hc3r7l7l3snkicmshxj83lmsd5k";
   };
 
   nativeBuildInputs = [ makeWrapper ];
 
   installPhase = ''
-    install -Dm755 imgur-screenshot.sh $out/bin/imgur-screenshot
+    install -Dm755 imgur-screenshot $out/bin/imgur-screenshot
     wrapProgram $out/bin/imgur-screenshot --prefix PATH ':' ${deps}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tool for easy screencapping and uploading to imgur";
     homepage = "https://github.com/jomo/imgur-screenshot/";
     platforms = platforms.linux;
diff --git a/pkgs/tools/graphics/imgurbash2/default.nix b/pkgs/tools/graphics/imgurbash2/default.nix
index ea3b1ed9b02..30848d7d0dc 100644
--- a/pkgs/tools/graphics/imgurbash2/default.nix
+++ b/pkgs/tools/graphics/imgurbash2/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, bash, curl, xsel }:
+{ lib, stdenv, fetchFromGitHub, bash, curl, xsel }:
 
 stdenv.mkDerivation rec {
   pname = "imgurbash2";
@@ -15,16 +15,16 @@ stdenv.mkDerivation rec {
     mkdir -p $out/bin
     cat <<EOF >$out/bin/imgurbash2
     #!${bash}/bin/bash
-    PATH=${stdenv.lib.makeBinPath [curl xsel]}:\$PATH
+    PATH=${lib.makeBinPath [curl xsel]}:\$PATH
     EOF
     cat imgurbash2 >> $out/bin/imgurbash2
     chmod +x $out/bin/imgurbash2
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A shell script that uploads images to imgur";
     license = licenses.mit;
-    platforms = platforms.linux;
+    platforms = platforms.all;
     maintainers = with maintainers; [ abbradar ];
     homepage = "https://github.com/ram-on/imgurbash2";
   };
diff --git a/pkgs/tools/graphics/jbig2enc/default.nix b/pkgs/tools/graphics/jbig2enc/default.nix
index 05818bf8dda..a4b396c3d23 100644
--- a/pkgs/tools/graphics/jbig2enc/default.nix
+++ b/pkgs/tools/graphics/jbig2enc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, leptonica, zlib, libwebp, giflib, libjpeg, libpng, libtiff }:
+{ lib, stdenv, fetchurl, leptonica, zlib, libwebp, giflib, libjpeg, libpng, libtiff }:
 
 stdenv.mkDerivation {
   name = "jbig2enc-0.28";
@@ -26,7 +26,7 @@ stdenv.mkDerivation {
 
   meta = {
     description = "Encoder for the JBIG2 image compression format";
-    license = stdenv.lib.licenses.asl20;
-    platforms = stdenv.lib.platforms.all;
+    license = lib.licenses.asl20;
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/graphics/jhead/default.nix b/pkgs/tools/graphics/jhead/default.nix
index 19a0e26d9cc..16e57252275 100644
--- a/pkgs/tools/graphics/jhead/default.nix
+++ b/pkgs/tools/graphics/jhead/default.nix
@@ -1,31 +1,20 @@
-{ stdenv, fetchurl, fetchpatch, libjpeg }:
+{ lib, stdenv, fetchFromGitHub, libjpeg }:
 
 stdenv.mkDerivation rec {
   pname = "jhead";
-  version = "3.04";
+  version = "3.06.0.1";
 
-  src = fetchurl {
-    url = "http://www.sentex.net/~mwandel/jhead/${pname}-${version}.tar.gz";
-    sha256 = "1j831bqw1qpkbchdriwcy3sgzvbagaj45wlc124fs9bc9z7vp2gg";
+  src = fetchFromGitHub {
+    owner = "Matthias-Wandel";
+    repo = "jhead";
+    rev = version;
+    sha256 = "0zgh36486cpcnf7xg6dwf7rhz2h4gpayqvdk8hmrx6y418b2pfyf";
   };
 
-  patches = [
-    (fetchpatch {
-      url = "https://sources.debian.org/data/main/j/jhead/1:3.04-2/debian/patches/01_gpsinfo.c";
-      sha256 = "0r8hdbfrdxip4dwz5wqsv47a29j33cx7w5zx4jdhp5l1ihg003lz";
-    })
-  ];
-
   buildInputs = [ libjpeg ];
 
   makeFlags = [ "CPPFLAGS=" "CFLAGS=-O3" "LDFLAGS=" ];
 
-  patchPhase = ''
-    sed -i '/dpkg-buildflags/d' makefile
-    substituteInPlace jhead.c \
-      --replace "jpegtran -trim" "${libjpeg.bin}/bin/jpegtran -trim"
-  '';
-
   installPhase = ''
     mkdir -p \
       $out/bin \
@@ -37,7 +26,7 @@ stdenv.mkDerivation rec {
     cp -v *.txt $out/share/doc/${pname}-${version}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.sentex.net/~mwandel/jhead/";
     description = "Exif Jpeg header manipulation tool";
     license = licenses.publicDomain;
diff --git a/pkgs/tools/graphics/kst/default.nix b/pkgs/tools/graphics/kst/default.nix
deleted file mode 100644
index 9c0c8bae49b..00000000000
--- a/pkgs/tools/graphics/kst/default.nix
+++ /dev/null
@@ -1,32 +0,0 @@
-{ 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/pkgs/tools/graphics/ldgallery/compiler/default.nix b/pkgs/tools/graphics/ldgallery/compiler/default.nix
new file mode 100644
index 00000000000..9316e9d38e0
--- /dev/null
+++ b/pkgs/tools/graphics/ldgallery/compiler/default.nix
@@ -0,0 +1,37 @@
+# generated with cabal2nix by ./generate.sh
+{ mkDerivation, aeson, base, cmdargs, containers, data-ordlist
+, directory, fetchgit, filepath, Glob, hpack, parallel-io, process
+, safe, lib, text, time, yaml
+}:
+mkDerivation {
+  pname = "ldgallery-compiler";
+  version = "2.0";
+  src = fetchgit {
+    url = "https://github.com/pacien/ldgallery.git";
+    sha256 = "1a82wy6ns1434gdba2l04crvr5waf03y02bappcxqci2cfb1cznz";
+    rev = "e93f7b1eb84c083d67567115284c0002a3a7d5fc";
+    fetchSubmodules = true;
+  };
+  postUnpack = "sourceRoot+=/compiler; echo source root reset to $sourceRoot";
+  isLibrary = true;
+  isExecutable = true;
+  enableSeparateDataOutput = true;
+  libraryHaskellDepends = [
+    aeson base cmdargs containers data-ordlist directory filepath Glob
+    parallel-io process safe text time yaml
+  ];
+  libraryToolDepends = [ hpack ];
+  executableHaskellDepends = [
+    aeson base cmdargs containers data-ordlist directory filepath Glob
+    parallel-io process safe text time yaml
+  ];
+  testHaskellDepends = [
+    aeson base cmdargs containers data-ordlist directory filepath Glob
+    parallel-io process safe text time yaml
+  ];
+  prePatch = "hpack";
+  homepage = "https://ldgallery.pacien.org";
+  description = "A static generator which turns a collection of tagged pictures into a searchable web gallery";
+  license = lib.licenses.agpl3;
+  maintainers = with lib.maintainers; [ pacien ];
+}
diff --git a/pkgs/tools/graphics/ldgallery/compiler/generate.sh b/pkgs/tools/graphics/ldgallery/compiler/generate.sh
new file mode 100755
index 00000000000..355206cb0ff
--- /dev/null
+++ b/pkgs/tools/graphics/ldgallery/compiler/generate.sh
@@ -0,0 +1,19 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p cabal2nix
+
+set -euo pipefail
+
+if [ "$#" -ne 1 ] || [[ "$1" == -* ]]; then
+  echo "Regenerates the nix file for the ldgallery-compiler package."
+  echo "Usage: $0 <git release tag>"
+  exit 1
+fi
+
+echo "# generated with cabal2nix by ./generate.sh" > default.nix
+
+cabal2nix \
+  --maintainer pacien \
+  --subpath compiler \
+  --revision $1 \
+  "https://github.com/pacien/ldgallery.git" \
+  >> default.nix
diff --git a/pkgs/tools/graphics/ldgallery/default.nix b/pkgs/tools/graphics/ldgallery/default.nix
new file mode 100644
index 00000000000..84d179374ae
--- /dev/null
+++ b/pkgs/tools/graphics/ldgallery/default.nix
@@ -0,0 +1,53 @@
+{ lib, pkgs, makeWrapper, haskellPackages, haskell, pandoc, imagemagick, CoreServices }:
+
+with lib;
+with haskell.lib;
+
+let
+  ldgallery-viewer = pkgs.callPackage ./viewer { inherit CoreServices; };
+  inherit (haskellPackages) ldgallery-compiler;
+
+in
+
+# making sure that the versions of the compiler and viewer parts are in sync
+assert ldgallery-compiler.version == versions.majorMinor ldgallery-viewer.version;
+
+justStaticExecutables (overrideCabal ldgallery-compiler (oldAttrs: {
+  pname = "ldgallery"; # bundled viewer + compiler
+
+  buildTools = (oldAttrs.buildTools or []) ++ [ makeWrapper pandoc ];
+
+  prePatch = ''
+    # add viewer dist to data
+    ln -s "${ldgallery-viewer}/share/ldgallery/viewer" "data/"
+
+    ${oldAttrs.prePatch or ""}
+  '';
+
+  postInstall = ''
+    ${oldAttrs.postInstall or ""}
+
+    # wrapper for runtime dependencies registration
+    wrapProgram "$out/bin/ldgallery" \
+      --prefix PATH : ${lib.makeBinPath [ imagemagick ]}
+
+    # bash completion
+    mkdir -p "$out/share/bash-completion/completions"
+    "$out/bin/ldgallery" \
+      --help=bash \
+      > "$out/share/bash-completion/completions/ldgallery"
+
+    # man pages
+    mkdir -p $out/share/man/man{1,7}
+    ln -s ${ldgallery-viewer}/share/man/man7/* "$out/share/man/man7/"
+    pandoc --standalone --to man \
+      "../ldgallery-quickstart.7.md" \
+      --output "$out/share/man/man7/ldgallery-quickstart.7"
+    pandoc --standalone --to man \
+      "ldgallery.1.md" \
+      --output "$out/share/man/man1/ldgallery.1"
+  '';
+
+  # other package metadata (maintainer, description, license, ...)
+  # are inherited from the compiler package
+}))
diff --git a/pkgs/tools/graphics/ldgallery/viewer/default.nix b/pkgs/tools/graphics/ldgallery/viewer/default.nix
new file mode 100644
index 00000000000..f4cebde8607
--- /dev/null
+++ b/pkgs/tools/graphics/ldgallery/viewer/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchFromGitHub, pkgs, nodejs-12_x, pandoc, CoreServices }:
+
+with lib;
+
+let
+  # Note for maintainers:
+  # * keep version in sync with the ldgallery compiler
+  # * regenerate node-*.nix with `./generate.sh <git release tag>`
+  sourcePkg = fetchFromGitHub {
+    owner = "pacien";
+    repo = "ldgallery";
+    rev = "v2.0";
+    sha256 = "1a82wy6ns1434gdba2l04crvr5waf03y02bappcxqci2cfb1cznz";
+  };
+
+  nodePackages = import ./node-composition.nix {
+    inherit pkgs;
+    inherit (stdenv.hostPlatform) system;
+
+    # some native node dependencies still require NodeJS 12 with Python 2
+    nodejs = nodejs-12_x;
+  };
+
+  nodePkg = nodePackages.package.override {
+    src = "${sourcePkg}/viewer";
+    postInstall = "npm run build";
+    buildInputs = optionals stdenv.isDarwin [ CoreServices ];
+  };
+
+in
+
+# making sure that the source and the node package are in sync
+assert versions.majorMinor nodePkg.version == removePrefix "v" sourcePkg.rev;
+
+stdenv.mkDerivation {
+  pname = nodePkg.packageName;
+  version = nodePkg.version;
+  src = nodePkg;
+
+  buildInputs = [ pandoc ];
+
+  installPhase = ''
+    mkdir -p "$out/share/ldgallery"
+    cp -rp "lib/node_modules/ldgallery-viewer/dist" \
+      "$out/share/ldgallery/viewer/"
+    cp -rp "lib/node_modules/ldgallery-viewer/examples" \
+      "$out/share/ldgallery/viewer/"
+
+    mkdir -p "$out/share/man/man7"
+    pandoc --standalone --to man \
+      "lib/node_modules/ldgallery-viewer/ldgallery-viewer.7.md" \
+      --output "$out/share/man/man7/ldgallery-viewer.7"
+  '';
+}
diff --git a/pkgs/tools/graphics/ldgallery/viewer/generate.sh b/pkgs/tools/graphics/ldgallery/viewer/generate.sh
new file mode 100755
index 00000000000..f115fb11d9b
--- /dev/null
+++ b/pkgs/tools/graphics/ldgallery/viewer/generate.sh
@@ -0,0 +1,30 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=../../../../.. -i bash -p nodePackages.node2nix
+
+# TODO: merge with other node packages in nixpkgs/pkgs/development/node-packages once
+# * support for npm projects in sub-directories is added to node2nix:
+#   https://github.com/svanderburg/node2nix/issues/177
+# * we find a way to enable development dependencies for some of the packages
+
+set -euo pipefail
+
+if [ "$#" -ne 1 ] || [[ "$1" == -* ]]; then
+  echo "Regenerates the node composition and package nix files for the ldgallery-viewer package."
+  echo "Usage: $0 <git release tag>"
+  exit 1
+fi
+
+wget https://github.com/pacien/ldgallery/raw/$1/viewer/package.json
+wget https://github.com/pacien/ldgallery/raw/$1/viewer/package-lock.json
+
+# Development dependencies are required for this Vue application to build
+node2nix \
+  --node-env ../../../../development/node-packages/node-env.nix \
+  --development \
+  --input ./package.json \
+  --lock ./package-lock.json \
+  --output node-packages.nix \
+  --composition node-composition.nix \
+  --no-copy-node-env
+
+rm package.json package-lock.json
diff --git a/pkgs/tools/graphics/ldgallery/viewer/node-composition.nix b/pkgs/tools/graphics/ldgallery/viewer/node-composition.nix
new file mode 100644
index 00000000000..aaf54a05c88
--- /dev/null
+++ b/pkgs/tools/graphics/ldgallery/viewer/node-composition.nix
@@ -0,0 +1,17 @@
+# This file has been generated by node2nix 1.9.0. Do not edit!
+
+{pkgs ? import <nixpkgs> {
+    inherit system;
+  }, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-12_x"}:
+
+let
+  nodeEnv = import ../../../../development/node-packages/node-env.nix {
+    inherit (pkgs) stdenv lib python2 runCommand writeTextFile;
+    inherit pkgs nodejs;
+    libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
+  };
+in
+import ./node-packages.nix {
+  inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit;
+  inherit nodeEnv;
+}
diff --git a/pkgs/tools/graphics/ldgallery/viewer/node-packages.nix b/pkgs/tools/graphics/ldgallery/viewer/node-packages.nix
new file mode 100644
index 00000000000..ce00bdfd097
--- /dev/null
+++ b/pkgs/tools/graphics/ldgallery/viewer/node-packages.nix
@@ -0,0 +1,13281 @@
+# This file has been generated by node2nix 1.9.0. Do not edit!
+
+{nodeEnv, fetchurl, fetchgit, nix-gitignore, stdenv, lib, globalBuildInputs ? []}:
+
+let
+  sources = {
+    "@babel/code-frame-7.10.3" = {
+      name = "_at_babel_slash_code-frame";
+      packageName = "@babel/code-frame";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz";
+        sha512 = "fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==";
+      };
+    };
+    "@babel/code-frame-7.5.5" = {
+      name = "_at_babel_slash_code-frame";
+      packageName = "@babel/code-frame";
+      version = "7.5.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz";
+        sha512 = "27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==";
+      };
+    };
+    "@babel/compat-data-7.10.3" = {
+      name = "_at_babel_slash_compat-data";
+      packageName = "@babel/compat-data";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.3.tgz";
+        sha512 = "BDIfJ9uNZuI0LajPfoYV28lX8kyCPMHY6uY4WH1lJdcicmAfxCK5ASzaeV0D/wsUaRH/cLk+amuxtC37sZ8TUg==";
+      };
+    };
+    "@babel/core-7.10.3" = {
+      name = "_at_babel_slash_core";
+      packageName = "@babel/core";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/core/-/core-7.10.3.tgz";
+        sha512 = "5YqWxYE3pyhIi84L84YcwjeEgS+fa7ZjK6IBVGTjDVfm64njkR2lfDhVR5OudLk8x2GK59YoSyVv+L/03k1q9w==";
+      };
+    };
+    "@babel/generator-7.10.3" = {
+      name = "_at_babel_slash_generator";
+      packageName = "@babel/generator";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz";
+        sha512 = "drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==";
+      };
+    };
+    "@babel/helper-annotate-as-pure-7.10.1" = {
+      name = "_at_babel_slash_helper-annotate-as-pure";
+      packageName = "@babel/helper-annotate-as-pure";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz";
+        sha512 = "ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw==";
+      };
+    };
+    "@babel/helper-builder-binary-assignment-operator-visitor-7.10.3" = {
+      name = "_at_babel_slash_helper-builder-binary-assignment-operator-visitor";
+      packageName = "@babel/helper-builder-binary-assignment-operator-visitor";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.3.tgz";
+        sha512 = "lo4XXRnBlU6eRM92FkiZxpo1xFLmv3VsPFk61zJKMm7XYJfwqXHsYJTY6agoc4a3L8QPw1HqWehO18coZgbT6A==";
+      };
+    };
+    "@babel/helper-compilation-targets-7.10.2" = {
+      name = "_at_babel_slash_helper-compilation-targets";
+      packageName = "@babel/helper-compilation-targets";
+      version = "7.10.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz";
+        sha512 = "hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA==";
+      };
+    };
+    "@babel/helper-create-class-features-plugin-7.10.3" = {
+      name = "_at_babel_slash_helper-create-class-features-plugin";
+      packageName = "@babel/helper-create-class-features-plugin";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.3.tgz";
+        sha512 = "iRT9VwqtdFmv7UheJWthGc/h2s7MqoweBF9RUj77NFZsg9VfISvBTum3k6coAhJ8RWv2tj3yUjA03HxPd0vfpQ==";
+      };
+    };
+    "@babel/helper-create-regexp-features-plugin-7.10.1" = {
+      name = "_at_babel_slash_helper-create-regexp-features-plugin";
+      packageName = "@babel/helper-create-regexp-features-plugin";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz";
+        sha512 = "Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA==";
+      };
+    };
+    "@babel/helper-define-map-7.10.3" = {
+      name = "_at_babel_slash_helper-define-map";
+      packageName = "@babel/helper-define-map";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.3.tgz";
+        sha512 = "bxRzDi4Sin/k0drWCczppOhov1sBSdBvXJObM1NLHQzjhXhwRtn7aRWGvLJWCYbuu2qUk3EKs6Ci9C9ps8XokQ==";
+      };
+    };
+    "@babel/helper-explode-assignable-expression-7.10.3" = {
+      name = "_at_babel_slash_helper-explode-assignable-expression";
+      packageName = "@babel/helper-explode-assignable-expression";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.3.tgz";
+        sha512 = "0nKcR64XrOC3lsl+uhD15cwxPvaB6QKUDlD84OT9C3myRbhJqTMYir69/RWItUvHpharv0eJ/wk7fl34ONSwZw==";
+      };
+    };
+    "@babel/helper-function-name-7.10.3" = {
+      name = "_at_babel_slash_helper-function-name";
+      packageName = "@babel/helper-function-name";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz";
+        sha512 = "FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==";
+      };
+    };
+    "@babel/helper-get-function-arity-7.10.3" = {
+      name = "_at_babel_slash_helper-get-function-arity";
+      packageName = "@babel/helper-get-function-arity";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz";
+        sha512 = "iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==";
+      };
+    };
+    "@babel/helper-hoist-variables-7.10.3" = {
+      name = "_at_babel_slash_helper-hoist-variables";
+      packageName = "@babel/helper-hoist-variables";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.3.tgz";
+        sha512 = "9JyafKoBt5h20Yv1+BXQMdcXXavozI1vt401KBiRc2qzUepbVnd7ogVNymY1xkQN9fekGwfxtotH2Yf5xsGzgg==";
+      };
+    };
+    "@babel/helper-member-expression-to-functions-7.10.3" = {
+      name = "_at_babel_slash_helper-member-expression-to-functions";
+      packageName = "@babel/helper-member-expression-to-functions";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.3.tgz";
+        sha512 = "q7+37c4EPLSjNb2NmWOjNwj0+BOyYlssuQ58kHEWk1Z78K5i8vTUsteq78HMieRPQSl/NtpQyJfdjt3qZ5V2vw==";
+      };
+    };
+    "@babel/helper-module-imports-7.10.3" = {
+      name = "_at_babel_slash_helper-module-imports";
+      packageName = "@babel/helper-module-imports";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.3.tgz";
+        sha512 = "Jtqw5M9pahLSUWA+76nhK9OG8nwYXzhQzVIGFoNaHnXF/r4l7kz4Fl0UAW7B6mqC5myoJiBP5/YQlXQTMfHI9w==";
+      };
+    };
+    "@babel/helper-module-transforms-7.10.1" = {
+      name = "_at_babel_slash_helper-module-transforms";
+      packageName = "@babel/helper-module-transforms";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz";
+        sha512 = "RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==";
+      };
+    };
+    "@babel/helper-optimise-call-expression-7.10.3" = {
+      name = "_at_babel_slash_helper-optimise-call-expression";
+      packageName = "@babel/helper-optimise-call-expression";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz";
+        sha512 = "kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg==";
+      };
+    };
+    "@babel/helper-plugin-utils-7.10.3" = {
+      name = "_at_babel_slash_helper-plugin-utils";
+      packageName = "@babel/helper-plugin-utils";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz";
+        sha512 = "j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g==";
+      };
+    };
+    "@babel/helper-regex-7.10.1" = {
+      name = "_at_babel_slash_helper-regex";
+      packageName = "@babel/helper-regex";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.1.tgz";
+        sha512 = "7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g==";
+      };
+    };
+    "@babel/helper-remap-async-to-generator-7.10.3" = {
+      name = "_at_babel_slash_helper-remap-async-to-generator";
+      packageName = "@babel/helper-remap-async-to-generator";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.3.tgz";
+        sha512 = "sLB7666ARbJUGDO60ZormmhQOyqMX/shKBXZ7fy937s+3ID8gSrneMvKSSb+8xIM5V7Vn6uNVtOY1vIm26XLtA==";
+      };
+    };
+    "@babel/helper-replace-supers-7.10.1" = {
+      name = "_at_babel_slash_helper-replace-supers";
+      packageName = "@babel/helper-replace-supers";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz";
+        sha512 = "SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==";
+      };
+    };
+    "@babel/helper-simple-access-7.10.1" = {
+      name = "_at_babel_slash_helper-simple-access";
+      packageName = "@babel/helper-simple-access";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz";
+        sha512 = "VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==";
+      };
+    };
+    "@babel/helper-split-export-declaration-7.10.1" = {
+      name = "_at_babel_slash_helper-split-export-declaration";
+      packageName = "@babel/helper-split-export-declaration";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz";
+        sha512 = "UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==";
+      };
+    };
+    "@babel/helper-validator-identifier-7.10.3" = {
+      name = "_at_babel_slash_helper-validator-identifier";
+      packageName = "@babel/helper-validator-identifier";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz";
+        sha512 = "bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==";
+      };
+    };
+    "@babel/helper-wrap-function-7.10.1" = {
+      name = "_at_babel_slash_helper-wrap-function";
+      packageName = "@babel/helper-wrap-function";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz";
+        sha512 = "C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ==";
+      };
+    };
+    "@babel/helpers-7.10.1" = {
+      name = "_at_babel_slash_helpers";
+      packageName = "@babel/helpers";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.1.tgz";
+        sha512 = "muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==";
+      };
+    };
+    "@babel/highlight-7.10.3" = {
+      name = "_at_babel_slash_highlight";
+      packageName = "@babel/highlight";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz";
+        sha512 = "Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==";
+      };
+    };
+    "@babel/highlight-7.5.0" = {
+      name = "_at_babel_slash_highlight";
+      packageName = "@babel/highlight";
+      version = "7.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz";
+        sha512 = "7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==";
+      };
+    };
+    "@babel/parser-7.10.3" = {
+      name = "_at_babel_slash_parser";
+      packageName = "@babel/parser";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz";
+        sha512 = "oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA==";
+      };
+    };
+    "@babel/plugin-proposal-async-generator-functions-7.10.3" = {
+      name = "_at_babel_slash_plugin-proposal-async-generator-functions";
+      packageName = "@babel/plugin-proposal-async-generator-functions";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.3.tgz";
+        sha512 = "WUUWM7YTOudF4jZBAJIW9D7aViYC/Fn0Pln4RIHlQALyno3sXSjqmTA4Zy1TKC2D49RCR8Y/Pn4OIUtEypK3CA==";
+      };
+    };
+    "@babel/plugin-proposal-class-properties-7.10.1" = {
+      name = "_at_babel_slash_plugin-proposal-class-properties";
+      packageName = "@babel/plugin-proposal-class-properties";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz";
+        sha512 = "sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw==";
+      };
+    };
+    "@babel/plugin-proposal-decorators-7.10.3" = {
+      name = "_at_babel_slash_plugin-proposal-decorators";
+      packageName = "@babel/plugin-proposal-decorators";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.3.tgz";
+        sha512 = "Rzwn5tcYFTdWWK3IrhMZkMDjzFQLIGYqHvv9XuzNnEB91Y6gHr/JjazYV1Yec9g0yMLhy1p/21eiW1P7f5UN4A==";
+      };
+    };
+    "@babel/plugin-proposal-dynamic-import-7.10.1" = {
+      name = "_at_babel_slash_plugin-proposal-dynamic-import";
+      packageName = "@babel/plugin-proposal-dynamic-import";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz";
+        sha512 = "Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA==";
+      };
+    };
+    "@babel/plugin-proposal-json-strings-7.10.1" = {
+      name = "_at_babel_slash_plugin-proposal-json-strings";
+      packageName = "@babel/plugin-proposal-json-strings";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz";
+        sha512 = "m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg==";
+      };
+    };
+    "@babel/plugin-proposal-nullish-coalescing-operator-7.10.1" = {
+      name = "_at_babel_slash_plugin-proposal-nullish-coalescing-operator";
+      packageName = "@babel/plugin-proposal-nullish-coalescing-operator";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz";
+        sha512 = "56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA==";
+      };
+    };
+    "@babel/plugin-proposal-numeric-separator-7.10.1" = {
+      name = "_at_babel_slash_plugin-proposal-numeric-separator";
+      packageName = "@babel/plugin-proposal-numeric-separator";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz";
+        sha512 = "jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA==";
+      };
+    };
+    "@babel/plugin-proposal-object-rest-spread-7.10.3" = {
+      name = "_at_babel_slash_plugin-proposal-object-rest-spread";
+      packageName = "@babel/plugin-proposal-object-rest-spread";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.3.tgz";
+        sha512 = "ZZh5leCIlH9lni5bU/wB/UcjtcVLgR8gc+FAgW2OOY+m9h1II3ItTO1/cewNUcsIDZSYcSaz/rYVls+Fb0ExVQ==";
+      };
+    };
+    "@babel/plugin-proposal-optional-catch-binding-7.10.1" = {
+      name = "_at_babel_slash_plugin-proposal-optional-catch-binding";
+      packageName = "@babel/plugin-proposal-optional-catch-binding";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz";
+        sha512 = "VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA==";
+      };
+    };
+    "@babel/plugin-proposal-optional-chaining-7.10.3" = {
+      name = "_at_babel_slash_plugin-proposal-optional-chaining";
+      packageName = "@babel/plugin-proposal-optional-chaining";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.3.tgz";
+        sha512 = "yyG3n9dJ1vZ6v5sfmIlMMZ8azQoqx/5/nZTSWX1td6L1H1bsjzA8TInDChpafCZiJkeOFzp/PtrfigAQXxI1Ng==";
+      };
+    };
+    "@babel/plugin-proposal-private-methods-7.10.1" = {
+      name = "_at_babel_slash_plugin-proposal-private-methods";
+      packageName = "@babel/plugin-proposal-private-methods";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz";
+        sha512 = "RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg==";
+      };
+    };
+    "@babel/plugin-proposal-unicode-property-regex-7.10.1" = {
+      name = "_at_babel_slash_plugin-proposal-unicode-property-regex";
+      packageName = "@babel/plugin-proposal-unicode-property-regex";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz";
+        sha512 = "JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ==";
+      };
+    };
+    "@babel/plugin-syntax-async-generators-7.8.4" = {
+      name = "_at_babel_slash_plugin-syntax-async-generators";
+      packageName = "@babel/plugin-syntax-async-generators";
+      version = "7.8.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz";
+        sha512 = "tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==";
+      };
+    };
+    "@babel/plugin-syntax-class-properties-7.10.1" = {
+      name = "_at_babel_slash_plugin-syntax-class-properties";
+      packageName = "@babel/plugin-syntax-class-properties";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz";
+        sha512 = "Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ==";
+      };
+    };
+    "@babel/plugin-syntax-decorators-7.10.1" = {
+      name = "_at_babel_slash_plugin-syntax-decorators";
+      packageName = "@babel/plugin-syntax-decorators";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.1.tgz";
+        sha512 = "a9OAbQhKOwSle1Vr0NJu/ISg1sPfdEkfRKWpgPuzhnWWzForou2gIeUIIwjAMHRekhhpJ7eulZlYs0H14Cbi+g==";
+      };
+    };
+    "@babel/plugin-syntax-dynamic-import-7.8.3" = {
+      name = "_at_babel_slash_plugin-syntax-dynamic-import";
+      packageName = "@babel/plugin-syntax-dynamic-import";
+      version = "7.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz";
+        sha512 = "5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==";
+      };
+    };
+    "@babel/plugin-syntax-json-strings-7.8.3" = {
+      name = "_at_babel_slash_plugin-syntax-json-strings";
+      packageName = "@babel/plugin-syntax-json-strings";
+      version = "7.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz";
+        sha512 = "lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==";
+      };
+    };
+    "@babel/plugin-syntax-jsx-7.10.1" = {
+      name = "_at_babel_slash_plugin-syntax-jsx";
+      packageName = "@babel/plugin-syntax-jsx";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.1.tgz";
+        sha512 = "+OxyOArpVFXQeXKLO9o+r2I4dIoVoy6+Uu0vKELrlweDM3QJADZj+Z+5ERansZqIZBcLj42vHnDI8Rz9BnRIuQ==";
+      };
+    };
+    "@babel/plugin-syntax-nullish-coalescing-operator-7.8.3" = {
+      name = "_at_babel_slash_plugin-syntax-nullish-coalescing-operator";
+      packageName = "@babel/plugin-syntax-nullish-coalescing-operator";
+      version = "7.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz";
+        sha512 = "aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==";
+      };
+    };
+    "@babel/plugin-syntax-numeric-separator-7.10.1" = {
+      name = "_at_babel_slash_plugin-syntax-numeric-separator";
+      packageName = "@babel/plugin-syntax-numeric-separator";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz";
+        sha512 = "uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg==";
+      };
+    };
+    "@babel/plugin-syntax-object-rest-spread-7.8.3" = {
+      name = "_at_babel_slash_plugin-syntax-object-rest-spread";
+      packageName = "@babel/plugin-syntax-object-rest-spread";
+      version = "7.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz";
+        sha512 = "XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==";
+      };
+    };
+    "@babel/plugin-syntax-optional-catch-binding-7.8.3" = {
+      name = "_at_babel_slash_plugin-syntax-optional-catch-binding";
+      packageName = "@babel/plugin-syntax-optional-catch-binding";
+      version = "7.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz";
+        sha512 = "6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==";
+      };
+    };
+    "@babel/plugin-syntax-optional-chaining-7.8.3" = {
+      name = "_at_babel_slash_plugin-syntax-optional-chaining";
+      packageName = "@babel/plugin-syntax-optional-chaining";
+      version = "7.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz";
+        sha512 = "KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==";
+      };
+    };
+    "@babel/plugin-syntax-top-level-await-7.10.1" = {
+      name = "_at_babel_slash_plugin-syntax-top-level-await";
+      packageName = "@babel/plugin-syntax-top-level-await";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz";
+        sha512 = "hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ==";
+      };
+    };
+    "@babel/plugin-transform-arrow-functions-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-arrow-functions";
+      packageName = "@babel/plugin-transform-arrow-functions";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz";
+        sha512 = "6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA==";
+      };
+    };
+    "@babel/plugin-transform-async-to-generator-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-async-to-generator";
+      packageName = "@babel/plugin-transform-async-to-generator";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz";
+        sha512 = "XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg==";
+      };
+    };
+    "@babel/plugin-transform-block-scoped-functions-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-block-scoped-functions";
+      packageName = "@babel/plugin-transform-block-scoped-functions";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz";
+        sha512 = "B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q==";
+      };
+    };
+    "@babel/plugin-transform-block-scoping-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-block-scoping";
+      packageName = "@babel/plugin-transform-block-scoping";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz";
+        sha512 = "8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw==";
+      };
+    };
+    "@babel/plugin-transform-classes-7.10.3" = {
+      name = "_at_babel_slash_plugin-transform-classes";
+      packageName = "@babel/plugin-transform-classes";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.3.tgz";
+        sha512 = "irEX0ChJLaZVC7FvvRoSIxJlmk0IczFLcwaRXUArBKYHCHbOhe57aG8q3uw/fJsoSXvZhjRX960hyeAGlVBXZw==";
+      };
+    };
+    "@babel/plugin-transform-computed-properties-7.10.3" = {
+      name = "_at_babel_slash_plugin-transform-computed-properties";
+      packageName = "@babel/plugin-transform-computed-properties";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.3.tgz";
+        sha512 = "GWzhaBOsdbjVFav96drOz7FzrcEW6AP5nax0gLIpstiFaI3LOb2tAg06TimaWU6YKOfUACK3FVrxPJ4GSc5TgA==";
+      };
+    };
+    "@babel/plugin-transform-destructuring-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-destructuring";
+      packageName = "@babel/plugin-transform-destructuring";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz";
+        sha512 = "V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA==";
+      };
+    };
+    "@babel/plugin-transform-dotall-regex-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-dotall-regex";
+      packageName = "@babel/plugin-transform-dotall-regex";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz";
+        sha512 = "19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA==";
+      };
+    };
+    "@babel/plugin-transform-duplicate-keys-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-duplicate-keys";
+      packageName = "@babel/plugin-transform-duplicate-keys";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz";
+        sha512 = "wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA==";
+      };
+    };
+    "@babel/plugin-transform-exponentiation-operator-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-exponentiation-operator";
+      packageName = "@babel/plugin-transform-exponentiation-operator";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz";
+        sha512 = "lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA==";
+      };
+    };
+    "@babel/plugin-transform-for-of-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-for-of";
+      packageName = "@babel/plugin-transform-for-of";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz";
+        sha512 = "US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w==";
+      };
+    };
+    "@babel/plugin-transform-function-name-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-function-name";
+      packageName = "@babel/plugin-transform-function-name";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz";
+        sha512 = "//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw==";
+      };
+    };
+    "@babel/plugin-transform-literals-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-literals";
+      packageName = "@babel/plugin-transform-literals";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz";
+        sha512 = "qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw==";
+      };
+    };
+    "@babel/plugin-transform-member-expression-literals-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-member-expression-literals";
+      packageName = "@babel/plugin-transform-member-expression-literals";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz";
+        sha512 = "UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA==";
+      };
+    };
+    "@babel/plugin-transform-modules-amd-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-modules-amd";
+      packageName = "@babel/plugin-transform-modules-amd";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz";
+        sha512 = "31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw==";
+      };
+    };
+    "@babel/plugin-transform-modules-commonjs-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-modules-commonjs";
+      packageName = "@babel/plugin-transform-modules-commonjs";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz";
+        sha512 = "AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg==";
+      };
+    };
+    "@babel/plugin-transform-modules-systemjs-7.10.3" = {
+      name = "_at_babel_slash_plugin-transform-modules-systemjs";
+      packageName = "@babel/plugin-transform-modules-systemjs";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.3.tgz";
+        sha512 = "GWXWQMmE1GH4ALc7YXW56BTh/AlzvDWhUNn9ArFF0+Cz5G8esYlVbXfdyHa1xaD1j+GnBoCeoQNlwtZTVdiG/A==";
+      };
+    };
+    "@babel/plugin-transform-modules-umd-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-modules-umd";
+      packageName = "@babel/plugin-transform-modules-umd";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz";
+        sha512 = "EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA==";
+      };
+    };
+    "@babel/plugin-transform-named-capturing-groups-regex-7.10.3" = {
+      name = "_at_babel_slash_plugin-transform-named-capturing-groups-regex";
+      packageName = "@babel/plugin-transform-named-capturing-groups-regex";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.3.tgz";
+        sha512 = "I3EH+RMFyVi8Iy/LekQm948Z4Lz4yKT7rK+vuCAeRm0kTa6Z5W7xuhRxDNJv0FPya/her6AUgrDITb70YHtTvA==";
+      };
+    };
+    "@babel/plugin-transform-new-target-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-new-target";
+      packageName = "@babel/plugin-transform-new-target";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz";
+        sha512 = "MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw==";
+      };
+    };
+    "@babel/plugin-transform-object-super-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-object-super";
+      packageName = "@babel/plugin-transform-object-super";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz";
+        sha512 = "WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw==";
+      };
+    };
+    "@babel/plugin-transform-parameters-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-parameters";
+      packageName = "@babel/plugin-transform-parameters";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz";
+        sha512 = "tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg==";
+      };
+    };
+    "@babel/plugin-transform-property-literals-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-property-literals";
+      packageName = "@babel/plugin-transform-property-literals";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz";
+        sha512 = "Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA==";
+      };
+    };
+    "@babel/plugin-transform-regenerator-7.10.3" = {
+      name = "_at_babel_slash_plugin-transform-regenerator";
+      packageName = "@babel/plugin-transform-regenerator";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.3.tgz";
+        sha512 = "H5kNeW0u8mbk0qa1jVIVTeJJL6/TJ81ltD4oyPx0P499DhMJrTmmIFCmJ3QloGpQG8K9symccB7S7SJpCKLwtw==";
+      };
+    };
+    "@babel/plugin-transform-reserved-words-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-reserved-words";
+      packageName = "@babel/plugin-transform-reserved-words";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz";
+        sha512 = "qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ==";
+      };
+    };
+    "@babel/plugin-transform-runtime-7.10.3" = {
+      name = "_at_babel_slash_plugin-transform-runtime";
+      packageName = "@babel/plugin-transform-runtime";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.3.tgz";
+        sha512 = "b5OzMD1Hi8BBzgQdRHyVVaYrk9zG0wset1it2o3BgonkPadXfOv0aXRqd7864DeOIu3FGKP/h6lr15FE5mahVw==";
+      };
+    };
+    "@babel/plugin-transform-shorthand-properties-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-shorthand-properties";
+      packageName = "@babel/plugin-transform-shorthand-properties";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz";
+        sha512 = "AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g==";
+      };
+    };
+    "@babel/plugin-transform-spread-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-spread";
+      packageName = "@babel/plugin-transform-spread";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz";
+        sha512 = "8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw==";
+      };
+    };
+    "@babel/plugin-transform-sticky-regex-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-sticky-regex";
+      packageName = "@babel/plugin-transform-sticky-regex";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz";
+        sha512 = "j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA==";
+      };
+    };
+    "@babel/plugin-transform-template-literals-7.10.3" = {
+      name = "_at_babel_slash_plugin-transform-template-literals";
+      packageName = "@babel/plugin-transform-template-literals";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.3.tgz";
+        sha512 = "yaBn9OpxQra/bk0/CaA4wr41O0/Whkg6nqjqApcinxM7pro51ojhX6fv1pimAnVjVfDy14K0ULoRL70CA9jWWA==";
+      };
+    };
+    "@babel/plugin-transform-typeof-symbol-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-typeof-symbol";
+      packageName = "@babel/plugin-transform-typeof-symbol";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz";
+        sha512 = "qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g==";
+      };
+    };
+    "@babel/plugin-transform-unicode-escapes-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-unicode-escapes";
+      packageName = "@babel/plugin-transform-unicode-escapes";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz";
+        sha512 = "zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw==";
+      };
+    };
+    "@babel/plugin-transform-unicode-regex-7.10.1" = {
+      name = "_at_babel_slash_plugin-transform-unicode-regex";
+      packageName = "@babel/plugin-transform-unicode-regex";
+      version = "7.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz";
+        sha512 = "Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw==";
+      };
+    };
+    "@babel/preset-env-7.10.3" = {
+      name = "_at_babel_slash_preset-env";
+      packageName = "@babel/preset-env";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.3.tgz";
+        sha512 = "jHaSUgiewTmly88bJtMHbOd1bJf2ocYxb5BWKSDQIP5tmgFuS/n0gl+nhSrYDhT33m0vPxp+rP8oYYgPgMNQlg==";
+      };
+    };
+    "@babel/preset-modules-0.1.3" = {
+      name = "_at_babel_slash_preset-modules";
+      packageName = "@babel/preset-modules";
+      version = "0.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz";
+        sha512 = "Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==";
+      };
+    };
+    "@babel/runtime-7.10.3" = {
+      name = "_at_babel_slash_runtime";
+      packageName = "@babel/runtime";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.3.tgz";
+        sha512 = "RzGO0RLSdokm9Ipe/YD+7ww8X2Ro79qiXZF3HU9ljrM+qnJmH1Vqth+hbiQZy761LnMJTMitHDuKVYTk3k4dLw==";
+      };
+    };
+    "@babel/template-7.10.3" = {
+      name = "_at_babel_slash_template";
+      packageName = "@babel/template";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz";
+        sha512 = "5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==";
+      };
+    };
+    "@babel/traverse-7.10.3" = {
+      name = "_at_babel_slash_traverse";
+      packageName = "@babel/traverse";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz";
+        sha512 = "qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==";
+      };
+    };
+    "@babel/types-7.10.3" = {
+      name = "_at_babel_slash_types";
+      packageName = "@babel/types";
+      version = "7.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz";
+        sha512 = "nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==";
+      };
+    };
+    "@fortawesome/fontawesome-common-types-0.2.30" = {
+      name = "_at_fortawesome_slash_fontawesome-common-types";
+      packageName = "@fortawesome/fontawesome-common-types";
+      version = "0.2.30";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.30.tgz";
+        sha512 = "TsRwpTuKwFNiPhk1UfKgw7zNPeV5RhNp2Uw3pws+9gDAkPGKrtjR1y2lI3SYn7+YzyfuNknflpBA1LRKjt7hMg==";
+      };
+    };
+    "@fortawesome/fontawesome-svg-core-1.2.30" = {
+      name = "_at_fortawesome_slash_fontawesome-svg-core";
+      packageName = "@fortawesome/fontawesome-svg-core";
+      version = "1.2.30";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.30.tgz";
+        sha512 = "E3sAXATKCSVnT17HYmZjjbcmwihrNOCkoU7dVMlasrcwiJAHxSKeZ+4WN5O+ElgO/FaYgJmASl8p9N7/B/RttA==";
+      };
+    };
+    "@fortawesome/free-regular-svg-icons-5.14.0" = {
+      name = "_at_fortawesome_slash_free-regular-svg-icons";
+      packageName = "@fortawesome/free-regular-svg-icons";
+      version = "5.14.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.14.0.tgz";
+        sha512 = "6LCFvjGSMPoUQbn3NVlgiG4CY5iIY8fOm+to/D6QS/GvdqhDt+xZklQeERdCvVRbnFa1ITc1rJHPRXqkX5wztQ==";
+      };
+    };
+    "@fortawesome/free-solid-svg-icons-5.14.0" = {
+      name = "_at_fortawesome_slash_free-solid-svg-icons";
+      packageName = "@fortawesome/free-solid-svg-icons";
+      version = "5.14.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.14.0.tgz";
+        sha512 = "M933RDM8cecaKMWDSk3FRYdnzWGW7kBBlGNGfvqLVwcwhUPNj9gcw+xZMrqBdRqxnSXdl3zWzTCNNGEtFUq67Q==";
+      };
+    };
+    "@fortawesome/vue-fontawesome-2.0.0" = {
+      name = "_at_fortawesome_slash_vue-fontawesome";
+      packageName = "@fortawesome/vue-fontawesome";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-2.0.0.tgz";
+        sha512 = "N3VKw7KzRfOm8hShUVldpinlm13HpvLBQgT63QS+aCrIRLwjoEUXY5Rcmttbfb6HkzZaeqjLqd/aZCQ53UjQpg==";
+      };
+    };
+    "@hapi/address-2.1.4" = {
+      name = "_at_hapi_slash_address";
+      packageName = "@hapi/address";
+      version = "2.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz";
+        sha512 = "QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==";
+      };
+    };
+    "@hapi/bourne-1.3.2" = {
+      name = "_at_hapi_slash_bourne";
+      packageName = "@hapi/bourne";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz";
+        sha512 = "1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==";
+      };
+    };
+    "@hapi/hoek-8.5.1" = {
+      name = "_at_hapi_slash_hoek";
+      packageName = "@hapi/hoek";
+      version = "8.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz";
+        sha512 = "yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==";
+      };
+    };
+    "@hapi/joi-15.1.1" = {
+      name = "_at_hapi_slash_joi";
+      packageName = "@hapi/joi";
+      version = "15.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz";
+        sha512 = "entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==";
+      };
+    };
+    "@hapi/topo-3.1.6" = {
+      name = "_at_hapi_slash_topo";
+      packageName = "@hapi/topo";
+      version = "3.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz";
+        sha512 = "tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==";
+      };
+    };
+    "@intervolga/optimize-cssnano-plugin-1.0.6" = {
+      name = "_at_intervolga_slash_optimize-cssnano-plugin";
+      packageName = "@intervolga/optimize-cssnano-plugin";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz";
+        sha512 = "zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==";
+      };
+    };
+    "@mrmlnc/readdir-enhanced-2.2.1" = {
+      name = "_at_mrmlnc_slash_readdir-enhanced";
+      packageName = "@mrmlnc/readdir-enhanced";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz";
+        sha512 = "bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==";
+      };
+    };
+    "@nodelib/fs.stat-1.1.3" = {
+      name = "_at_nodelib_slash_fs.stat";
+      packageName = "@nodelib/fs.stat";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz";
+        sha512 = "shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==";
+      };
+    };
+    "@soda/friendly-errors-webpack-plugin-1.7.1" = {
+      name = "_at_soda_slash_friendly-errors-webpack-plugin";
+      packageName = "@soda/friendly-errors-webpack-plugin";
+      version = "1.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz";
+        sha512 = "cWKrGaFX+rfbMrAxVv56DzhPNqOJPZuNIS2HGMELtgGzb+vsMzyig9mml5gZ/hr2BGtSLV+dP2LUEuAL8aG2mQ==";
+      };
+    };
+    "@soda/get-current-script-1.0.2" = {
+      name = "_at_soda_slash_get-current-script";
+      packageName = "@soda/get-current-script";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@soda/get-current-script/-/get-current-script-1.0.2.tgz";
+        sha512 = "T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==";
+      };
+    };
+    "@types/anymatch-1.3.1" = {
+      name = "_at_types_slash_anymatch";
+      packageName = "@types/anymatch";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz";
+        sha512 = "/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==";
+      };
+    };
+    "@types/color-name-1.1.1" = {
+      name = "_at_types_slash_color-name";
+      packageName = "@types/color-name";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz";
+        sha512 = "rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==";
+      };
+    };
+    "@types/eslint-visitor-keys-1.0.0" = {
+      name = "_at_types_slash_eslint-visitor-keys";
+      packageName = "@types/eslint-visitor-keys";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz";
+        sha512 = "OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==";
+      };
+    };
+    "@types/events-3.0.0" = {
+      name = "_at_types_slash_events";
+      packageName = "@types/events";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz";
+        sha512 = "EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==";
+      };
+    };
+    "@types/glob-7.1.1" = {
+      name = "_at_types_slash_glob";
+      packageName = "@types/glob";
+      version = "7.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz";
+        sha512 = "1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==";
+      };
+    };
+    "@types/hammerjs-2.0.36" = {
+      name = "_at_types_slash_hammerjs";
+      packageName = "@types/hammerjs";
+      version = "2.0.36";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.36.tgz";
+        sha512 = "7TUK/k2/QGpEAv/BCwSHlYu3NXZhQ9ZwBYpzr9tjlPIL2C5BeGhH3DmVavRx3ZNyELX5TLC91JTz/cen6AAtIQ==";
+      };
+    };
+    "@types/json-schema-7.0.4" = {
+      name = "_at_types_slash_json-schema";
+      packageName = "@types/json-schema";
+      version = "7.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz";
+        sha512 = "8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==";
+      };
+    };
+    "@types/marked-1.1.0" = {
+      name = "_at_types_slash_marked";
+      packageName = "@types/marked";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/marked/-/marked-1.1.0.tgz";
+        sha512 = "j8XXj6/l9kFvCwMyVqozznqpd/nk80krrW+QiIJN60Uu9gX5Pvn4/qPJ2YngQrR3QREPwmrE1f9/EWKVTFzoEw==";
+      };
+    };
+    "@types/minimatch-3.0.3" = {
+      name = "_at_types_slash_minimatch";
+      packageName = "@types/minimatch";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz";
+        sha512 = "tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==";
+      };
+    };
+    "@types/node-13.9.8" = {
+      name = "_at_types_slash_node";
+      packageName = "@types/node";
+      version = "13.9.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/node/-/node-13.9.8.tgz";
+        sha512 = "1WgO8hsyHynlx7nhP1kr0OFzsgKz5XDQL+Lfc3b1Q3qIln/n8cKD4m09NJ0+P1Rq7Zgnc7N0+SsMnoD1rEb0kA==";
+      };
+    };
+    "@types/normalize-package-data-2.4.0" = {
+      name = "_at_types_slash_normalize-package-data";
+      packageName = "@types/normalize-package-data";
+      version = "2.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz";
+        sha512 = "f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==";
+      };
+    };
+    "@types/q-1.5.4" = {
+      name = "_at_types_slash_q";
+      packageName = "@types/q";
+      version = "1.5.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz";
+        sha512 = "1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==";
+      };
+    };
+    "@types/source-list-map-0.1.2" = {
+      name = "_at_types_slash_source-list-map";
+      packageName = "@types/source-list-map";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz";
+        sha512 = "K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==";
+      };
+    };
+    "@types/tapable-1.0.6" = {
+      name = "_at_types_slash_tapable";
+      packageName = "@types/tapable";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz";
+        sha512 = "W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==";
+      };
+    };
+    "@types/uglify-js-3.9.3" = {
+      name = "_at_types_slash_uglify-js";
+      packageName = "@types/uglify-js";
+      version = "3.9.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.3.tgz";
+        sha512 = "KswB5C7Kwduwjj04Ykz+AjvPcfgv/37Za24O2EDzYNbwyzOo8+ydtvzUfZ5UMguiVu29Gx44l1A6VsPPcmYu9w==";
+      };
+    };
+    "@types/webpack-4.41.22" = {
+      name = "_at_types_slash_webpack";
+      packageName = "@types/webpack";
+      version = "4.41.22";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.22.tgz";
+        sha512 = "JQDJK6pj8OMV9gWOnN1dcLCyU9Hzs6lux0wBO4lr1+gyEhIBR9U3FMrz12t2GPkg110XAxEAw2WHF6g7nZIbRQ==";
+      };
+    };
+    "@types/webpack-env-1.15.2" = {
+      name = "_at_types_slash_webpack-env";
+      packageName = "@types/webpack-env";
+      version = "1.15.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.15.2.tgz";
+        sha512 = "67ZgZpAlhIICIdfQrB5fnDvaKFcDxpKibxznfYRVAT4mQE41Dido/3Ty+E3xGBmTogc5+0Qb8tWhna+5B8z1iQ==";
+      };
+    };
+    "@types/webpack-sources-1.4.2" = {
+      name = "_at_types_slash_webpack-sources";
+      packageName = "@types/webpack-sources";
+      version = "1.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-1.4.2.tgz";
+        sha512 = "77T++JyKow4BQB/m9O96n9d/UUHWLQHlcqXb9Vsf4F1+wKNrrlWNFPDLKNT92RJnCSL6CieTc+NDXtCVZswdTw==";
+      };
+    };
+    "@typescript-eslint/eslint-plugin-2.34.0" = {
+      name = "_at_typescript-eslint_slash_eslint-plugin";
+      packageName = "@typescript-eslint/eslint-plugin";
+      version = "2.34.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz";
+        sha512 = "4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==";
+      };
+    };
+    "@typescript-eslint/experimental-utils-2.34.0" = {
+      name = "_at_typescript-eslint_slash_experimental-utils";
+      packageName = "@typescript-eslint/experimental-utils";
+      version = "2.34.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz";
+        sha512 = "eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==";
+      };
+    };
+    "@typescript-eslint/parser-2.34.0" = {
+      name = "_at_typescript-eslint_slash_parser";
+      packageName = "@typescript-eslint/parser";
+      version = "2.34.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz";
+        sha512 = "03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==";
+      };
+    };
+    "@typescript-eslint/typescript-estree-2.34.0" = {
+      name = "_at_typescript-eslint_slash_typescript-estree";
+      packageName = "@typescript-eslint/typescript-estree";
+      version = "2.34.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz";
+        sha512 = "OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==";
+      };
+    };
+    "@vue/babel-helper-vue-jsx-merge-props-1.0.0" = {
+      name = "_at_vue_slash_babel-helper-vue-jsx-merge-props";
+      packageName = "@vue/babel-helper-vue-jsx-merge-props";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz";
+        sha512 = "6tyf5Cqm4m6v7buITuwS+jHzPlIPxbFzEhXR5JGZpbrvOcp1hiQKckd305/3C7C36wFekNTQSxAtgeM0j0yoUw==";
+      };
+    };
+    "@vue/babel-plugin-transform-vue-jsx-1.1.2" = {
+      name = "_at_vue_slash_babel-plugin-transform-vue-jsx";
+      packageName = "@vue/babel-plugin-transform-vue-jsx";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.1.2.tgz";
+        sha512 = "YfdaoSMvD1nj7+DsrwfTvTnhDXI7bsuh+Y5qWwvQXlD24uLgnsoww3qbiZvWf/EoviZMrvqkqN4CBw0W3BWUTQ==";
+      };
+    };
+    "@vue/babel-preset-app-4.4.6" = {
+      name = "_at_vue_slash_babel-preset-app";
+      packageName = "@vue/babel-preset-app";
+      version = "4.4.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-4.4.6.tgz";
+        sha512 = "urIa6Qk3lKacLvscrzxMNyYlTqKFcPAUo5MohOjv1ISZ9PssHw693WTOrqSC0XksdMLtp/rnLvc6l5G8Muk0lw==";
+      };
+    };
+    "@vue/babel-preset-jsx-1.1.2" = {
+      name = "_at_vue_slash_babel-preset-jsx";
+      packageName = "@vue/babel-preset-jsx";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.1.2.tgz";
+        sha512 = "zDpVnFpeC9YXmvGIDSsKNdL7qCG2rA3gjywLYHPCKDT10erjxF4U+6ay9X6TW5fl4GsDlJp9bVfAVQAAVzxxvQ==";
+      };
+    };
+    "@vue/babel-sugar-functional-vue-1.1.2" = {
+      name = "_at_vue_slash_babel-sugar-functional-vue";
+      packageName = "@vue/babel-sugar-functional-vue";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.1.2.tgz";
+        sha512 = "YhmdJQSVEFF5ETJXzrMpj0nkCXEa39TvVxJTuVjzvP2rgKhdMmQzlJuMv/HpadhZaRVMCCF3AEjjJcK5q/cYzQ==";
+      };
+    };
+    "@vue/babel-sugar-inject-h-1.1.2" = {
+      name = "_at_vue_slash_babel-sugar-inject-h";
+      packageName = "@vue/babel-sugar-inject-h";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.1.2.tgz";
+        sha512 = "VRSENdTvD5htpnVp7i7DNuChR5rVMcORdXjvv5HVvpdKHzDZAYiLSD+GhnhxLm3/dMuk8pSzV+k28ECkiN5m8w==";
+      };
+    };
+    "@vue/babel-sugar-v-model-1.1.2" = {
+      name = "_at_vue_slash_babel-sugar-v-model";
+      packageName = "@vue/babel-sugar-v-model";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.1.2.tgz";
+        sha512 = "vLXPvNq8vDtt0u9LqFdpGM9W9IWDmCmCyJXuozlq4F4UYVleXJ2Fa+3JsnTZNJcG+pLjjfnEGHci2339Kj5sGg==";
+      };
+    };
+    "@vue/babel-sugar-v-on-1.1.2" = {
+      name = "_at_vue_slash_babel-sugar-v-on";
+      packageName = "@vue/babel-sugar-v-on";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.1.2.tgz";
+        sha512 = "T8ZCwC8Jp2uRtcZ88YwZtZXe7eQrJcfRq0uTFy6ShbwYJyz5qWskRFoVsdTi9o0WEhmQXxhQUewodOSCUPVmsQ==";
+      };
+    };
+    "@vue/cli-overlay-4.4.6" = {
+      name = "_at_vue_slash_cli-overlay";
+      packageName = "@vue/cli-overlay";
+      version = "4.4.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-4.4.6.tgz";
+        sha512 = "fzjg2gWQt+jw5fyLsD9HZNxGNQgZjLDI2s9bLWJwRucdfmncSi9neqA0TZyszGrgcJA4Qu4V5KgV0qwVSBYCaw==";
+      };
+    };
+    "@vue/cli-plugin-babel-4.4.6" = {
+      name = "_at_vue_slash_cli-plugin-babel";
+      packageName = "@vue/cli-plugin-babel";
+      version = "4.4.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-4.4.6.tgz";
+        sha512 = "9cX9mN+4DIbcqw3rV6UBOA0t5zikIkrBLQloUzsOBOu5Xb7/UoD7inInFj7bnyHUflr5LqbdWJ+etCQcWAIIXA==";
+      };
+    };
+    "@vue/cli-plugin-eslint-4.4.6" = {
+      name = "_at_vue_slash_cli-plugin-eslint";
+      packageName = "@vue/cli-plugin-eslint";
+      version = "4.4.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.4.6.tgz";
+        sha512 = "3a9rVpOKPQsDgAlRkhmBMHboGobivG/47BbQGE66Z8YJxrgF/AWikP3Jy67SmxtszRkyiWfw4aJFRV9r3MzffQ==";
+      };
+    };
+    "@vue/cli-plugin-router-4.4.6" = {
+      name = "_at_vue_slash_cli-plugin-router";
+      packageName = "@vue/cli-plugin-router";
+      version = "4.4.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-4.4.6.tgz";
+        sha512 = "TkLdn0ZYo3zgn78Rk8doPlR+4UkGjGW2R1eGEaZEkue/mw2VhUWtTk9cKLZaYrw0eY8Ro/j+OV6mD+scyrairg==";
+      };
+    };
+    "@vue/cli-plugin-typescript-4.4.6" = {
+      name = "_at_vue_slash_cli-plugin-typescript";
+      packageName = "@vue/cli-plugin-typescript";
+      version = "4.4.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/cli-plugin-typescript/-/cli-plugin-typescript-4.4.6.tgz";
+        sha512 = "FIIx9yqm19M62+2X4QwTrnlePdghsKnFbBPCHJawx3ULx30B11fL7X0uwmcq+kEAAHwAGBI6QyU7dgwPDRUCOw==";
+      };
+    };
+    "@vue/cli-plugin-vuex-4.4.6" = {
+      name = "_at_vue_slash_cli-plugin-vuex";
+      packageName = "@vue/cli-plugin-vuex";
+      version = "4.4.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.4.6.tgz";
+        sha512 = "Ho0YzUivn8BLPqFoFypntR8CMTEXYYHVr0GdnZW99XL+DbGw75f+tJfnrV9UFHDTfvZt7uewKiXDMlrzQ0l3Ug==";
+      };
+    };
+    "@vue/cli-service-4.4.6" = {
+      name = "_at_vue_slash_cli-service";
+      packageName = "@vue/cli-service";
+      version = "4.4.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/cli-service/-/cli-service-4.4.6.tgz";
+        sha512 = "k5OFGh2NnvRymCyq9DfBiNJvECUuun3pl5KMm3557IZyA5E5csv+RHoSW3dX8HHe0zXq18g52VswP1llvR9POw==";
+      };
+    };
+    "@vue/cli-shared-utils-4.4.6" = {
+      name = "_at_vue_slash_cli-shared-utils";
+      packageName = "@vue/cli-shared-utils";
+      version = "4.4.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.4.6.tgz";
+        sha512 = "ba+FZZCjiTSu2otnLjY4qXqASe7ZIQ/QBljk5oRPgqrR0p1NUkDPUcZhqa041aOaSW1yAfSfhOD7Q84nMnWhzQ==";
+      };
+    };
+    "@vue/component-compiler-utils-3.1.2" = {
+      name = "_at_vue_slash_component-compiler-utils";
+      packageName = "@vue/component-compiler-utils";
+      version = "3.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.1.2.tgz";
+        sha512 = "QLq9z8m79mCinpaEeSURhnNCN6djxpHw0lpP/bodMlt5kALfONpryMthvnrQOlTcIKoF+VoPi+lPHUYeDFPXug==";
+      };
+    };
+    "@vue/eslint-config-typescript-5.0.2" = {
+      name = "_at_vue_slash_eslint-config-typescript";
+      packageName = "@vue/eslint-config-typescript";
+      version = "5.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-5.0.2.tgz";
+        sha512 = "GEZOHKOnelgQf5npA+6VNuhJZu9xEJaics3SYUyRjaSay+2SCpEINHhEpt6fXoNy/aIFt8CkDlt9CaEb+QPIcg==";
+      };
+    };
+    "@vue/preload-webpack-plugin-1.1.1" = {
+      name = "_at_vue_slash_preload-webpack-plugin";
+      packageName = "@vue/preload-webpack-plugin";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.1.tgz";
+        sha512 = "8VCoJeeH8tCkzhkpfOkt+abALQkS11OIHhte5MBzYaKMTqK0A3ZAKEUVAffsOklhEv7t0yrQt696Opnu9oAx+w==";
+      };
+    };
+    "@vue/web-component-wrapper-1.2.0" = {
+      name = "_at_vue_slash_web-component-wrapper";
+      packageName = "@vue/web-component-wrapper";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz";
+        sha512 = "Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw==";
+      };
+    };
+    "@webassemblyjs/ast-1.9.0" = {
+      name = "_at_webassemblyjs_slash_ast";
+      packageName = "@webassemblyjs/ast";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz";
+        sha512 = "C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==";
+      };
+    };
+    "@webassemblyjs/floating-point-hex-parser-1.9.0" = {
+      name = "_at_webassemblyjs_slash_floating-point-hex-parser";
+      packageName = "@webassemblyjs/floating-point-hex-parser";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz";
+        sha512 = "TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==";
+      };
+    };
+    "@webassemblyjs/helper-api-error-1.9.0" = {
+      name = "_at_webassemblyjs_slash_helper-api-error";
+      packageName = "@webassemblyjs/helper-api-error";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz";
+        sha512 = "NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==";
+      };
+    };
+    "@webassemblyjs/helper-buffer-1.9.0" = {
+      name = "_at_webassemblyjs_slash_helper-buffer";
+      packageName = "@webassemblyjs/helper-buffer";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz";
+        sha512 = "qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==";
+      };
+    };
+    "@webassemblyjs/helper-code-frame-1.9.0" = {
+      name = "_at_webassemblyjs_slash_helper-code-frame";
+      packageName = "@webassemblyjs/helper-code-frame";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz";
+        sha512 = "ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==";
+      };
+    };
+    "@webassemblyjs/helper-fsm-1.9.0" = {
+      name = "_at_webassemblyjs_slash_helper-fsm";
+      packageName = "@webassemblyjs/helper-fsm";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz";
+        sha512 = "OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==";
+      };
+    };
+    "@webassemblyjs/helper-module-context-1.9.0" = {
+      name = "_at_webassemblyjs_slash_helper-module-context";
+      packageName = "@webassemblyjs/helper-module-context";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz";
+        sha512 = "MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==";
+      };
+    };
+    "@webassemblyjs/helper-wasm-bytecode-1.9.0" = {
+      name = "_at_webassemblyjs_slash_helper-wasm-bytecode";
+      packageName = "@webassemblyjs/helper-wasm-bytecode";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz";
+        sha512 = "R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==";
+      };
+    };
+    "@webassemblyjs/helper-wasm-section-1.9.0" = {
+      name = "_at_webassemblyjs_slash_helper-wasm-section";
+      packageName = "@webassemblyjs/helper-wasm-section";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz";
+        sha512 = "XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==";
+      };
+    };
+    "@webassemblyjs/ieee754-1.9.0" = {
+      name = "_at_webassemblyjs_slash_ieee754";
+      packageName = "@webassemblyjs/ieee754";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz";
+        sha512 = "dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==";
+      };
+    };
+    "@webassemblyjs/leb128-1.9.0" = {
+      name = "_at_webassemblyjs_slash_leb128";
+      packageName = "@webassemblyjs/leb128";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz";
+        sha512 = "ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==";
+      };
+    };
+    "@webassemblyjs/utf8-1.9.0" = {
+      name = "_at_webassemblyjs_slash_utf8";
+      packageName = "@webassemblyjs/utf8";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz";
+        sha512 = "GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==";
+      };
+    };
+    "@webassemblyjs/wasm-edit-1.9.0" = {
+      name = "_at_webassemblyjs_slash_wasm-edit";
+      packageName = "@webassemblyjs/wasm-edit";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz";
+        sha512 = "FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==";
+      };
+    };
+    "@webassemblyjs/wasm-gen-1.9.0" = {
+      name = "_at_webassemblyjs_slash_wasm-gen";
+      packageName = "@webassemblyjs/wasm-gen";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz";
+        sha512 = "cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==";
+      };
+    };
+    "@webassemblyjs/wasm-opt-1.9.0" = {
+      name = "_at_webassemblyjs_slash_wasm-opt";
+      packageName = "@webassemblyjs/wasm-opt";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz";
+        sha512 = "Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==";
+      };
+    };
+    "@webassemblyjs/wasm-parser-1.9.0" = {
+      name = "_at_webassemblyjs_slash_wasm-parser";
+      packageName = "@webassemblyjs/wasm-parser";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz";
+        sha512 = "9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==";
+      };
+    };
+    "@webassemblyjs/wast-parser-1.9.0" = {
+      name = "_at_webassemblyjs_slash_wast-parser";
+      packageName = "@webassemblyjs/wast-parser";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz";
+        sha512 = "qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==";
+      };
+    };
+    "@webassemblyjs/wast-printer-1.9.0" = {
+      name = "_at_webassemblyjs_slash_wast-printer";
+      packageName = "@webassemblyjs/wast-printer";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz";
+        sha512 = "2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==";
+      };
+    };
+    "@xtuc/ieee754-1.2.0" = {
+      name = "_at_xtuc_slash_ieee754";
+      packageName = "@xtuc/ieee754";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz";
+        sha512 = "DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==";
+      };
+    };
+    "@xtuc/long-4.2.2" = {
+      name = "_at_xtuc_slash_long";
+      packageName = "@xtuc/long";
+      version = "4.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz";
+        sha512 = "NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==";
+      };
+    };
+    "abbrev-1.1.1" = {
+      name = "abbrev";
+      packageName = "abbrev";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz";
+        sha512 = "nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==";
+      };
+    };
+    "accepts-1.3.7" = {
+      name = "accepts";
+      packageName = "accepts";
+      version = "1.3.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz";
+        sha512 = "Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==";
+      };
+    };
+    "acorn-6.4.1" = {
+      name = "acorn";
+      packageName = "acorn";
+      version = "6.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz";
+        sha512 = "ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==";
+      };
+    };
+    "acorn-7.1.1" = {
+      name = "acorn";
+      packageName = "acorn";
+      version = "7.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz";
+        sha512 = "add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==";
+      };
+    };
+    "acorn-7.3.1" = {
+      name = "acorn";
+      packageName = "acorn";
+      version = "7.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz";
+        sha512 = "tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==";
+      };
+    };
+    "acorn-jsx-5.1.0" = {
+      name = "acorn-jsx";
+      packageName = "acorn-jsx";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz";
+        sha512 = "tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==";
+      };
+    };
+    "acorn-walk-7.2.0" = {
+      name = "acorn-walk";
+      packageName = "acorn-walk";
+      version = "7.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz";
+        sha512 = "OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==";
+      };
+    };
+    "address-1.1.2" = {
+      name = "address";
+      packageName = "address";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/address/-/address-1.1.2.tgz";
+        sha512 = "aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==";
+      };
+    };
+    "aggregate-error-3.0.1" = {
+      name = "aggregate-error";
+      packageName = "aggregate-error";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz";
+        sha512 = "quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==";
+      };
+    };
+    "ajv-6.10.2" = {
+      name = "ajv";
+      packageName = "ajv";
+      version = "6.10.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz";
+        sha512 = "TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==";
+      };
+    };
+    "ajv-6.12.2" = {
+      name = "ajv";
+      packageName = "ajv";
+      version = "6.12.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz";
+        sha512 = "k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==";
+      };
+    };
+    "ajv-errors-1.0.1" = {
+      name = "ajv-errors";
+      packageName = "ajv-errors";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz";
+        sha512 = "DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==";
+      };
+    };
+    "ajv-keywords-3.4.1" = {
+      name = "ajv-keywords";
+      packageName = "ajv-keywords";
+      version = "3.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz";
+        sha512 = "RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==";
+      };
+    };
+    "alphanum-sort-1.0.2" = {
+      name = "alphanum-sort";
+      packageName = "alphanum-sort";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz";
+        sha1 = "97a1119649b211ad33691d9f9f486a8ec9fbe0a3";
+      };
+    };
+    "amdefine-1.0.1" = {
+      name = "amdefine";
+      packageName = "amdefine";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz";
+        sha1 = "4a5282ac164729e93619bcfd3ad151f817ce91f5";
+      };
+    };
+    "ansi-colors-3.2.4" = {
+      name = "ansi-colors";
+      packageName = "ansi-colors";
+      version = "3.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz";
+        sha512 = "hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==";
+      };
+    };
+    "ansi-escapes-4.3.0" = {
+      name = "ansi-escapes";
+      packageName = "ansi-escapes";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz";
+        sha512 = "EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==";
+      };
+    };
+    "ansi-html-0.0.7" = {
+      name = "ansi-html";
+      packageName = "ansi-html";
+      version = "0.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz";
+        sha1 = "813584021962a9e9e6fd039f940d12f56ca7859e";
+      };
+    };
+    "ansi-regex-2.1.1" = {
+      name = "ansi-regex";
+      packageName = "ansi-regex";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
+        sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
+      };
+    };
+    "ansi-regex-3.0.0" = {
+      name = "ansi-regex";
+      packageName = "ansi-regex";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz";
+        sha1 = "ed0317c322064f79466c02966bddb605ab37d998";
+      };
+    };
+    "ansi-regex-4.1.0" = {
+      name = "ansi-regex";
+      packageName = "ansi-regex";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz";
+        sha512 = "1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==";
+      };
+    };
+    "ansi-regex-5.0.0" = {
+      name = "ansi-regex";
+      packageName = "ansi-regex";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz";
+        sha512 = "bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==";
+      };
+    };
+    "ansi-styles-2.2.1" = {
+      name = "ansi-styles";
+      packageName = "ansi-styles";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";
+        sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe";
+      };
+    };
+    "ansi-styles-3.2.1" = {
+      name = "ansi-styles";
+      packageName = "ansi-styles";
+      version = "3.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz";
+        sha512 = "VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==";
+      };
+    };
+    "ansi-styles-4.2.1" = {
+      name = "ansi-styles";
+      packageName = "ansi-styles";
+      version = "4.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz";
+        sha512 = "9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==";
+      };
+    };
+    "any-promise-1.3.0" = {
+      name = "any-promise";
+      packageName = "any-promise";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz";
+        sha1 = "abc6afeedcea52e809cdc0376aed3ce39635d17f";
+      };
+    };
+    "anymatch-2.0.0" = {
+      name = "anymatch";
+      packageName = "anymatch";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz";
+        sha512 = "5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==";
+      };
+    };
+    "anymatch-3.1.1" = {
+      name = "anymatch";
+      packageName = "anymatch";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz";
+        sha512 = "mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==";
+      };
+    };
+    "aproba-1.2.0" = {
+      name = "aproba";
+      packageName = "aproba";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz";
+        sha512 = "Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==";
+      };
+    };
+    "arch-2.1.2" = {
+      name = "arch";
+      packageName = "arch";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arch/-/arch-2.1.2.tgz";
+        sha512 = "NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ==";
+      };
+    };
+    "are-we-there-yet-1.1.5" = {
+      name = "are-we-there-yet";
+      packageName = "are-we-there-yet";
+      version = "1.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz";
+        sha512 = "5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==";
+      };
+    };
+    "argparse-1.0.10" = {
+      name = "argparse";
+      packageName = "argparse";
+      version = "1.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz";
+        sha512 = "o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==";
+      };
+    };
+    "arr-diff-4.0.0" = {
+      name = "arr-diff";
+      packageName = "arr-diff";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz";
+        sha1 = "d6461074febfec71e7e15235761a329a5dc7c520";
+      };
+    };
+    "arr-flatten-1.1.0" = {
+      name = "arr-flatten";
+      packageName = "arr-flatten";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz";
+        sha512 = "L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==";
+      };
+    };
+    "arr-union-3.1.0" = {
+      name = "arr-union";
+      packageName = "arr-union";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz";
+        sha1 = "e39b09aea9def866a8f206e288af63919bae39c4";
+      };
+    };
+    "array-find-index-1.0.2" = {
+      name = "array-find-index";
+      packageName = "array-find-index";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz";
+        sha1 = "df010aa1287e164bbda6f9723b0a96a1ec4187a1";
+      };
+    };
+    "array-flatten-1.1.1" = {
+      name = "array-flatten";
+      packageName = "array-flatten";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz";
+        sha1 = "9a5f699051b1e7073328f2a008968b64ea2955d2";
+      };
+    };
+    "array-flatten-2.1.2" = {
+      name = "array-flatten";
+      packageName = "array-flatten";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz";
+        sha512 = "hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==";
+      };
+    };
+    "array-union-1.0.2" = {
+      name = "array-union";
+      packageName = "array-union";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz";
+        sha1 = "9a34410e4f4e3da23dea375be5be70f24778ec39";
+      };
+    };
+    "array-uniq-1.0.3" = {
+      name = "array-uniq";
+      packageName = "array-uniq";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz";
+        sha1 = "af6ac877a25cc7f74e058894753858dfdb24fdb6";
+      };
+    };
+    "array-unique-0.3.2" = {
+      name = "array-unique";
+      packageName = "array-unique";
+      version = "0.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz";
+        sha1 = "a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428";
+      };
+    };
+    "asn1-0.2.4" = {
+      name = "asn1";
+      packageName = "asn1";
+      version = "0.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz";
+        sha512 = "jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==";
+      };
+    };
+    "asn1.js-4.10.1" = {
+      name = "asn1.js";
+      packageName = "asn1.js";
+      version = "4.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz";
+        sha512 = "p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==";
+      };
+    };
+    "assert-1.5.0" = {
+      name = "assert";
+      packageName = "assert";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz";
+        sha512 = "EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==";
+      };
+    };
+    "assert-plus-1.0.0" = {
+      name = "assert-plus";
+      packageName = "assert-plus";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz";
+        sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
+      };
+    };
+    "assign-symbols-1.0.0" = {
+      name = "assign-symbols";
+      packageName = "assign-symbols";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz";
+        sha1 = "59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367";
+      };
+    };
+    "astral-regex-1.0.0" = {
+      name = "astral-regex";
+      packageName = "astral-regex";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz";
+        sha512 = "+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==";
+      };
+    };
+    "async-2.6.3" = {
+      name = "async";
+      packageName = "async";
+      version = "2.6.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async/-/async-2.6.3.tgz";
+        sha512 = "zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==";
+      };
+    };
+    "async-each-1.0.3" = {
+      name = "async-each";
+      packageName = "async-each";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz";
+        sha512 = "z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==";
+      };
+    };
+    "async-foreach-0.1.3" = {
+      name = "async-foreach";
+      packageName = "async-foreach";
+      version = "0.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz";
+        sha1 = "36121f845c0578172de419a97dbeb1d16ec34542";
+      };
+    };
+    "async-limiter-1.0.1" = {
+      name = "async-limiter";
+      packageName = "async-limiter";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz";
+        sha512 = "csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==";
+      };
+    };
+    "asynckit-0.4.0" = {
+      name = "asynckit";
+      packageName = "asynckit";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz";
+        sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79";
+      };
+    };
+    "atob-2.1.2" = {
+      name = "atob";
+      packageName = "atob";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz";
+        sha512 = "Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==";
+      };
+    };
+    "autoprefixer-9.8.4" = {
+      name = "autoprefixer";
+      packageName = "autoprefixer";
+      version = "9.8.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.4.tgz";
+        sha512 = "84aYfXlpUe45lvmS+HoAWKCkirI/sw4JK0/bTeeqgHYco3dcsOn0NqdejISjptsYwNji/21dnkDri9PsYKk89A==";
+      };
+    };
+    "aws-sign2-0.7.0" = {
+      name = "aws-sign2";
+      packageName = "aws-sign2";
+      version = "0.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz";
+        sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8";
+      };
+    };
+    "aws4-1.9.0" = {
+      name = "aws4";
+      packageName = "aws4";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz";
+        sha512 = "Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==";
+      };
+    };
+    "babel-code-frame-6.26.0" = {
+      name = "babel-code-frame";
+      packageName = "babel-code-frame";
+      version = "6.26.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz";
+        sha1 = "63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b";
+      };
+    };
+    "babel-loader-8.1.0" = {
+      name = "babel-loader";
+      packageName = "babel-loader";
+      version = "8.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz";
+        sha512 = "7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==";
+      };
+    };
+    "babel-plugin-dynamic-import-node-2.3.3" = {
+      name = "babel-plugin-dynamic-import-node";
+      packageName = "babel-plugin-dynamic-import-node";
+      version = "2.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz";
+        sha512 = "jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==";
+      };
+    };
+    "balanced-match-1.0.0" = {
+      name = "balanced-match";
+      packageName = "balanced-match";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz";
+        sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
+      };
+    };
+    "base-0.11.2" = {
+      name = "base";
+      packageName = "base";
+      version = "0.11.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/base/-/base-0.11.2.tgz";
+        sha512 = "5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==";
+      };
+    };
+    "base64-js-1.3.1" = {
+      name = "base64-js";
+      packageName = "base64-js";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz";
+        sha512 = "mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==";
+      };
+    };
+    "batch-0.6.1" = {
+      name = "batch";
+      packageName = "batch";
+      version = "0.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz";
+        sha1 = "dc34314f4e679318093fc760272525f94bf25c16";
+      };
+    };
+    "bcrypt-pbkdf-1.0.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";
+      };
+    };
+    "bfj-6.1.2" = {
+      name = "bfj";
+      packageName = "bfj";
+      version = "6.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz";
+        sha512 = "BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==";
+      };
+    };
+    "big.js-3.2.0" = {
+      name = "big.js";
+      packageName = "big.js";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz";
+        sha512 = "+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==";
+      };
+    };
+    "big.js-5.2.2" = {
+      name = "big.js";
+      packageName = "big.js";
+      version = "5.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz";
+        sha512 = "vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==";
+      };
+    };
+    "binary-extensions-1.13.1" = {
+      name = "binary-extensions";
+      packageName = "binary-extensions";
+      version = "1.13.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz";
+        sha512 = "Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==";
+      };
+    };
+    "binary-extensions-2.1.0" = {
+      name = "binary-extensions";
+      packageName = "binary-extensions";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz";
+        sha512 = "1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==";
+      };
+    };
+    "bindings-1.5.0" = {
+      name = "bindings";
+      packageName = "bindings";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz";
+        sha512 = "p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==";
+      };
+    };
+    "block-stream-0.0.9" = {
+      name = "block-stream";
+      packageName = "block-stream";
+      version = "0.0.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz";
+        sha1 = "13ebfe778a03205cfe03751481ebb4b3300c126a";
+      };
+    };
+    "bluebird-3.7.2" = {
+      name = "bluebird";
+      packageName = "bluebird";
+      version = "3.7.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz";
+        sha512 = "XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==";
+      };
+    };
+    "bn.js-4.11.8" = {
+      name = "bn.js";
+      packageName = "bn.js";
+      version = "4.11.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz";
+        sha512 = "ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==";
+      };
+    };
+    "body-parser-1.19.0" = {
+      name = "body-parser";
+      packageName = "body-parser";
+      version = "1.19.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz";
+        sha512 = "dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==";
+      };
+    };
+    "bonjour-3.5.0" = {
+      name = "bonjour";
+      packageName = "bonjour";
+      version = "3.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz";
+        sha1 = "8e890a183d8ee9a2393b3844c691a42bcf7bc9f5";
+      };
+    };
+    "boolbase-1.0.0" = {
+      name = "boolbase";
+      packageName = "boolbase";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz";
+        sha1 = "68dff5fbe60c51eb37725ea9e3ed310dcc1e776e";
+      };
+    };
+    "brace-expansion-1.1.11" = {
+      name = "brace-expansion";
+      packageName = "brace-expansion";
+      version = "1.1.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz";
+        sha512 = "iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==";
+      };
+    };
+    "braces-2.3.2" = {
+      name = "braces";
+      packageName = "braces";
+      version = "2.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz";
+        sha512 = "aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==";
+      };
+    };
+    "braces-3.0.2" = {
+      name = "braces";
+      packageName = "braces";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz";
+        sha512 = "b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==";
+      };
+    };
+    "brorand-1.1.0" = {
+      name = "brorand";
+      packageName = "brorand";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz";
+        sha1 = "12c25efe40a45e3c323eb8675a0a0ce57b22371f";
+      };
+    };
+    "browserify-aes-1.2.0" = {
+      name = "browserify-aes";
+      packageName = "browserify-aes";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz";
+        sha512 = "+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==";
+      };
+    };
+    "browserify-cipher-1.0.1" = {
+      name = "browserify-cipher";
+      packageName = "browserify-cipher";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz";
+        sha512 = "sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==";
+      };
+    };
+    "browserify-des-1.0.2" = {
+      name = "browserify-des";
+      packageName = "browserify-des";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz";
+        sha512 = "BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==";
+      };
+    };
+    "browserify-rsa-4.0.1" = {
+      name = "browserify-rsa";
+      packageName = "browserify-rsa";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz";
+        sha1 = "21e0abfaf6f2029cf2fafb133567a701d4135524";
+      };
+    };
+    "browserify-sign-4.0.4" = {
+      name = "browserify-sign";
+      packageName = "browserify-sign";
+      version = "4.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz";
+        sha1 = "aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298";
+      };
+    };
+    "browserify-zlib-0.2.0" = {
+      name = "browserify-zlib";
+      packageName = "browserify-zlib";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz";
+        sha512 = "Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==";
+      };
+    };
+    "browserslist-4.11.1" = {
+      name = "browserslist";
+      packageName = "browserslist";
+      version = "4.11.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz";
+        sha512 = "DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==";
+      };
+    };
+    "browserslist-4.12.2" = {
+      name = "browserslist";
+      packageName = "browserslist";
+      version = "4.12.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserslist/-/browserslist-4.12.2.tgz";
+        sha512 = "MfZaeYqR8StRZdstAK9hCKDd2StvePCYp5rHzQCPicUjfFliDgmuaBNPHYUTpAywBN8+Wc/d7NYVFkO0aqaBUw==";
+      };
+    };
+    "buefy-0.8.15" = {
+      name = "buefy";
+      packageName = "buefy";
+      version = "0.8.15";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buefy/-/buefy-0.8.15.tgz";
+        sha512 = "rDTtLNIip+uFpB1Z9E9YllLPYUkJUIFsf7tBhutNfP9SYGrcDhXnUsIEhPHSxGEeddPlX9YT98Mx1zhOz622vg==";
+      };
+    };
+    "buffer-4.9.2" = {
+      name = "buffer";
+      packageName = "buffer";
+      version = "4.9.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz";
+        sha512 = "xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==";
+      };
+    };
+    "buffer-from-1.1.1" = {
+      name = "buffer-from";
+      packageName = "buffer-from";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz";
+        sha512 = "MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==";
+      };
+    };
+    "buffer-indexof-1.1.1" = {
+      name = "buffer-indexof";
+      packageName = "buffer-indexof";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz";
+        sha512 = "4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==";
+      };
+    };
+    "buffer-json-2.0.0" = {
+      name = "buffer-json";
+      packageName = "buffer-json";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz";
+        sha512 = "+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==";
+      };
+    };
+    "buffer-xor-1.0.3" = {
+      name = "buffer-xor";
+      packageName = "buffer-xor";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz";
+        sha1 = "26e61ed1422fb70dd42e6e36729ed51d855fe8d9";
+      };
+    };
+    "builtin-modules-1.1.1" = {
+      name = "builtin-modules";
+      packageName = "builtin-modules";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz";
+        sha1 = "270f076c5a72c02f5b65a47df94c5fe3a278892f";
+      };
+    };
+    "builtin-status-codes-3.0.0" = {
+      name = "builtin-status-codes";
+      packageName = "builtin-status-codes";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz";
+        sha1 = "85982878e21b98e1c66425e03d0174788f569ee8";
+      };
+    };
+    "bulma-0.7.5" = {
+      name = "bulma";
+      packageName = "bulma";
+      version = "0.7.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bulma/-/bulma-0.7.5.tgz";
+        sha512 = "cX98TIn0I6sKba/DhW0FBjtaDpxTelU166pf7ICXpCCuplHWyu6C9LYZmL5PEsnePIeJaiorsTEzzNk3Tsm1hw==";
+      };
+    };
+    "bytes-3.0.0" = {
+      name = "bytes";
+      packageName = "bytes";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz";
+        sha1 = "d32815404d689699f85a4ea4fa8755dd13a96048";
+      };
+    };
+    "bytes-3.1.0" = {
+      name = "bytes";
+      packageName = "bytes";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz";
+        sha512 = "zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==";
+      };
+    };
+    "cacache-12.0.4" = {
+      name = "cacache";
+      packageName = "cacache";
+      version = "12.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz";
+        sha512 = "a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==";
+      };
+    };
+    "cacache-13.0.1" = {
+      name = "cacache";
+      packageName = "cacache";
+      version = "13.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz";
+        sha512 = "5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==";
+      };
+    };
+    "cache-base-1.0.1" = {
+      name = "cache-base";
+      packageName = "cache-base";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz";
+        sha512 = "AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==";
+      };
+    };
+    "cache-loader-4.1.0" = {
+      name = "cache-loader";
+      packageName = "cache-loader";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz";
+        sha512 = "ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==";
+      };
+    };
+    "call-me-maybe-1.0.1" = {
+      name = "call-me-maybe";
+      packageName = "call-me-maybe";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz";
+        sha1 = "26d208ea89e37b5cbde60250a15f031c16a4d66b";
+      };
+    };
+    "caller-callsite-2.0.0" = {
+      name = "caller-callsite";
+      packageName = "caller-callsite";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz";
+        sha1 = "847e0fce0a223750a9a027c54b33731ad3154134";
+      };
+    };
+    "caller-path-2.0.0" = {
+      name = "caller-path";
+      packageName = "caller-path";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz";
+        sha1 = "468f83044e369ab2010fac5f06ceee15bb2cb1f4";
+      };
+    };
+    "callsites-2.0.0" = {
+      name = "callsites";
+      packageName = "callsites";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz";
+        sha1 = "06eb84f00eea413da86affefacbffb36093b3c50";
+      };
+    };
+    "callsites-3.1.0" = {
+      name = "callsites";
+      packageName = "callsites";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz";
+        sha512 = "P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==";
+      };
+    };
+    "camel-case-3.0.0" = {
+      name = "camel-case";
+      packageName = "camel-case";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz";
+        sha1 = "ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73";
+      };
+    };
+    "camelcase-2.1.1" = {
+      name = "camelcase";
+      packageName = "camelcase";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz";
+        sha1 = "7c1d16d679a1bbe59ca02cacecfb011e201f5a1f";
+      };
+    };
+    "camelcase-5.3.1" = {
+      name = "camelcase";
+      packageName = "camelcase";
+      version = "5.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz";
+        sha512 = "L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==";
+      };
+    };
+    "camelcase-keys-2.1.0" = {
+      name = "camelcase-keys";
+      packageName = "camelcase-keys";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz";
+        sha1 = "308beeaffdf28119051efa1d932213c91b8f92e7";
+      };
+    };
+    "caniuse-api-3.0.0" = {
+      name = "caniuse-api";
+      packageName = "caniuse-api";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz";
+        sha512 = "bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==";
+      };
+    };
+    "caniuse-lite-1.0.30001038" = {
+      name = "caniuse-lite";
+      packageName = "caniuse-lite";
+      version = "1.0.30001038";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001038.tgz";
+        sha512 = "zii9quPo96XfOiRD4TrfYGs+QsGZpb2cGiMAzPjtf/hpFgB6zCPZgJb7I1+EATeMw/o+lG8FyRAnI+CWStHcaQ==";
+      };
+    };
+    "caniuse-lite-1.0.30001090" = {
+      name = "caniuse-lite";
+      packageName = "caniuse-lite";
+      version = "1.0.30001090";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001090.tgz";
+        sha512 = "QzPRKDCyp7RhjczTPZaqK3CjPA5Ht2UnXhZhCI4f7QiB5JK6KEuZBxIzyWnB3wO4hgAj4GMRxAhuiacfw0Psjg==";
+      };
+    };
+    "case-sensitive-paths-webpack-plugin-2.3.0" = {
+      name = "case-sensitive-paths-webpack-plugin";
+      packageName = "case-sensitive-paths-webpack-plugin";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz";
+        sha512 = "/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==";
+      };
+    };
+    "caseless-0.12.0" = {
+      name = "caseless";
+      packageName = "caseless";
+      version = "0.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz";
+        sha1 = "1b681c21ff84033c826543090689420d187151dc";
+      };
+    };
+    "chalk-1.1.3" = {
+      name = "chalk";
+      packageName = "chalk";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";
+        sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98";
+      };
+    };
+    "chalk-2.4.2" = {
+      name = "chalk";
+      packageName = "chalk";
+      version = "2.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz";
+        sha512 = "Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==";
+      };
+    };
+    "chalk-3.0.0" = {
+      name = "chalk";
+      packageName = "chalk";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz";
+        sha512 = "4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==";
+      };
+    };
+    "chardet-0.7.0" = {
+      name = "chardet";
+      packageName = "chardet";
+      version = "0.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz";
+        sha512 = "mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==";
+      };
+    };
+    "check-types-8.0.3" = {
+      name = "check-types";
+      packageName = "check-types";
+      version = "8.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz";
+        sha512 = "YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==";
+      };
+    };
+    "chokidar-2.1.8" = {
+      name = "chokidar";
+      packageName = "chokidar";
+      version = "2.1.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz";
+        sha512 = "ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==";
+      };
+    };
+    "chokidar-3.4.0" = {
+      name = "chokidar";
+      packageName = "chokidar";
+      version = "3.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz";
+        sha512 = "aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==";
+      };
+    };
+    "chownr-1.1.4" = {
+      name = "chownr";
+      packageName = "chownr";
+      version = "1.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz";
+        sha512 = "jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==";
+      };
+    };
+    "chrome-trace-event-1.0.2" = {
+      name = "chrome-trace-event";
+      packageName = "chrome-trace-event";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz";
+        sha512 = "9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==";
+      };
+    };
+    "ci-info-1.6.0" = {
+      name = "ci-info";
+      packageName = "ci-info";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz";
+        sha512 = "vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==";
+      };
+    };
+    "cipher-base-1.0.4" = {
+      name = "cipher-base";
+      packageName = "cipher-base";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz";
+        sha512 = "Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==";
+      };
+    };
+    "class-utils-0.3.6" = {
+      name = "class-utils";
+      packageName = "class-utils";
+      version = "0.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz";
+        sha512 = "qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==";
+      };
+    };
+    "clean-css-4.2.3" = {
+      name = "clean-css";
+      packageName = "clean-css";
+      version = "4.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz";
+        sha512 = "VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==";
+      };
+    };
+    "clean-stack-2.2.0" = {
+      name = "clean-stack";
+      packageName = "clean-stack";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz";
+        sha512 = "4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==";
+      };
+    };
+    "cli-cursor-2.1.0" = {
+      name = "cli-cursor";
+      packageName = "cli-cursor";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz";
+        sha1 = "b35dac376479facc3e94747d41d0d0f5238ffcb5";
+      };
+    };
+    "cli-cursor-3.1.0" = {
+      name = "cli-cursor";
+      packageName = "cli-cursor";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz";
+        sha512 = "I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==";
+      };
+    };
+    "cli-highlight-2.1.4" = {
+      name = "cli-highlight";
+      packageName = "cli-highlight";
+      version = "2.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.4.tgz";
+        sha512 = "s7Zofobm20qriqDoU9sXptQx0t2R9PEgac92mENNm7xaEe1hn71IIMsXMK+6encA6WRCWWxIGQbipr3q998tlQ==";
+      };
+    };
+    "cli-spinners-2.2.0" = {
+      name = "cli-spinners";
+      packageName = "cli-spinners";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz";
+        sha512 = "tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==";
+      };
+    };
+    "cli-table3-0.5.1" = {
+      name = "cli-table3";
+      packageName = "cli-table3";
+      version = "0.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz";
+        sha512 = "7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==";
+      };
+    };
+    "cli-width-2.2.0" = {
+      name = "cli-width";
+      packageName = "cli-width";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz";
+        sha1 = "ff19ede8a9a5e579324147b0c11f0fbcbabed639";
+      };
+    };
+    "clipboardy-2.3.0" = {
+      name = "clipboardy";
+      packageName = "clipboardy";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz";
+        sha512 = "mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==";
+      };
+    };
+    "cliui-5.0.0" = {
+      name = "cliui";
+      packageName = "cliui";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz";
+        sha512 = "PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==";
+      };
+    };
+    "cliui-6.0.0" = {
+      name = "cliui";
+      packageName = "cliui";
+      version = "6.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz";
+        sha512 = "t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==";
+      };
+    };
+    "clone-1.0.4" = {
+      name = "clone";
+      packageName = "clone";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz";
+        sha1 = "da309cc263df15994c688ca902179ca3c7cd7c7e";
+      };
+    };
+    "clone-deep-4.0.1" = {
+      name = "clone-deep";
+      packageName = "clone-deep";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz";
+        sha512 = "neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==";
+      };
+    };
+    "coa-2.0.2" = {
+      name = "coa";
+      packageName = "coa";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz";
+        sha512 = "q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==";
+      };
+    };
+    "code-point-at-1.1.0" = {
+      name = "code-point-at";
+      packageName = "code-point-at";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz";
+        sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77";
+      };
+    };
+    "collection-visit-1.0.0" = {
+      name = "collection-visit";
+      packageName = "collection-visit";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz";
+        sha1 = "4bc0373c164bc3291b4d368c829cf1a80a59dca0";
+      };
+    };
+    "color-3.1.2" = {
+      name = "color";
+      packageName = "color";
+      version = "3.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color/-/color-3.1.2.tgz";
+        sha512 = "vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==";
+      };
+    };
+    "color-convert-1.9.3" = {
+      name = "color-convert";
+      packageName = "color-convert";
+      version = "1.9.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz";
+        sha512 = "QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==";
+      };
+    };
+    "color-convert-2.0.1" = {
+      name = "color-convert";
+      packageName = "color-convert";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz";
+        sha512 = "RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==";
+      };
+    };
+    "color-name-1.1.3" = {
+      name = "color-name";
+      packageName = "color-name";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz";
+        sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25";
+      };
+    };
+    "color-name-1.1.4" = {
+      name = "color-name";
+      packageName = "color-name";
+      version = "1.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz";
+        sha512 = "dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==";
+      };
+    };
+    "color-string-1.5.3" = {
+      name = "color-string";
+      packageName = "color-string";
+      version = "1.5.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz";
+        sha512 = "dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==";
+      };
+    };
+    "colorette-1.2.0" = {
+      name = "colorette";
+      packageName = "colorette";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/colorette/-/colorette-1.2.0.tgz";
+        sha512 = "soRSroY+OF/8OdA3PTQXwaDJeMc7TfknKKrxeSCencL2a4+Tx5zhxmmv7hdpCjhKBjehzp8+bwe/T68K0hpIjw==";
+      };
+    };
+    "colors-1.4.0" = {
+      name = "colors";
+      packageName = "colors";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz";
+        sha512 = "a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==";
+      };
+    };
+    "combined-stream-1.0.8" = {
+      name = "combined-stream";
+      packageName = "combined-stream";
+      version = "1.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz";
+        sha512 = "FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==";
+      };
+    };
+    "commander-2.17.1" = {
+      name = "commander";
+      packageName = "commander";
+      version = "2.17.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz";
+        sha512 = "wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==";
+      };
+    };
+    "commander-2.19.0" = {
+      name = "commander";
+      packageName = "commander";
+      version = "2.19.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz";
+        sha512 = "6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==";
+      };
+    };
+    "commander-2.20.3" = {
+      name = "commander";
+      packageName = "commander";
+      version = "2.20.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz";
+        sha512 = "GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==";
+      };
+    };
+    "commondir-1.0.1" = {
+      name = "commondir";
+      packageName = "commondir";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz";
+        sha1 = "ddd800da0c66127393cca5950ea968a3aaf1253b";
+      };
+    };
+    "component-emitter-1.3.0" = {
+      name = "component-emitter";
+      packageName = "component-emitter";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz";
+        sha512 = "Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==";
+      };
+    };
+    "compressible-2.0.18" = {
+      name = "compressible";
+      packageName = "compressible";
+      version = "2.0.18";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz";
+        sha512 = "AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==";
+      };
+    };
+    "compression-1.7.4" = {
+      name = "compression";
+      packageName = "compression";
+      version = "1.7.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz";
+        sha512 = "jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==";
+      };
+    };
+    "concat-map-0.0.1" = {
+      name = "concat-map";
+      packageName = "concat-map";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
+        sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
+      };
+    };
+    "concat-stream-1.6.2" = {
+      name = "concat-stream";
+      packageName = "concat-stream";
+      version = "1.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz";
+        sha512 = "27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==";
+      };
+    };
+    "connect-history-api-fallback-1.6.0" = {
+      name = "connect-history-api-fallback";
+      packageName = "connect-history-api-fallback";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz";
+        sha512 = "e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==";
+      };
+    };
+    "console-browserify-1.2.0" = {
+      name = "console-browserify";
+      packageName = "console-browserify";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz";
+        sha512 = "ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==";
+      };
+    };
+    "console-control-strings-1.1.0" = {
+      name = "console-control-strings";
+      packageName = "console-control-strings";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz";
+        sha1 = "3d7cf4464db6446ea644bf4b39507f9851008e8e";
+      };
+    };
+    "consolidate-0.15.1" = {
+      name = "consolidate";
+      packageName = "consolidate";
+      version = "0.15.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz";
+        sha512 = "DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==";
+      };
+    };
+    "constants-browserify-1.0.0" = {
+      name = "constants-browserify";
+      packageName = "constants-browserify";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz";
+        sha1 = "c20b96d8c617748aaf1c16021760cd27fcb8cb75";
+      };
+    };
+    "content-disposition-0.5.3" = {
+      name = "content-disposition";
+      packageName = "content-disposition";
+      version = "0.5.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz";
+        sha512 = "ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==";
+      };
+    };
+    "content-type-1.0.4" = {
+      name = "content-type";
+      packageName = "content-type";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz";
+        sha512 = "hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==";
+      };
+    };
+    "convert-source-map-1.7.0" = {
+      name = "convert-source-map";
+      packageName = "convert-source-map";
+      version = "1.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz";
+        sha512 = "4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==";
+      };
+    };
+    "cookie-0.4.0" = {
+      name = "cookie";
+      packageName = "cookie";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz";
+        sha512 = "+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==";
+      };
+    };
+    "cookie-signature-1.0.6" = {
+      name = "cookie-signature";
+      packageName = "cookie-signature";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz";
+        sha1 = "e303a882b342cc3ee8ca513a79999734dab3ae2c";
+      };
+    };
+    "copy-concurrently-1.0.5" = {
+      name = "copy-concurrently";
+      packageName = "copy-concurrently";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz";
+        sha512 = "f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==";
+      };
+    };
+    "copy-descriptor-0.1.1" = {
+      name = "copy-descriptor";
+      packageName = "copy-descriptor";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz";
+        sha1 = "676f6eb3c39997c2ee1ac3a924fd6124748f578d";
+      };
+    };
+    "copy-webpack-plugin-5.1.1" = {
+      name = "copy-webpack-plugin";
+      packageName = "copy-webpack-plugin";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz";
+        sha512 = "P15M5ZC8dyCjQHWwd4Ia/dm0SgVvZJMYeykVIVYXbGyqO4dWB5oyPHp9i7wjwo5LhtlhKbiBCdS2NvM07Wlybg==";
+      };
+    };
+    "core-js-3.6.5" = {
+      name = "core-js";
+      packageName = "core-js";
+      version = "3.6.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz";
+        sha512 = "vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==";
+      };
+    };
+    "core-js-compat-3.6.5" = {
+      name = "core-js-compat";
+      packageName = "core-js-compat";
+      version = "3.6.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz";
+        sha512 = "7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==";
+      };
+    };
+    "core-util-is-1.0.2" = {
+      name = "core-util-is";
+      packageName = "core-util-is";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
+        sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
+      };
+    };
+    "cosmiconfig-5.2.1" = {
+      name = "cosmiconfig";
+      packageName = "cosmiconfig";
+      version = "5.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz";
+        sha512 = "H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==";
+      };
+    };
+    "create-ecdh-4.0.3" = {
+      name = "create-ecdh";
+      packageName = "create-ecdh";
+      version = "4.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz";
+        sha512 = "GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==";
+      };
+    };
+    "create-hash-1.2.0" = {
+      name = "create-hash";
+      packageName = "create-hash";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz";
+        sha512 = "z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==";
+      };
+    };
+    "create-hmac-1.1.7" = {
+      name = "create-hmac";
+      packageName = "create-hmac";
+      version = "1.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz";
+        sha512 = "MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==";
+      };
+    };
+    "cross-spawn-3.0.1" = {
+      name = "cross-spawn";
+      packageName = "cross-spawn";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz";
+        sha1 = "1256037ecb9f0c5f79e3d6ef135e30770184b982";
+      };
+    };
+    "cross-spawn-5.1.0" = {
+      name = "cross-spawn";
+      packageName = "cross-spawn";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz";
+        sha1 = "e8bd0efee58fcff6f8f94510a0a554bbfa235449";
+      };
+    };
+    "cross-spawn-6.0.5" = {
+      name = "cross-spawn";
+      packageName = "cross-spawn";
+      version = "6.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz";
+        sha512 = "eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==";
+      };
+    };
+    "cross-spawn-7.0.3" = {
+      name = "cross-spawn";
+      packageName = "cross-spawn";
+      version = "7.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz";
+        sha512 = "iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==";
+      };
+    };
+    "crypto-browserify-3.12.0" = {
+      name = "crypto-browserify";
+      packageName = "crypto-browserify";
+      version = "3.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz";
+        sha512 = "fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==";
+      };
+    };
+    "css-color-names-0.0.4" = {
+      name = "css-color-names";
+      packageName = "css-color-names";
+      version = "0.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz";
+        sha1 = "808adc2e79cf84738069b646cb20ec27beb629e0";
+      };
+    };
+    "css-declaration-sorter-4.0.1" = {
+      name = "css-declaration-sorter";
+      packageName = "css-declaration-sorter";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz";
+        sha512 = "BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==";
+      };
+    };
+    "css-loader-3.6.0" = {
+      name = "css-loader";
+      packageName = "css-loader";
+      version = "3.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz";
+        sha512 = "M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==";
+      };
+    };
+    "css-select-1.2.0" = {
+      name = "css-select";
+      packageName = "css-select";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz";
+        sha1 = "2b3a110539c5355f1cd8d314623e870b121ec858";
+      };
+    };
+    "css-select-2.1.0" = {
+      name = "css-select";
+      packageName = "css-select";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz";
+        sha512 = "Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==";
+      };
+    };
+    "css-select-base-adapter-0.1.1" = {
+      name = "css-select-base-adapter";
+      packageName = "css-select-base-adapter";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz";
+        sha512 = "jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==";
+      };
+    };
+    "css-tree-1.0.0-alpha.37" = {
+      name = "css-tree";
+      packageName = "css-tree";
+      version = "1.0.0-alpha.37";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz";
+        sha512 = "DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==";
+      };
+    };
+    "css-tree-1.0.0-alpha.39" = {
+      name = "css-tree";
+      packageName = "css-tree";
+      version = "1.0.0-alpha.39";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz";
+        sha512 = "7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==";
+      };
+    };
+    "css-what-2.1.3" = {
+      name = "css-what";
+      packageName = "css-what";
+      version = "2.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz";
+        sha512 = "a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==";
+      };
+    };
+    "css-what-3.3.0" = {
+      name = "css-what";
+      packageName = "css-what";
+      version = "3.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz";
+        sha512 = "pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==";
+      };
+    };
+    "cssesc-3.0.0" = {
+      name = "cssesc";
+      packageName = "cssesc";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz";
+        sha512 = "/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==";
+      };
+    };
+    "cssnano-4.1.10" = {
+      name = "cssnano";
+      packageName = "cssnano";
+      version = "4.1.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz";
+        sha512 = "5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==";
+      };
+    };
+    "cssnano-preset-default-4.0.7" = {
+      name = "cssnano-preset-default";
+      packageName = "cssnano-preset-default";
+      version = "4.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz";
+        sha512 = "x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==";
+      };
+    };
+    "cssnano-util-get-arguments-4.0.0" = {
+      name = "cssnano-util-get-arguments";
+      packageName = "cssnano-util-get-arguments";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz";
+        sha1 = "ed3a08299f21d75741b20f3b81f194ed49cc150f";
+      };
+    };
+    "cssnano-util-get-match-4.0.0" = {
+      name = "cssnano-util-get-match";
+      packageName = "cssnano-util-get-match";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz";
+        sha1 = "c0e4ca07f5386bb17ec5e52250b4f5961365156d";
+      };
+    };
+    "cssnano-util-raw-cache-4.0.1" = {
+      name = "cssnano-util-raw-cache";
+      packageName = "cssnano-util-raw-cache";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz";
+        sha512 = "qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==";
+      };
+    };
+    "cssnano-util-same-parent-4.0.1" = {
+      name = "cssnano-util-same-parent";
+      packageName = "cssnano-util-same-parent";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz";
+        sha512 = "WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==";
+      };
+    };
+    "csso-4.0.3" = {
+      name = "csso";
+      packageName = "csso";
+      version = "4.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz";
+        sha512 = "NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==";
+      };
+    };
+    "currently-unhandled-0.4.1" = {
+      name = "currently-unhandled";
+      packageName = "currently-unhandled";
+      version = "0.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz";
+        sha1 = "988df33feab191ef799a61369dd76c17adf957ea";
+      };
+    };
+    "cyclist-1.0.1" = {
+      name = "cyclist";
+      packageName = "cyclist";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz";
+        sha1 = "596e9698fd0c80e12038c2b82d6eb1b35b6224d9";
+      };
+    };
+    "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";
+      };
+    };
+    "de-indent-1.0.2" = {
+      name = "de-indent";
+      packageName = "de-indent";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz";
+        sha1 = "b2038e846dc33baa5796128d0804b455b8c1e21d";
+      };
+    };
+    "debug-2.6.9" = {
+      name = "debug";
+      packageName = "debug";
+      version = "2.6.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz";
+        sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==";
+      };
+    };
+    "debug-3.2.6" = {
+      name = "debug";
+      packageName = "debug";
+      version = "3.2.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz";
+        sha512 = "mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==";
+      };
+    };
+    "debug-4.1.1" = {
+      name = "debug";
+      packageName = "debug";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz";
+        sha512 = "pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==";
+      };
+    };
+    "decamelize-1.2.0" = {
+      name = "decamelize";
+      packageName = "decamelize";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz";
+        sha1 = "f6534d15148269b20352e7bee26f501f9a191290";
+      };
+    };
+    "decode-uri-component-0.2.0" = {
+      name = "decode-uri-component";
+      packageName = "decode-uri-component";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz";
+        sha1 = "eb3913333458775cb84cd1a1fae062106bb87545";
+      };
+    };
+    "deep-equal-1.1.1" = {
+      name = "deep-equal";
+      packageName = "deep-equal";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz";
+        sha512 = "yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==";
+      };
+    };
+    "deep-is-0.1.3" = {
+      name = "deep-is";
+      packageName = "deep-is";
+      version = "0.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz";
+        sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
+      };
+    };
+    "deepmerge-1.5.2" = {
+      name = "deepmerge";
+      packageName = "deepmerge";
+      version = "1.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz";
+        sha512 = "95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==";
+      };
+    };
+    "deepmerge-4.2.2" = {
+      name = "deepmerge";
+      packageName = "deepmerge";
+      version = "4.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz";
+        sha512 = "FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==";
+      };
+    };
+    "default-gateway-4.2.0" = {
+      name = "default-gateway";
+      packageName = "default-gateway";
+      version = "4.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz";
+        sha512 = "h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==";
+      };
+    };
+    "default-gateway-5.0.5" = {
+      name = "default-gateway";
+      packageName = "default-gateway";
+      version = "5.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/default-gateway/-/default-gateway-5.0.5.tgz";
+        sha512 = "z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==";
+      };
+    };
+    "defaults-1.0.3" = {
+      name = "defaults";
+      packageName = "defaults";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz";
+        sha1 = "c656051e9817d9ff08ed881477f3fe4019f3ef7d";
+      };
+    };
+    "define-properties-1.1.3" = {
+      name = "define-properties";
+      packageName = "define-properties";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz";
+        sha512 = "3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==";
+      };
+    };
+    "define-property-0.2.5" = {
+      name = "define-property";
+      packageName = "define-property";
+      version = "0.2.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz";
+        sha1 = "c35b1ef918ec3c990f9a5bc57be04aacec5c8116";
+      };
+    };
+    "define-property-1.0.0" = {
+      name = "define-property";
+      packageName = "define-property";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz";
+        sha1 = "769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6";
+      };
+    };
+    "define-property-2.0.2" = {
+      name = "define-property";
+      packageName = "define-property";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz";
+        sha512 = "jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==";
+      };
+    };
+    "del-4.1.1" = {
+      name = "del";
+      packageName = "del";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/del/-/del-4.1.1.tgz";
+        sha512 = "QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==";
+      };
+    };
+    "delayed-stream-1.0.0" = {
+      name = "delayed-stream";
+      packageName = "delayed-stream";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
+        sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
+      };
+    };
+    "delegates-1.0.0" = {
+      name = "delegates";
+      packageName = "delegates";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz";
+        sha1 = "84c6e159b81904fdca59a0ef44cd870d31250f9a";
+      };
+    };
+    "depd-1.1.2" = {
+      name = "depd";
+      packageName = "depd";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz";
+        sha1 = "9bcd52e14c097763e749b274c4346ed2e560b5a9";
+      };
+    };
+    "des.js-1.0.1" = {
+      name = "des.js";
+      packageName = "des.js";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz";
+        sha512 = "Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==";
+      };
+    };
+    "destroy-1.0.4" = {
+      name = "destroy";
+      packageName = "destroy";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz";
+        sha1 = "978857442c44749e4206613e37946205826abd80";
+      };
+    };
+    "detect-node-2.0.4" = {
+      name = "detect-node";
+      packageName = "detect-node";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz";
+        sha512 = "ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==";
+      };
+    };
+    "diff-4.0.2" = {
+      name = "diff";
+      packageName = "diff";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz";
+        sha512 = "58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==";
+      };
+    };
+    "diffie-hellman-5.0.3" = {
+      name = "diffie-hellman";
+      packageName = "diffie-hellman";
+      version = "5.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz";
+        sha512 = "kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==";
+      };
+    };
+    "dir-glob-2.2.2" = {
+      name = "dir-glob";
+      packageName = "dir-glob";
+      version = "2.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz";
+        sha512 = "f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==";
+      };
+    };
+    "dns-equal-1.0.0" = {
+      name = "dns-equal";
+      packageName = "dns-equal";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz";
+        sha1 = "b39e7f1da6eb0a75ba9c17324b34753c47e0654d";
+      };
+    };
+    "dns-packet-1.3.1" = {
+      name = "dns-packet";
+      packageName = "dns-packet";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz";
+        sha512 = "0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==";
+      };
+    };
+    "dns-txt-2.0.2" = {
+      name = "dns-txt";
+      packageName = "dns-txt";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz";
+        sha1 = "b91d806f5d27188e4ab3e7d107d881a1cc4642b6";
+      };
+    };
+    "doctrine-3.0.0" = {
+      name = "doctrine";
+      packageName = "doctrine";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz";
+        sha512 = "yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==";
+      };
+    };
+    "dom-converter-0.2.0" = {
+      name = "dom-converter";
+      packageName = "dom-converter";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz";
+        sha512 = "gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==";
+      };
+    };
+    "dom-serializer-0.2.2" = {
+      name = "dom-serializer";
+      packageName = "dom-serializer";
+      version = "0.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz";
+        sha512 = "2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==";
+      };
+    };
+    "domain-browser-1.2.0" = {
+      name = "domain-browser";
+      packageName = "domain-browser";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz";
+        sha512 = "jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==";
+      };
+    };
+    "domelementtype-1.3.1" = {
+      name = "domelementtype";
+      packageName = "domelementtype";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz";
+        sha512 = "BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==";
+      };
+    };
+    "domelementtype-2.0.1" = {
+      name = "domelementtype";
+      packageName = "domelementtype";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz";
+        sha512 = "5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==";
+      };
+    };
+    "domhandler-2.4.2" = {
+      name = "domhandler";
+      packageName = "domhandler";
+      version = "2.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz";
+        sha512 = "JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==";
+      };
+    };
+    "domutils-1.5.1" = {
+      name = "domutils";
+      packageName = "domutils";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz";
+        sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf";
+      };
+    };
+    "domutils-1.7.0" = {
+      name = "domutils";
+      packageName = "domutils";
+      version = "1.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz";
+        sha512 = "Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==";
+      };
+    };
+    "dot-object-1.9.0" = {
+      name = "dot-object";
+      packageName = "dot-object";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dot-object/-/dot-object-1.9.0.tgz";
+        sha512 = "7MPN6y7XhAO4vM4eguj5+5HNKLjJYfkVG1ZR1Aput4Q4TR6SYeSjhpVQ77IzJHoSHffKbDxBC+48aCiiRurDPw==";
+      };
+    };
+    "dot-prop-5.2.0" = {
+      name = "dot-prop";
+      packageName = "dot-prop";
+      version = "5.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz";
+        sha512 = "uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==";
+      };
+    };
+    "dotenv-8.2.0" = {
+      name = "dotenv";
+      packageName = "dotenv";
+      version = "8.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz";
+        sha512 = "8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==";
+      };
+    };
+    "dotenv-expand-5.1.0" = {
+      name = "dotenv-expand";
+      packageName = "dotenv-expand";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz";
+        sha512 = "YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==";
+      };
+    };
+    "duplexer-0.1.1" = {
+      name = "duplexer";
+      packageName = "duplexer";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz";
+        sha1 = "ace6ff808c1ce66b57d1ebf97977acb02334cfc1";
+      };
+    };
+    "duplexify-3.7.1" = {
+      name = "duplexify";
+      packageName = "duplexify";
+      version = "3.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz";
+        sha512 = "07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==";
+      };
+    };
+    "easy-stack-1.0.0" = {
+      name = "easy-stack";
+      packageName = "easy-stack";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.0.tgz";
+        sha1 = "12c91b3085a37f0baa336e9486eac4bf94e3e788";
+      };
+    };
+    "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";
+      };
+    };
+    "ee-first-1.1.1" = {
+      name = "ee-first";
+      packageName = "ee-first";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz";
+        sha1 = "590c61156b0ae2f4f0255732a158b266bc56b21d";
+      };
+    };
+    "ejs-2.7.4" = {
+      name = "ejs";
+      packageName = "ejs";
+      version = "2.7.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz";
+        sha512 = "7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==";
+      };
+    };
+    "electron-to-chromium-1.3.393" = {
+      name = "electron-to-chromium";
+      packageName = "electron-to-chromium";
+      version = "1.3.393";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.393.tgz";
+        sha512 = "Ko3/VdhZAaMaJBLBFqEJ+M1qMiBI8sJfPY/hSJvDrkB3Do8LJsL9tmXy4w7o9nPXif/jFaZGSlXTQWU8XVsYtg==";
+      };
+    };
+    "electron-to-chromium-1.3.483" = {
+      name = "electron-to-chromium";
+      packageName = "electron-to-chromium";
+      version = "1.3.483";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.483.tgz";
+        sha512 = "+05RF8S9rk8S0G8eBCqBRBaRq7+UN3lDs2DAvnG8SBSgQO3hjy0+qt4CmRk5eiuGbTcaicgXfPmBi31a+BD3lg==";
+      };
+    };
+    "elliptic-6.5.2" = {
+      name = "elliptic";
+      packageName = "elliptic";
+      version = "6.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz";
+        sha512 = "f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==";
+      };
+    };
+    "emoji-regex-7.0.3" = {
+      name = "emoji-regex";
+      packageName = "emoji-regex";
+      version = "7.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz";
+        sha512 = "CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==";
+      };
+    };
+    "emoji-regex-8.0.0" = {
+      name = "emoji-regex";
+      packageName = "emoji-regex";
+      version = "8.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz";
+        sha512 = "MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==";
+      };
+    };
+    "emojis-list-2.1.0" = {
+      name = "emojis-list";
+      packageName = "emojis-list";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz";
+        sha1 = "4daa4d9db00f9819880c79fa457ae5b09a1fd389";
+      };
+    };
+    "emojis-list-3.0.0" = {
+      name = "emojis-list";
+      packageName = "emojis-list";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz";
+        sha512 = "/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==";
+      };
+    };
+    "encodeurl-1.0.2" = {
+      name = "encodeurl";
+      packageName = "encodeurl";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz";
+        sha1 = "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59";
+      };
+    };
+    "end-of-stream-1.4.4" = {
+      name = "end-of-stream";
+      packageName = "end-of-stream";
+      version = "1.4.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz";
+        sha512 = "+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==";
+      };
+    };
+    "enhanced-resolve-4.1.1" = {
+      name = "enhanced-resolve";
+      packageName = "enhanced-resolve";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz";
+        sha512 = "98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==";
+      };
+    };
+    "entities-1.1.2" = {
+      name = "entities";
+      packageName = "entities";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz";
+        sha512 = "f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==";
+      };
+    };
+    "entities-2.0.3" = {
+      name = "entities";
+      packageName = "entities";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz";
+        sha512 = "MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==";
+      };
+    };
+    "errno-0.1.7" = {
+      name = "errno";
+      packageName = "errno";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz";
+        sha512 = "MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==";
+      };
+    };
+    "error-ex-1.3.2" = {
+      name = "error-ex";
+      packageName = "error-ex";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz";
+        sha512 = "7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==";
+      };
+    };
+    "error-stack-parser-2.0.6" = {
+      name = "error-stack-parser";
+      packageName = "error-stack-parser";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz";
+        sha512 = "d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==";
+      };
+    };
+    "es-abstract-1.17.0-next.1" = {
+      name = "es-abstract";
+      packageName = "es-abstract";
+      version = "1.17.0-next.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz";
+        sha512 = "7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==";
+      };
+    };
+    "es-abstract-1.17.6" = {
+      name = "es-abstract";
+      packageName = "es-abstract";
+      version = "1.17.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz";
+        sha512 = "Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==";
+      };
+    };
+    "es-to-primitive-1.2.1" = {
+      name = "es-to-primitive";
+      packageName = "es-to-primitive";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz";
+        sha512 = "QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==";
+      };
+    };
+    "escalade-3.0.1" = {
+      name = "escalade";
+      packageName = "escalade";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escalade/-/escalade-3.0.1.tgz";
+        sha512 = "DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA==";
+      };
+    };
+    "escape-html-1.0.3" = {
+      name = "escape-html";
+      packageName = "escape-html";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz";
+        sha1 = "0258eae4d3d0c0974de1c169188ef0051d1d1988";
+      };
+    };
+    "escape-string-regexp-1.0.5" = {
+      name = "escape-string-regexp";
+      packageName = "escape-string-regexp";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
+        sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
+      };
+    };
+    "eslint-6.8.0" = {
+      name = "eslint";
+      packageName = "eslint";
+      version = "6.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz";
+        sha512 = "K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==";
+      };
+    };
+    "eslint-config-prettier-6.11.0" = {
+      name = "eslint-config-prettier";
+      packageName = "eslint-config-prettier";
+      version = "6.11.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz";
+        sha512 = "oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==";
+      };
+    };
+    "eslint-loader-2.2.1" = {
+      name = "eslint-loader";
+      packageName = "eslint-loader";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz";
+        sha512 = "RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==";
+      };
+    };
+    "eslint-plugin-prettier-3.1.4" = {
+      name = "eslint-plugin-prettier";
+      packageName = "eslint-plugin-prettier";
+      version = "3.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz";
+        sha512 = "jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==";
+      };
+    };
+    "eslint-plugin-vue-6.2.2" = {
+      name = "eslint-plugin-vue";
+      packageName = "eslint-plugin-vue";
+      version = "6.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz";
+        sha512 = "Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ==";
+      };
+    };
+    "eslint-scope-4.0.3" = {
+      name = "eslint-scope";
+      packageName = "eslint-scope";
+      version = "4.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz";
+        sha512 = "p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==";
+      };
+    };
+    "eslint-scope-5.0.0" = {
+      name = "eslint-scope";
+      packageName = "eslint-scope";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz";
+        sha512 = "oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==";
+      };
+    };
+    "eslint-utils-1.4.3" = {
+      name = "eslint-utils";
+      packageName = "eslint-utils";
+      version = "1.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz";
+        sha512 = "fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==";
+      };
+    };
+    "eslint-utils-2.1.0" = {
+      name = "eslint-utils";
+      packageName = "eslint-utils";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz";
+        sha512 = "w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==";
+      };
+    };
+    "eslint-visitor-keys-1.1.0" = {
+      name = "eslint-visitor-keys";
+      packageName = "eslint-visitor-keys";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz";
+        sha512 = "8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==";
+      };
+    };
+    "esm-3.2.25" = {
+      name = "esm";
+      packageName = "esm";
+      version = "3.2.25";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz";
+        sha512 = "U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==";
+      };
+    };
+    "espree-6.1.2" = {
+      name = "espree";
+      packageName = "espree";
+      version = "6.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz";
+        sha512 = "2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==";
+      };
+    };
+    "esprima-4.0.1" = {
+      name = "esprima";
+      packageName = "esprima";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz";
+        sha512 = "eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==";
+      };
+    };
+    "esquery-1.0.1" = {
+      name = "esquery";
+      packageName = "esquery";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz";
+        sha512 = "SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==";
+      };
+    };
+    "esrecurse-4.2.1" = {
+      name = "esrecurse";
+      packageName = "esrecurse";
+      version = "4.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz";
+        sha512 = "64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==";
+      };
+    };
+    "estraverse-4.3.0" = {
+      name = "estraverse";
+      packageName = "estraverse";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz";
+        sha512 = "39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==";
+      };
+    };
+    "esutils-2.0.3" = {
+      name = "esutils";
+      packageName = "esutils";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz";
+        sha512 = "kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==";
+      };
+    };
+    "etag-1.8.1" = {
+      name = "etag";
+      packageName = "etag";
+      version = "1.8.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz";
+        sha1 = "41ae2eeb65efa62268aebfea83ac7d79299b0887";
+      };
+    };
+    "event-pubsub-4.3.0" = {
+      name = "event-pubsub";
+      packageName = "event-pubsub";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz";
+        sha512 = "z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==";
+      };
+    };
+    "eventemitter3-4.0.4" = {
+      name = "eventemitter3";
+      packageName = "eventemitter3";
+      version = "4.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz";
+        sha512 = "rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==";
+      };
+    };
+    "events-3.1.0" = {
+      name = "events";
+      packageName = "events";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/events/-/events-3.1.0.tgz";
+        sha512 = "Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==";
+      };
+    };
+    "eventsource-1.0.7" = {
+      name = "eventsource";
+      packageName = "eventsource";
+      version = "1.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz";
+        sha512 = "4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==";
+      };
+    };
+    "evp_bytestokey-1.0.3" = {
+      name = "evp_bytestokey";
+      packageName = "evp_bytestokey";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz";
+        sha512 = "/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==";
+      };
+    };
+    "execa-0.8.0" = {
+      name = "execa";
+      packageName = "execa";
+      version = "0.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz";
+        sha1 = "d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da";
+      };
+    };
+    "execa-1.0.0" = {
+      name = "execa";
+      packageName = "execa";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz";
+        sha512 = "adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==";
+      };
+    };
+    "execa-3.4.0" = {
+      name = "execa";
+      packageName = "execa";
+      version = "3.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz";
+        sha512 = "r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==";
+      };
+    };
+    "expand-brackets-2.1.4" = {
+      name = "expand-brackets";
+      packageName = "expand-brackets";
+      version = "2.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz";
+        sha1 = "b77735e315ce30f6b6eff0f83b04151a22449622";
+      };
+    };
+    "express-4.17.1" = {
+      name = "express";
+      packageName = "express";
+      version = "4.17.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/express/-/express-4.17.1.tgz";
+        sha512 = "mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==";
+      };
+    };
+    "extend-3.0.2" = {
+      name = "extend";
+      packageName = "extend";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz";
+        sha512 = "fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==";
+      };
+    };
+    "extend-shallow-2.0.1" = {
+      name = "extend-shallow";
+      packageName = "extend-shallow";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz";
+        sha1 = "51af7d614ad9a9f610ea1bafbb989d6b1c56890f";
+      };
+    };
+    "extend-shallow-3.0.2" = {
+      name = "extend-shallow";
+      packageName = "extend-shallow";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz";
+        sha1 = "26a71aaf073b39fb2127172746131c2704028db8";
+      };
+    };
+    "external-editor-3.1.0" = {
+      name = "external-editor";
+      packageName = "external-editor";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz";
+        sha512 = "hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==";
+      };
+    };
+    "extglob-2.0.4" = {
+      name = "extglob";
+      packageName = "extglob";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz";
+        sha512 = "Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==";
+      };
+    };
+    "extsprintf-1.3.0" = {
+      name = "extsprintf";
+      packageName = "extsprintf";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz";
+        sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05";
+      };
+    };
+    "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-deep-equal-3.1.3" = {
+      name = "fast-deep-equal";
+      packageName = "fast-deep-equal";
+      version = "3.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz";
+        sha512 = "f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==";
+      };
+    };
+    "fast-diff-1.2.0" = {
+      name = "fast-diff";
+      packageName = "fast-diff";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz";
+        sha512 = "xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==";
+      };
+    };
+    "fast-glob-2.2.7" = {
+      name = "fast-glob";
+      packageName = "fast-glob";
+      version = "2.2.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz";
+        sha512 = "g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==";
+      };
+    };
+    "fast-json-stable-stringify-2.1.0" = {
+      name = "fast-json-stable-stringify";
+      packageName = "fast-json-stable-stringify";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz";
+        sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==";
+      };
+    };
+    "fast-levenshtein-2.0.6" = {
+      name = "fast-levenshtein";
+      packageName = "fast-levenshtein";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
+        sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917";
+      };
+    };
+    "faye-websocket-0.10.0" = {
+      name = "faye-websocket";
+      packageName = "faye-websocket";
+      version = "0.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz";
+        sha1 = "4e492f8d04dfb6f89003507f6edbf2d501e7c6f4";
+      };
+    };
+    "faye-websocket-0.11.3" = {
+      name = "faye-websocket";
+      packageName = "faye-websocket";
+      version = "0.11.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz";
+        sha512 = "D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==";
+      };
+    };
+    "figgy-pudding-3.5.2" = {
+      name = "figgy-pudding";
+      packageName = "figgy-pudding";
+      version = "3.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz";
+        sha512 = "0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==";
+      };
+    };
+    "figures-3.1.0" = {
+      name = "figures";
+      packageName = "figures";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz";
+        sha512 = "ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==";
+      };
+    };
+    "file-entry-cache-5.0.1" = {
+      name = "file-entry-cache";
+      packageName = "file-entry-cache";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz";
+        sha512 = "bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==";
+      };
+    };
+    "file-loader-4.3.0" = {
+      name = "file-loader";
+      packageName = "file-loader";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz";
+        sha512 = "aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==";
+      };
+    };
+    "file-uri-to-path-1.0.0" = {
+      name = "file-uri-to-path";
+      packageName = "file-uri-to-path";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz";
+        sha512 = "0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==";
+      };
+    };
+    "filesize-3.6.1" = {
+      name = "filesize";
+      packageName = "filesize";
+      version = "3.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz";
+        sha512 = "7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==";
+      };
+    };
+    "fill-range-4.0.0" = {
+      name = "fill-range";
+      packageName = "fill-range";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz";
+        sha1 = "d544811d428f98eb06a63dc402d2403c328c38f7";
+      };
+    };
+    "fill-range-7.0.1" = {
+      name = "fill-range";
+      packageName = "fill-range";
+      version = "7.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz";
+        sha512 = "qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==";
+      };
+    };
+    "finalhandler-1.1.2" = {
+      name = "finalhandler";
+      packageName = "finalhandler";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz";
+        sha512 = "aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==";
+      };
+    };
+    "find-cache-dir-0.1.1" = {
+      name = "find-cache-dir";
+      packageName = "find-cache-dir";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz";
+        sha1 = "c8defae57c8a52a8a784f9e31c57c742e993a0b9";
+      };
+    };
+    "find-cache-dir-2.1.0" = {
+      name = "find-cache-dir";
+      packageName = "find-cache-dir";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz";
+        sha512 = "Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==";
+      };
+    };
+    "find-cache-dir-3.3.1" = {
+      name = "find-cache-dir";
+      packageName = "find-cache-dir";
+      version = "3.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz";
+        sha512 = "t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==";
+      };
+    };
+    "find-up-1.1.2" = {
+      name = "find-up";
+      packageName = "find-up";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz";
+        sha1 = "6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f";
+      };
+    };
+    "find-up-2.1.0" = {
+      name = "find-up";
+      packageName = "find-up";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz";
+        sha1 = "45d1b7e506c717ddd482775a2b77920a3c0c57a7";
+      };
+    };
+    "find-up-3.0.0" = {
+      name = "find-up";
+      packageName = "find-up";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz";
+        sha512 = "1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==";
+      };
+    };
+    "find-up-4.1.0" = {
+      name = "find-up";
+      packageName = "find-up";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz";
+        sha512 = "PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==";
+      };
+    };
+    "flat-5.0.2" = {
+      name = "flat";
+      packageName = "flat";
+      version = "5.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz";
+        sha512 = "b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==";
+      };
+    };
+    "flat-cache-2.0.1" = {
+      name = "flat-cache";
+      packageName = "flat-cache";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz";
+        sha512 = "LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==";
+      };
+    };
+    "flatted-2.0.1" = {
+      name = "flatted";
+      packageName = "flatted";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz";
+        sha512 = "a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==";
+      };
+    };
+    "flush-write-stream-1.1.1" = {
+      name = "flush-write-stream";
+      packageName = "flush-write-stream";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz";
+        sha512 = "3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==";
+      };
+    };
+    "follow-redirects-1.12.1" = {
+      name = "follow-redirects";
+      packageName = "follow-redirects";
+      version = "1.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.1.tgz";
+        sha512 = "tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg==";
+      };
+    };
+    "for-in-1.0.2" = {
+      name = "for-in";
+      packageName = "for-in";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz";
+        sha1 = "81068d295a8142ec0ac726c6e2200c30fb6d5e80";
+      };
+    };
+    "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";
+      };
+    };
+    "fork-ts-checker-webpack-plugin-3.1.1" = {
+      name = "fork-ts-checker-webpack-plugin";
+      packageName = "fork-ts-checker-webpack-plugin";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz";
+        sha512 = "DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==";
+      };
+    };
+    "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==";
+      };
+    };
+    "forwarded-0.1.2" = {
+      name = "forwarded";
+      packageName = "forwarded";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz";
+        sha1 = "98c23dab1175657b8c0573e8ceccd91b0ff18c84";
+      };
+    };
+    "fragment-cache-0.2.1" = {
+      name = "fragment-cache";
+      packageName = "fragment-cache";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz";
+        sha1 = "4290fad27f13e89be7f33799c6bc5a0abfff0d19";
+      };
+    };
+    "fresh-0.5.2" = {
+      name = "fresh";
+      packageName = "fresh";
+      version = "0.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz";
+        sha1 = "3d8cadd90d976569fa835ab1f8e4b23a105605a7";
+      };
+    };
+    "from2-2.3.0" = {
+      name = "from2";
+      packageName = "from2";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz";
+        sha1 = "8bfb5502bde4a4d36cfdeea007fcca21d7e382af";
+      };
+    };
+    "fs-extra-7.0.1" = {
+      name = "fs-extra";
+      packageName = "fs-extra";
+      version = "7.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz";
+        sha512 = "YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==";
+      };
+    };
+    "fs-minipass-2.1.0" = {
+      name = "fs-minipass";
+      packageName = "fs-minipass";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz";
+        sha512 = "V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==";
+      };
+    };
+    "fs-write-stream-atomic-1.0.10" = {
+      name = "fs-write-stream-atomic";
+      packageName = "fs-write-stream-atomic";
+      version = "1.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz";
+        sha1 = "b47df53493ef911df75731e70a9ded0189db40c9";
+      };
+    };
+    "fs.realpath-1.0.0" = {
+      name = "fs.realpath";
+      packageName = "fs.realpath";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
+        sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
+      };
+    };
+    "fsevents-1.2.12" = {
+      name = "fsevents";
+      packageName = "fsevents";
+      version = "1.2.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz";
+        sha512 = "Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==";
+      };
+    };
+    "fsevents-2.1.3" = {
+      name = "fsevents";
+      packageName = "fsevents";
+      version = "2.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz";
+        sha512 = "Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==";
+      };
+    };
+    "fstream-1.0.12" = {
+      name = "fstream";
+      packageName = "fstream";
+      version = "1.0.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz";
+        sha512 = "WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==";
+      };
+    };
+    "function-bind-1.1.1" = {
+      name = "function-bind";
+      packageName = "function-bind";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz";
+        sha512 = "yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==";
+      };
+    };
+    "functional-red-black-tree-1.0.1" = {
+      name = "functional-red-black-tree";
+      packageName = "functional-red-black-tree";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz";
+        sha1 = "1b0ab3bd553b2a0d6399d29c0e3ea0b252078327";
+      };
+    };
+    "gauge-2.7.4" = {
+      name = "gauge";
+      packageName = "gauge";
+      version = "2.7.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz";
+        sha1 = "2c03405c7538c39d7eb37b317022e325fb018bf7";
+      };
+    };
+    "gaze-1.1.3" = {
+      name = "gaze";
+      packageName = "gaze";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz";
+        sha512 = "BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==";
+      };
+    };
+    "gensync-1.0.0-beta.1" = {
+      name = "gensync";
+      packageName = "gensync";
+      version = "1.0.0-beta.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz";
+        sha512 = "r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==";
+      };
+    };
+    "get-caller-file-2.0.5" = {
+      name = "get-caller-file";
+      packageName = "get-caller-file";
+      version = "2.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz";
+        sha512 = "DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==";
+      };
+    };
+    "get-stdin-4.0.1" = {
+      name = "get-stdin";
+      packageName = "get-stdin";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz";
+        sha1 = "b968c6b0a04384324902e8bf1a5df32579a450fe";
+      };
+    };
+    "get-stdin-6.0.0" = {
+      name = "get-stdin";
+      packageName = "get-stdin";
+      version = "6.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz";
+        sha512 = "jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==";
+      };
+    };
+    "get-stream-3.0.0" = {
+      name = "get-stream";
+      packageName = "get-stream";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz";
+        sha1 = "8e943d1358dc37555054ecbe2edb05aa174ede14";
+      };
+    };
+    "get-stream-4.1.0" = {
+      name = "get-stream";
+      packageName = "get-stream";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz";
+        sha512 = "GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==";
+      };
+    };
+    "get-stream-5.1.0" = {
+      name = "get-stream";
+      packageName = "get-stream";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz";
+        sha512 = "EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==";
+      };
+    };
+    "get-value-2.0.6" = {
+      name = "get-value";
+      packageName = "get-value";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz";
+        sha1 = "dc15ca1c672387ca76bd37ac0a395ba2042a2c28";
+      };
+    };
+    "getpass-0.1.7" = {
+      name = "getpass";
+      packageName = "getpass";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz";
+        sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa";
+      };
+    };
+    "glob-7.1.6" = {
+      name = "glob";
+      packageName = "glob";
+      version = "7.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz";
+        sha512 = "LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==";
+      };
+    };
+    "glob-parent-3.1.0" = {
+      name = "glob-parent";
+      packageName = "glob-parent";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz";
+        sha1 = "9e6af6299d8d3bd2bd40430832bd113df906c5ae";
+      };
+    };
+    "glob-parent-5.1.0" = {
+      name = "glob-parent";
+      packageName = "glob-parent";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz";
+        sha512 = "qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==";
+      };
+    };
+    "glob-parent-5.1.1" = {
+      name = "glob-parent";
+      packageName = "glob-parent";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz";
+        sha512 = "FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==";
+      };
+    };
+    "glob-to-regexp-0.3.0" = {
+      name = "glob-to-regexp";
+      packageName = "glob-to-regexp";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz";
+        sha1 = "8c5a1494d2066c570cc3bfe4496175acc4d502ab";
+      };
+    };
+    "globals-11.12.0" = {
+      name = "globals";
+      packageName = "globals";
+      version = "11.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz";
+        sha512 = "WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==";
+      };
+    };
+    "globals-12.3.0" = {
+      name = "globals";
+      packageName = "globals";
+      version = "12.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz";
+        sha512 = "wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==";
+      };
+    };
+    "globby-6.1.0" = {
+      name = "globby";
+      packageName = "globby";
+      version = "6.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz";
+        sha1 = "f5a6d70e8395e21c858fb0489d64df02424d506c";
+      };
+    };
+    "globby-7.1.1" = {
+      name = "globby";
+      packageName = "globby";
+      version = "7.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz";
+        sha1 = "fb2ccff9401f8600945dfada97440cca972b8680";
+      };
+    };
+    "globby-9.2.0" = {
+      name = "globby";
+      packageName = "globby";
+      version = "9.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz";
+        sha512 = "ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==";
+      };
+    };
+    "globule-1.3.2" = {
+      name = "globule";
+      packageName = "globule";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz";
+        sha512 = "7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==";
+      };
+    };
+    "graceful-fs-4.2.3" = {
+      name = "graceful-fs";
+      packageName = "graceful-fs";
+      version = "4.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz";
+        sha512 = "a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==";
+      };
+    };
+    "gzip-size-5.1.1" = {
+      name = "gzip-size";
+      packageName = "gzip-size";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz";
+        sha512 = "FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==";
+      };
+    };
+    "hammerjs-2.0.8" = {
+      name = "hammerjs";
+      packageName = "hammerjs";
+      version = "2.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz";
+        sha1 = "04ef77862cff2bb79d30f7692095930222bf60f1";
+      };
+    };
+    "handle-thing-2.0.1" = {
+      name = "handle-thing";
+      packageName = "handle-thing";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz";
+        sha512 = "9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==";
+      };
+    };
+    "har-schema-2.0.0" = {
+      name = "har-schema";
+      packageName = "har-schema";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz";
+        sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
+      };
+    };
+    "har-validator-5.1.3" = {
+      name = "har-validator";
+      packageName = "har-validator";
+      version = "5.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz";
+        sha512 = "sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==";
+      };
+    };
+    "has-1.0.3" = {
+      name = "has";
+      packageName = "has";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has/-/has-1.0.3.tgz";
+        sha512 = "f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==";
+      };
+    };
+    "has-ansi-2.0.0" = {
+      name = "has-ansi";
+      packageName = "has-ansi";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz";
+        sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91";
+      };
+    };
+    "has-flag-3.0.0" = {
+      name = "has-flag";
+      packageName = "has-flag";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz";
+        sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd";
+      };
+    };
+    "has-flag-4.0.0" = {
+      name = "has-flag";
+      packageName = "has-flag";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz";
+        sha512 = "EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==";
+      };
+    };
+    "has-symbols-1.0.1" = {
+      name = "has-symbols";
+      packageName = "has-symbols";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz";
+        sha512 = "PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==";
+      };
+    };
+    "has-unicode-2.0.1" = {
+      name = "has-unicode";
+      packageName = "has-unicode";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz";
+        sha1 = "e0e6fe6a28cf51138855e086d1691e771de2a8b9";
+      };
+    };
+    "has-value-0.3.1" = {
+      name = "has-value";
+      packageName = "has-value";
+      version = "0.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz";
+        sha1 = "7b1f58bada62ca827ec0a2078025654845995e1f";
+      };
+    };
+    "has-value-1.0.0" = {
+      name = "has-value";
+      packageName = "has-value";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz";
+        sha1 = "18b281da585b1c5c51def24c930ed29a0be6b177";
+      };
+    };
+    "has-values-0.1.4" = {
+      name = "has-values";
+      packageName = "has-values";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz";
+        sha1 = "6d61de95d91dfca9b9a02089ad384bff8f62b771";
+      };
+    };
+    "has-values-1.0.0" = {
+      name = "has-values";
+      packageName = "has-values";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz";
+        sha1 = "95b0b63fec2146619a6fe57fe75628d5a39efe4f";
+      };
+    };
+    "hash-base-3.0.4" = {
+      name = "hash-base";
+      packageName = "hash-base";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz";
+        sha1 = "5fc8686847ecd73499403319a6b0a3f3f6ae4918";
+      };
+    };
+    "hash-sum-1.0.2" = {
+      name = "hash-sum";
+      packageName = "hash-sum";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz";
+        sha1 = "33b40777754c6432573c120cc3808bbd10d47f04";
+      };
+    };
+    "hash-sum-2.0.0" = {
+      name = "hash-sum";
+      packageName = "hash-sum";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz";
+        sha512 = "WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==";
+      };
+    };
+    "hash.js-1.1.7" = {
+      name = "hash.js";
+      packageName = "hash.js";
+      version = "1.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz";
+        sha512 = "taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==";
+      };
+    };
+    "he-1.2.0" = {
+      name = "he";
+      packageName = "he";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/he/-/he-1.2.0.tgz";
+        sha512 = "F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==";
+      };
+    };
+    "hex-color-regex-1.1.0" = {
+      name = "hex-color-regex";
+      packageName = "hex-color-regex";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz";
+        sha512 = "l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==";
+      };
+    };
+    "highlight.js-9.18.1" = {
+      name = "highlight.js";
+      packageName = "highlight.js";
+      version = "9.18.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.1.tgz";
+        sha512 = "OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg==";
+      };
+    };
+    "hmac-drbg-1.0.1" = {
+      name = "hmac-drbg";
+      packageName = "hmac-drbg";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz";
+        sha1 = "d2745701025a6c775a6c545793ed502fc0c649a1";
+      };
+    };
+    "hoopy-0.1.4" = {
+      name = "hoopy";
+      packageName = "hoopy";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz";
+        sha512 = "HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==";
+      };
+    };
+    "hosted-git-info-2.8.5" = {
+      name = "hosted-git-info";
+      packageName = "hosted-git-info";
+      version = "2.8.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz";
+        sha512 = "kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==";
+      };
+    };
+    "hpack.js-2.1.6" = {
+      name = "hpack.js";
+      packageName = "hpack.js";
+      version = "2.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz";
+        sha1 = "87774c0949e513f42e84575b3c45681fade2a0b2";
+      };
+    };
+    "hsl-regex-1.0.0" = {
+      name = "hsl-regex";
+      packageName = "hsl-regex";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz";
+        sha1 = "d49330c789ed819e276a4c0d272dffa30b18fe6e";
+      };
+    };
+    "hsla-regex-1.0.0" = {
+      name = "hsla-regex";
+      packageName = "hsla-regex";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz";
+        sha1 = "c1ce7a3168c8c6614033a4b5f7877f3b225f9c38";
+      };
+    };
+    "html-comment-regex-1.1.2" = {
+      name = "html-comment-regex";
+      packageName = "html-comment-regex";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz";
+        sha512 = "P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==";
+      };
+    };
+    "html-entities-1.3.1" = {
+      name = "html-entities";
+      packageName = "html-entities";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz";
+        sha512 = "rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==";
+      };
+    };
+    "html-minifier-3.5.21" = {
+      name = "html-minifier";
+      packageName = "html-minifier";
+      version = "3.5.21";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz";
+        sha512 = "LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==";
+      };
+    };
+    "html-tags-2.0.0" = {
+      name = "html-tags";
+      packageName = "html-tags";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz";
+        sha1 = "10b30a386085f43cede353cc8fa7cb0deeea668b";
+      };
+    };
+    "html-webpack-plugin-3.2.0" = {
+      name = "html-webpack-plugin";
+      packageName = "html-webpack-plugin";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz";
+        sha1 = "b01abbd723acaaa7b37b6af4492ebda03d9dd37b";
+      };
+    };
+    "htmlparser2-3.10.1" = {
+      name = "htmlparser2";
+      packageName = "htmlparser2";
+      version = "3.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz";
+        sha512 = "IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==";
+      };
+    };
+    "http-deceiver-1.2.7" = {
+      name = "http-deceiver";
+      packageName = "http-deceiver";
+      version = "1.2.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz";
+        sha1 = "fa7168944ab9a519d337cb0bec7284dc3e723d87";
+      };
+    };
+    "http-errors-1.6.3" = {
+      name = "http-errors";
+      packageName = "http-errors";
+      version = "1.6.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz";
+        sha1 = "8b55680bb4be283a0b5bf4ea2e38580be1d9320d";
+      };
+    };
+    "http-errors-1.7.2" = {
+      name = "http-errors";
+      packageName = "http-errors";
+      version = "1.7.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz";
+        sha512 = "uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==";
+      };
+    };
+    "http-proxy-1.18.1" = {
+      name = "http-proxy";
+      packageName = "http-proxy";
+      version = "1.18.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz";
+        sha512 = "7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==";
+      };
+    };
+    "http-proxy-middleware-0.19.1" = {
+      name = "http-proxy-middleware";
+      packageName = "http-proxy-middleware";
+      version = "0.19.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz";
+        sha512 = "yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==";
+      };
+    };
+    "http-signature-1.2.0" = {
+      name = "http-signature";
+      packageName = "http-signature";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz";
+        sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1";
+      };
+    };
+    "https-browserify-1.0.0" = {
+      name = "https-browserify";
+      packageName = "https-browserify";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz";
+        sha1 = "ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73";
+      };
+    };
+    "human-signals-1.1.1" = {
+      name = "human-signals";
+      packageName = "human-signals";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz";
+        sha512 = "SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==";
+      };
+    };
+    "iconv-lite-0.4.24" = {
+      name = "iconv-lite";
+      packageName = "iconv-lite";
+      version = "0.4.24";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz";
+        sha512 = "v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==";
+      };
+    };
+    "icss-utils-4.1.1" = {
+      name = "icss-utils";
+      packageName = "icss-utils";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz";
+        sha512 = "4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==";
+      };
+    };
+    "ieee754-1.1.13" = {
+      name = "ieee754";
+      packageName = "ieee754";
+      version = "1.1.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz";
+        sha512 = "4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==";
+      };
+    };
+    "iferr-0.1.5" = {
+      name = "iferr";
+      packageName = "iferr";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz";
+        sha1 = "c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501";
+      };
+    };
+    "ignore-3.3.10" = {
+      name = "ignore";
+      packageName = "ignore";
+      version = "3.3.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz";
+        sha512 = "Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==";
+      };
+    };
+    "ignore-4.0.6" = {
+      name = "ignore";
+      packageName = "ignore";
+      version = "4.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz";
+        sha512 = "cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==";
+      };
+    };
+    "import-cwd-2.1.0" = {
+      name = "import-cwd";
+      packageName = "import-cwd";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz";
+        sha1 = "aa6cf36e722761285cb371ec6519f53e2435b0a9";
+      };
+    };
+    "import-fresh-2.0.0" = {
+      name = "import-fresh";
+      packageName = "import-fresh";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz";
+        sha1 = "d81355c15612d386c61f9ddd3922d4304822a546";
+      };
+    };
+    "import-fresh-3.2.1" = {
+      name = "import-fresh";
+      packageName = "import-fresh";
+      version = "3.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz";
+        sha512 = "6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==";
+      };
+    };
+    "import-from-2.1.0" = {
+      name = "import-from";
+      packageName = "import-from";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz";
+        sha1 = "335db7f2a7affd53aaa471d4b8021dee36b7f3b1";
+      };
+    };
+    "import-local-2.0.0" = {
+      name = "import-local";
+      packageName = "import-local";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz";
+        sha512 = "b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==";
+      };
+    };
+    "imurmurhash-0.1.4" = {
+      name = "imurmurhash";
+      packageName = "imurmurhash";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz";
+        sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea";
+      };
+    };
+    "in-publish-2.0.1" = {
+      name = "in-publish";
+      packageName = "in-publish";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz";
+        sha512 = "oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==";
+      };
+    };
+    "indent-string-2.1.0" = {
+      name = "indent-string";
+      packageName = "indent-string";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz";
+        sha1 = "8e2d48348742121b4a8218b7a137e9a52049dc80";
+      };
+    };
+    "indent-string-4.0.0" = {
+      name = "indent-string";
+      packageName = "indent-string";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz";
+        sha512 = "EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==";
+      };
+    };
+    "indexes-of-1.0.1" = {
+      name = "indexes-of";
+      packageName = "indexes-of";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz";
+        sha1 = "f30f716c8e2bd346c7b67d3df3915566a7c05607";
+      };
+    };
+    "infer-owner-1.0.4" = {
+      name = "infer-owner";
+      packageName = "infer-owner";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz";
+        sha512 = "IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==";
+      };
+    };
+    "inflight-1.0.6" = {
+      name = "inflight";
+      packageName = "inflight";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz";
+        sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
+      };
+    };
+    "inherits-2.0.1" = {
+      name = "inherits";
+      packageName = "inherits";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz";
+        sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1";
+      };
+    };
+    "inherits-2.0.3" = {
+      name = "inherits";
+      packageName = "inherits";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz";
+        sha1 = "633c2c83e3da42a502f52466022480f4208261de";
+      };
+    };
+    "inherits-2.0.4" = {
+      name = "inherits";
+      packageName = "inherits";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz";
+        sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==";
+      };
+    };
+    "inquirer-7.0.1" = {
+      name = "inquirer";
+      packageName = "inquirer";
+      version = "7.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inquirer/-/inquirer-7.0.1.tgz";
+        sha512 = "V1FFQ3TIO15det8PijPLFR9M9baSlnRs9nL7zWu1MNVA2T9YVl9ZbrHJhYs7e9X8jeMZ3lr2JH/rdHFgNCBdYw==";
+      };
+    };
+    "inquirer-7.2.0" = {
+      name = "inquirer";
+      packageName = "inquirer";
+      version = "7.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inquirer/-/inquirer-7.2.0.tgz";
+        sha512 = "E0c4rPwr9ByePfNlTIB8z51kK1s2n6jrHuJeEHENl/sbq2G/S1auvibgEwNR4uSyiU+PiYHqSwsgGiXjG8p5ZQ==";
+      };
+    };
+    "internal-ip-4.3.0" = {
+      name = "internal-ip";
+      packageName = "internal-ip";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz";
+        sha512 = "S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==";
+      };
+    };
+    "invariant-2.2.4" = {
+      name = "invariant";
+      packageName = "invariant";
+      version = "2.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz";
+        sha512 = "phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==";
+      };
+    };
+    "ip-1.1.5" = {
+      name = "ip";
+      packageName = "ip";
+      version = "1.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz";
+        sha1 = "bdded70114290828c0a039e72ef25f5aaec4354a";
+      };
+    };
+    "ip-regex-2.1.0" = {
+      name = "ip-regex";
+      packageName = "ip-regex";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz";
+        sha1 = "fa78bf5d2e6913c911ce9f819ee5146bb6d844e9";
+      };
+    };
+    "ipaddr.js-1.9.1" = {
+      name = "ipaddr.js";
+      packageName = "ipaddr.js";
+      version = "1.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz";
+        sha512 = "0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==";
+      };
+    };
+    "is-absolute-url-2.1.0" = {
+      name = "is-absolute-url";
+      packageName = "is-absolute-url";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz";
+        sha1 = "50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6";
+      };
+    };
+    "is-absolute-url-3.0.3" = {
+      name = "is-absolute-url";
+      packageName = "is-absolute-url";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz";
+        sha512 = "opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==";
+      };
+    };
+    "is-accessor-descriptor-0.1.6" = {
+      name = "is-accessor-descriptor";
+      packageName = "is-accessor-descriptor";
+      version = "0.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz";
+        sha1 = "a9e12cb3ae8d876727eeef3843f8a0897b5c98d6";
+      };
+    };
+    "is-accessor-descriptor-1.0.0" = {
+      name = "is-accessor-descriptor";
+      packageName = "is-accessor-descriptor";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz";
+        sha512 = "m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==";
+      };
+    };
+    "is-arguments-1.0.4" = {
+      name = "is-arguments";
+      packageName = "is-arguments";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz";
+        sha512 = "xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==";
+      };
+    };
+    "is-arrayish-0.2.1" = {
+      name = "is-arrayish";
+      packageName = "is-arrayish";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz";
+        sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d";
+      };
+    };
+    "is-arrayish-0.3.2" = {
+      name = "is-arrayish";
+      packageName = "is-arrayish";
+      version = "0.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz";
+        sha512 = "eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==";
+      };
+    };
+    "is-binary-path-1.0.1" = {
+      name = "is-binary-path";
+      packageName = "is-binary-path";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz";
+        sha1 = "75f16642b480f187a711c814161fd3a4a7655898";
+      };
+    };
+    "is-binary-path-2.1.0" = {
+      name = "is-binary-path";
+      packageName = "is-binary-path";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz";
+        sha512 = "ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==";
+      };
+    };
+    "is-buffer-1.1.6" = {
+      name = "is-buffer";
+      packageName = "is-buffer";
+      version = "1.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz";
+        sha512 = "NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==";
+      };
+    };
+    "is-callable-1.1.5" = {
+      name = "is-callable";
+      packageName = "is-callable";
+      version = "1.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz";
+        sha512 = "ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==";
+      };
+    };
+    "is-callable-1.2.0" = {
+      name = "is-callable";
+      packageName = "is-callable";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz";
+        sha512 = "pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==";
+      };
+    };
+    "is-ci-1.2.1" = {
+      name = "is-ci";
+      packageName = "is-ci";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz";
+        sha512 = "s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==";
+      };
+    };
+    "is-color-stop-1.1.0" = {
+      name = "is-color-stop";
+      packageName = "is-color-stop";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz";
+        sha1 = "cfff471aee4dd5c9e158598fbe12967b5cdad345";
+      };
+    };
+    "is-data-descriptor-0.1.4" = {
+      name = "is-data-descriptor";
+      packageName = "is-data-descriptor";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz";
+        sha1 = "0b5ee648388e2c860282e793f1856fec3f301b56";
+      };
+    };
+    "is-data-descriptor-1.0.0" = {
+      name = "is-data-descriptor";
+      packageName = "is-data-descriptor";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz";
+        sha512 = "jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==";
+      };
+    };
+    "is-date-object-1.0.2" = {
+      name = "is-date-object";
+      packageName = "is-date-object";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz";
+        sha512 = "USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==";
+      };
+    };
+    "is-descriptor-0.1.6" = {
+      name = "is-descriptor";
+      packageName = "is-descriptor";
+      version = "0.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz";
+        sha512 = "avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==";
+      };
+    };
+    "is-descriptor-1.0.2" = {
+      name = "is-descriptor";
+      packageName = "is-descriptor";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz";
+        sha512 = "2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==";
+      };
+    };
+    "is-directory-0.3.1" = {
+      name = "is-directory";
+      packageName = "is-directory";
+      version = "0.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz";
+        sha1 = "61339b6f2475fc772fd9c9d83f5c8575dc154ae1";
+      };
+    };
+    "is-docker-2.0.0" = {
+      name = "is-docker";
+      packageName = "is-docker";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz";
+        sha512 = "pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==";
+      };
+    };
+    "is-extendable-0.1.1" = {
+      name = "is-extendable";
+      packageName = "is-extendable";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz";
+        sha1 = "62b110e289a471418e3ec36a617d472e301dfc89";
+      };
+    };
+    "is-extendable-1.0.1" = {
+      name = "is-extendable";
+      packageName = "is-extendable";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz";
+        sha512 = "arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==";
+      };
+    };
+    "is-extglob-2.1.1" = {
+      name = "is-extglob";
+      packageName = "is-extglob";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz";
+        sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2";
+      };
+    };
+    "is-finite-1.1.0" = {
+      name = "is-finite";
+      packageName = "is-finite";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz";
+        sha512 = "cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==";
+      };
+    };
+    "is-fullwidth-code-point-1.0.0" = {
+      name = "is-fullwidth-code-point";
+      packageName = "is-fullwidth-code-point";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
+        sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
+      };
+    };
+    "is-fullwidth-code-point-2.0.0" = {
+      name = "is-fullwidth-code-point";
+      packageName = "is-fullwidth-code-point";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz";
+        sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f";
+      };
+    };
+    "is-fullwidth-code-point-3.0.0" = {
+      name = "is-fullwidth-code-point";
+      packageName = "is-fullwidth-code-point";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz";
+        sha512 = "zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==";
+      };
+    };
+    "is-glob-3.1.0" = {
+      name = "is-glob";
+      packageName = "is-glob";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz";
+        sha1 = "7ba5ae24217804ac70707b96922567486cc3e84a";
+      };
+    };
+    "is-glob-4.0.1" = {
+      name = "is-glob";
+      packageName = "is-glob";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz";
+        sha512 = "5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==";
+      };
+    };
+    "is-number-3.0.0" = {
+      name = "is-number";
+      packageName = "is-number";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz";
+        sha1 = "24fd6201a4782cf50561c810276afc7d12d71195";
+      };
+    };
+    "is-number-7.0.0" = {
+      name = "is-number";
+      packageName = "is-number";
+      version = "7.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz";
+        sha512 = "41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==";
+      };
+    };
+    "is-obj-2.0.0" = {
+      name = "is-obj";
+      packageName = "is-obj";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz";
+        sha512 = "drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==";
+      };
+    };
+    "is-path-cwd-2.2.0" = {
+      name = "is-path-cwd";
+      packageName = "is-path-cwd";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz";
+        sha512 = "w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==";
+      };
+    };
+    "is-path-in-cwd-2.1.0" = {
+      name = "is-path-in-cwd";
+      packageName = "is-path-in-cwd";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz";
+        sha512 = "rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==";
+      };
+    };
+    "is-path-inside-2.1.0" = {
+      name = "is-path-inside";
+      packageName = "is-path-inside";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz";
+        sha512 = "wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==";
+      };
+    };
+    "is-plain-obj-1.1.0" = {
+      name = "is-plain-obj";
+      packageName = "is-plain-obj";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz";
+        sha1 = "71a50c8429dfca773c92a390a4a03b39fcd51d3e";
+      };
+    };
+    "is-plain-object-2.0.4" = {
+      name = "is-plain-object";
+      packageName = "is-plain-object";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz";
+        sha512 = "h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==";
+      };
+    };
+    "is-promise-2.1.0" = {
+      name = "is-promise";
+      packageName = "is-promise";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz";
+        sha1 = "79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa";
+      };
+    };
+    "is-regex-1.0.5" = {
+      name = "is-regex";
+      packageName = "is-regex";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz";
+        sha512 = "vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==";
+      };
+    };
+    "is-regex-1.1.0" = {
+      name = "is-regex";
+      packageName = "is-regex";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz";
+        sha512 = "iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==";
+      };
+    };
+    "is-resolvable-1.1.0" = {
+      name = "is-resolvable";
+      packageName = "is-resolvable";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz";
+        sha512 = "qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==";
+      };
+    };
+    "is-stream-1.1.0" = {
+      name = "is-stream";
+      packageName = "is-stream";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz";
+        sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44";
+      };
+    };
+    "is-stream-2.0.0" = {
+      name = "is-stream";
+      packageName = "is-stream";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz";
+        sha512 = "XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==";
+      };
+    };
+    "is-svg-3.0.0" = {
+      name = "is-svg";
+      packageName = "is-svg";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz";
+        sha512 = "gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==";
+      };
+    };
+    "is-symbol-1.0.3" = {
+      name = "is-symbol";
+      packageName = "is-symbol";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz";
+        sha512 = "OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==";
+      };
+    };
+    "is-typedarray-1.0.0" = {
+      name = "is-typedarray";
+      packageName = "is-typedarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz";
+        sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
+      };
+    };
+    "is-utf8-0.2.1" = {
+      name = "is-utf8";
+      packageName = "is-utf8";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz";
+        sha1 = "4b0da1442104d1b336340e80797e865cf39f7d72";
+      };
+    };
+    "is-valid-glob-1.0.0" = {
+      name = "is-valid-glob";
+      packageName = "is-valid-glob";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz";
+        sha1 = "29bf3eff701be2d4d315dbacc39bc39fe8f601aa";
+      };
+    };
+    "is-windows-1.0.2" = {
+      name = "is-windows";
+      packageName = "is-windows";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz";
+        sha512 = "eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==";
+      };
+    };
+    "is-wsl-1.1.0" = {
+      name = "is-wsl";
+      packageName = "is-wsl";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz";
+        sha1 = "1f16e4aa22b04d1336b66188a66af3c600c3a66d";
+      };
+    };
+    "is-wsl-2.2.0" = {
+      name = "is-wsl";
+      packageName = "is-wsl";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz";
+        sha512 = "fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==";
+      };
+    };
+    "isarray-1.0.0" = {
+      name = "isarray";
+      packageName = "isarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
+        sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
+      };
+    };
+    "isexe-2.0.0" = {
+      name = "isexe";
+      packageName = "isexe";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz";
+        sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10";
+      };
+    };
+    "isobject-2.1.0" = {
+      name = "isobject";
+      packageName = "isobject";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz";
+        sha1 = "f065561096a3f1da2ef46272f815c840d87e0c89";
+      };
+    };
+    "isobject-3.0.1" = {
+      name = "isobject";
+      packageName = "isobject";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz";
+        sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df";
+      };
+    };
+    "isstream-0.1.2" = {
+      name = "isstream";
+      packageName = "isstream";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
+        sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
+      };
+    };
+    "javascript-stringify-2.0.1" = {
+      name = "javascript-stringify";
+      packageName = "javascript-stringify";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.0.1.tgz";
+        sha512 = "yV+gqbd5vaOYjqlbk16EG89xB5udgjqQF3C5FAORDg4f/IS1Yc5ERCv5e/57yBcfJYw05V5JyIXabhwb75Xxow==";
+      };
+    };
+    "jest-worker-25.5.0" = {
+      name = "jest-worker";
+      packageName = "jest-worker";
+      version = "25.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz";
+        sha512 = "/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==";
+      };
+    };
+    "js-base64-2.6.2" = {
+      name = "js-base64";
+      packageName = "js-base64";
+      version = "2.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-base64/-/js-base64-2.6.2.tgz";
+        sha512 = "1hgLrLIrmCgZG+ID3VoLNLOSwjGnoZa8tyrUdEteMeIzsT6PH7PMLyUvbDwzNE56P3PNxyvuIOx4Uh2E5rzQIw==";
+      };
+    };
+    "js-message-1.0.5" = {
+      name = "js-message";
+      packageName = "js-message";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz";
+        sha1 = "2300d24b1af08e89dd095bc1a4c9c9cfcb892d15";
+      };
+    };
+    "js-queue-2.0.0" = {
+      name = "js-queue";
+      packageName = "js-queue";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-queue/-/js-queue-2.0.0.tgz";
+        sha1 = "362213cf860f468f0125fc6c96abc1742531f948";
+      };
+    };
+    "js-tokens-3.0.2" = {
+      name = "js-tokens";
+      packageName = "js-tokens";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz";
+        sha1 = "9866df395102130e38f7f996bceb65443209c25b";
+      };
+    };
+    "js-tokens-4.0.0" = {
+      name = "js-tokens";
+      packageName = "js-tokens";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz";
+        sha512 = "RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==";
+      };
+    };
+    "js-yaml-3.13.1" = {
+      name = "js-yaml";
+      packageName = "js-yaml";
+      version = "3.13.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz";
+        sha512 = "YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==";
+      };
+    };
+    "jsbn-0.1.1" = {
+      name = "jsbn";
+      packageName = "jsbn";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz";
+        sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513";
+      };
+    };
+    "jsesc-0.5.0" = {
+      name = "jsesc";
+      packageName = "jsesc";
+      version = "0.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz";
+        sha1 = "e7dee66e35d6fc16f710fe91d5cf69f70f08911d";
+      };
+    };
+    "jsesc-2.5.2" = {
+      name = "jsesc";
+      packageName = "jsesc";
+      version = "2.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz";
+        sha512 = "OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==";
+      };
+    };
+    "json-parse-better-errors-1.0.2" = {
+      name = "json-parse-better-errors";
+      packageName = "json-parse-better-errors";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz";
+        sha512 = "mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==";
+      };
+    };
+    "json-schema-0.2.3" = {
+      name = "json-schema";
+      packageName = "json-schema";
+      version = "0.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz";
+        sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
+      };
+    };
+    "json-schema-traverse-0.4.1" = {
+      name = "json-schema-traverse";
+      packageName = "json-schema-traverse";
+      version = "0.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
+        sha512 = "xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==";
+      };
+    };
+    "json-stable-stringify-without-jsonify-1.0.1" = {
+      name = "json-stable-stringify-without-jsonify";
+      packageName = "json-stable-stringify-without-jsonify";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz";
+        sha1 = "9db7b59496ad3f3cfef30a75142d2d930ad72651";
+      };
+    };
+    "json-stringify-safe-5.0.1" = {
+      name = "json-stringify-safe";
+      packageName = "json-stringify-safe";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
+        sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
+      };
+    };
+    "json3-3.3.3" = {
+      name = "json3";
+      packageName = "json3";
+      version = "3.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz";
+        sha512 = "c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==";
+      };
+    };
+    "json5-0.5.1" = {
+      name = "json5";
+      packageName = "json5";
+      version = "0.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz";
+        sha1 = "1eade7acc012034ad84e2396767ead9fa5495821";
+      };
+    };
+    "json5-1.0.1" = {
+      name = "json5";
+      packageName = "json5";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz";
+        sha512 = "aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==";
+      };
+    };
+    "json5-2.1.3" = {
+      name = "json5";
+      packageName = "json5";
+      version = "2.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz";
+        sha512 = "KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==";
+      };
+    };
+    "jsonfile-4.0.0" = {
+      name = "jsonfile";
+      packageName = "jsonfile";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz";
+        sha1 = "8771aae0799b64076b76640fca058f9c10e33ecb";
+      };
+    };
+    "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";
+      };
+    };
+    "killable-1.0.1" = {
+      name = "killable";
+      packageName = "killable";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz";
+        sha512 = "LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==";
+      };
+    };
+    "kind-of-3.2.2" = {
+      name = "kind-of";
+      packageName = "kind-of";
+      version = "3.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz";
+        sha1 = "31ea21a734bab9bbb0f32466d893aea51e4a3c64";
+      };
+    };
+    "kind-of-4.0.0" = {
+      name = "kind-of";
+      packageName = "kind-of";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz";
+        sha1 = "20813df3d712928b207378691a45066fae72dd57";
+      };
+    };
+    "kind-of-5.1.0" = {
+      name = "kind-of";
+      packageName = "kind-of";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz";
+        sha512 = "NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==";
+      };
+    };
+    "kind-of-6.0.3" = {
+      name = "kind-of";
+      packageName = "kind-of";
+      version = "6.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz";
+        sha512 = "dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==";
+      };
+    };
+    "launch-editor-2.2.1" = {
+      name = "launch-editor";
+      packageName = "launch-editor";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz";
+        sha512 = "On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw==";
+      };
+    };
+    "launch-editor-middleware-2.2.1" = {
+      name = "launch-editor-middleware";
+      packageName = "launch-editor-middleware";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz";
+        sha512 = "s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg==";
+      };
+    };
+    "leven-3.1.0" = {
+      name = "leven";
+      packageName = "leven";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz";
+        sha512 = "qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==";
+      };
+    };
+    "levenary-1.1.1" = {
+      name = "levenary";
+      packageName = "levenary";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz";
+        sha512 = "mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==";
+      };
+    };
+    "levn-0.3.0" = {
+      name = "levn";
+      packageName = "levn";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz";
+        sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee";
+      };
+    };
+    "lines-and-columns-1.1.6" = {
+      name = "lines-and-columns";
+      packageName = "lines-and-columns";
+      version = "1.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz";
+        sha1 = "1c00c743b433cd0a4e80758f7b64a57440d9ff00";
+      };
+    };
+    "load-json-file-1.1.0" = {
+      name = "load-json-file";
+      packageName = "load-json-file";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz";
+        sha1 = "956905708d58b4bab4c2261b04f59f31c99374c0";
+      };
+    };
+    "loader-fs-cache-1.0.3" = {
+      name = "loader-fs-cache";
+      packageName = "loader-fs-cache";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz";
+        sha512 = "ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==";
+      };
+    };
+    "loader-runner-2.4.0" = {
+      name = "loader-runner";
+      packageName = "loader-runner";
+      version = "2.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz";
+        sha512 = "Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==";
+      };
+    };
+    "loader-utils-0.2.17" = {
+      name = "loader-utils";
+      packageName = "loader-utils";
+      version = "0.2.17";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz";
+        sha1 = "f86e6374d43205a6e6c60e9196f17c0299bfb348";
+      };
+    };
+    "loader-utils-1.2.3" = {
+      name = "loader-utils";
+      packageName = "loader-utils";
+      version = "1.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz";
+        sha512 = "fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==";
+      };
+    };
+    "loader-utils-1.4.0" = {
+      name = "loader-utils";
+      packageName = "loader-utils";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz";
+        sha512 = "qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==";
+      };
+    };
+    "locate-path-2.0.0" = {
+      name = "locate-path";
+      packageName = "locate-path";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz";
+        sha1 = "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e";
+      };
+    };
+    "locate-path-3.0.0" = {
+      name = "locate-path";
+      packageName = "locate-path";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz";
+        sha512 = "7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==";
+      };
+    };
+    "locate-path-5.0.0" = {
+      name = "locate-path";
+      packageName = "locate-path";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz";
+        sha512 = "t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==";
+      };
+    };
+    "lodash-4.17.15" = {
+      name = "lodash";
+      packageName = "lodash";
+      version = "4.17.15";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz";
+        sha512 = "8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==";
+      };
+    };
+    "lodash.defaultsdeep-4.6.1" = {
+      name = "lodash.defaultsdeep";
+      packageName = "lodash.defaultsdeep";
+      version = "4.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz";
+        sha512 = "3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==";
+      };
+    };
+    "lodash.kebabcase-4.1.1" = {
+      name = "lodash.kebabcase";
+      packageName = "lodash.kebabcase";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz";
+        sha1 = "8489b1cb0d29ff88195cceca448ff6d6cc295c36";
+      };
+    };
+    "lodash.mapvalues-4.6.0" = {
+      name = "lodash.mapvalues";
+      packageName = "lodash.mapvalues";
+      version = "4.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz";
+        sha1 = "1bafa5005de9dd6f4f26668c30ca37230cc9689c";
+      };
+    };
+    "lodash.memoize-4.1.2" = {
+      name = "lodash.memoize";
+      packageName = "lodash.memoize";
+      version = "4.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz";
+        sha1 = "bcc6c49a42a2840ed997f323eada5ecd182e0bfe";
+      };
+    };
+    "lodash.transform-4.6.0" = {
+      name = "lodash.transform";
+      packageName = "lodash.transform";
+      version = "4.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz";
+        sha1 = "12306422f63324aed8483d3f38332b5f670547a0";
+      };
+    };
+    "lodash.uniq-4.5.0" = {
+      name = "lodash.uniq";
+      packageName = "lodash.uniq";
+      version = "4.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz";
+        sha1 = "d0225373aeb652adc1bc82e4945339a842754773";
+      };
+    };
+    "log-symbols-2.2.0" = {
+      name = "log-symbols";
+      packageName = "log-symbols";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz";
+        sha512 = "VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==";
+      };
+    };
+    "loglevel-1.6.8" = {
+      name = "loglevel";
+      packageName = "loglevel";
+      version = "1.6.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz";
+        sha512 = "bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==";
+      };
+    };
+    "loose-envify-1.4.0" = {
+      name = "loose-envify";
+      packageName = "loose-envify";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz";
+        sha512 = "lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==";
+      };
+    };
+    "loud-rejection-1.6.0" = {
+      name = "loud-rejection";
+      packageName = "loud-rejection";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz";
+        sha1 = "5b46f80147edee578870f086d04821cf998e551f";
+      };
+    };
+    "lower-case-1.1.4" = {
+      name = "lower-case";
+      packageName = "lower-case";
+      version = "1.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz";
+        sha1 = "9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac";
+      };
+    };
+    "lru-cache-4.1.5" = {
+      name = "lru-cache";
+      packageName = "lru-cache";
+      version = "4.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz";
+        sha512 = "sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==";
+      };
+    };
+    "lru-cache-5.1.1" = {
+      name = "lru-cache";
+      packageName = "lru-cache";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz";
+        sha512 = "KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==";
+      };
+    };
+    "make-dir-2.1.0" = {
+      name = "make-dir";
+      packageName = "make-dir";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz";
+        sha512 = "LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==";
+      };
+    };
+    "make-dir-3.0.2" = {
+      name = "make-dir";
+      packageName = "make-dir";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz";
+        sha512 = "rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==";
+      };
+    };
+    "make-dir-3.1.0" = {
+      name = "make-dir";
+      packageName = "make-dir";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz";
+        sha512 = "g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==";
+      };
+    };
+    "map-cache-0.2.2" = {
+      name = "map-cache";
+      packageName = "map-cache";
+      version = "0.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz";
+        sha1 = "c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf";
+      };
+    };
+    "map-obj-1.0.1" = {
+      name = "map-obj";
+      packageName = "map-obj";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz";
+        sha1 = "d933ceb9205d82bdcf4886f6742bdc2b4dea146d";
+      };
+    };
+    "map-visit-1.0.0" = {
+      name = "map-visit";
+      packageName = "map-visit";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz";
+        sha1 = "ecdca8f13144e660f1b5bd41f12f3479d98dfb8f";
+      };
+    };
+    "marked-1.1.1" = {
+      name = "marked";
+      packageName = "marked";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/marked/-/marked-1.1.1.tgz";
+        sha512 = "mJzT8D2yPxoPh7h0UXkB+dBj4FykPJ2OIfxAWeIHrvoHDkFxukV/29QxoFQoPM6RLEwhIFdJpmKBlqVM3s2ZIw==";
+      };
+    };
+    "md5.js-1.3.5" = {
+      name = "md5.js";
+      packageName = "md5.js";
+      version = "1.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz";
+        sha512 = "xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==";
+      };
+    };
+    "mdn-data-2.0.4" = {
+      name = "mdn-data";
+      packageName = "mdn-data";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz";
+        sha512 = "iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==";
+      };
+    };
+    "mdn-data-2.0.6" = {
+      name = "mdn-data";
+      packageName = "mdn-data";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz";
+        sha512 = "rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==";
+      };
+    };
+    "media-typer-0.3.0" = {
+      name = "media-typer";
+      packageName = "media-typer";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz";
+        sha1 = "8710d7af0aa626f8fffa1ce00168545263255748";
+      };
+    };
+    "memory-fs-0.4.1" = {
+      name = "memory-fs";
+      packageName = "memory-fs";
+      version = "0.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz";
+        sha1 = "3a9a20b8462523e447cfbc7e8bb80ed667bfc552";
+      };
+    };
+    "memory-fs-0.5.0" = {
+      name = "memory-fs";
+      packageName = "memory-fs";
+      version = "0.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz";
+        sha512 = "jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==";
+      };
+    };
+    "meow-3.7.0" = {
+      name = "meow";
+      packageName = "meow";
+      version = "3.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz";
+        sha1 = "72cb668b425228290abbfa856892587308a801fb";
+      };
+    };
+    "merge-descriptors-1.0.1" = {
+      name = "merge-descriptors";
+      packageName = "merge-descriptors";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz";
+        sha1 = "b00aaa556dd8b44568150ec9d1b953f3f90cbb61";
+      };
+    };
+    "merge-source-map-1.1.0" = {
+      name = "merge-source-map";
+      packageName = "merge-source-map";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz";
+        sha512 = "Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==";
+      };
+    };
+    "merge-stream-2.0.0" = {
+      name = "merge-stream";
+      packageName = "merge-stream";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz";
+        sha512 = "abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==";
+      };
+    };
+    "merge2-1.3.0" = {
+      name = "merge2";
+      packageName = "merge2";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz";
+        sha512 = "2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==";
+      };
+    };
+    "methods-1.1.2" = {
+      name = "methods";
+      packageName = "methods";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz";
+        sha1 = "5529a4d67654134edcc5266656835b0f851afcee";
+      };
+    };
+    "microevent.ts-0.1.1" = {
+      name = "microevent.ts";
+      packageName = "microevent.ts";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz";
+        sha512 = "jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==";
+      };
+    };
+    "micromatch-3.1.10" = {
+      name = "micromatch";
+      packageName = "micromatch";
+      version = "3.1.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz";
+        sha512 = "MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==";
+      };
+    };
+    "micromatch-4.0.2" = {
+      name = "micromatch";
+      packageName = "micromatch";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz";
+        sha512 = "y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==";
+      };
+    };
+    "miller-rabin-4.0.1" = {
+      name = "miller-rabin";
+      packageName = "miller-rabin";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz";
+        sha512 = "115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==";
+      };
+    };
+    "mime-1.6.0" = {
+      name = "mime";
+      packageName = "mime";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz";
+        sha512 = "x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==";
+      };
+    };
+    "mime-2.4.6" = {
+      name = "mime";
+      packageName = "mime";
+      version = "2.4.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz";
+        sha512 = "RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==";
+      };
+    };
+    "mime-db-1.42.0" = {
+      name = "mime-db";
+      packageName = "mime-db";
+      version = "1.42.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz";
+        sha512 = "UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==";
+      };
+    };
+    "mime-db-1.44.0" = {
+      name = "mime-db";
+      packageName = "mime-db";
+      version = "1.44.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz";
+        sha512 = "/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==";
+      };
+    };
+    "mime-types-2.1.25" = {
+      name = "mime-types";
+      packageName = "mime-types";
+      version = "2.1.25";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz";
+        sha512 = "5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==";
+      };
+    };
+    "mimic-fn-1.2.0" = {
+      name = "mimic-fn";
+      packageName = "mimic-fn";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz";
+        sha512 = "jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==";
+      };
+    };
+    "mimic-fn-2.1.0" = {
+      name = "mimic-fn";
+      packageName = "mimic-fn";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz";
+        sha512 = "OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==";
+      };
+    };
+    "mini-css-extract-plugin-0.9.0" = {
+      name = "mini-css-extract-plugin";
+      packageName = "mini-css-extract-plugin";
+      version = "0.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz";
+        sha512 = "lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==";
+      };
+    };
+    "minimalistic-assert-1.0.1" = {
+      name = "minimalistic-assert";
+      packageName = "minimalistic-assert";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz";
+        sha512 = "UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==";
+      };
+    };
+    "minimalistic-crypto-utils-1.0.1" = {
+      name = "minimalistic-crypto-utils";
+      packageName = "minimalistic-crypto-utils";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz";
+        sha1 = "f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a";
+      };
+    };
+    "minimatch-3.0.4" = {
+      name = "minimatch";
+      packageName = "minimatch";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz";
+        sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==";
+      };
+    };
+    "minimist-0.0.8" = {
+      name = "minimist";
+      packageName = "minimist";
+      version = "0.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz";
+        sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
+      };
+    };
+    "minimist-1.2.5" = {
+      name = "minimist";
+      packageName = "minimist";
+      version = "1.2.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz";
+        sha512 = "FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==";
+      };
+    };
+    "minipass-3.1.3" = {
+      name = "minipass";
+      packageName = "minipass";
+      version = "3.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz";
+        sha512 = "Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==";
+      };
+    };
+    "minipass-collect-1.0.2" = {
+      name = "minipass-collect";
+      packageName = "minipass-collect";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz";
+        sha512 = "6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==";
+      };
+    };
+    "minipass-flush-1.0.5" = {
+      name = "minipass-flush";
+      packageName = "minipass-flush";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz";
+        sha512 = "JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==";
+      };
+    };
+    "minipass-pipeline-1.2.3" = {
+      name = "minipass-pipeline";
+      packageName = "minipass-pipeline";
+      version = "1.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz";
+        sha512 = "cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ==";
+      };
+    };
+    "mississippi-3.0.0" = {
+      name = "mississippi";
+      packageName = "mississippi";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz";
+        sha512 = "x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==";
+      };
+    };
+    "mixin-deep-1.3.2" = {
+      name = "mixin-deep";
+      packageName = "mixin-deep";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz";
+        sha512 = "WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==";
+      };
+    };
+    "mkdirp-0.5.1" = {
+      name = "mkdirp";
+      packageName = "mkdirp";
+      version = "0.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz";
+        sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
+      };
+    };
+    "mkdirp-0.5.4" = {
+      name = "mkdirp";
+      packageName = "mkdirp";
+      version = "0.5.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz";
+        sha512 = "iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==";
+      };
+    };
+    "mkdirp-0.5.5" = {
+      name = "mkdirp";
+      packageName = "mkdirp";
+      version = "0.5.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz";
+        sha512 = "NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==";
+      };
+    };
+    "move-concurrently-1.0.1" = {
+      name = "move-concurrently";
+      packageName = "move-concurrently";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz";
+        sha1 = "be2c005fda32e0b29af1f05d7c4b33214c701f92";
+      };
+    };
+    "ms-2.0.0" = {
+      name = "ms";
+      packageName = "ms";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz";
+        sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8";
+      };
+    };
+    "ms-2.1.1" = {
+      name = "ms";
+      packageName = "ms";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz";
+        sha512 = "tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==";
+      };
+    };
+    "ms-2.1.2" = {
+      name = "ms";
+      packageName = "ms";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz";
+        sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==";
+      };
+    };
+    "multicast-dns-6.2.3" = {
+      name = "multicast-dns";
+      packageName = "multicast-dns";
+      version = "6.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz";
+        sha512 = "ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==";
+      };
+    };
+    "multicast-dns-service-types-1.1.0" = {
+      name = "multicast-dns-service-types";
+      packageName = "multicast-dns-service-types";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz";
+        sha1 = "899f11d9686e5e05cb91b35d5f0e63b773cfc901";
+      };
+    };
+    "mute-stream-0.0.8" = {
+      name = "mute-stream";
+      packageName = "mute-stream";
+      version = "0.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz";
+        sha512 = "nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==";
+      };
+    };
+    "mz-2.7.0" = {
+      name = "mz";
+      packageName = "mz";
+      version = "2.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz";
+        sha512 = "z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==";
+      };
+    };
+    "nan-2.14.0" = {
+      name = "nan";
+      packageName = "nan";
+      version = "2.14.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz";
+        sha512 = "INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==";
+      };
+    };
+    "nanomatch-1.2.13" = {
+      name = "nanomatch";
+      packageName = "nanomatch";
+      version = "1.2.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz";
+        sha512 = "fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==";
+      };
+    };
+    "natural-compare-1.4.0" = {
+      name = "natural-compare";
+      packageName = "natural-compare";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz";
+        sha1 = "4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7";
+      };
+    };
+    "negotiator-0.6.2" = {
+      name = "negotiator";
+      packageName = "negotiator";
+      version = "0.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz";
+        sha512 = "hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==";
+      };
+    };
+    "neo-async-2.6.1" = {
+      name = "neo-async";
+      packageName = "neo-async";
+      version = "2.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz";
+        sha512 = "iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==";
+      };
+    };
+    "nice-try-1.0.5" = {
+      name = "nice-try";
+      packageName = "nice-try";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz";
+        sha512 = "1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==";
+      };
+    };
+    "no-case-2.3.2" = {
+      name = "no-case";
+      packageName = "no-case";
+      version = "2.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz";
+        sha512 = "rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==";
+      };
+    };
+    "node-forge-0.9.0" = {
+      name = "node-forge";
+      packageName = "node-forge";
+      version = "0.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz";
+        sha512 = "7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==";
+      };
+    };
+    "node-gyp-3.8.0" = {
+      name = "node-gyp";
+      packageName = "node-gyp";
+      version = "3.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz";
+        sha512 = "3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==";
+      };
+    };
+    "node-ipc-9.1.1" = {
+      name = "node-ipc";
+      packageName = "node-ipc";
+      version = "9.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.1.tgz";
+        sha512 = "FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w==";
+      };
+    };
+    "node-libs-browser-2.2.1" = {
+      name = "node-libs-browser";
+      packageName = "node-libs-browser";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz";
+        sha512 = "h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==";
+      };
+    };
+    "node-releases-1.1.53" = {
+      name = "node-releases";
+      packageName = "node-releases";
+      version = "1.1.53";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz";
+        sha512 = "wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==";
+      };
+    };
+    "node-releases-1.1.58" = {
+      name = "node-releases";
+      packageName = "node-releases";
+      version = "1.1.58";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-releases/-/node-releases-1.1.58.tgz";
+        sha512 = "NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg==";
+      };
+    };
+    "node-sass-4.14.1" = {
+      name = "node-sass";
+      packageName = "node-sass";
+      version = "4.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz";
+        sha512 = "sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==";
+      };
+    };
+    "nopt-3.0.6" = {
+      name = "nopt";
+      packageName = "nopt";
+      version = "3.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz";
+        sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9";
+      };
+    };
+    "normalize-package-data-2.5.0" = {
+      name = "normalize-package-data";
+      packageName = "normalize-package-data";
+      version = "2.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz";
+        sha512 = "/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==";
+      };
+    };
+    "normalize-path-1.0.0" = {
+      name = "normalize-path";
+      packageName = "normalize-path";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz";
+        sha1 = "32d0e472f91ff345701c15a8311018d3b0a90379";
+      };
+    };
+    "normalize-path-2.1.1" = {
+      name = "normalize-path";
+      packageName = "normalize-path";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz";
+        sha1 = "1ab28b556e198363a8c1a6f7e6fa20137fe6aed9";
+      };
+    };
+    "normalize-path-3.0.0" = {
+      name = "normalize-path";
+      packageName = "normalize-path";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz";
+        sha512 = "6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==";
+      };
+    };
+    "normalize-range-0.1.2" = {
+      name = "normalize-range";
+      packageName = "normalize-range";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz";
+        sha1 = "2d10c06bdfd312ea9777695a4d28439456b75942";
+      };
+    };
+    "normalize-url-1.9.1" = {
+      name = "normalize-url";
+      packageName = "normalize-url";
+      version = "1.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz";
+        sha1 = "2cc0d66b31ea23036458436e3620d85954c66c3c";
+      };
+    };
+    "normalize-url-3.3.0" = {
+      name = "normalize-url";
+      packageName = "normalize-url";
+      version = "3.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz";
+        sha512 = "U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==";
+      };
+    };
+    "npm-run-path-2.0.2" = {
+      name = "npm-run-path";
+      packageName = "npm-run-path";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz";
+        sha1 = "35a9232dfa35d7067b4cb2ddf2357b1871536c5f";
+      };
+    };
+    "npm-run-path-4.0.1" = {
+      name = "npm-run-path";
+      packageName = "npm-run-path";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz";
+        sha512 = "S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==";
+      };
+    };
+    "npmlog-4.1.2" = {
+      name = "npmlog";
+      packageName = "npmlog";
+      version = "4.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz";
+        sha512 = "2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==";
+      };
+    };
+    "nth-check-1.0.2" = {
+      name = "nth-check";
+      packageName = "nth-check";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz";
+        sha512 = "WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==";
+      };
+    };
+    "num2fraction-1.2.2" = {
+      name = "num2fraction";
+      packageName = "num2fraction";
+      version = "1.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz";
+        sha1 = "6f682b6a027a4e9ddfa4564cd2589d1d4e669ede";
+      };
+    };
+    "number-is-nan-1.0.1" = {
+      name = "number-is-nan";
+      packageName = "number-is-nan";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz";
+        sha1 = "097b602b53422a522c1afb8790318336941a011d";
+      };
+    };
+    "oauth-sign-0.9.0" = {
+      name = "oauth-sign";
+      packageName = "oauth-sign";
+      version = "0.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz";
+        sha512 = "fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==";
+      };
+    };
+    "object-assign-4.1.1" = {
+      name = "object-assign";
+      packageName = "object-assign";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz";
+        sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863";
+      };
+    };
+    "object-copy-0.1.0" = {
+      name = "object-copy";
+      packageName = "object-copy";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz";
+        sha1 = "7e7d858b781bd7c991a41ba975ed3812754e998c";
+      };
+    };
+    "object-hash-1.3.1" = {
+      name = "object-hash";
+      packageName = "object-hash";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz";
+        sha512 = "OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==";
+      };
+    };
+    "object-inspect-1.7.0" = {
+      name = "object-inspect";
+      packageName = "object-inspect";
+      version = "1.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz";
+        sha512 = "a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==";
+      };
+    };
+    "object-is-1.1.2" = {
+      name = "object-is";
+      packageName = "object-is";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz";
+        sha512 = "5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==";
+      };
+    };
+    "object-keys-1.1.1" = {
+      name = "object-keys";
+      packageName = "object-keys";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz";
+        sha512 = "NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==";
+      };
+    };
+    "object-visit-1.0.1" = {
+      name = "object-visit";
+      packageName = "object-visit";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz";
+        sha1 = "f79c4493af0c5377b59fe39d395e41042dd045bb";
+      };
+    };
+    "object.assign-4.1.0" = {
+      name = "object.assign";
+      packageName = "object.assign";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz";
+        sha512 = "exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==";
+      };
+    };
+    "object.getownpropertydescriptors-2.1.0" = {
+      name = "object.getownpropertydescriptors";
+      packageName = "object.getownpropertydescriptors";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz";
+        sha512 = "Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==";
+      };
+    };
+    "object.pick-1.3.0" = {
+      name = "object.pick";
+      packageName = "object.pick";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz";
+        sha1 = "87a10ac4c1694bd2e1cbf53591a66141fb5dd747";
+      };
+    };
+    "object.values-1.1.1" = {
+      name = "object.values";
+      packageName = "object.values";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz";
+        sha512 = "WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==";
+      };
+    };
+    "obuf-1.1.2" = {
+      name = "obuf";
+      packageName = "obuf";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz";
+        sha512 = "PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==";
+      };
+    };
+    "on-finished-2.3.0" = {
+      name = "on-finished";
+      packageName = "on-finished";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz";
+        sha1 = "20f1336481b083cd75337992a16971aa2d906947";
+      };
+    };
+    "on-headers-1.0.2" = {
+      name = "on-headers";
+      packageName = "on-headers";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz";
+        sha512 = "pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==";
+      };
+    };
+    "once-1.4.0" = {
+      name = "once";
+      packageName = "once";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
+        sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
+      };
+    };
+    "onetime-2.0.1" = {
+      name = "onetime";
+      packageName = "onetime";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz";
+        sha1 = "067428230fd67443b2794b22bba528b6867962d4";
+      };
+    };
+    "onetime-5.1.0" = {
+      name = "onetime";
+      packageName = "onetime";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz";
+        sha512 = "5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==";
+      };
+    };
+    "open-6.4.0" = {
+      name = "open";
+      packageName = "open";
+      version = "6.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/open/-/open-6.4.0.tgz";
+        sha512 = "IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==";
+      };
+    };
+    "opener-1.5.1" = {
+      name = "opener";
+      packageName = "opener";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz";
+        sha512 = "goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==";
+      };
+    };
+    "opn-5.5.0" = {
+      name = "opn";
+      packageName = "opn";
+      version = "5.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz";
+        sha512 = "PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==";
+      };
+    };
+    "optionator-0.8.3" = {
+      name = "optionator";
+      packageName = "optionator";
+      version = "0.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz";
+        sha512 = "+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==";
+      };
+    };
+    "ora-3.4.0" = {
+      name = "ora";
+      packageName = "ora";
+      version = "3.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz";
+        sha512 = "eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==";
+      };
+    };
+    "original-1.0.2" = {
+      name = "original";
+      packageName = "original";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/original/-/original-1.0.2.tgz";
+        sha512 = "hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==";
+      };
+    };
+    "os-browserify-0.3.0" = {
+      name = "os-browserify";
+      packageName = "os-browserify";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz";
+        sha1 = "854373c7f5c2315914fc9bfc6bd8238fdda1ec27";
+      };
+    };
+    "os-homedir-1.0.2" = {
+      name = "os-homedir";
+      packageName = "os-homedir";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz";
+        sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3";
+      };
+    };
+    "os-tmpdir-1.0.2" = {
+      name = "os-tmpdir";
+      packageName = "os-tmpdir";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz";
+        sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274";
+      };
+    };
+    "osenv-0.1.5" = {
+      name = "osenv";
+      packageName = "osenv";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz";
+        sha512 = "0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==";
+      };
+    };
+    "p-finally-1.0.0" = {
+      name = "p-finally";
+      packageName = "p-finally";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz";
+        sha1 = "3fbcfb15b899a44123b34b6dcc18b724336a2cae";
+      };
+    };
+    "p-finally-2.0.1" = {
+      name = "p-finally";
+      packageName = "p-finally";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz";
+        sha512 = "vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==";
+      };
+    };
+    "p-limit-1.3.0" = {
+      name = "p-limit";
+      packageName = "p-limit";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz";
+        sha512 = "vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==";
+      };
+    };
+    "p-limit-2.2.1" = {
+      name = "p-limit";
+      packageName = "p-limit";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz";
+        sha512 = "85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==";
+      };
+    };
+    "p-limit-2.3.0" = {
+      name = "p-limit";
+      packageName = "p-limit";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz";
+        sha512 = "//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==";
+      };
+    };
+    "p-locate-2.0.0" = {
+      name = "p-locate";
+      packageName = "p-locate";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz";
+        sha1 = "20a0103b222a70c8fd39cc2e580680f3dde5ec43";
+      };
+    };
+    "p-locate-3.0.0" = {
+      name = "p-locate";
+      packageName = "p-locate";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz";
+        sha512 = "x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==";
+      };
+    };
+    "p-locate-4.1.0" = {
+      name = "p-locate";
+      packageName = "p-locate";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz";
+        sha512 = "R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==";
+      };
+    };
+    "p-map-2.1.0" = {
+      name = "p-map";
+      packageName = "p-map";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz";
+        sha512 = "y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==";
+      };
+    };
+    "p-map-3.0.0" = {
+      name = "p-map";
+      packageName = "p-map";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz";
+        sha512 = "d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==";
+      };
+    };
+    "p-retry-3.0.1" = {
+      name = "p-retry";
+      packageName = "p-retry";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz";
+        sha512 = "XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==";
+      };
+    };
+    "p-try-1.0.0" = {
+      name = "p-try";
+      packageName = "p-try";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz";
+        sha1 = "cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3";
+      };
+    };
+    "p-try-2.2.0" = {
+      name = "p-try";
+      packageName = "p-try";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz";
+        sha512 = "R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==";
+      };
+    };
+    "pako-1.0.11" = {
+      name = "pako";
+      packageName = "pako";
+      version = "1.0.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz";
+        sha512 = "4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==";
+      };
+    };
+    "parallel-transform-1.2.0" = {
+      name = "parallel-transform";
+      packageName = "parallel-transform";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz";
+        sha512 = "P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==";
+      };
+    };
+    "param-case-2.1.1" = {
+      name = "param-case";
+      packageName = "param-case";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz";
+        sha1 = "df94fd8cf6531ecf75e6bef9a0858fbc72be2247";
+      };
+    };
+    "parent-module-1.0.1" = {
+      name = "parent-module";
+      packageName = "parent-module";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz";
+        sha512 = "GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==";
+      };
+    };
+    "parse-asn1-5.1.5" = {
+      name = "parse-asn1";
+      packageName = "parse-asn1";
+      version = "5.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz";
+        sha512 = "jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==";
+      };
+    };
+    "parse-json-2.2.0" = {
+      name = "parse-json";
+      packageName = "parse-json";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz";
+        sha1 = "f480f40434ef80741f8469099f8dea18f55a4dc9";
+      };
+    };
+    "parse-json-4.0.0" = {
+      name = "parse-json";
+      packageName = "parse-json";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz";
+        sha1 = "be35f5425be1f7f6c747184f98a788cb99477ee0";
+      };
+    };
+    "parse-json-5.0.0" = {
+      name = "parse-json";
+      packageName = "parse-json";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz";
+        sha512 = "OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==";
+      };
+    };
+    "parse5-5.1.1" = {
+      name = "parse5";
+      packageName = "parse5";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz";
+        sha512 = "ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==";
+      };
+    };
+    "parse5-htmlparser2-tree-adapter-5.1.1" = {
+      name = "parse5-htmlparser2-tree-adapter";
+      packageName = "parse5-htmlparser2-tree-adapter";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz";
+        sha512 = "CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw==";
+      };
+    };
+    "parseurl-1.3.3" = {
+      name = "parseurl";
+      packageName = "parseurl";
+      version = "1.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz";
+        sha512 = "CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==";
+      };
+    };
+    "pascalcase-0.1.1" = {
+      name = "pascalcase";
+      packageName = "pascalcase";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz";
+        sha1 = "b363e55e8006ca6fe21784d2db22bd15d7917f14";
+      };
+    };
+    "path-browserify-0.0.1" = {
+      name = "path-browserify";
+      packageName = "path-browserify";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz";
+        sha512 = "BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==";
+      };
+    };
+    "path-dirname-1.0.2" = {
+      name = "path-dirname";
+      packageName = "path-dirname";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz";
+        sha1 = "cc33d24d525e099a5388c0336c6e32b9160609e0";
+      };
+    };
+    "path-exists-2.1.0" = {
+      name = "path-exists";
+      packageName = "path-exists";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz";
+        sha1 = "0feb6c64f0fc518d9a754dd5efb62c7022761f4b";
+      };
+    };
+    "path-exists-3.0.0" = {
+      name = "path-exists";
+      packageName = "path-exists";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz";
+        sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515";
+      };
+    };
+    "path-exists-4.0.0" = {
+      name = "path-exists";
+      packageName = "path-exists";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz";
+        sha512 = "ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==";
+      };
+    };
+    "path-is-absolute-1.0.1" = {
+      name = "path-is-absolute";
+      packageName = "path-is-absolute";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
+        sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
+      };
+    };
+    "path-is-inside-1.0.2" = {
+      name = "path-is-inside";
+      packageName = "path-is-inside";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz";
+        sha1 = "365417dede44430d1c11af61027facf074bdfc53";
+      };
+    };
+    "path-key-2.0.1" = {
+      name = "path-key";
+      packageName = "path-key";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz";
+        sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40";
+      };
+    };
+    "path-key-3.1.1" = {
+      name = "path-key";
+      packageName = "path-key";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz";
+        sha512 = "ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==";
+      };
+    };
+    "path-parse-1.0.6" = {
+      name = "path-parse";
+      packageName = "path-parse";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz";
+        sha512 = "GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==";
+      };
+    };
+    "path-to-regexp-0.1.7" = {
+      name = "path-to-regexp";
+      packageName = "path-to-regexp";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz";
+        sha1 = "df604178005f522f15eb4490e7247a1bfaa67f8c";
+      };
+    };
+    "path-type-1.1.0" = {
+      name = "path-type";
+      packageName = "path-type";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz";
+        sha1 = "59c44f7ee491da704da415da5a4070ba4f8fe441";
+      };
+    };
+    "path-type-3.0.0" = {
+      name = "path-type";
+      packageName = "path-type";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz";
+        sha512 = "T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==";
+      };
+    };
+    "pbkdf2-3.0.17" = {
+      name = "pbkdf2";
+      packageName = "pbkdf2";
+      version = "3.0.17";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz";
+        sha512 = "U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==";
+      };
+    };
+    "performance-now-2.1.0" = {
+      name = "performance-now";
+      packageName = "performance-now";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz";
+        sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
+      };
+    };
+    "picomatch-2.2.2" = {
+      name = "picomatch";
+      packageName = "picomatch";
+      version = "2.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz";
+        sha512 = "q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==";
+      };
+    };
+    "pify-2.3.0" = {
+      name = "pify";
+      packageName = "pify";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz";
+        sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c";
+      };
+    };
+    "pify-3.0.0" = {
+      name = "pify";
+      packageName = "pify";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz";
+        sha1 = "e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176";
+      };
+    };
+    "pify-4.0.1" = {
+      name = "pify";
+      packageName = "pify";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz";
+        sha512 = "uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==";
+      };
+    };
+    "pinkie-2.0.4" = {
+      name = "pinkie";
+      packageName = "pinkie";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz";
+        sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870";
+      };
+    };
+    "pinkie-promise-2.0.1" = {
+      name = "pinkie-promise";
+      packageName = "pinkie-promise";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz";
+        sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa";
+      };
+    };
+    "pkg-dir-1.0.0" = {
+      name = "pkg-dir";
+      packageName = "pkg-dir";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz";
+        sha1 = "7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4";
+      };
+    };
+    "pkg-dir-3.0.0" = {
+      name = "pkg-dir";
+      packageName = "pkg-dir";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz";
+        sha512 = "/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==";
+      };
+    };
+    "pkg-dir-4.2.0" = {
+      name = "pkg-dir";
+      packageName = "pkg-dir";
+      version = "4.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz";
+        sha512 = "HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==";
+      };
+    };
+    "pkg-up-2.0.0" = {
+      name = "pkg-up";
+      packageName = "pkg-up";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz";
+        sha1 = "c819ac728059a461cab1c3889a2be3c49a004d7f";
+      };
+    };
+    "pnp-webpack-plugin-1.6.4" = {
+      name = "pnp-webpack-plugin";
+      packageName = "pnp-webpack-plugin";
+      version = "1.6.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz";
+        sha512 = "7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==";
+      };
+    };
+    "portfinder-1.0.26" = {
+      name = "portfinder";
+      packageName = "portfinder";
+      version = "1.0.26";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz";
+        sha512 = "Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==";
+      };
+    };
+    "posix-character-classes-0.1.1" = {
+      name = "posix-character-classes";
+      packageName = "posix-character-classes";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz";
+        sha1 = "01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab";
+      };
+    };
+    "postcss-7.0.32" = {
+      name = "postcss";
+      packageName = "postcss";
+      version = "7.0.32";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz";
+        sha512 = "03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==";
+      };
+    };
+    "postcss-calc-7.0.2" = {
+      name = "postcss-calc";
+      packageName = "postcss-calc";
+      version = "7.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz";
+        sha512 = "rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==";
+      };
+    };
+    "postcss-colormin-4.0.3" = {
+      name = "postcss-colormin";
+      packageName = "postcss-colormin";
+      version = "4.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz";
+        sha512 = "WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==";
+      };
+    };
+    "postcss-convert-values-4.0.1" = {
+      name = "postcss-convert-values";
+      packageName = "postcss-convert-values";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz";
+        sha512 = "Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==";
+      };
+    };
+    "postcss-discard-comments-4.0.2" = {
+      name = "postcss-discard-comments";
+      packageName = "postcss-discard-comments";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz";
+        sha512 = "RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==";
+      };
+    };
+    "postcss-discard-duplicates-4.0.2" = {
+      name = "postcss-discard-duplicates";
+      packageName = "postcss-discard-duplicates";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz";
+        sha512 = "ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==";
+      };
+    };
+    "postcss-discard-empty-4.0.1" = {
+      name = "postcss-discard-empty";
+      packageName = "postcss-discard-empty";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz";
+        sha512 = "B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==";
+      };
+    };
+    "postcss-discard-overridden-4.0.1" = {
+      name = "postcss-discard-overridden";
+      packageName = "postcss-discard-overridden";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz";
+        sha512 = "IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==";
+      };
+    };
+    "postcss-load-config-2.1.0" = {
+      name = "postcss-load-config";
+      packageName = "postcss-load-config";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz";
+        sha512 = "4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==";
+      };
+    };
+    "postcss-loader-3.0.0" = {
+      name = "postcss-loader";
+      packageName = "postcss-loader";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz";
+        sha512 = "cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==";
+      };
+    };
+    "postcss-merge-longhand-4.0.11" = {
+      name = "postcss-merge-longhand";
+      packageName = "postcss-merge-longhand";
+      version = "4.0.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz";
+        sha512 = "alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==";
+      };
+    };
+    "postcss-merge-rules-4.0.3" = {
+      name = "postcss-merge-rules";
+      packageName = "postcss-merge-rules";
+      version = "4.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz";
+        sha512 = "U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==";
+      };
+    };
+    "postcss-minify-font-values-4.0.2" = {
+      name = "postcss-minify-font-values";
+      packageName = "postcss-minify-font-values";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz";
+        sha512 = "j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==";
+      };
+    };
+    "postcss-minify-gradients-4.0.2" = {
+      name = "postcss-minify-gradients";
+      packageName = "postcss-minify-gradients";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz";
+        sha512 = "qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==";
+      };
+    };
+    "postcss-minify-params-4.0.2" = {
+      name = "postcss-minify-params";
+      packageName = "postcss-minify-params";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz";
+        sha512 = "G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==";
+      };
+    };
+    "postcss-minify-selectors-4.0.2" = {
+      name = "postcss-minify-selectors";
+      packageName = "postcss-minify-selectors";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz";
+        sha512 = "D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==";
+      };
+    };
+    "postcss-modules-extract-imports-2.0.0" = {
+      name = "postcss-modules-extract-imports";
+      packageName = "postcss-modules-extract-imports";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz";
+        sha512 = "LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==";
+      };
+    };
+    "postcss-modules-local-by-default-3.0.2" = {
+      name = "postcss-modules-local-by-default";
+      packageName = "postcss-modules-local-by-default";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz";
+        sha512 = "jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==";
+      };
+    };
+    "postcss-modules-scope-2.2.0" = {
+      name = "postcss-modules-scope";
+      packageName = "postcss-modules-scope";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz";
+        sha512 = "YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==";
+      };
+    };
+    "postcss-modules-values-3.0.0" = {
+      name = "postcss-modules-values";
+      packageName = "postcss-modules-values";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz";
+        sha512 = "1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==";
+      };
+    };
+    "postcss-normalize-charset-4.0.1" = {
+      name = "postcss-normalize-charset";
+      packageName = "postcss-normalize-charset";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz";
+        sha512 = "gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==";
+      };
+    };
+    "postcss-normalize-display-values-4.0.2" = {
+      name = "postcss-normalize-display-values";
+      packageName = "postcss-normalize-display-values";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz";
+        sha512 = "3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==";
+      };
+    };
+    "postcss-normalize-positions-4.0.2" = {
+      name = "postcss-normalize-positions";
+      packageName = "postcss-normalize-positions";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz";
+        sha512 = "Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==";
+      };
+    };
+    "postcss-normalize-repeat-style-4.0.2" = {
+      name = "postcss-normalize-repeat-style";
+      packageName = "postcss-normalize-repeat-style";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz";
+        sha512 = "qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==";
+      };
+    };
+    "postcss-normalize-string-4.0.2" = {
+      name = "postcss-normalize-string";
+      packageName = "postcss-normalize-string";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz";
+        sha512 = "RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==";
+      };
+    };
+    "postcss-normalize-timing-functions-4.0.2" = {
+      name = "postcss-normalize-timing-functions";
+      packageName = "postcss-normalize-timing-functions";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz";
+        sha512 = "acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==";
+      };
+    };
+    "postcss-normalize-unicode-4.0.1" = {
+      name = "postcss-normalize-unicode";
+      packageName = "postcss-normalize-unicode";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz";
+        sha512 = "od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==";
+      };
+    };
+    "postcss-normalize-url-4.0.1" = {
+      name = "postcss-normalize-url";
+      packageName = "postcss-normalize-url";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz";
+        sha512 = "p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==";
+      };
+    };
+    "postcss-normalize-whitespace-4.0.2" = {
+      name = "postcss-normalize-whitespace";
+      packageName = "postcss-normalize-whitespace";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz";
+        sha512 = "tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==";
+      };
+    };
+    "postcss-ordered-values-4.1.2" = {
+      name = "postcss-ordered-values";
+      packageName = "postcss-ordered-values";
+      version = "4.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz";
+        sha512 = "2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==";
+      };
+    };
+    "postcss-reduce-initial-4.0.3" = {
+      name = "postcss-reduce-initial";
+      packageName = "postcss-reduce-initial";
+      version = "4.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz";
+        sha512 = "gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==";
+      };
+    };
+    "postcss-reduce-transforms-4.0.2" = {
+      name = "postcss-reduce-transforms";
+      packageName = "postcss-reduce-transforms";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz";
+        sha512 = "EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==";
+      };
+    };
+    "postcss-selector-parser-3.1.2" = {
+      name = "postcss-selector-parser";
+      packageName = "postcss-selector-parser";
+      version = "3.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz";
+        sha512 = "h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==";
+      };
+    };
+    "postcss-selector-parser-6.0.2" = {
+      name = "postcss-selector-parser";
+      packageName = "postcss-selector-parser";
+      version = "6.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz";
+        sha512 = "36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==";
+      };
+    };
+    "postcss-svgo-4.0.2" = {
+      name = "postcss-svgo";
+      packageName = "postcss-svgo";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz";
+        sha512 = "C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==";
+      };
+    };
+    "postcss-unique-selectors-4.0.1" = {
+      name = "postcss-unique-selectors";
+      packageName = "postcss-unique-selectors";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz";
+        sha512 = "+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==";
+      };
+    };
+    "postcss-value-parser-3.3.1" = {
+      name = "postcss-value-parser";
+      packageName = "postcss-value-parser";
+      version = "3.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz";
+        sha512 = "pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==";
+      };
+    };
+    "postcss-value-parser-4.1.0" = {
+      name = "postcss-value-parser";
+      packageName = "postcss-value-parser";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz";
+        sha512 = "97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==";
+      };
+    };
+    "prelude-ls-1.1.2" = {
+      name = "prelude-ls";
+      packageName = "prelude-ls";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz";
+        sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54";
+      };
+    };
+    "prepend-http-1.0.4" = {
+      name = "prepend-http";
+      packageName = "prepend-http";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz";
+        sha1 = "d4f4562b0ce3696e41ac52d0e002e57a635dc6dc";
+      };
+    };
+    "prettier-1.19.1" = {
+      name = "prettier";
+      packageName = "prettier";
+      version = "1.19.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz";
+        sha512 = "s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==";
+      };
+    };
+    "prettier-linter-helpers-1.0.0" = {
+      name = "prettier-linter-helpers";
+      packageName = "prettier-linter-helpers";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz";
+        sha512 = "GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==";
+      };
+    };
+    "pretty-error-2.1.1" = {
+      name = "pretty-error";
+      packageName = "pretty-error";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz";
+        sha1 = "5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3";
+      };
+    };
+    "private-0.1.8" = {
+      name = "private";
+      packageName = "private";
+      version = "0.1.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/private/-/private-0.1.8.tgz";
+        sha512 = "VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==";
+      };
+    };
+    "process-0.11.10" = {
+      name = "process";
+      packageName = "process";
+      version = "0.11.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/process/-/process-0.11.10.tgz";
+        sha1 = "7332300e840161bda3e69a1d1d91a7d4bc16f182";
+      };
+    };
+    "process-nextick-args-2.0.1" = {
+      name = "process-nextick-args";
+      packageName = "process-nextick-args";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz";
+        sha512 = "3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==";
+      };
+    };
+    "progress-2.0.3" = {
+      name = "progress";
+      packageName = "progress";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz";
+        sha512 = "7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==";
+      };
+    };
+    "promise-inflight-1.0.1" = {
+      name = "promise-inflight";
+      packageName = "promise-inflight";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz";
+        sha1 = "98472870bf228132fcbdd868129bad12c3c029e3";
+      };
+    };
+    "proxy-addr-2.0.6" = {
+      name = "proxy-addr";
+      packageName = "proxy-addr";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz";
+        sha512 = "dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==";
+      };
+    };
+    "prr-1.0.1" = {
+      name = "prr";
+      packageName = "prr";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz";
+        sha1 = "d3fc114ba06995a45ec6893f484ceb1d78f5f476";
+      };
+    };
+    "pseudomap-1.0.2" = {
+      name = "pseudomap";
+      packageName = "pseudomap";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz";
+        sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3";
+      };
+    };
+    "psl-1.6.0" = {
+      name = "psl";
+      packageName = "psl";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/psl/-/psl-1.6.0.tgz";
+        sha512 = "SYKKmVel98NCOYXpkwUqZqh0ahZeeKfmisiLIcEZdsb+WbLv02g/dI5BUmZnIyOe7RzZtLax81nnb2HbvC2tzA==";
+      };
+    };
+    "public-encrypt-4.0.3" = {
+      name = "public-encrypt";
+      packageName = "public-encrypt";
+      version = "4.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz";
+        sha512 = "zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==";
+      };
+    };
+    "pump-2.0.1" = {
+      name = "pump";
+      packageName = "pump";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz";
+        sha512 = "ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==";
+      };
+    };
+    "pump-3.0.0" = {
+      name = "pump";
+      packageName = "pump";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz";
+        sha512 = "LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==";
+      };
+    };
+    "pumpify-1.5.1" = {
+      name = "pumpify";
+      packageName = "pumpify";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz";
+        sha512 = "oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==";
+      };
+    };
+    "punycode-1.3.2" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz";
+        sha1 = "9653a036fb7c1ee42342f2325cceefea3926c48d";
+      };
+    };
+    "punycode-1.4.1" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz";
+        sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e";
+      };
+    };
+    "punycode-2.1.1" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz";
+        sha512 = "XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==";
+      };
+    };
+    "q-1.5.1" = {
+      name = "q";
+      packageName = "q";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/q/-/q-1.5.1.tgz";
+        sha1 = "7e32f75b41381291d04611f1bf14109ac00651d7";
+      };
+    };
+    "qs-6.5.2" = {
+      name = "qs";
+      packageName = "qs";
+      version = "6.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz";
+        sha512 = "N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==";
+      };
+    };
+    "qs-6.7.0" = {
+      name = "qs";
+      packageName = "qs";
+      version = "6.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz";
+        sha512 = "VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==";
+      };
+    };
+    "query-string-4.3.4" = {
+      name = "query-string";
+      packageName = "query-string";
+      version = "4.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz";
+        sha1 = "bbb693b9ca915c232515b228b1a02b609043dbeb";
+      };
+    };
+    "querystring-0.2.0" = {
+      name = "querystring";
+      packageName = "querystring";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz";
+        sha1 = "b209849203bb25df820da756e747005878521620";
+      };
+    };
+    "querystring-es3-0.2.1" = {
+      name = "querystring-es3";
+      packageName = "querystring-es3";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz";
+        sha1 = "9ec61f79049875707d69414596fd907a4d711e73";
+      };
+    };
+    "querystringify-2.1.1" = {
+      name = "querystringify";
+      packageName = "querystringify";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz";
+        sha512 = "w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==";
+      };
+    };
+    "randombytes-2.1.0" = {
+      name = "randombytes";
+      packageName = "randombytes";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz";
+        sha512 = "vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==";
+      };
+    };
+    "randomfill-1.0.4" = {
+      name = "randomfill";
+      packageName = "randomfill";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz";
+        sha512 = "87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==";
+      };
+    };
+    "range-parser-1.2.1" = {
+      name = "range-parser";
+      packageName = "range-parser";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz";
+        sha512 = "Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==";
+      };
+    };
+    "raw-body-2.4.0" = {
+      name = "raw-body";
+      packageName = "raw-body";
+      version = "2.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz";
+        sha512 = "4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==";
+      };
+    };
+    "read-pkg-1.1.0" = {
+      name = "read-pkg";
+      packageName = "read-pkg";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz";
+        sha1 = "f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28";
+      };
+    };
+    "read-pkg-5.2.0" = {
+      name = "read-pkg";
+      packageName = "read-pkg";
+      version = "5.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz";
+        sha512 = "Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==";
+      };
+    };
+    "read-pkg-up-1.0.1" = {
+      name = "read-pkg-up";
+      packageName = "read-pkg-up";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz";
+        sha1 = "9d63c13276c065918d57f002a57f40a1b643fb02";
+      };
+    };
+    "readable-stream-2.3.6" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "2.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz";
+        sha512 = "tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==";
+      };
+    };
+    "readable-stream-3.6.0" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "3.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz";
+        sha512 = "BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==";
+      };
+    };
+    "readdirp-2.2.1" = {
+      name = "readdirp";
+      packageName = "readdirp";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz";
+        sha512 = "1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==";
+      };
+    };
+    "readdirp-3.4.0" = {
+      name = "readdirp";
+      packageName = "readdirp";
+      version = "3.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz";
+        sha512 = "0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==";
+      };
+    };
+    "redent-1.0.0" = {
+      name = "redent";
+      packageName = "redent";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz";
+        sha1 = "cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde";
+      };
+    };
+    "regenerate-1.4.1" = {
+      name = "regenerate";
+      packageName = "regenerate";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz";
+        sha512 = "j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==";
+      };
+    };
+    "regenerate-unicode-properties-8.2.0" = {
+      name = "regenerate-unicode-properties";
+      packageName = "regenerate-unicode-properties";
+      version = "8.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz";
+        sha512 = "F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==";
+      };
+    };
+    "regenerator-runtime-0.13.5" = {
+      name = "regenerator-runtime";
+      packageName = "regenerator-runtime";
+      version = "0.13.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz";
+        sha512 = "ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==";
+      };
+    };
+    "regenerator-transform-0.14.4" = {
+      name = "regenerator-transform";
+      packageName = "regenerator-transform";
+      version = "0.14.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz";
+        sha512 = "EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==";
+      };
+    };
+    "regex-not-1.0.2" = {
+      name = "regex-not";
+      packageName = "regex-not";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz";
+        sha512 = "J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==";
+      };
+    };
+    "regexp.prototype.flags-1.3.0" = {
+      name = "regexp.prototype.flags";
+      packageName = "regexp.prototype.flags";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz";
+        sha512 = "2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==";
+      };
+    };
+    "regexpp-2.0.1" = {
+      name = "regexpp";
+      packageName = "regexpp";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz";
+        sha512 = "lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==";
+      };
+    };
+    "regexpp-3.1.0" = {
+      name = "regexpp";
+      packageName = "regexpp";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz";
+        sha512 = "ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==";
+      };
+    };
+    "regexpu-core-4.7.0" = {
+      name = "regexpu-core";
+      packageName = "regexpu-core";
+      version = "4.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz";
+        sha512 = "TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==";
+      };
+    };
+    "regjsgen-0.5.2" = {
+      name = "regjsgen";
+      packageName = "regjsgen";
+      version = "0.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz";
+        sha512 = "OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==";
+      };
+    };
+    "regjsparser-0.6.4" = {
+      name = "regjsparser";
+      packageName = "regjsparser";
+      version = "0.6.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz";
+        sha512 = "64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==";
+      };
+    };
+    "relateurl-0.2.7" = {
+      name = "relateurl";
+      packageName = "relateurl";
+      version = "0.2.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz";
+        sha1 = "54dbf377e51440aca90a4cd274600d3ff2d888a9";
+      };
+    };
+    "remove-trailing-separator-1.1.0" = {
+      name = "remove-trailing-separator";
+      packageName = "remove-trailing-separator";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz";
+        sha1 = "c24bce2a283adad5bc3f58e0d48249b92379d8ef";
+      };
+    };
+    "renderkid-2.0.3" = {
+      name = "renderkid";
+      packageName = "renderkid";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz";
+        sha512 = "z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==";
+      };
+    };
+    "repeat-element-1.1.3" = {
+      name = "repeat-element";
+      packageName = "repeat-element";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz";
+        sha512 = "ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==";
+      };
+    };
+    "repeat-string-1.6.1" = {
+      name = "repeat-string";
+      packageName = "repeat-string";
+      version = "1.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz";
+        sha1 = "8dcae470e1c88abc2d600fff4a776286da75e637";
+      };
+    };
+    "repeating-2.0.1" = {
+      name = "repeating";
+      packageName = "repeating";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz";
+        sha1 = "5214c53a926d3552707527fbab415dbc08d06dda";
+      };
+    };
+    "request-2.88.2" = {
+      name = "request";
+      packageName = "request";
+      version = "2.88.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/request/-/request-2.88.2.tgz";
+        sha512 = "MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==";
+      };
+    };
+    "require-directory-2.1.1" = {
+      name = "require-directory";
+      packageName = "require-directory";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz";
+        sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42";
+      };
+    };
+    "require-main-filename-2.0.0" = {
+      name = "require-main-filename";
+      packageName = "require-main-filename";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz";
+        sha512 = "NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==";
+      };
+    };
+    "requires-port-1.0.0" = {
+      name = "requires-port";
+      packageName = "requires-port";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz";
+        sha1 = "925d2601d39ac485e091cf0da5c6e694dc3dcaff";
+      };
+    };
+    "resize-observer-polyfill-1.5.1" = {
+      name = "resize-observer-polyfill";
+      packageName = "resize-observer-polyfill";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz";
+        sha512 = "LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==";
+      };
+    };
+    "resolve-1.14.1" = {
+      name = "resolve";
+      packageName = "resolve";
+      version = "1.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve/-/resolve-1.14.1.tgz";
+        sha512 = "fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==";
+      };
+    };
+    "resolve-cwd-2.0.0" = {
+      name = "resolve-cwd";
+      packageName = "resolve-cwd";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz";
+        sha1 = "00a9f7387556e27038eae232caa372a6a59b665a";
+      };
+    };
+    "resolve-from-3.0.0" = {
+      name = "resolve-from";
+      packageName = "resolve-from";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz";
+        sha1 = "b22c7af7d9d6881bc8b6e653335eebcb0a188748";
+      };
+    };
+    "resolve-from-4.0.0" = {
+      name = "resolve-from";
+      packageName = "resolve-from";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz";
+        sha512 = "pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==";
+      };
+    };
+    "resolve-url-0.2.1" = {
+      name = "resolve-url";
+      packageName = "resolve-url";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz";
+        sha1 = "2c637fe77c893afd2a663fe21aa9080068e2052a";
+      };
+    };
+    "restore-cursor-2.0.0" = {
+      name = "restore-cursor";
+      packageName = "restore-cursor";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz";
+        sha1 = "9f7ee287f82fd326d4fd162923d62129eee0dfaf";
+      };
+    };
+    "restore-cursor-3.1.0" = {
+      name = "restore-cursor";
+      packageName = "restore-cursor";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz";
+        sha512 = "l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==";
+      };
+    };
+    "ret-0.1.15" = {
+      name = "ret";
+      packageName = "ret";
+      version = "0.1.15";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz";
+        sha512 = "TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==";
+      };
+    };
+    "retry-0.12.0" = {
+      name = "retry";
+      packageName = "retry";
+      version = "0.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz";
+        sha1 = "1b42a6266a21f07421d1b0b54b7dc167b01c013b";
+      };
+    };
+    "rgb-regex-1.0.1" = {
+      name = "rgb-regex";
+      packageName = "rgb-regex";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz";
+        sha1 = "c0e0d6882df0e23be254a475e8edd41915feaeb1";
+      };
+    };
+    "rgba-regex-1.0.0" = {
+      name = "rgba-regex";
+      packageName = "rgba-regex";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz";
+        sha1 = "43374e2e2ca0968b0ef1523460b7d730ff22eeb3";
+      };
+    };
+    "rimraf-2.6.3" = {
+      name = "rimraf";
+      packageName = "rimraf";
+      version = "2.6.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz";
+        sha512 = "mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==";
+      };
+    };
+    "rimraf-2.7.1" = {
+      name = "rimraf";
+      packageName = "rimraf";
+      version = "2.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz";
+        sha512 = "uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==";
+      };
+    };
+    "rimraf-3.0.2" = {
+      name = "rimraf";
+      packageName = "rimraf";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz";
+        sha512 = "JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==";
+      };
+    };
+    "ripemd160-2.0.2" = {
+      name = "ripemd160";
+      packageName = "ripemd160";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz";
+        sha512 = "ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==";
+      };
+    };
+    "run-async-2.3.0" = {
+      name = "run-async";
+      packageName = "run-async";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz";
+        sha1 = "0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0";
+      };
+    };
+    "run-async-2.4.1" = {
+      name = "run-async";
+      packageName = "run-async";
+      version = "2.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz";
+        sha512 = "tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==";
+      };
+    };
+    "run-queue-1.0.3" = {
+      name = "run-queue";
+      packageName = "run-queue";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz";
+        sha1 = "e848396f057d223f24386924618e25694161ec47";
+      };
+    };
+    "rxjs-6.5.3" = {
+      name = "rxjs";
+      packageName = "rxjs";
+      version = "6.5.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz";
+        sha512 = "wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==";
+      };
+    };
+    "safe-buffer-5.1.2" = {
+      name = "safe-buffer";
+      packageName = "safe-buffer";
+      version = "5.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";
+        sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==";
+      };
+    };
+    "safe-regex-1.1.0" = {
+      name = "safe-regex";
+      packageName = "safe-regex";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz";
+        sha1 = "40a3669f3b077d1e943d44629e157dd48023bf2e";
+      };
+    };
+    "safer-buffer-2.1.2" = {
+      name = "safer-buffer";
+      packageName = "safer-buffer";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";
+        sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==";
+      };
+    };
+    "sass-graph-2.2.5" = {
+      name = "sass-graph";
+      packageName = "sass-graph";
+      version = "2.2.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz";
+        sha512 = "VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==";
+      };
+    };
+    "sass-loader-8.0.2" = {
+      name = "sass-loader";
+      packageName = "sass-loader";
+      version = "8.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz";
+        sha512 = "7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==";
+      };
+    };
+    "sax-1.2.4" = {
+      name = "sax";
+      packageName = "sax";
+      version = "1.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz";
+        sha512 = "NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==";
+      };
+    };
+    "schema-utils-1.0.0" = {
+      name = "schema-utils";
+      packageName = "schema-utils";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz";
+        sha512 = "i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==";
+      };
+    };
+    "schema-utils-2.6.1" = {
+      name = "schema-utils";
+      packageName = "schema-utils";
+      version = "2.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz";
+        sha512 = "0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==";
+      };
+    };
+    "schema-utils-2.7.0" = {
+      name = "schema-utils";
+      packageName = "schema-utils";
+      version = "2.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz";
+        sha512 = "0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==";
+      };
+    };
+    "scss-tokenizer-0.2.3" = {
+      name = "scss-tokenizer";
+      packageName = "scss-tokenizer";
+      version = "0.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz";
+        sha1 = "8eb06db9a9723333824d3f5530641149847ce5d1";
+      };
+    };
+    "select-hose-2.0.0" = {
+      name = "select-hose";
+      packageName = "select-hose";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz";
+        sha1 = "625d8658f865af43ec962bfc376a37359a4994ca";
+      };
+    };
+    "selfsigned-1.10.7" = {
+      name = "selfsigned";
+      packageName = "selfsigned";
+      version = "1.10.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz";
+        sha512 = "8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==";
+      };
+    };
+    "semver-5.3.0" = {
+      name = "semver";
+      packageName = "semver";
+      version = "5.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz";
+        sha1 = "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f";
+      };
+    };
+    "semver-5.7.1" = {
+      name = "semver";
+      packageName = "semver";
+      version = "5.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz";
+        sha512 = "sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==";
+      };
+    };
+    "semver-6.3.0" = {
+      name = "semver";
+      packageName = "semver";
+      version = "6.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz";
+        sha512 = "b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==";
+      };
+    };
+    "semver-7.0.0" = {
+      name = "semver";
+      packageName = "semver";
+      version = "7.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz";
+        sha512 = "+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==";
+      };
+    };
+    "semver-7.3.2" = {
+      name = "semver";
+      packageName = "semver";
+      version = "7.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz";
+        sha512 = "OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==";
+      };
+    };
+    "send-0.17.1" = {
+      name = "send";
+      packageName = "send";
+      version = "0.17.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/send/-/send-0.17.1.tgz";
+        sha512 = "BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==";
+      };
+    };
+    "serialize-javascript-2.1.2" = {
+      name = "serialize-javascript";
+      packageName = "serialize-javascript";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz";
+        sha512 = "rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==";
+      };
+    };
+    "serialize-javascript-3.1.0" = {
+      name = "serialize-javascript";
+      packageName = "serialize-javascript";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz";
+        sha512 = "JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==";
+      };
+    };
+    "serve-index-1.9.1" = {
+      name = "serve-index";
+      packageName = "serve-index";
+      version = "1.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz";
+        sha1 = "d3768d69b1e7d82e5ce050fff5b453bea12a9239";
+      };
+    };
+    "serve-static-1.14.1" = {
+      name = "serve-static";
+      packageName = "serve-static";
+      version = "1.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz";
+        sha512 = "JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==";
+      };
+    };
+    "set-blocking-2.0.0" = {
+      name = "set-blocking";
+      packageName = "set-blocking";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz";
+        sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7";
+      };
+    };
+    "set-value-2.0.1" = {
+      name = "set-value";
+      packageName = "set-value";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz";
+        sha512 = "JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==";
+      };
+    };
+    "setimmediate-1.0.5" = {
+      name = "setimmediate";
+      packageName = "setimmediate";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz";
+        sha1 = "290cbb232e306942d7d7ea9b83732ab7856f8285";
+      };
+    };
+    "setprototypeof-1.1.0" = {
+      name = "setprototypeof";
+      packageName = "setprototypeof";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz";
+        sha512 = "BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==";
+      };
+    };
+    "setprototypeof-1.1.1" = {
+      name = "setprototypeof";
+      packageName = "setprototypeof";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz";
+        sha512 = "JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==";
+      };
+    };
+    "sha.js-2.4.11" = {
+      name = "sha.js";
+      packageName = "sha.js";
+      version = "2.4.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz";
+        sha512 = "QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==";
+      };
+    };
+    "shallow-clone-3.0.1" = {
+      name = "shallow-clone";
+      packageName = "shallow-clone";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz";
+        sha512 = "/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==";
+      };
+    };
+    "shebang-command-1.2.0" = {
+      name = "shebang-command";
+      packageName = "shebang-command";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz";
+        sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea";
+      };
+    };
+    "shebang-command-2.0.0" = {
+      name = "shebang-command";
+      packageName = "shebang-command";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz";
+        sha512 = "kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==";
+      };
+    };
+    "shebang-regex-1.0.0" = {
+      name = "shebang-regex";
+      packageName = "shebang-regex";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz";
+        sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3";
+      };
+    };
+    "shebang-regex-3.0.0" = {
+      name = "shebang-regex";
+      packageName = "shebang-regex";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz";
+        sha512 = "7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==";
+      };
+    };
+    "shell-quote-1.7.2" = {
+      name = "shell-quote";
+      packageName = "shell-quote";
+      version = "1.7.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz";
+        sha512 = "mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==";
+      };
+    };
+    "signal-exit-3.0.2" = {
+      name = "signal-exit";
+      packageName = "signal-exit";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz";
+        sha1 = "b5fdc08f1287ea1178628e415e25132b73646c6d";
+      };
+    };
+    "simple-swizzle-0.2.2" = {
+      name = "simple-swizzle";
+      packageName = "simple-swizzle";
+      version = "0.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz";
+        sha1 = "a4da6b635ffcccca33f70d17cb92592de95e557a";
+      };
+    };
+    "slash-1.0.0" = {
+      name = "slash";
+      packageName = "slash";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz";
+        sha1 = "c41f2f6c39fc16d1cd17ad4b5d896114ae470d55";
+      };
+    };
+    "slash-2.0.0" = {
+      name = "slash";
+      packageName = "slash";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz";
+        sha512 = "ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==";
+      };
+    };
+    "slice-ansi-2.1.0" = {
+      name = "slice-ansi";
+      packageName = "slice-ansi";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz";
+        sha512 = "Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==";
+      };
+    };
+    "snapdragon-0.8.2" = {
+      name = "snapdragon";
+      packageName = "snapdragon";
+      version = "0.8.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz";
+        sha512 = "FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==";
+      };
+    };
+    "snapdragon-node-2.1.1" = {
+      name = "snapdragon-node";
+      packageName = "snapdragon-node";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz";
+        sha512 = "O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==";
+      };
+    };
+    "snapdragon-util-3.0.1" = {
+      name = "snapdragon-util";
+      packageName = "snapdragon-util";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz";
+        sha512 = "mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==";
+      };
+    };
+    "sockjs-0.3.20" = {
+      name = "sockjs";
+      packageName = "sockjs";
+      version = "0.3.20";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz";
+        sha512 = "SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==";
+      };
+    };
+    "sockjs-client-1.4.0" = {
+      name = "sockjs-client";
+      packageName = "sockjs-client";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz";
+        sha512 = "5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==";
+      };
+    };
+    "sort-keys-1.1.2" = {
+      name = "sort-keys";
+      packageName = "sort-keys";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz";
+        sha1 = "441b6d4d346798f1b4e49e8920adfba0e543f9ad";
+      };
+    };
+    "source-list-map-2.0.1" = {
+      name = "source-list-map";
+      packageName = "source-list-map";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz";
+        sha512 = "qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==";
+      };
+    };
+    "source-map-0.4.4" = {
+      name = "source-map";
+      packageName = "source-map";
+      version = "0.4.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz";
+        sha1 = "eba4f5da9c0dc999de68032d8b4f76173652036b";
+      };
+    };
+    "source-map-0.5.7" = {
+      name = "source-map";
+      packageName = "source-map";
+      version = "0.5.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz";
+        sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc";
+      };
+    };
+    "source-map-0.6.1" = {
+      name = "source-map";
+      packageName = "source-map";
+      version = "0.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz";
+        sha512 = "UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==";
+      };
+    };
+    "source-map-0.7.3" = {
+      name = "source-map";
+      packageName = "source-map";
+      version = "0.7.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz";
+        sha512 = "CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==";
+      };
+    };
+    "source-map-resolve-0.5.3" = {
+      name = "source-map-resolve";
+      packageName = "source-map-resolve";
+      version = "0.5.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz";
+        sha512 = "Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==";
+      };
+    };
+    "source-map-support-0.5.16" = {
+      name = "source-map-support";
+      packageName = "source-map-support";
+      version = "0.5.16";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz";
+        sha512 = "efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==";
+      };
+    };
+    "source-map-url-0.4.0" = {
+      name = "source-map-url";
+      packageName = "source-map-url";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz";
+        sha1 = "3e935d7ddd73631b97659956d55128e87b5084a3";
+      };
+    };
+    "spdx-correct-3.1.0" = {
+      name = "spdx-correct";
+      packageName = "spdx-correct";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz";
+        sha512 = "lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==";
+      };
+    };
+    "spdx-exceptions-2.2.0" = {
+      name = "spdx-exceptions";
+      packageName = "spdx-exceptions";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz";
+        sha512 = "2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==";
+      };
+    };
+    "spdx-expression-parse-3.0.0" = {
+      name = "spdx-expression-parse";
+      packageName = "spdx-expression-parse";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz";
+        sha512 = "Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==";
+      };
+    };
+    "spdx-license-ids-3.0.5" = {
+      name = "spdx-license-ids";
+      packageName = "spdx-license-ids";
+      version = "3.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz";
+        sha512 = "J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==";
+      };
+    };
+    "spdy-4.0.2" = {
+      name = "spdy";
+      packageName = "spdy";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz";
+        sha512 = "r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==";
+      };
+    };
+    "spdy-transport-3.0.0" = {
+      name = "spdy-transport";
+      packageName = "spdy-transport";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz";
+        sha512 = "hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==";
+      };
+    };
+    "split-string-3.1.0" = {
+      name = "split-string";
+      packageName = "split-string";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz";
+        sha512 = "NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==";
+      };
+    };
+    "sprintf-js-1.0.3" = {
+      name = "sprintf-js";
+      packageName = "sprintf-js";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz";
+        sha1 = "04e6926f662895354f3dd015203633b857297e2c";
+      };
+    };
+    "sshpk-1.16.1" = {
+      name = "sshpk";
+      packageName = "sshpk";
+      version = "1.16.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz";
+        sha512 = "HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==";
+      };
+    };
+    "ssri-6.0.1" = {
+      name = "ssri";
+      packageName = "ssri";
+      version = "6.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz";
+        sha512 = "3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==";
+      };
+    };
+    "ssri-7.1.0" = {
+      name = "ssri";
+      packageName = "ssri";
+      version = "7.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz";
+        sha512 = "77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==";
+      };
+    };
+    "stable-0.1.8" = {
+      name = "stable";
+      packageName = "stable";
+      version = "0.1.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz";
+        sha512 = "ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==";
+      };
+    };
+    "stackframe-1.2.0" = {
+      name = "stackframe";
+      packageName = "stackframe";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz";
+        sha512 = "GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==";
+      };
+    };
+    "static-extend-0.1.2" = {
+      name = "static-extend";
+      packageName = "static-extend";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz";
+        sha1 = "60809c39cbff55337226fd5e0b520f341f1fb5c6";
+      };
+    };
+    "statuses-1.5.0" = {
+      name = "statuses";
+      packageName = "statuses";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz";
+        sha1 = "161c7dac177659fd9811f43771fa99381478628c";
+      };
+    };
+    "stdout-stream-1.4.1" = {
+      name = "stdout-stream";
+      packageName = "stdout-stream";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz";
+        sha512 = "j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==";
+      };
+    };
+    "stream-browserify-2.0.2" = {
+      name = "stream-browserify";
+      packageName = "stream-browserify";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz";
+        sha512 = "nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==";
+      };
+    };
+    "stream-each-1.2.3" = {
+      name = "stream-each";
+      packageName = "stream-each";
+      version = "1.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz";
+        sha512 = "vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==";
+      };
+    };
+    "stream-http-2.8.3" = {
+      name = "stream-http";
+      packageName = "stream-http";
+      version = "2.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz";
+        sha512 = "+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==";
+      };
+    };
+    "stream-shift-1.0.1" = {
+      name = "stream-shift";
+      packageName = "stream-shift";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz";
+        sha512 = "AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==";
+      };
+    };
+    "strict-uri-encode-1.1.0" = {
+      name = "strict-uri-encode";
+      packageName = "strict-uri-encode";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz";
+        sha1 = "279b225df1d582b1f54e65addd4352e18faa0713";
+      };
+    };
+    "string-width-1.0.2" = {
+      name = "string-width";
+      packageName = "string-width";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz";
+        sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3";
+      };
+    };
+    "string-width-2.1.1" = {
+      name = "string-width";
+      packageName = "string-width";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz";
+        sha512 = "nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==";
+      };
+    };
+    "string-width-3.1.0" = {
+      name = "string-width";
+      packageName = "string-width";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz";
+        sha512 = "vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==";
+      };
+    };
+    "string-width-4.2.0" = {
+      name = "string-width";
+      packageName = "string-width";
+      version = "4.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz";
+        sha512 = "zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==";
+      };
+    };
+    "string.prototype.trimend-1.0.1" = {
+      name = "string.prototype.trimend";
+      packageName = "string.prototype.trimend";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz";
+        sha512 = "LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==";
+      };
+    };
+    "string.prototype.trimleft-2.1.1" = {
+      name = "string.prototype.trimleft";
+      packageName = "string.prototype.trimleft";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz";
+        sha512 = "iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==";
+      };
+    };
+    "string.prototype.trimright-2.1.1" = {
+      name = "string.prototype.trimright";
+      packageName = "string.prototype.trimright";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz";
+        sha512 = "qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==";
+      };
+    };
+    "string.prototype.trimstart-1.0.1" = {
+      name = "string.prototype.trimstart";
+      packageName = "string.prototype.trimstart";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz";
+        sha512 = "XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==";
+      };
+    };
+    "string_decoder-1.1.1" = {
+      name = "string_decoder";
+      packageName = "string_decoder";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz";
+        sha512 = "n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==";
+      };
+    };
+    "strip-ansi-3.0.1" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
+        sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
+      };
+    };
+    "strip-ansi-4.0.0" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz";
+        sha1 = "a8479022eb1ac368a871389b635262c505ee368f";
+      };
+    };
+    "strip-ansi-5.2.0" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "5.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz";
+        sha512 = "DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==";
+      };
+    };
+    "strip-ansi-6.0.0" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "6.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz";
+        sha512 = "AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==";
+      };
+    };
+    "strip-bom-2.0.0" = {
+      name = "strip-bom";
+      packageName = "strip-bom";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz";
+        sha1 = "6219a85616520491f35788bdbf1447a99c7e6b0e";
+      };
+    };
+    "strip-eof-1.0.0" = {
+      name = "strip-eof";
+      packageName = "strip-eof";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz";
+        sha1 = "bb43ff5598a6eb05d89b59fcd129c983313606bf";
+      };
+    };
+    "strip-final-newline-2.0.0" = {
+      name = "strip-final-newline";
+      packageName = "strip-final-newline";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz";
+        sha512 = "BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==";
+      };
+    };
+    "strip-indent-1.0.1" = {
+      name = "strip-indent";
+      packageName = "strip-indent";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz";
+        sha1 = "0c7962a6adefa7bbd4ac366460a638552ae1a0a2";
+      };
+    };
+    "strip-indent-2.0.0" = {
+      name = "strip-indent";
+      packageName = "strip-indent";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz";
+        sha1 = "5ef8db295d01e6ed6cbf7aab96998d7822527b68";
+      };
+    };
+    "strip-json-comments-3.0.1" = {
+      name = "strip-json-comments";
+      packageName = "strip-json-comments";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz";
+        sha512 = "VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==";
+      };
+    };
+    "stylehacks-4.0.3" = {
+      name = "stylehacks";
+      packageName = "stylehacks";
+      version = "4.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz";
+        sha512 = "7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==";
+      };
+    };
+    "supports-color-2.0.0" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";
+        sha1 = "535d045ce6b6363fa40117084629995e9df324c7";
+      };
+    };
+    "supports-color-5.5.0" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "5.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz";
+        sha512 = "QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==";
+      };
+    };
+    "supports-color-6.1.0" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "6.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz";
+        sha512 = "qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==";
+      };
+    };
+    "supports-color-7.1.0" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "7.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz";
+        sha512 = "oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==";
+      };
+    };
+    "svg-tags-1.0.0" = {
+      name = "svg-tags";
+      packageName = "svg-tags";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz";
+        sha1 = "58f71cee3bd519b59d4b2a843b6c7de64ac04764";
+      };
+    };
+    "svgo-1.3.2" = {
+      name = "svgo";
+      packageName = "svgo";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz";
+        sha512 = "yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==";
+      };
+    };
+    "table-5.4.6" = {
+      name = "table";
+      packageName = "table";
+      version = "5.4.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/table/-/table-5.4.6.tgz";
+        sha512 = "wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==";
+      };
+    };
+    "tapable-1.1.3" = {
+      name = "tapable";
+      packageName = "tapable";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz";
+        sha512 = "4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==";
+      };
+    };
+    "tar-2.2.2" = {
+      name = "tar";
+      packageName = "tar";
+      version = "2.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz";
+        sha512 = "FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==";
+      };
+    };
+    "terser-4.6.10" = {
+      name = "terser";
+      packageName = "terser";
+      version = "4.6.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/terser/-/terser-4.6.10.tgz";
+        sha512 = "qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA==";
+      };
+    };
+    "terser-4.8.0" = {
+      name = "terser";
+      packageName = "terser";
+      version = "4.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz";
+        sha512 = "EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==";
+      };
+    };
+    "terser-webpack-plugin-1.4.3" = {
+      name = "terser-webpack-plugin";
+      packageName = "terser-webpack-plugin";
+      version = "1.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz";
+        sha512 = "QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==";
+      };
+    };
+    "terser-webpack-plugin-2.3.7" = {
+      name = "terser-webpack-plugin";
+      packageName = "terser-webpack-plugin";
+      version = "2.3.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.7.tgz";
+        sha512 = "xzYyaHUNhzgaAdBsXxk2Yvo/x1NJdslUaussK3fdpBbvttm1iIwU+c26dj9UxJcwk2c5UWt5F55MUTIA8BE7Dg==";
+      };
+    };
+    "text-table-0.2.0" = {
+      name = "text-table";
+      packageName = "text-table";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz";
+        sha1 = "7f5ee823ae805207c00af2df4a84ec3fcfa570b4";
+      };
+    };
+    "thenify-3.3.1" = {
+      name = "thenify";
+      packageName = "thenify";
+      version = "3.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz";
+        sha512 = "RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==";
+      };
+    };
+    "thenify-all-1.6.0" = {
+      name = "thenify-all";
+      packageName = "thenify-all";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz";
+        sha1 = "1a1918d402d8fc3f98fbf234db0bcc8cc10e9726";
+      };
+    };
+    "thread-loader-2.1.3" = {
+      name = "thread-loader";
+      packageName = "thread-loader";
+      version = "2.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.3.tgz";
+        sha512 = "wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==";
+      };
+    };
+    "through-2.3.8" = {
+      name = "through";
+      packageName = "through";
+      version = "2.3.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/through/-/through-2.3.8.tgz";
+        sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5";
+      };
+    };
+    "through2-2.0.5" = {
+      name = "through2";
+      packageName = "through2";
+      version = "2.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz";
+        sha512 = "/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==";
+      };
+    };
+    "thunky-1.1.0" = {
+      name = "thunky";
+      packageName = "thunky";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz";
+        sha512 = "eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==";
+      };
+    };
+    "timers-browserify-2.0.11" = {
+      name = "timers-browserify";
+      packageName = "timers-browserify";
+      version = "2.0.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz";
+        sha512 = "60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==";
+      };
+    };
+    "timsort-0.3.0" = {
+      name = "timsort";
+      packageName = "timsort";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz";
+        sha1 = "405411a8e7e6339fe64db9a234de11dc31e02bd4";
+      };
+    };
+    "tmp-0.0.33" = {
+      name = "tmp";
+      packageName = "tmp";
+      version = "0.0.33";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz";
+        sha512 = "jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==";
+      };
+    };
+    "to-arraybuffer-1.0.1" = {
+      name = "to-arraybuffer";
+      packageName = "to-arraybuffer";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz";
+        sha1 = "7d229b1fcc637e466ca081180836a7aabff83f43";
+      };
+    };
+    "to-fast-properties-2.0.0" = {
+      name = "to-fast-properties";
+      packageName = "to-fast-properties";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz";
+        sha1 = "dc5e698cbd079265bc73e0377681a4e4e83f616e";
+      };
+    };
+    "to-object-path-0.3.0" = {
+      name = "to-object-path";
+      packageName = "to-object-path";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz";
+        sha1 = "297588b7b0e7e0ac08e04e672f85c1f4999e17af";
+      };
+    };
+    "to-regex-3.0.2" = {
+      name = "to-regex";
+      packageName = "to-regex";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz";
+        sha512 = "FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==";
+      };
+    };
+    "to-regex-range-2.1.1" = {
+      name = "to-regex-range";
+      packageName = "to-regex-range";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz";
+        sha1 = "7c80c17b9dfebe599e27367e0d4dd5590141db38";
+      };
+    };
+    "to-regex-range-5.0.1" = {
+      name = "to-regex-range";
+      packageName = "to-regex-range";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz";
+        sha512 = "65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==";
+      };
+    };
+    "toidentifier-1.0.0" = {
+      name = "toidentifier";
+      packageName = "toidentifier";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz";
+        sha512 = "yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==";
+      };
+    };
+    "toposort-1.0.7" = {
+      name = "toposort";
+      packageName = "toposort";
+      version = "1.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz";
+        sha1 = "2e68442d9f64ec720b8cc89e6443ac6caa950029";
+      };
+    };
+    "tough-cookie-2.5.0" = {
+      name = "tough-cookie";
+      packageName = "tough-cookie";
+      version = "2.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz";
+        sha512 = "nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==";
+      };
+    };
+    "trim-newlines-1.0.0" = {
+      name = "trim-newlines";
+      packageName = "trim-newlines";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz";
+        sha1 = "5887966bb582a4503a41eb524f7d35011815a613";
+      };
+    };
+    "true-case-path-1.0.3" = {
+      name = "true-case-path";
+      packageName = "true-case-path";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz";
+        sha512 = "m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==";
+      };
+    };
+    "tryer-1.0.1" = {
+      name = "tryer";
+      packageName = "tryer";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz";
+        sha512 = "c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==";
+      };
+    };
+    "ts-loader-6.2.2" = {
+      name = "ts-loader";
+      packageName = "ts-loader";
+      version = "6.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ts-loader/-/ts-loader-6.2.2.tgz";
+        sha512 = "HDo5kXZCBml3EUPcc7RlZOV/JGlLHwppTLEHb3SHnr5V7NXD4klMEkrhJe5wgRbaWsSXi+Y1SIBN/K9B6zWGWQ==";
+      };
+    };
+    "ts-pnp-1.2.0" = {
+      name = "ts-pnp";
+      packageName = "ts-pnp";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz";
+        sha512 = "csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==";
+      };
+    };
+    "tslib-1.10.0" = {
+      name = "tslib";
+      packageName = "tslib";
+      version = "1.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz";
+        sha512 = "qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==";
+      };
+    };
+    "tslint-5.20.1" = {
+      name = "tslint";
+      packageName = "tslint";
+      version = "5.20.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz";
+        sha512 = "EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==";
+      };
+    };
+    "tsutils-2.29.0" = {
+      name = "tsutils";
+      packageName = "tsutils";
+      version = "2.29.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz";
+        sha512 = "g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==";
+      };
+    };
+    "tsutils-3.17.1" = {
+      name = "tsutils";
+      packageName = "tsutils";
+      version = "3.17.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz";
+        sha512 = "kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==";
+      };
+    };
+    "tty-browserify-0.0.0" = {
+      name = "tty-browserify";
+      packageName = "tty-browserify";
+      version = "0.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz";
+        sha1 = "a157ba402da24e9bf957f9aa69d524eed42901a6";
+      };
+    };
+    "tunnel-agent-0.6.0" = {
+      name = "tunnel-agent";
+      packageName = "tunnel-agent";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
+        sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd";
+      };
+    };
+    "tweetnacl-0.14.5" = {
+      name = "tweetnacl";
+      packageName = "tweetnacl";
+      version = "0.14.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz";
+        sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
+      };
+    };
+    "type-check-0.3.2" = {
+      name = "type-check";
+      packageName = "type-check";
+      version = "0.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz";
+        sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72";
+      };
+    };
+    "type-fest-0.6.0" = {
+      name = "type-fest";
+      packageName = "type-fest";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz";
+        sha512 = "q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==";
+      };
+    };
+    "type-fest-0.8.1" = {
+      name = "type-fest";
+      packageName = "type-fest";
+      version = "0.8.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz";
+        sha512 = "4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==";
+      };
+    };
+    "type-is-1.6.18" = {
+      name = "type-is";
+      packageName = "type-is";
+      version = "1.6.18";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz";
+        sha512 = "TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==";
+      };
+    };
+    "typedarray-0.0.6" = {
+      name = "typedarray";
+      packageName = "typedarray";
+      version = "0.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz";
+        sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777";
+      };
+    };
+    "typescript-3.9.5" = {
+      name = "typescript";
+      packageName = "typescript";
+      version = "3.9.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz";
+        sha512 = "hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==";
+      };
+    };
+    "uglify-js-3.4.10" = {
+      name = "uglify-js";
+      packageName = "uglify-js";
+      version = "3.4.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz";
+        sha512 = "Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==";
+      };
+    };
+    "unicode-canonical-property-names-ecmascript-1.0.4" = {
+      name = "unicode-canonical-property-names-ecmascript";
+      packageName = "unicode-canonical-property-names-ecmascript";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz";
+        sha512 = "jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==";
+      };
+    };
+    "unicode-match-property-ecmascript-1.0.4" = {
+      name = "unicode-match-property-ecmascript";
+      packageName = "unicode-match-property-ecmascript";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz";
+        sha512 = "L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==";
+      };
+    };
+    "unicode-match-property-value-ecmascript-1.2.0" = {
+      name = "unicode-match-property-value-ecmascript";
+      packageName = "unicode-match-property-value-ecmascript";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz";
+        sha512 = "wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==";
+      };
+    };
+    "unicode-property-aliases-ecmascript-1.1.0" = {
+      name = "unicode-property-aliases-ecmascript";
+      packageName = "unicode-property-aliases-ecmascript";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz";
+        sha512 = "PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==";
+      };
+    };
+    "union-value-1.0.1" = {
+      name = "union-value";
+      packageName = "union-value";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz";
+        sha512 = "tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==";
+      };
+    };
+    "uniq-1.0.1" = {
+      name = "uniq";
+      packageName = "uniq";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz";
+        sha1 = "b31c5ae8254844a3a8281541ce2b04b865a734ff";
+      };
+    };
+    "uniqs-2.0.0" = {
+      name = "uniqs";
+      packageName = "uniqs";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz";
+        sha1 = "ffede4b36b25290696e6e165d4a59edb998e6b02";
+      };
+    };
+    "unique-filename-1.1.1" = {
+      name = "unique-filename";
+      packageName = "unique-filename";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz";
+        sha512 = "Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==";
+      };
+    };
+    "unique-slug-2.0.2" = {
+      name = "unique-slug";
+      packageName = "unique-slug";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz";
+        sha512 = "zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==";
+      };
+    };
+    "universalify-0.1.2" = {
+      name = "universalify";
+      packageName = "universalify";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz";
+        sha512 = "rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==";
+      };
+    };
+    "unpipe-1.0.0" = {
+      name = "unpipe";
+      packageName = "unpipe";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz";
+        sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec";
+      };
+    };
+    "unquote-1.1.1" = {
+      name = "unquote";
+      packageName = "unquote";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz";
+        sha1 = "8fded7324ec6e88a0ff8b905e7c098cdc086d544";
+      };
+    };
+    "unset-value-1.0.0" = {
+      name = "unset-value";
+      packageName = "unset-value";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz";
+        sha1 = "8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559";
+      };
+    };
+    "upath-1.2.0" = {
+      name = "upath";
+      packageName = "upath";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz";
+        sha512 = "aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==";
+      };
+    };
+    "upper-case-1.1.3" = {
+      name = "upper-case";
+      packageName = "upper-case";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz";
+        sha1 = "f6b4501c2ec4cdd26ba78be7222961de77621598";
+      };
+    };
+    "uri-js-4.2.2" = {
+      name = "uri-js";
+      packageName = "uri-js";
+      version = "4.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz";
+        sha512 = "KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==";
+      };
+    };
+    "urix-0.1.0" = {
+      name = "urix";
+      packageName = "urix";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz";
+        sha1 = "da937f7a62e21fec1fd18d49b35c2935067a6c72";
+      };
+    };
+    "url-0.11.0" = {
+      name = "url";
+      packageName = "url";
+      version = "0.11.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/url/-/url-0.11.0.tgz";
+        sha1 = "3838e97cfc60521eb73c525a8e55bfdd9e2e28f1";
+      };
+    };
+    "url-loader-2.3.0" = {
+      name = "url-loader";
+      packageName = "url-loader";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz";
+        sha512 = "goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==";
+      };
+    };
+    "url-parse-1.4.7" = {
+      name = "url-parse";
+      packageName = "url-parse";
+      version = "1.4.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz";
+        sha512 = "d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==";
+      };
+    };
+    "use-3.1.1" = {
+      name = "use";
+      packageName = "use";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/use/-/use-3.1.1.tgz";
+        sha512 = "cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==";
+      };
+    };
+    "util-0.10.3" = {
+      name = "util";
+      packageName = "util";
+      version = "0.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util/-/util-0.10.3.tgz";
+        sha1 = "7afb1afe50805246489e3db7fe0ed379336ac0f9";
+      };
+    };
+    "util-0.11.1" = {
+      name = "util";
+      packageName = "util";
+      version = "0.11.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util/-/util-0.11.1.tgz";
+        sha512 = "HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==";
+      };
+    };
+    "util-deprecate-1.0.2" = {
+      name = "util-deprecate";
+      packageName = "util-deprecate";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
+        sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
+      };
+    };
+    "util.promisify-1.0.0" = {
+      name = "util.promisify";
+      packageName = "util.promisify";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz";
+        sha512 = "i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==";
+      };
+    };
+    "util.promisify-1.0.1" = {
+      name = "util.promisify";
+      packageName = "util.promisify";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz";
+        sha512 = "g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==";
+      };
+    };
+    "utila-0.4.0" = {
+      name = "utila";
+      packageName = "utila";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz";
+        sha1 = "8a16a05d445657a3aea5eecc5b12a4fa5379772c";
+      };
+    };
+    "utils-merge-1.0.1" = {
+      name = "utils-merge";
+      packageName = "utils-merge";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz";
+        sha1 = "9f95710f50a267947b2ccc124741c1028427e713";
+      };
+    };
+    "uuid-3.3.3" = {
+      name = "uuid";
+      packageName = "uuid";
+      version = "3.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz";
+        sha512 = "pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==";
+      };
+    };
+    "uuid-3.4.0" = {
+      name = "uuid";
+      packageName = "uuid";
+      version = "3.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz";
+        sha512 = "HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==";
+      };
+    };
+    "v-lazy-image-1.4.0" = {
+      name = "v-lazy-image";
+      packageName = "v-lazy-image";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/v-lazy-image/-/v-lazy-image-1.4.0.tgz";
+        sha512 = "Xp/fM786hdXlP10HatvtNsvvPjW6yOsH17lvVEEuGiNMnyiafT9XVomQRRM4t+IzN21cz3SQcw9cqd486yhpgQ==";
+      };
+    };
+    "v8-compile-cache-2.1.0" = {
+      name = "v8-compile-cache";
+      packageName = "v8-compile-cache";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz";
+        sha512 = "usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==";
+      };
+    };
+    "validate-npm-package-license-3.0.4" = {
+      name = "validate-npm-package-license";
+      packageName = "validate-npm-package-license";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz";
+        sha512 = "DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==";
+      };
+    };
+    "vary-1.1.2" = {
+      name = "vary";
+      packageName = "vary";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz";
+        sha1 = "2299f02c6ded30d4a5961b0b9f74524a18f634fc";
+      };
+    };
+    "vendors-1.0.4" = {
+      name = "vendors";
+      packageName = "vendors";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz";
+        sha512 = "/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==";
+      };
+    };
+    "verror-1.10.0" = {
+      name = "verror";
+      packageName = "verror";
+      version = "1.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz";
+        sha1 = "3a105ca17053af55d6e270c1f8288682e18da400";
+      };
+    };
+    "vm-browserify-1.1.2" = {
+      name = "vm-browserify";
+      packageName = "vm-browserify";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz";
+        sha512 = "2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==";
+      };
+    };
+    "vue-2.6.12" = {
+      name = "vue";
+      packageName = "vue";
+      version = "2.6.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz";
+        sha512 = "uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==";
+      };
+    };
+    "vue-class-component-7.2.5" = {
+      name = "vue-class-component";
+      packageName = "vue-class-component";
+      version = "7.2.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-class-component/-/vue-class-component-7.2.5.tgz";
+        sha512 = "0CSftHY0bDTD+4FbYkuFf6+iKDjZ4h2in2YYJDRMk5daZIjrgT9LjFHvP7Rzqy9/s1pij3zDtTSLRUjsPWMwqg==";
+      };
+    };
+    "vue-cli-plugin-buefy-0.3.7" = {
+      name = "vue-cli-plugin-buefy";
+      packageName = "vue-cli-plugin-buefy";
+      version = "0.3.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-cli-plugin-buefy/-/vue-cli-plugin-buefy-0.3.7.tgz";
+        sha512 = "w+1Wnj1VmoLJmv0yHoLUErnFkLSzz4yTGhCz7GudDKX7vB5NpVK+/xWmiFOytuDkleWeYrJgHN8CIOY7xe26jQ==";
+      };
+    };
+    "vue-cli-plugin-fontawesome-0.2.0" = {
+      name = "vue-cli-plugin-fontawesome";
+      packageName = "vue-cli-plugin-fontawesome";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-cli-plugin-fontawesome/-/vue-cli-plugin-fontawesome-0.2.0.tgz";
+        sha512 = "/4DzKldf4e6CcZ1E3hO19ZFVX36DqjewCytzXekpBL74KFcpWAFaAZEJkisPfMVsalbVn6AOk27VOA8nfnZAFg==";
+      };
+    };
+    "vue-cli-plugin-i18n-1.0.1" = {
+      name = "vue-cli-plugin-i18n";
+      packageName = "vue-cli-plugin-i18n";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-cli-plugin-i18n/-/vue-cli-plugin-i18n-1.0.1.tgz";
+        sha512 = "sLo6YzudaWgn5dOMvrKixE5bb/onYGxcxm+0YexqoOx0QtR+7hZ/P5WPFBMM9v/2i1ec2YYe2PvKTBel7KE+tA==";
+      };
+    };
+    "vue-dragscroll-2.1.0" = {
+      name = "vue-dragscroll";
+      packageName = "vue-dragscroll";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-dragscroll/-/vue-dragscroll-2.1.0.tgz";
+        sha512 = "ZNcvOdrnq9w4US2RqZOfp2cCJzEz1p4xZ1w4I+xKSAFlEOrXbryLe/iclspHH57dco5QT3Azd8/KD930WzadiQ==";
+      };
+    };
+    "vue-eslint-parser-7.0.0" = {
+      name = "vue-eslint-parser";
+      packageName = "vue-eslint-parser";
+      version = "7.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.0.0.tgz";
+        sha512 = "yR0dLxsTT7JfD2YQo9BhnQ6bUTLsZouuzt9SKRP7XNaZJV459gvlsJo4vT2nhZ/2dH9j3c53bIx9dnqU2prM9g==";
+      };
+    };
+    "vue-hot-reload-api-2.3.4" = {
+      name = "vue-hot-reload-api";
+      packageName = "vue-hot-reload-api";
+      version = "2.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz";
+        sha512 = "BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==";
+      };
+    };
+    "vue-i18n-8.21.0" = {
+      name = "vue-i18n";
+      packageName = "vue-i18n";
+      version = "8.21.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.21.0.tgz";
+        sha512 = "pKBq6Kg5hNacFHMFgPbpYsFlDIMRu4Ew/tpvTWns14CZoCxt7B3tmSNdrLruGMMivnJu1rhhRqsQqT6YwHkuQQ==";
+      };
+    };
+    "vue-i18n-extract-1.0.2" = {
+      name = "vue-i18n-extract";
+      packageName = "vue-i18n-extract";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-i18n-extract/-/vue-i18n-extract-1.0.2.tgz";
+        sha512 = "+zwDKvle4KcfloXZnj5hF01ViKDiFr5RMx5507D7oyDXpSleRpekF5YHgZa/+Ra6Go68//z0Nya58J9tKFsCjw==";
+      };
+    };
+    "vue-loader-15.9.3" = {
+      name = "vue-loader";
+      packageName = "vue-loader";
+      version = "15.9.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.3.tgz";
+        sha512 = "Y67VnGGgVLH5Voostx8JBZgPQTlDQeOVBLOEsjc2cXbCYBKexSKEpOA56x0YZofoDOTszrLnIShyOX1p9uCEHA==";
+      };
+    };
+    "vue-property-decorator-9.0.0" = {
+      name = "vue-property-decorator";
+      packageName = "vue-property-decorator";
+      version = "9.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-9.0.0.tgz";
+        sha512 = "oegTNPItuHOkW0AP1MnbdNwkmyhfsUIIXvIRHpgC18tVoEo21/i6kItyeekjMs8JgZJeuHzsaTc/DZaJFH4IWQ==";
+      };
+    };
+    "vue-router-3.4.3" = {
+      name = "vue-router";
+      packageName = "vue-router";
+      version = "3.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-router/-/vue-router-3.4.3.tgz";
+        sha512 = "BADg1mjGWX18Dpmy6bOGzGNnk7B/ZA0RxuA6qedY/YJwirMfKXIDzcccmHbQI0A6k5PzMdMloc0ElHfyOoX35A==";
+      };
+    };
+    "vue-style-loader-4.1.2" = {
+      name = "vue-style-loader";
+      packageName = "vue-style-loader";
+      version = "4.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz";
+        sha512 = "0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==";
+      };
+    };
+    "vue-template-compiler-2.6.12" = {
+      name = "vue-template-compiler";
+      packageName = "vue-template-compiler";
+      version = "2.6.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz";
+        sha512 = "OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==";
+      };
+    };
+    "vue-template-es2015-compiler-1.9.1" = {
+      name = "vue-template-es2015-compiler";
+      packageName = "vue-template-es2015-compiler";
+      version = "1.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz";
+        sha512 = "4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==";
+      };
+    };
+    "vuex-3.5.1" = {
+      name = "vuex";
+      packageName = "vuex";
+      version = "3.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vuex/-/vuex-3.5.1.tgz";
+        sha512 = "w7oJzmHQs0FM9LXodfskhw9wgKBiaB+totOdb8sNzbTB2KDCEEwEs29NzBZFh/lmEK1t5tDmM1vtsO7ubG1DFw==";
+      };
+    };
+    "vuex-class-component-2.3.5" = {
+      name = "vuex-class-component";
+      packageName = "vuex-class-component";
+      version = "2.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vuex-class-component/-/vuex-class-component-2.3.5.tgz";
+        sha512 = "e7BhLrh5jZNHoeUajfQ5NFwA9gnVj69HKxBGRiw6FRZVpXTGewPo23S1//lb5Ed1RucIfQlqfwVpC/2mtej6bw==";
+      };
+    };
+    "watchpack-1.6.1" = {
+      name = "watchpack";
+      packageName = "watchpack";
+      version = "1.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz";
+        sha512 = "+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==";
+      };
+    };
+    "wbuf-1.7.3" = {
+      name = "wbuf";
+      packageName = "wbuf";
+      version = "1.7.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz";
+        sha512 = "O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==";
+      };
+    };
+    "wcwidth-1.0.1" = {
+      name = "wcwidth";
+      packageName = "wcwidth";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz";
+        sha1 = "f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8";
+      };
+    };
+    "webpack-4.42.1" = {
+      name = "webpack";
+      packageName = "webpack";
+      version = "4.42.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack/-/webpack-4.42.1.tgz";
+        sha512 = "SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==";
+      };
+    };
+    "webpack-bundle-analyzer-3.8.0" = {
+      name = "webpack-bundle-analyzer";
+      packageName = "webpack-bundle-analyzer";
+      version = "3.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.8.0.tgz";
+        sha512 = "PODQhAYVEourCcOuU+NiYI7WdR8QyELZGgPvB1y2tjbUpbmcQOt5Q7jEK+ttd5se0KSBKD9SXHCEozS++Wllmw==";
+      };
+    };
+    "webpack-chain-6.4.0" = {
+      name = "webpack-chain";
+      packageName = "webpack-chain";
+      version = "6.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.4.0.tgz";
+        sha512 = "f97PYqxU+9/u0IUqp/ekAHRhBD1IQwhBv3wlJo2nvyELpr2vNnUqO3XQEk+qneg0uWGP54iciotszpjfnEExFA==";
+      };
+    };
+    "webpack-dev-middleware-3.7.2" = {
+      name = "webpack-dev-middleware";
+      packageName = "webpack-dev-middleware";
+      version = "3.7.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz";
+        sha512 = "1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==";
+      };
+    };
+    "webpack-dev-server-3.11.0" = {
+      name = "webpack-dev-server";
+      packageName = "webpack-dev-server";
+      version = "3.11.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz";
+        sha512 = "PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==";
+      };
+    };
+    "webpack-log-2.0.0" = {
+      name = "webpack-log";
+      packageName = "webpack-log";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz";
+        sha512 = "cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==";
+      };
+    };
+    "webpack-merge-4.2.2" = {
+      name = "webpack-merge";
+      packageName = "webpack-merge";
+      version = "4.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz";
+        sha512 = "TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==";
+      };
+    };
+    "webpack-sources-1.4.3" = {
+      name = "webpack-sources";
+      packageName = "webpack-sources";
+      version = "1.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz";
+        sha512 = "lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==";
+      };
+    };
+    "websocket-driver-0.6.5" = {
+      name = "websocket-driver";
+      packageName = "websocket-driver";
+      version = "0.6.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz";
+        sha1 = "5cb2556ceb85f4373c6d8238aa691c8454e13a36";
+      };
+    };
+    "websocket-extensions-0.1.4" = {
+      name = "websocket-extensions";
+      packageName = "websocket-extensions";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz";
+        sha512 = "OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==";
+      };
+    };
+    "which-1.3.1" = {
+      name = "which";
+      packageName = "which";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which/-/which-1.3.1.tgz";
+        sha512 = "HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==";
+      };
+    };
+    "which-2.0.2" = {
+      name = "which";
+      packageName = "which";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which/-/which-2.0.2.tgz";
+        sha512 = "BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==";
+      };
+    };
+    "which-module-2.0.0" = {
+      name = "which-module";
+      packageName = "which-module";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz";
+        sha1 = "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a";
+      };
+    };
+    "wide-align-1.1.3" = {
+      name = "wide-align";
+      packageName = "wide-align";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz";
+        sha512 = "QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==";
+      };
+    };
+    "word-wrap-1.2.3" = {
+      name = "word-wrap";
+      packageName = "word-wrap";
+      version = "1.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz";
+        sha512 = "Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==";
+      };
+    };
+    "worker-farm-1.7.0" = {
+      name = "worker-farm";
+      packageName = "worker-farm";
+      version = "1.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz";
+        sha512 = "rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==";
+      };
+    };
+    "worker-rpc-0.1.1" = {
+      name = "worker-rpc";
+      packageName = "worker-rpc";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz";
+        sha512 = "P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==";
+      };
+    };
+    "wrap-ansi-5.1.0" = {
+      name = "wrap-ansi";
+      packageName = "wrap-ansi";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz";
+        sha512 = "QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==";
+      };
+    };
+    "wrap-ansi-6.2.0" = {
+      name = "wrap-ansi";
+      packageName = "wrap-ansi";
+      version = "6.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz";
+        sha512 = "r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==";
+      };
+    };
+    "wrappy-1.0.2" = {
+      name = "wrappy";
+      packageName = "wrappy";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
+        sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
+      };
+    };
+    "write-1.0.3" = {
+      name = "write";
+      packageName = "write";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/write/-/write-1.0.3.tgz";
+        sha512 = "/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==";
+      };
+    };
+    "ws-6.2.1" = {
+      name = "ws";
+      packageName = "ws";
+      version = "6.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz";
+        sha512 = "GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==";
+      };
+    };
+    "xtend-4.0.2" = {
+      name = "xtend";
+      packageName = "xtend";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz";
+        sha512 = "LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==";
+      };
+    };
+    "y18n-4.0.0" = {
+      name = "y18n";
+      packageName = "y18n";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz";
+        sha512 = "r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==";
+      };
+    };
+    "yallist-2.1.2" = {
+      name = "yallist";
+      packageName = "yallist";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz";
+        sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52";
+      };
+    };
+    "yallist-3.1.1" = {
+      name = "yallist";
+      packageName = "yallist";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz";
+        sha512 = "a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==";
+      };
+    };
+    "yallist-4.0.0" = {
+      name = "yallist";
+      packageName = "yallist";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz";
+        sha512 = "3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==";
+      };
+    };
+    "yargs-13.3.2" = {
+      name = "yargs";
+      packageName = "yargs";
+      version = "13.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz";
+        sha512 = "AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==";
+      };
+    };
+    "yargs-15.3.1" = {
+      name = "yargs";
+      packageName = "yargs";
+      version = "15.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz";
+        sha512 = "92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==";
+      };
+    };
+    "yargs-parser-13.1.2" = {
+      name = "yargs-parser";
+      packageName = "yargs-parser";
+      version = "13.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz";
+        sha512 = "3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==";
+      };
+    };
+    "yargs-parser-18.1.3" = {
+      name = "yargs-parser";
+      packageName = "yargs-parser";
+      version = "18.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz";
+        sha512 = "o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==";
+      };
+    };
+    "yorkie-2.0.0" = {
+      name = "yorkie";
+      packageName = "yorkie";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz";
+        sha512 = "jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==";
+      };
+    };
+  };
+  args = {
+    name = "ldgallery-viewer";
+    packageName = "ldgallery-viewer";
+    version = "2.0.0";
+    src = ./.;
+    dependencies = [
+      sources."@babel/code-frame-7.5.5"
+      (sources."@babel/compat-data-7.10.3" // {
+        dependencies = [
+          sources."browserslist-4.12.2"
+          sources."caniuse-lite-1.0.30001090"
+          sources."electron-to-chromium-1.3.483"
+          sources."node-releases-1.1.58"
+        ];
+      })
+      (sources."@babel/core-7.10.3" // {
+        dependencies = [
+          sources."@babel/code-frame-7.10.3"
+          sources."@babel/highlight-7.10.3"
+          sources."source-map-0.5.7"
+        ];
+      })
+      (sources."@babel/generator-7.10.3" // {
+        dependencies = [
+          sources."source-map-0.5.7"
+        ];
+      })
+      sources."@babel/helper-annotate-as-pure-7.10.1"
+      sources."@babel/helper-builder-binary-assignment-operator-visitor-7.10.3"
+      (sources."@babel/helper-compilation-targets-7.10.2" // {
+        dependencies = [
+          sources."browserslist-4.12.2"
+          sources."caniuse-lite-1.0.30001090"
+          sources."electron-to-chromium-1.3.483"
+          sources."node-releases-1.1.58"
+        ];
+      })
+      sources."@babel/helper-create-class-features-plugin-7.10.3"
+      sources."@babel/helper-create-regexp-features-plugin-7.10.1"
+      sources."@babel/helper-define-map-7.10.3"
+      sources."@babel/helper-explode-assignable-expression-7.10.3"
+      sources."@babel/helper-function-name-7.10.3"
+      sources."@babel/helper-get-function-arity-7.10.3"
+      sources."@babel/helper-hoist-variables-7.10.3"
+      sources."@babel/helper-member-expression-to-functions-7.10.3"
+      sources."@babel/helper-module-imports-7.10.3"
+      sources."@babel/helper-module-transforms-7.10.1"
+      sources."@babel/helper-optimise-call-expression-7.10.3"
+      sources."@babel/helper-plugin-utils-7.10.3"
+      sources."@babel/helper-regex-7.10.1"
+      sources."@babel/helper-remap-async-to-generator-7.10.3"
+      sources."@babel/helper-replace-supers-7.10.1"
+      sources."@babel/helper-simple-access-7.10.1"
+      sources."@babel/helper-split-export-declaration-7.10.1"
+      sources."@babel/helper-validator-identifier-7.10.3"
+      sources."@babel/helper-wrap-function-7.10.1"
+      sources."@babel/helpers-7.10.1"
+      sources."@babel/highlight-7.5.0"
+      sources."@babel/parser-7.10.3"
+      sources."@babel/plugin-proposal-async-generator-functions-7.10.3"
+      sources."@babel/plugin-proposal-class-properties-7.10.1"
+      sources."@babel/plugin-proposal-decorators-7.10.3"
+      sources."@babel/plugin-proposal-dynamic-import-7.10.1"
+      sources."@babel/plugin-proposal-json-strings-7.10.1"
+      sources."@babel/plugin-proposal-nullish-coalescing-operator-7.10.1"
+      sources."@babel/plugin-proposal-numeric-separator-7.10.1"
+      sources."@babel/plugin-proposal-object-rest-spread-7.10.3"
+      sources."@babel/plugin-proposal-optional-catch-binding-7.10.1"
+      sources."@babel/plugin-proposal-optional-chaining-7.10.3"
+      sources."@babel/plugin-proposal-private-methods-7.10.1"
+      sources."@babel/plugin-proposal-unicode-property-regex-7.10.1"
+      sources."@babel/plugin-syntax-async-generators-7.8.4"
+      sources."@babel/plugin-syntax-class-properties-7.10.1"
+      sources."@babel/plugin-syntax-decorators-7.10.1"
+      sources."@babel/plugin-syntax-dynamic-import-7.8.3"
+      sources."@babel/plugin-syntax-json-strings-7.8.3"
+      sources."@babel/plugin-syntax-jsx-7.10.1"
+      sources."@babel/plugin-syntax-nullish-coalescing-operator-7.8.3"
+      sources."@babel/plugin-syntax-numeric-separator-7.10.1"
+      sources."@babel/plugin-syntax-object-rest-spread-7.8.3"
+      sources."@babel/plugin-syntax-optional-catch-binding-7.8.3"
+      sources."@babel/plugin-syntax-optional-chaining-7.8.3"
+      sources."@babel/plugin-syntax-top-level-await-7.10.1"
+      sources."@babel/plugin-transform-arrow-functions-7.10.1"
+      sources."@babel/plugin-transform-async-to-generator-7.10.1"
+      sources."@babel/plugin-transform-block-scoped-functions-7.10.1"
+      sources."@babel/plugin-transform-block-scoping-7.10.1"
+      sources."@babel/plugin-transform-classes-7.10.3"
+      sources."@babel/plugin-transform-computed-properties-7.10.3"
+      sources."@babel/plugin-transform-destructuring-7.10.1"
+      sources."@babel/plugin-transform-dotall-regex-7.10.1"
+      sources."@babel/plugin-transform-duplicate-keys-7.10.1"
+      sources."@babel/plugin-transform-exponentiation-operator-7.10.1"
+      sources."@babel/plugin-transform-for-of-7.10.1"
+      sources."@babel/plugin-transform-function-name-7.10.1"
+      sources."@babel/plugin-transform-literals-7.10.1"
+      sources."@babel/plugin-transform-member-expression-literals-7.10.1"
+      sources."@babel/plugin-transform-modules-amd-7.10.1"
+      sources."@babel/plugin-transform-modules-commonjs-7.10.1"
+      sources."@babel/plugin-transform-modules-systemjs-7.10.3"
+      sources."@babel/plugin-transform-modules-umd-7.10.1"
+      sources."@babel/plugin-transform-named-capturing-groups-regex-7.10.3"
+      sources."@babel/plugin-transform-new-target-7.10.1"
+      sources."@babel/plugin-transform-object-super-7.10.1"
+      sources."@babel/plugin-transform-parameters-7.10.1"
+      sources."@babel/plugin-transform-property-literals-7.10.1"
+      sources."@babel/plugin-transform-regenerator-7.10.3"
+      sources."@babel/plugin-transform-reserved-words-7.10.1"
+      sources."@babel/plugin-transform-runtime-7.10.3"
+      sources."@babel/plugin-transform-shorthand-properties-7.10.1"
+      sources."@babel/plugin-transform-spread-7.10.1"
+      sources."@babel/plugin-transform-sticky-regex-7.10.1"
+      sources."@babel/plugin-transform-template-literals-7.10.3"
+      sources."@babel/plugin-transform-typeof-symbol-7.10.1"
+      sources."@babel/plugin-transform-unicode-escapes-7.10.1"
+      sources."@babel/plugin-transform-unicode-regex-7.10.1"
+      (sources."@babel/preset-env-7.10.3" // {
+        dependencies = [
+          sources."browserslist-4.12.2"
+          sources."caniuse-lite-1.0.30001090"
+          sources."electron-to-chromium-1.3.483"
+          sources."node-releases-1.1.58"
+        ];
+      })
+      sources."@babel/preset-modules-0.1.3"
+      sources."@babel/runtime-7.10.3"
+      (sources."@babel/template-7.10.3" // {
+        dependencies = [
+          sources."@babel/code-frame-7.10.3"
+          sources."@babel/highlight-7.10.3"
+        ];
+      })
+      (sources."@babel/traverse-7.10.3" // {
+        dependencies = [
+          sources."@babel/code-frame-7.10.3"
+          sources."@babel/highlight-7.10.3"
+        ];
+      })
+      sources."@babel/types-7.10.3"
+      sources."@fortawesome/fontawesome-common-types-0.2.30"
+      sources."@fortawesome/fontawesome-svg-core-1.2.30"
+      sources."@fortawesome/free-regular-svg-icons-5.14.0"
+      sources."@fortawesome/free-solid-svg-icons-5.14.0"
+      sources."@fortawesome/vue-fontawesome-2.0.0"
+      sources."@hapi/address-2.1.4"
+      sources."@hapi/bourne-1.3.2"
+      sources."@hapi/hoek-8.5.1"
+      sources."@hapi/joi-15.1.1"
+      sources."@hapi/topo-3.1.6"
+      sources."@intervolga/optimize-cssnano-plugin-1.0.6"
+      sources."@mrmlnc/readdir-enhanced-2.2.1"
+      sources."@nodelib/fs.stat-1.1.3"
+      (sources."@soda/friendly-errors-webpack-plugin-1.7.1" // {
+        dependencies = [
+          sources."ansi-regex-2.1.1"
+          sources."ansi-styles-2.2.1"
+          sources."chalk-1.1.3"
+          sources."strip-ansi-3.0.1"
+          sources."supports-color-2.0.0"
+        ];
+      })
+      sources."@soda/get-current-script-1.0.2"
+      sources."@types/anymatch-1.3.1"
+      sources."@types/color-name-1.1.1"
+      sources."@types/eslint-visitor-keys-1.0.0"
+      sources."@types/events-3.0.0"
+      sources."@types/glob-7.1.1"
+      sources."@types/hammerjs-2.0.36"
+      sources."@types/json-schema-7.0.4"
+      sources."@types/marked-1.1.0"
+      sources."@types/minimatch-3.0.3"
+      sources."@types/node-13.9.8"
+      sources."@types/normalize-package-data-2.4.0"
+      sources."@types/q-1.5.4"
+      sources."@types/source-list-map-0.1.2"
+      sources."@types/tapable-1.0.6"
+      sources."@types/uglify-js-3.9.3"
+      sources."@types/webpack-4.41.22"
+      sources."@types/webpack-env-1.15.2"
+      (sources."@types/webpack-sources-1.4.2" // {
+        dependencies = [
+          sources."source-map-0.7.3"
+        ];
+      })
+      (sources."@typescript-eslint/eslint-plugin-2.34.0" // {
+        dependencies = [
+          sources."@typescript-eslint/experimental-utils-2.34.0"
+          sources."@typescript-eslint/typescript-estree-2.34.0"
+          sources."eslint-utils-2.1.0"
+          sources."semver-7.3.2"
+        ];
+      })
+      (sources."@typescript-eslint/experimental-utils-2.34.0" // {
+        dependencies = [
+          sources."eslint-utils-2.1.0"
+        ];
+      })
+      sources."@typescript-eslint/parser-2.34.0"
+      (sources."@typescript-eslint/typescript-estree-2.34.0" // {
+        dependencies = [
+          sources."semver-7.3.2"
+        ];
+      })
+      sources."@vue/babel-helper-vue-jsx-merge-props-1.0.0"
+      sources."@vue/babel-plugin-transform-vue-jsx-1.1.2"
+      (sources."@vue/babel-preset-app-4.4.6" // {
+        dependencies = [
+          sources."core-js-3.6.5"
+          sources."semver-6.3.0"
+        ];
+      })
+      sources."@vue/babel-preset-jsx-1.1.2"
+      sources."@vue/babel-sugar-functional-vue-1.1.2"
+      sources."@vue/babel-sugar-inject-h-1.1.2"
+      sources."@vue/babel-sugar-v-model-1.1.2"
+      sources."@vue/babel-sugar-v-on-1.1.2"
+      sources."@vue/cli-overlay-4.4.6"
+      (sources."@vue/cli-plugin-babel-4.4.6" // {
+        dependencies = [
+          sources."@vue/cli-shared-utils-4.4.6"
+          sources."request-2.88.2"
+          sources."semver-6.3.0"
+          sources."tough-cookie-2.5.0"
+        ];
+      })
+      (sources."@vue/cli-plugin-eslint-4.4.6" // {
+        dependencies = [
+          sources."@vue/cli-shared-utils-4.4.6"
+          sources."ansi-styles-4.2.1"
+          sources."cli-cursor-3.1.0"
+          sources."color-convert-2.0.1"
+          sources."color-name-1.1.4"
+          sources."has-flag-4.0.0"
+          (sources."inquirer-7.2.0" // {
+            dependencies = [
+              sources."chalk-3.0.0"
+            ];
+          })
+          sources."is-fullwidth-code-point-3.0.0"
+          sources."mimic-fn-2.1.0"
+          sources."onetime-5.1.0"
+          sources."request-2.88.2"
+          sources."restore-cursor-3.1.0"
+          sources."run-async-2.4.1"
+          sources."semver-6.3.0"
+          sources."string-width-4.2.0"
+          sources."supports-color-7.1.0"
+          sources."tough-cookie-2.5.0"
+        ];
+      })
+      (sources."@vue/cli-plugin-router-4.4.6" // {
+        dependencies = [
+          sources."@vue/cli-shared-utils-4.4.6"
+          sources."request-2.88.2"
+          sources."semver-6.3.0"
+          sources."tough-cookie-2.5.0"
+        ];
+      })
+      sources."@vue/cli-plugin-typescript-4.4.6"
+      sources."@vue/cli-plugin-vuex-4.4.6"
+      (sources."@vue/cli-service-4.4.6" // {
+        dependencies = [
+          sources."@vue/cli-plugin-router-4.4.6"
+          sources."@vue/cli-plugin-vuex-4.4.6"
+          sources."@vue/cli-shared-utils-4.4.6"
+          sources."acorn-7.3.1"
+          sources."ajv-6.12.2"
+          sources."browserslist-4.12.2"
+          sources."cacache-13.0.1"
+          sources."caniuse-lite-1.0.30001090"
+          sources."cliui-6.0.0"
+          sources."electron-to-chromium-1.3.483"
+          sources."fast-deep-equal-3.1.3"
+          sources."find-cache-dir-3.3.1"
+          sources."find-up-4.1.0"
+          sources."is-fullwidth-code-point-3.0.0"
+          sources."locate-path-5.0.0"
+          sources."make-dir-3.1.0"
+          sources."node-releases-1.1.58"
+          sources."p-limit-2.3.0"
+          sources."p-locate-4.1.0"
+          sources."path-exists-4.0.0"
+          sources."pkg-dir-4.2.0"
+          sources."request-2.88.2"
+          sources."schema-utils-2.7.0"
+          sources."semver-6.3.0"
+          sources."serialize-javascript-3.1.0"
+          sources."ssri-7.1.0"
+          sources."string-width-4.2.0"
+          sources."terser-4.8.0"
+          sources."terser-webpack-plugin-2.3.7"
+          sources."tough-cookie-2.5.0"
+        ];
+      })
+      (sources."@vue/cli-shared-utils-4.4.6" // {
+        dependencies = [
+          sources."request-2.88.2"
+          sources."semver-6.3.0"
+          sources."tough-cookie-2.5.0"
+        ];
+      })
+      (sources."@vue/component-compiler-utils-3.1.2" // {
+        dependencies = [
+          sources."hash-sum-1.0.2"
+          sources."lru-cache-4.1.5"
+          sources."yallist-2.1.2"
+        ];
+      })
+      sources."@vue/eslint-config-typescript-5.0.2"
+      sources."@vue/preload-webpack-plugin-1.1.1"
+      sources."@vue/web-component-wrapper-1.2.0"
+      sources."@webassemblyjs/ast-1.9.0"
+      sources."@webassemblyjs/floating-point-hex-parser-1.9.0"
+      sources."@webassemblyjs/helper-api-error-1.9.0"
+      sources."@webassemblyjs/helper-buffer-1.9.0"
+      sources."@webassemblyjs/helper-code-frame-1.9.0"
+      sources."@webassemblyjs/helper-fsm-1.9.0"
+      sources."@webassemblyjs/helper-module-context-1.9.0"
+      sources."@webassemblyjs/helper-wasm-bytecode-1.9.0"
+      sources."@webassemblyjs/helper-wasm-section-1.9.0"
+      sources."@webassemblyjs/ieee754-1.9.0"
+      sources."@webassemblyjs/leb128-1.9.0"
+      sources."@webassemblyjs/utf8-1.9.0"
+      sources."@webassemblyjs/wasm-edit-1.9.0"
+      sources."@webassemblyjs/wasm-gen-1.9.0"
+      sources."@webassemblyjs/wasm-opt-1.9.0"
+      sources."@webassemblyjs/wasm-parser-1.9.0"
+      sources."@webassemblyjs/wast-parser-1.9.0"
+      sources."@webassemblyjs/wast-printer-1.9.0"
+      sources."@xtuc/ieee754-1.2.0"
+      sources."@xtuc/long-4.2.2"
+      sources."abbrev-1.1.1"
+      sources."accepts-1.3.7"
+      sources."acorn-6.4.1"
+      sources."acorn-jsx-5.1.0"
+      sources."acorn-walk-7.2.0"
+      sources."address-1.1.2"
+      sources."aggregate-error-3.0.1"
+      sources."ajv-6.10.2"
+      sources."ajv-errors-1.0.1"
+      sources."ajv-keywords-3.4.1"
+      sources."alphanum-sort-1.0.2"
+      sources."amdefine-1.0.1"
+      sources."ansi-colors-3.2.4"
+      (sources."ansi-escapes-4.3.0" // {
+        dependencies = [
+          sources."type-fest-0.8.1"
+        ];
+      })
+      sources."ansi-html-0.0.7"
+      sources."ansi-regex-4.1.0"
+      sources."ansi-styles-3.2.1"
+      sources."any-promise-1.3.0"
+      (sources."anymatch-2.0.0" // {
+        dependencies = [
+          sources."normalize-path-2.1.1"
+        ];
+      })
+      sources."aproba-1.2.0"
+      sources."arch-2.1.2"
+      sources."are-we-there-yet-1.1.5"
+      sources."argparse-1.0.10"
+      sources."arr-diff-4.0.0"
+      sources."arr-flatten-1.1.0"
+      sources."arr-union-3.1.0"
+      sources."array-find-index-1.0.2"
+      sources."array-flatten-1.1.1"
+      sources."array-union-1.0.2"
+      sources."array-uniq-1.0.3"
+      sources."array-unique-0.3.2"
+      sources."asn1-0.2.4"
+      sources."asn1.js-4.10.1"
+      (sources."assert-1.5.0" // {
+        dependencies = [
+          sources."inherits-2.0.1"
+          sources."util-0.10.3"
+        ];
+      })
+      sources."assert-plus-1.0.0"
+      sources."assign-symbols-1.0.0"
+      sources."astral-regex-1.0.0"
+      sources."async-2.6.3"
+      sources."async-each-1.0.3"
+      sources."async-foreach-0.1.3"
+      sources."async-limiter-1.0.1"
+      sources."asynckit-0.4.0"
+      sources."atob-2.1.2"
+      (sources."autoprefixer-9.8.4" // {
+        dependencies = [
+          sources."browserslist-4.12.2"
+          sources."caniuse-lite-1.0.30001090"
+          sources."electron-to-chromium-1.3.483"
+          sources."node-releases-1.1.58"
+        ];
+      })
+      sources."aws-sign2-0.7.0"
+      sources."aws4-1.9.0"
+      (sources."babel-code-frame-6.26.0" // {
+        dependencies = [
+          sources."ansi-regex-2.1.1"
+          sources."ansi-styles-2.2.1"
+          sources."chalk-1.1.3"
+          sources."js-tokens-3.0.2"
+          sources."strip-ansi-3.0.1"
+          sources."supports-color-2.0.0"
+        ];
+      })
+      (sources."babel-loader-8.1.0" // {
+        dependencies = [
+          sources."ajv-6.12.2"
+          sources."emojis-list-3.0.0"
+          sources."fast-deep-equal-3.1.3"
+          sources."json5-1.0.1"
+          sources."loader-utils-1.4.0"
+          sources."mkdirp-0.5.5"
+          sources."schema-utils-2.7.0"
+        ];
+      })
+      sources."babel-plugin-dynamic-import-node-2.3.3"
+      sources."balanced-match-1.0.0"
+      (sources."base-0.11.2" // {
+        dependencies = [
+          sources."define-property-1.0.0"
+          sources."is-accessor-descriptor-1.0.0"
+          sources."is-data-descriptor-1.0.0"
+          sources."is-descriptor-1.0.2"
+        ];
+      })
+      sources."base64-js-1.3.1"
+      sources."batch-0.6.1"
+      sources."bcrypt-pbkdf-1.0.2"
+      sources."bfj-6.1.2"
+      sources."big.js-5.2.2"
+      sources."binary-extensions-1.13.1"
+      sources."bindings-1.5.0"
+      sources."block-stream-0.0.9"
+      sources."bluebird-3.7.2"
+      sources."bn.js-4.11.8"
+      (sources."body-parser-1.19.0" // {
+        dependencies = [
+          sources."debug-2.6.9"
+          sources."ms-2.0.0"
+          sources."qs-6.7.0"
+        ];
+      })
+      (sources."bonjour-3.5.0" // {
+        dependencies = [
+          sources."array-flatten-2.1.2"
+        ];
+      })
+      sources."boolbase-1.0.0"
+      sources."brace-expansion-1.1.11"
+      (sources."braces-2.3.2" // {
+        dependencies = [
+          sources."extend-shallow-2.0.1"
+        ];
+      })
+      sources."brorand-1.1.0"
+      sources."browserify-aes-1.2.0"
+      sources."browserify-cipher-1.0.1"
+      sources."browserify-des-1.0.2"
+      sources."browserify-rsa-4.0.1"
+      sources."browserify-sign-4.0.4"
+      sources."browserify-zlib-0.2.0"
+      sources."browserslist-4.11.1"
+      sources."buefy-0.8.15"
+      sources."buffer-4.9.2"
+      sources."buffer-from-1.1.1"
+      sources."buffer-indexof-1.1.1"
+      sources."buffer-json-2.0.0"
+      sources."buffer-xor-1.0.3"
+      sources."builtin-modules-1.1.1"
+      sources."builtin-status-codes-3.0.0"
+      sources."bulma-0.7.5"
+      sources."bytes-3.1.0"
+      sources."cacache-12.0.4"
+      sources."cache-base-1.0.1"
+      (sources."cache-loader-4.1.0" // {
+        dependencies = [
+          sources."find-cache-dir-3.3.1"
+          sources."find-up-4.1.0"
+          sources."locate-path-5.0.0"
+          sources."make-dir-3.0.2"
+          sources."p-locate-4.1.0"
+          sources."path-exists-4.0.0"
+          sources."pkg-dir-4.2.0"
+          sources."semver-6.3.0"
+        ];
+      })
+      sources."call-me-maybe-1.0.1"
+      sources."caller-callsite-2.0.0"
+      sources."caller-path-2.0.0"
+      sources."callsites-2.0.0"
+      sources."camel-case-3.0.0"
+      sources."camelcase-5.3.1"
+      (sources."camelcase-keys-2.1.0" // {
+        dependencies = [
+          sources."camelcase-2.1.1"
+        ];
+      })
+      sources."caniuse-api-3.0.0"
+      sources."caniuse-lite-1.0.30001038"
+      sources."case-sensitive-paths-webpack-plugin-2.3.0"
+      sources."caseless-0.12.0"
+      sources."chalk-2.4.2"
+      sources."chardet-0.7.0"
+      sources."check-types-8.0.3"
+      sources."chokidar-2.1.8"
+      sources."chownr-1.1.4"
+      sources."chrome-trace-event-1.0.2"
+      sources."ci-info-1.6.0"
+      sources."cipher-base-1.0.4"
+      (sources."class-utils-0.3.6" // {
+        dependencies = [
+          sources."define-property-0.2.5"
+        ];
+      })
+      sources."clean-css-4.2.3"
+      sources."clean-stack-2.2.0"
+      sources."cli-cursor-2.1.0"
+      (sources."cli-highlight-2.1.4" // {
+        dependencies = [
+          sources."ansi-styles-4.2.1"
+          sources."chalk-3.0.0"
+          sources."color-convert-2.0.1"
+          sources."color-name-1.1.4"
+          sources."has-flag-4.0.0"
+          sources."supports-color-7.1.0"
+        ];
+      })
+      sources."cli-spinners-2.2.0"
+      sources."cli-table3-0.5.1"
+      sources."cli-width-2.2.0"
+      (sources."clipboardy-2.3.0" // {
+        dependencies = [
+          sources."is-wsl-2.2.0"
+        ];
+      })
+      (sources."cliui-5.0.0" // {
+        dependencies = [
+          sources."emoji-regex-7.0.3"
+          sources."string-width-3.1.0"
+          sources."strip-ansi-5.2.0"
+          sources."wrap-ansi-5.1.0"
+        ];
+      })
+      sources."clone-1.0.4"
+      sources."clone-deep-4.0.1"
+      sources."coa-2.0.2"
+      sources."code-point-at-1.1.0"
+      sources."collection-visit-1.0.0"
+      sources."color-3.1.2"
+      sources."color-convert-1.9.3"
+      sources."color-name-1.1.3"
+      sources."color-string-1.5.3"
+      sources."colorette-1.2.0"
+      sources."colors-1.4.0"
+      sources."combined-stream-1.0.8"
+      sources."commander-2.20.3"
+      sources."commondir-1.0.1"
+      sources."component-emitter-1.3.0"
+      (sources."compressible-2.0.18" // {
+        dependencies = [
+          sources."mime-db-1.44.0"
+        ];
+      })
+      (sources."compression-1.7.4" // {
+        dependencies = [
+          sources."bytes-3.0.0"
+          sources."debug-2.6.9"
+          sources."ms-2.0.0"
+        ];
+      })
+      sources."concat-map-0.0.1"
+      sources."concat-stream-1.6.2"
+      sources."connect-history-api-fallback-1.6.0"
+      sources."console-browserify-1.2.0"
+      sources."console-control-strings-1.1.0"
+      sources."consolidate-0.15.1"
+      sources."constants-browserify-1.0.0"
+      sources."content-disposition-0.5.3"
+      sources."content-type-1.0.4"
+      sources."convert-source-map-1.7.0"
+      sources."cookie-0.4.0"
+      sources."cookie-signature-1.0.6"
+      sources."copy-concurrently-1.0.5"
+      sources."copy-descriptor-0.1.1"
+      (sources."copy-webpack-plugin-5.1.1" // {
+        dependencies = [
+          sources."globby-7.1.1"
+          sources."ignore-3.3.10"
+          sources."pify-3.0.0"
+          sources."schema-utils-1.0.0"
+          sources."slash-1.0.0"
+        ];
+      })
+      sources."core-js-3.6.5"
+      (sources."core-js-compat-3.6.5" // {
+        dependencies = [
+          sources."semver-7.0.0"
+        ];
+      })
+      sources."core-util-is-1.0.2"
+      (sources."cosmiconfig-5.2.1" // {
+        dependencies = [
+          sources."parse-json-4.0.0"
+        ];
+      })
+      sources."create-ecdh-4.0.3"
+      sources."create-hash-1.2.0"
+      sources."create-hmac-1.1.7"
+      sources."cross-spawn-6.0.5"
+      sources."crypto-browserify-3.12.0"
+      sources."css-color-names-0.0.4"
+      sources."css-declaration-sorter-4.0.1"
+      (sources."css-loader-3.6.0" // {
+        dependencies = [
+          sources."ajv-6.12.2"
+          sources."fast-deep-equal-3.1.3"
+          sources."schema-utils-2.7.0"
+          sources."semver-6.3.0"
+        ];
+      })
+      sources."css-select-2.1.0"
+      sources."css-select-base-adapter-0.1.1"
+      sources."css-tree-1.0.0-alpha.37"
+      sources."css-what-3.3.0"
+      sources."cssesc-3.0.0"
+      sources."cssnano-4.1.10"
+      sources."cssnano-preset-default-4.0.7"
+      sources."cssnano-util-get-arguments-4.0.0"
+      sources."cssnano-util-get-match-4.0.0"
+      sources."cssnano-util-raw-cache-4.0.1"
+      sources."cssnano-util-same-parent-4.0.1"
+      (sources."csso-4.0.3" // {
+        dependencies = [
+          sources."css-tree-1.0.0-alpha.39"
+          sources."mdn-data-2.0.6"
+        ];
+      })
+      sources."currently-unhandled-0.4.1"
+      sources."cyclist-1.0.1"
+      sources."dashdash-1.14.1"
+      sources."de-indent-1.0.2"
+      sources."debug-4.1.1"
+      sources."decamelize-1.2.0"
+      sources."decode-uri-component-0.2.0"
+      sources."deep-equal-1.1.1"
+      sources."deep-is-0.1.3"
+      sources."deepmerge-1.5.2"
+      (sources."default-gateway-5.0.5" // {
+        dependencies = [
+          sources."cross-spawn-7.0.3"
+          sources."execa-3.4.0"
+          sources."get-stream-5.1.0"
+          sources."is-stream-2.0.0"
+          sources."mimic-fn-2.1.0"
+          sources."npm-run-path-4.0.1"
+          sources."onetime-5.1.0"
+          sources."p-finally-2.0.1"
+          sources."path-key-3.1.1"
+          sources."shebang-command-2.0.0"
+          sources."shebang-regex-3.0.0"
+          sources."which-2.0.2"
+        ];
+      })
+      sources."defaults-1.0.3"
+      sources."define-properties-1.1.3"
+      (sources."define-property-2.0.2" // {
+        dependencies = [
+          sources."is-accessor-descriptor-1.0.0"
+          sources."is-data-descriptor-1.0.0"
+          sources."is-descriptor-1.0.2"
+        ];
+      })
+      (sources."del-4.1.1" // {
+        dependencies = [
+          (sources."globby-6.1.0" // {
+            dependencies = [
+              sources."pify-2.3.0"
+            ];
+          })
+          sources."p-map-2.1.0"
+        ];
+      })
+      sources."delayed-stream-1.0.0"
+      sources."delegates-1.0.0"
+      sources."depd-1.1.2"
+      sources."des.js-1.0.1"
+      sources."destroy-1.0.4"
+      sources."detect-node-2.0.4"
+      sources."diff-4.0.2"
+      sources."diffie-hellman-5.0.3"
+      sources."dir-glob-2.2.2"
+      sources."dns-equal-1.0.0"
+      sources."dns-packet-1.3.1"
+      sources."dns-txt-2.0.2"
+      sources."doctrine-3.0.0"
+      sources."dom-converter-0.2.0"
+      (sources."dom-serializer-0.2.2" // {
+        dependencies = [
+          sources."domelementtype-2.0.1"
+        ];
+      })
+      sources."domain-browser-1.2.0"
+      sources."domelementtype-1.3.1"
+      sources."domhandler-2.4.2"
+      sources."domutils-1.7.0"
+      sources."dot-object-1.9.0"
+      sources."dot-prop-5.2.0"
+      sources."dotenv-8.2.0"
+      sources."dotenv-expand-5.1.0"
+      sources."duplexer-0.1.1"
+      sources."duplexify-3.7.1"
+      sources."easy-stack-1.0.0"
+      sources."ecc-jsbn-0.1.2"
+      sources."ee-first-1.1.1"
+      sources."ejs-2.7.4"
+      sources."electron-to-chromium-1.3.393"
+      sources."elliptic-6.5.2"
+      sources."emoji-regex-8.0.0"
+      sources."emojis-list-2.1.0"
+      sources."encodeurl-1.0.2"
+      sources."end-of-stream-1.4.4"
+      (sources."enhanced-resolve-4.1.1" // {
+        dependencies = [
+          sources."memory-fs-0.5.0"
+        ];
+      })
+      sources."entities-2.0.3"
+      sources."errno-0.1.7"
+      sources."error-ex-1.3.2"
+      sources."error-stack-parser-2.0.6"
+      sources."es-abstract-1.17.0-next.1"
+      sources."es-to-primitive-1.2.1"
+      sources."escalade-3.0.1"
+      sources."escape-html-1.0.3"
+      sources."escape-string-regexp-1.0.5"
+      (sources."eslint-6.8.0" // {
+        dependencies = [
+          sources."glob-parent-5.1.0"
+          sources."globals-12.3.0"
+          sources."import-fresh-3.2.1"
+          sources."regexpp-2.0.1"
+          sources."resolve-from-4.0.0"
+          sources."semver-6.3.0"
+          sources."strip-ansi-5.2.0"
+          sources."type-fest-0.8.1"
+        ];
+      })
+      (sources."eslint-config-prettier-6.11.0" // {
+        dependencies = [
+          sources."get-stdin-6.0.0"
+        ];
+      })
+      sources."eslint-loader-2.2.1"
+      sources."eslint-plugin-prettier-3.1.4"
+      sources."eslint-plugin-vue-6.2.2"
+      sources."eslint-scope-5.0.0"
+      sources."eslint-utils-1.4.3"
+      sources."eslint-visitor-keys-1.1.0"
+      sources."esm-3.2.25"
+      (sources."espree-6.1.2" // {
+        dependencies = [
+          sources."acorn-7.1.1"
+        ];
+      })
+      sources."esprima-4.0.1"
+      sources."esquery-1.0.1"
+      sources."esrecurse-4.2.1"
+      sources."estraverse-4.3.0"
+      sources."esutils-2.0.3"
+      sources."etag-1.8.1"
+      sources."event-pubsub-4.3.0"
+      sources."eventemitter3-4.0.4"
+      sources."events-3.1.0"
+      sources."eventsource-1.0.7"
+      sources."evp_bytestokey-1.0.3"
+      sources."execa-1.0.0"
+      (sources."expand-brackets-2.1.4" // {
+        dependencies = [
+          sources."debug-2.6.9"
+          sources."define-property-0.2.5"
+          sources."extend-shallow-2.0.1"
+          sources."ms-2.0.0"
+        ];
+      })
+      (sources."express-4.17.1" // {
+        dependencies = [
+          sources."debug-2.6.9"
+          sources."ms-2.0.0"
+          sources."qs-6.7.0"
+        ];
+      })
+      sources."extend-3.0.2"
+      (sources."extend-shallow-3.0.2" // {
+        dependencies = [
+          sources."is-extendable-1.0.1"
+        ];
+      })
+      sources."external-editor-3.1.0"
+      (sources."extglob-2.0.4" // {
+        dependencies = [
+          sources."define-property-1.0.0"
+          sources."extend-shallow-2.0.1"
+          sources."is-accessor-descriptor-1.0.0"
+          sources."is-data-descriptor-1.0.0"
+          sources."is-descriptor-1.0.2"
+        ];
+      })
+      sources."extsprintf-1.3.0"
+      sources."fast-deep-equal-2.0.1"
+      sources."fast-diff-1.2.0"
+      sources."fast-glob-2.2.7"
+      sources."fast-json-stable-stringify-2.1.0"
+      sources."fast-levenshtein-2.0.6"
+      sources."faye-websocket-0.10.0"
+      sources."figgy-pudding-3.5.2"
+      sources."figures-3.1.0"
+      sources."file-entry-cache-5.0.1"
+      sources."file-loader-4.3.0"
+      sources."file-uri-to-path-1.0.0"
+      sources."filesize-3.6.1"
+      (sources."fill-range-4.0.0" // {
+        dependencies = [
+          sources."extend-shallow-2.0.1"
+        ];
+      })
+      (sources."finalhandler-1.1.2" // {
+        dependencies = [
+          sources."debug-2.6.9"
+          sources."ms-2.0.0"
+        ];
+      })
+      sources."find-cache-dir-2.1.0"
+      sources."find-up-3.0.0"
+      sources."flat-5.0.2"
+      (sources."flat-cache-2.0.1" // {
+        dependencies = [
+          sources."rimraf-2.6.3"
+        ];
+      })
+      sources."flatted-2.0.1"
+      sources."flush-write-stream-1.1.1"
+      sources."follow-redirects-1.12.1"
+      sources."for-in-1.0.2"
+      sources."forever-agent-0.6.1"
+      (sources."fork-ts-checker-webpack-plugin-3.1.1" // {
+        dependencies = [
+          sources."anymatch-3.1.1"
+          sources."binary-extensions-2.1.0"
+          sources."braces-3.0.2"
+          sources."chokidar-3.4.0"
+          sources."fill-range-7.0.1"
+          sources."fsevents-2.1.3"
+          sources."glob-parent-5.1.1"
+          sources."is-binary-path-2.1.0"
+          sources."is-number-7.0.0"
+          sources."readdirp-3.4.0"
+          sources."to-regex-range-5.0.1"
+        ];
+      })
+      sources."form-data-2.3.3"
+      sources."forwarded-0.1.2"
+      sources."fragment-cache-0.2.1"
+      sources."fresh-0.5.2"
+      sources."from2-2.3.0"
+      sources."fs-extra-7.0.1"
+      sources."fs-minipass-2.1.0"
+      sources."fs-write-stream-atomic-1.0.10"
+      sources."fs.realpath-1.0.0"
+      sources."fsevents-1.2.12"
+      sources."fstream-1.0.12"
+      sources."function-bind-1.1.1"
+      sources."functional-red-black-tree-1.0.1"
+      (sources."gauge-2.7.4" // {
+        dependencies = [
+          sources."ansi-regex-2.1.1"
+          sources."is-fullwidth-code-point-1.0.0"
+          sources."string-width-1.0.2"
+          sources."strip-ansi-3.0.1"
+        ];
+      })
+      sources."gaze-1.1.3"
+      sources."gensync-1.0.0-beta.1"
+      sources."get-caller-file-2.0.5"
+      sources."get-stdin-4.0.1"
+      sources."get-stream-4.1.0"
+      sources."get-value-2.0.6"
+      sources."getpass-0.1.7"
+      sources."glob-7.1.6"
+      (sources."glob-parent-3.1.0" // {
+        dependencies = [
+          sources."is-glob-3.1.0"
+        ];
+      })
+      sources."glob-to-regexp-0.3.0"
+      sources."globals-11.12.0"
+      sources."globby-9.2.0"
+      sources."globule-1.3.2"
+      sources."graceful-fs-4.2.3"
+      sources."gzip-size-5.1.1"
+      sources."hammerjs-2.0.8"
+      sources."handle-thing-2.0.1"
+      sources."har-schema-2.0.0"
+      sources."har-validator-5.1.3"
+      sources."has-1.0.3"
+      (sources."has-ansi-2.0.0" // {
+        dependencies = [
+          sources."ansi-regex-2.1.1"
+        ];
+      })
+      sources."has-flag-3.0.0"
+      sources."has-symbols-1.0.1"
+      sources."has-unicode-2.0.1"
+      sources."has-value-1.0.0"
+      (sources."has-values-1.0.0" // {
+        dependencies = [
+          sources."kind-of-4.0.0"
+        ];
+      })
+      sources."hash-base-3.0.4"
+      sources."hash-sum-2.0.0"
+      sources."hash.js-1.1.7"
+      sources."he-1.2.0"
+      sources."hex-color-regex-1.1.0"
+      sources."highlight.js-9.18.1"
+      sources."hmac-drbg-1.0.1"
+      sources."hoopy-0.1.4"
+      sources."hosted-git-info-2.8.5"
+      sources."hpack.js-2.1.6"
+      sources."hsl-regex-1.0.0"
+      sources."hsla-regex-1.0.0"
+      sources."html-comment-regex-1.1.2"
+      sources."html-entities-1.3.1"
+      (sources."html-minifier-3.5.21" // {
+        dependencies = [
+          sources."commander-2.17.1"
+        ];
+      })
+      sources."html-tags-2.0.0"
+      (sources."html-webpack-plugin-3.2.0" // {
+        dependencies = [
+          sources."big.js-3.2.0"
+          sources."json5-0.5.1"
+          sources."loader-utils-0.2.17"
+          sources."util.promisify-1.0.0"
+        ];
+      })
+      (sources."htmlparser2-3.10.1" // {
+        dependencies = [
+          sources."entities-1.1.2"
+          sources."readable-stream-3.6.0"
+        ];
+      })
+      sources."http-deceiver-1.2.7"
+      (sources."http-errors-1.7.2" // {
+        dependencies = [
+          sources."inherits-2.0.3"
+        ];
+      })
+      sources."http-proxy-1.18.1"
+      sources."http-proxy-middleware-0.19.1"
+      sources."http-signature-1.2.0"
+      sources."https-browserify-1.0.0"
+      sources."human-signals-1.1.1"
+      sources."iconv-lite-0.4.24"
+      sources."icss-utils-4.1.1"
+      sources."ieee754-1.1.13"
+      sources."iferr-0.1.5"
+      sources."ignore-4.0.6"
+      sources."import-cwd-2.1.0"
+      sources."import-fresh-2.0.0"
+      sources."import-from-2.1.0"
+      sources."import-local-2.0.0"
+      sources."imurmurhash-0.1.4"
+      sources."in-publish-2.0.1"
+      sources."indent-string-4.0.0"
+      sources."indexes-of-1.0.1"
+      sources."infer-owner-1.0.4"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.4"
+      (sources."inquirer-7.0.1" // {
+        dependencies = [
+          sources."ansi-regex-5.0.0"
+          sources."cli-cursor-3.1.0"
+          sources."is-fullwidth-code-point-3.0.0"
+          sources."mimic-fn-2.1.0"
+          sources."onetime-5.1.0"
+          sources."restore-cursor-3.1.0"
+          (sources."string-width-4.2.0" // {
+            dependencies = [
+              sources."strip-ansi-6.0.0"
+            ];
+          })
+          (sources."strip-ansi-5.2.0" // {
+            dependencies = [
+              sources."ansi-regex-4.1.0"
+            ];
+          })
+        ];
+      })
+      (sources."internal-ip-4.3.0" // {
+        dependencies = [
+          sources."default-gateway-4.2.0"
+        ];
+      })
+      sources."invariant-2.2.4"
+      sources."ip-1.1.5"
+      sources."ip-regex-2.1.0"
+      sources."ipaddr.js-1.9.1"
+      sources."is-absolute-url-2.1.0"
+      (sources."is-accessor-descriptor-0.1.6" // {
+        dependencies = [
+          sources."kind-of-3.2.2"
+        ];
+      })
+      sources."is-arguments-1.0.4"
+      sources."is-arrayish-0.2.1"
+      sources."is-binary-path-1.0.1"
+      sources."is-buffer-1.1.6"
+      sources."is-callable-1.1.5"
+      sources."is-ci-1.2.1"
+      sources."is-color-stop-1.1.0"
+      (sources."is-data-descriptor-0.1.4" // {
+        dependencies = [
+          sources."kind-of-3.2.2"
+        ];
+      })
+      sources."is-date-object-1.0.2"
+      (sources."is-descriptor-0.1.6" // {
+        dependencies = [
+          sources."kind-of-5.1.0"
+        ];
+      })
+      sources."is-directory-0.3.1"
+      sources."is-docker-2.0.0"
+      sources."is-extendable-0.1.1"
+      sources."is-extglob-2.1.1"
+      sources."is-finite-1.1.0"
+      sources."is-fullwidth-code-point-2.0.0"
+      sources."is-glob-4.0.1"
+      (sources."is-number-3.0.0" // {
+        dependencies = [
+          sources."kind-of-3.2.2"
+        ];
+      })
+      sources."is-obj-2.0.0"
+      sources."is-path-cwd-2.2.0"
+      sources."is-path-in-cwd-2.1.0"
+      sources."is-path-inside-2.1.0"
+      sources."is-plain-obj-1.1.0"
+      sources."is-plain-object-2.0.4"
+      sources."is-promise-2.1.0"
+      sources."is-regex-1.0.5"
+      sources."is-resolvable-1.1.0"
+      sources."is-stream-1.1.0"
+      sources."is-svg-3.0.0"
+      sources."is-symbol-1.0.3"
+      sources."is-typedarray-1.0.0"
+      sources."is-utf8-0.2.1"
+      sources."is-valid-glob-1.0.0"
+      sources."is-windows-1.0.2"
+      sources."is-wsl-1.1.0"
+      sources."isarray-1.0.0"
+      sources."isexe-2.0.0"
+      sources."isobject-3.0.1"
+      sources."isstream-0.1.2"
+      sources."javascript-stringify-2.0.1"
+      (sources."jest-worker-25.5.0" // {
+        dependencies = [
+          sources."has-flag-4.0.0"
+          sources."supports-color-7.1.0"
+        ];
+      })
+      sources."js-base64-2.6.2"
+      sources."js-message-1.0.5"
+      sources."js-queue-2.0.0"
+      sources."js-tokens-4.0.0"
+      sources."js-yaml-3.13.1"
+      sources."jsbn-0.1.1"
+      sources."jsesc-2.5.2"
+      sources."json-parse-better-errors-1.0.2"
+      sources."json-schema-0.2.3"
+      sources."json-schema-traverse-0.4.1"
+      sources."json-stable-stringify-without-jsonify-1.0.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."json3-3.3.3"
+      sources."json5-2.1.3"
+      sources."jsonfile-4.0.0"
+      sources."jsprim-1.4.1"
+      sources."killable-1.0.1"
+      sources."kind-of-6.0.3"
+      sources."launch-editor-2.2.1"
+      sources."launch-editor-middleware-2.2.1"
+      sources."leven-3.1.0"
+      sources."levenary-1.1.1"
+      sources."levn-0.3.0"
+      sources."lines-and-columns-1.1.6"
+      (sources."load-json-file-1.1.0" // {
+        dependencies = [
+          sources."parse-json-2.2.0"
+          sources."pify-2.3.0"
+        ];
+      })
+      (sources."loader-fs-cache-1.0.3" // {
+        dependencies = [
+          sources."find-cache-dir-0.1.1"
+          sources."find-up-1.1.2"
+          sources."path-exists-2.1.0"
+          sources."pkg-dir-1.0.0"
+        ];
+      })
+      sources."loader-runner-2.4.0"
+      (sources."loader-utils-1.2.3" // {
+        dependencies = [
+          sources."json5-1.0.1"
+        ];
+      })
+      sources."locate-path-3.0.0"
+      sources."lodash-4.17.15"
+      sources."lodash.defaultsdeep-4.6.1"
+      sources."lodash.kebabcase-4.1.1"
+      sources."lodash.mapvalues-4.6.0"
+      sources."lodash.memoize-4.1.2"
+      sources."lodash.transform-4.6.0"
+      sources."lodash.uniq-4.5.0"
+      sources."log-symbols-2.2.0"
+      sources."loglevel-1.6.8"
+      sources."loose-envify-1.4.0"
+      sources."loud-rejection-1.6.0"
+      sources."lower-case-1.1.4"
+      sources."lru-cache-5.1.1"
+      sources."make-dir-2.1.0"
+      sources."map-cache-0.2.2"
+      sources."map-obj-1.0.1"
+      sources."map-visit-1.0.0"
+      sources."marked-1.1.1"
+      sources."md5.js-1.3.5"
+      sources."mdn-data-2.0.4"
+      sources."media-typer-0.3.0"
+      sources."memory-fs-0.4.1"
+      sources."meow-3.7.0"
+      sources."merge-descriptors-1.0.1"
+      sources."merge-source-map-1.1.0"
+      sources."merge-stream-2.0.0"
+      sources."merge2-1.3.0"
+      sources."methods-1.1.2"
+      sources."microevent.ts-0.1.1"
+      sources."micromatch-3.1.10"
+      sources."miller-rabin-4.0.1"
+      sources."mime-2.4.6"
+      sources."mime-db-1.42.0"
+      sources."mime-types-2.1.25"
+      sources."mimic-fn-1.2.0"
+      (sources."mini-css-extract-plugin-0.9.0" // {
+        dependencies = [
+          sources."normalize-url-1.9.1"
+          sources."schema-utils-1.0.0"
+        ];
+      })
+      sources."minimalistic-assert-1.0.1"
+      sources."minimalistic-crypto-utils-1.0.1"
+      sources."minimatch-3.0.4"
+      sources."minimist-1.2.5"
+      (sources."minipass-3.1.3" // {
+        dependencies = [
+          sources."yallist-4.0.0"
+        ];
+      })
+      sources."minipass-collect-1.0.2"
+      sources."minipass-flush-1.0.5"
+      sources."minipass-pipeline-1.2.3"
+      sources."mississippi-3.0.0"
+      (sources."mixin-deep-1.3.2" // {
+        dependencies = [
+          sources."is-extendable-1.0.1"
+        ];
+      })
+      (sources."mkdirp-0.5.1" // {
+        dependencies = [
+          sources."minimist-0.0.8"
+        ];
+      })
+      sources."move-concurrently-1.0.1"
+      sources."ms-2.1.2"
+      sources."multicast-dns-6.2.3"
+      sources."multicast-dns-service-types-1.1.0"
+      sources."mute-stream-0.0.8"
+      sources."mz-2.7.0"
+      sources."nan-2.14.0"
+      sources."nanomatch-1.2.13"
+      sources."natural-compare-1.4.0"
+      sources."negotiator-0.6.2"
+      sources."neo-async-2.6.1"
+      sources."nice-try-1.0.5"
+      sources."no-case-2.3.2"
+      sources."node-forge-0.9.0"
+      (sources."node-gyp-3.8.0" // {
+        dependencies = [
+          sources."semver-5.3.0"
+        ];
+      })
+      sources."node-ipc-9.1.1"
+      (sources."node-libs-browser-2.2.1" // {
+        dependencies = [
+          sources."punycode-1.4.1"
+        ];
+      })
+      sources."node-releases-1.1.53"
+      (sources."node-sass-4.14.1" // {
+        dependencies = [
+          sources."ansi-regex-2.1.1"
+          sources."ansi-styles-2.2.1"
+          sources."chalk-1.1.3"
+          sources."cross-spawn-3.0.1"
+          sources."lru-cache-4.1.5"
+          sources."strip-ansi-3.0.1"
+          sources."supports-color-2.0.0"
+          sources."yallist-2.1.2"
+        ];
+      })
+      sources."nopt-3.0.6"
+      sources."normalize-package-data-2.5.0"
+      sources."normalize-path-3.0.0"
+      sources."normalize-range-0.1.2"
+      sources."normalize-url-3.3.0"
+      sources."npm-run-path-2.0.2"
+      sources."npmlog-4.1.2"
+      sources."nth-check-1.0.2"
+      sources."num2fraction-1.2.2"
+      sources."number-is-nan-1.0.1"
+      sources."oauth-sign-0.9.0"
+      sources."object-assign-4.1.1"
+      (sources."object-copy-0.1.0" // {
+        dependencies = [
+          sources."define-property-0.2.5"
+          sources."kind-of-3.2.2"
+        ];
+      })
+      sources."object-hash-1.3.1"
+      sources."object-inspect-1.7.0"
+      (sources."object-is-1.1.2" // {
+        dependencies = [
+          sources."es-abstract-1.17.6"
+          sources."is-callable-1.2.0"
+          sources."is-regex-1.1.0"
+        ];
+      })
+      sources."object-keys-1.1.1"
+      sources."object-visit-1.0.1"
+      sources."object.assign-4.1.0"
+      sources."object.getownpropertydescriptors-2.1.0"
+      sources."object.pick-1.3.0"
+      sources."object.values-1.1.1"
+      sources."obuf-1.1.2"
+      sources."on-finished-2.3.0"
+      sources."on-headers-1.0.2"
+      sources."once-1.4.0"
+      sources."onetime-2.0.1"
+      sources."open-6.4.0"
+      sources."opener-1.5.1"
+      sources."opn-5.5.0"
+      sources."optionator-0.8.3"
+      (sources."ora-3.4.0" // {
+        dependencies = [
+          sources."strip-ansi-5.2.0"
+        ];
+      })
+      sources."original-1.0.2"
+      sources."os-browserify-0.3.0"
+      sources."os-homedir-1.0.2"
+      sources."os-tmpdir-1.0.2"
+      sources."osenv-0.1.5"
+      sources."p-finally-1.0.0"
+      sources."p-limit-2.2.1"
+      sources."p-locate-3.0.0"
+      sources."p-map-3.0.0"
+      sources."p-retry-3.0.1"
+      sources."p-try-2.2.0"
+      sources."pako-1.0.11"
+      sources."parallel-transform-1.2.0"
+      sources."param-case-2.1.1"
+      (sources."parent-module-1.0.1" // {
+        dependencies = [
+          sources."callsites-3.1.0"
+        ];
+      })
+      sources."parse-asn1-5.1.5"
+      sources."parse-json-5.0.0"
+      sources."parse5-5.1.1"
+      sources."parse5-htmlparser2-tree-adapter-5.1.1"
+      sources."parseurl-1.3.3"
+      sources."pascalcase-0.1.1"
+      sources."path-browserify-0.0.1"
+      sources."path-dirname-1.0.2"
+      sources."path-exists-3.0.0"
+      sources."path-is-absolute-1.0.1"
+      sources."path-is-inside-1.0.2"
+      sources."path-key-2.0.1"
+      sources."path-parse-1.0.6"
+      sources."path-to-regexp-0.1.7"
+      (sources."path-type-3.0.0" // {
+        dependencies = [
+          sources."pify-3.0.0"
+        ];
+      })
+      sources."pbkdf2-3.0.17"
+      sources."performance-now-2.1.0"
+      sources."picomatch-2.2.2"
+      sources."pify-4.0.1"
+      sources."pinkie-2.0.4"
+      sources."pinkie-promise-2.0.1"
+      sources."pkg-dir-3.0.0"
+      (sources."pkg-up-2.0.0" // {
+        dependencies = [
+          sources."find-up-2.1.0"
+          sources."locate-path-2.0.0"
+          sources."p-limit-1.3.0"
+          sources."p-locate-2.0.0"
+          sources."p-try-1.0.0"
+        ];
+      })
+      sources."pnp-webpack-plugin-1.6.4"
+      (sources."portfinder-1.0.26" // {
+        dependencies = [
+          sources."debug-3.2.6"
+        ];
+      })
+      sources."posix-character-classes-0.1.1"
+      (sources."postcss-7.0.32" // {
+        dependencies = [
+          sources."supports-color-6.1.0"
+        ];
+      })
+      sources."postcss-calc-7.0.2"
+      (sources."postcss-colormin-4.0.3" // {
+        dependencies = [
+          sources."postcss-value-parser-3.3.1"
+        ];
+      })
+      (sources."postcss-convert-values-4.0.1" // {
+        dependencies = [
+          sources."postcss-value-parser-3.3.1"
+        ];
+      })
+      sources."postcss-discard-comments-4.0.2"
+      sources."postcss-discard-duplicates-4.0.2"
+      sources."postcss-discard-empty-4.0.1"
+      sources."postcss-discard-overridden-4.0.1"
+      sources."postcss-load-config-2.1.0"
+      (sources."postcss-loader-3.0.0" // {
+        dependencies = [
+          sources."schema-utils-1.0.0"
+        ];
+      })
+      (sources."postcss-merge-longhand-4.0.11" // {
+        dependencies = [
+          sources."postcss-value-parser-3.3.1"
+        ];
+      })
+      (sources."postcss-merge-rules-4.0.3" // {
+        dependencies = [
+          sources."postcss-selector-parser-3.1.2"
+        ];
+      })
+      (sources."postcss-minify-font-values-4.0.2" // {
+        dependencies = [
+          sources."postcss-value-parser-3.3.1"
+        ];
+      })
+      (sources."postcss-minify-gradients-4.0.2" // {
+        dependencies = [
+          sources."postcss-value-parser-3.3.1"
+        ];
+      })
+      (sources."postcss-minify-params-4.0.2" // {
+        dependencies = [
+          sources."postcss-value-parser-3.3.1"
+        ];
+      })
+      (sources."postcss-minify-selectors-4.0.2" // {
+        dependencies = [
+          sources."postcss-selector-parser-3.1.2"
+        ];
+      })
+      sources."postcss-modules-extract-imports-2.0.0"
+      sources."postcss-modules-local-by-default-3.0.2"
+      sources."postcss-modules-scope-2.2.0"
+      sources."postcss-modules-values-3.0.0"
+      sources."postcss-normalize-charset-4.0.1"
+      (sources."postcss-normalize-display-values-4.0.2" // {
+        dependencies = [
+          sources."postcss-value-parser-3.3.1"
+        ];
+      })
+      (sources."postcss-normalize-positions-4.0.2" // {
+        dependencies = [
+          sources."postcss-value-parser-3.3.1"
+        ];
+      })
+      (sources."postcss-normalize-repeat-style-4.0.2" // {
+        dependencies = [
+          sources."postcss-value-parser-3.3.1"
+        ];
+      })
+      (sources."postcss-normalize-string-4.0.2" // {
+        dependencies = [
+          sources."postcss-value-parser-3.3.1"
+        ];
+      })
+      (sources."postcss-normalize-timing-functions-4.0.2" // {
+        dependencies = [
+          sources."postcss-value-parser-3.3.1"
+        ];
+      })
+      (sources."postcss-normalize-unicode-4.0.1" // {
+        dependencies = [
+          sources."postcss-value-parser-3.3.1"
+        ];
+      })
+      (sources."postcss-normalize-url-4.0.1" // {
+        dependencies = [
+          sources."postcss-value-parser-3.3.1"
+        ];
+      })
+      (sources."postcss-normalize-whitespace-4.0.2" // {
+        dependencies = [
+          sources."postcss-value-parser-3.3.1"
+        ];
+      })
+      (sources."postcss-ordered-values-4.1.2" // {
+        dependencies = [
+          sources."postcss-value-parser-3.3.1"
+        ];
+      })
+      sources."postcss-reduce-initial-4.0.3"
+      (sources."postcss-reduce-transforms-4.0.2" // {
+        dependencies = [
+          sources."postcss-value-parser-3.3.1"
+        ];
+      })
+      sources."postcss-selector-parser-6.0.2"
+      (sources."postcss-svgo-4.0.2" // {
+        dependencies = [
+          sources."postcss-value-parser-3.3.1"
+        ];
+      })
+      sources."postcss-unique-selectors-4.0.1"
+      sources."postcss-value-parser-4.1.0"
+      sources."prelude-ls-1.1.2"
+      sources."prepend-http-1.0.4"
+      sources."prettier-1.19.1"
+      sources."prettier-linter-helpers-1.0.0"
+      sources."pretty-error-2.1.1"
+      sources."private-0.1.8"
+      sources."process-0.11.10"
+      sources."process-nextick-args-2.0.1"
+      sources."progress-2.0.3"
+      sources."promise-inflight-1.0.1"
+      sources."proxy-addr-2.0.6"
+      sources."prr-1.0.1"
+      sources."pseudomap-1.0.2"
+      sources."psl-1.6.0"
+      sources."public-encrypt-4.0.3"
+      sources."pump-3.0.0"
+      (sources."pumpify-1.5.1" // {
+        dependencies = [
+          sources."pump-2.0.1"
+        ];
+      })
+      sources."punycode-2.1.1"
+      sources."q-1.5.1"
+      sources."qs-6.5.2"
+      sources."query-string-4.3.4"
+      sources."querystring-0.2.0"
+      sources."querystring-es3-0.2.1"
+      sources."querystringify-2.1.1"
+      sources."randombytes-2.1.0"
+      sources."randomfill-1.0.4"
+      sources."range-parser-1.2.1"
+      sources."raw-body-2.4.0"
+      sources."read-pkg-5.2.0"
+      (sources."read-pkg-up-1.0.1" // {
+        dependencies = [
+          sources."find-up-1.1.2"
+          sources."path-exists-2.1.0"
+          sources."path-type-1.1.0"
+          sources."pify-2.3.0"
+          sources."read-pkg-1.1.0"
+        ];
+      })
+      sources."readable-stream-2.3.6"
+      sources."readdirp-2.2.1"
+      (sources."redent-1.0.0" // {
+        dependencies = [
+          sources."indent-string-2.1.0"
+          sources."strip-indent-1.0.1"
+        ];
+      })
+      sources."regenerate-1.4.1"
+      sources."regenerate-unicode-properties-8.2.0"
+      sources."regenerator-runtime-0.13.5"
+      sources."regenerator-transform-0.14.4"
+      sources."regex-not-1.0.2"
+      sources."regexp.prototype.flags-1.3.0"
+      sources."regexpp-3.1.0"
+      sources."regexpu-core-4.7.0"
+      sources."regjsgen-0.5.2"
+      (sources."regjsparser-0.6.4" // {
+        dependencies = [
+          sources."jsesc-0.5.0"
+        ];
+      })
+      sources."relateurl-0.2.7"
+      sources."remove-trailing-separator-1.1.0"
+      (sources."renderkid-2.0.3" // {
+        dependencies = [
+          sources."ansi-regex-2.1.1"
+          sources."css-select-1.2.0"
+          sources."css-what-2.1.3"
+          sources."domutils-1.5.1"
+          sources."strip-ansi-3.0.1"
+        ];
+      })
+      sources."repeat-element-1.1.3"
+      sources."repeat-string-1.6.1"
+      sources."repeating-2.0.1"
+      sources."request-2.88.2"
+      sources."require-directory-2.1.1"
+      sources."require-main-filename-2.0.0"
+      sources."requires-port-1.0.0"
+      sources."resize-observer-polyfill-1.5.1"
+      sources."resolve-1.14.1"
+      sources."resolve-cwd-2.0.0"
+      sources."resolve-from-3.0.0"
+      sources."resolve-url-0.2.1"
+      sources."restore-cursor-2.0.0"
+      sources."ret-0.1.15"
+      sources."retry-0.12.0"
+      sources."rgb-regex-1.0.1"
+      sources."rgba-regex-1.0.0"
+      sources."rimraf-2.7.1"
+      sources."ripemd160-2.0.2"
+      sources."run-async-2.3.0"
+      sources."run-queue-1.0.3"
+      sources."rxjs-6.5.3"
+      sources."safe-buffer-5.1.2"
+      sources."safe-regex-1.1.0"
+      sources."safer-buffer-2.1.2"
+      (sources."sass-graph-2.2.5" // {
+        dependencies = [
+          sources."emoji-regex-7.0.3"
+          sources."string-width-3.1.0"
+          sources."strip-ansi-5.2.0"
+          sources."yargs-13.3.2"
+          sources."yargs-parser-13.1.2"
+        ];
+      })
+      (sources."sass-loader-8.0.2" // {
+        dependencies = [
+          sources."semver-6.3.0"
+        ];
+      })
+      sources."sax-1.2.4"
+      sources."schema-utils-2.6.1"
+      (sources."scss-tokenizer-0.2.3" // {
+        dependencies = [
+          sources."source-map-0.4.4"
+        ];
+      })
+      sources."select-hose-2.0.0"
+      sources."selfsigned-1.10.7"
+      sources."semver-5.7.1"
+      (sources."send-0.17.1" // {
+        dependencies = [
+          (sources."debug-2.6.9" // {
+            dependencies = [
+              sources."ms-2.0.0"
+            ];
+          })
+          sources."mime-1.6.0"
+          sources."ms-2.1.1"
+        ];
+      })
+      sources."serialize-javascript-2.1.2"
+      (sources."serve-index-1.9.1" // {
+        dependencies = [
+          sources."debug-2.6.9"
+          sources."http-errors-1.6.3"
+          sources."inherits-2.0.3"
+          sources."ms-2.0.0"
+          sources."setprototypeof-1.1.0"
+        ];
+      })
+      sources."serve-static-1.14.1"
+      sources."set-blocking-2.0.0"
+      (sources."set-value-2.0.1" // {
+        dependencies = [
+          sources."extend-shallow-2.0.1"
+        ];
+      })
+      sources."setimmediate-1.0.5"
+      sources."setprototypeof-1.1.1"
+      sources."sha.js-2.4.11"
+      sources."shallow-clone-3.0.1"
+      sources."shebang-command-1.2.0"
+      sources."shebang-regex-1.0.0"
+      sources."shell-quote-1.7.2"
+      sources."signal-exit-3.0.2"
+      (sources."simple-swizzle-0.2.2" // {
+        dependencies = [
+          sources."is-arrayish-0.3.2"
+        ];
+      })
+      sources."slash-2.0.0"
+      sources."slice-ansi-2.1.0"
+      (sources."snapdragon-0.8.2" // {
+        dependencies = [
+          sources."debug-2.6.9"
+          sources."define-property-0.2.5"
+          sources."extend-shallow-2.0.1"
+          sources."ms-2.0.0"
+          sources."source-map-0.5.7"
+        ];
+      })
+      (sources."snapdragon-node-2.1.1" // {
+        dependencies = [
+          sources."define-property-1.0.0"
+          sources."is-accessor-descriptor-1.0.0"
+          sources."is-data-descriptor-1.0.0"
+          sources."is-descriptor-1.0.2"
+        ];
+      })
+      (sources."snapdragon-util-3.0.1" // {
+        dependencies = [
+          sources."kind-of-3.2.2"
+        ];
+      })
+      (sources."sockjs-0.3.20" // {
+        dependencies = [
+          sources."uuid-3.4.0"
+        ];
+      })
+      (sources."sockjs-client-1.4.0" // {
+        dependencies = [
+          sources."debug-3.2.6"
+          sources."faye-websocket-0.11.3"
+        ];
+      })
+      sources."sort-keys-1.1.2"
+      sources."source-list-map-2.0.1"
+      sources."source-map-0.6.1"
+      sources."source-map-resolve-0.5.3"
+      sources."source-map-support-0.5.16"
+      sources."source-map-url-0.4.0"
+      sources."spdx-correct-3.1.0"
+      sources."spdx-exceptions-2.2.0"
+      sources."spdx-expression-parse-3.0.0"
+      sources."spdx-license-ids-3.0.5"
+      sources."spdy-4.0.2"
+      (sources."spdy-transport-3.0.0" // {
+        dependencies = [
+          sources."readable-stream-3.6.0"
+        ];
+      })
+      sources."split-string-3.1.0"
+      sources."sprintf-js-1.0.3"
+      sources."sshpk-1.16.1"
+      sources."ssri-6.0.1"
+      sources."stable-0.1.8"
+      sources."stackframe-1.2.0"
+      (sources."static-extend-0.1.2" // {
+        dependencies = [
+          sources."define-property-0.2.5"
+        ];
+      })
+      sources."statuses-1.5.0"
+      sources."stdout-stream-1.4.1"
+      sources."stream-browserify-2.0.2"
+      sources."stream-each-1.2.3"
+      sources."stream-http-2.8.3"
+      sources."stream-shift-1.0.1"
+      sources."strict-uri-encode-1.1.0"
+      (sources."string-width-2.1.1" // {
+        dependencies = [
+          sources."ansi-regex-3.0.0"
+          sources."strip-ansi-4.0.0"
+        ];
+      })
+      (sources."string.prototype.trimend-1.0.1" // {
+        dependencies = [
+          sources."es-abstract-1.17.6"
+          sources."is-callable-1.2.0"
+          sources."is-regex-1.1.0"
+        ];
+      })
+      sources."string.prototype.trimleft-2.1.1"
+      sources."string.prototype.trimright-2.1.1"
+      (sources."string.prototype.trimstart-1.0.1" // {
+        dependencies = [
+          sources."es-abstract-1.17.6"
+          sources."is-callable-1.2.0"
+          sources."is-regex-1.1.0"
+        ];
+      })
+      sources."string_decoder-1.1.1"
+      (sources."strip-ansi-6.0.0" // {
+        dependencies = [
+          sources."ansi-regex-5.0.0"
+        ];
+      })
+      sources."strip-bom-2.0.0"
+      sources."strip-eof-1.0.0"
+      sources."strip-final-newline-2.0.0"
+      sources."strip-indent-2.0.0"
+      sources."strip-json-comments-3.0.1"
+      (sources."stylehacks-4.0.3" // {
+        dependencies = [
+          sources."postcss-selector-parser-3.1.2"
+        ];
+      })
+      sources."supports-color-5.5.0"
+      sources."svg-tags-1.0.0"
+      sources."svgo-1.3.2"
+      (sources."table-5.4.6" // {
+        dependencies = [
+          sources."emoji-regex-7.0.3"
+          sources."string-width-3.1.0"
+          sources."strip-ansi-5.2.0"
+        ];
+      })
+      sources."tapable-1.1.3"
+      sources."tar-2.2.2"
+      sources."terser-4.6.10"
+      (sources."terser-webpack-plugin-1.4.3" // {
+        dependencies = [
+          sources."schema-utils-1.0.0"
+        ];
+      })
+      sources."text-table-0.2.0"
+      sources."thenify-3.3.1"
+      sources."thenify-all-1.6.0"
+      sources."thread-loader-2.1.3"
+      sources."through-2.3.8"
+      sources."through2-2.0.5"
+      sources."thunky-1.1.0"
+      sources."timers-browserify-2.0.11"
+      sources."timsort-0.3.0"
+      sources."tmp-0.0.33"
+      sources."to-arraybuffer-1.0.1"
+      sources."to-fast-properties-2.0.0"
+      (sources."to-object-path-0.3.0" // {
+        dependencies = [
+          sources."kind-of-3.2.2"
+        ];
+      })
+      sources."to-regex-3.0.2"
+      sources."to-regex-range-2.1.1"
+      sources."toidentifier-1.0.0"
+      sources."toposort-1.0.7"
+      sources."tough-cookie-2.5.0"
+      sources."trim-newlines-1.0.0"
+      sources."true-case-path-1.0.3"
+      sources."tryer-1.0.1"
+      (sources."ts-loader-6.2.2" // {
+        dependencies = [
+          sources."braces-3.0.2"
+          sources."fill-range-7.0.1"
+          sources."is-number-7.0.0"
+          sources."micromatch-4.0.2"
+          sources."semver-6.3.0"
+          sources."to-regex-range-5.0.1"
+        ];
+      })
+      sources."ts-pnp-1.2.0"
+      sources."tslib-1.10.0"
+      (sources."tslint-5.20.1" // {
+        dependencies = [
+          sources."tsutils-2.29.0"
+        ];
+      })
+      sources."tsutils-3.17.1"
+      sources."tty-browserify-0.0.0"
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-0.14.5"
+      sources."type-check-0.3.2"
+      sources."type-fest-0.6.0"
+      sources."type-is-1.6.18"
+      sources."typedarray-0.0.6"
+      sources."typescript-3.9.5"
+      (sources."uglify-js-3.4.10" // {
+        dependencies = [
+          sources."commander-2.19.0"
+        ];
+      })
+      sources."unicode-canonical-property-names-ecmascript-1.0.4"
+      sources."unicode-match-property-ecmascript-1.0.4"
+      sources."unicode-match-property-value-ecmascript-1.2.0"
+      sources."unicode-property-aliases-ecmascript-1.1.0"
+      sources."union-value-1.0.1"
+      sources."uniq-1.0.1"
+      sources."uniqs-2.0.0"
+      sources."unique-filename-1.1.1"
+      sources."unique-slug-2.0.2"
+      sources."universalify-0.1.2"
+      sources."unpipe-1.0.0"
+      sources."unquote-1.1.1"
+      (sources."unset-value-1.0.0" // {
+        dependencies = [
+          (sources."has-value-0.3.1" // {
+            dependencies = [
+              sources."isobject-2.1.0"
+            ];
+          })
+          sources."has-values-0.1.4"
+        ];
+      })
+      sources."upath-1.2.0"
+      sources."upper-case-1.1.3"
+      sources."uri-js-4.2.2"
+      sources."urix-0.1.0"
+      (sources."url-0.11.0" // {
+        dependencies = [
+          sources."punycode-1.3.2"
+        ];
+      })
+      sources."url-loader-2.3.0"
+      sources."url-parse-1.4.7"
+      sources."use-3.1.1"
+      (sources."util-0.11.1" // {
+        dependencies = [
+          sources."inherits-2.0.3"
+        ];
+      })
+      sources."util-deprecate-1.0.2"
+      (sources."util.promisify-1.0.1" // {
+        dependencies = [
+          sources."es-abstract-1.17.6"
+          sources."is-callable-1.2.0"
+          sources."is-regex-1.1.0"
+        ];
+      })
+      sources."utila-0.4.0"
+      sources."utils-merge-1.0.1"
+      sources."uuid-3.3.3"
+      sources."v-lazy-image-1.4.0"
+      sources."v8-compile-cache-2.1.0"
+      sources."validate-npm-package-license-3.0.4"
+      sources."vary-1.1.2"
+      sources."vendors-1.0.4"
+      sources."verror-1.10.0"
+      sources."vm-browserify-1.1.2"
+      sources."vue-2.6.12"
+      sources."vue-class-component-7.2.5"
+      sources."vue-cli-plugin-buefy-0.3.7"
+      sources."vue-cli-plugin-fontawesome-0.2.0"
+      (sources."vue-cli-plugin-i18n-1.0.1" // {
+        dependencies = [
+          sources."deepmerge-4.2.2"
+          sources."rimraf-3.0.2"
+        ];
+      })
+      sources."vue-dragscroll-2.1.0"
+      sources."vue-eslint-parser-7.0.0"
+      sources."vue-hot-reload-api-2.3.4"
+      sources."vue-i18n-8.21.0"
+      (sources."vue-i18n-extract-1.0.2" // {
+        dependencies = [
+          sources."emoji-regex-7.0.3"
+          sources."string-width-3.1.0"
+          sources."strip-ansi-5.2.0"
+          sources."yargs-13.3.2"
+          sources."yargs-parser-13.1.2"
+        ];
+      })
+      (sources."vue-loader-15.9.3" // {
+        dependencies = [
+          sources."hash-sum-1.0.2"
+        ];
+      })
+      sources."vue-property-decorator-9.0.0"
+      sources."vue-router-3.4.3"
+      (sources."vue-style-loader-4.1.2" // {
+        dependencies = [
+          sources."hash-sum-1.0.2"
+        ];
+      })
+      sources."vue-template-compiler-2.6.12"
+      sources."vue-template-es2015-compiler-1.9.1"
+      sources."vuex-3.5.1"
+      sources."vuex-class-component-2.3.5"
+      sources."watchpack-1.6.1"
+      sources."wbuf-1.7.3"
+      sources."wcwidth-1.0.1"
+      (sources."webpack-4.42.1" // {
+        dependencies = [
+          sources."eslint-scope-4.0.3"
+          sources."mkdirp-0.5.4"
+          sources."schema-utils-1.0.0"
+        ];
+      })
+      (sources."webpack-bundle-analyzer-3.8.0" // {
+        dependencies = [
+          sources."acorn-7.3.1"
+        ];
+      })
+      sources."webpack-chain-6.4.0"
+      sources."webpack-dev-middleware-3.7.2"
+      (sources."webpack-dev-server-3.11.0" // {
+        dependencies = [
+          sources."ansi-regex-2.1.1"
+          sources."emoji-regex-7.0.3"
+          sources."is-absolute-url-3.0.3"
+          sources."schema-utils-1.0.0"
+          sources."semver-6.3.0"
+          (sources."string-width-3.1.0" // {
+            dependencies = [
+              sources."ansi-regex-4.1.0"
+              sources."strip-ansi-5.2.0"
+            ];
+          })
+          sources."strip-ansi-3.0.1"
+          sources."supports-color-6.1.0"
+          sources."yargs-13.3.2"
+          sources."yargs-parser-13.1.2"
+        ];
+      })
+      sources."webpack-log-2.0.0"
+      sources."webpack-merge-4.2.2"
+      sources."webpack-sources-1.4.3"
+      sources."websocket-driver-0.6.5"
+      sources."websocket-extensions-0.1.4"
+      sources."which-1.3.1"
+      sources."which-module-2.0.0"
+      sources."wide-align-1.1.3"
+      sources."word-wrap-1.2.3"
+      sources."worker-farm-1.7.0"
+      sources."worker-rpc-0.1.1"
+      (sources."wrap-ansi-6.2.0" // {
+        dependencies = [
+          sources."ansi-styles-4.2.1"
+          sources."color-convert-2.0.1"
+          sources."color-name-1.1.4"
+          sources."is-fullwidth-code-point-3.0.0"
+          sources."string-width-4.2.0"
+        ];
+      })
+      sources."wrappy-1.0.2"
+      sources."write-1.0.3"
+      sources."ws-6.2.1"
+      sources."xtend-4.0.2"
+      sources."y18n-4.0.0"
+      sources."yallist-3.1.1"
+      (sources."yargs-15.3.1" // {
+        dependencies = [
+          sources."cliui-6.0.0"
+          sources."find-up-4.1.0"
+          sources."is-fullwidth-code-point-3.0.0"
+          sources."locate-path-5.0.0"
+          sources."p-locate-4.1.0"
+          sources."path-exists-4.0.0"
+          sources."string-width-4.2.0"
+        ];
+      })
+      sources."yargs-parser-18.1.3"
+      (sources."yorkie-2.0.0" // {
+        dependencies = [
+          sources."cross-spawn-5.1.0"
+          sources."execa-0.8.0"
+          sources."get-stream-3.0.0"
+          sources."lru-cache-4.1.5"
+          sources."normalize-path-1.0.0"
+          sources."yallist-2.1.2"
+        ];
+      })
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      homepage = "https://ldgallery.pacien.org/";
+      license = "AGPL-3";
+    };
+    production = false;
+    bypassCache = true;
+    reconstructLock = false;
+  };
+in
+{
+  args = args;
+  sources = sources;
+  tarball = nodeEnv.buildNodeSourceDist args;
+  package = nodeEnv.buildNodePackage args;
+  shell = nodeEnv.buildNodeShell args;
+  nodeDependencies = nodeEnv.buildNodeDependencies (lib.overrideExisting args {
+    src = stdenv.mkDerivation {
+      name = args.name + "-package-json";
+      src = nix-gitignore.gitignoreSourcePure [
+        "*"
+        "!package.json"
+        "!package-lock.json"
+      ] args.src;
+      dontBuild = true;
+      installPhase = "mkdir -p $out; cp -r ./* $out;";
+    };
+  });
+}
diff --git a/pkgs/tools/graphics/leela/default.nix b/pkgs/tools/graphics/leela/default.nix
index 0c56f385983..cf10c92286c 100644
--- a/pkgs/tools/graphics/leela/default.nix
+++ b/pkgs/tools/graphics/leela/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, poppler }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, poppler }:
 
 stdenv.mkDerivation {
   name = "leela-12.fe7a35a";
@@ -10,7 +10,7 @@ stdenv.mkDerivation {
     sha256 = "1k6n758r9dhjmc1pnpk6qzpg0q7pkq2hf18z3b0s2z198jpkg9s3";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ poppler ];
 
   installFlags = [ "PREFIX=$(out)" "MANDIR=$(out)/share/man" ];
@@ -18,8 +18,8 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.puffnfresh ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/graphics/lepton/default.nix b/pkgs/tools/graphics/lepton/default.nix
index cbb48fe3728..eb313503221 100644
--- a/pkgs/tools/graphics/lepton/default.nix
+++ b/pkgs/tools/graphics/lepton/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, git, glibc }:
+{ lib, stdenv, fetchFromGitHub, cmake, git, glibc }:
 
 stdenv.mkDerivation rec {
   version = "2019-08-20";
@@ -12,9 +12,9 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [ cmake git ];
-  buildInputs = stdenv.lib.optionals stdenv.isLinux [ glibc.static ];
+  buildInputs = lib.optionals stdenv.isLinux [ glibc.static ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/dropbox/lepton";
     description = "A tool to losslessly compress JPEGs";
     license = licenses.asl20;
diff --git a/pkgs/tools/graphics/logstalgia/default.nix b/pkgs/tools/graphics/logstalgia/default.nix
index 83178824eab..8edde6e3f42 100644
--- a/pkgs/tools/graphics/logstalgia/default.nix
+++ b/pkgs/tools/graphics/logstalgia/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, SDL2, ftgl, pkgconfig, libpng, libjpeg, pcre, SDL2_image, glew
+{ lib, stdenv, fetchurl, SDL2, ftgl, pkg-config, libpng, libjpeg, pcre, SDL2_image, glew
 , libGLU, libGL, boost, glm, freetype }:
 
 stdenv.mkDerivation rec {
@@ -10,11 +10,11 @@ stdenv.mkDerivation rec {
     sha256 = "1agwjlwzp1c86hqb1p7rmzqzhd3wpnyh8whsfq4sbx01wj0l0gzd";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ glew SDL2 ftgl libpng libjpeg pcre SDL2_image libGLU libGL boost
                   glm freetype ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://logstalgia.io/";
     description = "Website traffic visualization tool";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/graphics/lprof/default.nix b/pkgs/tools/graphics/lprof/default.nix
deleted file mode 100644
index 9c666462ef7..00000000000
--- a/pkgs/tools/graphics/lprof/default.nix
+++ /dev/null
@@ -1,37 +0,0 @@
-{ 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/pkgs/tools/graphics/lprof/keep-environment.patch b/pkgs/tools/graphics/lprof/keep-environment.patch
deleted file mode 100644
index 7d0beaed587..00000000000
--- a/pkgs/tools/graphics/lprof/keep-environment.patch
+++ /dev/null
@@ -1,16 +0,0 @@
---- 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 environment 
--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/pkgs/tools/graphics/lprof/lcms-1.17.patch b/pkgs/tools/graphics/lprof/lcms-1.17.patch
deleted file mode 100644
index a88471e143f..00000000000
--- a/pkgs/tools/graphics/lprof/lcms-1.17.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- 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/pkgs/tools/graphics/lsix/default.nix b/pkgs/tools/graphics/lsix/default.nix
new file mode 100644
index 00000000000..ba07e2886b5
--- /dev/null
+++ b/pkgs/tools/graphics/lsix/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenvNoCC, fetchFromGitHub, makeWrapper, imagemagick }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "lsix";
+  version = "1.7.4";
+
+  src = fetchFromGitHub {
+    owner = "hackerb9";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-mOueSNhf1ywG4k1kRODBaWRjy0L162BAO1HRPaMMbFM=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 lsix -t $out/bin
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/lsix \
+      --prefix PATH : ${lib.makeBinPath [ imagemagick ]}
+  '';
+
+  meta = with lib; {
+    description = "Shows thumbnails in terminal using sixel graphics";
+    homepage = "https://github.com/hackerb9/lsix";
+    license = licenses.gpl3Only;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ kidonng ];
+  };
+}
diff --git a/pkgs/tools/graphics/luxcorerender/default.nix b/pkgs/tools/graphics/luxcorerender/default.nix
index 3afb6ebd987..75e69a5d499 100644
--- a/pkgs/tools/graphics/luxcorerender/default.nix
+++ b/pkgs/tools/graphics/luxcorerender/default.nix
@@ -1,63 +1,58 @@
-{ stdenv, fetchFromGitHub, cmake, boost165, pkgconfig, python36
-, 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
-}:
+{ lib, config, stdenv, fetchFromGitHub, symlinkJoin, wrapGAppsHook, cmake, boost172
+, pkg-config, flex, bison, libpng, libtiff, zlib, python3, embree, openexr
+, openimagedenoise, openimageio, tbb, c-blosc, gtk3, pcre, doxygen
+# OpenCL Support
+, withOpenCL ? true, ocl-icd
+# Cuda Support
+, withCuda ? config.cudaSupport or false, cudatoolkit }:
 
 let
-      python = python36;
-
-      boost_static = boost165.override {
-      inherit python;
-      enableStatic = true;
-      enablePython = true;
-    };
+  boostWithPython = boost172.override {
+    enablePython = true;
+    enableNumpy = true;
+    python = python3;
+  };
 
-    version = "2.0";
-    sha256 = "15nn39ybsfjf3cw3xgkbarvxn4a9ymfd579ankm7yjxkw5gcif38";
+  # Requires a version number like "<MAJOR><MINOR>"
+  pythonVersion = (lib.versions.major python3.version)
+    + (lib.versions.minor python3.version);
 
-in stdenv.mkDerivation {
+in stdenv.mkDerivation rec {
   pname = "luxcorerender";
-  inherit version;
+  version = "2.4";
 
   src = fetchFromGitHub {
     owner = "LuxCoreRender";
     repo = "LuxCore";
     rev = "luxcorerender_v${version}";
-    inherit sha256;
+    sha256 = "0xvivw79719fa1q762b76nyvzawfd3hmp8y5j04bax8a7f8mfa9k";
   };
 
-  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 python 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];
+  nativeBuildInputs = [ pkg-config cmake flex bison doxygen wrapGAppsHook ];
+
+  buildInputs = [
+    libpng
+    libtiff
+    zlib
+    boostWithPython.dev
+    python3
+    embree
+    openexr
+    openimagedenoise
+    tbb
+    c-blosc
+    gtk3
+    pcre
+    openimageio.dev
+    openimageio.out
+  ] ++ lib.optionals withOpenCL [ ocl-icd ]
+    ++ lib.optionals withCuda [ cudatoolkit ];
+
+  cmakeFlags = [ "-DPYTHON_V=${pythonVersion}" ]
+    ++ lib.optional (!withOpenCL) "-DLUXRAYS_DISABLE_OPENCL=1"
+    ++ lib.optional (!withCuda) "-DLUXRAYS_DISABLE_CUDA=1";
 
-  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=${python}/lib/libpython3.so"
-    "-DPYTHON_INCLUDE_DIR=${python}/include/python${python.pythonVersion}"
-    "-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 ${python}/include/python${python.pythonVersion}"
     NIX_LDFLAGS+=" -lpython3"
   '';
 
@@ -68,14 +63,7 @@ in stdenv.mkDerivation {
     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; {
+  meta = with lib; {
     description = "Open source, physically based, unbiased rendering engine";
     homepage = "https://luxcorerender.org/";
     maintainers = with maintainers; [ hodapp ];
@@ -84,7 +72,6 @@ in stdenv.mkDerivation {
   };
 }
 
-
 # TODO (might not be necessary):
 #
 # luxcoreui still gives warnings like: "failed to commit changes to
diff --git a/pkgs/tools/graphics/maim/default.nix b/pkgs/tools/graphics/maim/default.nix
index 29c9144f89f..f4851c6bcab 100644
--- a/pkgs/tools/graphics/maim/default.nix
+++ b/pkgs/tools/graphics/maim/default.nix
@@ -1,27 +1,26 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig
-, zlib, libpng, libjpeg, libGLU, libGL, glm
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config
+, zlib, libpng, libjpeg, libwebp, libGLU, libGL, glm
 , libX11, libXext, libXfixes, libXrandr, libXcomposite, slop, icu
 }:
 
 stdenv.mkDerivation rec {
   pname = "maim";
-  version = "5.6.3";
+  version = "5.7.4";
 
   src = fetchFromGitHub {
     owner = "naelstrof";
     repo = "maim";
     rev = "v${version}";
-    sha256 = "181mjjrjb9fs1ficcv9miqbk94v95j1yli7fjp2dj514g7nj9l3x";
+    sha256 = "sha256-uFtiwaM3H09vfvz3wVvumbqkoZhLNJxONkMqqqrJBs4=";
   };
 
-  nativeBuildInputs = [ cmake pkgconfig ];
-  buildInputs =
-    [ zlib libpng libjpeg libGLU libGL glm
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ zlib libpng libjpeg libwebp libGLU libGL glm
       libX11 libXext libXfixes libXrandr libXcomposite slop icu ];
 
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit (src.meta) homepage;
     description = "A command-line screenshot utility";
     longDescription = ''
@@ -30,8 +29,8 @@ stdenv.mkDerivation rec {
       supposed to be an improved scrot.
     '';
     changelog = "https://github.com/naelstrof/maim/releases/tag/v${version}";
-    platforms = stdenv.lib.platforms.all;
-    license = stdenv.lib.licenses.gpl3Plus;
-    maintainers = with maintainers; [ primeos mbakke ];
+    platforms = lib.platforms.all;
+    license = lib.licenses.gpl3Plus;
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/tools/graphics/mangohud/default.nix b/pkgs/tools/graphics/mangohud/default.nix
new file mode 100644
index 00000000000..6c5da89b85b
--- /dev/null
+++ b/pkgs/tools/graphics/mangohud/default.nix
@@ -0,0 +1,149 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchurl
+, substituteAll
+, coreutils
+, curl
+, gawk
+, glxinfo
+, gnugrep
+, gnused
+, lsof
+, xdg-utils
+, dbus
+, hwdata
+, libX11
+, mangohud32
+, vulkan-headers
+, glslang
+, makeWrapper
+, meson
+, ninja
+, pkg-config
+, python3Packages
+, unzip
+, vulkan-loader
+, libXNVCtrl
+, wayland
+, addOpenGLRunpath
+}:
+
+let
+  # Derived from subprojects/imgui.wrap
+  imgui = rec {
+    version = "1.81";
+    src = fetchFromGitHub {
+      owner = "ocornut";
+      repo = "imgui";
+      rev = "v${version}";
+      hash = "sha256-rRkayXk3xz758v6vlMSaUu5fui6NR8Md3njhDB0gJ18=";
+    };
+    patch = fetchurl {
+      url = "https://wrapdb.mesonbuild.com/v2/imgui_${version}-1/get_patch";
+      hash = "sha256-bQC0QmkLalxdj4mDEdqvvOFtNwz2T1MpTDuMXGYeQ18=";
+    };
+  };
+in stdenv.mkDerivation rec {
+  pname = "mangohud";
+  version = "0.6.5";
+
+  src = fetchFromGitHub {
+    owner = "flightlessmango";
+    repo = "MangoHud";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    sha256 = "sha256-RRtti0VnB6SXrpFYaEqANvpgvP/Dkvc+x/I40AXaspU=";
+  };
+
+  outputs = [ "out" "doc" "man" ];
+
+  # Unpack subproject sources
+  postUnpack = ''(
+    cd "$sourceRoot/subprojects"
+    cp -R --no-preserve=mode,ownership ${imgui.src} imgui-${imgui.version}
+    unzip ${imgui.patch}
+  )'';
+
+  patches = [
+    # Hard code dependencies. Can't use makeWrapper since the Vulkan
+    # layer can be used without the mangohud executable by setting MANGOHUD=1.
+    (substituteAll {
+      src = ./hardcode-dependencies.patch;
+
+      path = lib.makeBinPath [
+        coreutils
+        curl
+        gawk
+        glxinfo
+        gnugrep
+        gnused
+        lsof
+        xdg-utils
+      ];
+
+      libdbus = dbus.lib;
+      inherit hwdata libX11;
+    })
+  ] ++ lib.optional (stdenv.hostPlatform.system == "x86_64-linux") [
+    # Support 32bit OpenGL applications by appending the mangohud32
+    # lib path to LD_LIBRARY_PATH.
+    #
+    # This workaround is necessary since on Nix's build of ld.so, $LIB
+    # always expands to lib even when running an 32bit application.
+    #
+    # See https://github.com/NixOS/nixpkgs/issues/101597.
+    (substituteAll {
+      src = ./opengl32-nix-workaround.patch;
+      inherit mangohud32;
+    })
+  ];
+
+  mesonFlags = [
+    "-Duse_system_vulkan=enabled"
+    "-Dvulkan_datadir=${vulkan-headers}/share"
+    "-Dwith_wayland=enabled"
+  ];
+
+  nativeBuildInputs = [
+    glslang
+    makeWrapper
+    meson
+    ninja
+    pkg-config
+    python3Packages.Mako
+    python3Packages.python
+    unzip
+    vulkan-loader
+  ];
+
+  buildInputs = [
+    dbus
+    libX11
+    libXNVCtrl
+    wayland
+  ];
+
+  # Support 32bit Vulkan applications by linking in 32bit Vulkan layer
+  # This is needed for the same reason the 32bit OpenGL workaround is needed.
+  postInstall = lib.optionalString (stdenv.hostPlatform.system == "x86_64-linux") ''
+    ln -s ${mangohud32}/share/vulkan/implicit_layer.d/MangoHud.json \
+      "$out/share/vulkan/implicit_layer.d/MangoHud.x86.json"
+  '';
+
+  # Support Nvidia cards by adding OpenGL path and support overlaying
+  # Vulkan applications without requiring MangoHud to be installed
+  postFixup = ''
+    wrapProgram "$out/bin/mangohud" \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ addOpenGLRunpath.driverLink ]} \
+      --prefix XDG_DATA_DIRS : "$out/share"
+  '';
+
+  meta = with lib; {
+    description = "A Vulkan and OpenGL overlay for monitoring FPS, temperatures, CPU/GPU load and more";
+    homepage = "https://github.com/flightlessmango/MangoHud";
+    platforms = platforms.linux;
+    license = licenses.mit;
+    maintainers = with maintainers; [ kira-bruneau zeratax ];
+  };
+}
diff --git a/pkgs/tools/graphics/mangohud/hardcode-dependencies.patch b/pkgs/tools/graphics/mangohud/hardcode-dependencies.patch
new file mode 100644
index 00000000000..2ee5e2dd547
--- /dev/null
+++ b/pkgs/tools/graphics/mangohud/hardcode-dependencies.patch
@@ -0,0 +1,57 @@
+diff --git a/src/dbus.cpp b/src/dbus.cpp
+index 44ffafc..9baf57b 100644
+--- a/src/dbus.cpp
++++ b/src/dbus.cpp
+@@ -162,7 +162,7 @@ bool dbus_manager::init(const std::string& requested_player) {
+         return true;
+     }
+ 
+-    if (!m_dbus_ldr.IsLoaded() && !m_dbus_ldr.Load("libdbus-1.so.3")) {
++    if (!m_dbus_ldr.IsLoaded() && !m_dbus_ldr.Load("@libdbus@/lib/libdbus-1.so.3")) {
+         std::cerr << "MANGOHUD: Could not load libdbus-1.so.3\n";
+         return false;
+     }
+diff --git a/src/loaders/loader_x11.cpp b/src/loaders/loader_x11.cpp
+index 25c65bf..87488d5 100644
+--- a/src/loaders/loader_x11.cpp
++++ b/src/loaders/loader_x11.cpp
+@@ -88,4 +88,4 @@ void libx11_loader::CleanUp(bool unload) {
+ 
+ }
+ 
+-std::shared_ptr<libx11_loader> g_x11(new libx11_loader("libX11.so.6"));
++std::shared_ptr<libx11_loader> g_x11(new libx11_loader("@libX11@/lib/libX11.so.6"));
+diff --git a/src/logging.cpp b/src/logging.cpp
+index ee8600b..c7c91a0 100644
+--- a/src/logging.cpp
++++ b/src/logging.cpp
+@@ -19,7 +19,10 @@ string exec(string command) {
+ #ifdef __gnu_linux__
+ 
+    // Open pipe to file
++   char* originalPath = getenv("PATH");
++   setenv("PATH", "@path@", 1);
+    FILE* pipe = popen(command.c_str(), "r");
++   setenv("PATH", originalPath, 1);
+    if (!pipe) {
+       return "popen failed!";
+    }
+diff --git a/src/pci_ids.cpp b/src/pci_ids.cpp
+index 4e2a6d2..9490869 100644
+--- a/src/pci_ids.cpp
++++ b/src/pci_ids.cpp
+@@ -22,12 +22,9 @@ std::istream& get_uncommented_line(std::istream& is, std::string &line)
+ 
+ void parse_pciids()
+ {
+-    std::ifstream file("/usr/share/hwdata/pci.ids");
++    std::ifstream file("@hwdata@/share/hwdata/pci.ids");
+     if(file.fail()){
+-        std::ifstream file("/usr/share/misc/pci.ids");
+-        if (file.fail())
+-            printf("MANGOHUD: can't find file pci.ids\n");
+-        
++        printf("MANGOHUD: can't find file pci.ids\n");
+     }
+ 
+     std::string line;
diff --git a/pkgs/tools/graphics/mangohud/opengl32-nix-workaround.patch b/pkgs/tools/graphics/mangohud/opengl32-nix-workaround.patch
new file mode 100644
index 00000000000..4c6561180a1
--- /dev/null
+++ b/pkgs/tools/graphics/mangohud/opengl32-nix-workaround.patch
@@ -0,0 +1,12 @@
+diff --git a/bin/mangohud.in b/bin/mangohud.in
+index 8ec21de..f65304a 100755
+--- a/bin/mangohud.in
++++ b/bin/mangohud.in
+@@ -23,6 +23,6 @@ fi
+ # figure out whether the 32 or 64 bit version should be used, and will search
+ # for it in the correct directory
+ LD_PRELOAD="${LD_PRELOAD}:${MANGOHUD_LIB_NAME}"
+-LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:@ld_libdir_mangohud@"
++LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:@ld_libdir_mangohud@:@mangohud32@/lib/mangohud"
+ 
+ exec env MANGOHUD=1 LD_LIBRARY_PATH="${LD_LIBRARY_PATH}" LD_PRELOAD="${LD_PRELOAD}" "$@"
diff --git a/pkgs/tools/graphics/mesa-demos/default.nix b/pkgs/tools/graphics/mesa-demos/default.nix
index 12e751e0f08..550b06d0f0e 100644
--- a/pkgs/tools/graphics/mesa-demos/default.nix
+++ b/pkgs/tools/graphics/mesa-demos/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, freeglut, glew, libGL, libGLU, libX11, libXext, mesa, pkg-config, wayland }:
+{ lib, stdenv, fetchurl, freeglut, glew, libGL, libGLU, libX11, libXext, mesa, pkg-config, wayland }:
 
 stdenv.mkDerivation rec {
   pname = "mesa-demos";
@@ -12,9 +12,10 @@ stdenv.mkDerivation rec {
   buildInputs = [ freeglut glew libX11 libXext libGL libGLU mesa mesa.osmesa wayland ];
   nativeBuildInputs = [ pkg-config ];
 
+  configureFlags = [ "--with-system-data-files" ];
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Collection of demos and test programs for OpenGL and Mesa";
     homepage = "https://www.mesa3d.org/";
     license = licenses.mit;
diff --git a/pkgs/tools/graphics/metapixel/default.nix b/pkgs/tools/graphics/metapixel/default.nix
new file mode 100644
index 00000000000..8c9fef0cd48
--- /dev/null
+++ b/pkgs/tools/graphics/metapixel/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, libpng, libjpeg, giflib, perl, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "metapixel";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "schani";
+    repo = pname;
+    rev = "98ee9daa093b6c334941242e63f90b1c2876eb4f";
+    fetchSubmodules = true;
+    sha256 = "0r7n3a6bvcxkbpda4mwmrpicii09iql5z69nkjqygkwxw7ny3309";
+  };
+
+  makeFlags = [ "metapixel" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libpng libjpeg giflib perl ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp metapixel $out/bin/metapixel
+    cp metapixel-prepare $out/bin/metapixel-prepare
+    cp metapixel-sizesort $out/bin/metapixel-sizesort
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/schani/metapixel";
+    description = "Tool for generating photomosaics";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ dandellion ];
+  };
+}
diff --git a/pkgs/tools/graphics/mscgen/default.nix b/pkgs/tools/graphics/mscgen/default.nix
index f6bec5983c2..6749a193c00 100644
--- a/pkgs/tools/graphics/mscgen/default.nix
+++ b/pkgs/tools/graphics/mscgen/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , bison
 , fetchurl
 , flex
@@ -11,12 +11,9 @@
 , zlib
 }:
 
-let
-  version = "0.20";
-in
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "mscgen";
-  inherit version;
+  version = "0.20";
 
   src = fetchurl {
     url = "http://www.mcternan.me.uk/mscgen/software/mscgen-src-${version}.tar.gz";
@@ -36,7 +33,7 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.gpl2;
 
     longDescription = ''
       Mscgen is a small program that parses Message Sequence Chart
@@ -51,7 +48,7 @@ stdenv.mkDerivation {
       printing.
     '';
 
-    platforms = stdenv.lib.platforms.unix;
-    maintainers = [ stdenv.lib.maintainers.peti ];
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.peti ];
   };
 }
diff --git a/pkgs/tools/graphics/netpbm/default.nix b/pkgs/tools/graphics/netpbm/default.nix
index bfb50c45f40..30b69c862c3 100644
--- a/pkgs/tools/graphics/netpbm/default.nix
+++ b/pkgs/tools/graphics/netpbm/default.nix
@@ -1,9 +1,10 @@
 { lib
 , stdenv
 , fetchsvn
-, pkgconfig
+, pkg-config
 , libjpeg
 , libpng
+, jbigkit
 , flex
 , zlib
 , perl
@@ -12,29 +13,24 @@
 , libtiff
 , enableX11 ? false
 , libX11
+, buildPackages
 }:
 
 stdenv.mkDerivation {
   # Determine version and revision from:
   # https://sourceforge.net/p/netpbm/code/HEAD/log/?path=/advanced
-  name = "netpbm-10.89.1";
+  name = "netpbm-10.92.0";
 
   outputs = [ "bin" "out" "dev" ];
 
   src = fetchsvn {
     url = "https://svn.code.sf.net/p/netpbm/code/advanced";
-    rev = "3735";
-    sha256 = "1m7ks6k53gsjsdazgf22g16dfgj3pqvqy9mhxzlwszv5808sj5w5";
+    rev = "3972";
+    sha256 = "09fpy4n4f867j23pr3b719wpvp8hjrr4drxp0r1csw74p8j6vfy3";
   };
 
-  postPatch = ''
-    # Install libnetpbm.so symlink to correct destination
-    substituteInPlace lib/Makefile \
-      --replace '/sharedlink' '/lib'
-  '';
-
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     flex
     makeWrapper
   ];
@@ -46,8 +42,23 @@ stdenv.mkDerivation {
     libjpeg
     libxml2
     libtiff
+    jbigkit
   ] ++ lib.optional enableX11 libX11;
 
+
+  strictDeps = true;
+
+  enableParallelBuilding = true;
+
+  # Environment variables
+  STRIPPROG = "${lib.getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}strip";
+
+  postPatch = ''
+    # Install libnetpbm.so symlink to correct destination
+    substituteInPlace lib/Makefile \
+      --replace '/sharedlink' '/lib'
+  '';
+
   configurePhase = ''
     runHook preConfigure
 
@@ -56,24 +67,33 @@ stdenv.mkDerivation {
     # Disable building static library
     echo "STATICLIB_TOO = N" >> config.mk
 
+    # Enable cross-compilation
+    echo 'AR = ${lib.getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}ar' >> config.mk
+    echo 'CC = ${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc' >> config.mk
+    echo 'CC_FOR_BUILD = ${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}cc' >> config.mk
+    echo 'LD_FOR_BUILD = $(CC_FOR_BUILD)' >> config.mk
+    echo 'PKG_CONFIG = ${buildPackages.pkg-config}/bin/${buildPackages.pkg-config.targetPrefix}pkg-config' >> config.mk
+    echo 'RANLIB = ${lib.getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}ranlib' >> config.mk
+
     # Use libraries from Nixpkgs
     echo "TIFFLIB = libtiff.so" >> config.mk
     echo "TIFFLIB_NEEDS_JPEG = N" >> config.mk
     echo "TIFFLIB_NEEDS_Z = N" >> config.mk
     echo "JPEGLIB = libjpeg.so" >> config.mk
+    echo "JBIGLIB = libjbig.a" >> config.mk
+    # Insecure
+    echo "JASPERLIB = NONE" >> config.mk
 
     # Fix path to rgb.txt
     echo "RGB_DB_PATH = $out/share/netpbm/misc/rgb.txt" >> config.mk
-  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+  '' + 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
-
+  '' + ''
     runHook postConfigure
   '';
 
-  enableParallelBuilding = true;
-
   installPhase = ''
     runHook preInstall
 
@@ -100,6 +120,6 @@ stdenv.mkDerivation {
     homepage = "http://netpbm.sourceforge.net/";
     description = "Toolkit for manipulation of graphic images";
     license = lib.licenses.free; # http://netpbm.svn.code.sourceforge.net/p/netpbm/code/trunk/doc/copyright_summary
-    platforms = with stdenv.lib.platforms; linux ++ darwin;
+    platforms = with lib.platforms; linux ++ darwin;
   };
 }
diff --git a/pkgs/tools/graphics/nifskope/default.nix b/pkgs/tools/graphics/nifskope/default.nix
index 68cf812d052..0a053a3ad32 100644
--- a/pkgs/tools/graphics/nifskope/default.nix
+++ b/pkgs/tools/graphics/nifskope/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, qmake, qtbase, qttools, substituteAll, libGLU, wrapQtAppsHook, fetchpatch }:
+{ lib, stdenv, fetchFromGitHub, qmake, qtbase, qttools, substituteAll, libGLU, wrapQtAppsHook, fetchpatch }:
 
 stdenv.mkDerivation {
   pname = "nifskope";
@@ -23,7 +23,7 @@ stdenv.mkDerivation {
       url = "https://github.com/niftools/nifskope/commit/30954e7f01f3d779a2a1fd37d363e8a6ad560bd3.patch";
       sha256 = "0d6xjj2mjjhdd7w1aig5f75jksjni16jyj0lxsz51pys6xqb6fpj";
     })
-  ] ++ (stdenv.lib.optional stdenv.isAarch64 ./no-sse-on-arm.patch);
+  ] ++ (lib.optional stdenv.isAarch64 ./no-sse-on-arm.patch);
 
   buildInputs = [ qtbase qttools libGLU.dev ];
   nativeBuildInputs = [ qmake wrapQtAppsHook ];
@@ -59,7 +59,7 @@ stdenv.mkDerivation {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://niftools.sourceforge.net/wiki/NifSkope";
     description = "A tool for analyzing and editing NetImmerse/Gamebryo '*.nif' files";
     maintainers = with maintainers; [ eelco ma27 ];
diff --git a/pkgs/tools/graphics/nip2/default.nix b/pkgs/tools/graphics/nip2/default.nix
index ac4d8441bf5..5fa2d263962 100644
--- a/pkgs/tools/graphics/nip2/default.nix
+++ b/pkgs/tools/graphics/nip2/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, pkgconfig, glib, libxml2, flex, bison, vips, gnome2,
-fftw, gsl, goffice, libgsf }:
+{ lib, stdenv, fetchurl, pkg-config, glib, libxml2, flex, bison, vips, gtk2
+, fftw, gsl, goffice, libgsf }:
 
 stdenv.mkDerivation rec {
   pname = "nip2";
@@ -11,11 +11,11 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs =
-  [ pkgconfig glib libxml2 flex bison vips
-    gnome2.gtk fftw gsl goffice libgsf
+  [ pkg-config glib libxml2 flex bison vips
+    gtk2 fftw gsl goffice libgsf
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/libvips/nip2";
     description = "Graphical user interface for VIPS image processing system";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/graphics/optar/default.nix b/pkgs/tools/graphics/optar/default.nix
index 4eee8acb979..320acaba420 100644
--- a/pkgs/tools/graphics/optar/default.nix
+++ b/pkgs/tools/graphics/optar/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, imagemagick, libpng }:
+{ lib, stdenv, fetchurl, imagemagick, libpng }:
 
 stdenv.mkDerivation {
   pname = "optar";
@@ -18,15 +18,15 @@ stdenv.mkDerivation {
       --replace /usr/local $out
 
     substituteInPlace pgm2ps \
-      --replace 'convert ' "${stdenv.lib.getBin imagemagick}/bin/convert "
+      --replace 'convert ' "${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";
+  meta = with lib; {
+    description = "OPTical ARchiver - it's a codec for encoding data on paper";
     homepage = "http://ronja.twibright.com/optar/";
     license = licenses.gpl2;
     maintainers = with maintainers; [ peterhoeg ];
diff --git a/pkgs/tools/graphics/optipng/default.nix b/pkgs/tools/graphics/optipng/default.nix
index 93c2f2c3502..72caf6f86ae 100644
--- a/pkgs/tools/graphics/optipng/default.nix
+++ b/pkgs/tools/graphics/optipng/default.nix
@@ -1,9 +1,10 @@
-{ stdenv, fetchurl, libpng, static ? false
+{ lib, stdenv, fetchurl, libpng
+, static ? stdenv.hostPlatform.isStatic
 }:
 
 # This package comes with its own copy of zlib, libpng and pngxtern
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   name = "optipng-0.7.7";
@@ -25,7 +26,7 @@ stdenv.mkDerivation rec {
   configureFlags = [
     "--with-system-zlib"
     "--with-system-libpng"
-  ] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+  ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
     #"-prefix=$out"
   ];
 
@@ -33,7 +34,7 @@ stdenv.mkDerivation rec {
     mv "$out"/bin/optipng{,.exe}
   '' else null;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://optipng.sourceforge.net/";
     description = "A PNG optimizer";
     license = licenses.zlib;
diff --git a/pkgs/tools/graphics/oxipng/default.nix b/pkgs/tools/graphics/oxipng/default.nix
index 965c799a217..eab3996811e 100644
--- a/pkgs/tools/graphics/oxipng/default.nix
+++ b/pkgs/tools/graphics/oxipng/default.nix
@@ -1,24 +1,19 @@
-{ stdenv, fetchFromGitHub, rustPlatform }:
+{ lib, stdenv, fetchCrate, rustPlatform }:
 
 rustPlatform.buildRustPackage rec {
-  version = "3.0.1";
+  version = "5.0.0";
   pname = "oxipng";
 
-  src = fetchFromGitHub {
-    owner = "shssoichiro";
-    repo = pname;
-    rev = "v${version}";
-    sha256 = "11lncwxksm7aqczy9ay1qnba2wmgfsirhgrl6vv1jlgj41b7mzi5";
+  src = fetchCrate {
+    inherit version pname;
+    sha256 = "sha256-rTAY+3ViPkOsRjT9FHKnVOEGfLscuBdMAiQq+N9PRNU=";
   };
 
-  cargoSha256 = "0lalb981qzlnmqfg170mh6lnc0qlzb94wc39mf859g2jvxk3pkrl";
-
-  # https://crates.io/crates/cloudflare-zlib#arm-vs-nightly-rust
-  cargoBuildFlags = [ "--features=cloudflare-zlib/arm-always" ];
+  cargoSha256 = "sha256-Z5tA2bUE/5qGKXP2hIKo6tBegaSUALRzEZ/Xext3EWY=";
 
   doCheck = !stdenv.isAarch64 && !stdenv.isDarwin;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/shssoichiro/oxipng";
     description = "A multithreaded lossless PNG compression optimizer";
     license = licenses.mit;
diff --git a/pkgs/tools/graphics/pdf2svg/default.nix b/pkgs/tools/graphics/pdf2svg/default.nix
index b1463544bbd..c6d2eab4537 100644
--- a/pkgs/tools/graphics/pdf2svg/default.nix
+++ b/pkgs/tools/graphics/pdf2svg/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
 , cairo, gtk2, poppler }:
 
 stdenv.mkDerivation rec {
@@ -12,10 +12,10 @@ stdenv.mkDerivation rec {
     sha256 = "14ffdm4y26imq99wjhkrhy9lp33165xci1l5ndwfia8hz53bl02k";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ cairo poppler gtk2 ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "PDF converter to SVG format";
     homepage = "http://www.cityinthesky.co.uk/opensource/pdf2svg";
     license = licenses.gpl2;
diff --git a/pkgs/tools/graphics/pdfread/default.nix b/pkgs/tools/graphics/pdfread/default.nix
deleted file mode 100644
index 80f7404bc94..00000000000
--- a/pkgs/tools/graphics/pdfread/default.nix
+++ /dev/null
@@ -1,50 +0,0 @@
-{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/pkgs/tools/graphics/pdfredacttools/default.nix b/pkgs/tools/graphics/pdfredacttools/default.nix
index 28b13c782b9..0a1cc111b54 100644
--- a/pkgs/tools/graphics/pdfredacttools/default.nix
+++ b/pkgs/tools/graphics/pdfredacttools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python2Packages, imagemagick, exiftool, file, ghostscript }:
+{ lib, fetchFromGitHub, python2Packages, imagemagick, exiftool, file, ghostscript }:
 
 python2Packages.buildPythonApplication rec {
   pname = "pdf-redact-tools";
@@ -19,11 +19,11 @@ python2Packages.buildPythonApplication rec {
 
   propagatedBuildInputs = [ imagemagick exiftool ghostscript ];
 
-  meta = with stdenv.lib; {
+  meta = with 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.
+        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
diff --git a/pkgs/tools/graphics/pdftag/default.nix b/pkgs/tools/graphics/pdftag/default.nix
index 7e022936318..c10412c976c 100644
--- a/pkgs/tools/graphics/pdftag/default.nix
+++ b/pkgs/tools/graphics/pdftag/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, meson, vala, ninja
+{ lib, stdenv, fetchFromGitHub, pkg-config, meson, vala, ninja
 , gtk3, poppler, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
@@ -12,10 +12,10 @@ stdenv.mkDerivation rec {
     sha256 = "1paj8hs27akzsivn01a30fl3zx5gfn1h89wxg2m72fd806hk0hql";
   };
 
-  nativeBuildInputs = [ pkgconfig meson ninja wrapGAppsHook vala ];
+  nativeBuildInputs = [ pkg-config meson ninja wrapGAppsHook vala ];
   buildInputs = [ gtk3 poppler ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Edit metadata found in PDFs";
     license = licenses.gpl3;
     maintainers = with maintainers; [ leenaars ];
diff --git a/pkgs/tools/graphics/perceptualdiff/default.nix b/pkgs/tools/graphics/perceptualdiff/default.nix
index dc5acc9433f..454352986ed 100644
--- a/pkgs/tools/graphics/perceptualdiff/default.nix
+++ b/pkgs/tools/graphics/perceptualdiff/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, freeimage }:
+{ lib, stdenv, fetchFromGitHub, cmake, freeimage }:
 
 stdenv.mkDerivation rec {
   pname = "perceptualdiff";
@@ -14,10 +14,10 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ cmake ];
   buildInputs = [ freeimage ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A program that compares two images using a perceptually based image metric";
     homepage = "https://github.com/myint/perceptualdiff";
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
     maintainers = with maintainers; [ uri-canva ];
     platforms = platforms.x86;
   };
diff --git a/pkgs/tools/graphics/pfstools/default.nix b/pkgs/tools/graphics/pfstools/default.nix
index 1c437a3f05c..99b9e3e0e48 100644
--- a/pkgs/tools/graphics/pfstools/default.nix
+++ b/pkgs/tools/graphics/pfstools/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchurl, cmake, pkgconfig, darwin
-, openexr, zlib, imagemagick, libGLU, libGL, freeglut, fftwFloat
-, fftw, gsl, libexif, perl, opencv2, qt5, netpbm
+{ lib, stdenv, mkDerivation, fetchurl, cmake, pkg-config, darwin
+, openexr, zlib, imagemagick6, libGLU, libGL, freeglut, fftwFloat
+, fftw, gsl, libexif, perl, opencv2, qtbase, netpbm
 }:
 
-stdenv.mkDerivation rec {
+mkDerivation rec {
   pname = "pfstools";
   version = "2.1.0";
 
@@ -18,17 +18,17 @@ stdenv.mkDerivation rec {
 
   preConfigure = ''
     rm cmake/FindNETPBM.cmake
-    echo "SET(NETPBM_LIBRARY `find ${stdenv.lib.getLib netpbm} -name "*.${stdenv.hostPlatform.extensions.sharedLibrary}*" -type f`)" >> cmake/FindNETPBM.cmake
-    echo "SET(NETPBM_LIBRARIES `find ${stdenv.lib.getLib netpbm} -name "*.${stdenv.hostPlatform.extensions.sharedLibrary}*" -type f`)" >> cmake/FindNETPBM.cmake
-    echo "SET(NETPBM_INCLUDE_DIR ${stdenv.lib.getDev netpbm}/include/netpbm)" >> cmake/FindNETPBM.cmake
+    echo "SET(NETPBM_LIBRARY `find ${lib.getLib netpbm} -name "*.${stdenv.hostPlatform.extensions.sharedLibrary}*" -type f`)" >> cmake/FindNETPBM.cmake
+    echo "SET(NETPBM_LIBRARIES `find ${lib.getLib netpbm} -name "*.${stdenv.hostPlatform.extensions.sharedLibrary}*" -type f`)" >> cmake/FindNETPBM.cmake
+    echo "SET(NETPBM_INCLUDE_DIR ${lib.getDev 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 ];
+  nativeBuildInputs = [ cmake pkg-config ];
   buildInputs = [
-    openexr zlib imagemagick fftwFloat
-    fftw gsl libexif perl opencv2 qt5.qtbase netpbm
+    openexr zlib imagemagick6 fftwFloat
+    fftw gsl libexif perl opencv2 qtbase netpbm
   ] ++ (if stdenv.isDarwin then (with darwin.apple_sdk.frameworks; [
     OpenGL GLUT
   ]) else [
@@ -37,7 +37,7 @@ stdenv.mkDerivation rec {
 
   patches = [ ./threads.patch ./pfstools.patch ./pfsalign.patch ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://pfstools.sourceforge.net/";
     description = "Toolkit for manipulation of HDR images";
     platforms = platforms.linux;
diff --git a/pkgs/tools/graphics/pgf/default.nix b/pkgs/tools/graphics/pgf/default.nix
index d3f01fa7d1f..8976700006b 100644
--- a/pkgs/tools/graphics/pgf/default.nix
+++ b/pkgs/tools/graphics/pgf/default.nix
@@ -1,13 +1,9 @@
-{ stdenv, fetchurl, autoconf, automake, libtool, dos2unix, libpgf, freeimage, doxygen }:
+{ lib, stdenv, fetchurl, autoconf, automake, libtool, dos2unix, libpgf, freeimage, doxygen }:
 
-with stdenv.lib;
-
-let
-  version = "6.14.12";
-in
-stdenv.mkDerivation {
+with lib;
+stdenv.mkDerivation rec {
   pname = "pgf";
-  inherit version;
+  version = "6.14.12";
 
   src = fetchurl {
     url = "mirror://sourceforge/libpgf/pgf-console-src-${version}.tar.gz";
@@ -29,7 +25,7 @@ stdenv.mkDerivation {
   meta = {
     homepage = "https://www.libpgf.org/";
     description = "Progressive Graphics Format command line program";
-    license = stdenv.lib.licenses.lgpl21Plus;
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.lgpl21Plus;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/graphics/piglit/default.nix b/pkgs/tools/graphics/piglit/default.nix
new file mode 100644
index 00000000000..0a4dfc4bafc
--- /dev/null
+++ b/pkgs/tools/graphics/piglit/default.nix
@@ -0,0 +1,77 @@
+{ stdenv
+, fetchFromGitLab
+, lib
+, cmake
+, freeglut
+, libGL
+, libGLU
+, libglvnd
+, makeWrapper
+, ninja
+, pkg-config
+, python3
+, waffle
+, wayland
+, libX11
+, libXrender
+, libxcb
+, libxkbcommon
+}:
+
+stdenv.mkDerivation rec {
+  pname = "piglit";
+  version = "unstable-2020-10-23";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "mesa";
+    repo = "piglit";
+    rev = "59e695c16fdcdd4ea4f16365f0e397a93cef7b80";
+    sha256 = "kx0+2Sdvdc3SbpAIl2OuGCWCpaLJC/7cXG+ZLvf92g8=";
+  };
+
+  buildInputs = [
+    freeglut
+    libGL
+    libGLU
+    libglvnd
+    libX11
+    libXrender
+    libxcb
+    libxkbcommon
+    (python3.withPackages (ps: with ps; [
+      Mako
+      numpy
+    ]))
+    waffle
+    wayland
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+    ninja
+    pkg-config
+  ];
+
+  # Find data dir: piglit searches for the data directory in some places, however as it is wrapped,
+  # it search in ../lib/.piglit-wrapped, we just replace the script name with "piglit" again.
+  prePatch = ''
+    substituteInPlace piglit \
+      --replace 'script_basename_noext = os.path.splitext(os.path.basename(__file__))[0]' 'script_basename_noext = "piglit"'
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/piglit \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libGL libglvnd ]} \
+      --prefix PATH : "${waffle}/bin"
+  '';
+
+  meta = with lib; {
+    description = "An OpenGL test suite, and test-suite runner";
+    homepage = "https://gitlab.freedesktop.org/mesa/piglit";
+    license = licenses.free; # custom license. See COPYING in the source repo.
+    platforms = platforms.mesaPlatforms;
+    maintainers = with maintainers; [ Flakebi ];
+  };
+}
diff --git a/pkgs/tools/graphics/pikchr/default.nix b/pkgs/tools/graphics/pikchr/default.nix
new file mode 100644
index 00000000000..432c70231d0
--- /dev/null
+++ b/pkgs/tools/graphics/pikchr/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation {
+  pname = "pikchr";
+  version = "unstable-2021-04-07";
+
+  src = fetchurl {
+    url = "https://pikchr.org/home/tarball/90b6d5b4a3834ff0/pikchr.tar.gz";
+    sha256 = "1cqpnljy12gl82rcbb7mwhgv9szcliwkbwwh67hzdv020h1scxym";
+  };
+
+  # can't open generated html files
+  postPatch = ''
+    substituteInPlace Makefile --replace open "test -f"
+  '';
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    install -Dm755 pikchr $out/bin/pikchr
+    install -Dm755 pikchr.out $out/lib/pikchr.o
+    install -Dm644 pikchr.h $out/include/pikchr.h
+  '';
+
+  doCheck = true;
+  checkTarget = "test";
+
+  meta = with lib; {
+    description = "A PIC-like markup language for diagrams in technical documentation";
+    homepage = "https://pikchr.org";
+    license = licenses.bsd0;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/graphics/ploticus/builder.sh b/pkgs/tools/graphics/ploticus/builder.sh
deleted file mode 100644
index 2fb16b259bd..00000000000
--- a/pkgs/tools/graphics/ploticus/builder.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-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/pkgs/tools/graphics/ploticus/default.nix b/pkgs/tools/graphics/ploticus/default.nix
index 409a91dba0d..50b7aad48a0 100644
--- a/pkgs/tools/graphics/ploticus/default.nix
+++ b/pkgs/tools/graphics/ploticus/default.nix
@@ -1,34 +1,74 @@
-{stdenv, fetchurl, zlib, libX11, libpng}:
+{ lib
+, stdenv
+, fetchurl
+, zlib
+, libX11
+, libpng
+, gd
+, freetype
+}:
 
-stdenv.mkDerivation {
-  name = "ploticus-2.42";
+stdenv.mkDerivation rec {
+  pname = "ploticus";
+  version = "2.42";
 
-  builder = ./builder.sh;
   src = fetchurl {
-    url = "mirror://sourceforge/ploticus/ploticus/2.41/pl241src.tar.gz";
-    sha256 = "1065r0nizjixi9sxxfxrnwg10r458i6fgsd23nrxa200rypvdk7c";
+    url = "mirror://sourceforge/ploticus/ploticus/${version}/ploticus${lib.replaceStrings [ "." ] [ "" ] version}_src.tar.gz";
+    sha256 = "PynkufQFIDqT7+yQDlgW2eG0OBghiB4kHAjKt91m4LA=";
   };
 
-  buildInputs = [ zlib libX11 libpng ];
+  patches = [
+    # Replace hardcoded FHS path with $out.
+    ./ploticus-install.patch
+
+    # Set the location of the PREFABS directory.
+    ./set-prefabs-dir.patch
+
+    # Use gd from Nixpkgs instead of the vendored one.
+    # This is required for non-ASCII fonts to work:
+    # http://ploticus.sourceforge.net/doc/fonts.html
+    ./use-gd-package.patch
+  ];
+
+  buildInputs = [
+    zlib
+    libX11
+    libpng
+    gd
+    freetype
+  ];
 
   hardeningDisable = [ "format" ];
 
-  patches = [ ./ploticus-install.patch ];
+  preBuild = ''
+    cd src
+  '';
+
+  preInstall = ''
+    mkdir -p "$out/bin"
+  '';
+
+  postInstall = ''
+    cd ..
+
+    # Install the “prefabs”.
+    mkdir -p "$out/share/ploticus/prefabs"
+    cp -rv prefabs/* "$out/share/ploticus/prefabs"
 
-  # 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
+    # Add aliases for backwards compatibility.
+    ln -s "pl" "$out/bin/ploticus"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A non-interactive software package for producing plots and charts";
-    longDescription = ''Ploticus is a free, GPL'd, non-interactive
+    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.'';
+      over colors, styles, options and details.
+    '';
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ pSub ];
     homepage = "http://ploticus.sourceforge.net/";
diff --git a/pkgs/tools/graphics/ploticus/set-prefabs-dir.patch b/pkgs/tools/graphics/ploticus/set-prefabs-dir.patch
new file mode 100644
index 00000000000..82871654fde
--- /dev/null
+++ b/pkgs/tools/graphics/ploticus/set-prefabs-dir.patch
@@ -0,0 +1,11 @@
+--- a/src/pl.h
++++ b/src/pl.h
+@@ -8,7 +8,7 @@
+ #include <stdlib.h>
+ #include "plg.h"
+ 
+-#define PREFABS_DIR ""  	 /* INSTALLERS can set this to a valid pathname, so that users don't need to set PLOTICUS_PREFABS env var */
++#define PREFABS_DIR "@out@/share/ploticus/prefabs"  	 /* INSTALLERS can set this to a valid pathname, so that users don't need to set PLOTICUS_PREFABS env var */
+ 
+ #define PLVERSION "2.42-May2013" /* see also the Copyright page, and page headers and footers */
+ 
diff --git a/pkgs/tools/graphics/ploticus/use-gd-package.patch b/pkgs/tools/graphics/ploticus/use-gd-package.patch
new file mode 100644
index 00000000000..9a72489ddaa
--- /dev/null
+++ b/pkgs/tools/graphics/ploticus/use-gd-package.patch
@@ -0,0 +1,34 @@
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -91,10 +91,10 @@
+ 
+ 
+ ########### Option 1: use bundled GD16 (PNG only).  Requires libpng and zlib.
+-exetarget: plpng 
+-GD16LIBS = -lpng -lz
+-GD16H =  -I/usr/local/include
+-ZFLAG = -DWZ
++# exetarget: plpng 
++# GD16LIBS = -lpng -lz
++# GD16H =  -I/usr/local/include
++# ZFLAG = -DWZ
+ ### These should remain commented unless your libs are not in usual places, then alter to suit...
+ ### GD16LIBS = /home/scg/lib/libpng.a /home/scg/lib/libz.a
+ ### GD16H = -I/home/scg/lib
+@@ -111,11 +111,11 @@
+ 
+ ########### Option 4: use your own GD resource with FreeType2 (ttf) fonts enabled.  
+ ###########           Requires GD 1.84+, libpng, zlib, libjpeg and libfreetype
+-# exetarget: plgd18 
+-# GD18LIBS = -lgd -lpng -lz -ljpeg -lfreetype
+-# GD18H = 
+-# GDFREETYPE = -DGDFREETYPE
+-# ZFLAG = -DWZ
++exetarget: plgd18 
++GD18LIBS = -lgd -lpng -lz -ljpeg -lfreetype
++GD18H = 
++GDFREETYPE = -DGDFREETYPE
++ZFLAG = -DWZ
+ 
+ ########### Option 5: don't use GD at all.
+ # exetarget: plnogd 
diff --git a/pkgs/tools/graphics/plotutils/default.nix b/pkgs/tools/graphics/plotutils/default.nix
index 7292b2ac37b..001b4cd174b 100644
--- a/pkgs/tools/graphics/plotutils/default.nix
+++ b/pkgs/tools/graphics/plotutils/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, libpng, autoreconfHook }:
+{ fetchurl, lib, stdenv, libpng, autoreconfHook }:
 
 # debian splits this package into plotutils and libplot2c2
 
@@ -51,8 +51,8 @@ stdenv.mkDerivation rec {
 
     homepage = "https://www.gnu.org/software/plotutils/";
 
-    license = stdenv.lib.licenses.gpl2Plus;
-    maintainers = [ stdenv.lib.maintainers.marcweber ];
-    platforms = stdenv.lib.platforms.unix;
+    license = lib.licenses.gpl2Plus;
+    maintainers = [ lib.maintainers.marcweber ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/graphics/pngcheck/default.nix b/pkgs/tools/graphics/pngcheck/default.nix
index ba5082ac304..579dcad4ccb 100644
--- a/pkgs/tools/graphics/pngcheck/default.nix
+++ b/pkgs/tools/graphics/pngcheck/default.nix
@@ -1,11 +1,11 @@
-{ stdenv, fetchurl, zlib }:
+{ lib, stdenv, fetchurl, zlib }:
 
 stdenv.mkDerivation rec {
-  name = "pngcheck-2.3.0";
+  name = "pngcheck-3.0.2";
 
   src = fetchurl {
     url = "mirror://sourceforge/png-mng/${name}.tar.gz";
-    sha256 = "0pzkj1bb4kdybk6vbfq9s0wzdm5szmrgixkas3xmbpv4mhws1w3p";
+    sha256 = "sha256-DX4mLyQRb93yhHqM61yS2fXybvtC6f/2PsK7dnYTHKc=";
   };
 
   hardeningDisable = [ "format" ];
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.free;
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/graphics/pngcrush/default.nix b/pkgs/tools/graphics/pngcrush/default.nix
index 5bc52b92f0d..18a156ea504 100644
--- a/pkgs/tools/graphics/pngcrush/default.nix
+++ b/pkgs/tools/graphics/pngcrush/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libpng }:
+{ lib, stdenv, fetchurl, libpng }:
 
 stdenv.mkDerivation rec {
   name = "pngcrush-1.8.13";
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "0l43c59d6v9l0g07z3q3ywhb8xb3vz74llv3mna0izk9bj6aqkiv";
   };
 
-  makeFlags = [ "CC=cc" "LD=cc" ];      # gcc and/or clang compat
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" "LD=${stdenv.cc.targetPrefix}cc" ];      # gcc and/or clang compat
 
   configurePhase = ''
     sed -i s,/usr,$out, Makefile
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "http://pmt.sourceforge.net/pngcrush";
     description = "A PNG optimizer";
-    license = stdenv.lib.licenses.free;
-    platforms = with stdenv.lib.platforms; linux ++ darwin;
+    license = lib.licenses.free;
+    platforms = with lib.platforms; linux ++ darwin;
   };
 }
diff --git a/pkgs/tools/graphics/pngnq/default.nix b/pkgs/tools/graphics/pngnq/default.nix
index ca1edda454e..bec86e20ce3 100644
--- a/pkgs/tools/graphics/pngnq/default.nix
+++ b/pkgs/tools/graphics/pngnq/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, libpng, zlib }:
+{ lib, stdenv, fetchurl, pkg-config, libpng, zlib }:
 
 stdenv.mkDerivation rec {
   name = "pngnq-1.1";
@@ -8,14 +8,14 @@ stdenv.mkDerivation rec {
     sha256 = "1qmnnl846agg55i7h4vmrn11lgb8kg6gvs8byqz34bdkjh5gwiy1";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libpng zlib ];
 
   patchPhase = ''
     sed -i '/png.h/a \#include <zlib.h>' src/rwpng.c
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://pngnq.sourceforge.net/";
     description = "A PNG quantizer";
     license = licenses.bsd3;
diff --git a/pkgs/tools/graphics/pngout/default.nix b/pkgs/tools/graphics/pngout/default.nix
index 33a62478a4b..d1d069c7ff7 100644
--- a/pkgs/tools/graphics/pngout/default.nix
+++ b/pkgs/tools/graphics/pngout/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 let
   folder = if stdenv.hostPlatform.system == "i686-linux" then "i686"
@@ -16,7 +16,7 @@ stdenv.mkDerivation {
   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 ''
@@ -26,8 +26,8 @@ stdenv.mkDerivation {
 
   meta = {
     description = "A tool that aggressively optimizes the sizes of PNG images";
-    license = stdenv.lib.licenses.unfree;
+    license = lib.licenses.unfree;
     homepage = "http://advsys.net/ken/utils.htm";
-    maintainers = [ stdenv.lib.maintainers.sander ];
+    maintainers = [ lib.maintainers.sander ];
   };
 }
diff --git a/pkgs/tools/graphics/pngquant/default.nix b/pkgs/tools/graphics/pngquant/default.nix
index 2c9e3b272e7..7463e2a45e0 100644
--- a/pkgs/tools/graphics/pngquant/default.nix
+++ b/pkgs/tools/graphics/pngquant/default.nix
@@ -1,27 +1,30 @@
-{ stdenv, fetchFromGitHub, pkgconfig, libpng, zlib, lcms2 }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, libpng, zlib, lcms2 }:
 
 stdenv.mkDerivation rec {
   pname = "pngquant";
-  version = "2.12.5";
+  version = "2.14.1";
 
   src = fetchFromGitHub {
-    owner = "pornel";
+    owner = "kornelski";
     repo = "pngquant";
     rev = version;
-    sha256 = "0sq398iv5cacblz6pb4j2hn16cnszsbkahikdpfq84rb9bj0ya40";
+    sha256 = "054hi33qp3jc7hv0141wi8drwdg24v5zfp8znwjmz4mcdls8vxbb";
     fetchSubmodules = true;
   };
 
   preConfigure = "patchShebangs .";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libpng zlib lcms2 ];
 
-  meta = with stdenv.lib; {
+  doCheck = true;
+
+  meta = with lib; {
     homepage = "https://pngquant.org/";
     description = "A tool to convert 24/32-bit RGBA PNGs to 8-bit palette with alpha channel preserved";
+    changelog = "https://github.com/kornelski/pngquant/raw/${version}/CHANGELOG";
     platforms = platforms.unix;
-    license = licenses.gpl3;
+    license = with licenses; [ gpl3Plus hpnd bsd2 ];
     maintainers = [ maintainers.volth ];
   };
 }
diff --git a/pkgs/tools/graphics/pngtoico/default.nix b/pkgs/tools/graphics/pngtoico/default.nix
index 2300c65f24b..7eabfb89d5a 100644
--- a/pkgs/tools/graphics/pngtoico/default.nix
+++ b/pkgs/tools/graphics/pngtoico/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libpng }:
+{ lib, stdenv, fetchurl, libpng }:
 
 stdenv.mkDerivation {
   name = "pngtoico-1.0";
@@ -17,7 +17,7 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.gpl2Plus;
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/graphics/povray/default.nix b/pkgs/tools/graphics/povray/default.nix
index 94ce3e7f06b..735bba8bd4f 100644
--- a/pkgs/tools/graphics/povray/default.nix
+++ b/pkgs/tools/graphics/povray/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoconf, automake, boost
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, boost
 , zlib, libpng, libjpeg, libtiff, xlibsWrapper, SDL
 }:
 
@@ -40,7 +40,7 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.povray.org/";
     description = "Persistence of Vision Raytracer";
     license = licenses.free;
diff --git a/pkgs/tools/graphics/pstoedit/default.nix b/pkgs/tools/graphics/pstoedit/default.nix
index ec06088ae52..57e16a4925a 100644
--- a/pkgs/tools/graphics/pstoedit/default.nix
+++ b/pkgs/tools/graphics/pstoedit/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, darwin, lib
+{ stdenv, fetchurl, pkg-config, darwin, lib
 , zlib, ghostscript, imagemagick, plotutils, gd
 , libjpeg, libwebp, libiconv
 }:
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
   patches = [ ./pstoedit-gs-9.22-compat.patch  ];
 
   outputs = [ "out" "dev" ];
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ zlib ghostscript imagemagick plotutils gd libjpeg libwebp ]
   ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
     libiconv ApplicationServices
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
     substituteInPlace config/pstoedit.pc.in --replace '@LIBPNG_LDFLAGS@' ""
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Translates PostScript and PDF graphics into other vector formats";
     homepage = "https://sourceforge.net/projects/pstoedit/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/graphics/puppeteer-cli/default.nix b/pkgs/tools/graphics/puppeteer-cli/default.nix
new file mode 100644
index 00000000000..20dab27ddf0
--- /dev/null
+++ b/pkgs/tools/graphics/puppeteer-cli/default.nix
@@ -0,0 +1,21 @@
+{ fetchFromGitHub, makeWrapper, chromium, mkYarnPackage
+}:
+
+mkYarnPackage rec {
+  pname = "puppeteer-cli";
+  version = "1.5.1";
+  src = fetchFromGitHub {
+    owner = "JarvusInnovations";
+    repo = "puppeteer-cli";
+    rev = "v${version}";
+    sha256 = "0xrb8r4qc9ds7wmfd30nslnkqylxqfwr4gqf7b30v651sjyds29x";
+  };
+  packageJSON = ./package.json;
+  yarnLock = ./yarn.lock;
+  yarnNix = ./yarn.nix;
+  nativeBuildInputs = [ makeWrapper ];
+  postInstall = ''
+    wrapProgram $out/bin/puppeteer \
+      --set PUPPETEER_EXECUTABLE_PATH ${chromium}/bin/chromium
+  '';
+}
diff --git a/pkgs/tools/graphics/puppeteer-cli/package.json b/pkgs/tools/graphics/puppeteer-cli/package.json
new file mode 100644
index 00000000000..993d5122bbb
--- /dev/null
+++ b/pkgs/tools/graphics/puppeteer-cli/package.json
@@ -0,0 +1,18 @@
+{
+  "name": "puppeteer-cli",
+  "version": "1.5.1",
+  "description": "A command-line wrapper for generating PDF prints and PNG screenshots with Puppeteer. Aims to be a easy replacement for the deprecated wkhtmltopdf.",
+  "bin": {
+    "puppeteer": "./index.js"
+  },
+  "author": "Chris Alfano <chris@jarv.us>",
+  "license": "MIT",
+  "repository": "JarvusInnovations/puppeteer-cli",
+  "dependencies": {
+    "file-url": "^3.0.0",
+    "is-url": "^1.2.4",
+    "puppeteer": "^2.0.0",
+    "url-parse": "^1.4.7",
+    "yargs": "^13.3.0"
+  }
+}
diff --git a/pkgs/tools/graphics/puppeteer-cli/yarn.lock b/pkgs/tools/graphics/puppeteer-cli/yarn.lock
new file mode 100644
index 00000000000..2e462f69abb
--- /dev/null
+++ b/pkgs/tools/graphics/puppeteer-cli/yarn.lock
@@ -0,0 +1,490 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@types/mime-types@^2.1.0":
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.0.tgz#9ca52cda363f699c69466c2a6ccdaad913ea7a73"
+  integrity sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM=
+
+agent-base@5:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c"
+  integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==
+
+ansi-regex@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+  integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-styles@^3.2.0:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+  dependencies:
+    color-convert "^1.9.0"
+
+async-limiter@~1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
+  integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+
+balanced-match@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+  integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+brace-expansion@^1.1.7:
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+  dependencies:
+    balanced-match "^1.0.0"
+    concat-map "0.0.1"
+
+buffer-crc32@~0.2.3:
+  version "0.2.13"
+  resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+  integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
+
+buffer-from@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+  integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+camelcase@^5.0.0:
+  version "5.3.1"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+  integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+cliui@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+  integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+  dependencies:
+    string-width "^3.1.0"
+    strip-ansi "^5.2.0"
+    wrap-ansi "^5.1.0"
+
+color-convert@^1.9.0:
+  version "1.9.3"
+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+  integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+  dependencies:
+    color-name "1.1.3"
+
+color-name@1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+  integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.6.2:
+  version "1.6.2"
+  resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+  integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+  dependencies:
+    buffer-from "^1.0.0"
+    inherits "^2.0.3"
+    readable-stream "^2.2.2"
+    typedarray "^0.0.6"
+
+core-util-is@~1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+  integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+debug@4, debug@^4.1.0:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+  integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+  dependencies:
+    ms "^2.1.1"
+
+debug@^2.6.9:
+  version "2.6.9"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+  dependencies:
+    ms "2.0.0"
+
+decamelize@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+  integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+emoji-regex@^7.0.1:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+  integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+extract-zip@^1.6.6:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927"
+  integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==
+  dependencies:
+    concat-stream "^1.6.2"
+    debug "^2.6.9"
+    mkdirp "^0.5.4"
+    yauzl "^2.10.0"
+
+fd-slicer@~1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
+  integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
+  dependencies:
+    pend "~1.2.0"
+
+file-url@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/file-url/-/file-url-3.0.0.tgz#247a586a746ce9f7a8ed05560290968afc262a77"
+  integrity sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==
+
+find-up@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+  integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+  dependencies:
+    locate-path "^3.0.0"
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+get-caller-file@^2.0.1:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+  integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+glob@^7.1.3:
+  version "7.1.6"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+  integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.0.4"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+https-proxy-agent@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b"
+  integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==
+  dependencies:
+    agent-base "5"
+    debug "4"
+
+inflight@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+  integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+  dependencies:
+    once "^1.3.0"
+    wrappy "1"
+
+inherits@2, inherits@^2.0.3, inherits@~2.0.3:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+is-fullwidth-code-point@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+  integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-url@^1.2.4:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
+  integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
+
+isarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+  integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+locate-path@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+  integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+  dependencies:
+    p-locate "^3.0.0"
+    path-exists "^3.0.0"
+
+mime-db@1.44.0:
+  version "1.44.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
+  integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==
+
+mime-types@^2.1.25:
+  version "2.1.27"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f"
+  integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==
+  dependencies:
+    mime-db "1.44.0"
+
+mime@^2.0.3:
+  version "2.4.6"
+  resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1"
+  integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==
+
+minimatch@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+  integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+minimist@^1.2.5:
+  version "1.2.5"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+  integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+
+mkdirp@^0.5.4:
+  version "0.5.5"
+  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+  integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+  dependencies:
+    minimist "^1.2.5"
+
+ms@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+  integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@^2.1.1:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+once@^1.3.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+  dependencies:
+    wrappy "1"
+
+p-limit@^2.0.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+  integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+  dependencies:
+    p-try "^2.0.0"
+
+p-locate@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+  integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+  dependencies:
+    p-limit "^2.0.0"
+
+p-try@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+path-exists@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+  integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-is-absolute@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+pend@~1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+  integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
+
+process-nextick-args@~2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+  integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+progress@^2.0.1:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+proxy-from-env@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+  integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+puppeteer@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-2.1.1.tgz#ccde47c2a688f131883b50f2d697bd25189da27e"
+  integrity sha512-LWzaDVQkk1EPiuYeTOj+CZRIjda4k2s5w4MK4xoH2+kgWV/SDlkYHmxatDdtYrciHUKSXTsGgPgPP8ILVdBsxg==
+  dependencies:
+    "@types/mime-types" "^2.1.0"
+    debug "^4.1.0"
+    extract-zip "^1.6.6"
+    https-proxy-agent "^4.0.0"
+    mime "^2.0.3"
+    mime-types "^2.1.25"
+    progress "^2.0.1"
+    proxy-from-env "^1.0.0"
+    rimraf "^2.6.1"
+    ws "^6.1.0"
+
+querystringify@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
+  integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
+
+readable-stream@^2.2.2:
+  version "2.3.7"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+  integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+  dependencies:
+    core-util-is "~1.0.0"
+    inherits "~2.0.3"
+    isarray "~1.0.0"
+    process-nextick-args "~2.0.0"
+    safe-buffer "~5.1.1"
+    string_decoder "~1.1.1"
+    util-deprecate "~1.0.1"
+
+require-directory@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+  integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+  integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
+requires-port@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+  integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
+
+rimraf@^2.6.1:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+  integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+  dependencies:
+    glob "^7.1.3"
+
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+set-blocking@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+  integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+string-width@^3.0.0, string-width@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+  integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+  dependencies:
+    emoji-regex "^7.0.1"
+    is-fullwidth-code-point "^2.0.0"
+    strip-ansi "^5.1.0"
+
+string_decoder@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+  dependencies:
+    safe-buffer "~5.1.0"
+
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+  integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+  dependencies:
+    ansi-regex "^4.1.0"
+
+typedarray@^0.0.6:
+  version "0.0.6"
+  resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+  integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+url-parse@^1.4.7:
+  version "1.4.7"
+  resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278"
+  integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==
+  dependencies:
+    querystringify "^2.1.1"
+    requires-port "^1.0.0"
+
+util-deprecate@~1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+  integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+which-module@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+  integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+wrap-ansi@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+  integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+  dependencies:
+    ansi-styles "^3.2.0"
+    string-width "^3.0.0"
+    strip-ansi "^5.0.0"
+
+wrappy@1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+  integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+ws@^6.1.0:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"
+  integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==
+  dependencies:
+    async-limiter "~1.0.0"
+
+y18n@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+  integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+
+yargs-parser@^13.1.2:
+  version "13.1.2"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
+  integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
+  dependencies:
+    camelcase "^5.0.0"
+    decamelize "^1.2.0"
+
+yargs@^13.3.0:
+  version "13.3.2"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
+  integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
+  dependencies:
+    cliui "^5.0.0"
+    find-up "^3.0.0"
+    get-caller-file "^2.0.1"
+    require-directory "^2.1.1"
+    require-main-filename "^2.0.0"
+    set-blocking "^2.0.0"
+    string-width "^3.0.0"
+    which-module "^2.0.0"
+    y18n "^4.0.0"
+    yargs-parser "^13.1.2"
+
+yauzl@^2.10.0:
+  version "2.10.0"
+  resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
+  integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
+  dependencies:
+    buffer-crc32 "~0.2.3"
+    fd-slicer "~1.1.0"
diff --git a/pkgs/tools/graphics/puppeteer-cli/yarn.nix b/pkgs/tools/graphics/puppeteer-cli/yarn.nix
new file mode 100644
index 00000000000..773acc84f35
--- /dev/null
+++ b/pkgs/tools/graphics/puppeteer-cli/yarn.nix
@@ -0,0 +1,605 @@
+{ fetchurl, fetchgit, linkFarm, runCommandNoCC, gnutar }: rec {
+  offline_cache = linkFarm "offline" packages;
+  packages = [
+    {
+      name = "_types_mime_types___mime_types_2.1.0.tgz";
+      path = fetchurl {
+        name = "_types_mime_types___mime_types_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.0.tgz";
+        sha1 = "9ca52cda363f699c69466c2a6ccdaad913ea7a73";
+      };
+    }
+    {
+      name = "agent_base___agent_base_5.1.1.tgz";
+      path = fetchurl {
+        name = "agent_base___agent_base_5.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz";
+        sha1 = "e8fb3f242959db44d63be665db7a8e739537a32c";
+      };
+    }
+    {
+      name = "ansi_regex___ansi_regex_4.1.0.tgz";
+      path = fetchurl {
+        name = "ansi_regex___ansi_regex_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz";
+        sha1 = "8b9f8f08cf1acb843756a839ca8c7e3168c51997";
+      };
+    }
+    {
+      name = "ansi_styles___ansi_styles_3.2.1.tgz";
+      path = fetchurl {
+        name = "ansi_styles___ansi_styles_3.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz";
+        sha1 = "41fbb20243e50b12be0f04b8dedbf07520ce841d";
+      };
+    }
+    {
+      name = "async_limiter___async_limiter_1.0.1.tgz";
+      path = fetchurl {
+        name = "async_limiter___async_limiter_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz";
+        sha1 = "dd379e94f0db8310b08291f9d64c3209766617fd";
+      };
+    }
+    {
+      name = "balanced_match___balanced_match_1.0.0.tgz";
+      path = fetchurl {
+        name = "balanced_match___balanced_match_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz";
+        sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
+      };
+    }
+    {
+      name = "brace_expansion___brace_expansion_1.1.11.tgz";
+      path = fetchurl {
+        name = "brace_expansion___brace_expansion_1.1.11.tgz";
+        url  = "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz";
+        sha1 = "3c7fcbf529d87226f3d2f52b966ff5271eb441dd";
+      };
+    }
+    {
+      name = "buffer_crc32___buffer_crc32_0.2.13.tgz";
+      path = fetchurl {
+        name = "buffer_crc32___buffer_crc32_0.2.13.tgz";
+        url  = "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz";
+        sha1 = "0d333e3f00eac50aa1454abd30ef8c2a5d9a7242";
+      };
+    }
+    {
+      name = "buffer_from___buffer_from_1.1.1.tgz";
+      path = fetchurl {
+        name = "buffer_from___buffer_from_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz";
+        sha1 = "32713bc028f75c02fdb710d7c7bcec1f2c6070ef";
+      };
+    }
+    {
+      name = "camelcase___camelcase_5.3.1.tgz";
+      path = fetchurl {
+        name = "camelcase___camelcase_5.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz";
+        sha1 = "e3c9b31569e106811df242f715725a1f4c494320";
+      };
+    }
+    {
+      name = "cliui___cliui_5.0.0.tgz";
+      path = fetchurl {
+        name = "cliui___cliui_5.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz";
+        sha1 = "deefcfdb2e800784aa34f46fa08e06851c7bbbc5";
+      };
+    }
+    {
+      name = "color_convert___color_convert_1.9.3.tgz";
+      path = fetchurl {
+        name = "color_convert___color_convert_1.9.3.tgz";
+        url  = "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz";
+        sha1 = "bb71850690e1f136567de629d2d5471deda4c1e8";
+      };
+    }
+    {
+      name = "color_name___color_name_1.1.3.tgz";
+      path = fetchurl {
+        name = "color_name___color_name_1.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz";
+        sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25";
+      };
+    }
+    {
+      name = "concat_map___concat_map_0.0.1.tgz";
+      path = fetchurl {
+        name = "concat_map___concat_map_0.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz";
+        sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
+      };
+    }
+    {
+      name = "concat_stream___concat_stream_1.6.2.tgz";
+      path = fetchurl {
+        name = "concat_stream___concat_stream_1.6.2.tgz";
+        url  = "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz";
+        sha1 = "904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34";
+      };
+    }
+    {
+      name = "core_util_is___core_util_is_1.0.2.tgz";
+      path = fetchurl {
+        name = "core_util_is___core_util_is_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz";
+        sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
+      };
+    }
+    {
+      name = "debug___debug_4.1.1.tgz";
+      path = fetchurl {
+        name = "debug___debug_4.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz";
+        sha1 = "3b72260255109c6b589cee050f1d516139664791";
+      };
+    }
+    {
+      name = "debug___debug_2.6.9.tgz";
+      path = fetchurl {
+        name = "debug___debug_2.6.9.tgz";
+        url  = "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz";
+        sha1 = "5d128515df134ff327e90a4c93f4e077a536341f";
+      };
+    }
+    {
+      name = "decamelize___decamelize_1.2.0.tgz";
+      path = fetchurl {
+        name = "decamelize___decamelize_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz";
+        sha1 = "f6534d15148269b20352e7bee26f501f9a191290";
+      };
+    }
+    {
+      name = "emoji_regex___emoji_regex_7.0.3.tgz";
+      path = fetchurl {
+        name = "emoji_regex___emoji_regex_7.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz";
+        sha1 = "933a04052860c85e83c122479c4748a8e4c72156";
+      };
+    }
+    {
+      name = "extract_zip___extract_zip_1.7.0.tgz";
+      path = fetchurl {
+        name = "extract_zip___extract_zip_1.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz";
+        sha1 = "556cc3ae9df7f452c493a0cfb51cc30277940927";
+      };
+    }
+    {
+      name = "fd_slicer___fd_slicer_1.1.0.tgz";
+      path = fetchurl {
+        name = "fd_slicer___fd_slicer_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz";
+        sha1 = "25c7c89cb1f9077f8891bbe61d8f390eae256f1e";
+      };
+    }
+    {
+      name = "file_url___file_url_3.0.0.tgz";
+      path = fetchurl {
+        name = "file_url___file_url_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/file-url/-/file-url-3.0.0.tgz";
+        sha1 = "247a586a746ce9f7a8ed05560290968afc262a77";
+      };
+    }
+    {
+      name = "find_up___find_up_3.0.0.tgz";
+      path = fetchurl {
+        name = "find_up___find_up_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz";
+        sha1 = "49169f1d7993430646da61ecc5ae355c21c97b73";
+      };
+    }
+    {
+      name = "fs.realpath___fs.realpath_1.0.0.tgz";
+      path = fetchurl {
+        name = "fs.realpath___fs.realpath_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz";
+        sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
+      };
+    }
+    {
+      name = "get_caller_file___get_caller_file_2.0.5.tgz";
+      path = fetchurl {
+        name = "get_caller_file___get_caller_file_2.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz";
+        sha1 = "4f94412a82db32f36e3b0b9741f8a97feb031f7e";
+      };
+    }
+    {
+      name = "glob___glob_7.1.6.tgz";
+      path = fetchurl {
+        name = "glob___glob_7.1.6.tgz";
+        url  = "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz";
+        sha1 = "141f33b81a7c2492e125594307480c46679278a6";
+      };
+    }
+    {
+      name = "https_proxy_agent___https_proxy_agent_4.0.0.tgz";
+      path = fetchurl {
+        name = "https_proxy_agent___https_proxy_agent_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz";
+        sha1 = "702b71fb5520a132a66de1f67541d9e62154d82b";
+      };
+    }
+    {
+      name = "inflight___inflight_1.0.6.tgz";
+      path = fetchurl {
+        name = "inflight___inflight_1.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz";
+        sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
+      };
+    }
+    {
+      name = "inherits___inherits_2.0.4.tgz";
+      path = fetchurl {
+        name = "inherits___inherits_2.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz";
+        sha1 = "0fa2c64f932917c3433a0ded55363aae37416b7c";
+      };
+    }
+    {
+      name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz";
+      path = fetchurl {
+        name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz";
+        sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f";
+      };
+    }
+    {
+      name = "is_url___is_url_1.2.4.tgz";
+      path = fetchurl {
+        name = "is_url___is_url_1.2.4.tgz";
+        url  = "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz";
+        sha1 = "04a4df46d28c4cff3d73d01ff06abeb318a1aa52";
+      };
+    }
+    {
+      name = "isarray___isarray_1.0.0.tgz";
+      path = fetchurl {
+        name = "isarray___isarray_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz";
+        sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
+      };
+    }
+    {
+      name = "locate_path___locate_path_3.0.0.tgz";
+      path = fetchurl {
+        name = "locate_path___locate_path_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz";
+        sha1 = "dbec3b3ab759758071b58fe59fc41871af21400e";
+      };
+    }
+    {
+      name = "mime_db___mime_db_1.44.0.tgz";
+      path = fetchurl {
+        name = "mime_db___mime_db_1.44.0.tgz";
+        url  = "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz";
+        sha1 = "fa11c5eb0aca1334b4233cb4d52f10c5a6272f92";
+      };
+    }
+    {
+      name = "mime_types___mime_types_2.1.27.tgz";
+      path = fetchurl {
+        name = "mime_types___mime_types_2.1.27.tgz";
+        url  = "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz";
+        sha1 = "47949f98e279ea53119f5722e0f34e529bec009f";
+      };
+    }
+    {
+      name = "mime___mime_2.4.6.tgz";
+      path = fetchurl {
+        name = "mime___mime_2.4.6.tgz";
+        url  = "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz";
+        sha1 = "e5b407c90db442f2beb5b162373d07b69affa4d1";
+      };
+    }
+    {
+      name = "minimatch___minimatch_3.0.4.tgz";
+      path = fetchurl {
+        name = "minimatch___minimatch_3.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz";
+        sha1 = "5166e286457f03306064be5497e8dbb0c3d32083";
+      };
+    }
+    {
+      name = "minimist___minimist_1.2.5.tgz";
+      path = fetchurl {
+        name = "minimist___minimist_1.2.5.tgz";
+        url  = "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz";
+        sha1 = "67d66014b66a6a8aaa0c083c5fd58df4e4e97602";
+      };
+    }
+    {
+      name = "mkdirp___mkdirp_0.5.5.tgz";
+      path = fetchurl {
+        name = "mkdirp___mkdirp_0.5.5.tgz";
+        url  = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz";
+        sha1 = "d91cefd62d1436ca0f41620e251288d420099def";
+      };
+    }
+    {
+      name = "ms___ms_2.0.0.tgz";
+      path = fetchurl {
+        name = "ms___ms_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz";
+        sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8";
+      };
+    }
+    {
+      name = "ms___ms_2.1.2.tgz";
+      path = fetchurl {
+        name = "ms___ms_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz";
+        sha1 = "d09d1f357b443f493382a8eb3ccd183872ae6009";
+      };
+    }
+    {
+      name = "once___once_1.4.0.tgz";
+      path = fetchurl {
+        name = "once___once_1.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz";
+        sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
+      };
+    }
+    {
+      name = "p_limit___p_limit_2.3.0.tgz";
+      path = fetchurl {
+        name = "p_limit___p_limit_2.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz";
+        sha1 = "3dd33c647a214fdfffd835933eb086da0dc21db1";
+      };
+    }
+    {
+      name = "p_locate___p_locate_3.0.0.tgz";
+      path = fetchurl {
+        name = "p_locate___p_locate_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz";
+        sha1 = "322d69a05c0264b25997d9f40cd8a891ab0064a4";
+      };
+    }
+    {
+      name = "p_try___p_try_2.2.0.tgz";
+      path = fetchurl {
+        name = "p_try___p_try_2.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz";
+        sha1 = "cb2868540e313d61de58fafbe35ce9004d5540e6";
+      };
+    }
+    {
+      name = "path_exists___path_exists_3.0.0.tgz";
+      path = fetchurl {
+        name = "path_exists___path_exists_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz";
+        sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515";
+      };
+    }
+    {
+      name = "path_is_absolute___path_is_absolute_1.0.1.tgz";
+      path = fetchurl {
+        name = "path_is_absolute___path_is_absolute_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
+        sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
+      };
+    }
+    {
+      name = "pend___pend_1.2.0.tgz";
+      path = fetchurl {
+        name = "pend___pend_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz";
+        sha1 = "7a57eb550a6783f9115331fcf4663d5c8e007a50";
+      };
+    }
+    {
+      name = "process_nextick_args___process_nextick_args_2.0.1.tgz";
+      path = fetchurl {
+        name = "process_nextick_args___process_nextick_args_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz";
+        sha1 = "7820d9b16120cc55ca9ae7792680ae7dba6d7fe2";
+      };
+    }
+    {
+      name = "progress___progress_2.0.3.tgz";
+      path = fetchurl {
+        name = "progress___progress_2.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz";
+        sha1 = "7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8";
+      };
+    }
+    {
+      name = "proxy_from_env___proxy_from_env_1.1.0.tgz";
+      path = fetchurl {
+        name = "proxy_from_env___proxy_from_env_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz";
+        sha1 = "e102f16ca355424865755d2c9e8ea4f24d58c3e2";
+      };
+    }
+    {
+      name = "puppeteer___puppeteer_2.1.1.tgz";
+      path = fetchurl {
+        name = "puppeteer___puppeteer_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/puppeteer/-/puppeteer-2.1.1.tgz";
+        sha1 = "ccde47c2a688f131883b50f2d697bd25189da27e";
+      };
+    }
+    {
+      name = "querystringify___querystringify_2.1.1.tgz";
+      path = fetchurl {
+        name = "querystringify___querystringify_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz";
+        sha1 = "60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e";
+      };
+    }
+    {
+      name = "readable_stream___readable_stream_2.3.7.tgz";
+      path = fetchurl {
+        name = "readable_stream___readable_stream_2.3.7.tgz";
+        url  = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz";
+        sha1 = "1eca1cf711aef814c04f62252a36a62f6cb23b57";
+      };
+    }
+    {
+      name = "require_directory___require_directory_2.1.1.tgz";
+      path = fetchurl {
+        name = "require_directory___require_directory_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz";
+        sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42";
+      };
+    }
+    {
+      name = "require_main_filename___require_main_filename_2.0.0.tgz";
+      path = fetchurl {
+        name = "require_main_filename___require_main_filename_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz";
+        sha1 = "d0b329ecc7cc0f61649f62215be69af54aa8989b";
+      };
+    }
+    {
+      name = "requires_port___requires_port_1.0.0.tgz";
+      path = fetchurl {
+        name = "requires_port___requires_port_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz";
+        sha1 = "925d2601d39ac485e091cf0da5c6e694dc3dcaff";
+      };
+    }
+    {
+      name = "rimraf___rimraf_2.7.1.tgz";
+      path = fetchurl {
+        name = "rimraf___rimraf_2.7.1.tgz";
+        url  = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz";
+        sha1 = "35797f13a7fdadc566142c29d4f07ccad483e3ec";
+      };
+    }
+    {
+      name = "safe_buffer___safe_buffer_5.1.2.tgz";
+      path = fetchurl {
+        name = "safe_buffer___safe_buffer_5.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz";
+        sha1 = "991ec69d296e0313747d59bdfd2b745c35f8828d";
+      };
+    }
+    {
+      name = "set_blocking___set_blocking_2.0.0.tgz";
+      path = fetchurl {
+        name = "set_blocking___set_blocking_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz";
+        sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7";
+      };
+    }
+    {
+      name = "string_width___string_width_3.1.0.tgz";
+      path = fetchurl {
+        name = "string_width___string_width_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz";
+        sha1 = "22767be21b62af1081574306f69ac51b62203961";
+      };
+    }
+    {
+      name = "string_decoder___string_decoder_1.1.1.tgz";
+      path = fetchurl {
+        name = "string_decoder___string_decoder_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz";
+        sha1 = "9cf1611ba62685d7030ae9e4ba34149c3af03fc8";
+      };
+    }
+    {
+      name = "strip_ansi___strip_ansi_5.2.0.tgz";
+      path = fetchurl {
+        name = "strip_ansi___strip_ansi_5.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz";
+        sha1 = "8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae";
+      };
+    }
+    {
+      name = "typedarray___typedarray_0.0.6.tgz";
+      path = fetchurl {
+        name = "typedarray___typedarray_0.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz";
+        sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777";
+      };
+    }
+    {
+      name = "url_parse___url_parse_1.4.7.tgz";
+      path = fetchurl {
+        name = "url_parse___url_parse_1.4.7.tgz";
+        url  = "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz";
+        sha1 = "a8a83535e8c00a316e403a5db4ac1b9b853ae278";
+      };
+    }
+    {
+      name = "util_deprecate___util_deprecate_1.0.2.tgz";
+      path = fetchurl {
+        name = "util_deprecate___util_deprecate_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz";
+        sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
+      };
+    }
+    {
+      name = "which_module___which_module_2.0.0.tgz";
+      path = fetchurl {
+        name = "which_module___which_module_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz";
+        sha1 = "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a";
+      };
+    }
+    {
+      name = "wrap_ansi___wrap_ansi_5.1.0.tgz";
+      path = fetchurl {
+        name = "wrap_ansi___wrap_ansi_5.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz";
+        sha1 = "1fd1f67235d5b6d0fee781056001bfb694c03b09";
+      };
+    }
+    {
+      name = "wrappy___wrappy_1.0.2.tgz";
+      path = fetchurl {
+        name = "wrappy___wrappy_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz";
+        sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
+      };
+    }
+    {
+      name = "ws___ws_6.2.1.tgz";
+      path = fetchurl {
+        name = "ws___ws_6.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz";
+        sha1 = "442fdf0a47ed64f59b6a5d8ff130f4748ed524fb";
+      };
+    }
+    {
+      name = "y18n___y18n_4.0.0.tgz";
+      path = fetchurl {
+        name = "y18n___y18n_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz";
+        sha1 = "95ef94f85ecc81d007c264e190a120f0a3c8566b";
+      };
+    }
+    {
+      name = "yargs_parser___yargs_parser_13.1.2.tgz";
+      path = fetchurl {
+        name = "yargs_parser___yargs_parser_13.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz";
+        sha1 = "130f09702ebaeef2650d54ce6e3e5706f7a4fb38";
+      };
+    }
+    {
+      name = "yargs___yargs_13.3.2.tgz";
+      path = fetchurl {
+        name = "yargs___yargs_13.3.2.tgz";
+        url  = "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz";
+        sha1 = "ad7ffefec1aa59565ac915f82dccb38a9c31a2dd";
+      };
+    }
+    {
+      name = "yauzl___yauzl_2.10.0.tgz";
+      path = fetchurl {
+        name = "yauzl___yauzl_2.10.0.tgz";
+        url  = "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz";
+        sha1 = "c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9";
+      };
+    }
+  ];
+}
diff --git a/pkgs/tools/graphics/qrcode/default.nix b/pkgs/tools/graphics/qrcode/default.nix
index 909f0e39726..93a620b5779 100644
--- a/pkgs/tools/graphics/qrcode/default.nix
+++ b/pkgs/tools/graphics/qrcode/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation {
   pname = "qrcode-git";
@@ -13,16 +13,18 @@ stdenv.mkDerivation {
 
   NIX_CFLAGS_COMPILE = "-Wno-error=unused-result";
 
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
   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'';
+  meta = with lib; {
+    description = "A small QR-code tool";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ raskin ];
-    platforms = with platforms; linux;
+    platforms = with platforms; unix;
   };
 }
diff --git a/pkgs/tools/graphics/quirc/default.nix b/pkgs/tools/graphics/quirc/default.nix
index 4b610ebbfef..dec2a1020c8 100644
--- a/pkgs/tools/graphics/quirc/default.nix
+++ b/pkgs/tools/graphics/quirc/default.nix
@@ -1,39 +1,43 @@
-{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
+{ lib, stdenv, fetchFromGitHub
+, SDL_gfx, SDL, libjpeg, libpng, pkg-config
+}:
+
 stdenv.mkDerivation {
-  inherit (s) name version;
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [
-    SDL SDL_gfx libjpeg libpng
-  ];
-  src = fetchgit {
-    inherit (s) url sha256 rev;
+  pname = "quirc";
+  version = "2020-04-16";
+
+  src = fetchFromGitHub {
+    owner = "dlbeer";
+    repo = "quirc";
+    rev = "ed455904f35270888bc902b9e8c0c9b3184a8302";
+    sha256 = "1kqqvcnxcaxdgls9sibw5pqjz3g1gys2v64i4kfqp8wfcgd9771q";
   };
-  NIX_CFLAGS_COMPILE="-I${SDL.dev}/include/SDL -I${SDL_gfx}/include/SDL";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ SDL SDL_gfx libjpeg libpng ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+  NIX_CFLAGS_COMPILE = "-I${SDL.dev}/include/SDL -I${SDL_gfx}/include/SDL";
+
   configurePhase = ''
+    runHook preConfigure
+
+    # don't try to change ownership
     sed -e 's/-[og] root//g' -i Makefile
+
+    runHook postConfigure
   '';
   preInstall = ''
     mkdir -p "$out"/{bin,lib,include}
-    find . -maxdepth 1 -type f -perm -0100 -exec cp '{}' "$out"/bin ';'
+
+    # install all binaries
+    find -maxdepth 1 -type f -executable ! -name '*.so.*' | xargs cp -t "$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;
+    description = "A small QR code decoding library";
+    license = lib.licenses.isc;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/graphics/resvg/default.nix b/pkgs/tools/graphics/resvg/default.nix
new file mode 100644
index 00000000000..a770d208b49
--- /dev/null
+++ b/pkgs/tools/graphics/resvg/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, lib, rustPlatform, fetchFromGitHub, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "resvg";
+  version = "0.14.0";
+
+  src = fetchFromGitHub {
+    owner = "RazrFalcon";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-fd97w6yd9ZX2k8Vq+Vh6jouufGdFE02ZV8mb+BtA3tk=";
+  };
+
+  cargoSha256 = "sha256-uP+YAJYZtMCUnLZWcwnoAw8E5cJeFxXx0qd2Li4byQM=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "An SVG rendering library";
+    homepage = "https://github.com/RazrFalcon/resvg";
+    changelog = "https://github.com/RazrFalcon/resvg/raw/v${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/pkgs/tools/graphics/rocket/default.nix b/pkgs/tools/graphics/rocket/default.nix
index 683a2c73f45..070e359fe1c 100644
--- a/pkgs/tools/graphics/rocket/default.nix
+++ b/pkgs/tools/graphics/rocket/default.nix
@@ -1,4 +1,4 @@
-{ mkDerivation, stdenv, fetchFromGitHub, qmake, qtbase }:
+{ mkDerivation, lib, fetchFromGitHub, qmake, qtbase }:
 
 mkDerivation {
   pname = "rocket";
@@ -21,7 +21,7 @@ mkDerivation {
     cp -r editor/editor $out/bin/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tool for synchronizing music and visuals in demoscene productions";
     homepage = "https://github.com/rocket/rocket";
     license = licenses.zlib;
diff --git a/pkgs/tools/graphics/s2png/default.nix b/pkgs/tools/graphics/s2png/default.nix
index 745a032b068..c1124880944 100644
--- a/pkgs/tools/graphics/s2png/default.nix
+++ b/pkgs/tools/graphics/s2png/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, diffutils, gd, pkgconfig }:
+{ lib, stdenv, fetchFromGitHub, diffutils, gd, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "s2png";
@@ -11,14 +11,14 @@ stdenv.mkDerivation rec {
     sha256 = "0y3crfm0jqprgxamlly713cka2x1bp6z63p1lw9wh4wc37kpira6";
   };
 
-  buildInputs = [ diffutils gd pkgconfig ];
+  buildInputs = [ diffutils gd pkg-config ];
   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;
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.dbohdan ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/graphics/scanbd/default.nix b/pkgs/tools/graphics/scanbd/default.nix
index 14f925a4fd2..2f2d0523469 100644
--- a/pkgs/tools/graphics/scanbd/default.nix
+++ b/pkgs/tools/graphics/scanbd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig
+{ lib, stdenv, fetchurl, pkg-config
 , dbus, libconfuse, libjpeg, sane-backends, systemd }:
 
 stdenv.mkDerivation rec {
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
     url = "mirror://sourceforge/scanbd/${pname}-${version}.tgz";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ dbus libconfuse libjpeg sane-backends systemd ];
 
   configureFlags = [
@@ -29,24 +29,24 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with 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. 
+      scanbuttond project.
     '';
     homepage = "http://scanbd.sourceforge.net/";
     downloadPage = "https://sourceforge.net/projects/scanbd/";
diff --git a/pkgs/tools/graphics/scrot/default.nix b/pkgs/tools/graphics/scrot/default.nix
index f9042645be0..aa525abacb0 100644
--- a/pkgs/tools/graphics/scrot/default.nix
+++ b/pkgs/tools/graphics/scrot/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchFromGitHub, giblib, xlibsWrapper, autoreconfHook
-, autoconf-archive, libXfixes, libXcursor }:
+{ lib, stdenv, fetchFromGitHub, giblib, xlibsWrapper, autoreconfHook
+, autoconf-archive, libXfixes, libXcursor, libXcomposite }:
 
 stdenv.mkDerivation rec {
   pname = "scrot";
-  version = "1.3";
+  version = "1.5";
 
   src = fetchFromGitHub {
     owner = "resurrecting-open-source-projects";
     repo = pname;
     rev = version;
-    sha256 = "0x70hd59ik37kqd8xqpwrz46np01jv324iz28x2s0kk36d7sblsj";
+    sha256 = "sha256-4vguodLnCj0sOBLM4oJXTfX1p8hIo3WTwIuViPtZxHQ=";
   };
 
   nativeBuildInputs = [ autoreconfHook autoconf-archive ];
-  buildInputs = [ giblib xlibsWrapper libXfixes libXcursor ];
+  buildInputs = [ giblib xlibsWrapper libXfixes libXcursor libXcomposite ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/resurrecting-open-source-projects/scrot";
     description = "A command-line screen capture utility";
     platforms = platforms.linux;
diff --git a/pkgs/tools/graphics/shotgun/default.nix b/pkgs/tools/graphics/shotgun/default.nix
index 3c96584029e..d875b4d313d 100644
--- a/pkgs/tools/graphics/shotgun/default.nix
+++ b/pkgs/tools/graphics/shotgun/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchFromGitHub, rustPlatform, pkg-config, libXrandr, libX11 }:
+{ lib, fetchFromGitHub, rustPlatform, pkg-config, libXrandr, libX11 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "shotgun";
@@ -15,7 +15,7 @@ rustPlatform.buildRustPackage rec {
     sha256 = "0fpc09yvxjcvjkai7afyig4gyc7inaqxxrwzs17mh8wdgzawb6dl";
   };
 
-  cargoSha256 = "0sbhij8qh9n05nzhp47dm46hbc59awar515f9nhd3wvahwz53zam";
+  cargoSha256 = "06zplpy480965lhgav984m6wkfijv7cqa49kpramp8b6ws62pikl";
 
   meta = with lib; {
     description = "Minimal X screenshot utility";
diff --git a/pkgs/tools/graphics/snapdragon-profiler/default.nix b/pkgs/tools/graphics/snapdragon-profiler/default.nix
new file mode 100644
index 00000000000..02a96184812
--- /dev/null
+++ b/pkgs/tools/graphics/snapdragon-profiler/default.nix
@@ -0,0 +1,91 @@
+{ lib
+, stdenv
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, icoutils
+, mono
+, jre
+, androidenv
+, gtk-sharp-2_0
+, gtk2
+, libcxx
+, libcxxabi
+, coreutils
+, requireFile
+, archive ? requireFile {
+    name = "snapdragonprofiler_external_linux.tar.gz";
+    message = ''
+      This nix expression requires that "snapdragonprofiler_external_linux.tar.gz" is
+      already part of the store. To get this archive, you need to download it from:
+        https://developer.qualcomm.com/software/snapdragon-profiler
+      and add it to the nix store with nix-store --add-fixed sha256 <FILE>.
+    '';
+    sha256 = "c6731c417ca39fa9b0f190bd80c99b1603cf97d23becab9e47db6beafd6206b7";
+  }
+}:
+
+stdenv.mkDerivation rec {
+  pname = "snapdragon-profiler";
+  version = "v2021.2";
+
+  src = archive;
+
+  nativeBuildInputs = [
+    makeWrapper
+    icoutils
+    copyDesktopItems
+  ];
+
+  buildInputs = [
+    mono
+    gtk-sharp-2_0
+    gtk2
+    libcxx
+    libcxxabi
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/{bin,lib/snapdragon-profiler}
+    mkdir -p $out/share/icons/hicolor/{16x16,32x32,48x48}/apps
+
+    mv *.so $out/lib
+    cp -r * $out/lib/snapdragon-profiler
+    makeWrapper "${mono}/bin/mono" $out/bin/snapdragon-profiler \
+      --add-flags "$out/lib/snapdragon-profiler/SnapdragonProfiler.exe" \
+      --suffix PATH : ${lib.makeBinPath [ jre androidenv.androidPkgs_9_0.platform-tools coreutils ]} \
+      --prefix MONO_GAC_PREFIX : ${gtk-sharp-2_0} \
+      --suffix LD_LIBRARY_PATH : $(echo $NIX_LDFLAGS | sed 's/ -L/:/g;s/ -rpath /:/g;s/-rpath //') \
+      --run "cd $out/lib/snapdragon-profiler" # Fixes themes not loading correctly
+
+    wrestool -x -t 14 SnapdragonProfiler.exe > snapdragon-profiler.ico
+    icotool -x -i 1 -o $out/share/icons/hicolor/16x16/apps/snapdragon-profiler.png snapdragon-profiler.ico
+    icotool -x -i 2 -o $out/share/icons/hicolor/32x32/apps/snapdragon-profiler.png snapdragon-profiler.ico
+    icotool -x -i 3 -o $out/share/icons/hicolor/48x48/apps/snapdragon-profiler.png snapdragon-profiler.ico
+
+    runHook postInstall
+  '';
+
+  desktopItems = [(makeDesktopItem {
+    name = pname;
+    desktopName = "Snapdragon Profiler";
+    exec = "$out/bin/snapdragon-profiler";
+    icon = "snapdragon-profiler";
+    type = "Application";
+    comment = meta.description;
+    categories = "Development;Debugger;Graphics;3DGraphics";
+    terminal = "false";
+  })];
+
+  dontStrip = true; # Always needed on Mono
+  dontPatchELF = true; # Certain libraries are to be deployed to the remote device, they should not be patched
+
+  meta = with lib; {
+    homepage = "https://developer.qualcomm.com/software/snapdragon-profiler";
+    description = "An profiler for Android devices running Snapdragon chips";
+    license = licenses.unfree;
+    maintainers = [ maintainers.ivar ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/pkgs/tools/graphics/sng/default.nix b/pkgs/tools/graphics/sng/default.nix
index 45f5a6f2c23..cec0b21cce2 100644
--- a/pkgs/tools/graphics/sng/default.nix
+++ b/pkgs/tools/graphics/sng/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libpng, netpbm }:
+{ lib, stdenv, fetchurl, libpng, netpbm }:
 
 stdenv.mkDerivation rec {
   pname = "sng";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
     "--with-rgbtxt=${netpbm.out}/share/netpbm/misc/rgb.txt"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/graphics/spirv-cross/default.nix b/pkgs/tools/graphics/spirv-cross/default.nix
index 76d554457d9..19359698f02 100644
--- a/pkgs/tools/graphics/spirv-cross/default.nix
+++ b/pkgs/tools/graphics/spirv-cross/default.nix
@@ -1,22 +1,23 @@
-{ stdenv, fetchFromGitHub, cmake, python3 }:
+{ lib, stdenv, fetchFromGitHub, cmake, python3 }:
 
 stdenv.mkDerivation rec {
   pname = "spirv-cross";
-  version = "2020-06-29";
+  version = "2021-01-15";
 
   src = fetchFromGitHub {
     owner = "KhronosGroup";
     repo = "SPIRV-Cross";
     rev = version;
-    sha256 = "0mnccmhlqmpdx92v495z39i07hbvjwdr5n4zbarlrr1d7rm99lx4";
+    sha256 = "/9/Owt7XcdOjujWZnaG1Q7FlywvsRo8/l8/CouS48Vk=";
   };
 
   nativeBuildInputs = [ cmake python3 ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tool designed for parsing and converting SPIR-V to other shader languages";
     homepage = "https://github.com/KhronosGroup/SPIRV-Cross";
-    platforms = platforms.linux;
+    changelog = "https://github.com/KhronosGroup/SPIRV-Cross/releases/tag/${version}";
+    platforms = platforms.all;
     license = licenses.asl20;
     maintainers = with maintainers; [ Flakebi ];
   };
diff --git a/pkgs/tools/graphics/structure-synth/default.nix b/pkgs/tools/graphics/structure-synth/default.nix
index 73dd9c04be9..5f6e655882a 100644
--- a/pkgs/tools/graphics/structure-synth/default.nix
+++ b/pkgs/tools/graphics/structure-synth/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qt4, qmake4Hook, unzip, libGLU, makeWrapper }:
+{ lib, stdenv, fetchurl, qt4, qmake4Hook, unzip, libGLU, makeWrapper }:
 
 stdenv.mkDerivation {
 
@@ -10,8 +10,8 @@ stdenv.mkDerivation {
     sha256 = "1kiammx46719az6jzrav8yrwz82nk4m72ybj0kpbnvp9wfl3swbb";
   };
 
-  buildInputs = [ qt4 unzip libGLU makeWrapper ];
-  nativeBuildInputs = [ qmake4Hook ];
+  buildInputs = [ qt4 libGLU ];
+  nativeBuildInputs = [ qmake4Hook makeWrapper unzip ];
 
   # Thanks to https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=672000#15:
   patches = [ ./gcc47.patch ];
@@ -37,7 +37,7 @@ stdenv.mkDerivation {
     wrapProgram "$out/bin/structure-synth" --run "cd $out/share"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Application for generating 3D structures by specifying a design grammar";
     homepage = "http://structuresynth.sourceforge.net";
     maintainers = with maintainers; [ hodapp ];
diff --git a/pkgs/tools/graphics/svgbob/default.nix b/pkgs/tools/graphics/svgbob/default.nix
index 374e090af6a..1f72243293e 100644
--- a/pkgs/tools/graphics/svgbob/default.nix
+++ b/pkgs/tools/graphics/svgbob/default.nix
@@ -1,22 +1,16 @@
-{ lib, rustPlatform, fetchFromGitHub }:
+{ lib, rustPlatform, fetchCrate }:
 
 rustPlatform.buildRustPackage rec {
   pname = "svgbob";
-  version = "0.4.2";
+  version = "0.5.3";
 
-  src = fetchFromGitHub {
-    owner = "ivanceras";
-    repo = pname;
-    rev = "0febc4377134a2ea3b3cd43ebdf5ea688a0e7432";
-    sha256 = "1n0w5b3fjgbczy1iw52172x1p3y1bvw1qpz77fkaxkhrkgfd7vwr";
+  src = fetchCrate {
+    inherit version;
+    crateName = "svgbob_cli";
+    sha256 = "1gi8h4wzpi477y1gwi4708pn2kr65934a4dmphbhwppxbw447qiw";
   };
 
-  sourceRoot = "source/svgbob_cli";
-
-  cargoSha256 = "1y9jsnxmz51zychmmzp6mi29pb5ks2qww7lk5bshkhp56v51sm8d";
-
-  # Test tries to build outdated examples
-  doCheck = false;
+  cargoSha256 = "1x8phpllwm12igaachghwq6wgxl7nl8bhh7xybfrmn447viwxhq2";
 
   meta = with lib; {
     description = "Convert your ascii diagram scribbles into happy little SVG";
diff --git a/pkgs/tools/graphics/svgcleaner/default.nix b/pkgs/tools/graphics/svgcleaner/default.nix
index 201b43f4f44..4224bde7234 100644
--- a/pkgs/tools/graphics/svgcleaner/default.nix
+++ b/pkgs/tools/graphics/svgcleaner/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform }:
+{ lib, fetchFromGitHub, rustPlatform }:
 
 rustPlatform.buildRustPackage rec {
   pname = "svgcleaner";
@@ -11,9 +11,9 @@ rustPlatform.buildRustPackage rec {
     sha256 = "1jpnqsln37kkxz98vj7gly3c2170v6zamd876nc9nfl9vns41s0f";
   };
 
-  cargoSha256 = "1xhwlsq9b6cnafbapm5jf48zqdx5k2vxlr701lh5f8nqvd7nxi6g";
+  cargoSha256 = "172kdnd11xb2qkklqdkdcwi3g55k0d67p8g8qj7iq34bsnfb5bnr";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tool for tidying and optimizing SVGs";
     homepage = "https://github.com/RazrFalcon/svgcleaner";
     license = licenses.gpl2;
diff --git a/pkgs/tools/graphics/syntex/default.nix b/pkgs/tools/graphics/syntex/default.nix
index 693f116a6e8..b149333f2ea 100644
--- a/pkgs/tools/graphics/syntex/default.nix
+++ b/pkgs/tools/graphics/syntex/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchFromGitHub, mono}:
+{lib, stdenv, fetchFromGitHub, mono}:
 stdenv.mkDerivation rec {
   pname = "syntex";
   version = "0.0pre20160915";
@@ -25,10 +25,9 @@ stdenv.mkDerivation rec {
   '';
   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;
+    description = "Texture synthesis from examples";
+    license = lib.licenses.mit;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/graphics/timg/default.nix b/pkgs/tools/graphics/timg/default.nix
new file mode 100644
index 00000000000..7c2d004144d
--- /dev/null
+++ b/pkgs/tools/graphics/timg/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, graphicsmagick, libjpeg
+, ffmpeg, zlib, libexif }:
+
+stdenv.mkDerivation rec {
+  pname = "timg";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "hzeller";
+    repo = "timg";
+    rev = "v${version}";
+    sha256 = "1zjcaxnik8imkn22g5kz6zly3yxpknrzd093sfxpgqnfw4sq8149";
+  };
+
+  buildInputs = [ graphicsmagick ffmpeg libexif libjpeg zlib ];
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  cmakeFlags = [
+    "-DTIMG_VERSION_FROM_GIT=Off"
+    "-DWITH_VIDEO_DECODING=On"
+    "-DWITH_VIDEO_DEVICE=On"
+    "-DWITH_OPENSLIDE_SUPPORT=Off" # https://openslide.org/ lib not yet in nix
+  ];
+
+  meta = with lib; {
+    homepage = "https://timg.sh/";
+    description = "A terminal image and video viewer";
+    license = licenses.gpl2Only;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ hzeller ];
+  };
+}
diff --git a/pkgs/tools/graphics/transfig/default.nix b/pkgs/tools/graphics/transfig/default.nix
index 9226809c5c5..a6c9cd988c0 100644
--- a/pkgs/tools/graphics/transfig/default.nix
+++ b/pkgs/tools/graphics/transfig/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, zlib, libjpeg, libpng, imake, gccmakedep }:
+{ lib, stdenv, fetchurl, zlib, libjpeg, libpng, imake, gccmakedep }:
 
 stdenv.mkDerivation {
   name = "transfig-3.2.4";
@@ -56,6 +56,6 @@ stdenv.mkDerivation {
   hardeningDisable = [ "format" ];
 
   meta = {
-    platforms = stdenv.lib.platforms.unix;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/graphics/twilight/default.nix b/pkgs/tools/graphics/twilight/default.nix
index 42a86187a72..58d4d0df913 100644
--- a/pkgs/tools/graphics/twilight/default.nix
+++ b/pkgs/tools/graphics/twilight/default.nix
@@ -1,11 +1,9 @@
-{ stdenv, fetchFromGitHub
+{ lib, stdenv, fetchFromGitHub
 , libGL, libGLU, freeglut, libX11 }:
 
-let
-  version = "2018-04-19";
-in stdenv.mkDerivation rec {
+stdenv.mkDerivation rec {
   pname = "twilight";
-  inherit version;
+  version = "unstable-2018-04-19";
 
   src = fetchFromGitHub {
     owner = "tweakoz";
@@ -20,11 +18,11 @@ in stdenv.mkDerivation rec {
     install -Dm755 twilight $out/bin/twilight
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/tools/graphics/unpaper/default.nix b/pkgs/tools/graphics/unpaper/default.nix
index f3e6f0d8b96..20dfe15dc6c 100644
--- a/pkgs/tools/graphics/unpaper/default.nix
+++ b/pkgs/tools/graphics/unpaper/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, libav, libxslt }:
+{ lib, stdenv, fetchurl, pkg-config, ffmpeg, libxslt }:
 
 stdenv.mkDerivation rec {
   pname = "unpaper";
@@ -9,10 +9,10 @@ stdenv.mkDerivation rec {
     sha256 = "0c5rbkxbmy9k8vxjh4cv0bgnqd3wqc99yzw215vkyjslvbsq8z13";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ libav libxslt ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ ffmpeg libxslt ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.flameeyes.eu/projects/unpaper";
     description = "Post-processing tool for scanned sheets of paper";
     license = licenses.gpl2;
diff --git a/pkgs/tools/graphics/vips/default.nix b/pkgs/tools/graphics/vips/default.nix
index 334cb00f3c1..18025f92e31 100644
--- a/pkgs/tools/graphics/vips/default.nix
+++ b/pkgs/tools/graphics/vips/default.nix
@@ -1,5 +1,5 @@
-{ stdenv
-, pkgconfig
+{ lib, stdenv
+, pkg-config
 , glib
 , libxml2
 , expat
@@ -13,7 +13,9 @@
 , libgsf
 , libexif
 , libheif
+, librsvg
 , ApplicationServices
+, Foundation
 , python27
 , libpng
 , fetchFromGitHub
@@ -26,7 +28,7 @@
 
 stdenv.mkDerivation rec {
   pname = "vips";
-  version = "8.10.0";
+  version = "8.10.6";
 
   outputs = [ "bin" "out" "man" "dev" ];
 
@@ -34,7 +36,7 @@ stdenv.mkDerivation rec {
     owner = "libvips";
     repo = "libvips";
     rev = "v${version}";
-    sha256 = "1v5kfmv1vmzyvz1198jm1kl763s2i3mgnsn69vh6dslasbh769di";
+    sha256 = "sha256-hdpkBC76PnPTN+rnNchLVk1CrhcClTtbaWyUcyUtuAk=";
     # Remove unicode file names which leads to different checksums on HFS+
     # vs. other filesystems because of unicode normalisation.
     extraPostFetch = ''
@@ -43,7 +45,7 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     autoreconfHook
     gtk-doc
     gobject-introspection
@@ -63,10 +65,11 @@ stdenv.mkDerivation rec {
     libexif
     libheif
     libpng
+    librsvg
     python27
     libpng
     expat
-  ] ++ stdenv.lib.optional stdenv.isDarwin ApplicationServices;
+  ] ++ lib.optionals stdenv.isDarwin [ApplicationServices Foundation];
 
   # Required by .pc file
   propagatedBuildInputs = [
@@ -77,7 +80,7 @@ stdenv.mkDerivation rec {
     NOCONFIGURE=1 ./autogen.sh
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://libvips.github.io/libvips/";
     description = "Image processing system for large images";
     license = licenses.lgpl2Plus;
diff --git a/pkgs/tools/graphics/viu/default.nix b/pkgs/tools/graphics/viu/default.nix
index 2b332bd3256..8a02e0fefed 100644
--- a/pkgs/tools/graphics/viu/default.nix
+++ b/pkgs/tools/graphics/viu/default.nix
@@ -2,18 +2,19 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "viu";
-  version = "1.0";
+  version = "1.3.0";
 
   src = fetchFromGitHub {
     owner = "atanunq";
     repo = "viu";
     rev = "v${version}";
-    sha256 = "1ivhm6js0ylnxwp84jmm2vmnl4iy1cwr3m9imx7lmcl0i3c8b9if";
+    sha256 = "1n1qwlh1zinq5ngx04cvs69z8zr12yywr70vbrc946kbh4hx6pk9";
   };
-  # tests are failing, reported at upstream: https://github.com/atanunq/viu/issues/40
+
+  # tests need an interactive terminal
   doCheck = false;
 
-  cargoSha256 = "15zdnr95a363w4rddv1fbz796m01430gzly5p953m23g2mbxdmp0";
+  cargoSha256 = "0s6i42n4jivzj4ad62r7nc6ailydy686ivszcd6cj5f4dinsbgq3";
 
   meta = with lib; {
     description = "A command-line application to view images from the terminal written in Rust";
diff --git a/pkgs/tools/graphics/vkBasalt/default.nix b/pkgs/tools/graphics/vkBasalt/default.nix
new file mode 100644
index 00000000000..3695c7ec2c0
--- /dev/null
+++ b/pkgs/tools/graphics/vkBasalt/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, glslang
+, meson
+, ninja
+, pkg-config
+, libX11
+, spirv-headers
+, vulkan-headers
+, vkBasalt32
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vkBasalt";
+  version = "0.3.2.4";
+
+  src = fetchFromGitHub {
+    owner = "DadSchoorse";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "01iplj6dlw2vl35hyci5m5yp8jmzcwng6c3jk3wn97jpv6m3hjqz";
+  };
+
+  nativeBuildInputs = [ glslang meson ninja pkg-config ];
+  buildInputs = [ libX11 spirv-headers vulkan-headers ];
+  mesonFlags = [ "-Dappend_libdir_vkbasalt=true" ];
+
+  # Include 32bit layer in 64bit build
+  postInstall = lib.optionalString (stdenv.hostPlatform.system == "x86_64-linux") ''
+    ln -s ${vkBasalt32}/share/vulkan/implicit_layer.d/vkBasalt.json \
+      "$out/share/vulkan/implicit_layer.d/vkBasalt32.json"
+  '';
+
+  meta = with lib; {
+    description = "A Vulkan post processing layer for Linux";
+    homepage = "https://github.com/DadSchoorse/vkBasalt";
+    license = licenses.zlib;
+    maintainers = with maintainers; [ kira-bruneau ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/graphics/vulkan-extension-layer/default.nix b/pkgs/tools/graphics/vulkan-extension-layer/default.nix
new file mode 100644
index 00000000000..f2ea439e0c9
--- /dev/null
+++ b/pkgs/tools/graphics/vulkan-extension-layer/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, cmake, writeText, vulkan-headers, jq }:
+
+stdenv.mkDerivation rec {
+  pname = "vulkan-extension-layer";
+  version = "2020-11-20";
+
+  src = fetchFromGitHub {
+    owner = "KhronosGroup";
+    repo = "Vulkan-ExtensionLayer";
+    rev = "7474cb8e1f70e9f4a8bf382708a7f15465453af5";
+    sha256 = "1lxkgcnv32wqk4hlckv13xy84g38jzgc4qxp9vsbkrgz87hkdvwj";
+  };
+
+  nativeBuildInputs = [ cmake jq ];
+
+  buildInputs = [ vulkan-headers ];
+
+  # Help vulkan-loader find the validation layers
+  setupHook = writeText "setup-hook" ''
+    export XDG_DATA_DIRS=@out@/share:$XDG_DATA_DIRS
+  '';
+
+  # Include absolute paths to layer libraries in their associated
+  # layer definition json files.
+  preFixup = ''
+    for f in "$out"/share/vulkan/explicit_layer.d/*.json "$out"/share/vulkan/implicit_layer.d/*.json; do
+      jq <"$f" >tmp.json ".layer.library_path = \"$out/lib/\" + .layer.library_path"
+      mv tmp.json "$f"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Layers providing Vulkan features when native support is unavailable";
+    homepage = "https://github.com/KhronosGroup/Vulkan-ExtensionLayer/";
+    platforms = platforms.linux;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ expipiplus1 ];
+  };
+}
diff --git a/pkgs/tools/graphics/vulkan-tools-lunarg/default.nix b/pkgs/tools/graphics/vulkan-tools-lunarg/default.nix
new file mode 100644
index 00000000000..1d0f920a4ba
--- /dev/null
+++ b/pkgs/tools/graphics/vulkan-tools-lunarg/default.nix
@@ -0,0 +1,85 @@
+{ stdenv, cmake, expat, fetchFromGitHub, jq, lib, libXdmcp, libXrandr, libffi
+, libxcb, pkg-config, python3, symlinkJoin, vulkan-headers, vulkan-loader
+, vulkan-validation-layers, wayland, writeText, xcbutilkeysyms, xcbutilwm
+, xlibsWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "vulkan-tools-lunarg";
+  # The version must match that in vulkan-headers
+  version = "1.2.162.0";
+
+  src = (assert version == vulkan-headers.version;
+    fetchFromGitHub {
+      owner = "LunarG";
+      repo = "VulkanTools";
+      rev = "sdk-${version}";
+      sha256 = "13v4202bfd7d7nwi8w12ja9k1vi10p9xxypzkpi063hmsgzxm5k5";
+      fetchSubmodules = true;
+    });
+
+  nativeBuildInputs = [ cmake pkg-config python3 jq ];
+
+  buildInputs = [
+    expat
+    libXdmcp
+    libXrandr
+    libffi
+    libxcb
+    wayland
+    xcbutilkeysyms
+    xcbutilwm
+    xlibsWrapper
+  ];
+
+  cmakeFlags = [
+    "-DVULKAN_HEADERS_INSTALL_DIR=${vulkan-headers}"
+    "-DVULKAN_LOADER_INSTALL_DIR=${vulkan-loader}"
+    "-DVULKAN_VALIDATIONLAYERS_INSTALL_DIR=${
+      symlinkJoin {
+        name = "vulkan-validation-layers-merged";
+        paths = [ vulkan-validation-layers.headers vulkan-validation-layers ];
+      }
+    }"
+  ];
+
+  preConfigure = ''
+    # We need to run this update script which generates some source files,
+    # Remove the line in it which calls 'git submodule update' though.
+    # Also patch the scripts in ./scripts
+    update=update_external_sources.sh
+    patchShebangs $update
+    patchShebangs scripts/*
+    sed -i '/^git /d' $update
+    ./$update
+  '';
+
+  # Include absolute paths to layer libraries in their associated
+  # layer definition json files.
+  preFixup = ''
+    for f in "$out"/etc/vulkan/explicit_layer.d/*.json "$out"/etc/vulkan/implicit_layer.d/*.json; do
+      jq <"$f" >tmp.json ".layer.library_path = \"$out/lib/\" + .layer.library_path"
+      mv tmp.json "$f"
+    done
+  '';
+
+  # Same as vulkan-validation-layers
+  libraryPath = lib.strings.makeLibraryPath [ vulkan-loader ];
+  dontPatchELF = true;
+
+  # Help vulkan-loader find the validation layers
+  setupHook = writeText "setup-hook" ''
+    export XDG_CONFIG_DIRS=@out@/etc''${XDG_CONFIG_DIRS:+:''${XDG_CONFIG_DIRS}}
+  '';
+
+  meta = with lib; {
+    description = "LunarG Vulkan Tools and Utilities";
+    longDescription = ''
+      Tools to aid in Vulkan development including useful layers, trace and
+      replay, and tests.
+    '';
+    homepage = "https://github.com/LunarG/VulkanTools";
+    platforms = platforms.linux;
+    license = licenses.asl20;
+    maintainers = [ maintainers.expipiplus1 ];
+  };
+}
diff --git a/pkgs/tools/graphics/vulkan-tools/default.nix b/pkgs/tools/graphics/vulkan-tools/default.nix
index 71bcdc2e269..907404ec7f4 100644
--- a/pkgs/tools/graphics/vulkan-tools/default.nix
+++ b/pkgs/tools/graphics/vulkan-tools/default.nix
@@ -1,26 +1,41 @@
-{ stdenv, fetchFromGitHub, cmake, python3, vulkan-loader, vulkan-headers,
-  glslang, pkgconfig, xlibsWrapper, libxcb, libXrandr, wayland }:
+{ stdenv, lib, fetchFromGitHub, cmake, python3, vulkan-loader,
+ vulkan-headers, glslang, pkg-config, xlibsWrapper, libxcb,
+ libXrandr, wayland }:
 
 stdenv.mkDerivation rec {
   pname = "vulkan-tools";
-  version = "1.2.131.1";
+  version = "1.2.162.0";
 
   src = fetchFromGitHub {
     owner = "KhronosGroup";
     repo = "Vulkan-Tools";
     rev = "sdk-${version}";
-    sha256 = "0ws47ansrr8cq4qjf6k4q0ygm9wwd3w7mhwqcl1qxms8lh5vmhfq";
+    sha256 = "088vqh956zma3p1qc3p6rsygf5s395b6cv8b1x0whp2a0a1y81xz";
   };
 
-  nativeBuildInputs = [ cmake pkgconfig ];
+  nativeBuildInputs = [ cmake pkg-config ];
   buildInputs = [ python3 vulkan-headers vulkan-loader xlibsWrapper libxcb libXrandr wayland ];
-  enableParallelBuilding = true;
 
-  cmakeFlags = [ "-DBUILD_ICD=OFF" "-DGLSLANG_INSTALL_DIR=${glslang}" ];
+  libraryPath = lib.strings.makeLibraryPath [ vulkan-loader ];
 
-  meta = with stdenv.lib; {
-    description = "LunarG Vulkan loader";
-    homepage    = "https://www.lunarg.com";
+  dontPatchELF = true;
+
+  cmakeFlags = [
+    # Don't build the mock ICD as it may get used instead of other drivers, if installed
+    "-DBUILD_ICD=OFF"
+    "-DGLSLANG_INSTALL_DIR=${glslang}"
+    # vulkaninfo loads libvulkan using dlopen, so we have to add it manually to RPATH
+    "-DCMAKE_INSTALL_RPATH=${libraryPath}"
+  ];
+
+  meta = with lib; {
+    description = "Khronos official Vulkan Tools and Utilities";
+    longDescription = ''
+      This project provides Vulkan tools and utilities that can assist
+      development by enabling developers to verify their applications correct
+      use of the Vulkan API.
+    '';
+    homepage    = "https://github.com/KhronosGroup/Vulkan-Tools";
     platforms   = platforms.linux;
     license     = licenses.asl20;
     maintainers = [ maintainers.ralith ];
diff --git a/pkgs/tools/graphics/waifu2x-converter-cpp/default.nix b/pkgs/tools/graphics/waifu2x-converter-cpp/default.nix
index 66c8b1d5cc7..bffd9ea0378 100644
--- a/pkgs/tools/graphics/waifu2x-converter-cpp/default.nix
+++ b/pkgs/tools/graphics/waifu2x-converter-cpp/default.nix
@@ -1,16 +1,16 @@
-{ cmake, fetchFromGitHub, opencv3, stdenv, opencl-headers
+{ cmake, fetchFromGitHub, makeWrapper, opencv3, lib, stdenv, ocl-icd, opencl-headers
 , cudaSupport ? false, cudatoolkit ? null
 }:
 
 stdenv.mkDerivation rec {
   pname = "waifu2x-converter-cpp";
-  version = "5.2.4";
+  version = "5.3.4";
 
   src = fetchFromGitHub {
     owner = "DeadSix27";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0r7xcjqbyaa20gsgmjj7645640g3nb2bn1pc1nlfplwlzjxmz213";
+    sha256 = "0rv8bnyxz89za6gwk9gmdbaf3j7c1j52mip7h81rir288j35m84x";
   };
 
   patchPhase = ''
@@ -19,16 +19,20 @@ stdenv.mkDerivation rec {
   '';
 
   buildInputs = [
-    opencv3 opencl-headers
-  ] ++ stdenv.lib.optional cudaSupport cudatoolkit;
+    ocl-icd opencv3 opencl-headers
+  ] ++ lib.optional cudaSupport cudatoolkit;
 
-  nativeBuildInputs = [ cmake ];
+  nativeBuildInputs = [ cmake makeWrapper ];
+
+  preFixup = ''
+    wrapProgram $out/bin/waifu2x-converter-cpp --prefix LD_LIBRARY_PATH : "${ocl-icd}/lib"
+  '';
 
   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;
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.xzfc ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/graphics/wavefunctioncollapse/default.nix b/pkgs/tools/graphics/wavefunctioncollapse/default.nix
index 65fe38937df..2c7ce427245 100644
--- a/pkgs/tools/graphics/wavefunctioncollapse/default.nix
+++ b/pkgs/tools/graphics/wavefunctioncollapse/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchFromGitHub, mono}:
+{lib, stdenv, fetchFromGitHub, mono}:
 stdenv.mkDerivation rec {
   pname = "wavefunctioncollapse";
   version = "0.0pre20170130";
@@ -25,10 +25,9 @@ stdenv.mkDerivation rec {
   '';
   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;
+    description = "A generator of bitmaps that are locally similar to the input bitmap";
+    license = lib.licenses.mit;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/graphics/wdisplays/default.nix b/pkgs/tools/graphics/wdisplays/default.nix
index 0993a39983e..073a3b1b6d4 100644
--- a/pkgs/tools/graphics/wdisplays/default.nix
+++ b/pkgs/tools/graphics/wdisplays/default.nix
@@ -1,25 +1,25 @@
-{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig, gtk3, epoxy, wayland }:
+{ lib, stdenv, fetchFromGitHub, meson, ninja, pkg-config, gtk3, epoxy, wayland, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
   pname = "wdisplays";
-  version = "1.0";
+  version = "unstable-2021-04-03";
 
-  nativeBuildInputs = [ meson ninja pkgconfig ];
+  nativeBuildInputs = [ meson ninja pkg-config wrapGAppsHook ];
 
   buildInputs = [ gtk3 epoxy wayland ];
 
   src = fetchFromGitHub {
-    owner = "cyclopsian";
+    owner = "luispabon";
     repo = "wdisplays";
-    rev = version;
-    sha256 = "1xhgrcihja2i7yg54ghbwr1v6kf8jnsfcp364yb97vkxskc4y21y";
+    rev = "7f2eac0d2aa81b5f495da7950fd5a94683f7868e";
+    sha256 = "sha256-cOF3+T34zPro58maWUouGG+vlLm2C5NfcH7PZhSvApE=";
   };
 
-  meta = let inherit (stdenv) lib; in {
+  meta = with lib; {
     description = "A graphical application for configuring displays in Wayland compositors";
-    homepage = "https://github.com/cyclopsian/wdisplays";
-    maintainers = with lib.maintainers; [ lheckemann ma27 ];
-    license = lib.licenses.mit;
-    platforms = lib.platforms.linux;
+    homepage = "https://github.com/luispabon/wdisplays";
+    maintainers = with maintainers; [ lheckemann ma27 ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/graphics/welkin/default.nix b/pkgs/tools/graphics/welkin/default.nix
index be4ba53319a..2f9c43373bb 100644
--- a/pkgs/tools/graphics/welkin/default.nix
+++ b/pkgs/tools/graphics/welkin/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchsvn, jre, makeWrapper }:
+{ lib, stdenv, fetchsvn, jre, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "welkin";
@@ -12,7 +12,8 @@ stdenv.mkDerivation rec {
 
   sourceRoot = "welkin-r9638/tags/${version}";
 
-  buildInputs = [ jre makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
 
   installPhase = ''
     mkdir -p $out/{bin,share}
@@ -26,11 +27,11 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "An RDF visualizer";
-    maintainers = with stdenv.lib.maintainers; [
+    maintainers = with lib.maintainers; [
       raskin
     ];
     hydraPlatforms = [];
-    license = stdenv.lib.licenses.free;
-    platforms = with stdenv.lib.platforms; unix;
+    license = lib.licenses.free;
+    platforms = with lib.platforms; unix;
   };
 }
diff --git a/pkgs/tools/graphics/xcftools/default.nix b/pkgs/tools/graphics/xcftools/default.nix
index a8b0b406aa4..c1b12ca5fe7 100644
--- a/pkgs/tools/graphics/xcftools/default.nix
+++ b/pkgs/tools/graphics/xcftools/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, libpng, perl, gettext }:
+{lib, stdenv, fetchurl, libpng, perl, gettext }:
 
 stdenv.mkDerivation {
   name = "xcftools-1.0.7";
@@ -34,7 +34,7 @@ stdenv.mkDerivation {
       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;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/graphics/xcolor/default.nix b/pkgs/tools/graphics/xcolor/default.nix
new file mode 100644
index 00000000000..1e8f3fd78d7
--- /dev/null
+++ b/pkgs/tools/graphics/xcolor/default.nix
@@ -0,0 +1,34 @@
+{ lib, rustPlatform, fetchFromGitHub, fetchpatch, pkg-config, libX11, libXcursor, libxcb, python3 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "xcolor";
+  version = "unstable-2021-02-02";
+
+  src = fetchFromGitHub {
+    owner = "Soft";
+    repo = pname;
+    rev = "0e99e67cd37000bf563aa1e89faae796ec25f163";
+    sha256 = "sha256-rHqK05dN5lrvDNbRCWGghI7KJwWzNCuRDEThEeMzmio=";
+  };
+
+  cargoPatches = [
+    # Update Cargo.lock, lexical_core doesn't build on Rust 1.52.1
+    (fetchpatch {
+      url = "https://github.com/Soft/xcolor/commit/324d80a18a39a11f2f7141b226f492e2a862d2ce.patch";
+      sha256 = "sha256-5VzXitpl/gMef40UQBh1EoHezXPyB08aflqp0mSMAVI=";
+    })
+  ];
+
+  cargoSha256 = "sha256-yD4pX+dCJvbDecsdB8tNt1VsEcyAJxNrB5WsZUhPGII=";
+
+  nativeBuildInputs = [ pkg-config python3 ];
+
+  buildInputs = [ libX11 libXcursor libxcb ];
+
+  meta = with lib; {
+    description = "Lightweight color picker for X11";
+    homepage = "https://github.com/Soft/xcolor";
+    maintainers = with lib.maintainers; [ fortuneteller2k ];
+    license = licenses.mit;
+  };
+}
diff --git a/pkgs/tools/graphics/xcur2png/default.nix b/pkgs/tools/graphics/xcur2png/default.nix
index f917328460c..e8d761c6d84 100644
--- a/pkgs/tools/graphics/xcur2png/default.nix
+++ b/pkgs/tools/graphics/xcur2png/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, libpng, xorg }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, libpng, xorg }:
 
 stdenv.mkDerivation rec {
   pname = "xcur2png";
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
   ];
 
   buildInputs = [
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     xorg.xorgproto
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/eworm-de/xcur2png/releases";
     description = "Convert X cursors to PNG images";
     license = licenses.gpl3;
diff --git a/pkgs/tools/graphics/yafaray-core/default.nix b/pkgs/tools/graphics/yafaray-core/default.nix
index a02a97739ba..cd9faa85ab1 100644
--- a/pkgs/tools/graphics/yafaray-core/default.nix
+++ b/pkgs/tools/graphics/yafaray-core/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig, opencv, zlib
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, opencv, zlib
 , libxml2, freetype, libjpeg, libtiff, swig, openexr
 , ilmbase, boost165
 , withPython ? true, python3
@@ -7,30 +7,31 @@
 stdenv.mkDerivation rec {
 
     pname = "yafaray-core";
-    version = "3.4.4";
+    version = "3.5.1";
 
     src = fetchFromGitHub {
       owner  = "YafaRay";
       repo   = "Core";
       rev    = "v${version}";
-      sha256 = "140vnaihz09rdvp0mqgrs26b3a2fv5wm49ar6817p4qklfx71l0g";
+      sha256 = "043ixf3h4ay2fahsw9lh0pha82f7ri04mlfhvn2pg251012jvhrx";
     };
 
     preConfigure = ''
       NIX_CFLAGS_COMPILE+=" -isystem ${ilmbase.dev}/include/OpenEXR"
     '';
 
+    nativeBuildInputs = [ cmake pkg-config ];
     buildInputs = [
-      cmake pkgconfig boost165 opencv zlib libxml2 freetype libjpeg libtiff
+      boost165 opencv zlib libxml2 freetype libjpeg libtiff
       swig openexr ilmbase
-    ] ++ stdenv.lib.optional withPython python3;
+    ] ++ lib.optional withPython python3;
 
-    meta = with stdenv.lib; {
+    meta = with lib; {
       description = "A free, open source raytracer";
       homepage = "http://www.yafaray.org";
       maintainers = with maintainers; [ hodapp ];
       license = licenses.lgpl21;
-      platforms = platforms.linux;
+      platforms = [ "x86_64-linux" ];
     };
   }
 
diff --git a/pkgs/tools/graphics/yaxg/default.nix b/pkgs/tools/graphics/yaxg/default.nix
index 467210b27b3..9d83ae71d33 100644
--- a/pkgs/tools/graphics/yaxg/default.nix
+++ b/pkgs/tools/graphics/yaxg/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub, makeWrapper,
-  maim, slop, ffmpeg_3, byzanz, libnotify, xdpyinfo }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper,
+  maim, slop, ffmpeg, byzanz, libnotify, xdpyinfo }:
 
 stdenv.mkDerivation rec {
   pname = "yaxg";
@@ -13,16 +13,16 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [ makeWrapper ];
-  buildInputs = [ maim slop ffmpeg_3 byzanz libnotify xdpyinfo ];
+  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_3 byzanz libnotify xdpyinfo ]}
+    wrapProgram $out/bin/yaxg --prefix PATH : ${ lib.makeBinPath [ maim slop ffmpeg byzanz libnotify xdpyinfo ]}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit (src.meta) homepage;
     description = "Yet Another X Grabber script";
     longDescription = ''
diff --git a/pkgs/tools/graphics/zbar/default.nix b/pkgs/tools/graphics/zbar/default.nix
index 8e5d687d2ad..df0983b2d64 100644
--- a/pkgs/tools/graphics/zbar/default.nix
+++ b/pkgs/tools/graphics/zbar/default.nix
@@ -2,7 +2,7 @@
 , lib
 , fetchFromGitHub
 , imagemagickBig
-, pkgconfig
+, pkg-config
 , libX11
 , libv4l
 , qtbase
@@ -21,7 +21,7 @@
 
 stdenv.mkDerivation rec {
   pname = "zbar";
-  version = "0.23.1";
+  version = "0.23.90";
 
   outputs = [ "out" "lib" "dev" "doc" "man" ];
 
@@ -29,11 +29,11 @@ stdenv.mkDerivation rec {
     owner = "mchehab";
     repo = "zbar";
     rev = version;
-    sha256 = "0l4nxha8k18iqzrbqpgca49lrf1gigy3kpbzl3ldw2lw8alwy8x2";
+    sha256 = "sha256-FvV7TMc4JbOiRjWLka0IhtpGGqGm5fis7h870OmJw2U=";
   };
 
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     xmlto
     autoreconfHook
     docbook_xsl
diff --git a/pkgs/tools/graphics/zxing/default.nix b/pkgs/tools/graphics/zxing/default.nix
index d295a5899c5..18721390a51 100644
--- a/pkgs/tools/graphics/zxing/default.nix
+++ b/pkgs/tools/graphics/zxing/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, jre }:
+{ lib, stdenv, fetchurl, jre }:
 stdenv.mkDerivation rec {
   pname = "zxing";
   version = "3.1.0";
@@ -24,11 +24,10 @@ stdenv.mkDerivation rec {
     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;
+    description = "1D and 2D code reading library";
+    license = lib.licenses.asl20;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
     homepage = "https://github.com/zxing/zxing";
   };
 }
diff --git a/pkgs/tools/inputmethods/anthy/default.nix b/pkgs/tools/inputmethods/anthy/default.nix
index 9214edfefb0..03c692de8ec 100644
--- a/pkgs/tools/inputmethods/anthy/default.nix
+++ b/pkgs/tools/inputmethods/anthy/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "anthy-9100h";
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms   = platforms.unix;
   };
 
   src = fetchurl {
diff --git a/pkgs/tools/inputmethods/evdevremapkeys/default.nix b/pkgs/tools/inputmethods/evdevremapkeys/default.nix
index 0dc6f673925..73344ca2690 100644
--- a/pkgs/tools/inputmethods/evdevremapkeys/default.nix
+++ b/pkgs/tools/inputmethods/evdevremapkeys/default.nix
@@ -1,11 +1,8 @@
-{ stdenv, fetchFromGitHub, python3Packages }:
+{ lib, fetchFromGitHub, python3Packages }:
 
-let
-  pythonPackages = python3Packages;
-
-in pythonPackages.buildPythonPackage rec {
-  name = "${pname}-0.1.0";
+python3Packages.buildPythonPackage rec {
   pname = "evdevremapkeys";
+  version = "0.1.0";
 
   src = fetchFromGitHub {
     owner = "philipl";
@@ -14,14 +11,19 @@ in pythonPackages.buildPythonPackage rec {
     sha256 = "0c9slflakm5jqd8s1zpxm7gmrrk0335m040d7m70hnsak42jvs2f";
   };
 
-  propagatedBuildInputs = with pythonPackages; [ 
+  propagatedBuildInputs = with python3Packages; [
     pyyaml
     pyxdg
     python-daemon
     evdev
   ];
 
-  meta = with stdenv.lib; {
+  # hase no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "evdevremapkeys" ];
+
+  meta = with lib; {
     homepage = "https://github.com/philipl/evdevremapkeys";
     description = "Daemon to remap events on linux input devices";
     license = licenses.mit;
diff --git a/pkgs/tools/inputmethods/evscript/default.nix b/pkgs/tools/inputmethods/evscript/default.nix
new file mode 100644
index 00000000000..b8e91a74197
--- /dev/null
+++ b/pkgs/tools/inputmethods/evscript/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "evscript";
+  version = "git-${builtins.substring 0 7 src.rev}";
+
+  src = fetchFromGitHub {
+    owner = "myfreeweb";
+    repo = pname;
+    rev = "47f86f0d15add2af785ea1ff47f24d130026d1b4";
+    sha256 = "1xm8297k0d8d0aq7fxgmibr4qva4d02cb6gnnlzq77jcmnknxv14";
+  };
+
+  cargoSha256 = "1z0xxbjnhhzn1fnc3zhvy727l88qyyfqdayj5yvf3nh23m7sr87l";
+
+  meta = with lib; {
+    homepage = "https://github.com/myfreeweb/${pname}";
+    description = "A tiny sandboxed Dyon scripting environment for evdev input devices";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ milesbreslin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/inputmethods/fcitx-engines/fcitx-anthy/default.nix b/pkgs/tools/inputmethods/fcitx-engines/fcitx-anthy/default.nix
index d1e7f85f75f..74553dcebbb 100644
--- a/pkgs/tools/inputmethods/fcitx-engines/fcitx-anthy/default.nix
+++ b/pkgs/tools/inputmethods/fcitx-engines/fcitx-anthy/default.nix
@@ -1,23 +1,23 @@
-{ stdenv, fetchurl, cmake, fcitx, anthy, gettext, pkgconfig }:
+{ lib, stdenv, fetchurl, cmake, fcitx, anthy, gettext, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "fcitx-anthy";
-  version = "0.2.3";
+  version = "0.2.4";
 
   src = fetchurl {
     url = "http://download.fcitx-im.org/fcitx-anthy/${pname}-${version}.tar.xz";
-    sha256 = "01jx7wwq0mifqrzkswfglqhwkszbfcl4jinxgdgqx9kc6mb4k6zd";
+    sha256 = "sha256-Hxhs2RXuFf/bhczcQ3+Zj+gI3+Z4BEfIzMIfUOUNX7M=";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ cmake fcitx anthy gettext ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ fcitx anthy gettext ];
 
   preInstall = ''
     substituteInPlace src/cmake_install.cmake \
       --replace ${fcitx} $out
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     isFcitxEngine = true;
     description   = "Fcitx Wrapper for anthy";
     license       = licenses.gpl2Plus;
diff --git a/pkgs/tools/inputmethods/fcitx-engines/fcitx-chewing/default.nix b/pkgs/tools/inputmethods/fcitx-engines/fcitx-chewing/default.nix
index d9b202f7ef1..defbe616ab2 100644
--- a/pkgs/tools/inputmethods/fcitx-engines/fcitx-chewing/default.nix
+++ b/pkgs/tools/inputmethods/fcitx-engines/fcitx-chewing/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, fcitx, gettext, libchewing, pkgconfig }:
+{ lib, stdenv, fetchurl, cmake, fcitx, gettext, libchewing, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "fcitx-chewing";
@@ -9,8 +9,8 @@ stdenv.mkDerivation rec {
     sha256 = "1w5smp5zvjx681cp1znjypyr9sw5x6v0wnsk8a7ncwxi9q9wf4xk";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ cmake fcitx gettext libchewing ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ fcitx gettext libchewing ];
 
   preInstall = ''
    substituteInPlace src/cmake_install.cmake \
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
       --replace ${fcitx} $out
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     isFcitxEngine = true;
     homepage      = "https://github.com/fcitx/fcitx-chewing";
     downloadPage  = "http://download.fcitx-im.org/fcitx-chewing/";
diff --git a/pkgs/tools/inputmethods/fcitx-engines/fcitx-cloudpinyin/default.nix b/pkgs/tools/inputmethods/fcitx-engines/fcitx-cloudpinyin/default.nix
index 043b4438b3c..d84407e982b 100644
--- a/pkgs/tools/inputmethods/fcitx-engines/fcitx-cloudpinyin/default.nix
+++ b/pkgs/tools/inputmethods/fcitx-engines/fcitx-cloudpinyin/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, pkgconfig, fcitx, gettext, curl }:
+{ lib, stdenv, fetchurl, cmake, pkg-config, fcitx, gettext, curl }:
 
 stdenv.mkDerivation rec {
   pname = "fcitx-cloudpinyin";
@@ -9,8 +9,8 @@ stdenv.mkDerivation rec {
     sha256 = "0ai347wv3qdjzcbh0j9hdjpzwvh2kk57324xbxq37nzagrdgg5x0";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ cmake fcitx gettext curl ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ fcitx gettext curl ];
 
   preInstall = ''
     substituteInPlace src/cmake_install.cmake \
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
       --replace ${fcitx} $out
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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";
diff --git a/pkgs/tools/inputmethods/fcitx-engines/fcitx-hangul/default.nix b/pkgs/tools/inputmethods/fcitx-engines/fcitx-hangul/default.nix
index c9a40b84a6d..d99a0228e22 100644
--- a/pkgs/tools/inputmethods/fcitx-engines/fcitx-hangul/default.nix
+++ b/pkgs/tools/inputmethods/fcitx-engines/fcitx-hangul/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, fcitx, libhangul, gettext, pkgconfig }:
+{ lib, stdenv, fetchurl, cmake, fcitx, libhangul, gettext, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "fcitx-hangul";
@@ -9,8 +9,8 @@ stdenv.mkDerivation rec {
     sha256 = "0ds4071ljq620w7vnprm2jl8zqqkw7qsxvzbjapqak4jarczvmbd";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ cmake fcitx libhangul gettext ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ fcitx libhangul gettext ];
 
   preInstall = ''
     substituteInPlace src/cmake_install.cmake \
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
       --replace ${fcitx} $out
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     isFcitxEngine = true;
     homepage      = "https://github.com/fcitx/fcitx-hangul";
     downloadPage  = "http://download.fcitx-im.org/fcitx-hangul/";
diff --git a/pkgs/tools/inputmethods/fcitx-engines/fcitx-libpinyin/default.nix b/pkgs/tools/inputmethods/fcitx-engines/fcitx-libpinyin/default.nix
index 02724a94be3..2767b4c7c0e 100644
--- a/pkgs/tools/inputmethods/fcitx-engines/fcitx-libpinyin/default.nix
+++ b/pkgs/tools/inputmethods/fcitx-engines/fcitx-libpinyin/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, pkgconfig, fcitx, gettext, libpinyin, glib, pcre, dbus, qtwebengine, qtbase, fcitx-qt5 }:
+{ lib, stdenv, fetchurl, cmake, pkg-config, fcitx, gettext, libpinyin, glib, pcre, dbus, qtwebengine, qtbase, fcitx-qt5 }:
 
 stdenv.mkDerivation rec {
   pname = "fcitx-libpinyin";
@@ -9,8 +9,8 @@ stdenv.mkDerivation rec {
     sha256 = "196c229ckib3xvafkk4n3n3jk9rpksfcjsbbwka6a9k2f34qrjj6";
   };
 
-  nativeBuildInputs = [ pkgconfig  ];
-  buildInputs = [ fcitx-qt5 qtbase qtwebengine.dev cmake fcitx gettext libpinyin glib pcre dbus ];
+  nativeBuildInputs = [ cmake pkg-config  ];
+  buildInputs = [ fcitx-qt5 qtbase qtwebengine.dev 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,
@@ -42,7 +42,9 @@ stdenv.mkDerivation rec {
       cp -rv ${store_path} $NIX_BUILD_TOP/$name/data/${ZHUYIN_DATA_FILE_NAME}
     '';
 
-  meta = with stdenv.lib; {
+  dontWrapQtApps = true;
+
+  meta = with lib; {
     isFcitxEngine = true;
     description  = "Fcitx Wrapper for libpinyin, Library to deal with pinyin";
     homepage     = "https://github.com/fcitx/fcitx-libpinyin";
diff --git a/pkgs/tools/inputmethods/fcitx-engines/fcitx-m17n/default.nix b/pkgs/tools/inputmethods/fcitx-engines/fcitx-m17n/default.nix
index 8b25b2846ff..31a73555988 100644
--- a/pkgs/tools/inputmethods/fcitx-engines/fcitx-m17n/default.nix
+++ b/pkgs/tools/inputmethods/fcitx-engines/fcitx-m17n/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, fcitx, gettext, m17n_lib, m17n_db, pkgconfig }:
+{ lib, stdenv, fetchurl, cmake, fcitx, gettext, m17n_lib, m17n_db, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "fcitx-m17n";
@@ -9,15 +9,15 @@ stdenv.mkDerivation rec {
     sha256 = "15s52h979xz967f8lm0r0qkplig2w3wjck1ymndbg9kvj25ib0ng";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ cmake fcitx gettext m17n_lib m17n_db ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ fcitx gettext m17n_lib m17n_db ];
 
   preInstall = ''
     substituteInPlace im/cmake_install.cmake \
     --replace ${fcitx} $out
     '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     isFcitxEngine = true;
     homepage      = "https://github.com/fcitx/fcitx-m17n";
     downloadPage  = "http://download.fcitx-im.org/fcitx-table-other/";
diff --git a/pkgs/tools/inputmethods/fcitx-engines/fcitx-mozc/default.nix b/pkgs/tools/inputmethods/fcitx-engines/fcitx-mozc/default.nix
index 69ff9c1fe53..94a7d2444bf 100644
--- a/pkgs/tools/inputmethods/fcitx-engines/fcitx-mozc/default.nix
+++ b/pkgs/tools/inputmethods/fcitx-engines/fcitx-mozc/default.nix
@@ -1,5 +1,5 @@
-{ clangStdenv, fetchFromGitHub, fetchurl, fetchpatch, gyp, which, ninja,
-  python, pkgconfig, protobuf, gtk2, zinnia, qt5, libxcb, tegaki-zinnia-japanese,
+{ lib, clangStdenv, fetchFromGitHub, fetchurl, fetchpatch, gyp, which, ninja,
+  python, pkg-config, protobuf, gtk2, zinnia, qt5, libxcb, tegaki-zinnia-japanese,
   fcitx, gettext }:
 let
   japanese_usage_dictionary = fetchFromGitHub {
@@ -23,7 +23,7 @@ in clangStdenv.mkDerivation rec {
     sha256 = "0w2dy2j9x5nc7x3g95j17r3m60vbfyn5j617h7js9xryv33yzpgx";
   };
 
-  nativeBuildInputs = [ gyp which ninja python pkgconfig qt5.wrapQtAppsHook ];
+  nativeBuildInputs = [ gyp which ninja python pkg-config qt5.wrapQtAppsHook ];
   buildInputs = [ protobuf gtk2 zinnia qt5.qtbase libxcb fcitx gettext ];
 
   postUnpack = ''
@@ -100,7 +100,7 @@ in clangStdenv.mkDerivation rec {
     install    -m 644 fcitx-mozc-icons/*.png                 $out/share/fcitx/mozc/icon/
   '';
 
-  meta = with clangStdenv.lib; {
+  meta = with lib; {
     isFcitxEngine = true;
     description   = "Fcitx engine for Google japanese input method";
     homepage      = "https://github.com/google/mozc";
diff --git a/pkgs/tools/inputmethods/fcitx-engines/fcitx-rime/default.nix b/pkgs/tools/inputmethods/fcitx-engines/fcitx-rime/default.nix
index 1410dcc1f1c..42c02fe003d 100644
--- a/pkgs/tools/inputmethods/fcitx-engines/fcitx-rime/default.nix
+++ b/pkgs/tools/inputmethods/fcitx-engines/fcitx-rime/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, pkgconfig, fcitx, librime, brise, hicolor-icon-theme }:
+{ lib, stdenv, fetchurl, cmake, pkg-config, fcitx, librime, brise, hicolor-icon-theme }:
 
 stdenv.mkDerivation rec {
   pname = "fcitx-rime";
@@ -9,7 +9,8 @@ stdenv.mkDerivation rec {
     sha256 = "0bd8snfa6jr8dhnm0s0z021iryh5pbaf7p15rhkgbigw2pssczpr";
   };
 
-  buildInputs = [ cmake pkgconfig fcitx librime brise hicolor-icon-theme ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ fcitx librime brise hicolor-icon-theme ];
 
   # cmake cannont automatically find our nonstandard brise install location
   cmakeFlags = [ "-DRIME_DATA_DIR=${brise}/share/rime-data" ];
@@ -21,9 +22,7 @@ stdenv.mkDerivation rec {
        --replace ${fcitx} $out
   '';
 
-  enableParallelBuilding = true;
-
-  meta = with stdenv.lib; {
+  meta = with lib; {
     isFcitxEngine = true;
     homepage      = "https://github.com/fcitx/fcitx-rime";
     downloadPage  = "https://download.fcitx-im.org/fcitx-rime/";
diff --git a/pkgs/tools/inputmethods/fcitx-engines/fcitx-skk/default.nix b/pkgs/tools/inputmethods/fcitx-engines/fcitx-skk/default.nix
index 187587fbfb4..c1a1994a907 100644
--- a/pkgs/tools/inputmethods/fcitx-engines/fcitx-skk/default.nix
+++ b/pkgs/tools/inputmethods/fcitx-engines/fcitx-skk/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig, fcitx, libskk, skk-dicts }:
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, fcitx, libskk, skk-dicts }:
 
 stdenv.mkDerivation {
   pname = "fcitx-skk";
@@ -10,7 +10,7 @@ stdenv.mkDerivation {
     sha256 = "1yl2syqrk212h26vzzkwl19fyp71inqmsli9411h4n2hbcp6m916";
   };
 
-  nativeBuildInputs = [ cmake pkgconfig ];
+  nativeBuildInputs = [ cmake pkg-config ];
   buildInputs = [ fcitx libskk skk-dicts ];
 
   cmakeFlags = [ "-DSKK_DEFAULT_PATH=${skk-dicts}/share/SKK-JISYO.combined"
@@ -25,7 +25,7 @@ stdenv.mkDerivation {
       --replace ${fcitx} $out
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     isFcitxEngine = true;
     description   = "A SKK style input method engine for fcitx";
     longDescription = ''
diff --git a/pkgs/tools/inputmethods/fcitx-engines/fcitx-table-extra/default.nix b/pkgs/tools/inputmethods/fcitx-engines/fcitx-table-extra/default.nix
index 833e417ae91..399d426dc3e 100644
--- a/pkgs/tools/inputmethods/fcitx-engines/fcitx-table-extra/default.nix
+++ b/pkgs/tools/inputmethods/fcitx-engines/fcitx-table-extra/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, fcitx, gettext }:
+{ lib, stdenv, fetchurl, cmake, fcitx, gettext }:
 
 stdenv.mkDerivation rec {
   pname = "fcitx-table-extra";
@@ -9,14 +9,15 @@ stdenv.mkDerivation rec {
     sha256 = "c91bb19c1a7b53c5339bf2f75ae83839020d337990f237a8b9bc0f4416c120ef";
   };
 
-  buildInputs = [ cmake fcitx gettext ];
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ fcitx gettext ];
 
   preInstall = ''
    substituteInPlace tables/cmake_install.cmake \
       --replace ${fcitx} $out
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     isFcitxEngine = true;
     homepage      = "https://github.com/fcitx/fcitx-table-extra";
     downloadPage  = "http://download.fcitx-im.org/fcitx-table-extra/";
diff --git a/pkgs/tools/inputmethods/fcitx-engines/fcitx-table-other/default.nix b/pkgs/tools/inputmethods/fcitx-engines/fcitx-table-other/default.nix
index ffee83875a1..410569b7afb 100644
--- a/pkgs/tools/inputmethods/fcitx-engines/fcitx-table-other/default.nix
+++ b/pkgs/tools/inputmethods/fcitx-engines/fcitx-table-other/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, fcitx, gettext }:
+{ lib, stdenv, fetchurl, cmake, fcitx, gettext }:
 
 stdenv.mkDerivation rec {
   pname = "fcitx-table-other";
@@ -9,14 +9,15 @@ stdenv.mkDerivation rec {
     sha256 = "1di60lr6l5k2sdwi3yrc0hl89j2k0yipayrsn803vd040w1fgfhq";
   };
 
-  buildInputs = [ cmake fcitx gettext ];
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ fcitx gettext ];
 
   preInstall = ''
    substituteInPlace tables/cmake_install.cmake \
       --replace ${fcitx} $out
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     isFcitxEngine = true;
     homepage      = "https://github.com/fcitx/fcitx-table-other";
     downloadPage  = "http://download.fcitx-im.org/fcitx-table-other/";
diff --git a/pkgs/tools/inputmethods/fcitx-engines/fcitx-unikey/default.nix b/pkgs/tools/inputmethods/fcitx-engines/fcitx-unikey/default.nix
index 1deff93e201..5422efb9d38 100644
--- a/pkgs/tools/inputmethods/fcitx-engines/fcitx-unikey/default.nix
+++ b/pkgs/tools/inputmethods/fcitx-engines/fcitx-unikey/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, fcitx, gettext, pkgconfig }:
+{ lib, stdenv, fetchurl, cmake, fcitx, gettext, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "fcitx-unikey";
@@ -9,8 +9,8 @@ stdenv.mkDerivation rec {
     sha256 = "063vc29v7ycaai98v3z4q319sv9sm91my17pmhblw1vifxnw02wf";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ cmake fcitx gettext ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ fcitx gettext ];
 
   NIX_CFLAGS_COMPILE = "-Wno-narrowing";
 
@@ -20,8 +20,8 @@ stdenv.mkDerivation rec {
     substituteInPlace data/cmake_install.cmake \
       --replace ${fcitx} $out
   '';
-  
-  meta = with stdenv.lib; {
+
+  meta = with lib; {
     isFcitxEngine = true;
     homepage      = "https://github.com/fcitx/fcitx-unikey";
     downloadPage  = "http://download.fcitx-im.org/fcitx-table-other/";
diff --git a/pkgs/tools/inputmethods/fcitx/default.nix b/pkgs/tools/inputmethods/fcitx/default.nix
index 69e4425d8c3..fc28a08b4b7 100644
--- a/pkgs/tools/inputmethods/fcitx/default.nix
+++ b/pkgs/tools/inputmethods/fcitx/default.nix
@@ -1,11 +1,11 @@
 { callPackage, plugins ? [] }:
 
-let 
+let
   unwrapped = callPackage ./unwrapped.nix { };
   wrapped   = callPackage ./wrapper.nix {
     plugins = plugins;
     fcitx   = unwrapped;
   };
-in if plugins == [] 
+in if plugins == []
    then unwrapped
    else wrapped
diff --git a/pkgs/tools/inputmethods/fcitx/fcitx-configtool.nix b/pkgs/tools/inputmethods/fcitx/fcitx-configtool.nix
index ae9d8d0f53f..3d34dcbac17 100644
--- a/pkgs/tools/inputmethods/fcitx/fcitx-configtool.nix
+++ b/pkgs/tools/inputmethods/fcitx/fcitx-configtool.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchurl, makeWrapper, pkgconfig, cmake, fcitx, gtk3, isocodes, gnome3 }:
+{ lib, stdenv, fetchurl, makeWrapper, pkg-config, cmake, fcitx, gtk3, isocodes, gnome }:
 
 stdenv.mkDerivation rec {
   name = "fcitx-configtool-0.4.10";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "GTK-based config tool for Fcitx";
     license     = licenses.gpl2;
     platforms   = platforms.linux;
@@ -15,9 +15,8 @@ stdenv.mkDerivation rec {
     sha256 = "1yyi9jhkwn49lx9a47k1zbvwgazv4y4z72gnqgzdpgdzfrlrgi5w";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ makeWrapper fcitx cmake isocodes gtk3
-    gnome3.adwaita-icon-theme ];
+  nativeBuildInputs = [ cmake pkg-config makeWrapper ];
+  buildInputs = [ fcitx isocodes gtk3 gnome.adwaita-icon-theme ];
 
   # Patch paths to `fcitx-remote`
   prePatch = ''
@@ -32,4 +31,3 @@ stdenv.mkDerivation rec {
       --prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS";
   '';
 }
-
diff --git a/pkgs/tools/inputmethods/fcitx/fcitx-qt5.nix b/pkgs/tools/inputmethods/fcitx/fcitx-qt5.nix
index 3fd1efcc343..391c2c7add2 100644
--- a/pkgs/tools/inputmethods/fcitx/fcitx-qt5.nix
+++ b/pkgs/tools/inputmethods/fcitx/fcitx-qt5.nix
@@ -2,7 +2,7 @@
 , cmake
 , extra-cmake-modules
 , fcitx
-, pkgconfig
+, pkg-config
 , qtbase
 }:
 
@@ -17,7 +17,7 @@ mkDerivation rec {
     sha256 = "0860v3rxsh054wkkbawvyin5mk0flp4cwfcpmcpq147lvdm5lq2i";
   };
 
-  nativeBuildInputs = [ cmake extra-cmake-modules pkgconfig ];
+  nativeBuildInputs = [ cmake extra-cmake-modules pkg-config ];
 
   buildInputs = [ fcitx qtbase ];
 
diff --git a/pkgs/tools/inputmethods/fcitx/unwrapped.nix b/pkgs/tools/inputmethods/fcitx/unwrapped.nix
index 99a92a95060..e9d7f0765b7 100644
--- a/pkgs/tools/inputmethods/fcitx/unwrapped.nix
+++ b/pkgs/tools/inputmethods/fcitx/unwrapped.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, pkgconfig, cmake, intltool, gettext
+{ lib, stdenv, fetchurl, pkg-config, 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
+, xkeyboard_config, pcre, libuuid, xorg, makeWrapper
 , withPinyin ? true
 , fetchFromGitLab
 }:
@@ -52,7 +52,7 @@ stdenv.mkDerivation rec {
     cp ${dicts} src/module/spell/dict/$(stripHash ${dicts})
     cp ${table} src/im/table/data/$(stripHash ${table})
   ''
-  + stdenv.lib.optionalString withPinyin ''
+  + 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})
@@ -68,7 +68,12 @@ stdenv.mkDerivation rec {
     patchShebangs cmake/
   '';
 
-  nativeBuildInputs = [ cmake extra-cmake-modules intltool pkgconfig pcre ];
+  postInstall = ''
+    wrapProgram $out/bin/fcitx \
+      --prefix PATH : "${xorg.xmodmap}/bin"
+  '';
+
+  nativeBuildInputs = [ cmake extra-cmake-modules intltool pkg-config pcre makeWrapper ];
 
   buildInputs = [
     xkeyboard_config enchant2 gettext isocodes icu libpthreadstubs libXau libXdmcp libxkbfile
@@ -90,7 +95,7 @@ stdenv.mkDerivation rec {
     "-DXKB_RULES_XML_FILE='${xkeyboard_config}/share/X11/xkb/rules/evdev.xml'"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage    = "https://github.com/fcitx/fcitx";
     description = "A Flexible Input Method Framework";
     license     = licenses.gpl2;
diff --git a/pkgs/tools/inputmethods/fcitx/wrapper.nix b/pkgs/tools/inputmethods/fcitx/wrapper.nix
index 28a08e39b22..6e7e71c5713 100644
--- a/pkgs/tools/inputmethods/fcitx/wrapper.nix
+++ b/pkgs/tools/inputmethods/fcitx/wrapper.nix
@@ -5,7 +5,7 @@ symlinkJoin {
 
   paths = [ fcitx fcitx-configtool libsForQt5.fcitx-qt5 ] ++ plugins;
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
   postBuild = ''
     wrapProgram $out/bin/fcitx \
diff --git a/pkgs/tools/inputmethods/fcitx5/default.nix b/pkgs/tools/inputmethods/fcitx5/default.nix
new file mode 100644
index 00000000000..ee801fdb24a
--- /dev/null
+++ b/pkgs/tools/inputmethods/fcitx5/default.nix
@@ -0,0 +1,102 @@
+{ lib, stdenv
+, fetchurl
+, fetchFromGitHub
+, pkg-config
+, cmake
+, extra-cmake-modules
+, cairo
+, cldr-emoji-annotation
+, pango
+, fribidi
+, fmt
+, wayland
+, systemd
+, wayland-protocols
+, json_c
+, isocodes
+, xkeyboard_config
+, enchant
+, gdk-pixbuf
+, libGL
+, libevent
+, libuuid
+, libselinux
+, libXdmcp
+, libsepol
+, libxkbcommon
+, libthai
+, libdatrie
+, xcbutilkeysyms
+, pcre
+, xcbutilwm
+, xcb-imdkit
+, libxkbfile
+}:
+let
+  enDictVer = "20121020";
+  enDict = fetchurl {
+    url = "https://download.fcitx-im.org/data/en_dict-${enDictVer}.tar.gz";
+    sha256 = "1svcb97sq7nrywp5f2ws57cqvlic8j6p811d9ngflplj8xw5sjn4";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "fcitx5";
+  version = "5.0.8";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "0czj2awvgk9apdh9rj3vcb04g8x2wp1d4sshvch31nwpqs10hssr";
+  };
+
+  prePatch = ''
+    ln -s ${enDict} src/modules/spell/dict/$(stripHash ${enDict})
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    pkg-config
+  ];
+
+  buildInputs = [
+    fmt
+    isocodes
+    cairo
+    enchant
+    pango
+    libthai
+    libdatrie
+    fribidi
+    systemd
+    gdk-pixbuf
+    wayland
+    wayland-protocols
+    cldr-emoji-annotation
+    json_c
+    libGL
+    libevent
+    libuuid
+    libselinux
+    libsepol
+    libXdmcp
+    libxkbcommon
+    pcre
+    xcbutilwm
+    xcbutilkeysyms
+    xcb-imdkit
+    xkeyboard_config
+    libxkbfile
+  ];
+
+  passthru.updateScript = ./update.py;
+
+  meta = with lib; {
+    description = "Next generation of fcitx";
+    homepage = "https://github.com/fcitx/fcitx5";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/inputmethods/fcitx5/fcitx5-chinese-addons.nix b/pkgs/tools/inputmethods/fcitx5/fcitx5-chinese-addons.nix
new file mode 100644
index 00000000000..3a4a38c6b70
--- /dev/null
+++ b/pkgs/tools/inputmethods/fcitx5/fcitx5-chinese-addons.nix
@@ -0,0 +1,76 @@
+{ lib
+, mkDerivation
+, fetchurl
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, boost
+, libime
+, fcitx5
+, fcitx5-qt
+, fcitx5-lua
+, qtwebengine
+, opencc
+, curl
+, fmt
+, luaSupport ? true
+}:
+
+let
+  pyStrokeVer = "20121124";
+  pyStroke = fetchurl {
+    url = "http://download.fcitx-im.org/data/py_stroke-${pyStrokeVer}.tar.gz";
+    sha256 = "0j72ckmza5d671n2zg0psg7z9iils4gyxz7jgkk54fd4pyljiccf";
+  };
+  pyTableVer = "20121124";
+  pyTable = fetchurl {
+    url = "http://download.fcitx-im.org/data/py_table-${pyTableVer}.tar.gz";
+    sha256 = "011cg7wssssm6hm564cwkrrnck2zj5rxi7p9z5akvhg6gp4nl522";
+  };
+in
+
+mkDerivation rec {
+  pname = "fcitx5-chinese-addons";
+  version = "5.0.6";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = "fcitx5-chinese-addons";
+    rev = version;
+    sha256 = "sha256-+DhXFqUxECGZYHAmEw5cZJQnRHHgvT0nVVqY9DXgWBU=";
+  };
+
+  cmakeFlags = [
+    "-DUSE_WEBKIT=off"
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    boost
+    fcitx5-lua
+  ];
+
+  prePatch = ''
+    ln -s ${pyStroke} modules/pinyinhelper/$(stripHash ${pyStroke})
+    ln -s ${pyTable} modules/pinyinhelper/$(stripHash ${pyTable})
+  '';
+
+  buildInputs = [
+    fcitx5
+    fcitx5-qt
+    libime
+    curl
+    opencc
+    qtwebengine
+    fmt
+  ] ++ lib.optional luaSupport fcitx5-lua;
+
+  meta = with lib; {
+    description = "Addons related to Chinese, including IME previous bundled inside fcitx4";
+    homepage = "https://github.com/fcitx/fcitx5-chinese-addons";
+    license = with licenses; [ gpl2Plus lgpl21Plus ];
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/inputmethods/fcitx5/fcitx5-configtool.nix b/pkgs/tools/inputmethods/fcitx5/fcitx5-configtool.nix
new file mode 100644
index 00000000000..584a1b932f4
--- /dev/null
+++ b/pkgs/tools/inputmethods/fcitx5/fcitx5-configtool.nix
@@ -0,0 +1,62 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, fcitx5
+, fcitx5-qt
+, qtx11extras
+, qtquickcontrols2
+, kwidgetsaddons
+, kdeclarative
+, kirigami2
+, isocodes
+, xkeyboardconfig
+, libxkbfile
+, libXdmcp
+, kcmSupport ? true
+}:
+
+mkDerivation rec {
+  pname = "fcitx5-configtool";
+  version = "5.0.5";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "0w6cgg57ldk02j3fs7mm8pn5inblcjyr20d3xl5qbyawwccjsn2m";
+  };
+
+  cmakeFlags = [
+    "-DKDE_INSTALL_USE_QT_SYS_PATHS=ON"
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+  ];
+
+  buildInputs = [
+    fcitx5
+    fcitx5-qt
+    qtx11extras
+    qtquickcontrols2
+    kirigami2
+    isocodes
+    xkeyboardconfig
+    libxkbfile
+    libXdmcp
+  ] ++ lib.optionals kcmSupport [
+    kdeclarative
+    kwidgetsaddons
+  ];
+
+  meta = with lib; {
+    description = "Configuration Tool for Fcitx5";
+    homepage = "https://github.com/fcitx/fcitx5-configtool";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/inputmethods/fcitx5/fcitx5-gtk.nix b/pkgs/tools/inputmethods/fcitx5/fcitx5-gtk.nix
new file mode 100644
index 00000000000..7b27184cde3
--- /dev/null
+++ b/pkgs/tools/inputmethods/fcitx5/fcitx5-gtk.nix
@@ -0,0 +1,81 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, fcitx5
+, gobject-introspection
+, glib
+, gtk2
+, gtk3
+, gtk4
+, fmt
+, pcre
+, libuuid
+, libselinux
+, libsepol
+, libthai
+, libdatrie
+, libXdmcp
+, libxkbcommon
+, epoxy
+, dbus
+, at-spi2-core
+, libXtst
+, withGTK2 ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx5-gtk";
+  version = "5.0.7";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "0vcikqrxv1xxcdaiz3axgm7rpab4w8aciw838sbpa9l20dp8cnyq";
+  };
+
+  cmakeFlags = [
+    "-DGOBJECT_INTROSPECTION_GIRDIR=share/gir-1.0"
+    "-DGOBJECT_INTROSPECTION_TYPELIBDIR=lib/girepository-1.0"
+  ] ++ lib.optional (! withGTK2) "-DENABLE_GTK2_IM_MODULE=off";
+
+  buildInputs = [
+    glib
+    gtk3
+    gtk4
+    fmt
+    gobject-introspection
+    fcitx5
+    pcre
+    libuuid
+    libselinux
+    libsepol
+    libthai
+    libdatrie
+    libXdmcp
+    libxkbcommon
+    epoxy
+    dbus
+    at-spi2-core
+    libXtst
+  ] ++ lib.optional withGTK2 gtk2;
+
+  NIX_CFLAGS_COMPILE = lib.concatMapStringsSep " " (s: "-isystem ${s}") [
+    "${glib.dev}/include/gio-unix-2.0"
+    "${glib.dev}/include/glib-2.0"
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+  ];
+
+  meta = with lib; {
+    description = "Fcitx5 gtk im module and glib based dbus client library";
+    homepage = "https://github.com/fcitx/fcitx5-gtk";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/inputmethods/fcitx5/fcitx5-lua.nix b/pkgs/tools/inputmethods/fcitx5/fcitx5-lua.nix
new file mode 100644
index 00000000000..879e6ffa78f
--- /dev/null
+++ b/pkgs/tools/inputmethods/fcitx5/fcitx5-lua.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, fcitx5
+, lua5_3
+, luaPackage ? lua5_3
+, gettext
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx5-lua";
+  version = "5.0.5";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = "fcitx5-lua";
+    rev = version;
+    sha256 = "0x7b78rz9mdyhm3y8yi7kihah7fgqzjyfgqwjyfx3i90wxflnmmc";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+  ];
+
+  buildInputs = [
+    fcitx5
+    luaPackage
+    gettext
+  ];
+
+  meta = with lib; {
+    description = "Lua support for Fcitx 5";
+    homepage = "https://github.com/fcitx/fcitx5-lua";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/inputmethods/fcitx5/fcitx5-m17n.nix b/pkgs/tools/inputmethods/fcitx5/fcitx5-m17n.nix
new file mode 100644
index 00000000000..9a90ab3ca7d
--- /dev/null
+++ b/pkgs/tools/inputmethods/fcitx5/fcitx5-m17n.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, pkg-config
+, fcitx5
+, m17n_lib
+, m17n_db
+, gettext
+, fmt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx5-m17n";
+  version = "5.0.5";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-duL9FgXPCr4/rMuguw8cf3EIdK6MW/alUNeh1yduY68=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    pkg-config
+    gettext
+  ];
+
+  buildInputs = [
+    fcitx5
+    m17n_db
+    m17n_lib
+    fmt
+  ];
+
+  meta = with lib; {
+    description = "m17n support for Fcitx5";
+    homepage = "https://github.com/fcitx/fcitx5-m17n";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ Technical27 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/inputmethods/fcitx5/fcitx5-mozc.nix b/pkgs/tools/inputmethods/fcitx5/fcitx5-mozc.nix
new file mode 100644
index 00000000000..57bb0220b31
--- /dev/null
+++ b/pkgs/tools/inputmethods/fcitx5/fcitx5-mozc.nix
@@ -0,0 +1,106 @@
+{ lib, clangStdenv, fetchFromGitHub, fetchurl, fetchpatch, fetchgit
+, python3Packages, ninja, pkg-config, protobuf, zinnia, qt5, fcitx5
+, jsoncpp, gtest, which, gtk2, unzip, abseil-cpp, breakpad }:
+let
+  inherit (python3Packages) python gyp six;
+  japanese_usage_dictionary = fetchFromGitHub {
+    owner = "hiroyuki-komatsu";
+    repo = "japanese-usage-dictionary";
+    rev = "e5b3425575734c323e1d947009dd74709437b684";
+    sha256 = "0pyrpz9c8nxccwpgyr36w314mi8h132cis8ijvlqmmhqxwsi30hm";
+  };
+  zipcode_rel = "202011";
+  jigyosyo = fetchurl {
+    url = "https://osdn.net/projects/ponsfoot-aur/storage/mozc/jigyosyo-${zipcode_rel}.zip";
+    sha256 = "j7MkNtd4+QTi91EreVig4/OV0o5y1+KIjEJBEmLK/mY=";
+  };
+  x-ken-all = fetchurl {
+    url =
+      "https://osdn.net/projects/ponsfoot-aur/storage/mozc/x-ken-all-${zipcode_rel}.zip";
+    sha256 = "ExS0Cg3rs0I9IOVbZHLt8UEfk8/LmY9oAHPVVlYuTPw=";
+  };
+
+in clangStdenv.mkDerivation rec {
+  pname = "fcitx5-mozc";
+  version = "2.26.4220.102";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = "mozc";
+    rev = "1882e33b61673b66d63277f82b4c80ae4e506c10";
+    sha256 = "R+w0slVFpqtt7PIr1pyupJjRoQsABVZiMdZ9fKGKAqw=";
+  };
+
+  nativeBuildInputs = [ gyp ninja python pkg-config qt5.wrapQtAppsHook six which unzip ];
+
+  buildInputs = [ protobuf zinnia qt5.qtbase fcitx5 abseil-cpp jsoncpp gtest gtk2 ];
+
+  patches = [
+    # Support linking system abseil-cpp
+    (fetchpatch {
+      url = "https://salsa.debian.org/debian/mozc/-/raw/debian/sid/debian/patches/0007-Update-src-base-absl.gyp.patch";
+      sha256 = "UiS0UScDKyAusXOhc7Bg8dF8ARQQiVTylEhAOxqaZt8=";
+    })
+
+  ];
+
+  postUnpack = ''
+    unzip ${x-ken-all} -d $sourceRoot/src/
+    unzip ${jigyosyo} -d $sourceRoot/src/
+
+    rmdir $sourceRoot/src/third_party/breakpad/
+    ln -s ${breakpad} $sourceRoot/src/third_party/breakpad
+    rmdir $sourceRoot/src/third_party/gtest/
+    ln -s ${gtest} $sourceRoot/src/third_party/gtest
+    rmdir $sourceRoot/src/third_party/gyp/
+    ln -s ${gyp} $sourceRoot/src/third_party/gyp
+    rmdir $sourceRoot/src/third_party/japanese_usage_dictionary/
+    ln -s ${japanese_usage_dictionary} $sourceRoot/src/third_party/japanese_usage_dictionary
+  '';
+
+  # Copied from https://github.com/archlinux/svntogit-community/blob/packages/fcitx5-mozc/trunk/PKGBUILD
+  configurePhase = ''
+    cd src
+    export GYP_DEFINES="document_dir=$out/share/doc/mozc use_libzinnia=1 use_libprotobuf=1 use_libabseil=1"
+
+    # disable fcitx4
+    rm unix/fcitx/fcitx.gyp
+
+    # gen zip code seed
+    PYTHONPATH="$PWD:$PYTHONPATH" python dictionary/gen_zip_code_seed.py --zip_code="x-ken-all.csv" --jigyosyo="JIGYOSYO.CSV" >> data/dictionary_oss/dictionary09.txt
+
+    # use libstdc++ instead of libc++
+    sed "/stdlib=libc++/d;/-lc++/d" -i gyp/common.gypi
+
+    # run gyp
+    python build_mozc.py gyp --gypdir=${gyp}/bin --server_dir=$out/lib/mozc
+  '';
+
+  buildPhase = ''
+    python build_mozc.py build -c Release \
+      server/server.gyp:mozc_server \
+      gui/gui.gyp:mozc_tool \
+      unix/fcitx5/fcitx5.gyp:fcitx5-mozc
+  '';
+
+  installPhase = ''
+    export PREFIX=$out
+    export _bldtype=Release
+    ../scripts/install_server
+    install -d $out/share/licenses/fcitx5-mozc
+    head -n 29 server/mozc_server.cc > $out/share/licenses/fcitx5-mozc/LICENSE
+    install -m644 data/installer/*.html $out/share/licenses/fcitx5-mozc/
+    install -d $out/share/fcitx5/addon
+    install -d $out/share/fcitx5/inputmethod
+    install -d $out/lib/fcitx5
+    ../scripts/install_fcitx5
+  '';
+
+  meta = with lib; {
+    description = "Fcitx5 Module of A Japanese Input Method for Chromium OS, Windows, Mac and Linux (the Open Source Edition of Google Japanese Input)";
+    homepage = "https://github.com/fcitx/mozc";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ berberman ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/inputmethods/fcitx5/fcitx5-qt.nix b/pkgs/tools/inputmethods/fcitx5/fcitx5-qt.nix
new file mode 100644
index 00000000000..40465d55e40
--- /dev/null
+++ b/pkgs/tools/inputmethods/fcitx5/fcitx5-qt.nix
@@ -0,0 +1,53 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, fcitx5
+, qtx11extras
+, libxcb
+, libXdmcp
+, qtbase
+}:
+
+mkDerivation rec {
+  pname = "fcitx5-qt";
+  version = "5.0.6";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = "fcitx5-qt";
+    rev = version;
+    sha256 = "sha256-Y7X4pkBSf5FMpf1mdyLvr1QWhqz3yC4iOGXDvvvV9Yw=";
+  };
+
+  preConfigure = ''
+    substituteInPlace qt5/platforminputcontext/CMakeLists.txt \
+      --replace \$"{CMAKE_INSTALL_QT5PLUGINDIR}" $out/${qtbase.qtPluginPrefix}
+  '';
+
+  cmakeFlags = [
+    "-DENABLE_QT4=0"
+    "-DENABLE_QT6=0"
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+  ];
+
+  buildInputs = [
+    fcitx5
+    qtx11extras
+    libxcb
+    libXdmcp
+  ];
+
+  meta = with lib; {
+    description = "Fcitx5 Qt Library";
+    homepage = "https://github.com/fcitx/fcitx5-qt";
+    license = with licenses; [ lgpl21Plus bsd3 ];
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix b/pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix
new file mode 100644
index 00000000000..cd362e94ef5
--- /dev/null
+++ b/pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv
+, fetchFromGitHub
+, pkg-config
+, cmake
+, extra-cmake-modules
+, gettext
+, fcitx5
+, librime
+, brise
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx5-rime";
+  version = "5.0.6";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "1r36c1pl63vka9mxa8f5x0kijapjgxzz5b4db8h87ri9kcxk7i2g";
+  };
+
+  cmakeFlags = [
+    "-DRIME_DATA_DIR=${brise}/share/rime-data"
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    pkg-config
+    gettext
+  ];
+
+  buildInputs = [
+    fcitx5
+    librime
+  ];
+
+  meta = with lib; {
+    description = "RIME support for Fcitx5";
+    homepage = "https://github.com/fcitx/fcitx5-rime";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/inputmethods/fcitx5/fcitx5-table-extra.nix b/pkgs/tools/inputmethods/fcitx5/fcitx5-table-extra.nix
new file mode 100644
index 00000000000..570893c2ade
--- /dev/null
+++ b/pkgs/tools/inputmethods/fcitx5/fcitx5-table-extra.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, gettext
+, libime
+, boost
+, fcitx5
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx5-table-extra";
+  version = "5.0.4";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "1rhm9jyqxlsgjsn3f5n9jwm5qjcgg87widp0bv1xa9cc23mydrqv";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    gettext
+    libime
+    boost
+    fcitx5
+  ];
+
+  meta = with lib; {
+    description = "Extra table for Fcitx, including Boshiamy, Zhengma, Cangjie, and Quick";
+    homepage = "https://github.com/fcitx/fcitx5-table-extra";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/inputmethods/fcitx5/fcitx5-table-other.nix b/pkgs/tools/inputmethods/fcitx5/fcitx5-table-other.nix
new file mode 100644
index 00000000000..00e13bc756f
--- /dev/null
+++ b/pkgs/tools/inputmethods/fcitx5/fcitx5-table-other.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, gettext
+, libime
+, boost
+, fcitx5
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fcitx5-table-other";
+  version = "5.0.5";
+
+  src = fetchFromGitHub {
+    owner = "fcitx";
+    repo = pname;
+    rev = version;
+    sha256 = "0z34y05sbb2qavpa6banv7xvlsmpymmm828265r8bf7r995wx8lz";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    gettext
+    libime
+    boost
+    fcitx5
+  ];
+
+  meta = with lib; {
+    description = "Some other tables for Fcitx";
+    homepage = "https://github.com/fcitx/fcitx5-table-other";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ poscat ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/inputmethods/fcitx5/update.py b/pkgs/tools/inputmethods/fcitx5/update.py
new file mode 100755
index 00000000000..9f54e313fd3
--- /dev/null
+++ b/pkgs/tools/inputmethods/fcitx5/update.py
@@ -0,0 +1,28 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i python3 -p nix-update nix-prefetch-github python3Packages.requests
+
+from nix_prefetch_github import *
+import json
+import requests
+import subprocess
+
+REPOS = [ "libime", "xcb-imdkit", "fcitx5", "fcitx5-gtk", "fcitx5-qt", "fcitx5-configtool", "fcitx5-lua",
+          "fcitx5-rime", "fcitx5-chinese-addons", "fcitx5-table-extra", "fcitx5-table-other" ]
+
+OWNER = "fcitx"
+
+def get_latest_tag(repo, owner=OWNER):
+    r = requests.get('https://api.github.com/repos/{}/{}/tags'.format(owner,repo))
+    return r.json()[0].get("name")
+
+def main():
+    sources = dict()
+    for repo in REPOS:
+        rev = get_latest_tag(repo)
+        if repo == "fcitx5-qt":
+            subprocess.run(["nix-update", "--commit", "--version", rev, "libsForQt5.{}".format(repo)])
+        else:
+            subprocess.run(["nix-update", "--commit", "--version", rev, repo])
+
+if __name__ == "__main__":
+    main ()
diff --git a/pkgs/tools/inputmethods/fcitx5/with-addons.nix b/pkgs/tools/inputmethods/fcitx5/with-addons.nix
new file mode 100644
index 00000000000..020e829f098
--- /dev/null
+++ b/pkgs/tools/inputmethods/fcitx5/with-addons.nix
@@ -0,0 +1,26 @@
+{ symlinkJoin, makeWrapper, fcitx5, fcitx5-lua, fcitx5-configtool, fcitx5-qt, fcitx5-gtk, addons ? [] }:
+
+symlinkJoin {
+  name = "fcitx5-with-addons-${fcitx5.version}";
+
+  paths = [ fcitx5 fcitx5-configtool fcitx5-lua fcitx5-qt fcitx5-gtk ] ++ addons;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/fcitx5 \
+      --prefix FCITX_ADDON_DIRS : "$out/lib/fcitx5" \
+      --suffix XDG_DATA_DIRS : "$out/share" \
+      --suffix PATH : "$out/bin"
+
+    desktop=share/applications/org.fcitx.Fcitx5.desktop
+    autostart=etc/xdg/autostart/org.fcitx.Fcitx5.desktop
+    rm $out/$desktop
+    rm $out/$autostart
+    cp ${fcitx5}/$desktop $out/$desktop
+    sed -i $out/$desktop -e "s|^Exec=.*|Exec=$out/bin/fcitx5|g"
+    ln -s $out/$desktop $out/$autostart
+  '';
+
+  meta = fcitx5.meta;
+}
diff --git a/pkgs/tools/inputmethods/fusuma/default.nix b/pkgs/tools/inputmethods/fusuma/default.nix
index a8901dfb0e4..dc6d3a09bfa 100644
--- a/pkgs/tools/inputmethods/fusuma/default.nix
+++ b/pkgs/tools/inputmethods/fusuma/default.nix
@@ -18,7 +18,7 @@ bundlerApp {
     description = "Multitouch gestures with libinput driver on X11, Linux";
     homepage = "https://github.com/iberianpig/fusuma";
     license = licenses.mit;
-    maintainers = with maintainers; [ jfrankenau nicknovitski filalex77 ];
+    maintainers = with maintainers; [ jfrankenau nicknovitski Br1ght0ne ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/inputmethods/fusuma/gemset.nix b/pkgs/tools/inputmethods/fusuma/gemset.nix
index 2dd9af421ba..87e0ae14da8 100644
--- a/pkgs/tools/inputmethods/fusuma/gemset.nix
+++ b/pkgs/tools/inputmethods/fusuma/gemset.nix
@@ -9,4 +9,4 @@
     };
     version = "1.3.0";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/inputmethods/gebaar-libinput/default.nix b/pkgs/tools/inputmethods/gebaar-libinput/default.nix
index 6d4947e517e..7506493ee7c 100644
--- a/pkgs/tools/inputmethods/gebaar-libinput/default.nix
+++ b/pkgs/tools/inputmethods/gebaar-libinput/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchFromGitHub, pkgconfig, cmake, libinput, zlib }:
+{ stdenv, lib, fetchFromGitHub, pkg-config, cmake, libinput, zlib }:
 
 stdenv.mkDerivation rec {
   pname = "gebaar-libinput";
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
     fetchSubmodules = true;
   };
 
-  nativeBuildInputs = [ pkgconfig cmake ];
+  nativeBuildInputs = [ pkg-config cmake ];
   buildInputs = [ libinput zlib ];
 
   meta = with lib; {
diff --git a/pkgs/tools/inputmethods/hime/default.nix b/pkgs/tools/inputmethods/hime/default.nix
new file mode 100644
index 00000000000..4c86fb04cf0
--- /dev/null
+++ b/pkgs/tools/inputmethods/hime/default.nix
@@ -0,0 +1,47 @@
+{ stdenv
+, fetchFromGitHub
+, pkg-config
+, which
+, gtk2
+, gtk3
+, qt4
+, qt5
+, libXtst
+, lib
+, libchewing
+, unixtools
+, anthy
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hime";
+  version = "0.9.11";
+
+  src = fetchFromGitHub {
+    repo = pname;
+    owner = "hime-ime";
+    rev = "v${version}";
+    sha256 = "sha256-fCqet+foQjI+LpTQ/6Egup1GzXELlL2hgbh0dCKLwPI=";
+  };
+
+  nativeBuildInputs = [ which pkg-config unixtools.whereis ];
+  buildInputs = [ libXtst gtk2 gtk3 qt4 qt5.qtbase libchewing anthy ];
+
+  preConfigure = "patchShebangs configure";
+  configureFlags = [ "--disable-lib64" "--disable-qt5-immodule" ];
+  dontWrapQtApps = true;
+  postFixup = ''
+    hime_rpath=$(patchelf --print-rpath $out/bin/hime)
+    patchelf --set-rpath $out/lib/hime:$hime_rpath $out/bin/hime
+  '';
+
+
+  meta = with lib; {
+    homepage = "http://hime-ime.github.io/";
+    downloadPage = "https://github.com/hime-ime/hime/downloads";
+    description = "A useful input method engine for Asia region";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ yanganto ];
+  };
+}
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-anthy/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-anthy/default.nix
index 34d918cb7da..d04de7bafeb 100644
--- a/pkgs/tools/inputmethods/ibus-engines/ibus-anthy/default.nix
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-anthy/default.nix
@@ -1,7 +1,7 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , gettext
-, pkgconfig
+, pkg-config
 , wrapGAppsHook
 , anthy
 , ibus
@@ -13,11 +13,11 @@
 
 stdenv.mkDerivation rec {
   pname = "ibus-anthy";
-  version = "1.5.11";
+  version = "1.5.12";
 
   src = fetchurl {
     url = "https://github.com/ibus/ibus-anthy/releases/download/${version}/${pname}-${version}.tar.gz";
-    sha256 = "1zwgswpibh67sgbza8kvg03v06maxc08ihkgm5hmh333sjq9d5c0";
+    sha256 = "sha256-6edY3dRq4pI3bqsXEYf6jyBjDwpXzRKKQSCP3N/fV7s=";
   };
 
   buildInputs = [
@@ -34,7 +34,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [
     gettext
     gobject-introspection
-    pkgconfig
+    pkg-config
     wrapGAppsHook
   ];
 
@@ -46,7 +46,7 @@ stdenv.mkDerivation rec {
     substituteInPlace $out/share/ibus/component/anthy.xml --replace \$\{exec_prefix\} $out
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     isIbusEngine = true;
     description = "IBus interface to the anthy input method";
     homepage = "https://github.com/fujiwarat/ibus-anthy";
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-bamboo/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-bamboo/default.nix
new file mode 100644
index 00000000000..623c29124ff
--- /dev/null
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-bamboo/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv
+, fetchFromGitHub
+, gettext
+, xorg
+, pkg-config
+, wrapGAppsHook
+, ibus
+, gtk3
+, go
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-bamboo";
+  version = "0.6.9";
+
+  src = fetchFromGitHub {
+    owner = "BambooEngine";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-7UXURvZX5UrpLHFYgBnuTX/sKQkubnBlvkSD/WBa4ZU=";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    pkg-config
+    wrapGAppsHook
+    go
+  ];
+
+  buildInputs = [
+    xorg.libX11
+    xorg.xorgproto
+    xorg.libXtst
+    xorg.libXi
+  ];
+
+  preConfigure = ''
+    export GOCACHE="$TMPDIR/go-cache"
+    sed -i "s,/usr,$out," bamboo.xml
+  '';
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+
+  meta = with lib; {
+    isIbusEngine = true;
+    description = "A Vietnamese IME for IBus";
+    homepage = "https://github.com/BambooEngine/ibus-bamboo";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ superbo ];
+  };
+}
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix
index 978ac675581..af3e1edd639 100644
--- a/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix
@@ -1,9 +1,9 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , substituteAll
 , appstream-glib
 , gettext
-, pkgconfig
+, pkg-config
 , wrapGAppsHook
 , gtk3
 , ibus
@@ -13,11 +13,11 @@
 
 stdenv.mkDerivation rec {
   pname = "ibus-hangul";
-  version = "1.5.3";
+  version = "1.5.4";
 
   src = fetchurl {
     url = "https://github.com/choehwanjin/ibus-hangul/releases/download/${version}/${pname}-${version}.tar.gz";
-    sha256 = "1400ba2p34vr9q285lqvjm73f6m677cgfdymmjpiwyrjgbbiqrjy";
+    sha256 = "1q6g2pnrn5gqn9jqnm3975v9hh60hc5gn9x3zbrdjgy0n3wpxwm9";
   };
 
   patches = [
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [
     appstream-glib
     gettext
-    pkgconfig
+    pkg-config
     wrapGAppsHook
   ];
 
@@ -44,7 +44,7 @@ stdenv.mkDerivation rec {
     ]))
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     isIbusEngine = true;
     description = "Ibus Hangul engine";
     homepage = "https://github.com/choehwanjin/ibus-hangul";
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-kkc/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-kkc/default.nix
index 0b16b54ad48..00ce8df1936 100644
--- a/pkgs/tools/inputmethods/ibus-engines/ibus-kkc/default.nix
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-kkc/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl
-, vala, intltool, pkgconfig
+{ lib, stdenv, fetchurl
+, vala, intltool, pkg-config
 , libkkc, ibus, skk-dicts
 , gtk3
 }:
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [
-    vala intltool pkgconfig
+    vala intltool pkg-config
   ];
 
   buildInputs = [ libkkc ibus skk-dicts gtk3 ];
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
     ln -s ${skk-dicts}/share $out/share/skk
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     isIbusEngine = true;
     description  = "libkkc (Japanese Kana Kanji input method) engine for ibus";
     homepage     = "https://github.com/ueno/ibus-kkc";
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-libpinyin/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-libpinyin/default.nix
index 2c1d558f04d..b51efc2cb81 100644
--- a/pkgs/tools/inputmethods/ibus-engines/ibus-libpinyin/default.nix
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-libpinyin/default.nix
@@ -1,8 +1,8 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , autoreconfHook
 , gettext
-, pkgconfig
+, pkg-config
 , wrapGAppsHook
 , sqlite
 , libpinyin
@@ -15,19 +15,19 @@
 
 stdenv.mkDerivation rec {
   pname = "ibus-libpinyin";
-  version = "1.11.1";
+  version = "1.12.0";
 
   src = fetchFromGitHub {
     owner = "libpinyin";
     repo = "ibus-libpinyin";
     rev = version;
-    sha256 = "0b8rilk9zil9gvfhlk3rphcby6ph11dw66j175wp0na6h6hjlaf2";
+    sha256 = "sha256-fEEiwRoGGFAki1DMQvGuzjz2NAjhExyH11l8KTwjjsI=";
   };
 
   nativeBuildInputs = [
     autoreconfHook
     gettext
-    pkgconfig
+    pkg-config
     wrapGAppsHook
   ];
 
@@ -44,10 +44,10 @@ stdenv.mkDerivation rec {
     db
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     isIbusEngine = true;
     description = "IBus interface to the libpinyin input method";
-    license = licenses.gpl2;
+    license = licenses.gpl3Plus;
     maintainers = with maintainers; [ ericsagnes ];
     platforms = platforms.linux;
   };
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-libthai/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-libthai/default.nix
new file mode 100644
index 00000000000..1bb2479b499
--- /dev/null
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-libthai/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, makeWrapper, pkg-config, ibus, gtk3, libthai }:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-libthai";
+  version = "0.1.4";
+
+  src = fetchurl {
+    url = "https://linux.thai.net/pub/ThaiLinux/software/libthai/ibus-libthai-${version}.tar.xz";
+    sha256 = "0iam7308rxkx2xwaabc5wyj7vrxgd4cr95pvwrkm8fr9gh2xnwgv";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ gtk3 ibus libthai ];
+
+  meta = with lib; {
+    isIbusEngine = true;
+    homepage = "https://linux.thai.net/projects/ibus-libthai";
+    description = "Thai input method engine for IBus";
+    license = licenses.lgpl21Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-m17n/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-m17n/default.nix
index 35e02d52b48..aaef2dd2d08 100644
--- a/pkgs/tools/inputmethods/ibus-engines/ibus-m17n/default.nix
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-m17n/default.nix
@@ -1,7 +1,7 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , autoreconfHook
-, pkgconfig
+, pkg-config
 , ibus
 , gtk3
 , m17n_lib
@@ -13,19 +13,19 @@
 
 stdenv.mkDerivation rec {
   pname = "ibus-m17n";
-  version = "1.4.3";
+  version = "1.4.6";
 
   src = fetchFromGitHub {
     owner = "ibus";
     repo = "ibus-m17n";
     rev = version;
-    sha256 = "0lb2vcnkzy64474j7306ydyw1ali0qbx07sxfms2fqv1nmh161i2";
+    sha256 = "sha256-hdm1ObzN9pFLeO1ujobHxiQYnA+dg9zIp/qho6S0H78=";
   };
 
   nativeBuildInputs = [
     autoreconfHook
     gettext
-    pkgconfig
+    pkg-config
     wrapGAppsHook
   ];
 
@@ -44,7 +44,7 @@ stdenv.mkDerivation rec {
     "--with-gtk=3.0"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     isIbusEngine = true;
     description = "m17n engine for ibus";
     homepage = "https://github.com/ibus/ibus-m17n";
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix
index 41a04d01835..44a44b3af2b 100644
--- a/pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix
@@ -1,79 +1,64 @@
-{ clangStdenv, fetchFromGitHub, fetchpatch, which, ninja, python, gyp, pkgconfig
-, protobuf, ibus, gtk2, zinnia, qt5, libxcb, tegaki-zinnia-japanese }:
-
-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 ];
-  };
+{ lib, stdenv, fetchFromGitHub, which, ninja, pkg-config, protobuf
+, ibus, gtk2, zinnia, qt5, libxcb, tegaki-zinnia-japanese, python3Packages }:
 
-  nativeBuildInputs = [ which ninja python gyp pkgconfig qt5.wrapQtAppsHook ];
-  buildInputs = [ protobuf ibus gtk2 zinnia qt5.qtbase libxcb ];
+stdenv.mkDerivation rec {
+  pname = "ibus-mozc";
+  version = "2.26.4423.100";
 
   src = fetchFromGitHub {
-    owner  = "google";
-    repo   = "mozc";
-    rev    = "afb03ddfe72dde4cf2409863a3bfea160f7a66d8";
-    sha256 = "0w2dy2j9x5nc7x3g95j17r3m60vbfyn5j617h7js9xryv33yzpgx";
+    owner = "google";
+    repo = "mozc";
+    rev = "7654223979067e3c5ae52ea238d43880c5508f85";
+    sha256 = "aZVuhj4I9ZCsVR9dOplOd9zinYMgYw5SF5wG3IxBTO0=";
+    fetchSubmodules = true;
   };
 
-  patches = [
-    # https://github.com/google/mozc/pull/444 - fix for gcc8 STL
-    (fetchpatch {
-      url = "https://github.com/google/mozc/commit/82d38f929882a9c62289b179c6fe41efed249987.patch";
-      sha256 = "07cja1b7qfsd3i76nscf1zwiav74h7d6h2g9g2w4bs3h1mc9jwla";
-    })
-    # Support dates after 2019
-    (fetchpatch {
-      url = "https://salsa.debian.org/debian/mozc/-/raw/master/debian/patches/add_support_new_japanese_era.patch";
-      sha256 = "1dsiiglrmm8i8shn2hv0j2b8pv6miysjrimj4569h606j4lwmcw2";
-    })
+  nativeBuildInputs = [
+    which ninja python3Packages.python python3Packages.six
+    python3Packages.gyp pkg-config qt5.wrapQtAppsHook
   ];
 
-  postUnpack = ''
-    rmdir $sourceRoot/src/third_party/japanese_usage_dictionary/
-    ln -s ${japanese_usage_dictionary} $sourceRoot/src/third_party/japanese_usage_dictionary
+  buildInputs = [ protobuf ibus gtk2 zinnia qt5.qtbase libxcb ];
+
+  postUnpack = lib.optionalString stdenv.isLinux ''
+    sed -i 's/-lc++/-lstdc++/g' $sourceRoot/src/gyp/common.gypi
   '';
 
   configurePhase = ''
+    runHook preConfigure
+
     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 zinnia_model_file=${tegaki-zinnia-japanese}/share/tegaki/models/zinnia/handwriting-ja.model"
-    cd src && python build_mozc.py gyp --gypdir=${gyp}/bin --server_dir=$out/lib/mozc
+    cd src && python build_mozc.py gyp --gypdir=${python3Packages.gyp}/bin --server_dir=$out/lib/mozc
+
+    runHook postConfigure
   '';
 
   buildPhase = ''
+    runHook preBuild
+
     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
+
+    runHook postBuild
   '';
 
   installPhase = ''
+    runHook preInstall
+
     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 -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
     wrapQtApp $out/lib/mozc/mozc_tool
 
     install -d        $out/share/doc/mozc
-    install -m 644    data/installer/*.html         $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
@@ -88,5 +73,16 @@ in clangStdenv.mkDerivation rec {
     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
+
+    runHook postInstall
   '';
+
+  meta = with 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 ];
+  };
 }
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-rime/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-rime/default.nix
new file mode 100644
index 00000000000..af3fcbe4e2c
--- /dev/null
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-rime/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, gdk-pixbuf
+, glib
+, ibus
+, libnotify
+, librime
+, pkg-config
+, rime-data
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ibus-rime";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "rime";
+    repo = "ibus-rime";
+    rev = version;
+    sha256 = "0gdxg6ia0i31jn3cvh1nrsjga1j31hf8a2zfgg8rzn25chrfr319";
+  };
+
+  buildInputs = [ gdk-pixbuf glib ibus libnotify librime rime-data ];
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  cmakeFlags = [ "-DRIME_DATA_DIR=${rime-data}/share/rime-data" ];
+
+  prePatch = ''
+    substituteInPlace CMakeLists.txt \
+       --replace 'DESTINATION "''${RIME_DATA_DIR}"' \
+                 'DESTINATION "''${CMAKE_INSTALL_DATADIR}/rime-data"'
+  '';
+
+  meta = with lib; {
+    isIbusEngine = true;
+    description = "Rime input method engine for IBus";
+    homepage = "https://rime.im/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pengmeiyu ];
+  };
+}
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-table-chinese/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-table-chinese/default.nix
index 316593990d9..40c33aff401 100644
--- a/pkgs/tools/inputmethods/ibus-engines/ibus-table-chinese/default.nix
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-table-chinese/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, fetchFromGitHub, pkgconfig,  ibus, ibus-table, python3, cmake }:
+{ lib, stdenv, fetchgit, fetchFromGitHub, pkg-config, ibus, ibus-table, python3, cmake }:
 
 let
   src = fetchFromGitHub {
@@ -51,9 +51,10 @@ in stdenv.mkDerivation {
     rm -rf $HOME
   '';
 
-  buildInputs = [ pkgconfig ibus ibus-table python3 cmake ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ ibus ibus-table python3 ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     isIbusEngine = true;
     description  = "Chinese tables for IBus-Table";
     homepage     = "https://github.com/definite/ibus-table-chinese";
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-table-others/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-table-others/default.nix
index b74378f0793..18fc21e9808 100644
--- a/pkgs/tools/inputmethods/ibus-engines/ibus-table-others/default.nix
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-table-others/default.nix
@@ -1,15 +1,15 @@
-{ stdenv, fetchurl, ibus, ibus-table, pkgconfig, python3 }:
+{ lib, stdenv, fetchurl, ibus, ibus-table, pkg-config, python3 }:
 
 stdenv.mkDerivation rec {
   pname = "ibus-table-others";
-  version = "1.3.11";
+  version = "1.3.12";
 
   src = fetchurl {
     url = "https://github.com/moebiuscurve/ibus-table-others/releases/download/${version}/${pname}-${version}.tar.gz";
-    sha256 = "0763wnlklcs3d8fk21nkp7dgn4qzqgxh1s24q3kl8gzgng2a88jj";
+    sha256 = "sha256-2k7JtLr+zO71rbTz11CCiIPx+orn0dw/Y8m47WfRDEU=";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ ibus ibus-table python3 ];
 
   preBuild = ''
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
     rm -rf $HOME
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     isIbusEngine = true;
     description  = "Various table-based input methods for IBus";
     homepage     = "https://github.com/moebiuscurve/ibus-table-others";
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix
index 831161df2b7..ac29545db3b 100644
--- a/pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix
@@ -1,17 +1,17 @@
-{ stdenv, fetchFromGitHub
-, autoreconfHook, docbook2x, pkgconfig
+{ lib, stdenv, fetchFromGitHub
+, autoreconfHook, docbook2x, pkg-config
 , gtk3, dconf, gobject-introspection
 , ibus, python3, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
   pname = "ibus-table";
-  version = "1.9.25";
+  version = "1.12.4";
 
   src = fetchFromGitHub {
     owner  = "kaio";
     repo   = "ibus-table";
     rev    = version;
-    sha256 = "0v570qpnb2q79aqr9f0xnska34y7hw34ibiwsf7ybcw69fhi1zkg";
+    sha256 = "sha256-2qST5k2+8gfSf1/FaxXW4qwSQgNw/QKM+1mMWDdrjCU=";
   };
 
   postPatch = ''
@@ -27,6 +27,9 @@ stdenv.mkDerivation rec {
         -e "/export IBUS_LOCALEDIR=/ s/^.$//" \
         -i "setup/ibus-setup-table.in"
     substituteInPlace engine/tabcreatedb.py --replace '/usr/share/ibus-table' $out/share/ibus-table
+    substituteInPlace engine/ibus_table_location.py \
+      --replace '/usr/libexec' $out/libexec \
+      --replace '/usr/share/ibus-table/' $out/share/ibus-table/
   '';
 
   buildInputs = [
@@ -34,6 +37,7 @@ stdenv.mkDerivation rec {
     gtk3
     ibus
     (python3.withPackages (pypkgs: with pypkgs; [
+      dbus-python
       pygobject3
       (toPythonModule ibus)
     ]))
@@ -42,7 +46,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [
     autoreconfHook
     docbook2x
-    pkgconfig
+    pkg-config
     gobject-introspection
     wrapGAppsHook
   ];
@@ -52,7 +56,7 @@ stdenv.mkDerivation rec {
       --replace "docbook2man" "docbook2man --sgml"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     isIbusEngine = true;
     description  = "An IBus framework for table-based input methods";
     homepage     = "https://github.com/kaio/ibus-table/wiki";
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix
index cc0d12745b1..1ce947361df 100644
--- a/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, python3, ibus, pkgconfig, gtk3, m17n_lib
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, python3, ibus, pkg-config, gtk3, m17n_lib
 , wrapGAppsHook, gobject-introspection
 }:
 
@@ -24,14 +24,14 @@ stdenv.mkDerivation rec {
 
   patches = [ ./hunspell-dirs.patch ];
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig wrapGAppsHook gobject-introspection ];
+  nativeBuildInputs = [ autoreconfHook pkg-config wrapGAppsHook gobject-introspection ];
   buildInputs = [ python ibus gtk3 m17n_lib ];
 
   preFixup = ''
     gappsWrapperArgs+=(--prefix LD_LIBRARY_PATH : "${m17n_lib}/lib")
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://mike-fabian.github.io/ibus-typing-booster/";
     license = licenses.gpl3Plus;
     description = "A typing booster engine for the IBus platform";
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/default.nix
index 435d1154d4a..f78d52f5b67 100644
--- a/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/default.nix
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-uniemoji/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , gobject-introspection
 , wrapGAppsHook
@@ -42,8 +42,8 @@ in stdenv.mkDerivation rec {
   ];
 
   makeFlags = [
-    "PREFIX=${placeholder ''out''}"
-    "SYSCONFDIR=${placeholder ''out''}/etc"
+    "PREFIX=${placeholder "out"}"
+    "SYSCONFDIR=${placeholder "out"}/etc"
     "PYTHON=${python.interpreter}"
   ];
 
@@ -51,7 +51,7 @@ in stdenv.mkDerivation rec {
     wrapGApp $out/share/ibus-uniemoji/uniemoji.py
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     isIbusEngine = true;
     description = "Input method (ibus) for entering unicode symbols and emoji by name";
     homepage = "https://github.com/salty-horse/ibus-uniemoji";
diff --git a/pkgs/tools/inputmethods/ibus/default.nix b/pkgs/tools/inputmethods/ibus/default.nix
index 238e133495c..a0aea92ea4a 100644
--- a/pkgs/tools/inputmethods/ibus/default.nix
+++ b/pkgs/tools/inputmethods/ibus/default.nix
@@ -1,11 +1,11 @@
-{ stdenv
+{ lib, stdenv
 , substituteAll
 , fetchurl
 , fetchFromGitHub
 , autoreconfHook
 , gettext
 , makeWrapper
-, pkgconfig
+, pkg-config
 , vala
 , wrapGAppsHook
 , dbus
@@ -36,7 +36,7 @@
 
 assert withWayland -> wayland != null && libxkbcommon != null;
 
-with stdenv.lib;
+with lib;
 
 let
   python3Runtime = python3.withPackages (ps: with ps; [ pygobject3 ]);
@@ -60,13 +60,13 @@ in
 
 stdenv.mkDerivation rec {
   pname = "ibus";
-  version = "1.5.22";
+  version = "1.5.24";
 
   src = fetchFromGitHub {
     owner = "ibus";
     repo = "ibus";
     rev = version;
-    sha256 = "09ynn7gq84q18hhbg6wq2yrliwil42qbzxbwbpggry1s955jg5xb";
+    sha256 = "sha256-1qx06MlEUjSS067FdQG1Bdi4ZAh3hPcNjUX5PIiC3Sk=";
   };
 
   patches = [
@@ -101,8 +101,8 @@ stdenv.mkDerivation rec {
   ];
 
   makeFlags = [
-    "test_execsdir=${placeholder ''installedTests''}/libexec/installed-tests/ibus"
-    "test_sourcesdir=${placeholder ''installedTests''}/share/installed-tests/ibus"
+    "test_execsdir=${placeholder "installedTests"}/libexec/installed-tests/ibus"
+    "test_sourcesdir=${placeholder "installedTests"}/share/installed-tests/ibus"
   ];
 
   nativeBuildInputs = [
@@ -110,7 +110,7 @@ stdenv.mkDerivation rec {
     gtk-doc
     gettext
     makeWrapper
-    pkgconfig
+    pkg-config
     python3BuildEnv
     vala
     wrapGAppsHook
diff --git a/pkgs/tools/inputmethods/ibus/ibus-qt.nix b/pkgs/tools/inputmethods/ibus/ibus-qt.nix
index 4e6b92f77c5..4f6a4e1bef3 100644
--- a/pkgs/tools/inputmethods/ibus/ibus-qt.nix
+++ b/pkgs/tools/inputmethods/ibus/ibus-qt.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, ibus, cmake, pkgconfig, qt4, icu, doxygen }:
+{ lib, stdenv, fetchurl, ibus, cmake, pkg-config, qt4, icu, doxygen }:
 
 stdenv.mkDerivation rec {
   pname = "ibus-qt";
@@ -9,14 +9,12 @@ stdenv.mkDerivation rec {
     sha256 = "1q9g7qghpcf07valc2ni7yf994xqx2pmdffknj7scxfidav6p19g";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [
-    ibus cmake qt4 icu doxygen
-  ];
+  nativeBuildInputs = [ cmake pkg-config doxygen ];
+  buildInputs = [ ibus qt4 icu ];
 
   cmakeFlags = [ "-DQT_PLUGINS_DIR=lib/qt4/plugins" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage    = "https://github.com/ibus/ibus-qt/";
     description = "Qt4 interface to the ibus input method";
     platforms   = platforms.linux;
diff --git a/pkgs/tools/inputmethods/ibus/wrapper.nix b/pkgs/tools/inputmethods/ibus/wrapper.nix
index 1b14629d283..93078325a0d 100644
--- a/pkgs/tools/inputmethods/ibus/wrapper.nix
+++ b/pkgs/tools/inputmethods/ibus/wrapper.nix
@@ -1,9 +1,9 @@
-{ stdenv, runCommand, makeWrapper, lndir
+{ lib, runCommand, makeWrapper, lndir
 , dconf, hicolor-icon-theme, ibus, librsvg, plugins ? []
 }:
 
 let
-  name = "ibus-with-plugins-" + stdenv.lib.getVersion ibus;
+  name = "ibus-with-plugins-" + lib.getVersion ibus;
   env = {
     buildInputs = [ ibus ] ++ plugins;
     nativeBuildInputs = [ lndir makeWrapper ];
@@ -25,7 +25,7 @@ let
         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" \
+          --prefix GIO_EXTRA_MODULES : "${lib.getLib dconf}/lib/gio/modules" \
           --set IBUS_COMPONENT_PATH "$out/share/ibus/component/" \
           --set IBUS_DATAROOTDIR "$out/share" \
           --set IBUS_LIBEXECDIR "$out/libexec" \
@@ -44,7 +44,7 @@ let
         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" \
+          --prefix GIO_EXTRA_MODULES : "${lib.getLib dconf}/lib/gio/modules" \
           --set IBUS_COMPONENT_PATH "$out/share/ibus/component/" \
           --set IBUS_DATAROOTDIR "$out/share" \
           --set IBUS_LIBEXECDIR "$out/libexec" \
diff --git a/pkgs/tools/inputmethods/interception-tools/caps2esc.nix b/pkgs/tools/inputmethods/interception-tools/caps2esc.nix
index 7e6206eb1f3..933a731828f 100644
--- a/pkgs/tools/inputmethods/interception-tools/caps2esc.nix
+++ b/pkgs/tools/inputmethods/interception-tools/caps2esc.nix
@@ -1,19 +1,20 @@
-{ stdenv, fetchFromGitLab, cmake }:
+{ lib, stdenv, fetchFromGitLab, cmake }:
 
 stdenv.mkDerivation rec {
   pname = "caps2esc";
-  version = "0.1.3";
+  version = "0.3.2";
 
   src = fetchFromGitLab {
-    owner = "interception/linux/plugins";
+    group = "interception";
+    owner = "linux/plugins";
     repo = pname;
     rev = "v${version}";
-    sha256 = "10xv56vh5h3lxyii3ni166ddv1sz2pylrjmdwxhb4gd2p5zgl1ji";
+    sha256 = "sha256-gPFElAixiDTTwcl2XKM7MbTkpRrg8ToO5K7H8kz3DHk=";
   };
 
   nativeBuildInputs = [ cmake ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://gitlab.com/interception/linux/plugins/caps2esc";
     description = "Transforming the most useless key ever into the most useful one";
     license = licenses.mit;
diff --git a/pkgs/tools/inputmethods/interception-tools/default.nix b/pkgs/tools/inputmethods/interception-tools/default.nix
index 39a28214fe2..ad18becfc72 100644
--- a/pkgs/tools/inputmethods/interception-tools/default.nix
+++ b/pkgs/tools/inputmethods/interception-tools/default.nix
@@ -1,33 +1,24 @@
-{ stdenv, fetchurl, pkgconfig, cmake, libyamlcpp,
-  libevdev, udev }:
+{ lib, stdenv, fetchFromGitLab, pkg-config, cmake, libyamlcpp,
+  libevdev, udev, boost }:
 
-let
-  version = "0.2.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 = "0lqz89wsf9r5xdgflincysxg4l8fpgg5z8zczhhrg9s5787srfzi";
+stdenv.mkDerivation rec {
+  pname = "interception-tools";
+  version = "0.6.7";
+  src = fetchFromGitLab {
+    owner = "interception/linux";
+    repo = "tools";
+    rev = "v${version}";
+    sha256 = "0wcmppa7092b33wb8vc782day5phf90pc25cn1x7rk0rlw565z36";
   };
 
-  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 ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ libevdev udev libyamlcpp boost ];
 
   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;
+    license = lib.licenses.gpl3Only;
+    maintainers = [ lib.maintainers.vyp ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/inputmethods/interception-tools/dual-function-keys.nix b/pkgs/tools/inputmethods/interception-tools/dual-function-keys.nix
new file mode 100644
index 00000000000..9824a46d43e
--- /dev/null
+++ b/pkgs/tools/inputmethods/interception-tools/dual-function-keys.nix
@@ -0,0 +1,34 @@
+{ stdenv, lib, fetchFromGitLab, pkg-config, libyamlcpp, libevdev }:
+
+stdenv.mkDerivation rec {
+  pname = "dual-function-keys";
+  version = "1.4.0";
+
+  src = fetchFromGitLab {
+    group = "interception";
+    owner = "linux/plugins";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-xlplbkeptXMBlRnSsc5NgGJfT8aoZxTRgTwTOd7aiWg=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libevdev libyamlcpp ];
+
+  prePatch = ''
+    substituteInPlace config.mk --replace \
+      '/usr/include/libevdev-1.0' \
+      "$(pkg-config --cflags libevdev | cut -c 3-)"
+  '';
+
+  installFlags = [ "DESTDIR=$(out)" "PREFIX=" ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/interception/linux/plugins/dual-function-keys";
+    description = "Tap for one key, hold for another.";
+    license = licenses.mit;
+    maintainers = with maintainers; [ svend ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/inputmethods/interception-tools/fix-udevmon-configuration-job-path.patch b/pkgs/tools/inputmethods/interception-tools/fix-udevmon-configuration-job-path.patch
deleted file mode 100644
index 469c96647d6..00000000000
--- a/pkgs/tools/inputmethods/interception-tools/fix-udevmon-configuration-job-path.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-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/pkgs/tools/inputmethods/keyfuzz/default.nix b/pkgs/tools/inputmethods/keyfuzz/default.nix
index 489a24c3a58..8980abba2f6 100644
--- a/pkgs/tools/inputmethods/keyfuzz/default.nix
+++ b/pkgs/tools/inputmethods/keyfuzz/default.nix
@@ -1,11 +1,11 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation {
   pname = "keyfuzz";
   version = "0.2";
 
-  meta = with stdenv.lib; {
-    description = "Manipulate the scancode/keycode translation tables of keyboard drivers.";
+  meta = with lib; {
+    description = "Manipulate the scancode/keycode translation tables of keyboard drivers";
     homepage    = "http://0pointer.de/lennart/projects/keyfuzz/";
     license     = licenses.gpl2Plus;
     platforms   = platforms.linux;
diff --git a/pkgs/tools/inputmethods/kime/default.nix b/pkgs/tools/inputmethods/kime/default.nix
new file mode 100644
index 00000000000..8566143f680
--- /dev/null
+++ b/pkgs/tools/inputmethods/kime/default.nix
@@ -0,0 +1,113 @@
+{ lib, stdenv, rustPlatform, rustc, cargo, fetchFromGitHub, pkg-config, cmake, extra-cmake-modules, llvmPackages
+, withWayland ? true
+, withIndicator ? true, dbus, libdbusmenu
+, withXim ? true, xorg, cairo
+, withGtk2 ? true, gtk2
+, withGtk3 ? true, gtk3
+, withQt5 ? true, qt5
+}:
+
+let
+  cmake_args = lib.optionals withGtk2 ["-DENABLE_GTK2=ON"]
+  ++ lib.optionals withGtk3 ["-DENABLE_GTK3=ON"]
+  ++ lib.optionals withQt5 ["-DENABLE_QT5=ON"];
+
+  optFlag = w: (if w then "1" else "0");
+in
+stdenv.mkDerivation rec {
+  pname = "kime";
+  version = "2.5.3";
+
+  src = fetchFromGitHub {
+    owner = "Riey";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1kjw22hy2x90dc7xfm252v1pdr9x13mpm92rcgfy8zbkiqq242bl";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    sha256 = "05kb9vnifaw01qw5cmdh4wzcf50szb0y00085wx41m8h4f28hfbk";
+  };
+
+  # Replace autostart path
+  postPatch = ''
+    substituteInPlace res/kime.desktop --replace "/usr/bin/kime" "$out/bin/kime"
+  '';
+
+  dontUseCmakeConfigure = true;
+  dontWrapQtApps = true;
+  buildPhase = ''
+    runHook preBuild
+    export KIME_BUILD_CHECK=1
+    export KIME_BUILD_INDICATOR=${optFlag withIndicator}
+    export KIME_BUILD_XIM=${optFlag withXim}
+    export KIME_BUILD_WAYLAND=${optFlag withWayland}
+    export KIME_BUILD_KIME=1
+    export KIME_CARGO_ARGS="-j$NIX_BUILD_CORES --frozen"
+    export KIME_MAKE_ARGS="-j$NIX_BUILD_CORES"
+    export KIME_CMAKE_ARGS="${lib.concatStringsSep " " cmake_args}"
+    bash scripts/build.sh -r
+    runHook postBuild
+  '';
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+    cargo test --release --frozen
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    export KIME_BIN_DIR=bin
+    export KIME_INSTALL_HEADER=1
+    export KIME_INSTALL_DOC=1
+    export KIME_INCLUDE_DIR=include
+    export KIME_DOC_DIR=share/doc/kime
+    export KIME_ICON_DIR=share/icons
+    export KIME_LIB_DIR=lib
+    export KIME_QT5_DIR=lib/qt-${qt5.qtbase.version}
+    bash scripts/install.sh "$out"
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    # Don't pipe output to head directly it will cause broken pipe error https://github.com/rust-lang/rust/issues/46016
+    kimeVersion=$(echo "$($out/bin/kime --version)" | head -n1)
+    echo "'kime --version | head -n1' returns: $kimeVersion"
+    [[ "$kimeVersion" == "kime ${version}" ]]
+    runHook postInstallCheck
+  '';
+
+  buildInputs = lib.optionals withIndicator [ dbus libdbusmenu ]
+  ++ lib.optionals withXim [ xorg.libxcb cairo ]
+  ++ lib.optionals withGtk2 [ gtk2 ]
+  ++ lib.optionals withGtk3 [ gtk3 ]
+  ++ lib.optionals withQt5 [ qt5.qtbase ];
+
+  nativeBuildInputs = [
+    pkg-config
+    llvmPackages.clang
+    llvmPackages.libclang
+    llvmPackages.bintools
+    cmake
+    extra-cmake-modules
+    rustPlatform.cargoSetupHook
+    rustc
+    cargo
+  ];
+
+  RUST_BACKTRACE = 1;
+  LIBCLANG_PATH = "${llvmPackages.libclang.lib}/lib";
+
+  meta = with lib; {
+    homepage = "https://github.com/Riey/kime";
+    description = "Korean IME";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.riey ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/inputmethods/libinput-gestures/default.nix b/pkgs/tools/inputmethods/libinput-gestures/default.nix
index b816a6898ab..1d0ea40e34f 100644
--- a/pkgs/tools/inputmethods/libinput-gestures/default.nix
+++ b/pkgs/tools/inputmethods/libinput-gestures/default.nix
@@ -44,7 +44,7 @@ stdenv.mkDerivation rec {
       wrapProgram "$out/bin/libinput-gestures" --prefix PATH : "${lib.makeBinPath ([coreutils] ++ extraUtilsPath)}"
     '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/bulletmark/libinput-gestures";
     description = "Gesture mapper for libinput";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/inputmethods/libkkc/default.nix b/pkgs/tools/inputmethods/libkkc/default.nix
index 1e24d5d969f..0252efa3cda 100644
--- a/pkgs/tools/inputmethods/libkkc/default.nix
+++ b/pkgs/tools/inputmethods/libkkc/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchurl
+{ lib, stdenv, fetchurl
 , vala, gobject-introspection, intltool, python2Packages, glib
-, pkgconfig
+, pkg-config
 , libgee, json-glib, marisa, libkkc-data
 }:
 
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [
     vala gobject-introspection
     python2Packages.python python2Packages.marisa
-    intltool glib pkgconfig
+    intltool glib pkg-config
   ];
 
   buildInputs = [ marisa libkkc-data ];
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
     ln -s ${libkkc-data}/lib/libkkc/models $out/share/libkkc/models
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Japanese Kana Kanji conversion input method library";
     homepage    = "https://github.com/ueno/libkkc";
     license     = licenses.gpl3Plus;
diff --git a/pkgs/tools/inputmethods/lisgd/default.nix b/pkgs/tools/inputmethods/lisgd/default.nix
new file mode 100644
index 00000000000..02344d153db
--- /dev/null
+++ b/pkgs/tools/inputmethods/lisgd/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, writeText
+, libinput
+, libX11
+, conf ? null
+, patches ? [ ]
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lisgd";
+  version = "0.3.0";
+
+  src = fetchFromSourcehut {
+    owner = "~mil";
+    repo = "lisgd";
+    rev = version;
+    sha256 = "0g2pwff2c6ipxz83l26kx4rs3vah9qlm4h0n4x1k80mzqzf15hb6";
+  };
+
+  inherit patches;
+
+  postPatch = let
+    configFile = if lib.isDerivation conf || lib.isPath conf then
+      conf
+    else
+      writeText "config.def.h" conf;
+  in lib.optionalString (conf != null) ''
+    cp ${configFile} config.def.h
+  '';
+
+  buildInputs = [
+    libinput
+    libX11
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "Bind gestures via libinput touch events";
+    homepage = "https://git.sr.ht/~mil/lisgd";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/tools/inputmethods/m17n-db/default.nix b/pkgs/tools/inputmethods/m17n-db/default.nix
index 1abd8460845..7feb14080e9 100644
--- a/pkgs/tools/inputmethods/m17n-db/default.nix
+++ b/pkgs/tools/inputmethods/m17n-db/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, gettext }:
+{ lib, stdenv, fetchurl, gettext }:
 
 stdenv.mkDerivation rec {
   name = "m17n-db-1.8.0";
@@ -10,15 +10,15 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ gettext ];
 
-  configureFlags = stdenv.lib.optional (stdenv ? glibc)
+  configureFlags = 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 ];
+    license = lib.licenses.lgpl21Plus;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ astsmtl ];
   };
 }
diff --git a/pkgs/tools/inputmethods/m17n-lib/default.nix b/pkgs/tools/inputmethods/m17n-lib/default.nix
index f7bff509205..51e52ce4e95 100644
--- a/pkgs/tools/inputmethods/m17n-lib/default.nix
+++ b/pkgs/tools/inputmethods/m17n-lib/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, m17n_db}:
+{lib, stdenv, fetchurl, m17n_db}:
 stdenv.mkDerivation rec {
   name = "m17n-lib-1.8.0";
 
@@ -12,8 +12,8 @@ stdenv.mkDerivation rec {
   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 ];
+    license = lib.licenses.lgpl21Plus;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ astsmtl ];
   };
 }
diff --git a/pkgs/tools/inputmethods/m17n-lib/otf.nix b/pkgs/tools/inputmethods/m17n-lib/otf.nix
index 7703de95716..f4d276e0a61 100644
--- a/pkgs/tools/inputmethods/m17n-lib/otf.nix
+++ b/pkgs/tools/inputmethods/m17n-lib/otf.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libXaw, freetype }:
+{ lib, stdenv, fetchurl, libXaw, freetype }:
 
 stdenv.mkDerivation rec {
   name = "libotf-0.9.16";
@@ -21,8 +21,8 @@ stdenv.mkDerivation rec {
   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 ];
+    license = lib.licenses.lgpl21Plus;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ bendlas ];
   };
 }
diff --git a/pkgs/tools/inputmethods/nabi/default.nix b/pkgs/tools/inputmethods/nabi/default.nix
index ef316ec55a0..5b6b0223a01 100644
--- a/pkgs/tools/inputmethods/nabi/default.nix
+++ b/pkgs/tools/inputmethods/nabi/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, gtk2, libhangul }:
+{ lib, stdenv, fetchurl, pkg-config, gtk2, libhangul }:
 
 stdenv.mkDerivation {
   name = "nabi-1.0.0";
@@ -8,10 +8,10 @@ stdenv.mkDerivation {
     sha256 = "0craa24pw7b70sh253arv9bg9sy4q3mhsjwfss3bnv5nf0xwnncw";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ gtk2 libhangul ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "The Easy Hangul XIM";
     homepage = "https://github.com/choehwanjin/nabi";
     license = licenses.gpl2;
diff --git a/pkgs/tools/inputmethods/netevent/default.nix b/pkgs/tools/inputmethods/netevent/default.nix
new file mode 100644
index 00000000000..b7c0e4d4702
--- /dev/null
+++ b/pkgs/tools/inputmethods/netevent/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, docutils, installShellFiles }:
+
+stdenv.mkDerivation {
+  pname = "netevent";
+  version = "20201018";
+
+  src = fetchFromGitHub {
+    owner = "Blub";
+    repo = "netevent";
+    rev = "ddd330f0dc956a95a111c58ad10546071058e4c1";
+    sha256 = "0myk91pmim0m51h4b8hplkbxvns0icvfmv0401r0hw8md828nh5c";
+  };
+
+  buildInputs = [ docutils ];
+  nativeBuildInputs = [ installShellFiles ];
+
+  outputs = [ "out" "doc" "man" ];
+
+  configurePhase = ''
+    export RST2MAN=rst2man
+    ./configure
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -m 0755 netevent $out/bin/
+
+    installManPage doc/netevent.1
+
+    mkdir -p $doc/share/doc/netevent
+    cp doc/netevent.rst $doc/share/doc/netevent/netevent.rst
+  '';
+
+  meta = with lib; {
+    description = "Share linux event devices with other machines";
+    homepage = "https://github.com/Blub/netevent";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ rgrunbla ];
+  };
+}
diff --git a/pkgs/tools/inputmethods/remote-touchpad/default.nix b/pkgs/tools/inputmethods/remote-touchpad/default.nix
new file mode 100644
index 00000000000..a4dc6a1c463
--- /dev/null
+++ b/pkgs/tools/inputmethods/remote-touchpad/default.nix
@@ -0,0 +1,33 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, libX11
+, libXi
+, libXt
+, libXtst
+}:
+
+buildGoModule rec {
+  pname = "remote-touchpad";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "unrud";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "09a252z69msy4wd5kazpca8dcn0a2djdw0vs663062fl977p73qs";
+  };
+
+  buildInputs = [ libX11 libXi libXt libXtst ];
+  buildFlags = [ "-tags" "portal,x11" ];
+
+  vendorSha256 = "1pgj0m67g759mcs4s34h4pq3mc7gni643z5cp6ffq4rrn8mdi060";
+
+  meta = with lib; {
+    description = "Control mouse and keyboard from the webbrowser of a smartphone.";
+    homepage = "https://github.com/unrud/remote-touchpad";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ schnusch ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/inputmethods/skk/skk-dicts/default.nix b/pkgs/tools/inputmethods/skk/skk-dicts/default.nix
index d760e9d320a..d165f404f6c 100644
--- a/pkgs/tools/inputmethods/skk/skk-dicts/default.nix
+++ b/pkgs/tools/inputmethods/skk/skk-dicts/default.nix
@@ -1,39 +1,40 @@
-{ stdenv, fetchurl, skktools }:
+{ lib, stdenv, fetchurl, libiconv, skktools }:
 
 let
   # kana to kanji
   small = fetchurl {
-    url = "https://raw.githubusercontent.com/skk-dev/dict/f61be71246602a49e9f05ded6ac4f9f82031a521/SKK-JISYO.S";
-    sha256 = "15kp4iwz58fp1zg0i13x7w9wwm15v8n2hhm0nf2zsl7az5mn5yi4";
+    url = "https://raw.githubusercontent.com/skk-dev/dict/8b35d07a7d2044d48b063d2774d9f9d00bb7cb48/SKK-JISYO.S";
+    sha256 = "11cjrc8m99hj4xpl2nvzxanlswpapi92vmgk9d6yimdz0jidb6cq";
   };
   medium = fetchurl {
-    url = "https://raw.githubusercontent.com/skk-dev/dict/f61be71246602a49e9f05ded6ac4f9f82031a521/SKK-JISYO.M";
-    sha256 = "1vhagixhrp9lq5x7dldxcanhznawazp00xivpp1z52kx10lnkmv0";
+    url = "https://raw.githubusercontent.com/skk-dev/dict/8b35d07a7d2044d48b063d2774d9f9d00bb7cb48/SKK-JISYO.M";
+    sha256 = "0pwjp9qjmn9sq6zc0k6632l7dc2dbjn45585ibckvvl9iwfqqxdp";
   };
   large = fetchurl {
-    url = "https://raw.githubusercontent.com/skk-dev/dict/f61be71246602a49e9f05ded6ac4f9f82031a521/SKK-JISYO.L";
-    sha256 = "07cv0j95iajkr48j4ln411vnhl3z93yx96zjc03bgs10dbpagaaz";
+    url = "https://raw.githubusercontent.com/skk-dev/dict/8b35d07a7d2044d48b063d2774d9f9d00bb7cb48/SKK-JISYO.L";
+    sha256 = "0ps0a7sbkryd6hxvphq14i7g5wci4gvr0vraac8ia2ww67a2xbyc";
   };
 
   # english to japanese
   edict = fetchurl {
-    url = "https://raw.githubusercontent.com/skk-dev/dict/f61be71246602a49e9f05ded6ac4f9f82031a521/SKK-JISYO.edict";
-    sha256 = "18k8z1wkgwgfwbs6sylf39h1nc1p5l2b00h7mfjlb8p91plkb45w";
+    url = "https://raw.githubusercontent.com/skk-dev/dict/8b35d07a7d2044d48b063d2774d9f9d00bb7cb48/SKK-JISYO.edict";
+    sha256 = "1vrwnq0vvjn61nijbln6wfinqg93802d2a8d4ad82n692v83b1li";
   };
   # misc
   assoc = fetchurl {
-    url = "https://raw.githubusercontent.com/skk-dev/dict/f61be71246602a49e9f05ded6ac4f9f82031a521/SKK-JISYO.assoc";
-    sha256 = "12d6xpp1bfin9nwl35ydl5yc6vx0qpwhxss0khi19n1nsbyqnixm";
+    url = "https://raw.githubusercontent.com/skk-dev/dict/8b35d07a7d2044d48b063d2774d9f9d00bb7cb48/SKK-JISYO.assoc";
+    sha256 = "1smcbyv6srrhnpl7ic9nqds9nz3g2dgqngmhzkrdlwmvcpvakp1v";
   };
 in
 
 stdenv.mkDerivation {
   pname = "skk-dicts-unstable";
-  version = "2017-10-26";
+  version = "2020-03-24";
   srcs = [ small medium large edict assoc ];
-  nativeBuildInputs = [ skktools ];
+  nativeBuildInputs = [ skktools ] ++ lib.optional stdenv.isDarwin libiconv;
+
+  dontUnpack = true;
 
-  phases = [ "installPhase" ];
   installPhase = ''
     function dictname() {
       src=$1
@@ -66,8 +67,8 @@ stdenv.mkDerivation {
       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;
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ yuriaisaka ];
+    platforms = with lib.platforms; linux ++ darwin;
   };
 }
diff --git a/pkgs/tools/inputmethods/skk/skktools/default.nix b/pkgs/tools/inputmethods/skk/skktools/default.nix
index 8a7423eea1f..130c27090a4 100644
--- a/pkgs/tools/inputmethods/skk/skktools/default.nix
+++ b/pkgs/tools/inputmethods/skk/skktools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, gdbm, glib }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, gdbm, glib }:
 
 # Note (2017-10-24, yuriaisaka):
 # - Version 1.3.3 dates from Jul. 19, 2013.
@@ -8,14 +8,14 @@
 #   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 {
+stdenv.mkDerivation rec {
   pname = "skktools";
-  version = "1.3.3";
+  version = "1.3.4";
   src = fetchFromGitHub {
     owner = "skk-dev";
     repo = "skktools";
-    rev = "c8816fe720604d4fd79f3552e99e0430ca6f2769";
-    sha256 = "11v1i5gkxvfsipigc1w1m16ijzh85drpl694kg6ih4jfam1q4vdh";
+    rev = "skktools-${lib.replaceStrings ["."] ["_"] version}";
+    sha256 = "1zway8jsm18279xq8zlpr84iqiw373x3v0ysay74n9bjqxbl234a";
   };
   # # See "12.2. Package naming"
   # name = "skktools-unstable-${version}";
@@ -27,7 +27,7 @@ stdenv.mkDerivation {
   #   sha256 = "1k9zxqybl1l5h0a8px2awc920qrdyp1qls50h3kfrj3g65d08aq2";
   # };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ gdbm glib ];
 
   meta = {
@@ -38,8 +38,8 @@ stdenv.mkDerivation {
       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;
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ yuriaisaka ];
+    platforms = with lib.platforms; linux ++ darwin;
   };
 }
diff --git a/pkgs/tools/inputmethods/tegaki-zinnia-japanese/default.nix b/pkgs/tools/inputmethods/tegaki-zinnia-japanese/default.nix
index 4295e2b3fdd..62744513641 100644
--- a/pkgs/tools/inputmethods/tegaki-zinnia-japanese/default.nix
+++ b/pkgs/tools/inputmethods/tegaki-zinnia-japanese/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, unzip }:
+{ lib, stdenv, fetchurl, unzip }:
 
 stdenv.mkDerivation {
   pname = "tegaki-zinnia-japanese";
@@ -9,7 +9,7 @@ stdenv.mkDerivation {
     sha256 = "1nmg9acxhcqly9gwkyb9m0hpy76fll91ywk4b1q4xms0ajxip1h7";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Japanese handwriting model for the Zinnia engine";
     homepage = "http://tegaki.org/";
     license = licenses.lgpl21;
@@ -17,7 +17,7 @@ stdenv.mkDerivation {
     maintainers = [ maintainers.gebner ];
   };
 
-  buildInputs = [ unzip ];
+  nativeBuildInputs = [ unzip ];
 
   makeFlags = [ "installpath=$(out)/share/tegaki/models/zinnia/" ];
 }
diff --git a/pkgs/tools/inputmethods/touchegg/default.nix b/pkgs/tools/inputmethods/touchegg/default.nix
index 6bda390dc4a..d2bd7a14663 100644
--- a/pkgs/tools/inputmethods/touchegg/default.nix
+++ b/pkgs/tools/inputmethods/touchegg/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, xorg, xorgserver, qt4, libGLU, libGL, geis, qmake4Hook }:
+{ lib, stdenv, fetchurl, xorg, xorgserver, qt4, libGLU, libGL, geis, qmake4Hook }:
 
 stdenv.mkDerivation rec {
   pname = "touchegg";
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://github.com/JoseExposito/touchegg";
     description = "Macro binding for touch surfaces";
-    license = stdenv.lib.licenses.gpl2;
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/inputmethods/triggerhappy/default.nix b/pkgs/tools/inputmethods/triggerhappy/default.nix
index 22987fe639f..e7ef0f8accf 100644
--- a/pkgs/tools/inputmethods/triggerhappy/default.nix
+++ b/pkgs/tools/inputmethods/triggerhappy/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, perl, systemd }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, perl, systemd }:
 
 stdenv.mkDerivation rec {
   pname = "triggerhappy";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
     sha256 = "0gb1qhrxwq7i5abd408d01a2dpf28nr1fph1fg7w7n0i5i1nnk90";
   };
 
-  nativeBuildInputs = [ pkgconfig perl ];
+  nativeBuildInputs = [ pkg-config perl ];
   buildInputs = [ systemd ];
 
   makeFlags = [ "PREFIX=$(out)" "BINDIR=$(out)/bin" ];
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
     install -D -m 644 -t "$out/etc/triggerhappy/triggers.d" "triggerhappy.conf.examples"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A lightweight hotkey daemon";
     longDescription = ''
       Triggerhappy is a hotkey daemon developed with small and embedded systems in
diff --git a/pkgs/tools/inputmethods/uim/default.nix b/pkgs/tools/inputmethods/uim/default.nix
index 7fe00bd4dfc..9336d5429c1 100644
--- a/pkgs/tools/inputmethods/uim/default.nix
+++ b/pkgs/tools/inputmethods/uim/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub, shared-mime-info
-, autoconf, automake, intltool, libtool, pkgconfig, cmake
+{ lib, stdenv, fetchFromGitHub, shared-mime-info
+, autoconf, automake, intltool, libtool, pkg-config, cmake
 , ruby, librsvg
 , ncurses, m17n_lib, m17n_db, expat
 , withAnthy ? true, anthy ? null
@@ -18,7 +18,7 @@
 , withMisc ? false, libeb ? null
 }:
 
-with stdenv.lib;
+with lib;
 
 assert withGtk2 -> gtk2 != null;
 assert withGtk3 -> gtk3 != null;
@@ -50,7 +50,7 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [
-    autoconf automake intltool libtool pkgconfig cmake
+    autoconf automake intltool libtool pkg-config cmake
 
     ruby # used by sigscheme build to generate function tables
     librsvg # used by uim build to generate png pixmaps from svg
@@ -135,7 +135,7 @@ stdenv.mkDerivation rec {
 
   dontUseCmakeConfigure = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage    = src.meta.homepage;
     description = "A multilingual input method framework";
     license     = licenses.bsd3;
diff --git a/pkgs/tools/inputmethods/zinnia/default.nix b/pkgs/tools/inputmethods/zinnia/default.nix
index b1516aa56ab..8070dbc66ba 100644
--- a/pkgs/tools/inputmethods/zinnia/default.nix
+++ b/pkgs/tools/inputmethods/zinnia/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation {
   pname = "zinnia";
@@ -15,7 +15,7 @@ stdenv.mkDerivation {
     sourceRoot=$(echo */zinnia)
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Online hand recognition system with machine learning";
     homepage = "http://taku910.github.io/zinnia/";
     license = licenses.bsd2;
diff --git a/pkgs/tools/misc/0x0/default.nix b/pkgs/tools/misc/0x0/default.nix
index d78846922c6..0b9c6f7c3bb 100644
--- a/pkgs/tools/misc/0x0/default.nix
+++ b/pkgs/tools/misc/0x0/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, xsel, curl, fetchFromGitLab, makeWrapper}:
+{ lib, stdenv, xsel, curl, fetchFromGitLab, makeWrapper}:
 
 stdenv.mkDerivation {
   pname = "0x0";
@@ -11,20 +11,21 @@ stdenv.mkDerivation {
     sha256 = "1qpylyxrisy3p2lyirfarfj5yzrdjgsgxwf8gqwljpcjn207hr72";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
   installPhase = ''
     install -Dm755 0x0 $out/bin/0x0
 
     patchShebangs $out/bin/0x0
     wrapProgram $out/bin/0x0 \
-      --prefix PATH : '${stdenv.lib.makeBinPath [ curl xsel ]}'
+      --prefix PATH : '${lib.makeBinPath [ curl xsel ]}'
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A client for 0x0.st";
     homepage = "https://gitlab.com/somasis/scripts/";
     maintainers = [ maintainers.ar1a ];
     license = licenses.unlicense;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/3llo/gemset.nix b/pkgs/tools/misc/3llo/gemset.nix
index 5c50ea9b212..c6e60d4b668 100644
--- a/pkgs/tools/misc/3llo/gemset.nix
+++ b/pkgs/tools/misc/3llo/gemset.nix
@@ -82,4 +82,4 @@
     };
     version = "1.6.1";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/misc/3mux/default.nix b/pkgs/tools/misc/3mux/default.nix
index 45c0209e917..4b5db58c640 100644
--- a/pkgs/tools/misc/3mux/default.nix
+++ b/pkgs/tools/misc/3mux/default.nix
@@ -1,22 +1,42 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub, makeWrapper }:
 
 buildGoModule rec {
   pname = "3mux";
-  version = "0.3.0";
+  version = "1.1.0";
 
   src = fetchFromGitHub {
     owner = "aaronjanse";
     repo = pname;
     rev = "v${version}";
-    sha256 = "164jylifkdfsi3r6vmlp5afgly73fqfbad7lbr58wmy21l9x5rcj";
+    sha256 = "sha256-QT4QXTlJf2NfTqXE4GF759EoW6Ri12lxDyodyEFc+ag=";
   };
 
-  vendorSha256 = "0dc1c0z3xkfpwmwb3hafsv7qa6lc7bzz78by5w20rxrrk4r87gic";
+  nativeBuildInputs = [ makeWrapper ];
 
-  meta = with stdenv.lib; {
+  vendorSha256 = "sha256-tbziQZIA1+b+ZtvA/865c8YQxn+r8HQy6Pqaac2kwcU=";
+
+  # This is a package used for internally testing 3mux. It's meant for
+  # use by 3mux maintainers/contributors only.
+  excludedPackages = [ "fuzz" ];
+
+  # 3mux needs to have itself in the path so users can run `3mux detach`.
+  # This ensures that, while inside 3mux, the binary in the path is the
+  # same version as the 3mux hosting the session. This also allows users
+  # to use 3mux via `nix run nixpkgs#_3mux` (otherwise they'd get "command
+  # not found").
+  postInstall = ''
+    wrapProgram $out/bin/3mux --prefix PATH : $out/bin
+  '';
+
+  meta = with lib; {
     description = "Terminal multiplexer inspired by i3";
+    longDescription = ''
+      Terminal multiplexer with out-of-the-box support for search,
+      mouse-controlled scrollback, and i3-like keybindings
+    '';
     homepage = "https://github.com/aaronjanse/3mux";
     license = licenses.mit;
-    maintainers = with maintainers; [ aaronjanse filalex77 ];
+    maintainers = with maintainers; [ aaronjanse Br1ght0ne ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/abduco/default.nix b/pkgs/tools/misc/abduco/default.nix
index a0868344d4c..9493df1c66c 100644
--- a/pkgs/tools/misc/abduco/default.nix
+++ b/pkgs/tools/misc/abduco/default.nix
@@ -1,23 +1,23 @@
-{ stdenv, fetchFromGitHub, writeText, conf ? null }:
-
-with stdenv.lib;
+{ lib, stdenv, fetchFromGitHub, writeText, conf ? null }:
 
 stdenv.mkDerivation rec {
-  name = "abduco-2018-05-16";
+  pname = "abduco";
+  version = "2020-04-30";
 
   src = fetchFromGitHub {
     owner = "martanne";
     repo = "abduco";
-    rev = "8f80aa8044d7ecf0e43a0294a09007d056b20e4c";
-    sha256 = "0wqcif633nbgnznn46j0sng9l0wncppw1x1c42f75b4p9hrph203";
+    rev = "8c32909a159aaa9484c82b71f05b7a73321eb491";
+    sha256 = "0a3p8xljhpk7zh203s75248blfir15smgw5jmszwbmdpy4mqzd53";
   };
 
-  configFile = optionalString (conf!=null) (writeText "config.def.h" conf);
-  preBuild = optionalString (conf!=null) "cp ${configFile} config.def.h";
+  preBuild = lib.optionalString (conf != null)
+    "cp ${writeText "config.def.h" conf} config.def.h";
 
-  CFLAGS = stdenv.lib.optionalString stdenv.isDarwin "-D_DARWIN_C_SOURCE";
+  installFlags = [ "install-completion" ];
+  CFLAGS = lib.optionalString stdenv.isDarwin "-D_DARWIN_C_SOURCE";
 
-  meta = {
+  meta = with lib; {
     homepage = "http://brain-dump.org/projects/abduco";
     license = licenses.isc;
     description = "Allows programs to be run independently from its controlling terminal";
diff --git a/pkgs/tools/misc/adafruit-ampy/default.nix b/pkgs/tools/misc/adafruit-ampy/default.nix
index be47d42dc89..8a07b2c6c9c 100644
--- a/pkgs/tools/misc/adafruit-ampy/default.nix
+++ b/pkgs/tools/misc/adafruit-ampy/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3 }:
+{ lib, python3 }:
 
 with python3.pkgs;
 
@@ -11,16 +11,16 @@ buildPythonApplication rec {
     sha256 = "1dz5sksalccv4c3bzk3c1jxpg3s28lwlw8hfwc9dfxhw3a1np3fd";
   };
 
-  nativeBuildInputs = [ setuptools_scm ];
+  nativeBuildInputs = [ setuptools-scm ];
   propagatedBuildInputs = [ click python-dotenv pyserial ];
 
   # No tests
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/pycampers/ampy";
     license = licenses.mit;
-    description = "Utility to interact with a MicroPython board over a serial connection.";
+    description = "Utility to interact with a MicroPython board over a serial connection";
     maintainers = with maintainers; [ etu ];
   };
 }
diff --git a/pkgs/tools/misc/aescrypt/default.nix b/pkgs/tools/misc/aescrypt/default.nix
index 42941c263e6..2a8b8b0b024 100644
--- a/pkgs/tools/misc/aescrypt/default.nix
+++ b/pkgs/tools/misc/aescrypt/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libiconv }:
+{ lib, stdenv, fetchurl, libiconv }:
 
 stdenv.mkDerivation rec {
   version = "3.14";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "1iziymcbpc64d44djgqfifpblsly4sr5bxsp5g29jgxz552kjlah";
   };
 
-  NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isDarwin "-liconv";
+  NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-liconv";
 
   preBuild = ''
     substituteInPlace src/Makefile --replace "CC=gcc" "CC?=gcc"
@@ -24,12 +24,12 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ libiconv ];
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms   = lib.platforms.all;
     hydraPlatforms = with platforms; unix;
   };
 }
diff --git a/pkgs/tools/misc/afetch/default.nix b/pkgs/tools/misc/afetch/default.nix
new file mode 100644
index 00000000000..aea2ff1ff2b
--- /dev/null
+++ b/pkgs/tools/misc/afetch/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "afetch";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "13-CF";
+    repo = "afetch";
+    rev = "V${version}";
+    sha256 = "sha256-bHP3DJpgh89AaCX4c1tQGaZ/PiWjArED1rMdszFUq+U=";
+  };
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "A fetch program written in C";
+    homepage = "https://github.com/13-CF/afetch";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 jk ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/agedu/default.nix b/pkgs/tools/misc/agedu/default.nix
index c9bad789ad2..9c4b5c00a66 100644
--- a/pkgs/tools/misc/agedu/default.nix
+++ b/pkgs/tools/misc/agedu/default.nix
@@ -1,20 +1,22 @@
-{stdenv, fetchgit, autoreconfHook, halibut}:
+{lib, stdenv, fetchgit, autoreconfHook, halibut}:
 let
-  date = "20200206";
-  rev = "963bc9d";
+  date = "20200705";
+  rev = "2a7d4a2";
 in
 stdenv.mkDerivation {
-  name = "agedu-${date}.${rev}";
+  pname = "agedu";
+  version = "${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 = "1jmvgg2v6aqgbgpxbndrdhgfhlglrq4yv4sdbjaj6bsz9fb8lqhc";
+    sha256 = "gRNscl/vhBoZaHFCs9JjDBHDRoEpILJLtiI4YV+K/b4=";
   };
 
   nativeBuildInputs = [autoreconfHook halibut];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A Unix utility for tracking down wasted disk space";
     longDescription = ''
        Most Unix file systems, in their default mode, helpfully record when a
@@ -30,6 +32,6 @@ stdenv.mkDerivation {
     homepage = "https://www.chiark.greenend.org.uk/~sgtatham/agedu/";
     license = licenses.mit;
     maintainers = with maintainers; [ symphorien ];
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/alarm-clock-applet/default.nix b/pkgs/tools/misc/alarm-clock-applet/default.nix
index 3102dd635ca..5585b6901dc 100644
--- a/pkgs/tools/misc/alarm-clock-applet/default.nix
+++ b/pkgs/tools/misc/alarm-clock-applet/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub
-, pkgconfig
+{ lib, stdenv, fetchFromGitHub
+, pkg-config
 , autoconf
 , automake111x
 , libtool
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     intltool
     automake111x
     autoconf
@@ -57,7 +57,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://alarm-clock.pseudoberries.com/";
     description = "A fully-featured alarm clock for your GNOME panel or equivalent";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/android-tools/default.nix b/pkgs/tools/misc/android-tools/default.nix
new file mode 100644
index 00000000000..1654b008aa5
--- /dev/null
+++ b/pkgs/tools/misc/android-tools/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl
+, cmake, perl, go
+, protobuf, zlib, gtest, brotli, lz4, zstd, libusb1, pcre2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "android-tools";
+  version = "31.0.2";
+
+  src = fetchurl {
+    url = "https://github.com/nmeum/android-tools/releases/download/${version}/android-tools-${version}.tar.xz";
+    sha256 = "sha256-YbO/bCQMsLTQzP72lsVZhuBmV4Q2J9+VD9z2iBrw+NQ=";
+  };
+
+  nativeBuildInputs = [ cmake perl go ];
+  buildInputs = [ protobuf zlib gtest brotli lz4 zstd libusb1 pcre2 ];
+
+  # Don't try to fetch any Go modules via the network:
+  GOFLAGS = [ "-mod=vendor" ];
+
+  preConfigure = ''
+    export GOCACHE=$TMPDIR/go-cache
+  '';
+
+  meta = with lib; {
+    description = "Android SDK platform tools";
+    longDescription = ''
+      Android SDK Platform-Tools is a component for the Android SDK. It
+      includes tools that interface with the Android platform, such as adb and
+      fastboot. These tools are required for Android app development. They're
+      also needed if you want to unlock your device bootloader and flash it
+      with a new system image.
+      Currently the following tools are supported:
+      - adb
+      - fastboot
+      - mke2fs.android (required by fastboot)
+      - simg2img, img2simg, append2simg
+    '';
+    # https://developer.android.com/studio/command-line#tools-platform
+    # https://developer.android.com/studio/releases/platform-tools
+    homepage = "https://github.com/nmeum/android-tools";
+    license = with licenses; [ asl20 unicode-dfs-2015 ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/pkgs/tools/misc/antimicroX/default.nix b/pkgs/tools/misc/antimicroX/default.nix
index 23418ced829..452906a1cf8 100644
--- a/pkgs/tools/misc/antimicroX/default.nix
+++ b/pkgs/tools/misc/antimicroX/default.nix
@@ -2,7 +2,7 @@
 , lib
 , cmake
 , extra-cmake-modules
-, pkgconfig
+, pkg-config
 , SDL2
 , qtbase
 , qttools
@@ -14,16 +14,16 @@
 
 mkDerivation rec {
   pname = "antimicroX";
-  version = "3.0";
+  version = "3.0.1";
 
   src = fetchFromGitHub {
     owner = "juliagoda";
     repo = "antimicroX";
     rev = version;
-    sha256 = "0li22sjl95233azxhyda36idnfzbb4b02wf57hnpnba6qvrlpwwl";
+    sha256 = "05asxlkgb4cgvpcyksw1cx8cz8nzi8hmw8b91lw92892j7a2r7wj";
   };
 
-  nativeBuildInputs = [ cmake extra-cmake-modules pkgconfig itstool ];
+  nativeBuildInputs = [ cmake extra-cmake-modules pkg-config itstool ];
   buildInputs = [
     SDL2
     qtbase
diff --git a/pkgs/tools/misc/anystyle-cli/Gemfile b/pkgs/tools/misc/anystyle-cli/Gemfile
new file mode 100644
index 00000000000..be47216200d
--- /dev/null
+++ b/pkgs/tools/misc/anystyle-cli/Gemfile
@@ -0,0 +1,37 @@
+source 'https://rubygems.org'
+gemspec
+
+
+group :development, :test do
+  #gem 'anystyle-data', github: 'inukshuk/anystyle-data'
+  #gem 'wapiti', github: 'inukshuk/wapiti-ruby'
+  gem 'bibtex-ruby'
+  gem 'rake'
+  gem 'rspec', '~>3.0'
+  gem 'language_detector', github: 'feedbackmine/language_detector'
+  gem 'unicode-scripts'
+  gem 'edtf'
+  gem 'citeproc'
+  gem 'unicode_utils' if RUBY_VERSION < '2.4'
+end
+
+group :coverage do
+  gem 'simplecov', require: false
+  gem 'coveralls', require: false if ENV['CI']
+end
+
+group :debug do
+  gem 'byebug', require: false
+end
+
+group :profile do
+  gem 'ruby-prof', require: false
+  gem 'gnuplot', require: false
+end
+
+group :extra do
+  gem 'lmdb'
+  gem 'redis'
+  gem 'redis-namespace'
+  gem 'yard'
+end
diff --git a/pkgs/tools/misc/anystyle-cli/Gemfile.lock b/pkgs/tools/misc/anystyle-cli/Gemfile.lock
new file mode 100644
index 00000000000..8d28ef80894
--- /dev/null
+++ b/pkgs/tools/misc/anystyle-cli/Gemfile.lock
@@ -0,0 +1,99 @@
+GIT
+  remote: https://github.com/feedbackmine/language_detector.git
+  revision: 89102790194150b3a8110ce691f9989b8ce70f8d
+  specs:
+    language_detector (0.1.2)
+
+PATH
+  remote: .
+  specs:
+    anystyle (1.3.10)
+      anystyle-data (~> 1.2)
+      bibtex-ruby (~> 5.0)
+      gli (~> 2.17)
+      namae (~> 1.0)
+      wapiti (~> 1.0, >= 1.0.2)
+
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (6.0.3.2)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 0.7, < 2)
+      minitest (~> 5.1)
+      tzinfo (~> 1.1)
+      zeitwerk (~> 2.2, >= 2.2.2)
+    anystyle-data (1.2.0)
+    bibtex-ruby (5.1.4)
+      latex-decode (~> 0.0)
+    builder (3.2.4)
+    byebug (11.1.3)
+    citeproc (1.0.10)
+      namae (~> 1.0)
+    concurrent-ruby (1.1.7)
+    diff-lcs (1.4.4)
+    docile (1.3.2)
+    edtf (3.0.5)
+      activesupport (>= 3.0, < 7.0)
+    gli (2.19.2)
+    gnuplot (2.6.2)
+    i18n (1.8.5)
+      concurrent-ruby (~> 1.0)
+    latex-decode (0.3.1)
+    lmdb (0.5.3)
+    minitest (5.14.1)
+    namae (1.0.1)
+    rake (13.0.1)
+    redis (4.2.1)
+    redis-namespace (1.8.0)
+      redis (>= 3.0.4)
+    rspec (3.9.0)
+      rspec-core (~> 3.9.0)
+      rspec-expectations (~> 3.9.0)
+      rspec-mocks (~> 3.9.0)
+    rspec-core (3.9.2)
+      rspec-support (~> 3.9.3)
+    rspec-expectations (3.9.2)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.9.0)
+    rspec-mocks (3.9.1)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.9.0)
+    rspec-support (3.9.3)
+    ruby-prof (1.4.1)
+    simplecov (0.19.0)
+      docile (~> 1.1)
+      simplecov-html (~> 0.11)
+    simplecov-html (0.12.2)
+    thread_safe (0.3.6)
+    tzinfo (1.2.7)
+      thread_safe (~> 0.1)
+    unicode-scripts (1.6.0)
+    wapiti (1.0.7)
+      builder (~> 3.2)
+    yard (0.9.25)
+    zeitwerk (2.4.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  anystyle!
+  bibtex-ruby
+  byebug
+  citeproc
+  edtf
+  gnuplot
+  language_detector!
+  lmdb
+  rake
+  redis
+  redis-namespace
+  rspec (~> 3.0)
+  ruby-prof
+  simplecov
+  unicode-scripts
+  yard
+
+BUNDLED WITH
+   2.1.4
diff --git a/pkgs/tools/misc/anystyle-cli/anystyle.gemspec b/pkgs/tools/misc/anystyle-cli/anystyle.gemspec
new file mode 100644
index 00000000000..57db427fb02
--- /dev/null
+++ b/pkgs/tools/misc/anystyle-cli/anystyle.gemspec
@@ -0,0 +1,52 @@
+# -*- encoding: utf-8 -*-
+lib = File.expand_path('../lib/', __FILE__)
+$:.unshift lib unless $:.include?(lib)
+
+require 'anystyle/version'
+
+Gem::Specification.new do |s|
+  s.name         = 'anystyle'
+  s.version      = AnyStyle::VERSION.dup
+  s.platform     = Gem::Platform::RUBY
+  s.authors      = ['Sylvester Keil']
+  s.email        = ['http://sylvester.keil.or.at']
+  s.homepage     = 'http://anystyle.io'
+  s.summary      = 'Smart and fast bibliography parser.'
+  s.description  = 'A sophisticated parser for academic reference lists and bibliographies based on machine learning algorithms using conditional random fields.'
+  s.license      = 'BSD-2-Clause'
+  s.executables  = []
+  s.require_path = 'lib'
+
+  s.required_ruby_version = '>= 2.2'
+
+  s.add_runtime_dependency('bibtex-ruby', '~>5.0')
+  s.add_runtime_dependency('anystyle-data', '~>1.2')
+  s.add_runtime_dependency('gli', '~>2.17')
+  s.add_runtime_dependency('wapiti', '~>1.0', '>=1.0.2')
+  s.add_runtime_dependency('namae', '~>1.0')
+
+  s.files =
+    `git ls-files`.split("\n") - `git ls-files spec`.split("\n") - %w{
+      .coveralls.yml
+      .gitignore
+      .rspec
+      .simplecov
+      .travis.yml
+      Gemfile
+      Rakefile
+      appveyor.yml
+      anystyle.gemspec
+      res/core.xml
+    }
+
+  s.rdoc_options = %w{
+    --line-numbers
+    --inline-source
+    --title "AnyStyle"
+    --main README.md
+  }
+  s.extra_rdoc_files = %w{README.md LICENSE}
+
+end
+
+# vim: syntax=ruby
diff --git a/pkgs/tools/misc/anystyle-cli/default.nix b/pkgs/tools/misc/anystyle-cli/default.nix
new file mode 100644
index 00000000000..7a437cafc28
--- /dev/null
+++ b/pkgs/tools/misc/anystyle-cli/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildRubyGem
+, bundlerEnv
+, ruby
+, poppler_utils
+}:
+let
+  deps = bundlerEnv rec {
+    name = "anystyle-cli-${version}";
+    source.sha256 = lib.fakeSha256;
+    version = "1.3.1";
+    inherit ruby;
+    gemdir = ./.;
+    gemset = lib.recursiveUpdate (import ./gemset.nix) {
+      anystyle.source = {
+        remotes = ["https://rubygems.org"];
+        sha256 = "1w79zcia60nnnyrmyvpd10pmxrpk5c7lj9gmmblhwi8x5mfq9k0n";
+        type = "gem";
+      };
+    };
+  };
+in
+buildRubyGem rec {
+  inherit ruby;
+  gemName = "anystyle-cli";
+  pname = gemName;
+  version = "1.3.1";
+  source.sha256 = "1a3ifwxwqkp5dnfk9r8qq8kgfb8k1pl7jjdghbb8ixbxz9ac7awy";
+
+  propagatedBuildInputs = [ deps ];
+
+  preFixup = ''
+    wrapProgram $out/bin/anystyle --prefix PATH ${poppler_utils}/bin
+  '';
+
+  meta = with lib; {
+    description = "Command line interface to the AnyStyle Parser and Finder";
+    homepage    = "https://anystyle.io/";
+    license     = licenses.bsd2;
+    maintainers = with maintainers; [ shamilton ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/anystyle-cli/gemset.nix b/pkgs/tools/misc/anystyle-cli/gemset.nix
new file mode 100644
index 00000000000..46444760b7b
--- /dev/null
+++ b/pkgs/tools/misc/anystyle-cli/gemset.nix
@@ -0,0 +1,1570 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02sh4q8izyfdnh7z2nj5mn5sklfvqgx9rrag5j3l51y8aqkrg2yk";
+      type = "gem";
+    };
+    version = "6.0.3.2";
+  };
+  anystyle = {
+    dependencies = ["anystyle-data" "bibtex-ruby" "gli" "namae" "wapiti"];
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      path = ./.;
+      type = "path";
+    };
+    version = "1.3.10";
+  };
+  anystyle-data = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ry6836mq48d85hjcfp7xiw0yk3ivpiwjvmdwv5jag30ijfyaccy";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  bibtex-ruby = {
+    dependencies = ["latex-decode"];
+    groups = ["default" "development" "test"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00zwmmmjrbrxhajdvn1d4rnv2qw00arcj021cwyx3hl6dsv22l2w";
+      type = "gem";
+    };
+    version = "5.1.4";
+  };
+  builder = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  byebug = {
+    groups = ["debug"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nx3yjf4xzdgb8jkmk2344081gqr22pgjqnmjg2q64mj5d6r9194";
+      type = "gem";
+    };
+    version = "11.1.3";
+  };
+  citeproc = {
+    dependencies = ["namae"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13vl5sjmksk5a8kjcqnjxh7kn9gn1n4f9p1rvqfgsfhs54p0m6l2";
+      type = "gem";
+    };
+    version = "1.0.10";
+  };
+  concurrent-ruby = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vnxrbhi7cq3p4y2v9iwd10v1c7l15is4var14hwnb2jip4fyjzz";
+      type = "gem";
+    };
+    version = "1.1.7";
+  };
+  diff-lcs = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m925b8xc6kbpnif9dldna24q1szg4mk0fvszrki837pfn46afmz";
+      type = "gem";
+    };
+    version = "1.4.4";
+  };
+  docile = {
+    groups = ["coverage" "default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qrwiyagxzl8zlx3dafb0ay8l14ib7imb2rsmx70i5cp420v8gif";
+      type = "gem";
+    };
+    version = "1.3.2";
+  };
+  edtf = {
+    dependencies = ["activesupport"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xknzamagsx68iq7zdiswr077sxirig77yggbcsw51m8365ajzpc";
+      type = "gem";
+    };
+    version = "3.0.5";
+  };
+  gli = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0q598mvl20isn3ja1ya0p72svmqwx3m6fjp5slnv0b2c5mh0ahvv";
+      type = "gem";
+    };
+    version = "2.19.2";
+  };
+  gnuplot = {
+    groups = ["profile"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cvb84lahhy6qxkkgg0pfk9b85qrb1by2p3jlpqgczl6am58vhnj";
+      type = "gem";
+    };
+    version = "2.6.2";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "153sx77p16vawrs4qpkv7qlzf9v5fks4g7xqcj1dwk40i6g7rfzk";
+      type = "gem";
+    };
+    version = "1.8.5";
+  };
+  language_detector = {
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      fetchSubmodules = false;
+      rev = "89102790194150b3a8110ce691f9989b8ce70f8d";
+      sha256 = "0wxs9i0wqmwysrz1c1i85i4f670m217y12rj5slcmd1y4ylsmvyi";
+      type = "git";
+      url = "https://github.com/feedbackmine/language_detector.git";
+    };
+    version = "0.1.2";
+  };
+  latex-decode = {
+    groups = ["default" "development" "test"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dqanr69as05vdyp9gx9737w3g44rhyk7x96bh9x01fnf1yalyzd";
+      type = "gem";
+    };
+    version = "0.3.1";
+  };
+  lmdb = {
+    groups = ["extra"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qk2ycgyyk052dvbgik35mr4n9im4k1j6v7anbjqhx52y5f07sfg";
+      type = "gem";
+    };
+    version = "0.5.3";
+  };
+  minitest = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09bz9nsznxgaf06cx3b5z71glgl0hdw469gqx3w7bqijgrb55p5g";
+      type = "gem";
+    };
+    version = "5.14.1";
+  };
+  namae = {
+    groups = ["default" "development" "test"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00w0dgvmdy8lw2b5q9zvhqd5k98a192vdmka96qngi9cvnsh5snw";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  rake = {
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0w6qza25bq1s825faaglkx1k6d59aiyjjk3yw3ip5sb463mhhai9";
+      type = "gem";
+    };
+    version = "13.0.1";
+  };
+  redis = {
+    groups = ["extra"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19hm66kw5vx1lmlh8bj7rxlddyj0vfp11ajw9njhrmn8173d0vb5";
+      type = "gem";
+    };
+    version = "4.2.1";
+  };
+  redis-namespace = {
+    dependencies = ["redis"];
+    groups = ["extra"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05i6s898z5w31z385cba1683pgg5nnmj4m686cbravg7j4pgbcgv";
+      type = "gem";
+    };
+    version = "1.8.0";
+  };
+  rspec = {
+    dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hzsig4pi9ybr0xl5540m1swiyxa74c8h09225y5sdh2rjkkg84h";
+      type = "gem";
+    };
+    version = "3.9.0";
+  };
+  rspec-core = {
+    dependencies = ["rspec-support"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xndkv5cz763wh30x7hdqw6k7zs8xfh0f86amra9agwn44pcqs0y";
+      type = "gem";
+    };
+    version = "3.9.2";
+  };
+  rspec-expectations = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bxkv25qmy39jqrdx35bfgw00g24qkssail9jlljm7hywbqvr9bb";
+      type = "gem";
+    };
+    version = "3.9.2";
+  };
+  rspec-mocks = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19vmdqym1v2g1zbdnq37zwmyj87y9yc9ijwc8js55igvbb9hx0mr";
+      type = "gem";
+    };
+    version = "3.9.1";
+  };
+  rspec-support = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dandh2fy1dfkjk8jf9v4azbbma6968bhh06hddv0yqqm8108jir";
+      type = "gem";
+    };
+    version = "3.9.3";
+  };
+  ruby-prof = {
+    groups = ["profile"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12cd91m08ih0imfpy4k87618hd4mhyz291a6bx2hcskza4nf6d27";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  simplecov = {
+    dependencies = ["docile" "simplecov-html"];
+    groups = ["coverage"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b082xrklq6k755cc3rzpnfdjv5338rlky9him36jasw8s9q68mr";
+      type = "gem";
+    };
+    version = "0.19.0";
+  };
+  simplecov-html = {
+    groups = ["coverage" "default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1v7b4mf7njw8kv4ghl4q7mwz3q0flbld7v8blp4m4m3n3aq11bn9";
+      type = "gem";
+    };
+    version = "0.12.2";
+  };
+  thread_safe = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  tzinfo = {
+    dependencies = ["thread_safe"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1i3jh086w1kbdj3k5l60lc3nwbanmzdf8yjj3mlrx9b2gjjxhi9r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  unicode-scripts = {
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04xfy4f61xf7qnbfa68aqscmyxk7wx3swn571cijsfqalhz8swjg";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  wapiti = {
+    dependencies = ["builder"];
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1aw2l759cfmii9a67pn8pswip11v08nabkzm825mrmxa6r91izqs";
+      type = "gem";
+    };
+    version = "1.0.7";
+  };
+  yard = {
+    groups = ["extra"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "126m49mvh4lbvlvrprq7xj2vjixbq3xqr8dwr089vadvs0rkn4rd";
+      type = "gem";
+    };
+    version = "0.9.25";
+  };
+  zeitwerk = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jvn50k76kl14fpymk4hdsf9sk00jl84yxzl783xhnw4dicp0m0k";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+}
+
diff --git a/pkgs/tools/misc/apparix/default.nix b/pkgs/tools/misc/apparix/default.nix
index 155fa8190d9..8e682aefcc3 100644
--- a/pkgs/tools/misc/apparix/default.nix
+++ b/pkgs/tools/misc/apparix/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "apparix-11-062";
@@ -10,11 +10,11 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://micans.org/apparix";
     description = "Add directory bookmarks, distant listing, and distant editing to the command line";
-    maintainers = with maintainers; [ lethalman ];
+    maintainers = with maintainers; [ ];
     license = licenses.gpl2;
-    platforms = platforms.linux;
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/apt-offline/default.nix b/pkgs/tools/misc/apt-offline/default.nix
index 7e29c63347d..3dc3fa1bbe2 100644
--- a/pkgs/tools/misc/apt-offline/default.nix
+++ b/pkgs/tools/misc/apt-offline/default.nix
@@ -1,22 +1,39 @@
-{ stdenv, fetchFromGitHub, python3Packages }:
+{ lib, fetchFromGitHub, python3Packages, unstableGitUpdater, gnupg }:
 
 python3Packages.buildPythonApplication rec {
-  version = "1.8.1";
   pname = "apt-offline";
+  version = "unstable-2021-04-11";
 
   src = fetchFromGitHub {
     owner = "rickysarraf";
     repo = pname;
-    rev = "v${version}";
-    sha256 = "0k79d1d8jiwg1s684r05njmk1dz8gsb8a9bl4agz7m31snc11j84";
+    rev = "4e4b3281d004d1ece4833b7680e2b5b091402a03";
+    sha256 = "1lk4186h2wc8fphd592rhq7yj4kgc7jjawx4pjrs6pg4n0q32pl6";
   };
 
+  postPatch = ''
+    substituteInPlace org.debian.apt.aptoffline.policy \
+      --replace /usr/bin/ "$out/bin"
+
+    substituteInPlace apt_offline_core/AptOfflineCoreLib.py \
+      --replace /usr/bin/gpgv "${gnupg}/bin/gpgv"
+  '';
+
+  preFixup = ''
+    rm "$out/bin/apt-offline-gui"
+    rm "$out/bin/apt-offline-gui-pkexec"
+  '';
+
   doCheck = false;
 
-  # Requires python-qt4 (feel free to get it working).
-  preFixup = ''rm "$out/bin/apt-offline-gui"'';
+  pythonimportsCheck = [ "apt-offline" ];
+
+  passthru.updateScript = unstableGitUpdater {
+    url = "https://github.com/rickysarraf/apt-offline.git";
+  };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
+    homepage = "https://github.com/rickysarraf/apt-offline";
     description = "Offline APT package manager";
     license = licenses.gpl3;
     maintainers = [ ];
diff --git a/pkgs/tools/misc/aptly/default.nix b/pkgs/tools/misc/aptly/default.nix
index 3c97c168429..7f82aebabe4 100644
--- a/pkgs/tools/misc/aptly/default.nix
+++ b/pkgs/tools/misc/aptly/default.nix
@@ -1,15 +1,15 @@
-{ stdenv, buildGoPackage, fetchFromGitHub, installShellFiles, makeWrapper, gnupg, bzip2, xz, graphviz }:
+{ lib, buildGoPackage, fetchFromGitHub, installShellFiles, makeWrapper, gnupg, bzip2, xz, graphviz }:
 
 let
 
-  version = "1.3.0";
+  version = "1.4.0";
   rev = "v${version}";
 
   aptlySrc = fetchFromGitHub {
     inherit rev;
     owner = "aptly-dev";
     repo = "aptly";
-    sha256 = "032gw8qkxcgc0jyrvzqh7jkbmk4k0gf7j74hyhclfnjmd9548f5l";
+    sha256 = "06cq761r3bxybb9xn58jii0ggp79mcp3810z1r2z3xcvplwhwnhy";
   };
 
   aptlyCompletionSrc = fetchFromGitHub {
@@ -34,10 +34,10 @@ buildGoPackage {
   postInstall = ''
     installShellCompletion --bash ${aptlyCompletionSrc}/aptly
     wrapProgram "$out/bin/aptly" \
-      --prefix PATH ":" "${stdenv.lib.makeBinPath [ gnupg bzip2 xz graphviz ]}"
+      --prefix PATH ":" "${lib.makeBinPath [ gnupg bzip2 xz graphviz ]}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.aptly.info";
     description = "Debian repository management tool";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/archi/default.nix b/pkgs/tools/misc/archi/default.nix
new file mode 100644
index 00000000000..d0beb7d40d7
--- /dev/null
+++ b/pkgs/tools/misc/archi/default.nix
@@ -0,0 +1,66 @@
+{ lib, stdenv
+, fetchurl
+, fetchzip
+, autoPatchelfHook
+, makeWrapper
+, jdk
+, libsecret
+}:
+
+stdenv.mkDerivation rec {
+  pname = "Archi";
+  version = "4.7.1";
+
+  src =
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      fetchurl {
+        url = "https://www.archimatetool.com/downloads/archi/Archi-Linux64-${version}.tgz";
+        sha256 = "0sd57cfnh5q2p17sd86c8wgmqyipg29rz6iaa5brq8mwn8ps2fdw";
+      }
+    else if stdenv.hostPlatform.system == "x86_64-darwin" then
+      fetchzip {
+        url = "https://www.archimatetool.com/downloads/archi/Archi-Mac-${version}.zip";
+        sha256 = "1h05lal5jnjwm30dbqvd6gisgrmf1an8xf34f01gs9pwqvqfvmxc";
+      }
+    else
+      throw "Unsupported system";
+
+  buildInputs = [
+    libsecret
+  ];
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    makeWrapper
+  ];
+
+  installPhase =
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      ''
+        mkdir -p $out/bin $out/libexec
+        for f in configuration features p2 plugins Archi.ini; do
+          cp -r $f $out/libexec
+        done
+
+        install -D -m755 Archi $out/libexec/Archi
+        makeWrapper $out/libexec/Archi $out/bin/Archi \
+          --prefix PATH : ${jdk}/bin
+      ''
+    else
+      ''
+        mkdir -p "$out/Applications"
+        mv Archi.app "$out/Applications/"
+      '';
+
+  meta = with lib; {
+    description = "ArchiMate modelling toolkit";
+    longDescription = ''
+      Archi is an open source modelling toolkit to create ArchiMate
+      models and sketches.
+    '';
+    homepage = "https://www.archimatetool.com/";
+    license = licenses.mit;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ earldouglas SuperSandro2000 ];
+  };
+}
diff --git a/pkgs/tools/misc/argtable/default.nix b/pkgs/tools/misc/argtable/default.nix
deleted file mode 100644
index 867b2eaba5d..00000000000
--- a/pkgs/tools/misc/argtable/default.nix
+++ /dev/null
@@ -1,41 +0,0 @@
-{ 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/pkgs/tools/misc/arp-scan/default.nix b/pkgs/tools/misc/arp-scan/default.nix
index 9a3164db5d7..720b0a875a8 100644
--- a/pkgs/tools/misc/arp-scan/default.nix
+++ b/pkgs/tools/misc/arp-scan/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, libpcap, makeWrapper, perlPackages }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libpcap, makeWrapper, perlPackages }:
 
 stdenv.mkDerivation rec {
   pname = "arp-scan";
@@ -18,8 +18,8 @@ stdenv.mkDerivation rec {
     URI
   ];
 
-  nativeBuildInputs = [ autoreconfHook ];
-  buildInputs = [ perlPackages.perl libpcap makeWrapper ];
+  nativeBuildInputs = [ autoreconfHook makeWrapper ];
+  buildInputs = [ perlPackages.perl libpcap ];
 
   postInstall = ''
     for name in get-{oui,iab}; do
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
     done;
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "ARP scanning and fingerprinting tool";
     longDescription = ''
       Arp-scan is a command-line tool that uses the ARP protocol to discover
@@ -35,7 +35,7 @@ stdenv.mkDerivation rec {
     '';
     homepage = "http://www.nta-monitor.com/wiki/index.php/Arp-scan_Documentation";
     license = licenses.gpl3;
-    platforms = platforms.linux;
-    maintainers = with maintainers; [ bjornfor mikoim ];
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ bjornfor mikoim r-burns ];
   };
 }
diff --git a/pkgs/tools/misc/as-tree/cargo-lock.patch b/pkgs/tools/misc/as-tree/cargo-lock.patch
new file mode 100644
index 00000000000..f7a06c050d2
--- /dev/null
+++ b/pkgs/tools/misc/as-tree/cargo-lock.patch
@@ -0,0 +1,13 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index 991ecd8..9e94574 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -11,7 +11,7 @@ dependencies = [
+ 
+ [[package]]
+ name = "as-tree"
+-version = "0.11.1"
++version = "0.12.0"
+ dependencies = [
+  "ansi_term",
+  "atty",
diff --git a/pkgs/tools/misc/as-tree/default.nix b/pkgs/tools/misc/as-tree/default.nix
new file mode 100644
index 00000000000..4b2ce65d3db
--- /dev/null
+++ b/pkgs/tools/misc/as-tree/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "as-tree";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "jez";
+    repo = pname;
+    rev = version;
+    sha256 = "0c0g32pkyhyvqpgvzlw9244c80npq6s8mxy3may7q4qyd7hi3dz5";
+  };
+
+  cargoSha256 = "1m334shcja7kg134b7lnq1ksy67j5b5vblkzamrw06f6r1hkn1rc";
+  # the upstream 0.12.0 release didn't update the Cargo.lock file properly
+  # they have updated their release script, so this patch can be removed
+  # when the next version is released.
+  cargoPatches = [ ./cargo-lock.patch ];
+
+  meta = with lib; {
+    description = "Print a list of paths as a tree of paths";
+    homepage = "https://github.com/jez/as-tree";
+    license = with licenses; [ blueOak100 ];
+    maintainers = with maintainers; [ jshholland ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/misc/asciinema-scenario/default.nix b/pkgs/tools/misc/asciinema-scenario/default.nix
new file mode 100644
index 00000000000..a818c6114d8
--- /dev/null
+++ b/pkgs/tools/misc/asciinema-scenario/default.nix
@@ -0,0 +1,23 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "asciinema-scenario";
+  version = "0.1.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-ubiVpKFU81Ot9V9oMexWSiUXHepoJ6nXtrWVAFhgcYw=";
+  };
+
+  cargoSha256 = "1yf63w2findgqipvgmlkw3pqfkai7mvqp86jg40lvr0mpnvly2ny";
+
+  meta = with lib; {
+    description = "Create asciinema videos from a text file";
+    homepage = "https://github.com/garbas/asciinema-scenario/";
+    maintainers = with maintainers; [ garbas ];
+    license = with licenses; [ mit ];
+  };
+}
diff --git a/pkgs/tools/misc/asdf-vm/default.nix b/pkgs/tools/misc/asdf-vm/default.nix
new file mode 100644
index 00000000000..1ba5c750f38
--- /dev/null
+++ b/pkgs/tools/misc/asdf-vm/default.nix
@@ -0,0 +1,85 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, installShellFiles, bash, coreutils, curl, git, writeScript }:
+
+let
+  asdfReshimFile = writeScript "asdf-reshim" ''
+#!/usr/bin/env bash
+
+# asdf-vm create "shim" file like this:
+#
+#    exec $ASDF_DIR/bin/asdf exec "node" "$@"
+#
+# So we should reshim all installed versions every time shell initialized,
+# because $out always change
+
+asdfDir="''${ASDF_DIR:-$HOME/.asdf}"
+asdfDataDir="''${ASDF_DATA_DIR:-$HOME/.asdf}"
+
+prevAsdfDirFilePath="$asdfDataDir/.nix-prev-asdf-dir-path"
+
+if [ -r "$prevAsdfDirFilePath" ]; then
+  prevAsdfDir="$(cat "$prevAsdfDirFilePath")"
+else
+  prevAsdfDir=""
+fi
+
+if [ "$prevAsdfDir" != "$asdfDir" ]; then
+  rm -rf "$asdfDataDir"/shims
+  "$asdfDir"/bin/asdf reshim
+  echo "$asdfDir" > "$prevAsdfDirFilePath"
+fi
+  '';
+
+  asdfPrepareFile = writeScript "asdf-prepare" ''
+ASDF_DIR="@asdfDir@"
+
+source "$ASDF_DIR/asdf.sh"
+${asdfReshimFile}
+  '';
+in stdenv.mkDerivation rec {
+  pname = "asdf-vm";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "asdf-vm";
+    repo = "asdf";
+    rev = "v${version}";
+    sha256 = "07lh5k1krzm7fbkv0jlwbzz5ycn2jg7s12dnqwmy82qqic0sl6fl";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    installShellFiles
+  ];
+
+  buildInputs = [
+    bash
+    curl
+    git
+  ];
+
+  installPhase = ''
+    mkdir -p $out/share/asdf-vm
+    cp -r . $out/share/asdf-vm
+
+    mkdir -p $out/etc/profile.d
+    substitute ${asdfPrepareFile} $out/etc/profile.d/asdf-prepare.sh \
+      --replace "@asdfDir@" "$out/share/asdf-vm"
+
+    mkdir -p $out/bin
+    makeWrapper $out/share/asdf-vm/bin/asdf $out/bin/asdf \
+      --set ASDF_DIR $out/share/asdf-vm
+
+    installShellCompletion --cmd asdf \
+      --zsh completions/_asdf \
+      --fish completions/asdf.fish \
+      --bash completions/asdf.bash
+  '';
+
+  meta = with lib; {
+    description = "Extendable version manager with support for Ruby, Node.js, Erlang & more";
+    homepage = "https://asdf-vm.com/";
+    license = licenses.mit;
+    maintainers = [ maintainers.c4605 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/aspcud/default.nix b/pkgs/tools/misc/aspcud/default.nix
index b58f603ce59..a50bc311f24 100644
--- a/pkgs/tools/misc/aspcud/default.nix
+++ b/pkgs/tools/misc/aspcud/default.nix
@@ -1,17 +1,18 @@
-{ stdenv, fetchzip
+{ lib, stdenv, fetchzip
 , boost, clasp, cmake, gringo, re2c
 }:
 
 stdenv.mkDerivation rec {
-  version = "1.9.4";
+  version = "1.9.5";
   pname = "aspcud";
 
   src = fetchzip {
     url = "https://github.com/potassco/aspcud/archive/v${version}.tar.gz";
-    sha256 = "0vrf7h7g99vw1mybqfrpxamsnf89p18czlzgjmxl1zkiwc7vjpzw";
+    sha256 = "sha256-d04GPMoz6PMGq6iiul0zT1C9Mljdl9uJJ2C8MIwcmaw=";
   };
 
-  buildInputs = [ boost clasp cmake gringo re2c ];
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ boost clasp gringo re2c ];
 
   cmakeFlags = [
     "-DCMAKE_BUILD_TYPE=Release"
@@ -19,7 +20,7 @@ stdenv.mkDerivation rec {
     "-DASPCUD_CLASP_PATH=${clasp}/bin/clasp"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Solver for package problems in CUDF format using ASP";
     homepage = "https://potassco.org/aspcud/";
     platforms = platforms.all;
diff --git a/pkgs/tools/misc/atuin/default.nix b/pkgs/tools/misc/atuin/default.nix
new file mode 100644
index 00000000000..3157fc51b58
--- /dev/null
+++ b/pkgs/tools/misc/atuin/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, libiconv
+, Security
+, SystemConfiguration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "atuin";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "ellie";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-jjGP8YeHnEr0f9RONwA6wZT872C0jXTvSRdt9zAu6KE=";
+  };
+
+  cargoSha256 = "0vy6q3hjp374lyg00zxim8aplh83iq3f4rrmpz5vnpwbag1fdql3";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security SystemConfiguration ];
+
+  meta = with lib; {
+    description = "Replacement for a shell history which records additional commands context with optional encrypted synchronization between machines";
+    homepage = "https://github.com/ellie/atuin";
+    license = licenses.mit;
+    maintainers = [ maintainers.onsails ];
+  };
+}
diff --git a/pkgs/tools/misc/autojump/default.nix b/pkgs/tools/misc/autojump/default.nix
index 85e50038834..47c4cbcb4e7 100644
--- a/pkgs/tools/misc/autojump/default.nix
+++ b/pkgs/tools/misc/autojump/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python, bash }:
+{ lib, stdenv, fetchFromGitHub, python3, bash }:
 
 stdenv.mkDerivation rec {
   pname = "autojump";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
     sha256 = "1rgpsh70manr2dydna9da4x7p8ahii7dgdgwir5fka340n1wrcws";
   };
 
-  buildInputs = [ python bash ];
+  buildInputs = [ python3 bash ];
   dontBuild = true;
 
   installPhase = ''
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
     install -Dt "$out/share/zsh/site-functions/" -m444 "$out/share/autojump/autojump.zsh"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A `cd' command that learns";
     longDescription = ''
       One of the most used shell commands is “cd”.  A quick survey
diff --git a/pkgs/tools/misc/automirror/default.nix b/pkgs/tools/misc/automirror/default.nix
index dde9c2d02d3..cc10c93b3f6 100644
--- a/pkgs/tools/misc/automirror/default.nix
+++ b/pkgs/tools/misc/automirror/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchFromGitHub, git, ronn}:
+{lib, stdenv, fetchFromGitHub, git, ronn}:
 
 stdenv.mkDerivation rec {
   pname = "automirror";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
 
   installFlags = [ "DESTDIR=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/schlomo/automirror";
     description = "Automatic Display Mirror";
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/autorandr/default.nix b/pkgs/tools/misc/autorandr/default.nix
index b2bbb161f28..79320401454 100644
--- a/pkgs/tools/misc/autorandr/default.nix
+++ b/pkgs/tools/misc/autorandr/default.nix
@@ -1,62 +1,62 @@
-{ stdenv
+{ lib, stdenv
 , python3Packages
 , fetchFromGitHub
 , systemd
 , xrandr }:
 
-let
-  python = python3Packages.python;
-  version = "1.10.1";
-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 "/run/current-system/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 = "0msw9b1hdy3gbq9w5d04mfizhyirz1c648x84mlcbzl8salm7vpg";
-    };
-
-    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;
-    };
-  }
+stdenv.mkDerivation rec {
+  pname = "autorandr";
+  version = "1.11";
+
+  buildInputs = [ python3Packages.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"]'
+  '';
+
+  outputs = [ "out" "man" ];
+
+  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
+
+    make install TARGETS='manpage' PREFIX=$man
+
+    ${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 "/run/current-system/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 = "0rmnqk2bi6bbd2if1rll37mlzlqxzmnazfffdhcpzskxwyaj4yn5";
+  };
+
+  meta = with 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/pkgs/tools/misc/autorevision/default.nix b/pkgs/tools/misc/autorevision/default.nix
index abaca62c400..ab7add1261a 100644
--- a/pkgs/tools/misc/autorevision/default.nix
+++ b/pkgs/tools/misc/autorevision/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchurl, asciidoc, libxml2, docbook_xml_dtd_45, libxslt
+{ lib, stdenv, fetchurl, asciidoc, libxml2, docbook_xml_dtd_45, libxslt
 , docbook_xsl, diffutils, coreutils, gnugrep, gnused
 }:
 
 stdenv.mkDerivation rec {
   pname = "autorevision";
-  version = "1.21";
+  version = "1.22";
 
   src = fetchurl {
     url = "https://github.com/Autorevision/autorevision/releases/download/v%2F${version}/autorevision-${version}.tgz";
-    sha256 = "07ssirjy2mgbqxr792n3rqa408hm7qnhwfjzd73rqfwvjcahy1q8";
+    sha256 = "sha256-3ktLVC73m2xddq5BhxVKw/FJd6pZ5RVb7fv29dxUoRE=";
   };
 
   buildInputs = [
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
         -i "$out/bin/autorevision"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Extracts revision metadata from your VCS repository";
     homepage = "https://autorevision.github.io/";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/aws-mturk-clt/default.nix b/pkgs/tools/misc/aws-mturk-clt/default.nix
index c5f4b0f5670..7e60d498842 100644
--- a/pkgs/tools/misc/aws-mturk-clt/default.nix
+++ b/pkgs/tools/misc/aws-mturk-clt/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, jre }:
+{ lib, stdenv, fetchurl, jre }:
 
 stdenv.mkDerivation rec {
   name = "aws-mturk-clt-1.3.0";
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://requester.mturk.com/developer";
     description = "Command line tools for interacting with the Amazon Mechanical Turk";
-    license = stdenv.lib.licenses.amazonsl;
+    license = lib.licenses.amazonsl;
 
     longDescription =
       ''
diff --git a/pkgs/tools/misc/azure-vhd-utils/default.nix b/pkgs/tools/misc/azure-vhd-utils/default.nix
index bfb622ee741..ad48eae7a87 100644
--- a/pkgs/tools/misc/azure-vhd-utils/default.nix
+++ b/pkgs/tools/misc/azure-vhd-utils/default.nix
@@ -1,9 +1,9 @@
 # This file was generated by go2nix.
-{ stdenv, buildGoPackage, fetchgit }:
+{ lib, buildGoPackage, fetchgit }:
 
 buildGoPackage rec {
   pname = "azure-vhd-utils";
-  version = "20160614-${stdenv.lib.strings.substring 0 7 rev}";
+  version = "20160614-${lib.strings.substring 0 7 rev}";
   rev = "070db2d701a462ca2edcf89d677ed3cac309d8e8";
 
   goPackagePath = "github.com/Microsoft/azure-vhd-utils";
@@ -16,7 +16,7 @@ buildGoPackage rec {
 
   goDeps = ./deps.nix;
 
-  meta = with stdenv.lib; {
+  meta = with 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";
diff --git a/pkgs/tools/misc/bandwidth/default.nix b/pkgs/tools/misc/bandwidth/default.nix
index 5de77aea0e0..677a9ddef51 100644
--- a/pkgs/tools/misc/bandwidth/default.nix
+++ b/pkgs/tools/misc/bandwidth/default.nix
@@ -1,38 +1,37 @@
-{ stdenv, fetchurl, nasm }:
+{ lib, 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";
+  inherit (stdenv.hostPlatform.parsed.cpu) bits;
+  arch = "bandwidth${toString bits}";
 in
 stdenv.mkDerivation rec {
   pname = "bandwidth";
-  version = "1.9.3";
+  version = "1.9.4";
 
   src = fetchurl {
     url = "https://zsmith.co/archives/${pname}-${version}.tar.gz";
-    sha256 = "0zpv2qgkbak0llw47qcakhyh2z3zv4d69kasldmpdlpqryd9za84";
+    sha256 = "0x798xj3vhiwq2hal0vmf92sq4h7yalp3i6ylqwhnnpv99m2zws4";
   };
 
-  buildInputs = [ nasm ];
+  postPatch = ''
+    sed -i 's,^CC=gcc .*,,' OOC/Makefile Makefile*
+    sed -i 's,ar ,$(AR) ,g' OOC/Makefile
+  '';
+
+  nativeBuildInputs = [ nasm ];
 
-  buildFlags = [ arch ]
-    ++ stdenv.lib.optionals stdenv.cc.isClang [ "CC=clang" "LD=clang" ];
+  buildFlags = [ arch ];
 
   installPhase = ''
     mkdir -p $out/bin
-    cp ${arch} $out/bin
-    ln -s ${arch} $out/bin/bandwidth
+    cp ${arch} $out/bin/bandwidth
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://zsmith.co/bandwidth.html";
     description = "Artificial benchmark for identifying weaknesses in the memory subsystem";
-    license = licenses.mit;
-    platforms = platforms.unix;
+    license = licenses.gpl2Plus;
+    platforms = platforms.x86;
+    maintainers = with maintainers; [ r-burns ];
   };
 }
diff --git a/pkgs/tools/misc/barman/default.nix b/pkgs/tools/misc/barman/default.nix
new file mode 100644
index 00000000000..ef84981a9d9
--- /dev/null
+++ b/pkgs/tools/misc/barman/default.nix
@@ -0,0 +1,29 @@
+{ buildPythonApplication, fetchurl, lib
+, python-dateutil, argcomplete, argh, psycopg2, boto3
+}:
+
+buildPythonApplication rec {
+  pname = "barman";
+  version = "2.12";
+
+  outputs = [ "out" "man" ];
+  src = fetchurl {
+    url = "mirror://sourceforge/pgbarman/${version}/barman-${version}.tar.gz";
+    sha256 = "Ts8I6tlP2GRp90OIIKXy+cRWWvUO3Sm86zq2dtVP5YE=";
+  };
+
+  propagatedBuildInputs = [ python-dateutil argh psycopg2 boto3 argcomplete ];
+
+  # Tests are not present in tarball
+  checkPhase = ''
+    $out/bin/barman --help > /dev/null
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.2ndquadrant.com/en/resources/barman/";
+    description = "Backup and Disaster Recovery Manager for PostgreSQL";
+    maintainers = with maintainers; [ freezeboy ];
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/bash_unit/default.nix b/pkgs/tools/misc/bash_unit/default.nix
index abfe4078870..9f574da85a5 100644
--- a/pkgs/tools/misc/bash_unit/default.nix
+++ b/pkgs/tools/misc/bash_unit/default.nix
@@ -1,16 +1,16 @@
 { fetchFromGitHub
-, stdenv
+, lib, stdenv
 }:
 
 stdenv.mkDerivation rec {
   pname = "bash_unit";
-  version = "1.7.1";
+  version = "1.7.2";
 
   src = fetchFromGitHub {
     owner = "pgrange";
     repo = pname;
     rev = "v${version}";
-    sha256 = "02cam5gkhnlwhb9aqcqmkl8kskgikih0bmyx09ybi3gpaf4z82f7";
+    sha256 = "sha256-+hEgag5H7PaBwZSBp3D17q3TZRO2SVBe5M1Ep/jeg1w=";
   };
 
   installPhase = ''
@@ -18,10 +18,10 @@ stdenv.mkDerivation rec {
     cp bash_unit $out/bin/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Bash unit testing enterprise edition framework for professionals";
     maintainers = with maintainers; [ pamplemousse ];
-    platforms = platforms.linux;
+    platforms = platforms.all;
     license = licenses.gpl3Plus;
   };
 }
diff --git a/pkgs/tools/misc/bashcards/default.nix b/pkgs/tools/misc/bashcards/default.nix
index ecaabb43c14..30a442ef562 100644
--- a/pkgs/tools/misc/bashcards/default.nix
+++ b/pkgs/tools/misc/bashcards/default.nix
@@ -1,16 +1,16 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 }:
 
 stdenv.mkDerivation rec {
   pname = "bashcards";
-  version = "0.1.2";
+  version = "0.1.3";
 
   src = fetchFromGitHub {
     owner = "rpearce";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1zbijbcm9lrqwiax37li0jjqcaxf469wh5d423frain56z1qknxl";
+    sha256 = "1rpqrh0022sbrjvd55a0jvpdqhhka5msf8dsz6adbbmxy3xzgdid";
   };
 
   dontBuild = true;
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
     cp bashcards $out/bin/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Practice flashcards in bash";
     homepage = "https://github.com/rpearce/bashcards/";
     license = licenses.bsd3;
diff --git a/pkgs/tools/misc/bashplotlib/default.nix b/pkgs/tools/misc/bashplotlib/default.nix
index 3e8ae31835a..44d7e93355b 100644
--- a/pkgs/tools/misc/bashplotlib/default.nix
+++ b/pkgs/tools/misc/bashplotlib/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3Packages, fetchFromGitHub }:
+{ lib, python3Packages, fetchFromGitHub }:
 
 python3Packages.buildPythonApplication {
   pname = "bashplotlib";
@@ -14,7 +14,7 @@ python3Packages.buildPythonApplication {
   # No tests
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/glamp/bashplotlib";
     description = "Plotting in the terminal";
     maintainers = with maintainers; [ dtzWill ];
diff --git a/pkgs/tools/misc/bat-extras/default.nix b/pkgs/tools/misc/bat-extras/default.nix
index 36adc09cdba..cb483567f21 100644
--- a/pkgs/tools/misc/bat-extras/default.nix
+++ b/pkgs/tools/misc/bat-extras/default.nix
@@ -1,6 +1,7 @@
-{ stdenv, callPackage, fetchFromGitHub, bash, makeWrapper, bat
+{ lib, stdenv, fetchFromGitHub, bash, makeWrapper, bat
 # batdiff, batgrep, and batwatch
 , coreutils
+, getconf
 , less
 # batgrep
 , ripgrep
@@ -13,7 +14,7 @@
 , withEntr ? entr != null, entr ? null
 # batdiff
 , gitMinimal
-, withDelta ? gitAndTools?delta, gitAndTools ? null
+, withDelta ? delta != null, delta ? null
 }:
 
 let
@@ -21,15 +22,13 @@ let
   # This includes the complete source so the per-script derivations can run the tests.
   core = stdenv.mkDerivation rec {
     pname   = "bat-extras";
-    # there hasn't been a release since 2020-05-01 but there are important bugfixes
-    # to the test suite so we'll pull the latest commit as of 2020-06-17.
-    version = "20200515-dev"; # latest commit was dated 2020-05-15
+    version = "2021.04.06";
 
     src = fetchFromGitHub {
       owner  = "eth-p";
       repo   = pname;
-      rev    = "3029b6749f61f7514e9eef30e035cfab0e31eb1d";
-      sha256 = "08mb94k2n182ql97c5s5j1v7np25ivynn5g0418whrx11ra41wr7";
+      rev    = "v${version}";
+      sha256 = "sha256-MphI2n+oHZrw8bPohNGeGdST5LS1c6s/rKqtpcR9cLo=";
       fetchSubmodules = true;
     };
 
@@ -50,6 +49,7 @@ let
 
     # Run the library tests as they don't have external dependencies
     doCheck = true;
+    checkInputs = lib.optionals stdenv.isDarwin [ getconf ];
     checkPhase = ''
       runHook preCheck
       # test list repeats suites. Unique them
@@ -76,7 +76,7 @@ let
     # The per-script derivations will go ahead and patch the files they actually install.
     dontPatchShebangs = true;
 
-    meta = with stdenv.lib; {
+    meta = with lib; {
       description = "Bash scripts that integrate bat with various command line tools";
       homepage    = "https://github.com/eth-p/bat-extras";
       license     = with licenses; [ mit ];
@@ -106,6 +106,7 @@ let
       dontBuild = true; # we've already built
 
       doCheck = true;
+      checkInputs = lib.optionals stdenv.isDarwin [ getconf ];
       checkPhase = ''
         runHook preCheck
         bash ./test.sh --compiled --suite ${name}
@@ -116,9 +117,9 @@ let
         runHook preInstall
         mkdir -p $out/bin
         cp -p bin/${name} $out/bin/${name}
-      '' + stdenv.lib.optionalString (dependencies != []) ''
+      '' + lib.optionalString (dependencies != []) ''
         wrapProgram $out/bin/${name} \
-          --prefix PATH : ${stdenv.lib.makeBinPath dependencies}
+          --prefix PATH : ${lib.makeBinPath dependencies}
       '' + ''
         runHook postInstall
       '';
@@ -130,10 +131,10 @@ let
     };
   optionalDep = cond: dep:
     assert cond -> dep != null;
-    stdenv.lib.optional cond dep;
+    lib.optional cond dep;
 in
 {
-  batdiff = script "batdiff" ([ less coreutils gitMinimal ] ++ optionalDep withDelta gitAndTools.delta);
+  batdiff = script "batdiff" ([ less coreutils gitMinimal ] ++ optionalDep withDelta delta);
   batgrep = script "batgrep" [ less coreutils ripgrep ];
   batman = script "batman" [];
   batwatch = script "batwatch" ([ less coreutils ] ++ optionalDep withEntr entr);
diff --git a/pkgs/tools/misc/bat/default.nix b/pkgs/tools/misc/bat/default.nix
index b4e5501fb73..81b910117f1 100644
--- a/pkgs/tools/misc/bat/default.nix
+++ b/pkgs/tools/misc/bat/default.nix
@@ -1,40 +1,53 @@
-{ stdenv, rustPlatform, fetchFromGitHub, pkgconfig, less
-, Security, libiconv, installShellFiles, makeWrapper
+{ lib
+, stdenv
+, nixosTests
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, less
+, Security
+, libiconv
+, installShellFiles
+, makeWrapper
 }:
 
 rustPlatform.buildRustPackage rec {
-  pname   = "bat";
-  version = "0.15.4";
+  pname = "bat";
+  version = "0.18.2";
 
   src = fetchFromGitHub {
-    owner  = "sharkdp";
-    repo   = pname;
-    rev    = "v${version}";
-    sha256 = "0pjdba2c6p7ldgx2yfffxqlpasrcfrlkw63m1ma34zdq0f287w3p";
+    owner = "sharkdp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Y8CmVOIDPQ9kpggOlKnxLV0oOyNRow0r/nvxNpCtYNU=";
   };
+  cargoSha256 = "sha256-MdfBldImyW8QV0P3zPrYT2Vi9zChvXePI2T8tRsrlcQ=";
 
-  cargoSha256 = "0myz06hjv4hwzmyqa9l36i9j9d213a0mnq8rvx6wyff7mr9zk99i";
+  nativeBuildInputs = [ pkg-config installShellFiles makeWrapper ];
 
-  nativeBuildInputs = [ pkgconfig installShellFiles makeWrapper ];
-
-  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ Security libiconv ];
+  buildInputs = lib.optionals stdenv.isDarwin [ Security libiconv ];
 
   postInstall = ''
     installManPage $releaseDir/build/bat-*/out/assets/manual/bat.1
-    installShellCompletion $releaseDir/build/bat-*/out/assets/completions/bat.fish
+    installShellCompletion $releaseDir/build/bat-*/out/assets/completions/bat.{bash,fish,zsh}
   '';
 
   # 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 ]}"
+      --prefix PATH : "${lib.makeBinPath [ less ]}"
   '';
 
-  meta = with stdenv.lib; {
+  checkFlags = [ "--skip=pager_more" "--skip=pager_most" ];
+
+  passthru.tests = { inherit (nixosTests) bat; };
+
+  meta = with lib; {
     description = "A cat(1) clone with syntax highlighting and Git integration";
-    homepage    = "https://github.com/sharkdp/bat";
-    license     = with licenses; [ asl20 /* or */ mit ];
+    homepage = "https://github.com/sharkdp/bat";
+    changelog = "https://github.com/sharkdp/bat/raw/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
     maintainers = with maintainers; [ dywedir lilyball zowoq ];
   };
 }
diff --git a/pkgs/tools/misc/bbe/default.nix b/pkgs/tools/misc/bbe/default.nix
index b0af13160d2..5cd7326d7b1 100644
--- a/pkgs/tools/misc/bbe/default.nix
+++ b/pkgs/tools/misc/bbe/default.nix
@@ -1,4 +1,4 @@
-{ stdenv , fetchurl, autoreconfHook }:
+{ lib, stdenv , fetchurl, autoreconfHook }:
 stdenv.mkDerivation rec {
   pname = "bbe";
   version = "0.2.2";
@@ -12,11 +12,11 @@ stdenv.mkDerivation rec {
 
   outputs = [ "out" "doc" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A sed-like editor for binary files";
     homepage = "http://bbe-.sourceforge.net/";
     license = licenses.gpl2Plus;
-    platforms = platforms.linux;
+    platforms = platforms.all;
     maintainers = [ maintainers.hhm ];
   };
 }
diff --git a/pkgs/tools/misc/bc/default.nix b/pkgs/tools/misc/bc/default.nix
index d065732a299..bb5ed84e7d7 100644
--- a/pkgs/tools/misc/bc/default.nix
+++ b/pkgs/tools/misc/bc/default.nix
@@ -1,11 +1,12 @@
-{ stdenv, autoreconfHook, buildPackages
+{ lib, stdenv, autoreconfHook, buildPackages
 , fetchurl, flex, readline, ed, texinfo
 }:
 
 stdenv.mkDerivation rec {
-  name = "bc-1.07.1";
+  pname = "bc";
+  version = "1.07.1";
   src = fetchurl {
-    url = "mirror://gnu/bc/${name}.tar.gz";
+    url = "mirror://gnu/bc/${pname}-${version}.tar.gz";
     sha256 = "62adfca89b0a1c0164c2cdca59ca210c1d44c3ffc46daf9931cf4942664cb02a";
   };
 
@@ -30,10 +31,10 @@ stdenv.mkDerivation rec {
   # masss-rebuild.
   strictDeps = true;
 
-  meta = {
+  meta = with lib; {
     description = "GNU software calculator";
     homepage = "https://www.gnu.org/software/bc/";
-    license = stdenv.lib.licenses.gpl3;
-    platforms = stdenv.lib.platforms.all;
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/bcunit/default.nix b/pkgs/tools/misc/bcunit/default.nix
index 203735d79b0..61fc84fef7e 100644
--- a/pkgs/tools/misc/bcunit/default.nix
+++ b/pkgs/tools/misc/bcunit/default.nix
@@ -1,6 +1,6 @@
 { cmake
 , fetchFromGitLab
-, stdenv
+, lib, stdenv
 }:
 
 stdenv.mkDerivation rec {
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
   # https://gitlab.linphone.org/BC/public/bcunit/issues/1
   version = "unstable-2019-11-19";
 
-  buildInputs = [ cmake ];
+  nativeBuildInputs = [ cmake ];
   src = fetchFromGitLab {
     domain = "gitlab.linphone.org";
     owner = "public";
@@ -19,12 +19,11 @@ stdenv.mkDerivation rec {
     sha256 = "1237hpmkls2igp60gdfkbknxpgwvxn1vmv2m41vyl25xw1d3g35w";
   };
 
-  meta = with stdenv.lib; {
-    inherit version;
+  meta = with lib; {
     description = "A fork of CUnit test framework";
     homepage = "https://gitlab.linphone.org/BC/public/bcunit";
     license = licenses.lgpl2Plus;
     maintainers = with maintainers; [ raskin jluttine ];
-    platforms = platforms.linux;
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/bdf2psf/default.nix b/pkgs/tools/misc/bdf2psf/default.nix
index 966e71bb6d3..72f142105b7 100644
--- a/pkgs/tools/misc/bdf2psf/default.nix
+++ b/pkgs/tools/misc/bdf2psf/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchurl, perl, dpkg }:
+{ lib, stdenv, fetchurl, perl, dpkg }:
 
 stdenv.mkDerivation rec {
   pname = "bdf2psf";
-  version = "1.196";
+  version = "1.205";
 
   src = fetchurl {
     url = "mirror://debian/pool/main/c/console-setup/bdf2psf_${version}_all.deb";
-    sha256 = "042ly91525q2qj7985qih4njhjk5ndz8jiz01v860jc38bvw595p";
+    sha256 = "sha256-elFmsqtndo4ReR4IoyhC56k0PMqy5QrUxOGUQLGeu0I=";
   };
 
   nativeBuildInputs = [ dpkg ];
@@ -14,19 +14,25 @@ stdenv.mkDerivation rec {
   dontConfigure = true;
   dontBuild = true;
 
-  unpackPhase = "dpkg-deb -x $src .";
+  unpackPhase = ''
+    runHook preUnpack
+    dpkg-deb -x $src .
+    runHook postUnpack
+  '';
   installPhase = "
+    runHook preInstall
     substituteInPlace usr/bin/bdf2psf --replace /usr/bin/perl ${perl}/bin/perl
     mv usr $out
+    runHook postInstall
   ";
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    license = licenses.gpl2Plus;
     maintainers = with maintainers; [ rnhmjoj vrthra ];
     platforms = platforms.unix;
   };
diff --git a/pkgs/tools/misc/bdf2sfd/default.nix b/pkgs/tools/misc/bdf2sfd/default.nix
index e7a9d98aaf2..735508fed21 100644
--- a/pkgs/tools/misc/bdf2sfd/default.nix
+++ b/pkgs/tools/misc/bdf2sfd/default.nix
@@ -1,19 +1,19 @@
-{ stdenv, fetchFromGitHub, cmake }:
+{ lib, stdenv, fetchFromGitHub, cmake }:
 
 stdenv.mkDerivation rec {
   pname = "bdf2sfd";
-  version = "1.1.3";
+  version = "1.1.6";
 
   src = fetchFromGitHub {
     owner = "fcambus";
     repo = pname;
     rev = version;
-    sha256 = "0v1kkds35qfyv1h5kxc2m7f2gsprg9c7jzpsm3p4f71qn982wry6";
+    sha256 = "sha256-f3IdTk1GEo1GlbiJMCpqwheNJrndm7aCojA+GuKMTao=";
   };
 
   nativeBuildInputs = [ cmake ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "BDF to SFD converter";
     homepage = "https://github.com/fcambus/bdf2sfd";
     license = licenses.bsd2;
diff --git a/pkgs/tools/misc/beats/default.nix b/pkgs/tools/misc/beats/default.nix
new file mode 100644
index 00000000000..3e471c76fdf
--- /dev/null
+++ b/pkgs/tools/misc/beats/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "beats";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "j0hax";
+    repo = "beats";
+    rev = "v${version}";
+    sha256 = "1rdvsqrjpily74y8vwch711401585xckb4p41cfwrmj6vf44jhif";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/j0hax/beats";
+    license = licenses.gpl3Only;
+    description = "Swatch Internet Time implemented as a C program";
+    platforms = platforms.all;
+    maintainers = [ maintainers.j0hax ];
+  };
+}
diff --git a/pkgs/tools/misc/bepasty/default.nix b/pkgs/tools/misc/bepasty/default.nix
index 460f20a5f5f..69a784ec4cc 100644
--- a/pkgs/tools/misc/bepasty/default.nix
+++ b/pkgs/tools/misc/bepasty/default.nix
@@ -36,7 +36,7 @@ in with python.pkgs; buildPythonPackage rec {
     xstatic-pygments
   ];
 
-  buildInputs = [ setuptools_scm ];
+  buildInputs = [ setuptools-scm ];
 
   src = fetchPypi {
     inherit pname version;
diff --git a/pkgs/tools/misc/betterdiscord-installer/default.nix b/pkgs/tools/misc/betterdiscord-installer/default.nix
new file mode 100644
index 00000000000..f1aefd9b758
--- /dev/null
+++ b/pkgs/tools/misc/betterdiscord-installer/default.nix
@@ -0,0 +1,32 @@
+{ appimageTools, lib, fetchurl }:
+let
+  pname = "betterdiscord-installer";
+  version = "1.0.0-beta";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/BetterDiscord/Installer/releases/download/v${version}/Betterdiscord-Linux.AppImage";
+    sha256 = "103acb11qmvjmf6g9lgsfm5jyahfwfdqw0x9w6lmv1hzwbs26dsr";
+  };
+
+  appimageContents = appimageTools.extract { inherit name src; };
+in appimageTools.wrapType2 {
+  inherit name src;
+
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+
+    install -m 444 -D ${appimageContents}/betterdiscord.desktop -t $out/share/applications
+    substituteInPlace $out/share/applications/betterdiscord.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+    cp -r ${appimageContents}/usr/share/icons $out/share
+  '';
+
+  meta = with lib; {
+    description = "Installer for BetterDiscord";
+    homepage = "https://betterdiscord.net";
+    license = licenses.mit;
+    maintainers = [ maintainers.ivar ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/pkgs/tools/misc/betterdiscordctl/default.nix b/pkgs/tools/misc/betterdiscordctl/default.nix
new file mode 100644
index 00000000000..6a20ebc10c5
--- /dev/null
+++ b/pkgs/tools/misc/betterdiscordctl/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenvNoCC, fetchFromGitHub }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "betterdiscordctl";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "bb010g";
+    repo = "betterdiscordctl";
+    rev = "v${version}";
+    sha256 = "0p321rfcihz2779sdd6qfgpxgk5yd53d33vq5pvb50dbdgxww0bc";
+  };
+
+  postPatch = ''
+    substituteInPlace betterdiscordctl \
+      --replace "DISABLE_SELF_UPGRADE=" "DISABLE_SELF_UPGRADE=yes"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/bin" "$out/share/doc/betterdiscordctl"
+    install -Dm744 betterdiscordctl $out/bin/betterdiscordctl
+    install -Dm644 README.md $out/share/doc/betterdiscordctl/README.md
+
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    $out/bin/betterdiscordctl --version
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/bb010g/betterdiscordctl";
+    description = "A utility for managing BetterDiscord on Linux";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ivar bb010g ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/bfetch/default.nix b/pkgs/tools/misc/bfetch/default.nix
new file mode 100644
index 00000000000..107f2cd9452
--- /dev/null
+++ b/pkgs/tools/misc/bfetch/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenvNoCC, fetchFromGitHub, bash }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "bfetch";
+  version = "unstable-2021-05-21";
+
+  src = fetchFromGitHub {
+    owner = "NNBnh";
+    repo = pname;
+    rev = "ef88e9d3f815e5074efc8ef4b7f32be6818130f2";
+    sha256 = "sha256-jS9zI8b+z3KbI+LeHFwIMJfEmAKSzO8HRZ2rk35hJCk=";
+  };
+
+  buildInputs = [ bash ];
+
+  postPatch = ''
+    patchShebangs --host bin/bfetch
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A SuperB general-purpose fetch displayer written in portable sh";
+    homepage = "https://github.com/NNBnh/bfetch";
+    license = licenses.gpl3Only;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ fortuneteller2k ];
+  };
+}
diff --git a/pkgs/tools/misc/bfr/default.nix b/pkgs/tools/misc/bfr/default.nix
index 4ec73641842..80ec398ef8c 100644
--- a/pkgs/tools/misc/bfr/default.nix
+++ b/pkgs/tools/misc/bfr/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl }:
+{ lib, stdenv, fetchurl, perl }:
 
 stdenv.mkDerivation rec {
   name = "bfr-1.6";
@@ -18,9 +18,9 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ perl ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A general-purpose command-line pipe buffer";
-    license = stdenv.lib.licenses.gpl2;
+    license = lib.licenses.gpl2;
     maintainers = with maintainers; [ pSub ];
     platforms = platforms.linux;
   };
diff --git a/pkgs/tools/misc/bibtex2html/default.nix b/pkgs/tools/misc/bibtex2html/default.nix
index ddda4ef4445..0add7340ed5 100644
--- a/pkgs/tools/misc/bibtex2html/default.nix
+++ b/pkgs/tools/misc/bibtex2html/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, ocaml }:
+{ lib, stdenv, fetchurl, ocaml, perl }:
 
 stdenv.mkDerivation {
   pname = "bibtex2html";
@@ -9,9 +9,9 @@ stdenv.mkDerivation {
     sha256 = "07gzrs4lfrkvbn48cgn2gn6c7cx3jsanakkrb2irj0gmjzfxl96j";
   };
 
-  buildInputs = [ ocaml ];
+  buildInputs = [ ocaml perl ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A collection of tools for translating from BibTeX to HTML";
     homepage = "https://www.lri.fr/~filliatr/bibtex2html/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/bibtool/default.nix b/pkgs/tools/misc/bibtool/default.nix
index 041dabeee77..df27f244fca 100644
--- a/pkgs/tools/misc/bibtool/default.nix
+++ b/pkgs/tools/misc/bibtool/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl }:
+{ lib, stdenv, fetchurl, perl }:
 
 stdenv.mkDerivation rec {
   pname = "bibtool";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
   doCheck = true;
   checkTarget = "test";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tool for manipulating BibTeX bibliographies";
     homepage = "http://www.gerd-neugebauer.de/software/TeX/BibTool/index.en.html";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/bibutils/default.nix b/pkgs/tools/misc/bibutils/default.nix
index bd744bcfb6f..03b35811bc5 100644
--- a/pkgs/tools/misc/bibutils/default.nix
+++ b/pkgs/tools/misc/bibutils/default.nix
@@ -1,4 +1,8 @@
-{ stdenv, fetchurl }:
+{ lib
+, stdenv
+, fetchurl
+, static ? stdenv.hostPlatform.isStatic
+}:
 
 stdenv.mkDerivation rec {
   pname = "bibutils";
@@ -9,18 +13,30 @@ stdenv.mkDerivation rec {
     sha256 = "15p4av74ihsg03j854dkdqihpspwnp58p9g1lhx48w8kz91c0ml6";
   };
 
-  configureFlags = [ "--dynamic" "--install-dir" "$(out)/bin" "--install-lib" "$(out)/lib" ];
+  preConfigure = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace lib/Makefile.dynamic \
+      --replace '-Wl,-soname,$(SONAME)' ""
+  '';
+
+  configureFlags = [
+    (if static then "--static" else "--dynamic")
+    "--install-dir" "$(out)/bin"
+    "--install-lib" "$(out)/lib"
+  ];
   dontAddPrefix = true;
 
   doCheck = true;
   checkTarget = "test";
+  preCheck = lib.optionalString stdenv.isDarwin ''
+    export DYLD_LIBRARY_PATH=`pwd`/lib
+  '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/birdfont/default.nix b/pkgs/tools/misc/birdfont/default.nix
index bdf68d708a5..5473fa0e78c 100644
--- a/pkgs/tools/misc/birdfont/default.nix
+++ b/pkgs/tools/misc/birdfont/default.nix
@@ -1,26 +1,31 @@
-{ stdenv, fetchurl, pkgconfig, python3, xmlbird,
-cairo, gdk-pixbuf, libgee, glib, gtk3, webkitgtk, libnotify, sqlite, vala_0_44,
+{ lib, stdenv, fetchurl, pkg-config, python3, xmlbird,
+cairo, gdk-pixbuf, libgee, glib, gtk3, webkitgtk, libnotify, sqlite, vala,
 gobject-introspection, gsettings-desktop-schemas, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
   pname = "birdfont";
-  version = "2.29.0";
+  version = "2.29.5";
 
   src = fetchurl {
     url = "https://birdfont.org/releases/${pname}-${version}.tar.xz";
-    sha256 = "18z3qbrsbfpn00c4xq3ck1mnmvrnqgl9g1s7m4dgc1871fi6sv8w";
+    sha256 = "sha256-eIqq4ehUB4lF89ikrHeN5Akq14nxYMxREZzPSVnv+nU=";
   };
 
-  nativeBuildInputs = [ python3 pkgconfig vala_0_44 gobject-introspection wrapGAppsHook ];
+  nativeBuildInputs = [ python3 pkg-config vala gobject-introspection wrapGAppsHook ];
   buildInputs = [ xmlbird libgee cairo gdk-pixbuf glib gtk3 webkitgtk libnotify sqlite gsettings-desktop-schemas ];
 
-  postPatch = "patchShebangs .";
+  postPatch = ''
+    substituteInPlace install.py \
+      --replace 'platform.version()' '"Nix"'
+
+    patchShebangs .
+  '';
 
   buildPhase = "./build.py";
 
   installPhase = "./install.py";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Font editor which can generate fonts in TTF, EOT, SVG and BIRDFONT format";
     homepage = "https://birdfont.org";
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/birdfont/xmlbird.nix b/pkgs/tools/misc/birdfont/xmlbird.nix
index e5ad56376ca..cacebb93995 100644
--- a/pkgs/tools/misc/birdfont/xmlbird.nix
+++ b/pkgs/tools/misc/birdfont/xmlbird.nix
@@ -1,25 +1,29 @@
-{ stdenv, fetchurl, python3, pkgconfig, vala, glib, gobject-introspection }:
+{ lib, stdenv, fetchurl, python3, pkg-config, vala, glib, gobject-introspection }:
 
 stdenv.mkDerivation rec {
   pname = "xmlbird";
-  version = "1.2.11";
+  version = "1.2.12";
 
   src = fetchurl {
     url = "https://birdfont.org/${pname}-releases/lib${pname}-${version}.tar.xz";
-    sha256 = "1ycbgjvywnlc0garw8qjqd18s0xnrwjvssdrb410yschv3wjq1i0";
+    sha256 = "15z4rvii3p54g2hasibjnf83c1702d84367fnl8pbisjqqrdcl04";
   };
 
-  nativeBuildInputs = [ python3 pkgconfig vala gobject-introspection ];
+  nativeBuildInputs = [ python3 pkg-config vala gobject-introspection ];
 
   buildInputs = [ glib ];
 
-  postPatch = "patchShebangs .";
+  postPatch = ''
+    substituteInPlace configure \
+      --replace 'platform.dist()[0]' '"nix"'
+    patchShebangs .
+  '';
 
   buildPhase = "./build.py";
 
   installPhase = "./install.py";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "XML parser for Vala and C programs";
     homepage = "https://birdfont.org/xmlbird.php";
     license = licenses.lgpl3;
diff --git a/pkgs/tools/misc/bitwise/default.nix b/pkgs/tools/misc/bitwise/default.nix
new file mode 100644
index 00000000000..a7ae6243f45
--- /dev/null
+++ b/pkgs/tools/misc/bitwise/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, readline, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "bitwise";
+  version = "0.42";
+
+  src = fetchFromGitHub {
+    owner = "mellowcandle";
+    repo = "bitwise";
+    rev = "v${version}";
+    sha256 = "154y0sn3z64z56k84ghsazkyihbkaz40hfwxcxdymnhvhh6m9f3g";
+  };
+
+  buildInputs = [ ncurses readline ];
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "Terminal based bitwise calculator in curses";
+    homepage = "https://github.com/mellowcandle/bitwise";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.whonore ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/bkyml/default.nix b/pkgs/tools/misc/bkyml/default.nix
new file mode 100644
index 00000000000..aea83e7c99f
--- /dev/null
+++ b/pkgs/tools/misc/bkyml/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, python3
+}:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "bkyml";
+  version = "1.4.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "01kpx35572mp4xl2fjyvfk39jfgfjcyzymbifk76891kaqkjb7r9";
+  };
+
+  # The pyscaffold is not a runtime dependency but just a python project bootstrapping tool. Thus,
+  # instead of implement this package in nix we remove a dependency on it and fix up the version
+  # of the package, that has been affected by the pyscaffold package dependency removal.
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "['pyscaffold>=3.0a0,<3.1a0'] + " "" \
+      --replace "use_pyscaffold=True"  ""
+    substituteInPlace src/bkyml/skeleton.py --replace \
+        "from bkyml import __version__" \
+        "__version__ = \"${version}\""
+  '';
+
+  # Don't run tests because they are broken when run within
+  # buildPythonApplication for reasons I don't quite understand.
+  doCheck = false;
+
+  pythonImportsCheck = [ "bkyml" ];
+
+  propagatedBuildInputs = [
+    ruamel_yaml
+    setuptools
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/joscha/bkyml";
+    description = "A CLI tool to generate a pipeline.yaml file for Buildkite on the fly.";
+    license = licenses.mit;
+    maintainers = with maintainers; [ olebedev ];
+  };
+}
diff --git a/pkgs/tools/misc/blflash/default.nix b/pkgs/tools/misc/blflash/default.nix
new file mode 100644
index 00000000000..d8c1aec35a0
--- /dev/null
+++ b/pkgs/tools/misc/blflash/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "blflash";
+  version = "0.3.3";
+
+  src = fetchFromGitHub {
+    owner = "spacemeowx2";
+    repo = "blflash";
+    rev = "v${version}";
+    sha256 = "sha256-hPScmivtugtZm848Itzg4Tb9rppZny+rKi3IBuUxxQY=";
+  };
+
+  cargoSha256 = "sha256-/y3R8B2TOf8jeB9tcewoA9EGN6kj/EPMTjU6rfTF5Vc=";
+
+  meta = with lib; {
+    description = "An bl602 serial flasher written in Rust";
+    homepage = "https://github.com/spacemeowx2/blflash";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ _0x4A6F ];
+  };
+}
diff --git a/pkgs/tools/misc/blink1-tool/default.nix b/pkgs/tools/misc/blink1-tool/default.nix
index 5bf38f1b0e7..23096bb2eaf 100644
--- a/pkgs/tools/misc/blink1-tool/default.nix
+++ b/pkgs/tools/misc/blink1-tool/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libusb1, pkgconfig, ... }:
+{ lib, stdenv, fetchurl, libusb1, pkg-config, ... }:
 
 stdenv.mkDerivation rec {
   pname = "blink1";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "1waci6hccv5i50v5d3z7lx4h224fbkj66ywfynnsgn46w0jm6imv";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libusb1 ];
 
   configurePhase = ''
@@ -23,8 +23,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.cc-by-sa-30;
+    maintainers = [ lib.maintainers.cransom ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/bmap-tools/default.nix b/pkgs/tools/misc/bmap-tools/default.nix
index 8273d60bd59..c78c0121ed0 100644
--- a/pkgs/tools/misc/bmap-tools/default.nix
+++ b/pkgs/tools/misc/bmap-tools/default.nix
@@ -1,17 +1,22 @@
-{ stdenv, fetchFromGitHub, python2Packages }:
+{ lib, fetchFromGitHub, python3Packages }:
 
-python2Packages.buildPythonApplication rec {
+python3Packages.buildPythonApplication rec {
   pname = "bmap-tools";
-  version = "3.4";
+  version = "3.6";
 
   src = fetchFromGitHub {
     owner = "intel";
     repo = "bmap-tools";
     rev = "v${version}";
-    sha256 = "0p0pdwvyf9b4czi1pnhclm1ih8kw78nk2sj4if5hwi7s5423wk5q";
+    sha256 = "01xzrv5nvd2nvj91lz4x9s91y9825j9pj96z0ap6yvy3w2dgvkkl";
   };
 
-  meta = with stdenv.lib; {
+  propagatedBuildInputs = with python3Packages; [ six ];
+
+  # tests fail only on hydra.
+  doCheck = false;
+
+  meta = with lib; {
     description = "bmap-related tools";
     homepage = "https://github.com/intel/bmap-tools";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/bmon/default.nix b/pkgs/tools/misc/bmon/default.nix
index d99cce78bbf..758a42d1538 100644
--- a/pkgs/tools/misc/bmon/default.nix
+++ b/pkgs/tools/misc/bmon/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, ncurses, libconfuse
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, ncurses, libconfuse
 , libnl }:
 
 stdenv.mkDerivation rec {
@@ -12,18 +12,23 @@ stdenv.mkDerivation rec {
     sha256 = "1ilba872c09mnlvylslv4hqv6c9cz36l76q74rr99jvis1dg69gf";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
-  buildInputs = [ ncurses libconfuse libnl ];
+  buildInputs = [ ncurses libconfuse ] ++ lib.optional stdenv.isLinux libnl;
 
-  meta = with stdenv.lib; {
+  preConfigure = ''
+    # Must be an absolute path
+    export PKG_CONFIG="$(command -v "$PKG_CONFIG")"
+  '';
+
+  meta = with 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;
+    platforms = platforms.unix;
     maintainers = with maintainers; [ bjornfor pSub ];
   };
 }
diff --git a/pkgs/tools/misc/bogofilter/default.nix b/pkgs/tools/misc/bogofilter/default.nix
index 1924968f2d3..30a17bf188a 100644
--- a/pkgs/tools/misc/bogofilter/default.nix
+++ b/pkgs/tools/misc/bogofilter/default.nix
@@ -1,4 +1,4 @@
-{fetchurl, stdenv, flex, db}:
+{fetchurl, lib, stdenv, flex, db}:
 
 stdenv.mkDerivation rec {
   name = "bogofilter-1.2.4";
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
       classifications and corrections.  It is based on a Bayesian
       filter.
     '';
-    license = stdenv.lib.licenses.gpl2;
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/boltbrowser/default.nix b/pkgs/tools/misc/boltbrowser/default.nix
new file mode 100644
index 00000000000..29635394954
--- /dev/null
+++ b/pkgs/tools/misc/boltbrowser/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "boltbrowser";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "br0xen";
+    repo = pname;
+    rev = version;
+    sha256 = "17v3pv80dxs285d0b6x772h5cb4f0xg9n5p9jwlir5hjbfn1635i";
+  };
+
+  vendorSha256 = "1x28m72626cchnsasyxips8jaqs0l2p9jhjrdcgws144zm6fz3hv";
+
+  meta = with lib; {
+    description = "CLI Browser for BoltDB files";
+    homepage = "https://github.com/br0xen/boltbrowser";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/misc/bonfire/default.nix b/pkgs/tools/misc/bonfire/default.nix
index 85d54c16736..f71d8a8b8ef 100644
--- a/pkgs/tools/misc/bonfire/default.nix
+++ b/pkgs/tools/misc/bonfire/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3Packages, fetchFromGitHub }:
+{ lib, python3Packages, fetchFromGitHub }:
 
 with python3Packages;
 
@@ -29,7 +29,7 @@ buildPythonApplication rec {
       --replace "data_files = *.rst, *.txt" ""
   '';
 
-  buildInputs = [ httpretty pytest pytestcov ];
+  buildInputs = [ httpretty pytest pytest-cov ];
 
   preCheck = ''
     # fix compatibility with pytest 4
@@ -38,7 +38,7 @@ buildPythonApplication rec {
 
   propagatedBuildInputs = [ arrow click keyring parsedatetime requests six termcolor ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://pypi.python.org/pypi/bonfire";
     description = "CLI Graylog Client with Follow Mode";
     license = licenses.bsd3;
diff --git a/pkgs/tools/misc/bottom-rs/cargo-lock.patch b/pkgs/tools/misc/bottom-rs/cargo-lock.patch
new file mode 100644
index 00000000000..9b736f763c8
--- /dev/null
+++ b/pkgs/tools/misc/bottom-rs/cargo-lock.patch
@@ -0,0 +1,791 @@
+diff --git a/Cargo.lock b/Cargo.lock
+new file mode 100644
+index 0000000..edc9428
+--- /dev/null
++++ b/Cargo.lock
+@@ -0,0 +1,785 @@
++# This file is automatically @generated by Cargo.
++# It is not intended for manual editing.
++[[package]]
++name = "ansi_term"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
++dependencies = [
++ "winapi",
++]
++
++[[package]]
++name = "anyhow"
++version = "1.0.40"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "28b2cd92db5cbd74e8e5028f7e27dd7aa3090e89e4f2a197cc7c8dfb69c7063b"
++
++[[package]]
++name = "atty"
++version = "0.2.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
++dependencies = [
++ "hermit-abi",
++ "libc",
++ "winapi",
++]
++
++[[package]]
++name = "autocfg"
++version = "1.0.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
++
++[[package]]
++name = "bitflags"
++version = "1.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
++
++[[package]]
++name = "bottom-bench"
++version = "0.1.0"
++dependencies = [
++ "bottomify",
++ "criterion",
++]
++
++[[package]]
++name = "bottomify"
++version = "1.2.0"
++dependencies = [
++ "anyhow",
++ "clap",
++ "phf",
++ "phf_codegen",
++]
++
++[[package]]
++name = "bstr"
++version = "0.2.15"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a40b47ad93e1a5404e6c18dec46b628214fee441c70f4ab5d6942142cc268a3d"
++dependencies = [
++ "lazy_static",
++ "memchr",
++ "regex-automata",
++ "serde",
++]
++
++[[package]]
++name = "bumpalo"
++version = "3.6.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe"
++
++[[package]]
++name = "byteorder"
++version = "1.4.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
++
++[[package]]
++name = "cast"
++version = "0.2.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cc38c385bfd7e444464011bb24820f40dd1c76bcdfa1b78611cb7c2e5cafab75"
++dependencies = [
++ "rustc_version",
++]
++
++[[package]]
++name = "cfg-if"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
++
++[[package]]
++name = "clap"
++version = "2.33.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
++dependencies = [
++ "ansi_term",
++ "atty",
++ "bitflags",
++ "strsim",
++ "textwrap",
++ "unicode-width",
++ "vec_map",
++]
++
++[[package]]
++name = "criterion"
++version = "0.3.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ab327ed7354547cc2ef43cbe20ef68b988e70b4b593cbd66a2a61733123a3d23"
++dependencies = [
++ "atty",
++ "cast",
++ "clap",
++ "criterion-plot",
++ "csv",
++ "itertools 0.10.0",
++ "lazy_static",
++ "num-traits",
++ "oorandom",
++ "plotters",
++ "rayon",
++ "regex",
++ "serde",
++ "serde_cbor",
++ "serde_derive",
++ "serde_json",
++ "tinytemplate",
++ "walkdir",
++]
++
++[[package]]
++name = "criterion-plot"
++version = "0.4.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e022feadec601fba1649cfa83586381a4ad31c6bf3a9ab7d408118b05dd9889d"
++dependencies = [
++ "cast",
++ "itertools 0.9.0",
++]
++
++[[package]]
++name = "crossbeam-channel"
++version = "0.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4"
++dependencies = [
++ "cfg-if",
++ "crossbeam-utils",
++]
++
++[[package]]
++name = "crossbeam-deque"
++version = "0.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9"
++dependencies = [
++ "cfg-if",
++ "crossbeam-epoch",
++ "crossbeam-utils",
++]
++
++[[package]]
++name = "crossbeam-epoch"
++version = "0.9.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2584f639eb95fea8c798496315b297cf81b9b58b6d30ab066a75455333cf4b12"
++dependencies = [
++ "cfg-if",
++ "crossbeam-utils",
++ "lazy_static",
++ "memoffset",
++ "scopeguard",
++]
++
++[[package]]
++name = "crossbeam-utils"
++version = "0.8.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49"
++dependencies = [
++ "autocfg",
++ "cfg-if",
++ "lazy_static",
++]
++
++[[package]]
++name = "csv"
++version = "1.1.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1"
++dependencies = [
++ "bstr",
++ "csv-core",
++ "itoa",
++ "ryu",
++ "serde",
++]
++
++[[package]]
++name = "csv-core"
++version = "0.1.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
++dependencies = [
++ "memchr",
++]
++
++[[package]]
++name = "either"
++version = "1.6.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
++
++[[package]]
++name = "getrandom"
++version = "0.1.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
++dependencies = [
++ "cfg-if",
++ "libc",
++ "wasi",
++]
++
++[[package]]
++name = "half"
++version = "1.7.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "62aca2aba2d62b4a7f5b33f3712cb1b0692779a56fb510499d5c0aa594daeaf3"
++
++[[package]]
++name = "hermit-abi"
++version = "0.1.18"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"
++dependencies = [
++ "libc",
++]
++
++[[package]]
++name = "itertools"
++version = "0.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
++dependencies = [
++ "either",
++]
++
++[[package]]
++name = "itertools"
++version = "0.10.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "37d572918e350e82412fe766d24b15e6682fb2ed2bbe018280caa810397cb319"
++dependencies = [
++ "either",
++]
++
++[[package]]
++name = "itoa"
++version = "0.4.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
++
++[[package]]
++name = "js-sys"
++version = "0.3.50"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2d99f9e3e84b8f67f846ef5b4cbbc3b1c29f6c759fcbce6f01aa0e73d932a24c"
++dependencies = [
++ "wasm-bindgen",
++]
++
++[[package]]
++name = "lazy_static"
++version = "1.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
++
++[[package]]
++name = "libc"
++version = "0.2.94"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "18794a8ad5b29321f790b55d93dfba91e125cb1a9edbd4f8e3150acc771c1a5e"
++
++[[package]]
++name = "log"
++version = "0.4.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
++dependencies = [
++ "cfg-if",
++]
++
++[[package]]
++name = "memchr"
++version = "2.3.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
++
++[[package]]
++name = "memoffset"
++version = "0.6.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f83fb6581e8ed1f85fd45c116db8405483899489e38406156c25eb743554361d"
++dependencies = [
++ "autocfg",
++]
++
++[[package]]
++name = "num-traits"
++version = "0.2.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
++dependencies = [
++ "autocfg",
++]
++
++[[package]]
++name = "num_cpus"
++version = "1.13.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
++dependencies = [
++ "hermit-abi",
++ "libc",
++]
++
++[[package]]
++name = "oorandom"
++version = "11.1.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
++
++[[package]]
++name = "phf"
++version = "0.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
++dependencies = [
++ "phf_shared",
++]
++
++[[package]]
++name = "phf_codegen"
++version = "0.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
++dependencies = [
++ "phf_generator",
++ "phf_shared",
++]
++
++[[package]]
++name = "phf_generator"
++version = "0.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
++dependencies = [
++ "phf_shared",
++ "rand",
++]
++
++[[package]]
++name = "phf_shared"
++version = "0.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
++dependencies = [
++ "siphasher",
++]
++
++[[package]]
++name = "plotters"
++version = "0.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "45ca0ae5f169d0917a7c7f5a9c1a3d3d9598f18f529dd2b8373ed988efea307a"
++dependencies = [
++ "num-traits",
++ "plotters-backend",
++ "plotters-svg",
++ "wasm-bindgen",
++ "web-sys",
++]
++
++[[package]]
++name = "plotters-backend"
++version = "0.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b07fffcddc1cb3a1de753caa4e4df03b79922ba43cf882acc1bdd7e8df9f4590"
++
++[[package]]
++name = "plotters-svg"
++version = "0.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b38a02e23bd9604b842a812063aec4ef702b57989c37b655254bb61c471ad211"
++dependencies = [
++ "plotters-backend",
++]
++
++[[package]]
++name = "ppv-lite86"
++version = "0.2.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
++
++[[package]]
++name = "proc-macro2"
++version = "1.0.26"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec"
++dependencies = [
++ "unicode-xid",
++]
++
++[[package]]
++name = "quote"
++version = "1.0.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
++dependencies = [
++ "proc-macro2",
++]
++
++[[package]]
++name = "rand"
++version = "0.7.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
++dependencies = [
++ "getrandom",
++ "libc",
++ "rand_chacha",
++ "rand_core",
++ "rand_hc",
++ "rand_pcg",
++]
++
++[[package]]
++name = "rand_chacha"
++version = "0.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
++dependencies = [
++ "ppv-lite86",
++ "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 = "rand_pcg"
++version = "0.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
++dependencies = [
++ "rand_core",
++]
++
++[[package]]
++name = "rayon"
++version = "1.5.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674"
++dependencies = [
++ "autocfg",
++ "crossbeam-deque",
++ "either",
++ "rayon-core",
++]
++
++[[package]]
++name = "rayon-core"
++version = "1.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a"
++dependencies = [
++ "crossbeam-channel",
++ "crossbeam-deque",
++ "crossbeam-utils",
++ "lazy_static",
++ "num_cpus",
++]
++
++[[package]]
++name = "regex"
++version = "1.4.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2a26af418b574bd56588335b3a3659a65725d4e636eb1016c2f9e3b38c7cc759"
++dependencies = [
++ "regex-syntax",
++]
++
++[[package]]
++name = "regex-automata"
++version = "0.1.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4"
++dependencies = [
++ "byteorder",
++]
++
++[[package]]
++name = "regex-syntax"
++version = "0.6.23"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "24d5f089152e60f62d28b835fbff2cd2e8dc0baf1ac13343bef92ab7eed84548"
++
++[[package]]
++name = "rustc_version"
++version = "0.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
++dependencies = [
++ "semver",
++]
++
++[[package]]
++name = "ryu"
++version = "1.0.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
++
++[[package]]
++name = "same-file"
++version = "1.0.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
++dependencies = [
++ "winapi-util",
++]
++
++[[package]]
++name = "scopeguard"
++version = "1.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
++
++[[package]]
++name = "semver"
++version = "0.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
++dependencies = [
++ "semver-parser",
++]
++
++[[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.125"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171"
++
++[[package]]
++name = "serde_cbor"
++version = "0.11.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1e18acfa2f90e8b735b2836ab8d538de304cbb6729a7360729ea5a895d15a622"
++dependencies = [
++ "half",
++ "serde",
++]
++
++[[package]]
++name = "serde_derive"
++version = "1.0.125"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b093b7a2bb58203b5da3056c05b4ec1fed827dcfdb37347a8841695263b3d06d"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++]
++
++[[package]]
++name = "serde_json"
++version = "1.0.64"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79"
++dependencies = [
++ "itoa",
++ "ryu",
++ "serde",
++]
++
++[[package]]
++name = "siphasher"
++version = "0.3.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cbce6d4507c7e4a3962091436e56e95290cb71fa302d0d270e32130b75fbff27"
++
++[[package]]
++name = "strsim"
++version = "0.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
++
++[[package]]
++name = "syn"
++version = "1.0.70"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b9505f307c872bab8eb46f77ae357c8eba1fdacead58ee5a850116b1d7f82883"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "unicode-xid",
++]
++
++[[package]]
++name = "textwrap"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
++dependencies = [
++ "unicode-width",
++]
++
++[[package]]
++name = "tinytemplate"
++version = "1.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
++dependencies = [
++ "serde",
++ "serde_json",
++]
++
++[[package]]
++name = "unicode-width"
++version = "0.1.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
++
++[[package]]
++name = "unicode-xid"
++version = "0.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
++
++[[package]]
++name = "vec_map"
++version = "0.8.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
++
++[[package]]
++name = "walkdir"
++version = "2.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
++dependencies = [
++ "same-file",
++ "winapi",
++ "winapi-util",
++]
++
++[[package]]
++name = "wasi"
++version = "0.9.0+wasi-snapshot-preview1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
++
++[[package]]
++name = "wasm-bindgen"
++version = "0.2.73"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "83240549659d187488f91f33c0f8547cbfef0b2088bc470c116d1d260ef623d9"
++dependencies = [
++ "cfg-if",
++ "wasm-bindgen-macro",
++]
++
++[[package]]
++name = "wasm-bindgen-backend"
++version = "0.2.73"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ae70622411ca953215ca6d06d3ebeb1e915f0f6613e3b495122878d7ebec7dae"
++dependencies = [
++ "bumpalo",
++ "lazy_static",
++ "log",
++ "proc-macro2",
++ "quote",
++ "syn",
++ "wasm-bindgen-shared",
++]
++
++[[package]]
++name = "wasm-bindgen-macro"
++version = "0.2.73"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3e734d91443f177bfdb41969de821e15c516931c3c3db3d318fa1b68975d0f6f"
++dependencies = [
++ "quote",
++ "wasm-bindgen-macro-support",
++]
++
++[[package]]
++name = "wasm-bindgen-macro-support"
++version = "0.2.73"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d53739ff08c8a68b0fdbcd54c372b8ab800b1449ab3c9d706503bc7dd1621b2c"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++ "wasm-bindgen-backend",
++ "wasm-bindgen-shared",
++]
++
++[[package]]
++name = "wasm-bindgen-shared"
++version = "0.2.73"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d9a543ae66aa233d14bb765ed9af4a33e81b8b58d1584cf1b47ff8cd0b9e4489"
++
++[[package]]
++name = "web-sys"
++version = "0.3.50"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a905d57e488fec8861446d3393670fb50d27a262344013181c2cdf9fff5481be"
++dependencies = [
++ "js-sys",
++ "wasm-bindgen",
++]
++
++[[package]]
++name = "winapi"
++version = "0.3.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
++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.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
++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"
diff --git a/pkgs/tools/misc/bottom-rs/default.nix b/pkgs/tools/misc/bottom-rs/default.nix
new file mode 100644
index 00000000000..ab5763c207d
--- /dev/null
+++ b/pkgs/tools/misc/bottom-rs/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bottom-rs";
+  version = "unstable-2021-04-27";
+
+  src = fetchFromGitHub {
+    owner = "bottom-software-foundation";
+    repo = pname;
+    rev = "3451cdadd7c4e64fe8e7f43e986a18628a741dec";
+    sha256 = "0kr18q80021s1n9zzzff6w6yvbbjnk6zbbabi5b42b0rfv6fnfn2";
+  };
+
+  cargoPatches = [ ./cargo-lock.patch ];
+  cargoSha256 = "0nyzg6pg69bf9vvc3r5lnhmkb9s1508c1gqcra3y43zffdlwml1y";
+
+  meta = with lib; {
+    description = "Fantastic (maybe) CLI for translating between bottom and human-readable text";
+    homepage = "https://github.com/bottom-software-foundation/bottom-rs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ winterqt ];
+  };
+}
diff --git a/pkgs/tools/misc/brltty/default.nix b/pkgs/tools/misc/brltty/default.nix
index 1320f28ede2..fef13a89372 100644
--- a/pkgs/tools/misc/brltty/default.nix
+++ b/pkgs/tools/misc/brltty/default.nix
@@ -1,22 +1,22 @@
-{ stdenv, fetchurl, pkgconfig, python3, bluez
-, alsaSupport ? stdenv.isLinux, alsaLib ? null
-, systemdSupport ? stdenv.isLinux, systemd ? null }:
-
-assert alsaSupport -> alsaLib != null;
-assert systemdSupport -> systemd != null;
+{ lib, stdenv, fetchurl, pkg-config, python3, bluez
+, tcl, acl, kmod, coreutils, shadow, util-linux, udev
+, alsaSupport ? stdenv.isLinux, alsa-lib
+, systemdSupport ? stdenv.isLinux, systemd
+}:
 
 stdenv.mkDerivation rec {
-  name = "brltty-6.1";
+  pname = "brltty";
+  version = "6.3";
 
   src = fetchurl {
-    url = "http://brltty.com/archive/${name}.tar.gz";
-    sha256 = "0nk54chr7z2w579vyiak9xk2avhnvrx7x2l5sk8nyw2zplchkx9q";
+    url = "https://brltty.app/archive/${pname}-${version}.tar.gz";
+    sha256 = "14psxwlvgyi2fj1zh8rfykyjcjaya8xa7yg574bxd8y8n49n8hvb";
   };
 
-  nativeBuildInputs = [ pkgconfig python3.pkgs.cython ];
+  nativeBuildInputs = [ pkg-config python3.pkgs.cython tcl ];
   buildInputs = [ bluez ]
-    ++ stdenv.lib.optional alsaSupport alsaLib
-    ++ stdenv.lib.optional systemdSupport systemd;
+    ++ lib.optional alsaSupport alsa-lib
+    ++ lib.optional systemdSupport systemd;
 
   meta = {
     description = "Access software for a blind person using a braille display";
@@ -26,17 +26,70 @@ stdenv.mkDerivation rec {
       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;
+    homepage = "https://brltty.app";
+    license = lib.licenses.gpl2Plus;
+    maintainers = [ lib.maintainers.bramd ];
+    platforms = lib.platforms.all;
   };
 
-  makeFlags = [ "PYTHON_PREFIX=$(out)" ];
-
-  preConfigurePhases = [ "preConfigure" ];
+  makeFlags = [
+    "PYTHON_PREFIX=$(out)"
+    "SYSTEMD_UNITS_DIRECTORY=$(out)/lib/systemd/system"
+    "SYSTEMD_USERS_DIRECTORY=$(out)/lib/sysusers.d"
+    "SYSTEMD_FILES_DIRECTORY=$(out)/lib/tmpfiles.d"
+    "UDEV_LIBRARY_DIRECTORY=$(out)/lib/udev"
+    "UDEV_RULES_TYPE=all"
+    "POLKIT_POLICY_DIR=$(out)/share/polkit-1/actions"
+    "POLKIT_RULE_DIR=$(out)/share/polkit-1/rules.d"
+  ];
+  configureFlags = [
+    "--with-writable-directory=/run/brltty"
+    "--with-updatable-directory=/var/lib/brltty"
+    "--with-api-socket-path=/var/lib/BrlAPI"
+  ];
+  installFlags = [ "install-systemd" "install-udev" "install-polkit" ];
 
   preConfigure = ''
     substituteInPlace configure --replace /sbin/ldconfig ldconfig
+
+    # Some script needs a working tclsh shebang
+    patchShebangs .
+
+    # Skip impure operations
+    substituteInPlace Programs/Makefile.in    \
+      --replace install-writable-directory "" \
+      --replace install-apisoc-directory ""   \
+      --replace install-api-key ""
+  '';
+
+  postInstall = ''
+    # Rewrite absolute paths
+    substituteInPlace $out/bin/brltty-mkuser \
+      --replace '/sbin/nologin' '${shadow}/bin/nologin'
+    (
+      cd $out/lib
+      substituteInPlace systemd/system/brltty@.service \
+        --replace '/usr/lib' "$out/lib" \
+        --replace '/sbin/modprobe' '${kmod}/bin/modprobe'
+      # Ensure the systemd-wrapper script uses the correct path to the brltty binary
+      sed "/^Environment=\"BRLTTY_EXECUTABLE_ARGUMENTS.*/a Environment=\"BRLTTY_EXECUTABLE_PATH=$out/bin/brltty\"" -i systemd/system/brltty@.service
+      substituteInPlace systemd/system/brltty-device@.service \
+        --replace '/usr/bin/true' '${coreutils}/bin/true'
+      substituteInPlace udev/rules.d/90-brltty-uinput.rules \
+        --replace '/usr/bin/setfacl' '${acl}/bin/setfacl'
+      substituteInPlace tmpfiles.d/brltty.conf \
+        --replace "$out/etc" '/etc'
+
+      # Remove unused commands from udev rules
+      sed '/initctl/d' -i udev/rules.d/90-brltty-device.rules
+      # Remove pulse-access group from systemd unit and sysusers
+      substituteInPlace systemd/system/brltty@.service \
+        --replace 'SupplementaryGroups=pulse-access' '# SupplementaryGroups=pulse-access'
+      substituteInPlace sysusers.d/brltty.conf \
+        --replace 'm brltty pulse-access' '# m brltty pulse-access'
+     )
+     substituteInPlace $out/libexec/brltty/systemd-wrapper \
+       --replace 'logger' "${util-linux}/bin/logger" \
+       --replace 'udevadm' "${udev}/bin/udevadm"
   '';
 }
diff --git a/pkgs/tools/misc/broadlink-cli/default.nix b/pkgs/tools/misc/broadlink-cli/default.nix
index c40ccad5e39..2acc8dabbef 100644
--- a/pkgs/tools/misc/broadlink-cli/default.nix
+++ b/pkgs/tools/misc/broadlink-cli/default.nix
@@ -1,37 +1,36 @@
-{ stdenv, python2Packages, fetchFromGitHub }:
+{ lib, python3Packages, fetchFromGitHub }:
 
-python2Packages.buildPythonApplication {
+python3Packages.buildPythonApplication rec {
   pname = "broadlink-cli";
-  inherit (python2Packages.broadlink) version;
+  version = "0.17.0";
 
   # 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";
+    rev    = version;
+    sha256 = "sha256-b3A36BdIvyl1RxNO5SyxLIpQmu1UHHekyh6vrFjwpp4=";
   };
 
   format = "other";
 
-  propagatedBuildInputs = with python2Packages; [
+  propagatedBuildInputs = with python3Packages; [
     broadlink
   ];
 
   installPhase = ''
     runHook preInstall
 
-    install -Dm755 -t $out/bin cli/broadlink_{cli,discovery}
-    install -Dm644 -t $out/share/doc/broadlink cli/README.md
+    install -Dm555 -t $out/bin cli/broadlink_{cli,discovery}
+    install -Dm444 -t $out/share/doc/broadlink cli/README.md
 
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    inherit (python3Packages.broadlink.meta) homepage license;
   };
 }
diff --git a/pkgs/tools/misc/broot/default.nix b/pkgs/tools/misc/broot/default.nix
index ccdb8bcd708..a5c456c0050 100644
--- a/pkgs/tools/misc/broot/default.nix
+++ b/pkgs/tools/misc/broot/default.nix
@@ -1,33 +1,43 @@
-{ stdenv
+{ lib
+, stdenv
 , rustPlatform
-, fetchFromGitHub
+, fetchCrate
 , installShellFiles
 , makeWrapper
-, coreutils
+, pkg-config
+, libgit2
+, oniguruma
 , libiconv
 , Security
+, zlib
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "broot";
-  version = "0.20.0";
+  version = "1.6.0";
 
-  src = fetchFromGitHub {
-    owner = "Canop";
-    repo = pname;
-    rev = "v${version}";
-    sha256 = "0by4cln9ljaphqk5hz56mcavz9kc5s42zlxx33nf3idqrszfcarf";
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-H/QT/fmQI9sHjl6wMJjrfjvbOhY9VyBkAGetvcUqGrE=";
   };
 
-  cargoSha256 = "1i5zq310k8gv9877rcrvash3aw1cyf3g0741qnky71d565s3n910";
+  cargoHash = "sha256-5mqLVbB/dLAk3Ck7ilHhVn0CB/6Ln82SaTxZ/vkx+9k=";
 
-  nativeBuildInputs = [ makeWrapper installShellFiles ];
+  nativeBuildInputs = [
+    installShellFiles
+    makeWrapper
+    pkg-config
+  ];
 
-  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ libiconv Security ];
+  buildInputs = [ libgit2 oniguruma ] ++ lib.optionals stdenv.isDarwin [
+    libiconv
+    Security
+    zlib
+  ];
 
-  postPatch = ''
-    substituteInPlace src/verb/builtin.rs --replace '"/bin/' '"${coreutils}/bin/'
+  RUSTONIG_SYSTEM_LIBONIG = true;
 
+  postPatch = ''
     # Fill the version stub in the man page. We can't fill the date
     # stub reproducibly.
     substitute man/page man/broot.1 \
@@ -62,10 +72,10 @@ rustPlatform.buildRustPackage rec {
     installManPage man/broot.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "An interactive tree view, a fuzzy search, a balanced BFS descent and customizable commands";
     homepage = "https://dystroy.org/broot/";
-    maintainers = with maintainers; [ danieldk ];
+    maintainers = with maintainers; [ ];
     license = with licenses; [ mit ];
   };
 }
diff --git a/pkgs/tools/misc/bsp-layout/default.nix b/pkgs/tools/misc/bsp-layout/default.nix
new file mode 100644
index 00000000000..065c21e3f78
--- /dev/null
+++ b/pkgs/tools/misc/bsp-layout/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, lib, bspwm, makeWrapper, git, bc }:
+
+stdenv.mkDerivation rec {
+  pname = "bsp-layout";
+  version = "unstable-2021-05-10";
+
+  src = fetchFromGitHub {
+    owner = "phenax";
+    repo = pname;
+    rev = "726b850b79eabdc6f4d236cff52e434848cb55e3";
+    sha256 = "1wqlzbz7l9vz37gin2zckrnxkkabnd7x5mi9pb0x96w4yhld5mx6";
+  };
+
+  nativeBuildInputs = [ makeWrapper git bc ];
+  buildInputs = [ bspwm ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    substituteInPlace $out/bin/bsp-layout --replace 'bc ' '${bc}/bin/bc '
+  '';
+
+  meta = with lib; {
+    description = "Manage layouts in bspwm";
+    homepage = "https://github.com/phenax/bsp-layout";
+    license = licenses.mit;
+    maintainers = with maintainers; [ devins2518 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/buildtorrent/default.nix b/pkgs/tools/misc/buildtorrent/default.nix
index 150371f82b6..ce357a1d491 100644
--- a/pkgs/tools/misc/buildtorrent/default.nix
+++ b/pkgs/tools/misc/buildtorrent/default.nix
@@ -1,20 +1,18 @@
-{ stdenv, fetchurl }:
-
-let version = "0.8"; in
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "buildtorrent";
-  inherit version;
+  version = "0.8";
 
   src = fetchurl {
     url = "https://mathr.co.uk/blog/code/${pname}-${version}.tar.gz";
-    sha256 = "e8e27647bdb38873ac570d46c1a9689a92b01bb67f59089d1cdd08784f7052d0";
+    sha256 = "sha256-6OJ2R72ziHOsVw1GwalompKwG7Z/WQidHN0IeE9wUtA=";
   };
 
-  meta = {
+  meta = with lib; {
     description = "A simple commandline torrent creator";
-    homepage = "http://mathr.co.uk/blog/torrent.html";
-    license = stdenv.lib.licenses.gpl3Plus;
-    platforms = stdenv.lib.platforms.all;
+    homepage = "https://mathr.co.uk/blog/torrent.html";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/bunnyfetch/default.nix b/pkgs/tools/misc/bunnyfetch/default.nix
new file mode 100644
index 00000000000..37a65d8c071
--- /dev/null
+++ b/pkgs/tools/misc/bunnyfetch/default.nix
@@ -0,0 +1,26 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "bunnyfetch";
+  version = "unstable-2021-06-19";
+
+  src = fetchFromGitHub {
+    owner = "Rosettea";
+    repo = "bunnyfetch";
+    rev = "24370338b936bae1ebdefea73e8372ac0b4d2858";
+    sha256 = "09wcffx6ak4djm2lrxq43n27p9qmczng4rf11qpwx3w4w67jvpz9";
+  };
+
+  vendorSha256 = "1vv69y0x06kn99lw995sbkb7vgd0yb18flkr2ml8ss7q2yvz37vi";
+
+  # No upstream tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tiny system info fetch utility";
+    homepage = "https://github.com/Rosettea/bunnyfetch";
+    license = licenses.mit;
+    maintainers = with maintainers; [ devins2518 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/byobu/default.nix b/pkgs/tools/misc/byobu/default.nix
index ad17c5edd6e..ffe3fd0fe16 100644
--- a/pkgs/tools/misc/byobu/default.nix
+++ b/pkgs/tools/misc/byobu/default.nix
@@ -1,5 +1,10 @@
-{ stdenv, fetchurl, python3, perl, textual-window-manager }:
+{ lib, stdenv, fetchurl, makeWrapper
+, ncurses, python3, perl, textual-window-manager
+, gettext, vim, bc, screen }:
 
+let
+  pythonEnv = python3.withPackages (ps: with ps; [ snack ]);
+in
 stdenv.mkDerivation rec {
   version = "5.133";
   name = "byobu-" + version;
@@ -11,26 +16,60 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  buildInputs = [ python3 perl ];
-  propagatedBuildInputs = [ textual-window-manager ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl gettext ];
+  propagatedBuildInputs = [ textual-window-manager screen ];
 
-  meta = {
+  postPatch = ''
+    substituteInPlace usr/bin/byobu-export.in \
+      --replace "gettext" "${gettext}/bin/gettext"
+    substituteInPlace usr/lib/byobu/menu \
+      --replace "gettext" "${gettext}/bin/gettext"
+  '';
+
+  postInstall = ''
+    # Byobu does not compile its po files for some reason
+    for po in po/*.po; do
+      lang=''${po#po/}
+      lang=''${lang%.po}
+      # Path where byobu looks for translations as observed in the source code and strace
+      mkdir -p $out/share/byobu/po/$lang/LC_MESSAGES/
+      msgfmt $po -o $out/share/byobu/po/$lang/LC_MESSAGES/byobu.mo
+    done
+
+    # Override the symlinks otherwise they mess with the wrapping
+    cp --remove-destination $out/bin/byobu $out/bin/byobu-screen
+    cp --remove-destination $out/bin/byobu $out/bin/byobu-tmux
+
+    for i in $out/bin/byobu*; do
+      # We don't use the usual ".$package-wrapped" because arg0 within the shebang scripts
+      # points to the filename and byobu matches against this to know which backend
+      # to start with
+      file=".$(basename $i)"
+      mv $i $out/bin/$file
+      makeWrapper "$out/bin/$file" "$out/bin/$(basename $i)" --argv0 $(basename $i) \
+        --set BYOBU_PATH ${lib.escapeShellArg (lib.makeBinPath [ vim bc ])} \
+        --set BYOBU_PYTHON "${pythonEnv}/bin/python"
+    done
+  '';
+
+  meta = with lib; {
     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, 
+      ''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;
+    license = licenses.gpl3;
 
-    platforms = stdenv.lib.platforms.unix;
-    maintainers = [ stdenv.lib.maintainers.qknight ];
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ qknight berbiche ];
   };
 }
diff --git a/pkgs/tools/misc/calamares/default.nix b/pkgs/tools/misc/calamares/default.nix
index 8f365d023d2..90abc765920 100644
--- a/pkgs/tools/misc/calamares/default.nix
+++ b/pkgs/tools/misc/calamares/default.nix
@@ -1,27 +1,26 @@
 { 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
+, qtquickcontrols, qtsvg, qttools, qtwebengine, util-linux, tzdata
 , ckbcomp, xkeyboard_config, mkDerivation
 }:
 
 mkDerivation rec {
   pname = "calamares";
-  version = "3.2.17.1";
+  version = "3.2.36";
 
   # release including submodule
   src = fetchurl {
     url = "https://github.com/${pname}/${pname}/releases/download/v${version}/${pname}-${version}.tar.gz";
-    sha256 = "156zpjyw8w4y23aa60mvg3d3mr0kzfq5jkl7ixgahq33zpc17ms8";
+    sha256 = "sha256-pgA0mRglIBObNNUQIozNy6EvJQSmHRF+kN4EjqL4tt4=";
   };
 
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
   buildInputs = [
-    boost cmake extra-cmake-modules kparts.dev kpmcore.out kservice.dev
+    boost kparts.dev kpmcore.out kservice.dev
     libatasmart libxcb libyamlcpp parted polkit-qt python qtbase
-    qtquickcontrols qtsvg qttools qtwebengine.dev utillinux
+    qtquickcontrols qtsvg qttools qtwebengine.dev util-linux
   ];
 
-  enableParallelBuilding = false;
-
   cmakeFlags = [
     "-DPYTHON_LIBRARY=${python}/lib/lib${python.libPrefix}.so"
     "-DPYTHON_INCLUDE_DIR=${python}/include/${python.libPrefix}"
@@ -32,18 +31,14 @@ mkDerivation rec {
 
   POLKITQT-1_POLICY_FILES_INSTALL_DIR = "$(out)/share/polkit-1/actions";
 
-  patchPhase = ''
+  postPatch = ''
     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
 
@@ -56,8 +51,8 @@ mkDerivation rec {
 
   meta = with lib; {
     description = "Distribution-independent installer framework";
-    license = licenses.gpl3;
-    maintainers = with lib.maintainers; [ manveru ];
+    license = with licenses; [ gpl3Plus bsd2 ];
+    maintainers = with maintainers; [ manveru ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/capture/default.nix b/pkgs/tools/misc/capture/default.nix
index e92898ccc4d..d8b2fe67651 100644
--- a/pkgs/tools/misc/capture/default.nix
+++ b/pkgs/tools/misc/capture/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, slop, ffmpeg_3, fetchFromGitHub, makeWrapper}:
+{ lib, stdenv, slop, ffmpeg, fetchFromGitHub, makeWrapper}:
 
 stdenv.mkDerivation {
   pname = "capture-unstable";
@@ -11,17 +11,17 @@ stdenv.mkDerivation {
     sha256 = "0zyyg4mvrny7cc2xgvfip97b6yc75ka5ni39rwls93971jbk83d6";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ 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_3 ]}'
+      --prefix PATH : '${lib.makeBinPath [ slop ffmpeg ]}'
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A no bullshit screen capture tool";
     homepage = "https://github.com/buhman/capture";
     maintainers = [ maintainers.ar1a ];
diff --git a/pkgs/tools/misc/castty/default.nix b/pkgs/tools/misc/castty/default.nix
new file mode 100644
index 00000000000..075c6d739b3
--- /dev/null
+++ b/pkgs/tools/misc/castty/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchFromGitHub, libsoundio, lame }:
+
+stdenv.mkDerivation {
+  pname = "castty";
+  version = "unstable-2020-11-10";
+
+  src = fetchFromGitHub {
+    owner = "dhobsd";
+    repo = "castty";
+    rev = "333a2bafd96d56cd0bb91577ae5ba0f7d81b3d99";
+    sha256 = "0p84ivwsp8ds4drn0hx2ax04gp0xyq6blj1iqfsmrs4slrajdmqs";
+  };
+
+  buildInputs = [ libsoundio lame ];
+
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "PREFIX=$(out)"
+  ];
+
+  meta = with lib; {
+    description = "CLI tool to record audio-enabled screencasts of your terminal, for the web";
+    homepage = "https://github.com/dhobsd/castty";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ iblech ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/catimg/default.nix b/pkgs/tools/misc/catimg/default.nix
index ac2f3f3411a..3f94a559e61 100644
--- a/pkgs/tools/misc/catimg/default.nix
+++ b/pkgs/tools/misc/catimg/default.nix
@@ -1,16 +1,16 @@
-{ stdenv, fetchFromGitHub, cmake } :
+{ lib, stdenv, fetchFromGitHub, cmake } :
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   pname = "catimg";
-  version = "2.6.0";
+  version = "2.7.0";
 
   src = fetchFromGitHub {
     owner = "posva";
     repo = pname;
     rev = version;
-    sha256 = "0g9ywbgy162wiam9hc3yqpq5q4gyxa8fj4jskr3fdz8z8jjaabzz";
+    sha256 = "0a2dswbv4xddb2l2d55hc43lzvjwrjs5z9am7v6i0p0mi2fmc89s";
   };
 
   nativeBuildInputs = [ cmake ];
diff --git a/pkgs/tools/misc/ccze/default.nix b/pkgs/tools/misc/ccze/default.nix
index 409297de9f7..af37d7a33c1 100644
--- a/pkgs/tools/misc/ccze/default.nix
+++ b/pkgs/tools/misc/ccze/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, autoconf, ncurses, pcre }:
+{ lib, stdenv, fetchurl, autoconf, ncurses, pcre }:
 
 stdenv.mkDerivation rec {
   name = "ccze-0.2.1-2";
@@ -10,9 +10,9 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ autoconf ncurses pcre ];
 
-  preConfigure = '' autoheader && autoconf '';
+  preConfigure = "autoheader && autoconf ";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Fast, modular log colorizer";
     longDescription = ''
       Fast log colorizer written in C, intended to be a drop-in replacement
diff --git a/pkgs/tools/misc/chafa/default.nix b/pkgs/tools/misc/chafa/default.nix
index 9afdd93ad0a..041d799307e 100644
--- a/pkgs/tools/misc/chafa/default.nix
+++ b/pkgs/tools/misc/chafa/default.nix
@@ -1,21 +1,23 @@
-{ stdenv, fetchFromGitHub, autoconf, automake, libtool, pkgconfig, which, libxslt, libxml2, docbook_xml_dtd_412, docbook_xsl, glib, imagemagick, darwin }:
-
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, pkg-config, which
+, libxslt, libxml2, docbook_xml_dtd_412, docbook_xsl, glib, imagemagick
+, Foundation
+}:
 
 stdenv.mkDerivation rec {
-  version = "1.4.1";
+  version = "1.6.1";
   pname = "chafa";
 
   src = fetchFromGitHub {
     owner = "hpjansson";
     repo = "chafa";
     rev = version;
-    sha256 = "13vv2xmfh0dr949bh75448lidvzwxks6f1mjawdg1q8qwzxhzry4";
+    sha256 = "sha256-isQxeb7OQh4W8RvtKWXbKVYJ8LlfLiOkMJoPjsGFouM=";
   };
 
   nativeBuildInputs = [ autoconf
                         automake
                         libtool
-                        pkgconfig
+                        pkg-config
                         which
                         libxslt
                         libxml2
@@ -23,7 +25,8 @@ stdenv.mkDerivation rec {
                         docbook_xsl
                       ];
 
-  buildInputs = [ glib imagemagick ] ++ stdenv.lib.optional stdenv.isDarwin [ darwin.apple_sdk.frameworks.ApplicationServices ];
+  buildInputs = [ glib imagemagick ]
+    ++ lib.optional stdenv.isDarwin Foundation;
 
   patches = [ ./xmlcatalog_patch.patch ];
 
@@ -35,8 +38,8 @@ stdenv.mkDerivation rec {
                      "--with-xml-catalog=${docbook_xml_dtd_412}/xml/dtd/docbook/catalog.xml"
                    ];
 
-  meta = with stdenv.lib; {
-    description = "Terminal graphics for the 21st century.";
+  meta = with lib; {
+    description = "Terminal graphics for the 21st century";
     homepage = "https://hpjansson.org/chafa/";
     license = licenses.lgpl3Plus;
     platforms = platforms.all;
diff --git a/pkgs/tools/misc/chelf/default.nix b/pkgs/tools/misc/chelf/default.nix
index 96949dd5da5..25344d8658e 100644
--- a/pkgs/tools/misc/chelf/default.nix
+++ b/pkgs/tools/misc/chelf/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "chelf";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
     mv chelf $out/bin/chelf
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "change or display the stack size of an ELF binary";
     homepage = "https://github.com/Gottox/chelf";
     license = licenses.bsd2;
diff --git a/pkgs/tools/misc/chezmoi/default.nix b/pkgs/tools/misc/chezmoi/default.nix
index d7b7646afec..fd289f9cfb8 100644
--- a/pkgs/tools/misc/chezmoi/default.nix
+++ b/pkgs/tools/misc/chezmoi/default.nix
@@ -1,17 +1,17 @@
-{ stdenv, buildGoModule, fetchFromGitHub, installShellFiles }:
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
 
 buildGoModule rec {
   pname = "chezmoi";
-  version = "1.8.5";
+  version = "2.1.2";
 
   src = fetchFromGitHub {
     owner = "twpayne";
     repo = "chezmoi";
     rev = "v${version}";
-    sha256 = "16sv1kbd66rllnnl851y3x54wkl0p7g0qsblprvfr9715svk1835";
+    sha256 = "sha256-EStR/tmbu95tptB7h3rHxoro87jlhu3i0XwRQNbIBvA=";
   };
 
-  vendorSha256 = "1i9d672mzmb97s26n0v01m70g4viyl9pdk25haxr6ny4rab2wbi7";
+  vendorSha256 = "sha256-Geeo/tqF+VJamIzgU1qz0iEjTKE8jwFQLGXPBuN9eN8=";
 
   doCheck = false;
 
@@ -29,7 +29,7 @@ buildGoModule rec {
 
   subPackages = [ "." ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.chezmoi.io/";
     description = "Manage your dotfiles across multiple machines, securely";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/chrome-export/default.nix b/pkgs/tools/misc/chrome-export/default.nix
index 8639f6f6f79..d3f4878ee69 100644
--- a/pkgs/tools/misc/chrome-export/default.nix
+++ b/pkgs/tools/misc/chrome-export/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub
+{ lib, stdenv, fetchFromGitHub
 , python3
 }:
 
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
     bash test/run_tests $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/misc/cht.sh/default.nix b/pkgs/tools/misc/cht.sh/default.nix
index 084d51d2a3a..998fcf36652 100644
--- a/pkgs/tools/misc/cht.sh/default.nix
+++ b/pkgs/tools/misc/cht.sh/default.nix
@@ -1,5 +1,6 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
+, unstableGitUpdater
 , makeWrapper
 , curl
 , ncurses
@@ -9,15 +10,15 @@
 
 stdenv.mkDerivation {
   pname = "cht.sh";
-  version = "unstable-2019-08-06";
+  version = "unstable-2021-04-25";
 
   nativeBuildInputs = [ makeWrapper ];
 
   src = fetchFromGitHub {
     owner = "chubin";
     repo = "cheat.sh";
-    rev = "f507ba51d6bc1ae6c7df808cadbe4f8603951b6b";
-    sha256 = "0r7x9a3qzzkbd1m5zdlkpmhx0p7b7ja42190s7fidls3dsm710g0";
+    rev = "6d83c4d76c82a87cf6df436a5ab73e3b7c819e66";
+    sha256 = "dXLNPhkfbQIhFZixC674Fcegyo8+Um7E6cm56vMpCYI=";
   };
 
   # Fix ".cht.sh-wrapped" in the help message
@@ -32,14 +33,17 @@ stdenv.mkDerivation {
     cp share/zsh.txt $out/share/zsh/site-functions/_cht
 
     wrapProgram "$out/bin/cht.sh" \
-      --prefix PATH : "${stdenv.lib.makeBinPath [ curl rlwrap ncurses xsel ]}"
+      --prefix PATH : "${lib.makeBinPath [ curl rlwrap ncurses xsel ]}"
   '';
 
-  meta = with stdenv.lib; {
+  passthru.updateScript = unstableGitUpdater {
+    url = "https://github.com/chubin/cheat.sh.git";
+  };
+
+  meta = with 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/pkgs/tools/misc/cicero-tui/default.nix b/pkgs/tools/misc/cicero-tui/default.nix
new file mode 100644
index 00000000000..72721020e12
--- /dev/null
+++ b/pkgs/tools/misc/cicero-tui/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, cmake
+, pkg-config
+, expat
+, fontconfig
+, freetype
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cicero-tui";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "eyeplum";
+    repo = "cicero-tui";
+    rev = "v${version}";
+    sha256 = "sha256-FwjD+BdRc8y/g5MQLmBB/qkUj33cywbH2wjTp0y0s8A=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+  buildInputs = [
+    expat
+    fontconfig
+    freetype
+  ];
+
+  cargoSha256 = "sha256-JygEE7K8swbFvJ2aDXs+INhfoLuhy+LY7T8AUr4lgJY=";
+
+  meta = with lib; {
+    description = "Unicode tool with a terminal user interface";
+    homepage = "https://github.com/eyeplum/cicero-tui";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ shamilton ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/ckb-next/default.nix b/pkgs/tools/misc/ckb-next/default.nix
index 8189a07c214..81e51bbbf20 100644
--- a/pkgs/tools/misc/ckb-next/default.nix
+++ b/pkgs/tools/misc/ckb-next/default.nix
@@ -1,25 +1,29 @@
-{ stdenv, mkDerivation, fetchFromGitHub, substituteAll, udev
-, pkgconfig, qtbase, cmake, zlib, kmod }:
+{ lib, mkDerivation, fetchFromGitHub, substituteAll, udev
+, pkg-config, qtbase, cmake, zlib, kmod, libXdmcp, qttools, qtx11extras, libdbusmenu }:
 
 mkDerivation rec {
-  version = "0.4.2";
+  version = "0.4.4";
   pname = "ckb-next";
 
   src = fetchFromGitHub {
     owner = "ckb-next";
     repo = "ckb-next";
     rev = "v${version}";
-    sha256 = "1mkx1psw5xnpscdfik1kpzsnfhhkn3571i7acr9gxyjr27sckplc";
+    sha256 = "1fgvh2hsrm8vqbqq9g45skhyyrhhka4d8ngmyldkldak1fgmrvb7";
   };
 
   buildInputs = [
     udev
     qtbase
     zlib
+    libXdmcp
+    qttools
+    qtx11extras
+    libdbusmenu
   ];
 
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     cmake
   ];
 
@@ -39,7 +43,7 @@ mkDerivation rec {
     })
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Driver and configuration tool for Corsair keyboards and mice";
     homepage = "https://github.com/ckb-next/ckb-next";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/ckb-next/install-dirs.patch b/pkgs/tools/misc/ckb-next/install-dirs.patch
index 0f113d71aa3..05a661c7ffc 100644
--- a/pkgs/tools/misc/ckb-next/install-dirs.patch
+++ b/pkgs/tools/misc/ckb-next/install-dirs.patch
@@ -1,12 +1,12 @@
 diff --git a/src/daemon/CMakeLists.txt b/src/daemon/CMakeLists.txt
-index 2fc10a8..22dbd14 100644
+index a04b80c..2969b3b 100644
 --- a/src/daemon/CMakeLists.txt
 +++ b/src/daemon/CMakeLists.txt
-@@ -421,7 +421,7 @@ if ("${CKB_NEXT_INIT_SYSTEM}" STREQUAL "launchd")
+@@ -437,7 +437,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 "${SYSTEMD_UNIT_INSTALL_DIR}"
 +        DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/systemd/system"
          PERMISSIONS
          OWNER_READ OWNER_WRITE
diff --git a/pkgs/tools/misc/ckb-next/modprobe.patch b/pkgs/tools/misc/ckb-next/modprobe.patch
index a2cbe262e89..257683e11f6 100644
--- a/pkgs/tools/misc/ckb-next/modprobe.patch
+++ b/pkgs/tools/misc/ckb-next/modprobe.patch
@@ -1,21 +1,21 @@
 diff --git a/src/daemon/input_linux.c b/src/daemon/input_linux.c
-index 8489f5b..b851419 100644
+index 933e628..c4f97f2 100644
 --- a/src/daemon/input_linux.c
 +++ b/src/daemon/input_linux.c
-@@ -63,7 +63,7 @@ int os_inputopen(usbdevice* kb){
+@@ -70,7 +70,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");
+             ckb_fatal("Failed to load uinput module");
              return 1;
          }
 diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp
-index 1eb95bd..f7d38ba 100644
+index eeadaf8..87de71f 100644
 --- a/src/gui/mainwindow.cpp
 +++ b/src/gui/mainwindow.cpp
-@@ -284,7 +284,7 @@ void MainWindow::updateVersion(){
+@@ -309,7 +309,7 @@ void MainWindow::updateVersion(){
  #elif defined(Q_OS_LINUX)
              if(!(QFileInfo("/dev/uinput").exists() || QFileInfo("/dev/input/uinput").exists())){
                  QProcess modprobe;
diff --git a/pkgs/tools/misc/clac/default.nix b/pkgs/tools/misc/clac/default.nix
index 8aea37ebddf..acf9b6b867d 100644
--- a/pkgs/tools/misc/clac/default.nix
+++ b/pkgs/tools/misc/clac/default.nix
@@ -1,13 +1,14 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
+
 stdenv.mkDerivation rec {
   pname = "clac";
-  version = "0.0.0.20170503";
+  version = "0.3.3";
 
   src = fetchFromGitHub {
     owner = "soveran";
     repo = "clac";
-    rev = "e92bd5cbab0d694cef945e3478820c9505e06f04";
-    sha256 = "0j8p1npgq32s377c9lw959h5i2csq4yb27cvg7av17bji46816bv";
+    rev = version;
+    sha256 = "rsag8MWl/udwXC0Gj864fAuQ6ts1gzrN2N/zelazqjE=";
   };
 
   makeFlags = [ "PREFIX=$(out)" ];
@@ -17,12 +18,11 @@ stdenv.mkDerivation rec {
     cp README* LICENSE "$out/share/doc/${pname}"
   '';
 
-  meta = {
-    inherit version;
+  meta = with lib; {
     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";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/clasp/default.nix b/pkgs/tools/misc/clasp/default.nix
index 2748c0126cd..401a2006c6f 100644
--- a/pkgs/tools/misc/clasp/default.nix
+++ b/pkgs/tools/misc/clasp/default.nix
@@ -1,12 +1,8 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
-let
-  version = "3.1.4";
-in
-
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "clasp";
-  inherit version;
+  version = "3.1.4";
 
   src = fetchurl {
     url = "mirror://sourceforge/project/potassco/clasp/${version}/clasp-${version}-source.tar.gz";
@@ -23,7 +19,7 @@ stdenv.mkDerivation {
     cp bin/clasp $out/bin/clasp
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Answer set solver for (extended) normal and disjunctive logic programs";
     homepage = "http://potassco.sourceforge.net/";
     platforms = platforms.all;
diff --git a/pkgs/tools/misc/claws/default.nix b/pkgs/tools/misc/claws/default.nix
index 10347e6e794..c28272e8bfa 100644
--- a/pkgs/tools/misc/claws/default.nix
+++ b/pkgs/tools/misc/claws/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "claws";
@@ -13,7 +13,7 @@ buildGoPackage rec {
     sha256 = "0nl7xvdivnabqr98mh3m1pwqznprsaqpagny6zcwwmz480x4pmfz";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/thehowl/claws";
     description = "Interactive command line client for testing websocket servers";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/clex/default.nix b/pkgs/tools/misc/clex/default.nix
index 7a6a78af59a..a2ac0df9801 100644
--- a/pkgs/tools/misc/clex/default.nix
+++ b/pkgs/tools/misc/clex/default.nix
@@ -1,11 +1,11 @@
-{ stdenv, fetchurl, ncurses }:
+{ lib, stdenv, fetchurl, ncurses }:
 
 stdenv.mkDerivation rec {
   pname = "clex";
-  version = "4.6.patch9";
+  version = "4.6.patch10";
 
   src = fetchurl {
-    sha256 = "1qj5yp8k90wag5sb3zrm2pn90qqx3zbrgf2gqpqpdqmlgffnv1jc";
+    sha256 = "03niihqk57px7rm2c84qira5jm5vw8lj5s58dximk0w5gsis4fhw";
     url = "${meta.homepage}/download/${pname}-${version}.tar.gz";
   };
 
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "File manager with full-screen terminal interface";
     longDescription = ''
       CLEX (pronounced KLEKS) displays directory contents including the file
diff --git a/pkgs/tools/misc/clickclack/default.nix b/pkgs/tools/misc/clickclack/default.nix
new file mode 100644
index 00000000000..75518e554ca
--- /dev/null
+++ b/pkgs/tools/misc/clickclack/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, SDL2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "clickclack";
+  version = "0.1.1";
+
+  src = fetchFromSourcehut {
+    owner = "~proycon";
+    repo = "clickclack";
+    rev = version;
+    sha256 = "1q8r0ng1bld5n82gh7my7ck90f4plf8vf019hm2wz475dl38izd5";
+  };
+
+  buildInputs = [
+    SDL2
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "A vibration/audio feedback tool to be used with virtual keyboards";
+    homepage = "https://git.sr.ht/~proycon/clickclack";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/tools/misc/clipbuzz/default.nix b/pkgs/tools/misc/clipbuzz/default.nix
new file mode 100644
index 00000000000..aaa37ad7c18
--- /dev/null
+++ b/pkgs/tools/misc/clipbuzz/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchFromSourcehut, zig, libX11, libXfixes }:
+
+stdenv.mkDerivation rec {
+  pname = "clipbuzz";
+  version = "2.0.0";
+
+  src = fetchFromSourcehut {
+    owner = "~cnx";
+    repo = pname;
+    rev = version;
+    sha256 = "1qn98bwp7v7blw4v0g4pckgxrky5ggvq9m0kck2kqw8jg9jc15jp";
+  };
+
+  nativeBuildInputs = [ zig ];
+  buildInputs = [ libX11 libXfixes ];
+
+  preBuild = ''
+    export HOME=$TMPDIR
+  '';
+
+  installPhase = ''
+    zig build -Drelease-safe -Dcpu=baseline --prefix $out install
+  '';
+
+  meta = with lib; {
+    description = "Buzz on new X11 clipboard events";
+    homepage = "https://git.sr.ht/~cnx/clipbuzz";
+    license = licenses.unlicense;
+    maintainers = [ maintainers.McSinyx ];
+  };
+}
diff --git a/pkgs/tools/misc/clipnotify/default.nix b/pkgs/tools/misc/clipnotify/default.nix
index 91c428def28..5cb3a5114d8 100644
--- a/pkgs/tools/misc/clipnotify/default.nix
+++ b/pkgs/tools/misc/clipnotify/default.nix
@@ -1,4 +1,4 @@
-{ libX11, libXfixes, stdenv, fetchFromGitHub }:
+{ libX11, libXfixes, lib, stdenv, fetchFromGitHub }:
 stdenv.mkDerivation rec {
   pname = "clipnotify";
   version = "git-2018-02-20";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
     cp clipnotify $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Notify on new X clipboard events";
     inherit (src.meta) homepage;
     maintainers = with maintainers; [ jb55 ];
diff --git a/pkgs/tools/misc/clipster/default.nix b/pkgs/tools/misc/clipster/default.nix
index bb14830bf06..4e278b8cc62 100644
--- a/pkgs/tools/misc/clipster/default.nix
+++ b/pkgs/tools/misc/clipster/default.nix
@@ -1,4 +1,4 @@
-{fetchFromGitHub , stdenv, python3, gtk3, libwnck3,
+{fetchFromGitHub , lib, stdenv, python3, gtk3, libwnck,
  gobject-introspection, wrapGAppsHook }:
 
 stdenv.mkDerivation  rec {
@@ -14,7 +14,7 @@ stdenv.mkDerivation  rec {
 
   pythonEnv = python3.withPackages(ps: with ps; [ pygobject3 ]);
 
-  buildInputs =  [ pythonEnv gtk3 libwnck3 gobject-introspection wrapGAppsHook ];
+  buildInputs =  [ pythonEnv gtk3 libwnck gobject-introspection wrapGAppsHook ];
 
   installPhase = ''
     sed -i 's/python/python3/g' clipster
@@ -22,7 +22,7 @@ stdenv.mkDerivation  rec {
     cp clipster $out/bin/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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.
diff --git a/pkgs/tools/misc/cloc/default.nix b/pkgs/tools/misc/cloc/default.nix
index e35d5283256..939c9f744f4 100644
--- a/pkgs/tools/misc/cloc/default.nix
+++ b/pkgs/tools/misc/cloc/default.nix
@@ -1,23 +1,22 @@
-{ stdenv, fetchFromGitHub, makeWrapper, perlPackages }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper, perlPackages }:
 
 stdenv.mkDerivation rec {
   pname = "cloc";
-  version = "1.86";
+  version = "1.90";
 
   src = fetchFromGitHub {
     owner = "AlDanial";
     repo = "cloc";
-    rev = version;
-    sha256 = "082gj2b3x11bilz8c572dd60vn6n0fhld5zhi7wk7g1wy9wlgm9w";
+    rev = "v${version}";
+    sha256 = "0ic9q6qqw5f1wafp9lpmhr0miasbdb9zr59c0jlymnzffdmnliyc";
   };
 
   setSourceRoot = ''
     sourceRoot=$(echo */Unix)
   '';
 
-  buildInputs = [ makeWrapper ] ++ (with perlPackages; [
-    perl AlgorithmDiff ParallelForkManager RegexpCommon
-  ]);
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = (with perlPackages; [ perl AlgorithmDiff ParallelForkManager RegexpCommon ]);
 
   makeFlags = [ "prefix=" "DESTDIR=$(out)" "INSTALL=install" ];
 
@@ -26,8 +25,8 @@ stdenv.mkDerivation rec {
   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 ];
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.all;
+    maintainers = with lib.maintainers; [ rycee ];
   };
 }
diff --git a/pkgs/tools/misc/cloud-sql-proxy/default.nix b/pkgs/tools/misc/cloud-sql-proxy/default.nix
index 16263e2b6c3..552ea140d60 100644
--- a/pkgs/tools/misc/cloud-sql-proxy/default.nix
+++ b/pkgs/tools/misc/cloud-sql-proxy/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchgit }:
+{ lib, buildGoPackage, fetchgit }:
 
 buildGoPackage rec {
   pname = "cloud-sql-proxy";
@@ -18,7 +18,7 @@ buildGoPackage rec {
 
   buildFlagsArray = [ "-ldflags=" "-X main.versionString=${version}" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "An authenticating proxy for Second Generation Google Cloud SQL databases";
     homepage = "https://${goPackagePath}";
     license = licenses.asl20;
diff --git a/pkgs/tools/misc/cloud-utils/default.nix b/pkgs/tools/misc/cloud-utils/default.nix
index d5c5b0ee783..32ef248ca85 100644
--- a/pkgs/tools/misc/cloud-utils/default.nix
+++ b/pkgs/tools/misc/cloud-utils/default.nix
@@ -1,36 +1,54 @@
-{ stdenv, fetchurl, makeWrapper
-, gawk, gnused, utillinux, file
-, wget, python3, qemu-utils, euca2ools
-, e2fsprogs, cdrkit }:
+{ lib, stdenv, fetchurl, makeWrapper
+, gawk, gnused, util-linux, file
+, wget, python3, qemu-utils
+, e2fsprogs, cdrkit
+, gptfdisk }:
 
-stdenv.mkDerivation rec {
+let
+  # according to https://packages.debian.org/sid/cloud-image-utils + https://packages.debian.org/sid/admin/cloud-guest-utils
+  guestDeps = [
+    e2fsprogs gptfdisk gawk gnused util-linux
+  ];
+  binDeps = guestDeps ++ [
+    wget file qemu-utils cdrkit
+  ];
+in 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.31";
+  version = "0.32";
   src = fetchurl {
     url = "https://launchpad.net/cloud-utils/trunk/${version}/+download/cloud-utils-${version}.tar.gz";
-    sha256 = "07fl3dlqwdzw4xx7mcxhpkks6dnmaxha80zgs9f6wmibgzni8z0r";
+    sha256 = "0xxdi55lzw7j91zfajw7jhd2ilsqj2dy04i9brlk8j3pvb5ma8hk";
   };
   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
-  ];
+  # $guest output contains all executables needed for cloud-init and $out the rest + $guest
+  # This is similar to debian's package split into cloud-image-utils and cloud-guest-utils
+  # The reason is to reduce the closure size
+  outputs = [ "out" "guest"];
 
   postFixup = ''
+    moveToOutput bin/ec2metadata $guest
+    moveToOutput bin/growpart $guest
+    moveToOutput bin/vcs-run $guest
+
     for i in $out/bin/*; do
-      wrapProgram $i --prefix PATH : "${stdenv.lib.makeBinPath binDeps}:$out/bin"
+      wrapProgram $i --prefix PATH : "${lib.makeBinPath binDeps}:$out/bin"
+    done
+
+    for i in $guest/bin/*; do
+      wrapProgram $i --prefix PATH : "${lib.makeBinPath guestDeps}:$guest/bin"
+      ln -s $i $out/bin
     done
   '';
 
   dontBuild = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     platforms = platforms.unix;
     license = licenses.gpl3;
   };
diff --git a/pkgs/tools/misc/clpeak/clpeak-clhpp2.diff b/pkgs/tools/misc/clpeak/clpeak-clhpp2.diff
new file mode 100644
index 00000000000..aed9112682b
--- /dev/null
+++ b/pkgs/tools/misc/clpeak/clpeak-clhpp2.diff
@@ -0,0 +1,72 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 86fec9e..b9d0341 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -22,7 +22,7 @@ elseif(WIN32 AND ${OpenCL_LIBRARIES} MATCHES "OpenCL.lib")
+   set(OpenCL_LIBRARIES ${OpenCL_LIBRARIES} cfgmgr32.lib)
+ endif()
+ 
+-FIND_PATH(HPP_FOUND CL/cl.hpp PATHS ${OpenCL_INCLUDE_DIRS})
++FIND_PATH(HPP_FOUND CL/cl2.hpp PATHS ${OpenCL_INCLUDE_DIRS})
+ if(NOT HPP_FOUND)
+   list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+   include(BuildCLHpp)
+diff --git a/include/clpeak.h b/include/clpeak.h
+index c090d31..0d9d5e2 100644
+--- a/include/clpeak.h
++++ b/include/clpeak.h
+@@ -1,14 +1,10 @@
+ #ifndef CLPEAK_HPP
+ #define CLPEAK_HPP
+ 
+-#define __CL_ENABLE_EXCEPTIONS
+-
+-#include <CL/cl.hpp>
+-
+ #include <iostream>
+ #include <stdio.h>
+ #include <iomanip>
+-#include <string.h>
++#include <string>
+ #include <sstream>
+ #include <common.h>
+ #include <logger.h>
+diff --git a/include/common.h b/include/common.h
+index 91318cb..6aaca04 100644
+--- a/include/common.h
++++ b/include/common.h
+@@ -1,7 +1,11 @@
+ #ifndef COMMON_H
+ #define COMMON_H
+ 
+-#include <CL/cl.hpp>
++#define CL_HPP_ENABLE_EXCEPTIONS
++#define CL_HPP_MINIMUM_OPENCL_VERSION 120
++#define CL_HPP_TARGET_OPENCL_VERSION 120
++#include <CL/cl2.hpp>
++
+ #if defined(__APPLE__) || defined(__MACOSX) || defined(__FreeBSD__)
+ #include <sys/types.h>
+ #endif
+diff --git a/src/clpeak.cpp b/src/clpeak.cpp
+index 8708463..4a47842 100644
+--- a/src/clpeak.cpp
++++ b/src/clpeak.cpp
+@@ -3,7 +3,7 @@
+ 
+ #define MSTRINGIFY(...) #__VA_ARGS__
+ 
+-static const char *stringifiedKernels =
++static const std::string stringifiedKernels =
+ #include "global_bandwidth_kernels.cl"
+ #include "compute_sp_kernels.cl"
+ #include "compute_hp_kernels.cl"
+@@ -65,7 +65,7 @@ int clPeak::runAll()
+ 
+       cl::Context ctx(CL_DEVICE_TYPE_ALL, cps);
+       vector<cl::Device> devices = ctx.getInfo<CL_CONTEXT_DEVICES>();
+-      cl::Program::Sources source(1, make_pair(stringifiedKernels, (strlen(stringifiedKernels) + 1)));
++      cl::Program::Sources source(1, stringifiedKernels);
+       cl::Program prog = cl::Program(ctx, source);
+ 
+       for (size_t d = 0; d < devices.size(); d++)
diff --git a/pkgs/tools/misc/clpeak/default.nix b/pkgs/tools/misc/clpeak/default.nix
index 46284f9a4da..e8b2ab68f31 100644
--- a/pkgs/tools/misc/clpeak/default.nix
+++ b/pkgs/tools/misc/clpeak/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, ocl-icd, opencl-clhpp }:
+{ lib, stdenv, fetchFromGitHub, cmake, ocl-icd, opencl-clhpp }:
 
 stdenv.mkDerivation rec {
   pname = "clpeak";
@@ -12,11 +12,19 @@ stdenv.mkDerivation rec {
     sha256 = "1wkjpvn4r89c3y06rv7gfpwpqw6ljmqwz0w0mljl9y5hn1r4pkx2";
   };
 
+  patches = [
+    # The cl.hpp header was removed from opencl-clhpp. This patch
+    # updates clpeak to use the new cp2.hpp header. The patch comes
+    # from the following PR and was updated to apply against more
+    # recent versions: https://github.com/krrishnarraj/clpeak/pull/46
+    ./clpeak-clhpp2.diff
+  ];
+
   nativeBuildInputs = [ cmake ];
 
   buildInputs = [ ocl-icd opencl-clhpp ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tool which profiles OpenCL devices to find their peak capacities";
     homepage = "https://github.com/krrishnarraj/clpeak/";
     license = licenses.unlicense;
diff --git a/pkgs/tools/misc/cod/default.nix b/pkgs/tools/misc/cod/default.nix
new file mode 100644
index 00000000000..741487c6687
--- /dev/null
+++ b/pkgs/tools/misc/cod/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "cod";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "dim-an";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0wi680sxpv0kp1ggy21qp4c4ms79hw4z9w9kvp278p8z3y8wwglr";
+  };
+
+  vendorSha256 = "0ann1fbh8rqys3rwbz5h9mfnvkpqiw5rgkd4c30y99706h2dzv4i";
+
+  ldflags = [ "-s" "-w" "-X main.GitSha=${src.rev}" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool for generating Bash/Fish/Zsh autocompletions based on `--help` output";
+    homepage = "https://github.com/dim-an/cod/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/pkgs/tools/misc/code-minimap/default.nix b/pkgs/tools/misc/code-minimap/default.nix
new file mode 100644
index 00000000000..cc2d979ca75
--- /dev/null
+++ b/pkgs/tools/misc/code-minimap/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "code-minimap";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "wfxr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-eCHmMtndcQJqKmjxhkcLvjMUXApkSnH+7qyG7PDfcwo=";
+  };
+
+  cargoSha256 = "sha256-wKCANWznOJMlQ8T2q39NNNRmgPYMpbkJhXpxojusNsE=";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  meta = with lib; {
+    description = "A high performance code minimap render";
+    homepage = "https://github.com/wfxr/code-minimap";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ bsima ];
+  };
+}
diff --git a/pkgs/tools/misc/codebraid/default.nix b/pkgs/tools/misc/codebraid/default.nix
index eea5260a989..0ecde80c238 100644
--- a/pkgs/tools/misc/codebraid/default.nix
+++ b/pkgs/tools/misc/codebraid/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, python3Packages, fetchFromGitHub }:
+{ lib, python3Packages, fetchFromGitHub }:
 
 python3Packages.buildPythonApplication rec {
   pname = "codebraid";
-  version = "0.5.0-unstable-2020-07-01";
+  version = "0.5.0-unstable-2020-08-14";
 
   src = fetchFromGitHub {
     owner = "gpoore";
     repo = pname;
-    rev = "c7962587e7f1e619b5dcf9a5e901eb7042520b00";
-    sha256 = "1f31yaiwc33ivjbipym7sggsqwqxn70kgf9dixi8392pk70jzq6p";
+    rev = "526a223c4fc32c37d6c5c9133524dfa0e1811ca4";
+    sha256 = "0qkqaj49k584qzgx9jlsf5vlv4lq7x403s1kig8v87i0kgh55p56";
   };
 
   propagatedBuildInputs = with python3Packages; [ bespon ];
@@ -16,7 +16,7 @@ python3Packages.buildPythonApplication rec {
   checkPhase = ''
     $out/bin/codebraid --help > /dev/null
   '';
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/gpoore/codebraid";
     description = ''
       Live code in Pandoc Markdown.
diff --git a/pkgs/tools/misc/colord-gtk/default.nix b/pkgs/tools/misc/colord-gtk/default.nix
index b2113f8304c..d77204836b2 100644
--- a/pkgs/tools/misc/colord-gtk/default.nix
+++ b/pkgs/tools/misc/colord-gtk/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , colord
 , gettext
@@ -12,7 +12,7 @@
 , libxslt
 , glib
 , gtk3
-, pkgconfig
+, pkg-config
 , lcms2
 }:
 
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     gettext
     meson
     ninja
@@ -50,7 +50,7 @@ stdenv.mkDerivation rec {
     gtk3
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.freedesktop.org/software/colord/intro.html";
     license = licenses.lgpl21Plus;
     platforms = platforms.linux;
diff --git a/pkgs/tools/misc/colord/default.nix b/pkgs/tools/misc/colord/default.nix
index 79d27129173..89435332c9c 100644
--- a/pkgs/tools/misc/colord/default.nix
+++ b/pkgs/tools/misc/colord/default.nix
@@ -1,10 +1,10 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , nixosTests
 , bash-completion
 , glib
 , polkit
-, pkgconfig
+, pkg-config
 , gettext
 , gusb
 , lcms2
@@ -29,13 +29,13 @@
 
 stdenv.mkDerivation rec {
   pname = "colord";
-  version = "1.4.4";
+  version = "1.4.5";
 
   outputs = [ "out" "dev" "devdoc" "man" "installedTests" ];
 
   src = fetchurl {
     url = "https://www.freedesktop.org/software/colord/releases/${pname}-${version}.tar.xz";
-    sha256 = "19f0938fr7nvvm3jr263dlknaq7md40zrac2npfyz25zc00yh3ws";
+    sha256 = "05sydi6qqqx1rrqwnga1vbg9srkf89wdcfw5w4p4m7r37m2flx5p";
   };
 
   patches = [
@@ -68,7 +68,7 @@ stdenv.mkDerivation rec {
     libxslt
     meson
     ninja
-    pkgconfig
+    pkg-config
     shared-mime-info
     vala
     wrapGAppsHook
@@ -104,7 +104,7 @@ stdenv.mkDerivation rec {
     };
   };
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/misc/colorpicker/default.nix b/pkgs/tools/misc/colorpicker/default.nix
index 3de5d33617c..d2d0915a46f 100644
--- a/pkgs/tools/misc/colorpicker/default.nix
+++ b/pkgs/tools/misc/colorpicker/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkg-config, gtk2 }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, gtk2 }:
 
 stdenv.mkDerivation rec {
   pname = "colorpicker";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     install -Dt $out/bin colorpicker
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Click on a pixel on your screen and print its color value in RGB";
     homepage = "https://github.com/Ancurio/colorpicker";
     maintainers = with maintainers; [ jb55 ];
diff --git a/pkgs/tools/misc/complete-alias/default.nix b/pkgs/tools/misc/complete-alias/default.nix
new file mode 100644
index 00000000000..721e99427bb
--- /dev/null
+++ b/pkgs/tools/misc/complete-alias/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, fetchFromGitHub
+, stdenvNoCC
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "complete-alias";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "cykerway";
+    repo = pname;
+    rev = version;
+    sha256 = "1s0prdnmb2qnzc8d7ddldzqa53yc10qq0lbgx2l9dzmz8pdwylyc";
+  };
+
+  buildPhase = ''
+    runHook preBuild
+
+    # required for the patchShebangs setup hook
+    chmod +x complete_alias
+
+    patchShebangs complete_alias
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp -r complete_alias "$out"/bin
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Automagical shell alias completion";
+    homepage = "https://github.com/cykerway/complete-alias";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ tuxinaut ];
+  };
+}
diff --git a/pkgs/tools/misc/contacts/default.nix b/pkgs/tools/misc/contacts/default.nix
index b58e0c6e31e..7b652f36a19 100644
--- a/pkgs/tools/misc/contacts/default.nix
+++ b/pkgs/tools/misc/contacts/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, xcbuildHook, Foundation, AddressBook }:
+{ lib, stdenv, fetchurl, xcbuildHook, Foundation, AddressBook }:
 
 stdenv.mkDerivation {
   version = "1.1a-3";
@@ -17,12 +17,12 @@ stdenv.mkDerivation {
     cp Products/Default/contacts $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms   = lib.platforms.darwin;
+    hydraPlatforms = lib.platforms.darwin;
   };
 }
diff --git a/pkgs/tools/misc/convbin/default.nix b/pkgs/tools/misc/convbin/default.nix
new file mode 100644
index 00000000000..7f57cab585b
--- /dev/null
+++ b/pkgs/tools/misc/convbin/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "convbin";
+  version = "3.0";
+
+  src = fetchFromGitHub {
+    owner = "mateoconlechuga";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0n502zj8igm583kbfvyv7zhd97vb71jac41ncb9jr2yz2v5ir8j9";
+  };
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  checkPhase = ''
+    pushd test
+    patchShebangs test.sh
+    ./test.sh
+    popd
+  '';
+
+  doCheck = true;
+
+  installPhase = ''
+    install -Dm755 bin/convbin $out/bin/convbin
+  '';
+
+  meta = with lib; {
+    description = "Converts files to other formats";
+    longDescription = ''
+      This program is used to convert files to other formats,
+      specifically for the TI84+CE and related calculators.
+    '';
+    homepage = "https://github.com/mateoconlechuga/convbin";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ luc65r ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/misc/convfont/default.nix b/pkgs/tools/misc/convfont/default.nix
new file mode 100644
index 00000000000..501c4e29a41
--- /dev/null
+++ b/pkgs/tools/misc/convfont/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "convfont";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "drdnar";
+    repo = pname;
+    rev = "v20190438";
+    sha256 = "1lj24yq5gj9hxhy1srk73521q95zyqzkws0q4v271hf5wmqaxa2f";
+  };
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    install -Dm755 convfont $out/bin/convfont
+  '';
+
+  meta = with lib; {
+    description = "Converts font for use with FontLibC";
+    homepage = "https://github.com/drdnar/convfont";
+    license = licenses.wtfpl;
+    maintainers = with maintainers; [ luc65r ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/misc/convimg/default.nix b/pkgs/tools/misc/convimg/default.nix
new file mode 100644
index 00000000000..0c5ffb4a6de
--- /dev/null
+++ b/pkgs/tools/misc/convimg/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "convimg";
+  version = "8.3";
+
+  src = fetchFromGitHub {
+    owner = "mateoconlechuga";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1k2fkzfg08y2gcm8jabmb2plgqmgw6y30m73ys4mmbskxgy7hc3s";
+    fetchSubmodules = true;
+  };
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  checkPhase = ''
+    pushd test
+    patchShebangs test.sh
+    ./test.sh
+    popd
+  '';
+
+  doCheck = true;
+
+  installPhase = ''
+    install -Dm755 bin/convimg $out/bin/convimg
+  '';
+
+  meta = with lib; {
+    description = "Image palette quantization";
+    longDescription = ''
+      This program is used to convert images to other formats,
+      specifically for the TI84+CE and related calculators.
+    '';
+    homepage = "https://github.com/mateoconlechuga/convimg";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ luc65r ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/convmv/default.nix b/pkgs/tools/misc/convmv/default.nix
index 56b9d5c849a..b9b775a1bff 100644
--- a/pkgs/tools/misc/convmv/default.nix
+++ b/pkgs/tools/misc/convmv/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl }:
+{ lib, stdenv, fetchurl, perl }:
 
 stdenv.mkDerivation rec {
   name = "convmv-2.05";
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ perl ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Converts filenames from one encoding to another";
     platforms = platforms.linux ++ platforms.freebsd ++ platforms.cygwin;
     maintainers = [ ];
diff --git a/pkgs/tools/misc/coreboot-utils/default.nix b/pkgs/tools/misc/coreboot-utils/default.nix
index 39e2e041e32..95f9c74f5ad 100644
--- a/pkgs/tools/misc/coreboot-utils/default.nix
+++ b/pkgs/tools/misc/coreboot-utils/default.nix
@@ -1,13 +1,13 @@
-{ stdenv, fetchurl, zlib, pciutils, coreutils, acpica-tools, iasl, makeWrapper, gnugrep, gnused, file, buildEnv }:
+{ lib, stdenv, fetchurl, zlib, pciutils, coreutils, acpica-tools, iasl, makeWrapper, gnugrep, gnused, file, buildEnv }:
 
 let
-  version = "4.12";
+  version = "4.14";
 
-  commonMeta = with stdenv.lib; {
+  commonMeta = with lib; {
     description = "Various coreboot-related tools";
     homepage = "https://www.coreboot.org";
     license = licenses.gpl2;
-    maintainers = [ maintainers.petabyteboy ];
+    maintainers = with maintainers; [ petabyteboy felixsinger yuka ];
     platforms = platforms.linux;
   };
 
@@ -16,13 +16,14 @@ let
 
     src = fetchurl {
       url = "https://coreboot.org/releases/coreboot-${version}.tar.xz";
-      sha256 = "1qibds9lsk22wf1sxwg0jg32fgcvc9an39vf74y1hwwvxq0d1jpd";
+      sha256 = "0viw2x4ckjwiylb92w85k06b0g9pmamjy2yqs7fxfqbmfadkf1yr";
     };
 
     enableParallelBuilding = true;
 
     postPatch = ''
       cd ${path}
+      patchShebangs .
     '';
 
     makeFlags = [
@@ -42,7 +43,7 @@ let
     };
     cbmem = generic {
       pname = "cbmem";
-      meta.description = "Coreboot console log reader";
+      meta.description = "coreboot console log reader";
     };
     ifdtool = generic {
       pname = "ifdtool";
@@ -89,16 +90,16 @@ let
       nativeBuildInputs = [ makeWrapper ];
       dontBuild = true;
       installPhase = "install -Dm755 acpidump-all $out/bin/acpidump-all";
-      postFixup = let 
+      postFixup = let
         binPath = [ coreutils  acpica-tools iasl gnugrep  gnused  file ];
-      in "wrapProgram $out/bin/acpidump-all --set PATH ${stdenv.lib.makeBinPath binPath}";
+      in "wrapProgram $out/bin/acpidump-all --set PATH ${lib.makeBinPath binPath}";
     };
   };
 
 in utils // {
   coreboot-utils = (buildEnv {
     name = "coreboot-utils-${version}";
-    paths = stdenv.lib.attrValues utils;
+    paths = lib.attrValues utils;
     postBuild = "rm -rf $out/sbin";
   }) // {
     inherit version;
diff --git a/pkgs/tools/misc/coreutils/avoid-false-positive-in-date-debug-test.patch b/pkgs/tools/misc/coreutils/avoid-false-positive-in-date-debug-test.patch
deleted file mode 100644
index ae1a02d4d20..00000000000
--- a/pkgs/tools/misc/coreutils/avoid-false-positive-in-date-debug-test.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-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/pkgs/tools/misc/coreutils/coreutils-8.31-android-cross.patch b/pkgs/tools/misc/coreutils/coreutils-8.31-android-cross.patch
deleted file mode 100644
index 97d95d1c5b1..00000000000
--- a/pkgs/tools/misc/coreutils/coreutils-8.31-android-cross.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 3bd82a82cf4ba693d2c31c7b95aaec4e56dc92a4 Mon Sep 17 00:00:00 2001
-From: Paul Eggert <eggert@cs.ucla.edu>
-Date: Mon, 11 Mar 2019 16:40:29 -0700
-Subject: [PATCH 1/1] strtod: fix clash with strtold
-
-Problem reported for RHEL 5 by Jesse Caldwell (Bug#34817).
-* lib/strtod.c (compute_minus_zero, minus_zero):
-Simplify by remving the macro / external variable,
-and having just a function.  User changed.  This avoids
-the need for an external variable that might clash.
----
- ChangeLog    |  9 +++++++++
- lib/strtod.c | 11 +++++------
- 2 files changed, 14 insertions(+), 6 deletions(-)
-
-diff --git a/lib/strtod.c b/lib/strtod.c
-index b9eaa51..69b1564 100644
---- a/lib/strtod.c
-+++ b/lib/strtod.c
-@@ -294,16 +294,15 @@ parse_number (const char *nptr,
-    ICC 10.0 has a bug when optimizing the expression -zero.
-    The expression -MIN * MIN does not work when cross-compiling
-    to PowerPC on Mac OS X 10.5.  */
--#if defined __hpux || defined __sgi || defined __ICC
- static DOUBLE
--compute_minus_zero (void)
-+minus_zero (void)
- {
-+#if defined __hpux || defined __sgi || defined __ICC
-   return -MIN * MIN;
--}
--# define minus_zero compute_minus_zero ()
- #else
--DOUBLE minus_zero = -0.0;
-+  return -0.0;
- #endif
-+}
- 
- /* Convert NPTR to a DOUBLE.  If ENDPTR is not NULL, a pointer to the
-    character after the last one used in the number is put in *ENDPTR.  */
-@@ -479,6 +478,6 @@ STRTOD (const char *nptr, char **endptr)
-   /* Special case -0.0, since at least ICC miscompiles negation.  We
-      can't use copysign(), as that drags in -lm on some platforms.  */
-   if (!num && negative)
--    return minus_zero;
-+    return minus_zero ();
-   return negative ? -num : num;
- }
--- 
-1.9.1
-
diff --git a/pkgs/tools/misc/coreutils/coreutils-8.31-musl-cross.patch b/pkgs/tools/misc/coreutils/coreutils-8.31-musl-cross.patch
deleted file mode 100644
index 02b0b85db31..00000000000
--- a/pkgs/tools/misc/coreutils/coreutils-8.31-musl-cross.patch
+++ /dev/null
@@ -1,1153 +0,0 @@
-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/pkgs/tools/misc/coreutils/default.nix b/pkgs/tools/misc/coreutils/default.nix
index 50d3a2437d7..0b2b03ba8db 100644
--- a/pkgs/tools/misc/coreutils/default.nix
+++ b/pkgs/tools/misc/coreutils/default.nix
@@ -22,21 +22,18 @@ with lib;
 
 stdenv.mkDerivation (rec {
   pname = "coreutils";
-  version = "8.31";
+  version = "8.32";
 
   src = fetchurl {
     url = "mirror://gnu/${pname}/${pname}-${version}.tar.xz";
-    sha256 = "1zg9m79x1i2nifj4kb0waf9x3i5h6ydkypkjnbsb9rnwis8rqypz";
+    sha256 = "sha256-RFjY3nhJ30TMqxXhaxVIsoUiTbul8I+sBwwcDgvMTPo=";
   };
 
-  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
-         # Fix compilation in android-cross environments. To be removed in coreutils-8.32.
-         ++ [ ./coreutils-8.31-android-cross.patch ];
+  patches = [ ./sys-getdents-undeclared.patch ]
+    ++ optional stdenv.hostPlatform.isCygwin ./coreutils-8.23-4.cygwin.patch
+    # fix gnulib tests on 32-bit ARM. Included on coreutils master.
+    # https://lists.gnu.org/r/bug-gnulib/2020-08/msg00225.html
+    ++ optional stdenv.hostPlatform.isAarch32 ./fix-gnulib-tests-arm.patch;
 
   postPatch = ''
     # The test tends to fail on btrfs,f2fs and maybe other unusual filesystems.
@@ -46,6 +43,9 @@ stdenv.mkDerivation (rec {
     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
 
+    # Depends on the mountpoints
+    sed '2i echo Skipping df df-symlink test && exit 77' -i ./tests/df/df-symlink.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
@@ -68,6 +68,12 @@ stdenv.mkDerivation (rec {
     for f in gnulib-tests/{test-chown.c,test-fchownat.c,test-lchown.c}; do
       echo "int main() { return 77; }" > "$f"
     done
+
+    # tests try to access user 1000 which is forbidden in sandbox
+    sed '2i print "Skipping id uid test"; exit 77' -i ./tests/id/uid.sh
+    sed '2i print "Skipping id zero test"; exit 77' -i ./tests/id/zero.sh
+    sed '2i print "Skipping misc help-versiob test"; exit 77' -i ./tests/misc/help-version.sh
+    sed '2i print "Skipping chown separator test"; exit 77' -i ./tests/chown/separator.sh
   '' + optionalString (stdenv.hostPlatform.libc == "musl") (lib.concatStringsSep "\n" [
     ''
       echo "int main() { return 77; }" > gnulib-tests/test-parse-datetime.c
@@ -78,8 +84,7 @@ stdenv.mkDerivation (rec {
   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
+    ++ optionals stdenv.hostPlatform.isCygwin [ autoreconfHook texinfo ];  # due to patch
   configureFlags = [ "--with-packager=https://NixOS.org" ]
     ++ optional (singleBinary != false)
       ("--enable-single-binary" + optionalString (isString singleBinary) "=${singleBinary}")
@@ -107,8 +112,7 @@ stdenv.mkDerivation (rec {
   # 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";
+    && (stdenv.hostPlatform.libc == "glibc" || stdenv.hostPlatform.isMusl);
 
   # Prevents attempts of running 'help2man' on cross-built binaries.
   PERL = if stdenv.hostPlatform == stdenv.buildPlatform then null else "missing";
@@ -138,25 +142,20 @@ stdenv.mkDerivation (rec {
   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";
-} // stdenv.lib.optionalAttrs stdenv.hostPlatform.isAndroid {
+} // lib.optionalAttrs stdenv.hostPlatform.isAndroid {
   NIX_CFLAGS_COMPILE = "-D__USE_FORTIFY_LEVEL=0";
 })
diff --git a/pkgs/tools/misc/coreutils/fix-gnulib-tests-arm.patch b/pkgs/tools/misc/coreutils/fix-gnulib-tests-arm.patch
new file mode 100644
index 00000000000..39bd29f8439
--- /dev/null
+++ b/pkgs/tools/misc/coreutils/fix-gnulib-tests-arm.patch
@@ -0,0 +1,45 @@
+>From 175e0bc72808d564074c4adcc72aeadb74adfcc6 Mon Sep 17 00:00:00 2001
+From: Paul Eggert <eggert@cs.ucla.edu>
+Date: Thu, 27 Aug 2020 17:52:58 -0700
+Subject: [PATCH] perror, strerror_r: remove unportable tests
+
+Problem reported by Florian Weimer in:
+https://lists.gnu.org/r/bug-gnulib/2020-08/msg00220.html
+* tests/test-perror2.c (main):
+* tests/test-strerror_r.c (main): Omit unportable tests.
+---
+ tests/test-perror2.c    | 3 ---
+ tests/test-strerror_r.c | 3 ---
+ 2 files changed, 6 deletions(-)
+
+diff --git a/gnulib-tests/test-perror2.c b/gnulib-tests/test-perror2.c
+index 1d14eda7b..c6214dd25 100644
+--- a/gnulib-tests/test-perror2.c
++++ b/gnulib-tests/test-perror2.c
+@@ -79,9 +79,6 @@ main (void)
+     errno = -5;
+     perror ("");
+     ASSERT (!ferror (stderr));
+-    ASSERT (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1));
+-    ASSERT (msg2 == msg4 || STREQ (msg2, str2));
+-    ASSERT (msg3 == msg4 || STREQ (msg3, str3));
+     ASSERT (STREQ (msg4, str4));
+ 
+     free (str1);
+diff --git a/gnulib-tests/test-strerror_r.c b/gnulib-tests/test-strerror_r.c
+index b11d6fd9f..c1dbcf837 100644
+--- a/gnulib-tests/test-strerror_r.c
++++ b/gnulib-tests/test-strerror_r.c
+@@ -165,9 +165,6 @@ main (void)
+ 
+     strerror_r (EACCES, buf, sizeof buf);
+     strerror_r (-5, buf, sizeof buf);
+-    ASSERT (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1));
+-    ASSERT (msg2 == msg4 || STREQ (msg2, str2));
+-    ASSERT (msg3 == msg4 || STREQ (msg3, str3));
+     ASSERT (STREQ (msg4, str4));
+ 
+     free (str1);
+-- 
+2.17.1
+
diff --git a/pkgs/tools/misc/coreutils/sys-getdents-undeclared.patch b/pkgs/tools/misc/coreutils/sys-getdents-undeclared.patch
new file mode 100644
index 00000000000..0af5de68415
--- /dev/null
+++ b/pkgs/tools/misc/coreutils/sys-getdents-undeclared.patch
@@ -0,0 +1,100 @@
+From 10fcb97bd728f09d4a027eddf8ad2900f0819b0a Mon Sep 17 00:00:00 2001
+From: Paul Eggert <eggert@cs.ucla.edu>
+Date: Thu, 5 Mar 2020 17:25:29 -0800
+Subject: ls: restore 8.31 behavior on removed directories
+
+* NEWS: Mention this.
+* src/ls.c: Do not include <sys/sycall.h>
+(print_dir): Don't worry about whether the directory is removed.
+* tests/ls/removed-directory.sh: Adjust to match new (i.e., old)
+behavior.
+---
+ NEWS (removed diff in nixpkgs)|  6 ++++++
+ src/ls.c                      | 22 ----------------------
+ tests/ls/removed-directory.sh | 10 ++--------
+ 3 files changed, 8 insertions(+), 30 deletions(-)
+
+diff --git a/src/ls.c b/src/ls.c
+index 24b983287..4acf5f44d 100644
+--- a/src/ls.c
++++ b/src/ls.c
+@@ -49,10 +49,6 @@
+ # include <sys/ptem.h>
+ #endif
+ 
+-#ifdef __linux__
+-# include <sys/syscall.h>
+-#endif
+-
+ #include <stdio.h>
+ #include <assert.h>
+ #include <setjmp.h>
+@@ -2896,7 +2892,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg)
+   struct dirent *next;
+   uintmax_t total_blocks = 0;
+   static bool first = true;
+-  bool found_any_entries = false;
+ 
+   errno = 0;
+   dirp = opendir (name);
+@@ -2972,7 +2967,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg)
+       next = readdir (dirp);
+       if (next)
+         {
+-          found_any_entries = true;
+           if (! file_ignored (next->d_name))
+             {
+               enum filetype type = unknown;
+@@ -3018,22 +3012,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg)
+           if (errno != EOVERFLOW)
+             break;
+         }
+-#ifdef __linux__
+-      else if (! found_any_entries)
+-        {
+-          /* If readdir finds no directory entries at all, not even "." or
+-             "..", then double check that the directory exists.  */
+-          if (syscall (SYS_getdents, dirfd (dirp), NULL, 0) == -1
+-              && errno != EINVAL)
+-            {
+-              /* We exclude EINVAL as that pertains to buffer handling,
+-                 and we've passed NULL as the buffer for simplicity.
+-                 ENOENT is returned if appropriate before buffer handling.  */
+-              file_failure (command_line_arg, _("reading directory %s"), name);
+-            }
+-          break;
+-        }
+-#endif
+       else
+         break;
+ 
+diff --git a/tests/ls/removed-directory.sh b/tests/ls/removed-directory.sh
+index e8c835dab..fe8f929a1 100755
+--- a/tests/ls/removed-directory.sh
++++ b/tests/ls/removed-directory.sh
+@@ -26,20 +26,14 @@ case $host_triplet in
+   *) skip_ 'non linux kernel' ;;
+ esac
+ 
+-LS_FAILURE=2
+-
+-cat <<\EOF >exp-err || framework_failure_
+-ls: reading directory '.': No such file or directory
+-EOF
+-
+ cwd=$(pwd)
+ mkdir d || framework_failure_
+ cd d || framework_failure_
+ rmdir ../d || framework_failure_
+ 
+-returns_ $LS_FAILURE ls >../out 2>../err || fail=1
++ls >../out 2>../err || fail=1
+ cd "$cwd" || framework_failure_
+ compare /dev/null out || fail=1
+-compare exp-err err || fail=1
++compare /dev/null err || fail=1
+ 
+ Exit $fail
+-- 
+cgit v1.2.1
+
diff --git a/pkgs/tools/misc/cowsay/default.nix b/pkgs/tools/misc/cowsay/default.nix
index 972b2997d81..095c8bab48f 100644
--- a/pkgs/tools/misc/cowsay/default.nix
+++ b/pkgs/tools/misc/cowsay/default.nix
@@ -1,34 +1,46 @@
-{ stdenv, fetchurl, perl }:
+{ lib, stdenv, perl, installShellFiles, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
-  version = "3.03+dfsg2";
   pname = "cowsay";
+  version = "3.04";
 
-  src = fetchurl {
-    url = "http://http.debian.net/debian/pool/main/c/cowsay/cowsay_${version}.orig.tar.gz";
-    sha256 = "0ghqnkp8njc3wyqx4mlg0qv0v0pc996x2nbyhqhz66bbgmf9d29v";
+  src = fetchFromGitHub {
+    owner = "tnalpgge";
+    repo = "rank-amateur-cowsay";
+    rev = "cowsay-${version}";
+    sha256 = "sha256-9jCaQ6Um6Nl9j0/urrMCRcsGeubRN3VWD3jDM/AshRg=";
   };
 
   buildInputs = [ perl ];
 
-  postBuild = ''
+  nativeBuildInputs = [ installShellFiles ];
+
+  # overriding buildPhase because we don't want to use the install.sh script
+  buildPhase = ''
+    runHook preBuild;
     substituteInPlace cowsay --replace "%BANGPERL%" "!${perl}/bin/perl" \
       --replace "%PREFIX%" "$out"
+    runHook postBuild;
   '';
 
   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/
+    runHook preInstall
+    install -Dm755 cowsay $out/bin/cowsay
+    ln -s $out/bin/cowsay $out/bin/cowthink
+
+    installManPage cowsay.1
+    ln -s $man/share/man/man1/cowsay.1.gz $man/share/man/man1/cowthink.1.gz
+
+    install -Dm644 cows/* -t $out/share/cows/
+    runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  outputs = [ "out" "man" ];
+
+  meta = with lib; {
     description = "A program which generates ASCII pictures of a cow with a message";
-    homepage = "https://en.wikipedia.org/wiki/Cowsay";
-    license = licenses.gpl1;
+    homepage = "https://github.com/tnalpgge/rank-amateur-cowsay";
+    license = licenses.gpl3Only;
     platforms = platforms.all;
     maintainers = [ maintainers.rob ];
   };
diff --git a/pkgs/tools/misc/cp437/default.nix b/pkgs/tools/misc/cp437/default.nix
new file mode 100644
index 00000000000..c08214ff548
--- /dev/null
+++ b/pkgs/tools/misc/cp437/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "cp437";
+  version = "0.6";
+
+  src = fetchFromGitHub {
+    owner = "keaston";
+    repo  = "cp437";
+    rev   = "v${version}";
+    sha256 = "18f4mnfnyviqclbhmbhix80k823481ypkwbp26qfvhnxdgzbggcc";
+  };
+
+  installPhase = ''
+    install -Dm755 cp437 -t $out/bin
+  '';
+
+  meta = with lib; {
+    description = ''
+      Emulates an old-style "code page 437" / "IBM-PC" character
+      set terminal on a modern UTF-8 terminal emulator
+    '';
+    homepage = "https://github.com/keaston/cp437";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jb55 ];
+  };
+}
diff --git a/pkgs/tools/misc/cpufetch/default.nix b/pkgs/tools/misc/cpufetch/default.nix
new file mode 100644
index 00000000000..4473738ac76
--- /dev/null
+++ b/pkgs/tools/misc/cpufetch/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, lib, fetchFromGitHub, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "cpufetch";
+  version = "0.98";
+
+  src = fetchFromGitHub {
+    owner  = "Dr-Noob";
+    repo   = "cpufetch";
+    rev    = "v${version}";
+    sha256 = "060hmkwmb5ybcrj9jfx9681zk92489kq71nl6nacn8nfqrcn3qdb";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    install -Dm755 cpufetch   $out/bin/cpufetch
+    install -Dm644 LICENSE    $out/share/licenses/cpufetch/LICENSE
+    installManPage cpufetch.1
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Simplistic yet fancy CPU architecture fetching tool";
+    license = licenses.mit;
+    homepage = "https://github.com/Dr-Noob/cpufetch";
+    changelog = "https://github.com/Dr-Noob/cpufetch/releases/tag/v${version}";
+    maintainers = with maintainers; [ devhell ];
+  };
+}
diff --git a/pkgs/tools/misc/cpulimit/default.nix b/pkgs/tools/misc/cpulimit/default.nix
index 13c29d6ab93..7fdaa319619 100644
--- a/pkgs/tools/misc/cpulimit/default.nix
+++ b/pkgs/tools/misc/cpulimit/default.nix
@@ -1,12 +1,12 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation rec {
   pname = "cpulimit";
-  version = "2.6";
+  version = "2.7";
 
   src = fetchurl {
     url = "mirror://sourceforge/limitcpu/${pname}-${version}.tar.gz";
-    sha256 = "0xf0r6zxaqan1drz61nqf95p2pkiiihpvrjhrr9dx9j3vswyx31g";
+    sha256 = "sha256-HeBApPikDf6MegJf6YB1ZzRo+8P8zMvCMbx0AvYuxKA=";
   };
 
   buildFlags = with stdenv; [ (
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
 
   installFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://limitcpu.sourceforge.net/";
     description = "A tool to throttle the CPU usage of programs";
     platforms = with platforms; linux ++ freebsd;
diff --git a/pkgs/tools/misc/cpuminer-multi/default.nix b/pkgs/tools/misc/cpuminer-multi/default.nix
index 65482fabb11..fac8fbcfee9 100644
--- a/pkgs/tools/misc/cpuminer-multi/default.nix
+++ b/pkgs/tools/misc/cpuminer-multi/default.nix
@@ -1,16 +1,17 @@
-{ stdenv, fetchgit, curl, jansson, autoconf, automake
-, aesni ? true }:
+{ lib, stdenv, fetchFromGitHub, curl, jansson, autoconf, automake
+, aesni ? stdenv.hostPlatform.aesSupport }:
 
 let
   rev = "8393e03089c0abde61bd5d72aba8f926c3d6eca4";
   date = "20160316";
 in
 stdenv.mkDerivation {
-  name = "cpuminer-multi-${date}-${stdenv.lib.strings.substring 0 7 rev}";
+  name = "cpuminer-multi-${date}-${lib.strings.substring 0 7 rev}";
 
-  src = fetchgit {
+  src = fetchFromGitHub {
+    owner = "hyc";
+    repo = "cpuminer-multi";
     inherit rev;
-    url = "https://github.com/wolf9466/cpuminer-multi.git";
     sha256 = "11dg4rra4dgfb9x6q85irn0hrkx2lkwyrdpgdh10pag09s3vhy4v";
   };
 
@@ -22,12 +23,11 @@ stdenv.mkDerivation {
 
   configureFlags = [ (if aesni then "--enable-aes-ni" else "--disable-aes-ni") ];
 
-  meta = with stdenv.lib; {
+  meta = with 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" ]; 
+    platforms = [ "x86_64-linux" ];
   };
 }
diff --git a/pkgs/tools/misc/cpuminer/default.nix b/pkgs/tools/misc/cpuminer/default.nix
index d48dc5ec1c9..27bf0ec5374 100644
--- a/pkgs/tools/misc/cpuminer/default.nix
+++ b/pkgs/tools/misc/cpuminer/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , curl
 , jansson
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
 
   configureFlags = [ "CFLAGS=-O3" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/pooler/cpuminer";
     description = "CPU miner for Litecoin and Bitcoin";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/crex/default.nix b/pkgs/tools/misc/crex/default.nix
index 72e8521fec1..14d462e8e6e 100644
--- a/pkgs/tools/misc/crex/default.nix
+++ b/pkgs/tools/misc/crex/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake }:
+{ lib, stdenv, fetchFromGitHub, cmake }:
 
 stdenv.mkDerivation rec {
   pname = "crex";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ cmake ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Explore, test, and check regular expressions in the terminal";
     homepage = "https://octobanana.com/software/crex";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/crudini/default.nix b/pkgs/tools/misc/crudini/default.nix
index f63cd0d32c9..6527a01e43b 100644
--- a/pkgs/tools/misc/crudini/default.nix
+++ b/pkgs/tools/misc/crudini/default.nix
@@ -1,24 +1,19 @@
-{ stdenv, fetchFromGitHub, python2Packages, help2man, installShellFiles }:
+{ lib, fetchFromGitHub, python3Packages, 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 {
+python3Packages.buildPythonApplication rec {
   pname = "crudini";
   version = "0.9.3";
 
   src = fetchFromGitHub {
-    owner  = "pixelb";
-    repo   = "crudini";
-    rev    = version;
+    owner = "pixelb";
+    repo = "crudini";
+    rev = version;
     sha256 = "0298hvg0fpk0m0bjpwryj3icksbckwqqsr9w1ain55wf5s0v24k3";
   };
 
   nativeBuildInputs = [ help2man installShellFiles ];
 
-  propagatedBuildInputs = with pypkgs; [ iniparse ];
+  propagatedBuildInputs = with python3Packages; [ iniparse ];
 
   postPatch = ''
     substituteInPlace crudini-help \
@@ -45,10 +40,10 @@ pypkgs.buildPythonApplication rec {
     runHook postCheck
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A utility for manipulating ini files ";
     homepage = "https://www.pixelbeat.org/programs/crudini/";
-    license = licenses.gpl2;
+    license = licenses.gpl2Only;
     maintainers = with maintainers; [ peterhoeg ];
   };
 }
diff --git a/pkgs/tools/misc/csv2latex/default.nix b/pkgs/tools/misc/csv2latex/default.nix
index da222582967..035d2cb9702 100644
--- a/pkgs/tools/misc/csv2latex/default.nix
+++ b/pkgs/tools/misc/csv2latex/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "csv2latex";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
   make PREFIX=$out install
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Command-line CSV to LaTeX file converter";
     homepage = "http://brouits.free.fr/csv2latex/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/cunit/default.nix b/pkgs/tools/misc/cunit/default.nix
index 305084b900d..0322f3b708f 100644
--- a/pkgs/tools/misc/cunit/default.nix
+++ b/pkgs/tools/misc/cunit/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, autoconf, automake, libtool, autoreconfHook}:
+{ lib, stdenv, fetchurl, autoconf, automake, libtool, autoreconfHook}:
 
 stdenv.mkDerivation rec {
   pname = "CUnit";
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
 
     homepage = "http://cunit.sourceforge.net/";
 
-    license = stdenv.lib.licenses.lgpl2;
-    platforms = stdenv.lib.platforms.unix;
+    license = lib.licenses.lgpl2;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/cutecom/default.nix b/pkgs/tools/misc/cutecom/default.nix
index d825b555e19..b3d412b8fda 100644
--- a/pkgs/tools/misc/cutecom/default.nix
+++ b/pkgs/tools/misc/cutecom/default.nix
@@ -2,23 +2,26 @@
 
 mkDerivation rec {
   pname = "cutecom";
-  version = "0.51.0";
+  version = "0.51.0+patch";
 
   src = fetchFromGitLab {
     owner = "cutecom";
     repo = "cutecom";
-    rev = "v${version}";
-    sha256 = "1zprabjs4z26hsb64fc3k790aiiqiz9d88j666xrzi4983m1bfv8";
+    rev = "70d0c497acf8f298374052b2956bcf142ed5f6ca";
+    sha256 = "X8jeESt+x5PxK3rTNC1h1Tpvue2WH09QRnG2g1eMoEE=";
   };
 
-  preConfigure = ''
-    substituteInPlace CMakeLists.txt \
-      --replace "#find_package(Serialport REQUIRED)" "find_package(Qt5SerialPort REQUIRED)"
-  '';
-
   buildInputs = [ qtbase qtserialport ];
   nativeBuildInputs = [ cmake ];
 
+  postInstall = ''
+    cd ..
+    mkdir -p "$out"/share/{applications,icons/hicolor/scalable/apps,man/man1}
+    cp cutecom.desktop "$out/share/applications"
+    cp images/cutecom.svg "$out/share/icons/hicolor/scalable/apps"
+    cp cutecom.1 "$out/share/man/man1"
+  '';
+
   meta = with lib; {
     description = "A graphical serial terminal";
     homepage = "https://gitlab.com/cutecom/cutecom/";
diff --git a/pkgs/tools/misc/cyclonedx-python/default.nix b/pkgs/tools/misc/cyclonedx-python/default.nix
new file mode 100644
index 00000000000..97dfd8310da
--- /dev/null
+++ b/pkgs/tools/misc/cyclonedx-python/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+python3.pkgs.buildPythonApplication rec {
+  pname = "cyclonedx-python";
+  version = "0.4.3";
+
+  src = fetchFromGitHub {
+    owner = "CycloneDX";
+    repo = "cyclonedx-python";
+    rev = "v${version}";
+    sha256 = "BvG4aWBMsllW2L4lLsiRFUCPjgoDpHxN49fsUFdg7tQ=";
+  };
+
+  # They pin versions for exact version numbers because "A bill-of-material such
+  # as CycloneDX expects exact version numbers" -- but that's unnecessary with
+  # Nix.
+  preBuild = ''
+    sed "s@==.*'@'@" -i setup.py
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    packageurl-python
+    requests
+    xmlschema
+    setuptools
+    requirements-parser
+    packaging
+    chardet
+    jsonschema
+  ];
+
+  # the tests want access to the cyclonedx binary
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "cyclonedx"
+  ];
+
+  meta = with lib; {
+    description = "Creates CycloneDX Software Bill of Materials (SBOM) from Python projects";
+    homepage = "https://github.com/CycloneDX/cyclonedx-python";
+    license = licenses.asl20;
+    maintainers = teams.determinatesystems.members;
+  };
+}
diff --git a/pkgs/tools/misc/czkawka/default.nix b/pkgs/tools/misc/czkawka/default.nix
new file mode 100644
index 00000000000..8bca39c2ad5
--- /dev/null
+++ b/pkgs/tools/misc/czkawka/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, glib
+, cairo
+, pango
+, gdk-pixbuf
+, atk
+, gtk3
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "czkawka";
+  version = "3.1.0";
+
+  src = fetchFromGitHub {
+    owner = "qarmin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-LtGgpfToQUNKM1hmMPW7UrS/n7iyI+dz2vbSo+GOcRg=";
+  };
+
+  cargoSha256 = "sha256-ZbyoCo1n4GRBkb5SClby5V51rLN1PnvCHD30TiJU2gY=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    glib
+    cairo
+    pango
+    gdk-pixbuf
+    atk
+    gtk3
+  ];
+
+  meta = with lib; {
+    description = "A simple, fast and easy to use app to remove unnecessary files from your computer";
+    homepage = "https://github.com/qarmin/czkawka";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ yanganto ];
+  };
+}
diff --git a/pkgs/tools/misc/dashing/default.nix b/pkgs/tools/misc/dashing/default.nix
index 11523ae3758..496639ec07a 100644
--- a/pkgs/tools/misc/dashing/default.nix
+++ b/pkgs/tools/misc/dashing/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "dashing";
@@ -17,7 +17,7 @@ buildGoPackage rec {
 
   buildFlagsArray = [ "-ldflags=-X main.version=${version}" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A Dash Generator Script for Any HTML";
     homepage    = "https://github.com/technosophos/dashing";
     license     = licenses.mit;
diff --git a/pkgs/tools/misc/dasht/default.nix b/pkgs/tools/misc/dasht/default.nix
index 7c2ff354836..4ab9cfdd0e0 100644
--- a/pkgs/tools/misc/dasht/default.nix
+++ b/pkgs/tools/misc/dasht/default.nix
@@ -58,8 +58,8 @@ stdenv.mkDerivation rec {
   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 ];
+    license     = lib.licenses.isc;
+    platforms   = lib.platforms.unix; #cannot test other
+    maintainers = with lib.maintainers; [ matthiasbeyer ];
   };
 }
diff --git a/pkgs/tools/misc/datamash/default.nix b/pkgs/tools/misc/datamash/default.nix
index 8e9782506fb..25f814e5f3c 100644
--- a/pkgs/tools/misc/datamash/default.nix
+++ b/pkgs/tools/misc/datamash/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "datamash";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "1cxdlhgz3wzjqlq8bgwad93fgqymk2abbldfzw1ffnhcp4mmjjjp";
   };
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/misc/dateutils/default.nix b/pkgs/tools/misc/dateutils/default.nix
index f56cee49ecf..e6793813b2b 100644
--- a/pkgs/tools/misc/dateutils/default.nix
+++ b/pkgs/tools/misc/dateutils/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchurl, autoreconfHook, tzdata }:
+{ lib, stdenv, fetchurl, autoreconfHook, tzdata, fetchpatch }:
 
 stdenv.mkDerivation rec {
-  version = "0.4.7";
+  version = "0.4.8";
   pname = "dateutils";
 
   src = fetchurl {
     url = "https://bitbucket.org/hroptatyr/dateutils/downloads/${pname}-${version}.tar.xz";
-    sha256 = "16jr9yjk8wgzfh22hr3z6mp4jm3fkacyibds4jj5xx5yymbm8wj9";
+    sha256 = "0061f36axskm7yq9cp64x5a5phil8d3zgcd668nfmqzk9ji58w1z";
   };
 
   nativeBuildInputs = [ autoreconfHook ];
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/misc/dbacl/default.nix b/pkgs/tools/misc/dbacl/default.nix
index a6bc0111ad4..d8510975915 100644
--- a/pkgs/tools/misc/dbacl/default.nix
+++ b/pkgs/tools/misc/dbacl/default.nix
@@ -1,4 +1,4 @@
-{fetchurl, stdenv}:
+{fetchurl, lib, stdenv}:
 
 stdenv.mkDerivation rec {
   name = "dbacl-1.14";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
     homepage = "http://dbacl.sourceforge.net/";
     longDescription = "a digramic Bayesian classifier for text recognition.";
     maintainers = [];
-    license = stdenv.lib.licenses.gpl3;
-    platforms = stdenv.lib.platforms.unix;
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/dbus-map/default.nix b/pkgs/tools/misc/dbus-map/default.nix
index c311de3a779..5960ba5c573 100644
--- a/pkgs/tools/misc/dbus-map/default.nix
+++ b/pkgs/tools/misc/dbus-map/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchFromGitHub, pkgconfig, glib, procps, libxml2 }:
+{ stdenv, lib, fetchFromGitHub, pkg-config, glib, procps, libxml2 }:
 
 stdenv.mkDerivation {
   pname = "dbus-map";
@@ -9,7 +9,7 @@ stdenv.mkDerivation {
     rev = "43703fc5e15743309b67131b5ba457b0d6ea7667";
     sha256 = "1pjqn6w29ci8hfxkn1aynzfc8nvy3pqv3hixbxwr7qx20g4rwvdc";
   };
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [
     glib procps libxml2
   ];
diff --git a/pkgs/tools/misc/ddate/default.nix b/pkgs/tools/misc/ddate/default.nix
index 0987fb6d286..4de50693b74 100644
--- a/pkgs/tools/misc/ddate/default.nix
+++ b/pkgs/tools/misc/ddate/default.nix
@@ -1,20 +1,23 @@
-{stdenv, fetchgit, cmake} :
+{ lib, stdenv, fetchFromGitHub, cmake }:
 
-stdenv.mkDerivation {
-  name = "ddate-0.2.2";
-  src = fetchgit {
-    url = "https://github.com/bo0ts/ddate";
-    rev = "refs/tags/v0.2.2";
+stdenv.mkDerivation rec {
+  pname = "ddate";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "bo0ts";
+    repo = pname;
+    rev = "refs/tags/v${version}";
     sha256 = "1qchxnxvghbma6gp1g78wnjxsri0b72ha9axyk31cplssl7yn73f";
   };
 
-  buildInputs = [ cmake ];
+  nativeBuildInputs = [ cmake ];
 
-  meta = {
+  meta = with lib; {
     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;
+    license = licenses.publicDomain;
+    maintainers = with maintainers; [ kovirobi ];
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/ddccontrol/default.nix b/pkgs/tools/misc/ddccontrol/default.nix
index cfc48af5be5..2a85c0dc2b8 100644
--- a/pkgs/tools/misc/ddccontrol/default.nix
+++ b/pkgs/tools/misc/ddccontrol/default.nix
@@ -1,21 +1,31 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, intltool, libxml2
-, pciutils, pkgconfig, gtk2, ddccontrol-db
-, makeDesktopItem
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, intltool
+, libxml2
+, pciutils
+, pkg-config
+, gtk2
+, ddccontrol-db
 }:
 
-let version = "0.4.4"; in
 stdenv.mkDerivation rec {
   pname = "ddccontrol";
-  inherit version;
+  version = "0.5.2";
 
   src = fetchFromGitHub {
     owner = "ddccontrol";
     repo = "ddccontrol";
-    rev = "0.4.4";
-    sha256 = "09npy6z2j3jrvpvlr46vih31y2mbrh7wsqlbrjprxjv1j0kkz5q2";
+    rev = "0.5.2";
+    sha256 = "sha256-kul0sjbwbCwadvrccG3KwL/fKWACFUg74QGvgfWE4FQ=";
   };
 
-  nativeBuildInputs = [ autoreconfHook intltool pkgconfig ];
+  nativeBuildInputs = [
+    autoreconfHook
+    intltool
+    pkg-config
+  ];
 
   buildInputs = [
     libxml2
@@ -24,7 +34,9 @@ stdenv.mkDerivation rec {
     ddccontrol-db
   ];
 
-  hardeningDisable = [ "format" "bindnow" ];
+  configureFlags = [
+    "--with-systemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
+  ];
 
   prePatch = ''
     oldPath="\$""{datadir}/ddccontrol-db"
@@ -37,29 +49,11 @@ stdenv.mkDerivation rec {
     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; {
+  meta = with 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 ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with lib.maintainers; [ pakhfn ];
   };
 }
diff --git a/pkgs/tools/misc/ddcutil/default.nix b/pkgs/tools/misc/ddcutil/default.nix
index 0a2664d6a77..b1a42f57703 100644
--- a/pkgs/tools/misc/ddcutil/default.nix
+++ b/pkgs/tools/misc/ddcutil/default.nix
@@ -1,24 +1,29 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
 , glib, i2c-tools, udev, libgudev, libusb1, libdrm, xorg }:
 
 stdenv.mkDerivation rec {
   pname = "ddcutil";
-  version = "0.9.9";
+  version = "1.1.0";
 
   src = fetchFromGitHub {
     owner  = "rockowitz";
     repo   = "ddcutil";
     rev    = "v${version}";
-    sha256 = "1ppiddnrvkbb9iir28kl9hzpww0hpgb05jfxzf07xsqkdfb4qv71";
+    sha256 = "0wv8a8zjahzmi4qx0lc24mwyi3jklj1yxqq26fwklmfh5dv1y8yc";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  patches = [
+    # Look for kernel modules in /run/booted-system/kernel-modules/lib/modules/*
+    ./nixos-paths.diff
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [
     i2c-tools udev libgudev
     glib libusb1 libdrm xorg.libXrandr
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage    = "http://www.ddcutil.com/";
     description = "Query and change Linux monitor settings using DDC/CI and USB";
     license     = licenses.gpl2;
diff --git a/pkgs/tools/misc/ddcutil/nixos-paths.diff b/pkgs/tools/misc/ddcutil/nixos-paths.diff
new file mode 100644
index 00000000000..54d17ea5bfe
--- /dev/null
+++ b/pkgs/tools/misc/ddcutil/nixos-paths.diff
@@ -0,0 +1,30 @@
+--- a/src/util/linux_util.c
++++ b/src/util/linux_util.c
+@@ -125,6 +125,7 @@
+                   "lib64",
+                   "lib32",
+                   "usr/lib",  // needed for arch?
++                  "run/booted-system/kernel-modules/lib",  // NixOS
+                   NULL};
+    int result = -1;
+    int ndx = 0;
+@@ -204,14 +205,15 @@
+    if (debug)
+       printf("(%s) machine: %s", __func__, utsbuf.machine);
+ 
+-   char * libdirs[3];
++   char * libdirs[4];
+    libdirs[0] = "lib";
++   libdirs[1] = "run/booted-system/kernel-modules/lib";
+    if (streq(utsbuf.machine, "amd_64")){
+-      libdirs[1] = "lib64";
+-      libdirs[2] = NULL;
++      libdirs[2] = "lib64";
++      libdirs[3] = NULL;
+    }
+    else
+-      libdirs[1] = NULL;
++      libdirs[2] = NULL;
+ 
+    int libsndx = 0;
+    bool found = false;
diff --git a/pkgs/tools/misc/debian-devscripts/default.nix b/pkgs/tools/misc/debian-devscripts/default.nix
index 35db9ef7db3..858c114f68c 100644
--- a/pkgs/tools/misc/debian-devscripts/default.nix
+++ b/pkgs/tools/misc/debian-devscripts/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, unzip, xz, dpkg
+{lib, stdenv, fetchurl, xz, dpkg
 , libxslt, docbook_xsl, makeWrapper
 , python3Packages
 , perlPackages, curl, gnupg, diffutils
@@ -16,7 +16,8 @@ in stdenv.mkDerivation rec {
     sha256 = "0xy1nvqrnifx46g8ch69pk31by0va6hn10wpi1fkrsrgncanjjh1";
   };
 
-  buildInputs = [ unzip xz dpkg libxslt python setuptools makeWrapper curl gnupg diffutils ] ++
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ xz dpkg libxslt python setuptools curl gnupg diffutils ] ++
     (with perlPackages; [ perl CryptSSLeay LWP TimeDate DBFile FileDesktopEntry ParseDebControl LWPProtocolHttps ]);
 
   preConfigure = ''
@@ -57,8 +58,8 @@ in stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
-    description = ''Debian package maintenance scripts'';
+  meta = with 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/pkgs/tools/misc/debianutils/default.nix b/pkgs/tools/misc/debianutils/default.nix
index 930f1f59a8a..8ea8855a100 100644
--- a/pkgs/tools/misc/debianutils/default.nix
+++ b/pkgs/tools/misc/debianutils/default.nix
@@ -1,15 +1,15 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "debianutils";
-  version = "4.11";
+  version = "4.11.2";
 
   src = fetchurl {
     url = "mirror://debian/pool/main/d/${pname}/${pname}_${version}.tar.xz";
-    sha256 = "0lbizfnf3qwsiz2ggia6ff7sjjj8gwhys8bm6wixdc4n0qlycp5v";
+    sha256 = "1pjh2s5f8qp8jaky2x08yvf125np0s48zb2z6f3h6x4vf20hws1v";
   };
 
-  meta = with stdenv.lib; {
+  meta = with 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.
@@ -20,6 +20,5 @@ stdenv.mkDerivation rec {
     license = with licenses; [ gpl2Plus publicDomain smail ];
     maintainers = [];
     platforms = platforms.all;
-    broken = stdenv.isDarwin;
   };
 }
diff --git a/pkgs/tools/misc/debootstrap/default.nix b/pkgs/tools/misc/debootstrap/default.nix
index 2940ff0a573..b75f31c6172 100644
--- a/pkgs/tools/misc/debootstrap/default.nix
+++ b/pkgs/tools/misc/debootstrap/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, dpkg, gawk, perl, wget, coreutils, utillinux
+{ lib, stdenv, fetchurl, dpkg, gawk, perl, wget, coreutils, util-linux
 , 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 [
+let binPath = lib.makeBinPath [
     coreutils
     dpkg
     gawk
@@ -15,13 +15,13 @@ let binPath = stdenv.lib.makeBinPath [
   ];
 in stdenv.mkDerivation rec {
   pname = "debootstrap";
-  version = "1.0.123";
+  version = "1.0.124";
 
   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 = "0a53dhfwa74vdhqd6kbl7zlm7iic37c6wkdclppf0syxxi3q2njy";
+    sha256 = "sha256-dwDphksp8WaybFQVPtjCdbRvS5pgRou2B+AZpkwWzY8=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
@@ -33,7 +33,7 @@ in stdenv.mkDerivation rec {
 
     substituteInPlace debootstrap \
       --replace 'CHROOT_CMD="chroot '  'CHROOT_CMD="${coreutils}/bin/chroot ' \
-      --replace 'CHROOT_CMD="unshare ' 'CHROOT_CMD="${utillinux}/bin/unshare ' \
+      --replace 'CHROOT_CMD="unshare ' 'CHROOT_CMD="${util-linux}/bin/unshare ' \
       --replace /usr/bin/dpkg ${dpkg}/bin/dpkg \
       --replace '#!/bin/sh' '#!/bin/bash' \
       --subst-var-by VERSION ${version}
@@ -57,7 +57,7 @@ in stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tool to create a Debian system in a chroot";
     homepage = "https://wiki.debian.org/Debootstrap";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/depotdownloader/default.nix b/pkgs/tools/misc/depotdownloader/default.nix
new file mode 100644
index 00000000000..384234f1f9c
--- /dev/null
+++ b/pkgs/tools/misc/depotdownloader/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, lib, fetchFromGitHub, fetchurl, linkFarmFromDrvs, makeWrapper
+,  dotnet-sdk_5, dotnetPackages
+}:
+
+let
+  fetchNuGet = {name, version, sha256}: fetchurl {
+    name = "nuget-${name}-${version}.nupkg";
+    url = "https://www.nuget.org/api/v2/package/${name}/${version}";
+    inherit sha256;
+  };
+  deps = import ./deps.nix fetchNuGet;
+in
+stdenv.mkDerivation rec {
+  pname = "depotdownloader";
+  version = "2.4.1";
+
+  src = fetchFromGitHub {
+    owner = "SteamRE";
+    repo = "DepotDownloader";
+    rev = "DepotDownloader_${version}";
+    sha256 = "1ldwda7wyvzqvqv1wshvqvqaimlm0rcdzhy9yn5hvxyswc0jxirr";
+  };
+
+  nativeBuildInputs = [ dotnet-sdk_5 dotnetPackages.Nuget makeWrapper ];
+
+  buildPhase = ''
+    export DOTNET_CLI_TELEMETRY_OPTOUT=1
+    export DOTNET_NOLOGO=1
+    export HOME=$TMP/home
+
+    nuget sources Add -Name tmpsrc -Source $TMP/nuget
+    nuget init ${linkFarmFromDrvs "deps" deps} $TMP/nuget
+
+    dotnet restore --source $TMP/nuget DepotDownloader/DepotDownloader.csproj
+    dotnet publish --no-restore -c Release --output $out
+  '';
+
+  installPhase = ''
+    makeWrapper ${dotnet-sdk_5}/bin/dotnet $out/bin/$pname \
+      --add-flags $out/DepotDownloader.dll
+  '';
+
+  meta = with lib; {
+    description = "Steam depot downloader utilizing the SteamKit2 library.";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.babbaj ];
+    platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" ];
+  };
+}
diff --git a/pkgs/tools/misc/depotdownloader/deps.nix b/pkgs/tools/misc/depotdownloader/deps.nix
new file mode 100644
index 00000000000..6f061186f82
--- /dev/null
+++ b/pkgs/tools/misc/depotdownloader/deps.nix
@@ -0,0 +1,88 @@
+fetchNuGet:
+[
+  (fetchNuGet {
+    name = "protobuf-net";
+    version = "3.0.101";
+    sha256 = "0594qckbc0lh61sw74ihaq4qmvf1lf133vfa88n443mh7lxm2fwf";
+  })
+  (fetchNuGet {
+    name = "SteamKit2";
+    version = "2.4.0-Alpha.2";
+    sha256 = "1r6chqdp912pr8f8d7px2vp4y1ydx0kida7d5a1hbf6b7acnsg7d";
+  })
+  (fetchNuGet {
+    name = "protobuf-net.Core";
+    version = "3.0.101";
+    sha256 = "1kvn9rnm6f0jxs0s9scyyx2f2p8rk03qzc1f6ijv1g6xgkpxkq1m";
+  })
+  (fetchNuGet {
+    name = "Microsoft.NETCore.App";
+    version = "2.0.0";
+    sha256 = "0j8xkssrashyxrmdraci6kmj2gdrdxb0z61jwnzf1r9r2kqrd7d2";
+  })
+  (fetchNuGet {
+    name = "Microsoft.NETCore.DotNetAppHost";
+    version = "2.0.0";
+    sha256 = "0yixdk1rslbznrl50d6pyhg50xxr6jbfb1qpy2yd8xv44s4shgwd";
+  })
+  (fetchNuGet {
+    name = "Microsoft.NETCore.DotNetHostPolicy";
+    version = "2.0.0";
+    sha256 = "1zz9yfzcvcai4il78s3phjp1hryib2zk3w2r16v3fxm2yllssyaf";
+  })
+  (fetchNuGet {
+    name = "Microsoft.NETCore.DotNetHostResolver";
+    version = "2.0.0";
+    sha256 = "0xy45xqmdqz7r6v0g8m7c1rp761ghavjl8nzxiyrpbp0wccxl3xb";
+  })
+  (fetchNuGet {
+    name = "Microsoft.NETCore.Platforms";
+    version = "5.0.0";
+    sha256 = "0mwpwdflidzgzfx2dlpkvvnkgkr2ayaf0s80737h4wa35gaj11rc";
+  })
+  (fetchNuGet {
+    name = "Microsoft.Win32.Registry";
+    version = "5.0.0";
+    sha256 = "102hvhq2gmlcbq8y2cb7hdr2dnmjzfp2k3asr1ycwrfacwyaak7n";
+  })
+  (fetchNuGet {
+    name = "NETStandard.Library";
+    version = "2.0.0";
+    sha256 = "1bc4ba8ahgk15m8k4nd7x406nhi0kwqzbgjk2dmw52ss553xz7iy";
+  })
+  (fetchNuGet {
+    name = "System.Collections.Immutable";
+    version = "1.7.1";
+    sha256 = "1nh4nlxfc7lbnbl86wwk1a3jwl6myz5j6hvgh5sp4krim9901hsq";
+  })
+  (fetchNuGet {
+    name = "System.Memory";
+    version = "4.5.4";
+    sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y";
+  })
+  (fetchNuGet {
+    name = "System.Reflection.Emit";
+    version = "4.7.0";
+    sha256 = "121l1z2ypwg02yz84dy6gr82phpys0njk7yask3sihgy214w43qp";
+  })
+  (fetchNuGet {
+    name = "System.Reflection.Emit.Lightweight";
+    version = "4.7.0";
+    sha256 = "0mbjfajmafkca47zr8v36brvknzks5a7pgb49kfq2d188pyv6iap";
+  })
+  (fetchNuGet {
+    name = "System.Runtime.CompilerServices.Unsafe";
+    version = "4.5.3";
+    sha256 = "1afi6s2r1mh1kygbjmfba6l4f87pi5sg13p4a48idqafli94qxln";
+  })
+  (fetchNuGet {
+    name = "System.Security.AccessControl";
+    version = "5.0.0";
+    sha256 = "17n3lrrl6vahkqmhlpn3w20afgz09n7i6rv0r3qypngwi7wqdr5r";
+  })
+  (fetchNuGet {
+    name = "System.Security.Principal.Windows";
+    version = "5.0.0";
+    sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8";
+  })
+]
diff --git a/pkgs/tools/misc/desktop-file-utils/default.nix b/pkgs/tools/misc/desktop-file-utils/default.nix
index 045e199e3ae..da87d048b70 100644
--- a/pkgs/tools/misc/desktop-file-utils/default.nix
+++ b/pkgs/tools/misc/desktop-file-utils/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchurl, pkgconfig, glib, libintl }:
+{ lib, stdenv, fetchurl, pkg-config, glib, libintl }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   pname = "desktop-file-utils";
@@ -11,9 +11,14 @@ stdenv.mkDerivation rec {
     sha256 = "1nc3bwjdrpcrkbdmzvhckq0yngbcxspwj2n1r7jr3gmx1jk5vpm1";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ glib libintl ];
 
+  postPatch = ''
+    substituteInPlace src/install.c \
+      --replace \"update-desktop-database\" \"$out/bin/update-desktop-database\"
+  '';
+
   setupHook = ./setup-hook.sh;
 
   meta = {
diff --git a/pkgs/tools/misc/detox/default.nix b/pkgs/tools/misc/detox/default.nix
index 85bed63c7f9..6aa66b349dc 100644
--- a/pkgs/tools/misc/detox/default.nix
+++ b/pkgs/tools/misc/detox/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, flex}:
+{lib, stdenv, fetchurl, flex}:
 
 stdenv.mkDerivation {
   name = "detox-1.2.0";
@@ -16,7 +16,7 @@ stdenv.mkDerivation {
     install -m644 safe.tbl $out/share/detox/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://detox.sourceforge.net/";
     description = "Utility designed to clean up filenames";
     longDescription = ''
diff --git a/pkgs/tools/misc/dgoss/default.nix b/pkgs/tools/misc/dgoss/default.nix
new file mode 100644
index 00000000000..5af576b3877
--- /dev/null
+++ b/pkgs/tools/misc/dgoss/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, fetchFromGitHub
+, resholvePackage
+, substituteAll
+, bash
+, coreutils
+, goss
+, which
+}:
+
+resholvePackage rec {
+  pname = "dgoss";
+  version = "0.3.16";
+
+  src = fetchFromGitHub {
+    owner = "aelsabbahy";
+    repo = "goss";
+    rev = "v${version}";
+    sha256 = "1m5w5vwmc9knvaihk61848rlq7qgdyylzpcwi64z84rkw8qdnj6p";
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    sed -i '2i GOSS_PATH=${goss}/bin/goss' extras/dgoss/dgoss
+    install -D extras/dgoss/dgoss $out/bin/dgoss
+  '';
+
+  solutions = {
+    default = {
+      scripts = [ "bin/dgoss" ];
+      interpreter = "${bash}/bin/bash";
+      inputs = [ coreutils which ];
+      fake = {
+        external = [ "docker" ];
+      };
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/aelsabbahy/goss/blob/v${version}/extras/dgoss/README.md";
+    description = "Convenience wrapper around goss that aims to bring the simplicity of goss to docker containers";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ hyzual ];
+  };
+}
diff --git a/pkgs/tools/misc/dialog/default.nix b/pkgs/tools/misc/dialog/default.nix
new file mode 100644
index 00000000000..744f55aed10
--- /dev/null
+++ b/pkgs/tools/misc/dialog/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchurl
+, ncurses
+, withLibrary ? false, libtool
+, unicodeSupport ? true
+, enableShared ? !stdenv.isDarwin
+}:
+
+assert withLibrary -> libtool != null;
+assert unicodeSupport -> ncurses.unicode && ncurses != null;
+
+stdenv.mkDerivation rec {
+  pname = "dialog";
+  version = "1.3-20210324";
+
+  src = fetchurl {
+    url = "ftp://ftp.invisible-island.net/dialog/${pname}-${version}.tgz";
+    hash = "sha256-AcLR4umvmwg+ogDKrQhP39pVF41bv05Cyf/0STUVFlM=";
+  };
+
+  buildInputs = [
+    ncurses
+  ];
+
+  configureFlags = [
+    "--disable-rpath-hacks"
+    (lib.withFeature withLibrary "libtool")
+    "--with-ncurses${lib.optionalString unicodeSupport "w"}"
+    "--with-libtool-opts=${lib.optionalString enableShared "-shared"}"
+  ];
+
+  installTargets = [ "install${lib.optionalString withLibrary "-full"}" ];
+
+  meta = with lib; {
+    homepage = "https://invisible-island.net/dialog/dialog.html";
+    description = "Display dialog boxes from shell";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ AndersonTorres spacefrogg ];
+    platforms = ncurses.meta.platforms;
+  };
+}
diff --git a/pkgs/tools/misc/diffoscope/default.nix b/pkgs/tools/misc/diffoscope/default.nix
index 324b31a186b..629c8accfb9 100644
--- a/pkgs/tools/misc/diffoscope/default.nix
+++ b/pkgs/tools/misc/diffoscope/default.nix
@@ -1,33 +1,25 @@
-{ lib, stdenv, fetchurl, runCommand, makeWrapper, python3Packages, docutils, help2man
-, abootimg, acl, apktool, binutils-unwrapped, build-tools, bzip2, cbfstool, cdrkit, colord, colordiff, coreutils, cpio, db, diffutils, dtc
+{ lib, stdenv, fetchurl, python3Packages, docutils, help2man, installShellFiles
+, abootimg, acl, apksigner, apktool, binutils-unwrapped, bzip2, cbfstool, cdrkit, colord, colordiff, coreutils, cpio, db, diffutils, dtc
 , e2fsprogs, file, findutils, fontforge-fonttools, ffmpeg, fpc, gettext, ghc, ghostscriptX, giflib, gnumeric, gnupg, gnutar
 , gzip, hdf5, imagemagick, jdk, libarchive, libcaca, llvm, lz4, mono, openssh, openssl, pdftk, pgpdump, poppler_utils, qemu, R
-, sng, sqlite, squashfsTools, tcpdump, odt2txt, unzip, wabt, xxd, xz, zip, zstd
+, radare2, sng, sqlite, squashfsTools, tcpdump, odt2txt, unzip, wabt, xxd, xz, zip, zstd
 , enableBloat ? false
 }:
 
 # Note: when upgrading this package, please run the list-missing-tools.sh script as described below!
-let
-  apksigner = runCommand "apksigner" { nativeBuildInputs = [ makeWrapper ]; } ''
-    mkdir -p $out/bin
-    makeWrapper "${jdk}/bin/java" "$out/bin/apksigner" \
-      --add-flags "-jar ${builtins.head build-tools}/libexec/android-sdk/build-tools/28.0.3/lib/apksigner.jar"
-  '';
-in
 python3Packages.buildPythonApplication rec {
   pname = "diffoscope";
-  version = "156";
+  version = "178";
 
   src = fetchurl {
-    url    = "https://diffoscope.org/archive/diffoscope-${version}.tar.bz2";
-    sha256 = "1irmsa0g0hggxijqyy7mghc8zy82cr6zn8qil253pm426j7gf7vm";
+    url = "https://diffoscope.org/archive/diffoscope-${version}.tar.bz2";
+    sha256 = "sha256-uJbTQshf7vRd6EyaaV0itJVrMc/6o+pPXhtUgrjFnzM=";
   };
 
   outputs = [ "out" "man" ];
 
   patches = [
     ./ignore_links.patch
-    ./skip-failing-test.patch
   ];
 
   postPatch = ''
@@ -38,7 +30,7 @@ python3Packages.buildPythonApplication rec {
     substituteInPlace doc/Makefile --replace "../bin" "$out/bin"
   '';
 
-  nativeBuildInputs = [ docutils help2man ];
+  nativeBuildInputs = [ docutils help2man installShellFiles ];
 
   # 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
@@ -57,18 +49,26 @@ python3Packages.buildPythonApplication rec {
     ++ lib.optionals stdenv.isLinux [ python3Packages.pyxattr acl cdrkit ]
     ++ lib.optionals enableBloat ([
       abootimg apksigner apktool cbfstool colord ffmpeg fpc ghc ghostscriptX giflib gnupg gnumeric
-      hdf5 imagemagick llvm jdk mono odt2txt openssh pdftk poppler_utils qemu R tcpdump wabt
+      hdf5 imagemagick llvm jdk mono odt2txt openssh pdftk poppler_utils qemu R tcpdump wabt radare2
     ] ++ (with python3Packages; [ binwalk guestfs h5py ]));
 
-  checkInputs = with python3Packages; [ pytest ] ++ pythonPath;
+  checkInputs = with python3Packages; [ pytestCheckHook ] ++ pythonPath;
 
   postInstall = ''
     make -C doc
-    mkdir -p $out/share/man/man1
-    cp doc/diffoscope.1 $out/share/man/man1/diffoscope.1
+    installManPage doc/diffoscope.1
   '';
 
-  meta = with stdenv.lib; {
+  # Disable flaky test and a failing one
+  disabledTests = [
+    "test_android_manifest"
+    "test_sbin_added_to_path"
+    "test_diff_meta"
+    "test_diff_meta2"
+    "test_obj_no_differences"
+  ];
+
+  meta = with 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
@@ -80,9 +80,9 @@ python3Packages.buildPythonApplication rec {
       diffoscope is developed as part of the "reproducible builds" Debian
       project and was formerly known as "debbindiff".
     '';
-    homepage    = "https://diffoscope.org/";
-    license     = licenses.gpl3Plus;
+    homepage = "https://diffoscope.org/";
+    license = licenses.gpl3Plus;
     maintainers = with maintainers; [ dezgeg ma27 danielfullmer ];
-    platforms   = platforms.unix;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/diffoscope/skip-failing-test.patch b/pkgs/tools/misc/diffoscope/skip-failing-test.patch
deleted file mode 100644
index bf871d295bd..00000000000
--- a/pkgs/tools/misc/diffoscope/skip-failing-test.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/tests/test_tools.py b/tests/test_tools.py
-index f0010678..1c3c7ce1 100644
---- a/tests/test_tools.py
-+++ b/tests/test_tools.py
-@@ -21,6 +21,7 @@ import os
- import pytest
- 
- 
-+@pytest.mark.skip()
- def test_sbin_added_to_path():
-     from diffoscope.tools import tool_required
- 
diff --git a/pkgs/tools/misc/digitemp/default.nix b/pkgs/tools/misc/digitemp/default.nix
new file mode 100644
index 00000000000..adf23e4bdf5
--- /dev/null
+++ b/pkgs/tools/misc/digitemp/default.nix
@@ -0,0 +1,53 @@
+{ fetchFromGitHub, lib, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "digitemp";
+  version = "3.7.2";
+
+  src = fetchFromGitHub {
+    owner = "bcl";
+    repo = "digitemp";
+    rev = "v${version}";
+    sha256 = "19zka5fcdxhhginaspak76l984iqq9v2j6qrwvi5mvca7bcj8f72";
+  };
+
+  enableParallelBuilding = true;
+
+  makeFlags = [
+    "LOCK=no"
+    "ds9097"
+    "ds9097u"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D -m555 -t $out/bin digitemp_*
+    install -D -m444 -t $out/share/doc/${pname} FAQ README
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Temperature logging and reporting using Maxim's iButtons and 1-Wire protocol";
+    longDescription = ''
+      DigiTemp is a command line application used for reading 1-wire sensors like
+      the DS18S20 temperature sensor, or DS2438 battery monitor. DigiTemp supports
+      the following devices:
+
+        DS18S20 (and older DS1820) Temperature Sensor
+        DS18B20 Temperature Sensor
+        DS1822 Temperature Sensor
+        DS2438 Battery monitor
+        DS2409 1-wire coupler (used in 1-wire hubs)
+        DS2422 Counter
+        DS2423 Counter
+
+      The output format can be customized and all settings are stored in a
+      configuration file (.digitemprc) in the current directory. DigiTemp can
+      repeatedly read the sensors and output to stdout and/or to a logfile.
+    '';
+    homepage = "https://www.digitemp.com";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ zseri ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/dijo/default.nix b/pkgs/tools/misc/dijo/default.nix
index da504ad3ba3..606bba0dff9 100644
--- a/pkgs/tools/misc/dijo/default.nix
+++ b/pkgs/tools/misc/dijo/default.nix
@@ -1,19 +1,19 @@
 { stdenv, lib, rustPlatform, fetchFromGitHub, ncurses, CoreServices }:
-let version = "0.2.3"; in
-rustPlatform.buildRustPackage {
+
+rustPlatform.buildRustPackage rec {
   pname = "dijo";
-  inherit version;
+  version = "0.2.7";
   buildInputs = [ ncurses ] ++ lib.optional stdenv.isDarwin CoreServices;
   src = fetchFromGitHub {
     owner = "NerdyPepper";
     repo = "dijo";
     rev = "v${version}";
-    sha256 = "1lcvj0pri5v64zygkf2p24vr72y39agrq1r3kb8dfgz8yy3vcz0a";
+    sha256 = "sha256-g+A8BJxqoAvm9LTLrLnClVGtFJCQ2gT0mDGAov/6vXE=";
   };
-  cargoSha256 = "0pm048xf8hkva8q8fjmhrdnk7h2im28ix7xy784xwkkdnilm4j7f";
+  cargoSha256 = "sha256-o3+KcE7ozu6eUgwsOSr9DOoIo+/BZ3bJZe+WYQLXHpY=";
 
   meta = with lib; {
-    description = "Scriptable, curses-based, digital habit tracker.";
+    description = "Scriptable, curses-based, digital habit tracker";
     homepage = "https://github.com/NerdyPepper/dijo";
     license = licenses.mit;
     maintainers = with maintainers; [ infinisil ];
diff --git a/pkgs/tools/misc/ding-libs/default.nix b/pkgs/tools/misc/ding-libs/default.nix
index deb70d082d9..8bb2c287268 100644
--- a/pkgs/tools/misc/ding-libs/default.nix
+++ b/pkgs/tools/misc/ding-libs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, check }:
+{ lib, stdenv, fetchurl, check }:
 
 stdenv.mkDerivation rec {
   pname = "ding-libs";
@@ -17,8 +17,8 @@ stdenv.mkDerivation rec {
   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 ];
+    platforms = with lib.platforms; linux;
+    maintainers = with lib.maintainers; [ e-user ];
+    license = [ lib.licenses.gpl3 lib.licenses.lgpl3 ];
   };
 }
diff --git a/pkgs/tools/misc/direnv/default.nix b/pkgs/tools/misc/direnv/default.nix
index 1096cce496e..5fa6b8db60e 100644
--- a/pkgs/tools/misc/direnv/default.nix
+++ b/pkgs/tools/misc/direnv/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchFromGitHub, buildGoModule, bash, fish, zsh }:
+{ lib, stdenv, fetchFromGitHub, buildGoModule, bash, fish, zsh }:
 
 buildGoModule rec {
   pname = "direnv";
-  version = "2.21.3";
-
-  vendorSha256 = null;
+  version = "2.28.0";
 
   src = fetchFromGitHub {
     owner = "direnv";
     repo = "direnv";
     rev = "v${version}";
-    sha256 = "1adi6ld9g4zgz0f6q0kkzrywclqrmikyp7yh22zm9lfdvd5hs8wp";
+    sha256 = "sha256-iZ3Lf7Yg+N9BWyLLF+MrT2gpPT9BTcp6pNMpfqwcZXo=";
   };
 
+  vendorSha256 = "sha256-P8NLY1iGh86ntmYsTVlnNh5akdaM8nzcxDn6Nfmgr84=";
+
   # we have no bash at the moment for windows
   BASH_PATH =
-    stdenv.lib.optionalString (!stdenv.hostPlatform.isWindows)
+    lib.optionalString (!stdenv.hostPlatform.isWindows)
     "${bash}/bin/bash";
 
   # replace the build phase to use the GNUMakefile instead
@@ -24,9 +24,7 @@ buildGoModule rec {
   '';
 
   installPhase = ''
-    make install DESTDIR=$out
-    mkdir -p $out/share/fish/vendor_conf.d
-    echo "eval ($out/bin/direnv hook fish)" > $out/share/fish/vendor_conf.d/direnv.fish
+    make install PREFIX=$out
   '';
 
   checkInputs = [ fish zsh ];
@@ -36,7 +34,7 @@ buildGoModule rec {
     make test-go test-bash test-fish test-zsh
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A shell extension that manages your environment";
     longDescription = ''
       Once hooked into your shell direnv is looking for an .envrc file in your
diff --git a/pkgs/tools/misc/discocss/default.nix b/pkgs/tools/misc/discocss/default.nix
new file mode 100644
index 00000000000..f847f615756
--- /dev/null
+++ b/pkgs/tools/misc/discocss/default.nix
@@ -0,0 +1,28 @@
+{ stdenvNoCC, lib, fetchFromGitHub }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "discocss";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "mlvzk";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-afmQCOOZ1MwQkbZZNHYfq2+IRv2eOtYBrGVHzDEbUHw=";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    install -Dm755 ./discocss $out/bin/discocss
+  '';
+
+  meta = with lib; {
+    description = "A tiny Discord css-injector";
+    changelog = "https://github.com/mlvzk/discocss/releases/tag/v${version}";
+    homepage = "https://github.com/mlvzk/discocss";
+    license = licenses.mpl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ mlvzk ];
+  };
+}
diff --git a/pkgs/tools/misc/disfetch/default.nix b/pkgs/tools/misc/disfetch/default.nix
new file mode 100644
index 00000000000..27407987d85
--- /dev/null
+++ b/pkgs/tools/misc/disfetch/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, lib
+, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "disfetch";
+  version = "2.2";
+
+  src = fetchFromGitHub {
+    owner = "llathasa-veleth";
+    repo = "disfetch";
+    rev = version;
+    sha256 = "sha256-93nh1MDE2YO53lH2jDdKxgHh6v2KkAFo2Oyg+6ZpD+M=";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    install -Dm755 -t $out/bin disfetch
+  '';
+
+  meta = with lib; {
+    description = "Yet another *nix distro fetching program, but less complex";
+    homepage = "https://github.com/llathasa-veleth/disfetch";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.vel ];
+  };
+}
diff --git a/pkgs/tools/misc/diskonaut/default.nix b/pkgs/tools/misc/diskonaut/default.nix
index 1eb3dd7a0f7..058a0d1ad6f 100644
--- a/pkgs/tools/misc/diskonaut/default.nix
+++ b/pkgs/tools/misc/diskonaut/default.nix
@@ -1,19 +1,19 @@
-{ stdenv, rustPlatform, fetchFromGitHub }:
+{ lib, rustPlatform, fetchFromGitHub }:
 
 rustPlatform.buildRustPackage rec {
   pname = "diskonaut";
-  version = "0.9.0";
+  version = "0.11.0";
 
   src = fetchFromGitHub {
     owner = "imsnif";
     repo = "diskonaut";
     rev = version;
-    sha256 = "125ba9qwh7j8bz74w2zbw729s1wfnjg6dg8yicqrp6559x9k7gq5";
+    sha256 = "1pmbag3r2ka30zmy2rs9jps2qxj2zh0gy4a774v9yhf0b6qjid54";
   };
 
-  cargoSha256 = "0vvbrlmviyn9w8i416767vhvd1gqm3qjvia730m0rs0w5h8khiqf";
+  cargoSha256 = "10jrcy8m9ll4136ghq3fhmnphd9g3rw863x708vm17n44kgdxyab";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Terminal disk space navigator";
     homepage = "https://github.com/imsnif/diskonaut";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/diskscan/default.nix b/pkgs/tools/misc/diskscan/default.nix
index 204b7b4cf8d..265218dfcfd 100644
--- a/pkgs/tools/misc/diskscan/default.nix
+++ b/pkgs/tools/misc/diskscan/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, ncurses, zlib }:
+{ lib, stdenv, fetchFromGitHub, cmake, ncurses, zlib }:
 
 stdenv.mkDerivation rec {
   pname = "diskscan";
@@ -15,12 +15,11 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ cmake ];
 
-  meta = with stdenv.lib; {
+  meta = with 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/pkgs/tools/misc/diskus/default.nix b/pkgs/tools/misc/diskus/default.nix
index b3fbc6377ab..a645525da27 100644
--- a/pkgs/tools/misc/diskus/default.nix
+++ b/pkgs/tools/misc/diskus/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
 
 rustPlatform.buildRustPackage rec {
   pname = "diskus";
@@ -11,11 +11,11 @@ rustPlatform.buildRustPackage rec {
     sha256 = "087w58q5kd3r23a9qnhqgvq4vhv69b5a6a7n3kh09g5cjszy8s05";
   };
 
-  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ Security ];
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
 
-  cargoSha256 = "0bivmjn7h4lfp5azbc6q0xiqq3fk68jdd4kwrwgbxiljg4xd2qy8";
+  cargoSha256 = "1irgj8kna4mwrp91s3ccbfwv2kdkjl89865y88s8v6zd9wzj3c8q";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A minimal, fast alternative to 'du -sh'";
     homepage = "https://github.com/sharkdp/diskus";
     license = with licenses; [ asl20 /* or */ mit ];
diff --git a/pkgs/tools/misc/disper/default.nix b/pkgs/tools/misc/disper/default.nix
index 6ba446d7bc0..3e78bc97732 100644
--- a/pkgs/tools/misc/disper/default.nix
+++ b/pkgs/tools/misc/disper/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python, xorg, makeWrapper }:
+{ lib, stdenv, fetchFromGitHub, python2, xorg, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "disper";
@@ -13,7 +13,9 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ makeWrapper ];
 
-  buildInputs = [ python ];
+  strictDeps = true;
+
+  buildInputs = [ python2 ];
 
   preConfigure = ''
     export makeFlags="PREFIX=$out"
@@ -21,14 +23,14 @@ stdenv.mkDerivation rec {
 
   postInstall = ''
       wrapProgram $out/bin/disper \
-        --prefix "LD_LIBRARY_PATH" : "${stdenv.lib.makeLibraryPath [ xorg.libXrandr xorg.libX11 ]}"
+        --prefix "LD_LIBRARY_PATH" : "${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;
+    homepage = "https://willem.engen.nl/projects/disper/";
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl3;
   };
 
 }
diff --git a/pkgs/tools/misc/dmg2img/default.nix b/pkgs/tools/misc/dmg2img/default.nix
index 267983dd432..a3f023e2ad5 100644
--- a/pkgs/tools/misc/dmg2img/default.nix
+++ b/pkgs/tools/misc/dmg2img/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, zlib, bzip2, openssl, fetchpatch }:
+{ lib, stdenv, fetchurl, zlib, bzip2, openssl, fetchpatch }:
 
 stdenv.mkDerivation rec {
   name = "dmg2img-1.6.7";
@@ -25,8 +25,8 @@ stdenv.mkDerivation rec {
   '';
 
   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;
+    platforms = lib.platforms.unix;
+    description = "An Apple's compressed dmg to standard (hfsplus) image disk file convert tool";
+    license = lib.licenses.gpl3;
   };
 }
diff --git a/pkgs/tools/misc/docbook2mdoc/default.nix b/pkgs/tools/misc/docbook2mdoc/default.nix
index 2237d009d43..9a4352d3267 100644
--- a/pkgs/tools/misc/docbook2mdoc/default.nix
+++ b/pkgs/tools/misc/docbook2mdoc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, expat }:
+{ lib, stdenv, fetchurl, expat }:
 
 stdenv.mkDerivation rec {
   pname = "docbook2mdoc";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://mdocml.bsd.lv/";
     description = "converter from DocBook V4.x and v5.x XML into mdoc";
     license = licenses.isc;
diff --git a/pkgs/tools/misc/docker-ls/default.nix b/pkgs/tools/misc/docker-ls/default.nix
index 8522256c7d5..a56107ebce1 100644
--- a/pkgs/tools/misc/docker-ls/default.nix
+++ b/pkgs/tools/misc/docker-ls/default.nix
@@ -1,19 +1,19 @@
-{ buildGoPackage, fetchFromGitHub, stdenv, docker }:
+{ buildGoModule, fetchFromGitHub, lib, docker }:
 
-buildGoPackage rec {
+buildGoModule rec {
   pname = "docker-ls";
-  version = "0.3.2";
+  version = "0.5.1";
 
   src = fetchFromGitHub {
     owner = "mayflower";
     repo = "docker-ls";
     rev = "v${version}";
-    sha256 = "1hb9b0jhaf01zlmkm353mz608kwb79dzic3gvb2fhyrh8d17w2iv";
+    sha256 = "sha256-4+REt0NH4S367qFsyJncVedUrC4t1zw5o0CLTiQfIz8=";
   };
 
-  goPackagePath = "github.com/mayflower/docker-ls";
+  vendorSha256 = "sha256-UulcjQOLEIP++eoYQTEIbCJW51jyE312dMxB8+AKcdU=";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tools for browsing and manipulating docker registries";
     longDescription = ''
       Docker-ls is a set of CLI tools for browsing and manipulating docker registries.
diff --git a/pkgs/tools/misc/docker-sync/gemset.nix b/pkgs/tools/misc/docker-sync/gemset.nix
index 739d11c7b5a..aef4d9928ab 100644
--- a/pkgs/tools/misc/docker-sync/gemset.nix
+++ b/pkgs/tools/misc/docker-sync/gemset.nix
@@ -73,4 +73,4 @@
     };
     version = "0.20.3";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/misc/docui/default.nix b/pkgs/tools/misc/docui/default.nix
index 73aa8984a49..a1b2ad662bc 100644
--- a/pkgs/tools/misc/docui/default.nix
+++ b/pkgs/tools/misc/docui/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "docui";
@@ -15,7 +15,7 @@ buildGoModule rec {
 
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "TUI Client for Docker";
     homepage = "https://github.com/skanehira/docui";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/doitlive/default.nix b/pkgs/tools/misc/doitlive/default.nix
index 3c0406a4ea0..9edc078d9f9 100644
--- a/pkgs/tools/misc/doitlive/default.nix
+++ b/pkgs/tools/misc/doitlive/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3Packages }:
+{ lib, python3Packages }:
 
 python3Packages.buildPythonApplication rec {
   pname = "doitlive";
@@ -14,7 +14,7 @@ python3Packages.buildPythonApplication rec {
   # disable tests (too many failures)
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tool for live presentations in the terminal";
     homepage = "https://pypi.python.org/pypi/doitlive";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/dpt-rp1-py/default.nix b/pkgs/tools/misc/dpt-rp1-py/default.nix
index 69b689fb824..52038c8efa9 100644
--- a/pkgs/tools/misc/dpt-rp1-py/default.nix
+++ b/pkgs/tools/misc/dpt-rp1-py/default.nix
@@ -1,24 +1,32 @@
 { lib, python3Packages, fetchFromGitHub }:
 python3Packages.buildPythonApplication rec {
   pname = "dpt-rp1-py";
-  version = "unstable-2018-10-16";
+  version = "0.1.13";
 
   src = fetchFromGitHub {
     owner = "janten";
     repo = pname;
-    rev = "4551b4432f8470de5f2ad9171105f731a6259395";
-    sha256 = "176y5j31aci1vpi8v6r5ki55432fbdsazh9bsyzr90im9zimkffl";
+    rev = "v${version}";
+    sha256 = "1jgkfn5kfnx98xs0dmym1h9mv1mrzlglk7x0fzs2jlc56c18w9dk";
   };
 
   doCheck = false;
 
   propagatedBuildInputs = with python3Packages; [
+    anytree
+    fusepy
     httpsig
-    requests
     pbkdf2
+    pyyaml
+    requests
+    setuptools
+    tqdm
     urllib3
+    zeroconf
   ];
 
+  pythonImportsCheck = [ "dptrp1" ];
+
   meta = with lib; {
     homepage = "https://github.com/janten/dpt-rp1-py";
     description = "Python script to manage Sony DPT-RP1 without Digital Paper App";
diff --git a/pkgs/tools/misc/dtach/default.nix b/pkgs/tools/misc/dtach/default.nix
index 9973eddc7ef..f036ba9ea3e 100644
--- a/pkgs/tools/misc/dtach/default.nix
+++ b/pkgs/tools/misc/dtach/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "dtach";
@@ -27,9 +27,9 @@ stdenv.mkDerivation rec {
       themselves.
     '';
 
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
 
-    platforms = stdenv.lib.platforms.unix;
+    platforms = lib.platforms.unix;
     maintainers = [ ];
   };
 }
diff --git a/pkgs/tools/misc/dua/default.nix b/pkgs/tools/misc/dua/default.nix
index b4cdde95b80..1d11f3c8deb 100644
--- a/pkgs/tools/misc/dua/default.nix
+++ b/pkgs/tools/misc/dua/default.nix
@@ -1,14 +1,16 @@
-{ lib, rustPlatform, fetchFromGitHub }:
+{ lib, stdenv, rustPlatform, fetchFromGitHub, libiconv, Foundation }:
 
 rustPlatform.buildRustPackage rec {
   pname = "dua";
-  version = "2.10.2";
+  version = "2.14.3";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Foundation ];
 
   src = fetchFromGitHub {
     owner = "Byron";
     repo = "dua-cli";
     rev = "v${version}";
-    sha256 = "0qsk4pa7xywd6fdwd5v4qwj334hyp3xjlayjzgyhks7a87hdwjgs";
+    sha256 = "sha256-Tste5DdUwCu1CNRzIcBEvyckrvhEg9C8M3y89luIMbE=";
     # Remove unicode file names which leads to different checksums on HFS+
     # vs. other filesystems because of unicode normalisation.
     extraPostFetch = ''
@@ -16,7 +18,7 @@ rustPlatform.buildRustPackage rec {
     '';
   };
 
-  cargoSha256 = "02wd4cw9hd8d96szwx8yxz6bll60f7w1z0xiz7k1h8h12mriaz4w";
+  cargoSha256 = "sha256-iHRPgQtanW2LcFLPPHmr2n1NeAPi0mDmHNeIv524lrM=";
 
   doCheck = false;
 
diff --git a/pkgs/tools/misc/duc/default.nix b/pkgs/tools/misc/duc/default.nix
index 74dd2a34cc4..b5fe5074d7e 100644
--- a/pkgs/tools/misc/duc/default.nix
+++ b/pkgs/tools/misc/duc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
 , tokyocabinet, ncurses
 , cairo ? null, pango ? null
 , enableCairo ? stdenv.isLinux
@@ -17,19 +17,19 @@ stdenv.mkDerivation rec {
     sha256 = "1i7ry25xzy027g6ysv6qlf09ax04q4vy0kikl8h0aq5jbxsl9q52";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ tokyocabinet ncurses ] ++
-    stdenv.lib.optionals enableCairo [ cairo pango ];
+    lib.optionals enableCairo [ cairo pango ];
 
   configureFlags =
-    stdenv.lib.optionals (!enableCairo) [ "--disable-x11" "--disable-cairo" ];
+    lib.optionals (!enableCairo) [ "--disable-x11" "--disable-cairo" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = [ ];
   };
 }
diff --git a/pkgs/tools/misc/duf/default.nix b/pkgs/tools/misc/duf/default.nix
new file mode 100644
index 00000000000..076eb33fbb1
--- /dev/null
+++ b/pkgs/tools/misc/duf/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "duf";
+  version = "0.6.2";
+
+  src = fetchFromGitHub {
+    owner = "muesli";
+    repo = "duf";
+    rev = "v${version}";
+    sha256 = "sha256-aRXm31sGHvHPpqPck5+jplbWT52OzaiQIgU/C7llJs8=";
+  };
+
+  vendorSha256 = "153z0ccd556c0wpnxgyjq7m0c4y2z6fxsqq2p77kly9nr8cpzdb9";
+
+  buildFlagsArray = [ "-ldflags=-s -w -X=main.Version=${version}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/muesli/duf/";
+    description = "Disk Usage/Free Utility";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ petabyteboy penguwin SuperSandro2000 ];
+  };
+}
diff --git a/pkgs/tools/misc/dumptorrent/default.nix b/pkgs/tools/misc/dumptorrent/default.nix
index 146ab54dd62..12232c414fd 100644
--- a/pkgs/tools/misc/dumptorrent/default.nix
+++ b/pkgs/tools/misc/dumptorrent/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
     pname = "dumptorrent";
     version = "1.2";
-    
+
     src = fetchurl {
       url = "mirror://sourceforge/dumptorrent/dumptorrent-${version}.tar.gz";
       sha256 = "073h03bmpfdy15qh37lvppayld2747i4acpyk0pm5nf2raiak0zm";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
       cp ./dumptorrent $out/bin
     '';
 
-    meta = with stdenv.lib; {
+    meta = with lib; {
       description = "Dump .torrent file information";
       homepage = "https://sourceforge.net/projects/dumptorrent/";
       license = licenses.gpl2;
diff --git a/pkgs/tools/misc/dupd/default.nix b/pkgs/tools/misc/dupd/default.nix
index 4c8f5e2e2b1..87b39b3b704 100644
--- a/pkgs/tools/misc/dupd/default.nix
+++ b/pkgs/tools/misc/dupd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, perl, which
+{ lib, stdenv, fetchFromGitHub, perl, which
 , openssl, sqlite }:
 
 # Instead of writing directly into $HOME, we change the default db location
@@ -40,7 +40,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "CLI utility to find duplicate files";
     homepage = "http://www.virkki.com/dupd";
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/dust/default.nix b/pkgs/tools/misc/dust/default.nix
index 75e8d5d4887..85055ccba5e 100644
--- a/pkgs/tools/misc/dust/default.nix
+++ b/pkgs/tools/misc/dust/default.nix
@@ -1,29 +1,30 @@
-{ stdenv, fetchFromGitHub, rustPlatform }:
+{ lib, fetchFromGitHub, rustPlatform }:
 
 rustPlatform.buildRustPackage rec {
   pname = "du-dust";
-  version = "0.5.2";
+  version = "0.6.1";
 
   src = fetchFromGitHub {
     owner = "bootandy";
     repo = "dust";
     rev = "v${version}";
-    sha256 = "181xlm0zj9pb73ijwf202kwwm2jji0m11ynsbaxl44alva3xpvmk";
+    sha256 = "sha256-SgTEawxuz9gRxSZ9edNz2NwfJWSAwxKXxDJVpU6oTBg=";
     # Remove unicode file names which leads to different checksums on HFS+
     # vs. other filesystems because of unicode normalisation.
     extraPostFetch = ''
-      rm -rf $out/src/test_dir3/
+      rm -r $out/tests/test_dir_unicode/
     '';
   };
 
-  cargoSha256 = "1ypphm9n6wri5f03fj65i5p6lb11qj5zp8ddvybanaypv5llkfcb";
+  cargoSha256 = "sha256-/kDF1ZOzu32Dwd5fWZGhMlEf65TAKLMPFu+ZnZxOAms=";
 
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "du + rust = dust. Like du but more intuitive";
     homepage = "https://github.com/bootandy/dust";
     license = licenses.asl20;
-    maintainers = [ maintainers.infinisil ];
+    maintainers = with maintainers; [ infinisil SuperSandro2000 ];
+    mainProgram = "dust";
   };
 }
diff --git a/pkgs/tools/misc/dvtm/default.nix b/pkgs/tools/misc/dvtm/default.nix
index bedfebd9681..695187b3e84 100644
--- a/pkgs/tools/misc/dvtm/default.nix
+++ b/pkgs/tools/misc/dvtm/default.nix
@@ -16,4 +16,4 @@ callPackage ./dvtm.nix rec {
     })
   ];
 }
-    
+
diff --git a/pkgs/tools/misc/dvtm/dvtm.nix b/pkgs/tools/misc/dvtm/dvtm.nix
index 5bb8efb5540..9a42655b737 100644
--- a/pkgs/tools/misc/dvtm/dvtm.nix
+++ b/pkgs/tools/misc/dvtm/dvtm.nix
@@ -1,11 +1,11 @@
-{ stdenv, ncurses, customConfig ? null, name, src, patches ? [] }:
+{ lib, stdenv, ncurses, customConfig ? null, name, src, patches ? [] }:
 stdenv.mkDerivation {
 
   inherit name src patches;
 
-  CFLAGS = stdenv.lib.optionalString stdenv.isDarwin "-D_DARWIN_C_SOURCE";
+  CFLAGS = lib.optionalString stdenv.isDarwin "-D_DARWIN_C_SOURCE";
 
-  postPatch = stdenv.lib.optionalString (customConfig != null) ''
+  postPatch = lib.optionalString (customConfig != null) ''
     cp ${builtins.toFile "config.h" customConfig} ./config.h
   '';
 
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Dynamic virtual terminal manager";
     homepage = "http://www.brain-dump.org/projects/dvtm";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/dylibbundler/default.nix b/pkgs/tools/misc/dylibbundler/default.nix
deleted file mode 100644
index c4209442de8..00000000000
--- a/pkgs/tools/misc/dylibbundler/default.nix
+++ /dev/null
@@ -1,22 +0,0 @@
-{ 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/pkgs/tools/misc/dynamic-colors/default.nix b/pkgs/tools/misc/dynamic-colors/default.nix
index 6cb01f14a2c..c0ff0fec328 100644
--- a/pkgs/tools/misc/dynamic-colors/default.nix
+++ b/pkgs/tools/misc/dynamic-colors/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "dynamic-colors";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
       --replace /usr/share/dynamic-colors $out/share/dynamic-colors
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Change terminal colors on the fly";
     homepage    = "https://github.com/peterhoeg/dynamic-colors";
     license     = licenses.mit;
diff --git a/pkgs/tools/misc/edid-decode/default.nix b/pkgs/tools/misc/edid-decode/default.nix
index c755f73b118..f39fc1b5524 100644
--- a/pkgs/tools/misc/edid-decode/default.nix
+++ b/pkgs/tools/misc/edid-decode/default.nix
@@ -1,9 +1,8 @@
-{ stdenv, fetchgit }:
-let
-  version = "2018-12-06";
-in stdenv.mkDerivation {
+{ lib, stdenv, fetchgit }:
+
+stdenv.mkDerivation rec {
   pname = "edid-decode-unstable";
-  inherit version;
+  version = "unstable-2018-12-06";
 
   src = fetchgit {
     url = "git://linuxtv.org/edid-decode.git";
@@ -19,9 +18,9 @@ in stdenv.mkDerivation {
   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;
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.chiiruno ];
+    platforms = lib.platforms.all;
   };
 }
 
diff --git a/pkgs/tools/misc/edid-generator/default.nix b/pkgs/tools/misc/edid-generator/default.nix
index 49b6277faef..d3abb37b9f4 100644
--- a/pkgs/tools/misc/edid-generator/default.nix
+++ b/pkgs/tools/misc/edid-generator/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , dos2unix
 , edid-decode
@@ -6,11 +6,10 @@
 , zsh
 , modelines ? [] # Modeline "1280x800"   83.50  1280 1352 1480 1680  800 803 809 831 -hsync +vsync
 }:
-let
-  version = "unstable-2018-03-15";
-in stdenv.mkDerivation {
+
+stdenv.mkDerivation rec {
   pname = "edid-generator";
-  inherit version;
+  version = "unstable-2018-03-15";
 
   src = fetchFromGitHub {
     owner = "akatrevorjay";
@@ -25,7 +24,7 @@ in stdenv.mkDerivation {
     patchShebangs modeline2edid
   '';
 
-  configurePhase = (stdenv.lib.concatMapStringsSep "\n" (m: "echo \"${m}\" | ./modeline2edid -") modelines);
+  configurePhase = (lib.concatMapStringsSep "\n" (m: "echo \"${m}\" | ./modeline2edid -") modelines);
 
   installPhase = ''
     install -Dm 444 *.bin -t "$out/lib/firmware/edid"
@@ -34,8 +33,8 @@ in stdenv.mkDerivation {
   meta = {
     description = "Hackerswork to generate an EDID blob from given Xorg Modelines";
     homepage = "https://github.com/akatrevorjay/edid-generator";
-    license = stdenv.lib.licenses.mit;
-    maintainers = [ stdenv.lib.maintainers.flokli ];
-    platforms = stdenv.lib.platforms.all;
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.flokli ];
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/edir/default.nix b/pkgs/tools/misc/edir/default.nix
new file mode 100644
index 00000000000..7cd621be76a
--- /dev/null
+++ b/pkgs/tools/misc/edir/default.nix
@@ -0,0 +1,19 @@
+{ lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "edir";
+  version = "2.7.3";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "06nsy9ikljc437368l38hsw75whacn3j6jwmdgg766q61pnifhkp";
+  };
+
+  meta = with lib; {
+    description = "Program to rename and remove files and directories using your editor";
+    homepage = "https://github.com/bulletmark/edir";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ guyonvarch ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/misc/elfcat/Cargo.lock b/pkgs/tools/misc/elfcat/Cargo.lock
new file mode 100644
index 00000000000..c5b48135993
--- /dev/null
+++ b/pkgs/tools/misc/elfcat/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "elfcat"
+version = "0.1.4"
diff --git a/pkgs/tools/misc/elfcat/default.nix b/pkgs/tools/misc/elfcat/default.nix
new file mode 100644
index 00000000000..a9691e43c6a
--- /dev/null
+++ b/pkgs/tools/misc/elfcat/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "elfcat";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "ruslashev";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-gh5JO3vO2FpHiZfaHOODPhRSB9HqZe1ir4g7UEkSUHY=";
+  };
+
+  cargoLock.lockFile = ./Cargo.lock;
+
+  meta = with lib; {
+    description = "ELF visualizer, generates HTML files from ELF binaries.";
+    homepage = "https://github.com/ruslashev/elfcat";
+    license = licenses.zlib;
+    maintainers = with maintainers; [ fortuneteller2k ];
+  };
+}
diff --git a/pkgs/tools/misc/empty/0.6-Makefile.patch b/pkgs/tools/misc/empty/0.6-Makefile.patch
new file mode 100644
index 00000000000..6fb494cdf54
--- /dev/null
+++ b/pkgs/tools/misc/empty/0.6-Makefile.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile b/Makefile
+index 1fe4c41..2c69558 100644
+--- a/Makefile
++++ b/Makefile
+@@ -16,7 +16,7 @@ LIBS =	-lutil
+ PREFIX = /usr/local
+ 
+ all:
+-	${CC} ${CFLAGS} -Wall ${LIBS} -o empty empty.c
++	${CC} ${CFLAGS} -Wall -o empty empty.c ${LIBS}
+ 
+ FreeBSD:	all
+ NetBSD:		all
diff --git a/pkgs/tools/misc/empty/default.nix b/pkgs/tools/misc/empty/default.nix
new file mode 100644
index 00000000000..d8fa41ef02a
--- /dev/null
+++ b/pkgs/tools/misc/empty/default.nix
@@ -0,0 +1,46 @@
+{ fetchzip, lib, stdenv, which }:
+
+stdenv.mkDerivation rec {
+  pname = "empty";
+  version = "0.6.21b";
+
+  src = fetchzip {
+    url = "mirror://sourceforge/${pname}/${pname}/${pname}-${version}.tgz";
+    sha256 = "1rkixh2byr70pdxrwr4lj1ckh191rjny1m5xbjsa7nqw1fw6c2xs";
+    stripRoot = false;
+  };
+
+  patches = [
+    ./0.6-Makefile.patch
+  ];
+
+  nativeBuildInputs = [ which ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postPatch = ''
+    rm empty
+  '';
+
+  meta = with lib; {
+    homepage = "http://empty.sourceforge.net";
+    description = "A simple tool to automate interactive terminal applications";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    longDescription = ''
+      The empty utility provides an interface to execute and/or interact with
+      processes under pseudo-terminal sessions (PTYs). This tool is definitely
+      useful in programming of shell scripts designed to communicate with
+      interactive programs like telnet, ssh, ftp, etc. In some cases empty can
+      be the simplest replacement for TCL/expect or other similar programming
+      tools because empty:
+
+      - can be easily invoked directly from shell prompt or script
+      - does not use TCL, Perl, PHP, Python or anything else as an underlying language
+      - is written entirely in C
+      - has small and simple source code
+      - can easily be ported to almost all UNIX-like systems
+    '';
+    maintainers = [ maintainers.djwf ];
+  };
+}
diff --git a/pkgs/tools/misc/emv/default.nix b/pkgs/tools/misc/emv/default.nix
index 76ea8ceba0d..3e5a348c582 100644
--- a/pkgs/tools/misc/emv/default.nix
+++ b/pkgs/tools/misc/emv/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation {
   pname = "emv";
@@ -9,7 +9,7 @@ stdenv.mkDerivation {
     sha256 = "7e0e12afa45ef5ed8025e5f2c6deea0ff5f512644a721f7b1b95b63406a8f7ce";
   };
 
-  phases = [ "installPhase" ];
+  dontUnpack = true;
 
   installPhase = ''
     mkdir -pv $out/bin
@@ -20,7 +20,7 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.publicDomain;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/ent/default.nix b/pkgs/tools/misc/ent/default.nix
index 4ecb8fe488a..b0dc4f1e3df 100644
--- a/pkgs/tools/misc/ent/default.nix
+++ b/pkgs/tools/misc/ent/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, unzip}:
+{lib, stdenv, fetchurl, unzip}:
 
 stdenv.mkDerivation {
   name = "ent-1.1";
@@ -12,16 +12,16 @@ stdenv.mkDerivation {
   # case that happens when the archive doesn't have a subdirectory.
   setSourceRoot = "sourceRoot=`pwd`";
 
-  buildInputs = [ unzip ];
+  nativeBuildInputs = [ unzip ];
 
-  buildFlags = stdenv.lib.optional stdenv.cc.isClang "CC=clang";
+  buildFlags = lib.optional stdenv.cc.isClang "CC=clang";
 
   installPhase = ''
     mkdir -p $out/bin
     cp ent $out/bin/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Pseudorandom Number Sequence Test Program";
     homepage = "http://www.fourmilab.ch/random/";
     platforms = platforms.all;
diff --git a/pkgs/tools/misc/entr/default.nix b/pkgs/tools/misc/entr/default.nix
index 9bd9c2104f3..abfd12523db 100644
--- a/pkgs/tools/misc/entr/default.nix
+++ b/pkgs/tools/misc/entr/default.nix
@@ -1,14 +1,24 @@
-{ stdenv, fetchurl, coreutils, ncurses }:
+{ lib, stdenv, fetchurl, coreutils, ncurses, fetchpatch }:
 
 stdenv.mkDerivation rec {
   pname = "entr";
-  version = "4.6";
+  version = "4.9";
 
   src = fetchurl {
-    url = "http://entrproject.org/code/${pname}-${version}.tar.gz";
-    sha256 = "0vcflgagna2gdlpjsd6748c73j2829xlhm276mi838zl1n121phn";
+    url = "https://eradman.com/entrproject/code/${pname}-${version}.tar.gz";
+    sha256 = "sha256-4lak0vvkb2EyRggzukR+ZdfzW6nQsmXnxBUDl8xEBaI=";
   };
 
+  patches = lib.optionals stdenv.isDarwin [
+    # Fix v4.9 segfault on Darwin. remove with the next update
+    # https://github.com/eradman/entr/issues/74
+    (fetchpatch {
+      url = "https://github.com/eradman/entr/commit/468d77d45925abba826bb1dcda01487dbe37eb33.patch";
+      sha256 = "17kkcrsnac0pb930sf2kix71h4c7krzsrvz8pskx0vm39n1c9xfi";
+      includes = [ "entr.c" ];
+    })
+  ];
+
   postPatch = ''
     substituteInPlace Makefile.bsd --replace /bin/echo echo
     substituteInPlace entr.c --replace /bin/cat ${coreutils}/bin/cat
@@ -21,9 +31,10 @@ stdenv.mkDerivation rec {
   checkTarget = "test";
   installFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
-    homepage = "http://entrproject.org/";
+  meta = with lib; {
+    homepage = "https://eradman.com/entrproject/";
     description = "Run arbitrary commands when files change";
+    changelog = "https://github.com/eradman/entr/raw/${version}/NEWS";
     license = licenses.isc;
     platforms = platforms.all;
     maintainers = with maintainers; [ pSub synthetica ];
diff --git a/pkgs/tools/misc/envchain/default.nix b/pkgs/tools/misc/envchain/default.nix
new file mode 100644
index 00000000000..938beff3353
--- /dev/null
+++ b/pkgs/tools/misc/envchain/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, libedit, libsecret, ncurses, pkg-config, readline, Security }:
+
+stdenv.mkDerivation rec {
+  pname = "envchain";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "sorah";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0qxwiqhb8cg0zbn5p0mvnbyxx1xwvgiricrkjlvxz13sf2ngq87p";
+  };
+
+  postPatch = ''
+    sed -i -e "s|-ltermcap|-lncurses|" Makefile
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libsecret readline ]
+    ++ lib.optionals stdenv.isDarwin [ libedit ncurses Security ];
+
+  makeFlags = [ "DESTDIR=$(out)" ];
+
+  meta = with lib; {
+    description = "Set environment variables with macOS keychain or D-Bus secret service";
+    homepage = "https://github.com/sorah/envchain";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ bbigras ];
+  };
+}
diff --git a/pkgs/tools/misc/envdir-go/default.nix b/pkgs/tools/misc/envdir-go/default.nix
index 957f5941cb6..eafc71030ac 100644
--- a/pkgs/tools/misc/envdir-go/default.nix
+++ b/pkgs/tools/misc/envdir-go/default.nix
@@ -1,5 +1,5 @@
 # This file was generated by https://github.com/kamilchm/go2nix v1.2.1
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   version = "1.0.0";
@@ -16,12 +16,12 @@ buildGoPackage rec {
 
   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}")
+    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 ];
+    maintainers = with lib.maintainers; [ edude03 ];
   };
 }
diff --git a/pkgs/tools/misc/eot-utilities/default.nix b/pkgs/tools/misc/eot-utilities/default.nix
index 546ad8d3d7d..516c9e42617 100644
--- a/pkgs/tools/misc/eot-utilities/default.nix
+++ b/pkgs/tools/misc/eot-utilities/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, pkgconfig }:
+{lib, stdenv, fetchurl, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "eot_utilities";
@@ -9,13 +9,13 @@ stdenv.mkDerivation rec {
     sha256 = "0cb41riabss23hgfg7vxhky09d6zqwjy1nxdvr3l2bh5qzd4kvaf";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   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;
+    license = lib.licenses.w3c;
+    maintainers = with lib.maintainers; [ leenaars ];
+    platforms = with lib.platforms; unix;
   };
 }
diff --git a/pkgs/tools/misc/esphome/dashboard.nix b/pkgs/tools/misc/esphome/dashboard.nix
new file mode 100644
index 00000000000..beaffadab97
--- /dev/null
+++ b/pkgs/tools/misc/esphome/dashboard.nix
@@ -0,0 +1,27 @@
+{ lib
+, python3
+}:
+
+with python3.pkgs; buildPythonPackage rec {
+  pname = "esphome-dashboard";
+  version = "20210719.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-gUZut9FsFHZ0zcTg+QDIdsM3EMvNFBawgBnt/Ia1BIc=";
+  };
+
+  # no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "esphome_dashboard"
+  ];
+
+  meta = with lib; {
+    description = "ESPHome dashboard";
+    homepage = "https://esphome.io/";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/pkgs/tools/misc/esphome/default.nix b/pkgs/tools/misc/esphome/default.nix
index 1160f4158b6..69a67a6e918 100644
--- a/pkgs/tools/misc/esphome/default.nix
+++ b/pkgs/tools/misc/esphome/default.nix
@@ -1,36 +1,68 @@
-{ lib, python3, platformio, esptool, git, protobuf3_11, fetchpatch }:
+{ lib
+, pkgs
+, python3
+, fetchFromGitHub
+, platformio
+, esptool
+, git
+}:
 
 let
   python = python3.override {
     packageOverrides = self: super: {
-      protobuf = super.protobuf.override {
-        protobuf = protobuf3_11;
-      };
+      esphome-dashboard = pkgs.callPackage ./dashboard.nix {};
     };
   };
-
-in python.pkgs.buildPythonApplication rec {
+in
+with python.pkgs; buildPythonApplication rec {
   pname = "esphome";
-  version = "1.14.5";
+  version = "1.20.0";
 
-  src = python.pkgs.fetchPypi {
-    inherit pname version;
-    sha256 = "176mi361677d5cqbi0hn52kky845byjs6gdad8pdhihyjgv7a9y9";
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-saLcTiWqpxnE+li9ojfrEAh/vjB1c3K4kQzkrBJW3t4=";
   };
 
-  ESPHOME_USE_SUBPROCESS = "";
-
-  propagatedBuildInputs = with python.pkgs; [
-    voluptuous pyyaml paho-mqtt colorlog
-    tornado protobuf tzlocal pyserial ifaddr
-    protobuf click
+  patches = [
+    # fix missing write permissions on src files before modifing them
+   ./fix-src-permissions.patch
   ];
 
-  # remove all version pinning (E.g tornado==5.1.1 -> tornado)
   postPatch = ''
-    sed -i -e "s/==[0-9.]*//" setup.py
+    # remove all version pinning (E.g tornado==5.1.1 -> tornado)
+    sed -i -e "s/==[0-9.]*//" requirements.txt
+
+    # drop coverage testing
+    sed -i '/--cov/d' pytest.ini
   '';
 
+  # Remove esptool and platformio from requirements
+  ESPHOME_USE_SUBPROCESS = "";
+
+  # esphome has optional dependencies it does not declare, they are
+  # loaded when certain config blocks are used, like `font`, `image`
+  # or `animation`.
+  # They have validation functions like:
+  # - validate_cryptography_installed
+  # - validate_pillow_installed
+  propagatedBuildInputs = [
+    click
+    colorama
+    cryptography
+    esphome-dashboard
+    ifaddr
+    paho-mqtt
+    pillow
+    protobuf
+    pyserial
+    pyyaml
+    tornado
+    tzlocal
+    voluptuous
+  ];
+
   makeWrapperArgs = [
     # platformio is used in esphomeyaml/platformio_api.py
     # esptool is used in esphomeyaml/__main__.py
@@ -39,16 +71,37 @@ in python.pkgs.buildPythonApplication rec {
     "--set ESPHOME_USE_SUBPROCESS ''"
   ];
 
-  # Platformio will try to access the network
-  # Instead, run the executable
-  checkPhase = ''
+  checkInputs = [
+    hypothesis
+    mock
+    pytest-asyncio
+    pytest-mock
+    pytest-sugar
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = [
+    # requires hypothesis 5.49, we have 6.x
+    # ImportError: cannot import name 'ip_addresses' from 'hypothesis.provisional'
+    "tests/unit_tests/test_core.py"
+    "tests/unit_tests/test_helpers.py"
+  ];
+
+  postCheck = ''
     $out/bin/esphome --help > /dev/null
   '';
 
+  passthru = {
+    dashboard = esphome-dashboard;
+  };
+
   meta = with lib; {
     description = "Make creating custom firmwares for ESP32/ESP8266 super easy";
     homepage = "https://esphome.io/";
-    license = licenses.mit;
-    maintainers = with maintainers; [ dotlambda globin ];
+    license = with licenses; [
+      mit # The C++/runtime codebase of the ESPHome project (file extensions .c, .cpp, .h, .hpp, .tcc, .ino)
+      gpl3Only # The python codebase and all other parts of this codebase
+    ];
+    maintainers = with maintainers; [ globin elseym hexa ];
   };
 }
diff --git a/pkgs/tools/misc/esphome/fix-src-permissions.patch b/pkgs/tools/misc/esphome/fix-src-permissions.patch
new file mode 100644
index 00000000000..5e92350105d
--- /dev/null
+++ b/pkgs/tools/misc/esphome/fix-src-permissions.patch
@@ -0,0 +1,46 @@
+From f72c5035944065941daaa236b60664657c777726 Mon Sep 17 00:00:00 2001
+From: Martin Weinelt <hexa@darmstadt.ccc.de>
+Date: Wed, 23 Jun 2021 04:50:35 +0200
+Subject: [PATCH] Set u+w for copied src files before trying to overwrite them
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+We store esphome in the nix store, which results in its file permissions
+being 0444. Esphome, when compiling a firmware image, will copy these
+files from the nix store to a working directory. When updating between
+versions it will notice these files changed and try to copy the new
+version over, which would break, because the user had no write
+permissions on the files.
+
+❯ esphome compile 01e4ac.yml
+INFO Reading configuration 01e4ac.yml...
+INFO Detected timezone 'CET' with UTC offset 1 and daylight saving time from 27 March 02:00:00 to 30 October 03:00:00
+INFO Generating C++ source...
+ERROR Error copying file /nix/store/lmzrgl1arqfd98jcss4rsmmy6dbffddn-esphome-1.19.2/lib/python3.8/site-packages/esphome/components/api/api_connection.cpp to 01e4ac/src/esphome/components/api/api_connection.cpp: [Errno 13] Permission denied: '01e4ac/src/esphome/components/api/api_connection.cpp'
+
+To fix this we modify chmod to 0644 just before esphome tries a copy
+operation, which will fix permissions on existing working directories
+just in time.
+---
+ esphome/helpers.py | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/esphome/helpers.py b/esphome/helpers.py
+index ad7b8272..c456f4ff 100644
+--- a/esphome/helpers.py
++++ b/esphome/helpers.py
+@@ -228,6 +228,10 @@ def copy_file_if_changed(src: os.PathLike, dst: os.PathLike) -> None:
+     if file_compare(src, dst):
+         return
+     mkdir_p(os.path.dirname(dst))
++    try:
++        os.chmod(dst, 0o644)
++    except OSError:
++        pass
+     try:
+         shutil.copy(src, dst)
+     except OSError as err:
+-- 
+2.31.1
+
diff --git a/pkgs/tools/misc/esptool-ck/default.nix b/pkgs/tools/misc/esptool-ck/default.nix
index a57a042a0c1..0b4e8cecaf6 100644
--- a/pkgs/tools/misc/esptool-ck/default.nix
+++ b/pkgs/tools/misc/esptool-ck/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "esptool-ck";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     cp esptool $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "ESP8266/ESP32 build helper tool";
     homepage = "https://github.com/igrr/esptool-ck";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/esptool/default.nix b/pkgs/tools/misc/esptool/default.nix
index 465e30e7615..3fc6e96e228 100644
--- a/pkgs/tools/misc/esptool/default.nix
+++ b/pkgs/tools/misc/esptool/default.nix
@@ -1,23 +1,37 @@
-{ stdenv, fetchFromGitHub, python3, openssl }:
+{ lib, fetchFromGitHub, python3, openssl }:
 
 python3.pkgs.buildPythonApplication rec {
   pname = "esptool";
-  version = "2.7";
+  version = "3.1";
 
   src = fetchFromGitHub {
     owner = "espressif";
     repo = "esptool";
     rev = "v${version}";
-    sha256 = "1p5hx0rhs986ffqz78rdxg7jayndsq632399xby39k17kvd3mb31";
+    sha256 = "sha256-GaGrV8L//pU4kt4HJmY88l5BNtT0IcZox7b24AFjPCI=";
   };
 
-  checkInputs = with python3.pkgs; [ flake8 flake8-future-import flake8-import-order openssl ];
-  propagatedBuildInputs = with python3.pkgs; [ pyserial pyaes ecdsa ];
+  checkInputs = with python3.pkgs;
+    [ flake8 flake8-future-import flake8-import-order openssl ];
+  propagatedBuildInputs = with python3.pkgs;
+    [ pyserial pyaes ecdsa reedsolo bitstring cryptography ];
 
-  meta = with stdenv.lib; {
+  # wrapPythonPrograms will overwrite esptool.py with a bash script,
+  # but espefuse.py tries to import it. Since we don't add any binary paths,
+  # use patchPythonScript directly.
+  dontWrapPythonPrograms = true;
+  postFixup = ''
+    buildPythonPath "$out $pythonPath"
+    for f in $out/bin/*.py; do
+        echo "Patching $f"
+        patchPythonScript "$f"
+    done
+  '';
+
+  meta = with lib; {
     description = "ESP8266 and ESP32 serial bootloader utility";
     homepage = "https://github.com/espressif/esptool";
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
     maintainers = with maintainers; [ dezgeg dotlambda ];
     platforms = platforms.linux;
   };
diff --git a/pkgs/tools/misc/etcher/default.nix b/pkgs/tools/misc/etcher/default.nix
index fec78db979c..d0fae336d9d 100644
--- a/pkgs/tools/misc/etcher/default.nix
+++ b/pkgs/tools/misc/etcher/default.nix
@@ -1,19 +1,17 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , gcc-unwrapped
 , dpkg
-, polkit
-, utillinux
+, util-linux
 , bash
-, nodePackages
 , makeWrapper
-, electron_7
+, electron_12
 }:
 
 let
   sha256 = {
-    "x86_64-linux" = "1yvqi86bw0kym401zwknhwq9041fxg047sbj3aydnfcqf11vrrmk";
-    "i686-linux" = "12lghzhsl16h3jvzm3vw4hrly32fz99z6rdmybl8viralrxy8mb8";
+    "x86_64-linux" = "sha256-FRZTUOlOK1bIbrHdR9yQv45zMhby3tWbMPpaPPq3L9s=";
+    "i686-linux" = "0z6y45sz086njpywg7f0jn6n02qynb1qbi889g2kcgwbfjvmcpm1";
   }."${stdenv.system}";
 
   arch = {
@@ -21,39 +19,36 @@ let
     "i686-linux" = "i386";
   }."${stdenv.system}";
 
-  electron = electron_7;
+  electron = electron_12;
 
 in
 
 stdenv.mkDerivation rec {
   pname = "etcher";
-  version = "1.5.86";
+  version = "1.5.121";
 
   src = fetchurl {
     url = "https://github.com/balena-io/etcher/releases/download/v${version}/balena-etcher-electron_${version}_${arch}.deb";
     inherit sha256;
   };
 
-  dontBuild = true;
-  dontConfigure = true;
-
   nativeBuildInputs = [ makeWrapper ];
 
+  dontConfigure = true;
+  dontBuild = 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
+  postPatch = ''
     # 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|'lsblk'|'${utillinux}/bin/lsblk'|" tmp/node_modules/drivelist/js/lsblk/index.js
-    sed -i "s|process.resourcesPath|'$out/share/${pname}/resources/'|" tmp/generated/gui.js
-    ${nodePackages.asar}/bin/asar pack tmp opt/balenaEtcher/resources/app.asar
-    rm -rf tmp
+    substituteInPlace opt/balenaEtcher/resources/app/generated/gui.js \
+      --replace '/usr/bin/pkexec' '/usr/bin/pkexec", "/run/wrappers/bin/pkexec' \
+      --replace '/bin/bash' '${bash}/bin/bash' \
+      --replace '"lsblk"' '"${util-linux}/bin/lsblk"'
   '';
 
   installPhase = ''
@@ -64,19 +59,16 @@ stdenv.mkDerivation rec {
     cp -a usr/share/* $out/share
     cp -a opt/balenaEtcher/{locales,resources} $out/share/${pname}
 
-    substituteInPlace $out/share/applications/balena-etcher-electron.desktop \
-      --replace 'Exec=/opt/balenaEtcher/balena-etcher-electron' 'Exec=${pname}'
-
     runHook postInstall
   '';
 
   postFixup = ''
     makeWrapper ${electron}/bin/electron $out/bin/${pname} \
-      --add-flags $out/share/${pname}/resources/app.asar \
-      --prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ gcc-unwrapped.lib ]}"
+      --add-flags $out/share/${pname}/resources/app \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ gcc-unwrapped.lib ]}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Flash OS images to SD cards and USB drives, safely and easily";
     homepage = "https://etcher.io/";
     license = licenses.asl20;
diff --git a/pkgs/tools/misc/ethminer/default.nix b/pkgs/tools/misc/ethminer/default.nix
index d593d677cc3..675147bc5d5 100644
--- a/pkgs/tools/misc/ethminer/default.nix
+++ b/pkgs/tools/misc/ethminer/default.nix
@@ -1,4 +1,5 @@
 {
+  lib,
   stdenv,
   fetchFromGitHub,
   opencl-headers,
@@ -7,6 +8,7 @@
   boost,
   makeWrapper,
   cudatoolkit,
+  cudaSupport,
   mesa,
   ethash,
   opencl-info,
@@ -18,14 +20,14 @@
 
 stdenv.mkDerivation rec {
   pname = "ethminer";
-  version = "0.18.0";
+  version = "0.19.0";
 
   src =
     fetchFromGitHub {
       owner = "ethereum-mining";
       repo = "ethminer";
       rev = "v${version}";
-      sha256 = "10b6s35axmx8kyzn2vid6l5nnzcaf4nkk7f5f7lg3cizv6lsj707";
+      sha256 = "1kyff3vx2r4hjpqah9qk99z6dwz7nsnbnhhl6a76mdhjmgp1q646";
       fetchSubmodules = true;
     };
 
@@ -36,7 +38,11 @@ stdenv.mkDerivation rec {
     "-DAPICORE=ON"
     "-DETHDBUS=OFF"
     "-DCMAKE_BUILD_TYPE=Release"
-  ];
+  ] ++ (if cudaSupport then [
+    "-DCUDA_PROPAGATE_HOST_FLAGS=off"
+  ] else [
+    "-DETHASHCUDA=OFF" # on by default
+  ]);
 
   nativeBuildInputs = [
     cmake
@@ -49,12 +55,13 @@ stdenv.mkDerivation rec {
     boost
     opencl-headers
     mesa
-    cudatoolkit
     ethash
     opencl-info
     ocl-icd
     openssl
     jsoncpp
+  ] ++ lib.optionals cudaSupport [
+    cudatoolkit
   ];
 
   preConfigure = ''
@@ -65,14 +72,11 @@ stdenv.mkDerivation rec {
     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";
+  meta = with lib; {
+    description = "Ethereum miner with OpenCL${lib.optionalString cudaSupport ", CUDA"} and stratum support";
     homepage = "https://github.com/ethereum-mining/ethminer";
     platforms = [ "x86_64-linux" ];
-    maintainers = with maintainers; [ nand0p ];
-    license = licenses.gpl2;
-    # Doesn't build with gcc9, and if overlayed to use gcc8 stdenv fails on CUDA issues.
-    broken = true;
+    maintainers = with maintainers; [ atemu ];
+    license = licenses.gpl3Only;
   };
-
 }
diff --git a/pkgs/tools/misc/ethtool/default.nix b/pkgs/tools/misc/ethtool/default.nix
index b1b9956404a..4b6d7cc9332 100644
--- a/pkgs/tools/misc/ethtool/default.nix
+++ b/pkgs/tools/misc/ethtool/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "ethtool";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "0srbqp4a3x9ryrbm5q854375y04ni8j0bmsrl89nmsyn4x4ixy12";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Utility for controlling network drivers and hardware";
     homepage = "https://www.kernel.org/pub/software/network/ethtool/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/eva/default.nix b/pkgs/tools/misc/eva/default.nix
index 06b7b0a5200..b16c046d203 100644
--- a/pkgs/tools/misc/eva/default.nix
+++ b/pkgs/tools/misc/eva/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchFromGitHub, rustPlatform, fetchpatch }:
+{ lib, fetchFromGitHub, rustPlatform, fetchpatch }:
 
 rustPlatform.buildRustPackage rec {
   pname = "eva";
   version = "0.2.7";
 
-  cargoSha256 = "1lycjw5i169xx73qw8gknbakrxikdbr65fmqx7xq2mafc0hb1zyn";
+  cargoSha256 = "08wm34rd03m5kd2zar23yhvi66kalzdqkgd6cqa1nq0ra4agnan7";
 
   src = fetchFromGitHub {
     owner = "NerdyPepper";
-    repo = "${pname}";
+    repo = pname;
     rev = "6ce0fc0212a34ffb647b24d9d903029ac4518165";
     sha256 = "10242vnq2ph0g3p2hdacs4lmx3f474xm04nadplxbpv9xh4nbag3";
   };
@@ -21,9 +21,15 @@ rustPlatform.buildRustPackage rec {
       url = "https://github.com/NerdyPepper/eva/commit/cacf51dbb9748b1dbe97b35f3c593a0a272bd4db.patch";
       sha256 = "11q7dkz2x1888f3awnlr1nbbxzzfjrr46kd0kk6sgjdkyfh50cvv";
     })
+
+    # to fix `cargo test -- --test-threads $NIX_BUILD_CORES`
+    (fetchpatch {
+      url = "https://github.com/NerdyPepper/eva/commit/ccfb3d327567dbaf03b2283c7e684477e2e84590.patch";
+      sha256 = "003yxqlyi8jna0rf05q2a006r2pkz6pcwwfl3dv8zb6p83kk1kgj";
+    })
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A calculator REPL, similar to bc";
     homepage = "https://github.com/NerdyPepper/eva";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/exa/default.nix b/pkgs/tools/misc/exa/default.nix
index 13c8b3f1d4f..632eb459058 100644
--- a/pkgs/tools/misc/exa/default.nix
+++ b/pkgs/tools/misc/exa/default.nix
@@ -1,51 +1,43 @@
-{ stdenv, fetchFromGitHub, fetchpatch, rustPlatform, cmake, perl, pkgconfig, zlib
-, darwin, libiconv, installShellFiles
+{ lib, stdenv, fetchFromGitHub, rustPlatform, cmake, pandoc, pkg-config, zlib
+, Security, libiconv, installShellFiles
 }:
 
-with rustPlatform;
-
-buildRustPackage rec {
+rustPlatform.buildRustPackage rec {
   pname = "exa";
-  version = "0.9.0";
-
-  cargoSha256 = "0nl106jlbr8gnnlbi20mrc6zyww7vxgmw6w34ibndxqh9ggxwfvr";
+  version = "0.10.1";
 
   src = fetchFromGitHub {
     owner = "ogham";
-    repo = "exa";
+    repo = pname;
     rev = "v${version}";
-    sha256 = "14qlm9zb9v22hxbbi833xaq2b7qsxnmh15s317200vz5f1305hhw";
+    sha256 = "sha256-vChsy/FrJEzTO5O+XFycPMP3jqOeea/hfsC0jJbqUVI=";
   };
 
-  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";
-    })
-  ];
+  # Cargo.lock is outdated
+  cargoPatches = [ ./update-cargo-lock.diff ];
+
+  cargoSha256 = "sha256-ah8IjShmivS6IWL3ku/4/j+WNr/LdUnh1YJnPdaFdcM=";
 
-  nativeBuildInputs = [ cmake pkgconfig perl installShellFiles ];
+  nativeBuildInputs = [ cmake pkg-config installShellFiles pandoc ];
   buildInputs = [ zlib ]
-  ++ stdenv.lib.optionals stdenv.isDarwin [
-    libiconv darwin.apple_sdk.frameworks.Security ]
-  ;
+    ++ lib.optionals stdenv.isDarwin [ libiconv Security ];
 
   outputs = [ "out" "man" ];
 
   postInstall = ''
-    installManPage contrib/man/exa.1
+    pandoc --standalone -f markdown -t man man/exa.1.md > man/exa.1
+    pandoc --standalone -f markdown -t man man/exa_colors.5.md > man/exa_colors.5
+    installManPage man/exa.1 man/exa_colors.5
     installShellCompletion \
-      --name exa contrib/completions.bash \
-      --name exa.fish contrib/completions.fish \
-      --name _exa contrib/completions.zsh
+      --name exa completions/completions.bash \
+      --name exa.fish completions/completions.fish \
+      --name _exa completions/completions.zsh
   '';
 
   # Some tests fail, but Travis ensures a proper build
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Replacement for 'ls' written in Rust";
     longDescription = ''
       exa is a modern replacement for ls. It uses colours for information by
@@ -55,8 +47,9 @@ buildRustPackage rec {
       for a directory, or recursing into directories with a tree view. exa is
       written in Rust, so it’s small, fast, and portable.
     '';
+    changelog = "https://github.com/ogham/exa/releases/tag/v${version}";
     homepage = "https://the.exa.website";
     license = licenses.mit;
-    maintainers = with maintainers; [ ehegnes lilyball globin zowoq ];
+    maintainers = with maintainers; [ ehegnes lilyball globin fortuneteller2k ];
   };
 }
diff --git a/pkgs/tools/misc/exa/update-cargo-lock.diff b/pkgs/tools/misc/exa/update-cargo-lock.diff
new file mode 100644
index 00000000000..a4c821e4748
--- /dev/null
+++ b/pkgs/tools/misc/exa/update-cargo-lock.diff
@@ -0,0 +1,13 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index df94188..ed3a068 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -57,7 +57,7 @@ dependencies = [
+ 
+ [[package]]
+ name = "exa"
+-version = "0.11.0-pre"
++version = "0.10.1"
+ dependencies = [
+  "ansi_term",
+  "datetime",
diff --git a/pkgs/tools/misc/execline/default.nix b/pkgs/tools/misc/execline/default.nix
index ecedd2b0b41..095e43b9d3e 100644
--- a/pkgs/tools/misc/execline/default.nix
+++ b/pkgs/tools/misc/execline/default.nix
@@ -1,14 +1,11 @@
-{ lib, skawarePackages
-# for execlineb-with-builtins
-, coreutils, gnugrep, writeScriptBin, runCommand, runCommandCC
-}:
+{ skawarePackages }:
 
 with skawarePackages;
 
 buildPackage {
   pname = "execline";
-  version = "2.6.1.0";
-  sha256 = "0mj565xml3hvw27finydms0s9abbbpgbr29vnr8gwi7zjzq7ck52";
+  version = "2.8.0.1";
+  sha256 = "1v9swmhw2rcrr9fmkmd7qh8qq0kslhmvxwz2a3bhan9ksabz8wx3";
 
   description = "A small scripting language, to be used in place of a shell in non-interactive scripts";
 
diff --git a/pkgs/tools/misc/execline/execlineb-wrapper.c b/pkgs/tools/misc/execline/execlineb-wrapper.c
index d31a76ca26e..c8e91813b77 100644
--- a/pkgs/tools/misc/execline/execlineb-wrapper.c
+++ b/pkgs/tools/misc/execline/execlineb-wrapper.c
@@ -12,6 +12,7 @@
 #include <skalibs/djbunix.h>
 #include <skalibs/strerr2.h>
 #include <skalibs/env.h>
+#include <skalibs/exec.h>
 
 #define dienomem() strerr_diefu1sys(111, "stralloc_catb")
 
@@ -41,10 +42,10 @@ int main(int argc, char const* argv[], char const *const *envp)
   }
 
   // exec into execlineb and append path_modif to the environment
-  xpathexec_r_name(
+  xmexec_aem(
     EXECLINEB_PATH(),
     argv,
-    envp, env_len(envp),
+    envp,
     path_modif.s, path_modif.len
   );
 }
diff --git a/pkgs/tools/misc/expect/default.nix b/pkgs/tools/misc/expect/default.nix
index cbb8c337ff8..5a792c040b3 100644
--- a/pkgs/tools/misc/expect/default.nix
+++ b/pkgs/tools/misc/expect/default.nix
@@ -1,42 +1,42 @@
-{ stdenv, fetchurl, tcl, makeWrapper, autoreconfHook }:
+{ lib, stdenv, buildPackages, fetchurl, tcl, makeWrapper, autoreconfHook, fetchpatch }:
 
-stdenv.mkDerivation rec {
-  version = "5.45.4";
+tcl.mkTclDerivation rec {
   pname = "expect";
+  version = "5.45.4";
 
   src = fetchurl {
     url = "mirror://sourceforge/expect/Expect/${version}/expect${version}.tar.gz";
     sha256 = "0d1cp5hggjl93xwc8h1y6adbnrvpkk0ywkd00inz9ndxn21xm9s9";
   };
 
-  buildInputs = [ tcl ];
-  nativeBuildInputs = [ makeWrapper autoreconfHook ];
-
-  hardeningDisable = [ "format" ];
+  patches = [
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/buildroot/buildroot/c05e6aa361a4049eabd8b21eb64a34899ef83fc7/package/expect/0001-enable-cross-compilation.patch";
+      sha256 = "1jwx2l1slidvcpahxbyqs942l81jd62rzbxliyd9lwysk38c8b6b";
+    })
+  ];
 
   postPatch = ''
     sed -i "s,/bin/stty,$(type -p stty),g" configure.in
   '';
 
-  configureFlags = [
-    "--with-tcl=${tcl}/lib"
-    "--with-tclinclude=${tcl}/include"
-    "--exec-prefix=\${out}"
-  ];
+  nativeBuildInputs = [ autoreconfHook makeWrapper ];
+
+  strictDeps = true;
+  hardeningDisable = [ "format" ];
 
   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
+    tclWrapperArgs+=(--prefix PATH : ${lib.makeBinPath [ tcl ]})
+    ${lib.optionalString stdenv.isDarwin "tclWrapperArgs+=(--prefix DYLD_LIBRARY_PATH : $out/lib/expect${version})"}
   '';
 
-  meta = with stdenv.lib; {
+  outputs = [ "out" "dev" ];
+
+  meta = with lib; {
     description = "A tool for automating interactive applications";
     homepage = "http://expect.sourceforge.net/";
-    license = "Expect";
+    license = licenses.publicDomain;
     platforms = platforms.unix;
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/misc/fasd/default.nix b/pkgs/tools/misc/fasd/default.nix
index 6c2cbd25744..a3cdc388cdf 100644
--- a/pkgs/tools/misc/fasd/default.nix
+++ b/pkgs/tools/misc/fasd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub } :
+{ lib, stdenv, fetchFromGitHub } :
 
 stdenv.mkDerivation rec {
   pname = "fasd";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://github.com/clvv/${pname}";
     description = "Quick command-line access to files and directories for POSIX shells";
-    license = stdenv.lib.licenses.mit;
+    license = lib.licenses.mit;
 
     longDescription = ''
       Fasd is a command-line productivity booster.
@@ -28,6 +28,6 @@ stdenv.mkDerivation rec {
       command line.
     '';
 
-    platforms = stdenv.lib.platforms.all;
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/fbcat/default.nix b/pkgs/tools/misc/fbcat/default.nix
new file mode 100644
index 00000000000..8769f65f68c
--- /dev/null
+++ b/pkgs/tools/misc/fbcat/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub } :
+
+stdenv.mkDerivation rec {
+  pname = "fbcat";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "jwilk";
+    repo = pname;
+    rev = version;
+    sha256 = "08y79br4a4cgkjnslw0hw57441ybsapaw7wjdbak19mv9lnl5ll9";
+  };
+
+  # hardcoded because makefile target "install" depends on libxslt dependencies from network
+  # that are just too hard to monkeypatch here
+  # so this is the simple fix.
+  installPhase = ''
+    mkdir -p $out
+    install -d $out/bin
+    install -m755 fbcat $out/bin/
+    install -m755 fbgrab $out/bin/
+    install -d $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    homepage = "http://jwilk.net/software/fbcat";
+    description = "Framebuffer screenshot tool";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.linux;
+  };
+}
+
diff --git a/pkgs/tools/misc/fcp/default.nix b/pkgs/tools/misc/fcp/default.nix
new file mode 100644
index 00000000000..7124e907845
--- /dev/null
+++ b/pkgs/tools/misc/fcp/default.nix
@@ -0,0 +1,33 @@
+{ expect, fetchFromGitHub, lib, rustPlatform, stdenv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fcp";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "svetlitski";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0f242n8w88rikg1srimdifadhggrb2r1z0g65id60ahb4bjm8a0x";
+  };
+
+  cargoSha256 = "0gw7gjfwc4r03rg6z65ml0y37sh4yf716isqs0mb4jqkp7rwfbc9";
+
+  nativeBuildInputs = [ expect ];
+
+  # character_device fails with "File name too long" on darwin
+  doCheck = !stdenv.isDarwin;
+
+  postPatch = ''
+    patchShebangs tests/*.exp
+  '';
+
+  meta = with lib; {
+    description = "A significantly faster alternative to the classic Unix cp(1) command";
+    homepage = "https://github.com/svetlitski/fcp";
+    changelog = "https://github.com/svetlitski/fcp/releases/tag/v${version}";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/pkgs/tools/misc/fd/default.nix b/pkgs/tools/misc/fd/default.nix
index 89a05815f51..9b0c44c3bf5 100644
--- a/pkgs/tools/misc/fd/default.nix
+++ b/pkgs/tools/misc/fd/default.nix
@@ -2,24 +2,24 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "fd";
-  version = "8.1.1";
+  version = "8.2.1";
 
   src = fetchFromGitHub {
     owner = "sharkdp";
     repo = "fd";
     rev = "v${version}";
-    sha256 = "0qzqnsjkq8i4gzn9273algx33kr1hzgxid8lnqp4awy2zxm4ksiq";
+    sha256 = "00vlifbri021z8nf7xvbaay8mqvnq58h19va9bqr5lhsqj1f82wq";
   };
 
-  cargoSha256 = "1d7hfgl9l4b9bnq2qcpvdq5rh7lpz33r19hw3wwgnqh142q67m7r";
+  cargoSha256 = "0n6xqd30b8aiqrvqrmy7q56nh62nx2j1a3yq2dlpc19i2mfw2qd8";
 
   nativeBuildInputs = [ installShellFiles ];
 
   preFixup = ''
-    installManPage "$src/doc/fd.1"
+    installManPage doc/fd.1
 
     installShellCompletion $releaseDir/build/fd-find-*/out/fd.{bash,fish}
-    installShellCompletion --zsh $releaseDir/build/fd-find-*/out/_fd
+    installShellCompletion --zsh contrib/completion/_fd
   '';
 
   meta = with lib; {
diff --git a/pkgs/tools/misc/fdtools/default.nix b/pkgs/tools/misc/fdtools/default.nix
index 6e0cb66749f..e9efd66b2f1 100644
--- a/pkgs/tools/misc/fdtools/default.nix
+++ b/pkgs/tools/misc/fdtools/default.nix
@@ -13,6 +13,7 @@ in stdenv.mkDerivation {
     inherit sha256;
   };
 
+  patches = [ ./new-skalibs.patch ];
   outputs = [ "bin" "lib" "dev" "doc" "out" ];
 
   buildInputs = [ skawarePackages.skalibs ];
@@ -22,6 +23,9 @@ in stdenv.mkDerivation {
     sed -e 's|gcc|$CC|' \
       conf-compile/defaults/host_link.sh \
       > conf-compile/host_link.sh
+    sed -e 's|gcc|$CC|' \
+      conf-compile/defaults/host_compile.sh \
+      > conf-compile/host_compile.sh
 
     echo "${skawarePackages.skalibs.lib}/lib/skalibs/sysdeps" \
       > conf-compile/depend_skalibs_sysdeps
@@ -72,7 +76,7 @@ in stdenv.mkDerivation {
     homepage = "https://code.dogmap.org./fdtools/";
     description = "A set of utilities for working with file descriptors";
     license = lib.licenses.gpl2;
-    platforms = lib.platforms.all;
+    platforms = lib.platforms.linux;
     maintainers = [ lib.maintainers.Profpatsch ];
   };
 }
diff --git a/pkgs/tools/misc/fdtools/new-skalibs.patch b/pkgs/tools/misc/fdtools/new-skalibs.patch
new file mode 100644
index 00000000000..76c5396f8a8
--- /dev/null
+++ b/pkgs/tools/misc/fdtools/new-skalibs.patch
@@ -0,0 +1,223 @@
+diff -Naur misc/fdtools-2020.05.04/src/check_exit_exec.c misc-new/fdtools-2020.05.04/src/check_exit_exec.c
+--- misc/fdtools-2020.05.04/src/check_exit_exec.c	2015-03-16 04:55:56.000000000 +0100
++++ misc-new/fdtools-2020.05.04/src/check_exit_exec.c	2021-01-22 10:50:25.529955213 +0100
+@@ -2,6 +2,7 @@
+ #include <unistd.h>
+ #include <errno.h>
+ 
++#include <skalibs/exec.h>
+ #include <skalibs/stddjb.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+@@ -14,7 +15,7 @@
+ 
+   if (str_equal(arg, ":")) {
+     ++argv;
+-    pathexec0((char const**)argv);
++    mexec0((char const**)argv);
+     DIE1(exec, argv[0]);
+   }
+ }
+diff -Naur misc/fdtools-2020.05.04/src/grabconsole.c misc-new/fdtools-2020.05.04/src/grabconsole.c
+--- misc/fdtools-2020.05.04/src/grabconsole.c	2020-04-24 06:01:22.000000000 +0200
++++ misc-new/fdtools-2020.05.04/src/grabconsole.c	2021-01-22 10:43:27.887754936 +0100
+@@ -4,6 +4,7 @@
+ #include <errno.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+@@ -26,6 +27,6 @@
+   if (fd_grabconsole(fd)!=0) DIE0(tioccons);
+ 
+   argv+=2;
+-  pathexec0((char const**)argv);
++  mexec0((char const**)argv);
+   DIE1(exec, argv[0]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/pipecycle.c misc-new/fdtools-2020.05.04/src/pipecycle.c
+--- misc/fdtools-2020.05.04/src/pipecycle.c	2015-03-16 04:55:56.000000000 +0100
++++ misc-new/fdtools-2020.05.04/src/pipecycle.c	2021-01-22 10:47:58.033220790 +0100
+@@ -4,6 +4,7 @@
+ #include <unistd.h>
+ #include <signal.h>
+ 
++#include <skalibs/exec.h>
+ #include <skalibs/stddjb.h>
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+@@ -56,7 +57,7 @@
+       if (fd_shuffle(2, current, wanted)!=0) DIE0(dup);
+     }
+     read(start[0], &j, 1);
+-    pathexec(args);
++    mexec(args);
+     DIE1(exec, args[0]);
+   }
+ 
+diff -Naur misc/fdtools-2020.05.04/src/recvfd.c misc-new/fdtools-2020.05.04/src/recvfd.c
+--- misc/fdtools-2020.05.04/src/recvfd.c	2020-04-28 09:35:05.000000000 +0200
++++ misc-new/fdtools-2020.05.04/src/recvfd.c	2021-01-22 10:47:14.180994779 +0100
+@@ -7,6 +7,7 @@
+ #include <limits.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+ #include "fdtools.h"
+@@ -69,9 +70,9 @@
+       named_fd=duped;
+     }
+     buf[int_fmt(buf, named_fd)]='\0';
+-    if (pathexec_env(argv[i]+1, buf)==0) DIE0(alloc);
++    if (env_mexec(argv[i]+1, buf)==0) DIE0(alloc);
+   }
+   argv+=nfds+1;
+-  pathexec0((char const**)argv);
++  mexec0((char const**)argv);
+   DIE1(exec, argv[0]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/sendfd.c misc-new/fdtools-2020.05.04/src/sendfd.c
+--- misc/fdtools-2020.05.04/src/sendfd.c	2015-03-16 06:48:39.000000000 +0100
++++ misc-new/fdtools-2020.05.04/src/sendfd.c	2021-01-22 10:43:07.207634214 +0100
+@@ -7,6 +7,7 @@
+ #include <limits.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+ #include "fdtools.h"
+@@ -40,6 +41,6 @@
+   argv+=nfds;
+   if (*argv==NULL) _exit(0);
+   ++argv;
+-  pathexec0((char const**)argv);
++  mexec0((char const**)argv);
+   DIE1(exec, argv[0]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/setstate.c misc-new/fdtools-2020.05.04/src/setstate.c
+--- misc/fdtools-2020.05.04/src/setstate.c	2020-05-04 10:04:21.000000000 +0200
++++ misc-new/fdtools-2020.05.04/src/setstate.c	2021-01-22 10:45:05.084304318 +0100
+@@ -8,6 +8,7 @@
+ #include <errno.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/intattr.h"
+ #include "prjlibs-c/diewarn.h"
+@@ -167,6 +168,6 @@
+   }
+ 
+   argv+=2;
+-  pathexec_run(argv[0], (char const**)argv, (char const**)environ);
++  mexec_ae(argv[0], (char const**)argv, (char const**)environ);
+   DIE1(exec, argv[0]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/statfile.c misc-new/fdtools-2020.05.04/src/statfile.c
+--- misc/fdtools-2020.05.04/src/statfile.c	2015-03-22 00:33:44.000000000 +0100
++++ misc-new/fdtools-2020.05.04/src/statfile.c	2021-01-22 10:48:23.673351183 +0100
+@@ -6,6 +6,7 @@
+ #include <errno.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/warn.h"
+@@ -15,7 +16,7 @@
+ char const* PROG="statfile";
+ 
+ static void set(char const* const var, char const* const val) {
+-  if (pathexec_env(var, val)==0) DIE0(alloc);
++  if (env_mexec(var, val)==0) DIE0(alloc);
+ }
+ 
+ static void set64n(char const* const var, time_t t, unsigned int nsec) {
+@@ -178,6 +179,6 @@
+   }
+ 
+   argv+=3;
+-  pathexec((char const**)argv);
++  mexec((char const**)argv);
+   DIE1(exec, argv[0]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/vc-get-linux.c misc-new/fdtools-2020.05.04/src/vc-get-linux.c
+--- misc/fdtools-2020.05.04/src/vc-get-linux.c	2020-04-28 07:04:49.000000000 +0200
++++ misc-new/fdtools-2020.05.04/src/vc-get-linux.c	2021-01-22 10:47:34.649100757 +0100
+@@ -10,6 +10,7 @@
+ #include <sys/sysmacros.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+@@ -38,7 +39,7 @@
+       errno=0;
+       if (ioctl(fd, VT_OPENQRY, &vtnum)<0 || vtnum==-1) DIE0(vt_qry);
+       bufnum[ulong_fmt(bufnum, vtnum)]='\0';
+-      if (pathexec_env("TTY", buf)==0) DIE0(alloc);
++      if (env_mexec("TTY", buf)==0) DIE0(alloc);
+     }
+     fd_close(fd);
+ 
+@@ -50,12 +51,12 @@
+       if (fstat(fd, &statbuf)!=0) DIE1(stat, buf);
+       buf[ulong_fmt(buf, minor(statbuf.st_rdev))]='\0';
+     }
+-    if (pathexec_env("VCNUM", buf)==0) DIE0(alloc);
++    if (env_mexec("VCNUM", buf)==0) DIE0(alloc);
+ 
+     buf[ulong_fmt(buf, fd)]='\0';
+-    if (pathexec_env("VCFD", buf)==0) DIE0(alloc);
++    if (env_mexec("VCFD", buf)==0) DIE0(alloc);
+   }
+ 
+-  pathexec((char const**)argv+2);
++  mexec((char const**)argv+2);
+   DIE1(exec, argv[2]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/vc-lock-linux.c misc-new/fdtools-2020.05.04/src/vc-lock-linux.c
+--- misc/fdtools-2020.05.04/src/vc-lock-linux.c	2015-03-20 05:59:42.000000000 +0100
++++ misc-new/fdtools-2020.05.04/src/vc-lock-linux.c	2021-01-22 10:48:36.857417751 +0100
+@@ -8,6 +8,7 @@
+ #include <sys/ioctl.h>
+ #include <sys/vt.h>
+ 
++#include <skalibs/exec.h>
+ #include <skalibs/stddjb.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+@@ -79,7 +80,7 @@
+       WARN0(fork);
+     } else if (pid==0) {
+       sigprocmask(SIG_SETMASK, &old_set, NULLP);
+-      pathexec((char const**)argv);
++      mexec((char const**)argv);
+       DIE1(exec, *argv);
+     } else {
+       int status;
+diff -Naur misc/fdtools-2020.05.04/src/vc-switch-linux.c misc-new/fdtools-2020.05.04/src/vc-switch-linux.c
+--- misc/fdtools-2020.05.04/src/vc-switch-linux.c	2020-04-28 07:14:04.000000000 +0200
++++ misc-new/fdtools-2020.05.04/src/vc-switch-linux.c	2021-01-22 10:42:41.259480648 +0100
+@@ -10,6 +10,7 @@
+ #include <sys/sysmacros.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+@@ -36,6 +37,6 @@
+   if (ioctl(fd, VT_ACTIVATE, ttyno)<0) DIE0(vt_act);
+   if (!scan) fd_close(fd);
+ 
+-  pathexec0((char const**)argv+3);
++  mexec0((char const**)argv+3);
+   DIE1(exec, argv[3]);
+ }
diff --git a/pkgs/tools/misc/fdupes/default.nix b/pkgs/tools/misc/fdupes/default.nix
index 7203d6b57fc..42c1c3a37df 100644
--- a/pkgs/tools/misc/fdupes/default.nix
+++ b/pkgs/tools/misc/fdupes/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, ncurses, pcre2 }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, ncurses, pcre2 }:
 
 stdenv.mkDerivation rec {
   pname = "fdupes";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ autoreconfHook ];
   buildInputs = [ ncurses pcre2 ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Identifies duplicate files residing within specified directories";
     longDescription = ''
       fdupes searches the given path for duplicate files.
diff --git a/pkgs/tools/misc/fend/default.nix b/pkgs/tools/misc/fend/default.nix
new file mode 100644
index 00000000000..4ed308643e5
--- /dev/null
+++ b/pkgs/tools/misc/fend/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fend";
+  version = "0.1.21";
+
+  src = fetchFromGitHub {
+    owner = "printfn";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-LrHZsnW96+QsXuGxWoGqIEKTE86m3tMnh4fpDPIhd1w=";
+  };
+
+  cargoSha256 = "sha256-GZ4Yt5iQkgupJMTYIbvCPtz19985MFf8IDy3ui0M6DE=";
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    [[ "$($out/bin/fend "1 km to m")" = "1000 m" ]]
+  '';
+
+  meta = with lib; {
+    description = "Arbitrary-precision unit-aware calculator";
+    homepage = "https://github.com/printfn/fend";
+    license = licenses.mit;
+    maintainers = with maintainers; [ djanatyn ];
+  };
+}
diff --git a/pkgs/tools/misc/fet-sh/default.nix b/pkgs/tools/misc/fet-sh/default.nix
index 3419a8d2850..e9286e6a11e 100644
--- a/pkgs/tools/misc/fet-sh/default.nix
+++ b/pkgs/tools/misc/fet-sh/default.nix
@@ -2,26 +2,28 @@
 
 stdenvNoCC.mkDerivation rec {
   pname = "fet-sh";
-  version = "1.5";
+  version = "1.9";
 
   src = fetchFromGitHub {
     owner = "6gk";
     repo = "fet.sh";
     rev = "v${version}";
-    sha256 = "15336cayv3rb79y7f0v0qvn6nhr5aqr8479ayp0r0sihn5mkfg35";
+    sha256 = "sha256-xhX2nVteC3T3IjQh++mYlm0btDJQbyQa6b8sGualV0E=";
   };
 
-  dontBuild = true;
+  postPatch = ''
+    patchShebangs fet.sh
+  '';
 
   installPhase = ''
-    install -m755 -D ./fet.sh $out/bin/fet.sh
+    install -m755 -D fet.sh $out/bin/fet.sh
   '';
 
   meta = with lib; {
-    description = "A fetch written in posix shell without any external commands (linux only)";
+    description = "A fetch written in posix shell without any external commands";
     homepage = "https://github.com/6gk/fet.sh";
     license = licenses.isc;
-    platforms = platforms.linux;
+    platforms = platforms.all;
     maintainers = with maintainers; [ elkowar ];
   };
 
diff --git a/pkgs/tools/misc/fetchutils/default.nix b/pkgs/tools/misc/fetchutils/default.nix
new file mode 100644
index 00000000000..e9ee3fba516
--- /dev/null
+++ b/pkgs/tools/misc/fetchutils/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenvNoCC, fetchFromGitHub, bash, scdoc }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "fetchutils";
+  version = "unstable-2021-03-16";
+
+  src = fetchFromGitHub {
+    owner = "kiedtl";
+    repo = pname;
+    rev = "882781a297e86f4ad4eaf143e0777fb3e7c69526";
+    sha256 = "sha256-ONrVZC6GBV5v3TeBekW9ybZjDHF3FNyXw1rYknqKRbk=";
+  };
+
+  buildInputs = [ bash scdoc ];
+
+  installFlags = [ "PREFIX=$(out)/" ];
+
+  postPatch = ''
+    patchShebangs --host src/*
+  '';
+
+  meta = with lib; {
+    description = "A collection of small shell utilities to fetch system information";
+    homepage = "https://github.com/lptstr/fetchutils";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ fortuneteller2k ];
+  };
+}
diff --git a/pkgs/tools/misc/ffsend/default.nix b/pkgs/tools/misc/ffsend/default.nix
index 8b9f79aaa7f..aea480ac046 100644
--- a/pkgs/tools/misc/ffsend/default.nix
+++ b/pkgs/tools/misc/ffsend/default.nix
@@ -1,5 +1,6 @@
-{ stdenv, fetchFromGitLab, rustPlatform, cmake, pkgconfig, openssl
-, darwin, installShellFiles
+{ lib, stdenv, fetchFromGitLab, rustPlatform, cmake, pkg-config, openssl
+, installShellFiles
+, CoreFoundation, CoreServices, Security, AppKit, libiconv
 
 , x11Support ? stdenv.isLinux || stdenv.hostPlatform.isBSD
 , xclip ? null, xsel ? null
@@ -7,7 +8,7 @@
 }:
 
 let
-  usesX11 = stdenv.isLinux || stdenv.hostPlatform.isBSD;
+  usesX11 = stdenv.isLinux || stdenv.isBSD;
 in
 
 assert (x11Support && usesX11) -> xclip != null || xsel != null;
@@ -16,23 +17,23 @@ with rustPlatform;
 
 buildRustPackage rec {
   pname = "ffsend";
-  version = "0.2.65";
+  version = "0.2.72";
 
   src = fetchFromGitLab {
     owner = "timvisee";
     repo = "ffsend";
     rev = "v${version}";
-    sha256 = "02yw129rw072jlf36k60jbhfdv9ayx2wb5il61fc0v07h1nd7i0d";
+    sha256 = "sha256-YEmEaf0ob2ulmQghwDYi0RtGuTdRHCoLdPnuVjxvlxE=";
   };
 
-  cargoSha256 = "04waki61b5pjlgznbhbrjpi9rxgdwg9mjbx2apfh9swvfip602r6";
+  cargoSha256 = "sha256-mcWQzfMc2cJjp0EFcfG7SAM70ItwEC/N13UDiRiI3ys=";
 
-  nativeBuildInputs = [ cmake pkgconfig installShellFiles ];
+  nativeBuildInputs = [ cmake pkg-config installShellFiles ];
   buildInputs =
-    if stdenv.isDarwin then (with darwin.apple_sdk.frameworks; [ CoreFoundation CoreServices Security AppKit ])
+    if stdenv.isDarwin then [ libiconv CoreFoundation CoreServices Security AppKit ]
     else [ openssl ];
 
-  preBuild = stdenv.lib.optionalString (x11Support && usesX11) (
+  preBuild = lib.optionalString (x11Support && usesX11) (
     if preferXsel && xsel != null then ''
       export XSEL_PATH="${xsel}/bin/xsel"
     '' else ''
@@ -45,7 +46,7 @@ buildRustPackage rec {
   '';
   # There's also .elv and .ps1 completion files but I don't know where to install those
 
-  meta = with stdenv.lib; {
+  meta = with 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
@@ -54,7 +55,7 @@ buildRustPackage rec {
       web browser.
     '';
     homepage = "https://gitlab.com/timvisee/ffsend";
-    license = licenses.gpl3;
+    license = licenses.gpl3Only;
     maintainers = with maintainers; [ lilyball equirosa ];
     platforms = platforms.unix;
   };
diff --git a/pkgs/tools/misc/figlet/default.nix b/pkgs/tools/misc/figlet/default.nix
index 90fb0981fbd..01ff40b2b74 100644
--- a/pkgs/tools/misc/figlet/default.nix
+++ b/pkgs/tools/misc/figlet/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch }:
+{ lib, stdenv, fetchurl, fetchpatch }:
 
 stdenv.mkDerivation {
   name = "figlet-2.2.5";
@@ -24,7 +24,7 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.afl21;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/file/default.nix b/pkgs/tools/misc/file/default.nix
index 8e284b25c08..4a9dc7ee774 100644
--- a/pkgs/tools/misc/file/default.nix
+++ b/pkgs/tools/misc/file/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, file, zlib, libgnurx }:
+{ lib, stdenv, fetchurl, file, zlib, libgnurx }:
 
 stdenv.mkDerivation rec {
   pname = "file";
@@ -18,15 +18,15 @@ stdenv.mkDerivation rec {
     ./webassembly-format-fix.patch
   ];
 
-  nativeBuildInputs = stdenv.lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) file;
+  nativeBuildInputs = lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) file;
   buildInputs = [ zlib ]
-              ++ stdenv.lib.optional stdenv.hostPlatform.isWindows libgnurx;
+              ++ lib.optional stdenv.hostPlatform.isWindows libgnurx;
 
   doCheck = true;
 
-  makeFlags = stdenv.lib.optional stdenv.hostPlatform.isWindows "FILE_COMPILE=file";
+  makeFlags = lib.optional stdenv.hostPlatform.isWindows "FILE_COMPILE=file";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://darwinsys.com/file";
     description = "A program that shows the type of files";
     license = licenses.bsd2;
diff --git a/pkgs/tools/misc/filebench/default.nix b/pkgs/tools/misc/filebench/default.nix
index 4cd572ac992..ca62c8c4a1a 100644
--- a/pkgs/tools/misc/filebench/default.nix
+++ b/pkgs/tools/misc/filebench/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, autoreconfHook, bison, flex }:
+{ lib, stdenv, fetchurl, autoreconfHook, bison, flex }:
 
 stdenv.mkDerivation rec {
   pname = "filebench";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ autoreconfHook bison flex ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "File system and storage benchmark that can generate both micro and macro workloads";
     homepage = "https://sourceforge.net/projects/filebench/";
     license = licenses.cddl;
diff --git a/pkgs/tools/misc/fileschanged/default.nix b/pkgs/tools/misc/fileschanged/default.nix
index 056943e96d7..2c64c4c1edc 100644
--- a/pkgs/tools/misc/fileschanged/default.nix
+++ b/pkgs/tools/misc/fileschanged/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, gamin }:
+{ lib, stdenv, fetchurl, gamin }:
 
 stdenv.mkDerivation rec {
   name = "fileschanged-0.6.9";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://www.nongnu.org/fileschanged/";
     description = "A command-line utility that reports when files have been altered";
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
 
     longDescription = ''
       This utility is a client to FAM (File Alteration Monitor) servers
@@ -27,6 +27,6 @@ stdenv.mkDerivation rec {
       standard-output or executes a given command.
     '';
 
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/findutils/default.nix b/pkgs/tools/misc/findutils/default.nix
index 84dd187e1fc..18881ef181d 100644
--- a/pkgs/tools/misc/findutils/default.nix
+++ b/pkgs/tools/misc/findutils/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl
+{ lib, stdenv, fetchurl
 , coreutils
 }:
 
@@ -20,9 +20,10 @@ stdenv.mkDerivation rec {
     substituteInPlace xargs/xargs.c --replace 'char default_cmd[] = "echo";' 'char default_cmd[] = "${coreutils}/bin/echo";'
   '';
 
-  patches = [
-    ./no-install-statedir.patch
-  ];
+  patches = [ ./no-install-statedir.patch ]
+    # fix gnulib tests on 32-bit ARM. Included on findutils master.
+    # https://lists.gnu.org/r/bug-gnulib/2020-08/msg00225.html
+    ++ lib.optional stdenv.hostPlatform.isAarch32 ./fix-gnulib-tests-arm.patch;
 
   buildInputs = [ coreutils ]; # bin/updatedb script needs to call sort
 
@@ -63,8 +64,8 @@ stdenv.mkDerivation rec {
           * xargs - build and execute command lines from standard input.
     '';
 
-    platforms = stdenv.lib.platforms.all;
+    platforms = lib.platforms.all;
 
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
   };
 }
diff --git a/pkgs/tools/misc/findutils/fix-gnulib-tests-arm.patch b/pkgs/tools/misc/findutils/fix-gnulib-tests-arm.patch
new file mode 100644
index 00000000000..39bd29f8439
--- /dev/null
+++ b/pkgs/tools/misc/findutils/fix-gnulib-tests-arm.patch
@@ -0,0 +1,45 @@
+>From 175e0bc72808d564074c4adcc72aeadb74adfcc6 Mon Sep 17 00:00:00 2001
+From: Paul Eggert <eggert@cs.ucla.edu>
+Date: Thu, 27 Aug 2020 17:52:58 -0700
+Subject: [PATCH] perror, strerror_r: remove unportable tests
+
+Problem reported by Florian Weimer in:
+https://lists.gnu.org/r/bug-gnulib/2020-08/msg00220.html
+* tests/test-perror2.c (main):
+* tests/test-strerror_r.c (main): Omit unportable tests.
+---
+ tests/test-perror2.c    | 3 ---
+ tests/test-strerror_r.c | 3 ---
+ 2 files changed, 6 deletions(-)
+
+diff --git a/gnulib-tests/test-perror2.c b/gnulib-tests/test-perror2.c
+index 1d14eda7b..c6214dd25 100644
+--- a/gnulib-tests/test-perror2.c
++++ b/gnulib-tests/test-perror2.c
+@@ -79,9 +79,6 @@ main (void)
+     errno = -5;
+     perror ("");
+     ASSERT (!ferror (stderr));
+-    ASSERT (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1));
+-    ASSERT (msg2 == msg4 || STREQ (msg2, str2));
+-    ASSERT (msg3 == msg4 || STREQ (msg3, str3));
+     ASSERT (STREQ (msg4, str4));
+ 
+     free (str1);
+diff --git a/gnulib-tests/test-strerror_r.c b/gnulib-tests/test-strerror_r.c
+index b11d6fd9f..c1dbcf837 100644
+--- a/gnulib-tests/test-strerror_r.c
++++ b/gnulib-tests/test-strerror_r.c
+@@ -165,9 +165,6 @@ main (void)
+ 
+     strerror_r (EACCES, buf, sizeof buf);
+     strerror_r (-5, buf, sizeof buf);
+-    ASSERT (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1));
+-    ASSERT (msg2 == msg4 || STREQ (msg2, str2));
+-    ASSERT (msg3 == msg4 || STREQ (msg3, str3));
+     ASSERT (STREQ (msg4, str4));
+ 
+     free (str1);
+-- 
+2.17.1
+
diff --git a/pkgs/tools/misc/flameshot/default.nix b/pkgs/tools/misc/flameshot/default.nix
index afca2e3007e..f9136f14e61 100644
--- a/pkgs/tools/misc/flameshot/default.nix
+++ b/pkgs/tools/misc/flameshot/default.nix
@@ -1,44 +1,38 @@
-{ mkDerivation, lib, fetchFromGitHub, qtbase, qmake, qttools, qtsvg }:
+{ mkDerivation
+, lib
+, fetchFromGitHub
+, qtbase
+, cmake
+, qttools
+, qtsvg
+, nix-update-script
+}:
 
-# 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";
+  version = "0.10.0";
 
   src = fetchFromGitHub {
-    owner = "lupoDharkael";
+    owner = "flameshot-org";
     repo = "flameshot";
     rev = "v${version}";
-    sha256 = "193szslh55v44jzxzx5g9kxhl8p8di7vbcnxlid4acfidhnvgazm";
+    sha256 = "1m0mx8qhy9ycsqh5dj6c7mwwpbhqxlds31dqdxxk0krwl750smi2";
   };
 
-  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"
-  '';
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
 
-  enableParallelBuilding = true;
+  nativeBuildInputs = [ cmake qttools qtsvg ];
+  buildInputs = [ qtbase ];
 
   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;
+    homepage = "https://github.com/flameshot-org/flameshot";
+    maintainers = with maintainers; [ scode ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/flashrom/default.nix b/pkgs/tools/misc/flashrom/default.nix
index 6b190fcf842..e4e4868e4d9 100644
--- a/pkgs/tools/misc/flashrom/default.nix
+++ b/pkgs/tools/misc/flashrom/default.nix
@@ -3,10 +3,11 @@
 , fetchurl
 , meson
 , ninja
-, pkgconfig
+, pkg-config
 , libftdi1
 , libusb1
 , pciutils
+, installShellFiles
 }:
 
 stdenv.mkDerivation rec {
@@ -18,16 +19,29 @@ stdenv.mkDerivation rec {
     sha256 = "0ax4kqnh7kd3z120ypgp73qy1knz47l6qxsqzrfkd97mh5cdky71";
   };
 
-  nativeBuildInputs = [ meson pkgconfig ninja ];
+  postPatch = ''
+    substituteInPlace util/z60_flashrom.rules \
+      --replace "plugdev" "flashrom"
+  '';
+
+  # Meson build doesn't build and install manpage. Only Makefile can.
+  # Build manpage from source directory. Here we're inside the ./build subdirectory
+  postInstall = ''
+    make flashrom.8 -C ..
+    installManPage ../flashrom.8
+    install -Dm644 ../util/z60_flashrom.rules $out/etc/udev/rules.d/flashrom.rules
+  '';
+
+  mesonFlags = lib.optionals stdenv.isAarch64 [ "-Dpciutils=false" ];
+  nativeBuildInputs = [ meson pkg-config ninja installShellFiles ];
   buildInputs = [ libftdi1 libusb1 pciutils ];
 
   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 ];
+    maintainers = with maintainers; [ funfunctor fpletz felixsinger ];
     platforms = platforms.all;
-    # https://github.com/flashrom/flashrom/issues/125
-    badPlatforms = [ "aarch64-linux" ];
+    broken = stdenv.isDarwin; # requires DirectHW
   };
 }
diff --git a/pkgs/tools/misc/flexoptix-app/default.nix b/pkgs/tools/misc/flexoptix-app/default.nix
new file mode 100644
index 00000000000..40f30bd7ad9
--- /dev/null
+++ b/pkgs/tools/misc/flexoptix-app/default.nix
@@ -0,0 +1,47 @@
+{ lib, appimageTools, fetchurl }: let
+  pname = "flexoptix-app";
+  version = "5.9.0";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    name = "${name}.AppImage";
+    url = "https://flexbox.reconfigure.me/download/electron/linux/x64/FLEXOPTIX%20App.${version}.AppImage";
+    sha256 = "0gbqaj9b11mxx0knmmh2d5863kaslbb3r6c4h8rjhg8qy4cws7hj";
+  };
+
+  udevRules = fetchurl {
+    url = "https://www.flexoptix.net/skin/udev_rules/99-tprogrammer.rules";
+    sha256 = "0mr1bhgvavq1ax4206z1vr2y64s3r676w9jjl9ysziklbrsvk5rr";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    inherit name src;
+  };
+
+in appimageTools.wrapType2 {
+  inherit name src;
+
+  multiPkgs = null; # no 32bit needed
+  extraPkgs = { pkgs, ... }@args: [
+    pkgs.hidapi
+  ] ++ appimageTools.defaultFhsEnvArgs.multiPkgs args;
+
+  extraInstallCommands = ''
+    mv $out/bin/{${name},${pname}}
+    install -Dm444 ${appimageContents}/flexoptix-app.desktop -t $out/share/applications
+    install -Dm444 ${appimageContents}/flexoptix-app.png -t $out/share/pixmaps
+    substituteInPlace $out/share/applications/flexoptix-app.desktop \
+      --replace 'Exec=AppRun' "Exec=$out/bin/${pname}"
+    mkdir -p $out/lib/udev/rules.d
+    ln -s ${udevRules} $out/lib/udev/rules.d/99-tprogrammer.rules
+  '';
+
+  meta = {
+    description = "Configure FLEXOPTIX Universal Transcievers in seconds";
+    homepage = "https://www.flexoptix.net";
+    changelog = "https://www.flexoptix.net/en/flexoptix-app/?os=linux#flexapp__modal__changelog";
+    license = lib.licenses.unfree;
+    maintainers = with lib.maintainers; [ das_j ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/pkgs/tools/misc/fltrdr/default.nix b/pkgs/tools/misc/fltrdr/default.nix
index 8d585324d87..3e51a4c8bbc 100644
--- a/pkgs/tools/misc/fltrdr/default.nix
+++ b/pkgs/tools/misc/fltrdr/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , cmake
 , icu, openssl
@@ -19,9 +19,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ icu openssl ];
 
-  enableParallelBuilding = true;
-
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://octobanana.com/software/fltrdr";
     description = "A TUI text reader for the terminal";
 
@@ -40,4 +38,3 @@ stdenv.mkDerivation rec {
     maintainers = [ maintainers.matthiasbeyer ];
   };
 }
-
diff --git a/pkgs/tools/misc/fluent-bit/default.nix b/pkgs/tools/misc/fluent-bit/default.nix
index 28c005b7abb..fe7599ac815 100644
--- a/pkgs/tools/misc/fluent-bit/default.nix
+++ b/pkgs/tools/misc/fluent-bit/default.nix
@@ -1,29 +1,38 @@
-{ stdenv, fetchFromGitHub, cmake, flex, bison }:
+{ lib, stdenv, fetchFromGitHub, cmake, flex, bison, systemd }:
 
 stdenv.mkDerivation rec {
   pname = "fluent-bit";
-  version = "1.5.3";
+  version = "1.7.9";
 
   src = fetchFromGitHub {
     owner = "fluent";
     repo = "fluent-bit";
     rev = "v${version}";
-    sha256 = "153c7hafmzwxa24h923irfhzaqqd8wbr2aaab6l3hjhgx5q8s5bf";
+    sha256 = "sha256-rL2IJYTMs0Yzo/oqrcI56krmVnxxxRWCebSjjbjiP/k=";
   };
 
   nativeBuildInputs = [ cmake flex bison ];
 
+  buildInputs = lib.optionals stdenv.isLinux [ systemd ];
+
+  cmakeFlags = [ "-DFLB_METRICS=ON" "-DFLB_HTTP_SERVER=ON" ];
+
+  patches = lib.optionals stdenv.isDarwin [ ./fix-luajit-darwin.patch ];
+
+  # _FORTIFY_SOURCE requires compiling with optimization (-O)
+  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isGNU "-O";
+
+  outputs = [ "out" "dev" ];
+
   postPatch = ''
     substituteInPlace src/CMakeLists.txt \
       --replace /lib/systemd $out/lib/systemd
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Log forwarder and processor, part of Fluentd ecosystem";
     homepage = "https://fluentbit.io";
-    maintainers = with maintainers; [
-      samrose
-    ];
+    maintainers = with maintainers; [ samrose fpletz ];
     license = licenses.asl20;
     platforms = platforms.unix;
   };
diff --git a/pkgs/tools/misc/fluent-bit/fix-luajit-darwin.patch b/pkgs/tools/misc/fluent-bit/fix-luajit-darwin.patch
new file mode 100644
index 00000000000..21d9c21f5b9
--- /dev/null
+++ b/pkgs/tools/misc/fluent-bit/fix-luajit-darwin.patch
@@ -0,0 +1,14 @@
+diff -Naur fluent-bit.old/cmake/luajit.cmake fluent-bit.new/cmake/luajit.cmake
+--- fluent-bit.old/cmake/luajit.cmake
++++ fluent-bit.new/cmake/luajit.cmake
+@@ -11,10 +11,6 @@
+ set(LUAJIT_SRC ${CMAKE_CURRENT_SOURCE_DIR}/${FLB_PATH_LIB_LUAJIT})
+ set(LUAJIT_DEST ${CMAKE_CURRENT_BINARY_DIR})
+ 
+-if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
+-  set(CFLAGS "${CFLAGS} -isysroot ${CMAKE_OSX_SYSROOT}")
+-endif()
+-
+ # luajit (UNIX)
+ # =============
+ ExternalProject_Add(luajit
diff --git a/pkgs/tools/misc/fluentd/gemset.nix b/pkgs/tools/misc/fluentd/gemset.nix
index a4b488597c7..67b72d634bc 100644
--- a/pkgs/tools/misc/fluentd/gemset.nix
+++ b/pkgs/tools/misc/fluentd/gemset.nix
@@ -540,4 +540,4 @@
     };
     version = "1.4.1";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/misc/foma/default.nix b/pkgs/tools/misc/foma/default.nix
new file mode 100644
index 00000000000..e75aaca50f6
--- /dev/null
+++ b/pkgs/tools/misc/foma/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, zlib, flex, bison, readline, darwin }:
+
+stdenv.mkDerivation rec {
+  pname = "foma";
+  version = "0.9.18alpha";
+
+  src = fetchFromGitHub {
+    owner = "mhulden";
+    repo = "foma";
+    rev = "4456a40e81f46e3fe909c5a97a15fcf1d2a3b6c1";
+    sha256 = "188yxj8wahlj2yf93rj1vx549j5cq0085d2jmj3vwzbfjq1mi1f0";
+  };
+
+  sourceRoot = "source/foma";
+
+  nativeBuildInputs = [ flex bison ]
+    ++ lib.optional stdenv.isDarwin darwin.cctools;
+  buildInputs = [ zlib readline ];
+
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}cc"
+  ];
+
+  patchPhase = ''
+    substituteInPlace Makefile \
+      --replace '-ltermcap' ' ' \
+      --replace '/usr/local' '$(out)'
+  '';
+
+  meta = with lib; {
+    description = "A multi-purpose finite-state toolkit designed for applications ranging from natural language processing to research in automata theory";
+    homepage = "https://github.com/mhulden/foma";
+    license = licenses.asl20;
+    maintainers = [ maintainers.tckmn ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/misc/fondu/default.nix b/pkgs/tools/misc/fondu/default.nix
index 772ae236764..092d33b2e81 100644
--- a/pkgs/tools/misc/fondu/default.nix
+++ b/pkgs/tools/misc/fondu/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   version = "060102";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
   hardeningDisable = [ "fortify" ];
 
   meta = {
-    platforms = stdenv.lib.platforms.unix;
-    license = stdenv.lib.licenses.gpl3;
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl3;
   };
 }
diff --git a/pkgs/tools/misc/fontfor/default.nix b/pkgs/tools/misc/fontfor/default.nix
new file mode 100644
index 00000000000..73d1085450e
--- /dev/null
+++ b/pkgs/tools/misc/fontfor/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, cmake
+, pkg-config
+, expat
+, fontconfig
+, freetype
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fontfor";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "7sDream";
+    repo = "fontfor";
+    rev = "v${version}";
+    sha256 = "1b07hd41blwsnb91vh2ax9zigm4lh8n0i5man0cjmxhavvbfy12b";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+  buildInputs = [
+    expat
+    fontconfig
+    freetype
+  ];
+
+  cargoSha256 = "1drfrq32lvmi1xlshynzh66gb1cah43pqcyxv3qxp487br9w1iyj";
+
+  meta = with lib; {
+    description = "Find fonts which can show a specified character and preview them in browser";
+    homepage = "https://github.com/7sDream/fontfor";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ shamilton ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/fontforge/default.nix b/pkgs/tools/misc/fontforge/default.nix
index 8da5c871652..5f64057c46c 100644
--- a/pkgs/tools/misc/fontforge/default.nix
+++ b/pkgs/tools/misc/fontforge/default.nix
@@ -1,7 +1,6 @@
-{ stdenv, fetchurl, lib
-, fetchpatch
-, cmake, perl, uthash, pkgconfig, gettext
-, python, freetype, zlib, glib, libungif, libpng, libjpeg, libtiff, libxml2, cairo, pango
+{ stdenv, fetchpatch, fetchFromGitHub, lib
+, cmake, perl, uthash, pkg-config, gettext
+, python, freetype, zlib, glib, giflib, libpng, libjpeg, libtiff, libxml2, cairo, pango
 , readline, woff2, zeromq, libuninameslist
 , withSpiro ? false, libspiro
 , withGTK ? false, gtk3
@@ -15,22 +14,21 @@ assert withGTK -> withGUI;
 
 stdenv.mkDerivation rec {
   pname = "fontforge";
-  version = "20200314";
+  version = "20201107";
 
-  src = fetchurl {
-    url = "https://github.com/${pname}/${pname}/releases/download/${version}/${pname}-${version}.tar.xz";
-    sha256 = "0qf88wd6riycq56d24brybyc93ns74s0nyyavm43zp2kfcihn6fd";
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-Rl/5lbXaPgIndANaD0IakaDus6T53FjiBb45FIuGrvc=";
   };
 
   patches = [
-    # Unreleased fix for https://github.com/fontforge/fontforge/issues/4229
-    # which is required to fix an uninterposated `${CMAKE_INSTALL_PREFIX}/lib`, see
-    # see https://github.com/nh2/static-haskell-nix/pull/98#issuecomment-665395399
-    # TODO: Remove https://github.com/fontforge/fontforge/pull/4232 is in a release.
+    # Allow installing contrib files (e.g. extras and tools).
+    # Taken from https://salsa.debian.org/fonts-team/fontforge/-/blob/master/debian/patches/0001-add-extra-cmake-install-rules.patch
     (fetchpatch {
-      name = "fontforge-cmake-set-rpath-to-the-configure-time-CMAKE_INSTALL_PREFIX";
-      url = "https://github.com/fontforge/fontforge/commit/297ee9b5d6db5970ca17ebe5305189e79a1520a1.patch";
-      sha256 = "14qfp8pwh0vzzib4hq2nc6xhn8lc1cal1sb0lqwb2q5dijqx5kqk";
+      url = "https://salsa.debian.org/fonts-team/fontforge/raw/76bffe6ccf8ab20a0c81476a80a87ad245e2fd1c/debian/patches/0001-add-extra-cmake-install-rules.patch";
+      sha256 = "u3D9od2xLECNEHhZ+8dkuv9818tPkdP6y/Tvd9CADJg=";
     })
   ];
 
@@ -46,10 +44,10 @@ stdenv.mkDerivation rec {
   # 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 cmake ];
+  nativeBuildInputs = [ pkg-config cmake ];
   buildInputs = [
     readline uthash woff2 zeromq libuninameslist
-    python freetype zlib glib libungif libpng libjpeg libtiff libxml2
+    python freetype zlib glib giflib libpng libjpeg libtiff libxml2
   ]
     ++ lib.optionals withSpiro [libspiro]
     ++ lib.optionals withGUI [ gtk3 cairo pango ]
@@ -76,8 +74,8 @@ stdenv.mkDerivation rec {
   meta = {
     description = "A font editor";
     homepage = "http://fontforge.github.io";
-    platforms = stdenv.lib.platforms.all;
-    license = stdenv.lib.licenses.bsd3;
-    maintainers = [ stdenv.lib.maintainers.erictapen ];
+    platforms = lib.platforms.all;
+    license = lib.licenses.bsd3;
+    maintainers = [ lib.maintainers.erictapen ];
   };
 }
diff --git a/pkgs/tools/misc/fortune/default.nix b/pkgs/tools/misc/fortune/default.nix
index 74c21d21fcc..350e28428d4 100644
--- a/pkgs/tools/misc/fortune/default.nix
+++ b/pkgs/tools/misc/fortune/default.nix
@@ -1,12 +1,14 @@
-{ stdenv, fetchurl, cmake, recode, perl }:
+{ lib, stdenv, fetchurl, cmake, recode, perl }:
 
 stdenv.mkDerivation rec {
   pname = "fortune-mod";
-  version = "2.10.0";
+  version = "3.6.1";
 
+  # We use fetchurl instead of fetchFromGitHub because the release pack has some
+  # special files.
   src = fetchurl {
-    url = "https://www.shlomifish.org/open-source/projects/fortune-mod/arcs/fortune-mod-${version}.tar.xz";
-    sha256 = "07g50hij87jb7m40pkvgd47qfvv4s805lwiz79jbqcxzd7zdyax7";
+    url = "https://github.com/shlomif/fortune-mod/releases/download/${pname}-${version}/${pname}-${version}.tar.xz";
+    sha256 = "1cw7xf9xhh6d73y4h4q57g6akjhc1gq6xv37k57sx0wx77wjxqdp";
   };
 
   nativeBuildInputs = [ cmake perl ];
@@ -31,12 +33,13 @@ stdenv.mkDerivation rec {
      )
 
      my_exe(
-    -- 
+    --
   '') ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A program that displays a pseudorandom message from a database of quotations";
     license = licenses.bsdOriginal;
     platforms = platforms.unix;
+    maintainers = with maintainers; [ vonfry ];
   };
 }
diff --git a/pkgs/tools/misc/fpart/default.nix b/pkgs/tools/misc/fpart/default.nix
index e673c73d096..bdb762c98a6 100644
--- a/pkgs/tools/misc/fpart/default.nix
+++ b/pkgs/tools/misc/fpart/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, fts }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, fts }:
 
 stdenv.mkDerivation rec {
   pname = "fpart";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
         -i "$out/bin/fpsync"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/misc/fpp/default.nix b/pkgs/tools/misc/fpp/default.nix
index b00f2198dbc..6c2abbf6c64 100644
--- a/pkgs/tools/misc/fpp/default.nix
+++ b/pkgs/tools/misc/fpp/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python3 }:
+{ lib, stdenv, fetchFromGitHub, python3 }:
 
 stdenv.mkDerivation rec {
   pname = "fpp";
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/freshfetch/Cargo.lock b/pkgs/tools/misc/freshfetch/Cargo.lock
new file mode 100644
index 00000000000..24cfb7e9de9
--- /dev/null
+++ b/pkgs/tools/misc/freshfetch/Cargo.lock
@@ -0,0 +1,587 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"
+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.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+
+[[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.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a40b47ad93e1a5404e6c18dec46b628214fee441c70f4ab5d6942142cc268a3d"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
+dependencies = [
+ "libc",
+ "num-integer",
+ "num-traits",
+ "time",
+ "winapi",
+]
+
+[[package]]
+name = "clap"
+version = "2.33.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clml_rs"
+version = "0.3.0"
+source = "git+https://github.com/K4rakara/clml-rs#eecf1378f4e85a9b3dc91e8a15d497a2fd75906f"
+dependencies = [
+ "lazy_static",
+ "rand",
+ "regex",
+]
+
+[[package]]
+name = "cmd_lib"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42443b644d30f401746fb4483fba96b13076e1ef6cb5bca7d6a14d1d8f9f2bd9"
+dependencies = [
+ "cmd_lib_core",
+ "cmd_lib_macros",
+]
+
+[[package]]
+name = "cmd_lib_core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c50c50a1536e882455aeaff22015146ea143b9106fc8e116669dd078ec7b7fc8"
+
+[[package]]
+name = "cmd_lib_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d202b0cfc28d8928ba89138c0a8248cf921b9870c6c9d60c9951092df5b62b2"
+dependencies = [
+ "cmd_lib_core",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b"
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2584f639eb95fea8c798496315b297cf81b9b58b6d30ab066a75455333cf4b12"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+ "lazy_static",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "lazy_static",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+
+[[package]]
+name = "freshfetch"
+version = "0.2.0"
+dependencies = [
+ "chrono",
+ "clap",
+ "clml_rs",
+ "cmd_lib",
+ "cmd_lib_core",
+ "lazy_static",
+ "mlua",
+ "regex",
+ "sysinfo",
+ "term_size",
+ "uname",
+ "users",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9385f66bf6105b241aa65a61cb923ef20efc665cb9f9bb50ac2f0c4b7f378d41"
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "lua-src"
+version = "543.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "029180f994b9b36f47d905f92569b516acf7d073778e2e781c15ee375b1ca27d"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "luajit-src"
+version = "210.1.3+restyfe08842"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36d3de8377d8e0492b646527befb7eb826a9ecd2dc8c1f81ab0e654bc03a029b"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "memchr"
+version = "2.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
+
+[[package]]
+name = "memoffset"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f83fb6581e8ed1f85fd45c116db8405483899489e38406156c25eb743554361d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mlua"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f2fc8e1085d53b72898c59ceee1980b5826b0c98ce99886b7518f0ead00e5cb"
+dependencies = [
+ "bstr",
+ "cc",
+ "lazy_static",
+ "lua-src",
+ "luajit-src",
+ "num-traits",
+ "pkg-config",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom",
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "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 = "rayon"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674"
+dependencies = [
+ "autocfg",
+ "crossbeam-deque",
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "lazy_static",
+ "num_cpus",
+]
+
+[[package]]
+name = "regex"
+version = "1.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5f089152e60f62d28b835fbff2cd2e8dc0baf1ac13343bef92ab7eed84548"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "sysinfo"
+version = "0.15.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de94457a09609f33fec5e7fceaf907488967c6c7c75d64da6a7ce6ffdb8b5abd"
+dependencies = [
+ "cc",
+ "cfg-if",
+ "core-foundation-sys",
+ "doc-comment",
+ "libc",
+ "ntapi",
+ "once_cell",
+ "rayon",
+ "winapi",
+]
+
+[[package]]
+name = "term_size"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "time"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "uname"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b72f89f0ca32e4db1c04e2a72f5345d59796d4866a1ee0609084569f73683dc8"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
+
+[[package]]
+name = "users"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa4227e95324a443c9fcb06e03d4d85e91aabe9a5a02aa818688b6918b6af486"
+dependencies = [
+ "libc",
+ "log",
+]
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+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-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/pkgs/tools/misc/freshfetch/default.nix b/pkgs/tools/misc/freshfetch/default.nix
new file mode 100644
index 00000000000..b9d671f224e
--- /dev/null
+++ b/pkgs/tools/misc/freshfetch/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchurl
+, rustPlatform
+, AppKit
+, CoreFoundation
+, DiskArbitration
+, Foundation
+, IOKit
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "freshfetch";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "k4rakara";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1l9zngr5l12g71j85iyph4jjri3crxc2pi9q0gczrrzvs03439mn";
+  };
+
+  cargoLock = {
+    # update Cargo.lock every new release of freshfetch
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "clml_rs-0.3.0" = "0hvd59zh7czk9jd1a2wwcm1acpcfbz32v9ka7ap6f74d638jcc19";
+    };
+  };
+
+  # freshfetch depends on rust nightly features
+  RUSTC_BOOTSTRAP = 1;
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    AppKit
+    CoreFoundation
+    DiskArbitration
+    Foundation
+    IOKit
+  ];
+
+  meta = with lib; {
+    description = "A fresh take on neofetch";
+    homepage = "https://github.com/k4rakara/freshfetch";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/pkgs/tools/misc/fsearch/default.nix b/pkgs/tools/misc/fsearch/default.nix
new file mode 100644
index 00000000000..e2782ef652b
--- /dev/null
+++ b/pkgs/tools/misc/fsearch/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gtk3
+, pcre
+, glib
+, desktop-file-utils
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook
+, unstableGitUpdater
+, gettext
+}:
+
+stdenv.mkDerivation {
+  pname = "fsearch";
+  version = "unstable-2021-06-23";
+
+  src = fetchFromGitHub {
+    owner = "cboxdoerfer";
+    repo = "fsearch";
+    rev = "9300cc03ab2f0cea3a70abb5477bda8b52c4afd1";
+    sha256 = "16qh2si48j113yhay5wawr7dvldks6jb32za41j2sng7n4ryw221";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+    gettext
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    pcre
+  ];
+
+  preFixup = ''
+    substituteInPlace $out/share/applications/io.github.cboxdoerfer.FSearch.desktop \
+      --replace "Exec=fsearch" "Exec=$out/bin/fsearch"
+  '';
+
+  passthru.updateScript = unstableGitUpdater {
+    url = "https://github.com/cboxdoerfer/fsearch.git";
+  };
+
+  meta = with lib; {
+    description = "A fast file search utility for Unix-like systems based on GTK+3";
+    homepage = "https://github.com/cboxdoerfer/fsearch.git";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ artturin ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/fselect/default.nix b/pkgs/tools/misc/fselect/default.nix
index 312c7bbe3e9..e877304a2d5 100644
--- a/pkgs/tools/misc/fselect/default.nix
+++ b/pkgs/tools/misc/fselect/default.nix
@@ -1,28 +1,29 @@
-{ stdenv, fetchFromGitHub, rustPlatform, installShellFiles }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, installShellFiles, libiconv }:
 
 rustPlatform.buildRustPackage rec {
   pname = "fselect";
-  version = "0.6.10";
+  version = "0.7.6";
 
   src = fetchFromGitHub {
     owner = "jhspetersson";
     repo = "fselect";
     rev = version;
-    sha256 = "17dz0qj2981plvzp72yisyrjnyz1sy3pqyvhx76ws2754vjgq4ra";
+    sha256 = "sha256-uIqkk0aQVPXUWjOWmMTdM28Ihi+mflPpxnXJLFIQYJw=";
   };
 
-  cargoSha256 = "19b05gx717xjg4arn4zgrqh7ckzgzx0ygg9gkfzsg7phz7f01626";
+  cargoSha256 = "sha256-5LRCLJbLiocB/VDf9MMxyIsERmOvuSAQEe822Dcu2j8=";
 
   nativeBuildInputs = [ installShellFiles ];
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
 
   postInstall = ''
     installManPage docs/fselect.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Find files with SQL-like queries";
     homepage = "https://github.com/jhspetersson/fselect";
     license = with licenses; [ asl20 mit ];
-    maintainers = with maintainers; [ filalex77 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/misc/fsmark/default.nix b/pkgs/tools/misc/fsmark/default.nix
index 7bfa24e3a08..1a21156e640 100644
--- a/pkgs/tools/misc/fsmark/default.nix
+++ b/pkgs/tools/misc/fsmark/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "fsmark";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     cp fs_mark $out/bin/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Synchronous write workload file system benchmark";
     homepage = "https://sourceforge.net/projects/fsmark/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/fsmon/default.nix b/pkgs/tools/misc/fsmon/default.nix
index 668fa463adb..94b209bcd00 100644
--- a/pkgs/tools/misc/fsmon/default.nix
+++ b/pkgs/tools/misc/fsmon/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "fsmon";
-  version = "1.8.1";
+  version = "1.8.4";
 
   src = fetchFromGitHub {
     owner = "nowsecure";
     repo = "fsmon";
     rev = version;
-    sha256 = "0i7irqs4100j0g19jh64p2plbwipl6p3ld6w4sscc7n8lwkxmj03";
+    sha256 = "sha256-4KF8h+YdCMrF9Yk/9y71WqNjzyoEZnddriDZAdpIaa4=";
   };
 
   installPhase = ''
     make install PREFIX=$out
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "FileSystem Monitor utility";
     homepage = "https://github.com/nowsecure/fsmon";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/fsql/default.nix b/pkgs/tools/misc/fsql/default.nix
index fa64d742865..dac33eaedb3 100644
--- a/pkgs/tools/misc/fsql/default.nix
+++ b/pkgs/tools/misc/fsql/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "fsql";
@@ -13,13 +13,12 @@ buildGoPackage rec {
     sha256 = "1accpxryk4744ydfrqc3la5k376ji11yr84n66dz5cx0f3n71vmz";
   };
 
-  meta = with stdenv.lib; {
+  meta = with 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/pkgs/tools/misc/fwup/default.nix b/pkgs/tools/misc/fwup/default.nix
index bf6c125ac75..69b76cf648d 100644
--- a/pkgs/tools/misc/fwup/default.nix
+++ b/pkgs/tools/misc/fwup/default.nix
@@ -1,29 +1,67 @@
-{ stdenv, lib, fetchFromGitHub, autoreconfHook, makeWrapper, pkgconfig
-, zlib, lzma, bzip2, mtools, dosfstools, zip, unzip, libconfuse, libsodium
-, libarchive, darwin, coreutils }:
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoreconfHook
+, DiskArbitration
+, pkg-config
+, bzip2
+, libarchive
+, libconfuse
+, libsodium
+, xz
+, zlib
+, coreutils
+, dosfstools
+, mtools
+, unzip
+, zip
+, which
+, xdelta
+}:
 
 stdenv.mkDerivation rec {
   pname = "fwup";
-  version = "1.5.2";
+  version = "1.8.4";
 
   src = fetchFromGitHub {
     owner = "fhunleth";
     repo = "fwup";
     rev = "v${version}";
-    sha256 = "05sjdlh450hk474a44yr6kz9dzx72jfxpi1krxbd0pdizlmfypsg";
+    sha256 = "sha256-NaSA3mFWf3C03SAGssMqLT0vr5KMfxD5y/iragGNKjw=";
   };
 
-  doCheck = true;
-  patches = lib.optional stdenv.isDarwin [ ./fix-testrunner-darwin.patch ];
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    bzip2
+    libarchive
+    libconfuse
+    libsodium
+    xz
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    DiskArbitration
+  ];
+
+  propagatedBuildInputs = [
+    coreutils
+    dosfstools
+    mtools
+    unzip
+    zip
+  ];
 
-  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 ];
+  checkInputs = [
+    which
+    xdelta
+  ];
+
+  doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Configurable embedded Linux firmware update creator and runner";
     homepage = "https://github.com/fhunleth/fwup";
     license = licenses.asl20;
diff --git a/pkgs/tools/misc/fwup/fix-testrunner-darwin.patch b/pkgs/tools/misc/fwup/fix-testrunner-darwin.patch
deleted file mode 100644
index b04b436ff5b..00000000000
--- a/pkgs/tools/misc/fwup/fix-testrunner-darwin.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-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/pkgs/tools/misc/fx_cast/default.nix b/pkgs/tools/misc/fx_cast/default.nix
index ec977d48572..e3458ccfe5c 100644
--- a/pkgs/tools/misc/fx_cast/default.nix
+++ b/pkgs/tools/misc/fx_cast/default.nix
@@ -1,85 +1,64 @@
-{ stdenv, fetchurl, dpkg }:
-
+# How to generate a new version:
+#
+# Update version and hash as usual.
+#
+# ```
+# cd fx_cast/app
+# # Add `"name": "fx_cast_bridge", "version": "...",` to package.json and package-lock.json
+# nix run nixpkgs.nodePackages.node2nix -c node2nix -l package-lock.json -d
+# cp -v node-*.nix package*.json ~/p/nixpkgs/pkgs/tools/misc/fx_cast/app
+# ```
+{ pkgs, stdenv, system }: let
+  nodeEnv = import ./node-env.nix {
+    inherit (pkgs) nodejs stdenv lib python2 runCommand writeTextFile;
+    inherit pkgs;
+    libtool = if stdenv.isDarwin then pkgs.darwin.cctools else null;
+  };
+  nodePackages = import ./node-packages.nix {
+    inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit;
+    inherit nodeEnv;
+    globalBuildInputs = [pkgs.avahi-compat];
+  };
+in
 stdenv.mkDerivation rec {
-  pname = "fx_cast_bridge";
-  version = "0.0.6";
-
-  src = fetchurl {
-     url = "https://github.com/hensm/fx_cast/releases/download/v${version}/${pname}-${version}-x64.deb";
-     sha256 = "1mjpwd27b0cpigz4cc2mdl97d78rj5ikn2bqfdic50lqjciaqi1b";
+  name = "fx_cast_bridge-${version}";
+  version = "0.1.2";
+
+  src = pkgs.fetchFromGitHub {
+    owner = "hensm";
+    repo = "fx_cast";
+    rev = "v${version}";
+    hash = "sha256:1prgk9669xgwkdl39clq0l75n0gnkkpn27gp9rbgl4bafrhvmg9a";
   };
 
-  nativeBuildInputs = [ dpkg ];
+  buildInputs = with pkgs; [
+    nodejs
+  ];
 
-  unpackPhase = ''
-    runHook preUnpack
-    dpkg-deb -xv $src ./
-    runHook postUnpack
+  buildPhase = ''
+    ln -vs ${nodePackages.nodeDependencies}/lib/node_modules app/node_modules
+    npm run build:app
   '';
 
-  dontBuild = true;
-  dontPatchELF = true;
-
   installPhase = ''
-    install -DT {opt/fx_cast,$out/bin}/${pname}
-    install -DT {usr,$out}/lib/mozilla/native-messaging-hosts/${pname}.json
-
-    substituteInPlace $out/lib/mozilla/native-messaging-hosts/${pname}.json \
-      --replace {/opt/fx_cast,$out/bin}/${pname}
-  '';
-
-  # See now-cli/default.nix
-  dontStrip = true;
-  preFixup = let
-    libPath = stdenv.lib.makeLibraryPath [stdenv.cc.cc stdenv.cc.libc];
-    bin = "$out/bin/${pname}";
-  in ''
-
-    orig_size=$(stat --printf=%s ${bin})
-
-    patchelf --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" ${bin}
-    patchelf --set-rpath ${libPath} ${bin}
-    chmod +x ${bin}
-
-    new_size=$(stat --printf=%s ${bin})
-
-    ###### zeit-pkg fixing starts here.
-    # we're replacing plaintext js code that looks like
-    # PAYLOAD_POSITION = '1234                  ' | 0
-    # [...]
-    # PRELUDE_POSITION = '1234                  ' | 0
-    # ^-----20-chars-----^^------22-chars------^
-    # ^-- grep points here
-    #
-    # var_* are as described above
-    # shift_by seems to be safe so long as all patchelf adjustments occur
-    # before any locations pointed to by hardcoded offsets
-
-    var_skip=20
-    var_select=22
-    shift_by=$(expr $new_size - $orig_size)
-
-    function fix_offset {
-      # $1 = name of variable to adjust
-      location=$(grep -obUam1 "$1" ${bin} | cut -d: -f1)
-      location=$(expr $location + $var_skip)
-
-      value=$(dd if=${bin} iflag=count_bytes,skip_bytes skip=$location \
-                 bs=1 count=$var_select status=none)
-      value=$(expr $shift_by + $value)
+    mkdir -p $out/bin $out/lib/mozilla/native-messaging-hosts $out/opt
 
-      echo -n $value | dd of=${bin} bs=1 seek=$location conv=notrunc
-    }
+    substituteInPlace dist/app/fx_cast_bridge.json \
+      --replace "$(realpath dist/app/fx_cast_bridge.sh)" "$out/bin/fx_cast_bridge"
+    mv dist/app/fx_cast_bridge.json $out/lib/mozilla/native-messaging-hosts
 
-    fix_offset PAYLOAD_POSITION
-    fix_offset PRELUDE_POSITION
+    echo "#! /bin/sh
+      NODE_PATH=${nodePackages.nodeDependencies}/lib/node_modules exec ${pkgs.nodejs}/bin/node $out/opt/fx_cast_bridge/src/main.js --_name fx_cast_bridge \"\$@\"
+    " >$out/bin/fx_cast_bridge
+    chmod +x $out/bin/fx_cast_bridge
 
+    mv dist/app $out/opt/fx_cast_bridge
   '';
 
-  meta = with stdenv.lib; {
+  meta = with pkgs.lib; {
     description = "Implementation of the Chrome Sender API (Chromecast) within Firefox";
     homepage = "https://hensm.github.io/fx_cast/";
     license = licenses.mit;
-    maintainers = with maintainers; [ dtzWill ];
+    maintainers = with maintainers; [ dtzWill kevincox ];
   };
 }
diff --git a/pkgs/tools/misc/fx_cast/node-env.nix b/pkgs/tools/misc/fx_cast/node-env.nix
new file mode 100644
index 00000000000..c2b723195b7
--- /dev/null
+++ b/pkgs/tools/misc/fx_cast/node-env.nix
@@ -0,0 +1,567 @@
+# This file originates from node2nix
+
+{lib, stdenv, nodejs, python2, pkgs, libtool, runCommand, writeTextFile}:
+
+let
+  # Workaround to cope with utillinux in Nixpkgs 20.09 and util-linux in Nixpkgs master
+  utillinux = if pkgs ? utillinux then pkgs.utillinux else pkgs.util-linux;
+
+  python = if nodejs ? python then nodejs.python else python2;
+
+  # Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise
+  tarWrapper = runCommand "tarWrapper" {} ''
+    mkdir -p $out/bin
+
+    cat > $out/bin/tar <<EOF
+    #! ${stdenv.shell} -e
+    $(type -p tar) "\$@" --warning=no-unknown-keyword --delay-directory-restore
+    EOF
+
+    chmod +x $out/bin/tar
+  '';
+
+  # Function that generates a TGZ file from a NPM project
+  buildNodeSourceDist =
+    { name, version, src, ... }:
+
+    stdenv.mkDerivation {
+      name = "node-tarball-${name}-${version}";
+      inherit src;
+      buildInputs = [ nodejs ];
+      buildPhase = ''
+        export HOME=$TMPDIR
+        tgzFile=$(npm pack | tail -n 1) # Hooks to the pack command will add output (https://docs.npmjs.com/misc/scripts)
+      '';
+      installPhase = ''
+        mkdir -p $out/tarballs
+        mv $tgzFile $out/tarballs
+        mkdir -p $out/nix-support
+        echo "file source-dist $out/tarballs/$tgzFile" >> $out/nix-support/hydra-build-products
+      '';
+    };
+
+  includeDependencies = {dependencies}:
+    lib.optionalString (dependencies != [])
+      (lib.concatMapStrings (dependency:
+        ''
+          # Bundle the dependencies of the package
+          mkdir -p node_modules
+          cd node_modules
+
+          # Only include dependencies if they don't exist. They may also be bundled in the package.
+          if [ ! -e "${dependency.name}" ]
+          then
+              ${composePackage dependency}
+          fi
+
+          cd ..
+        ''
+      ) dependencies);
+
+  # Recursively composes the dependencies of a package
+  composePackage = { name, packageName, src, dependencies ? [], ... }@args:
+    builtins.addErrorContext "while evaluating node package '${packageName}'" ''
+      DIR=$(pwd)
+      cd $TMPDIR
+
+      unpackFile ${src}
+
+      # Make the base dir in which the target dependency resides first
+      mkdir -p "$(dirname "$DIR/${packageName}")"
+
+      if [ -f "${src}" ]
+      then
+          # Figure out what directory has been unpacked
+          packageDir="$(find . -maxdepth 1 -type d | tail -1)"
+
+          # Restore write permissions to make building work
+          find "$packageDir" -type d -exec chmod u+x {} \;
+          chmod -R u+w "$packageDir"
+
+          # Move the extracted tarball into the output folder
+          mv "$packageDir" "$DIR/${packageName}"
+      elif [ -d "${src}" ]
+      then
+          # Get a stripped name (without hash) of the source directory.
+          # On old nixpkgs it's already set internally.
+          if [ -z "$strippedName" ]
+          then
+              strippedName="$(stripHash ${src})"
+          fi
+
+          # Restore write permissions to make building work
+          chmod -R u+w "$strippedName"
+
+          # Move the extracted directory into the output folder
+          mv "$strippedName" "$DIR/${packageName}"
+      fi
+
+      # Unset the stripped name to not confuse the next unpack step
+      unset strippedName
+
+      # Include the dependencies of the package
+      cd "$DIR/${packageName}"
+      ${includeDependencies { inherit dependencies; }}
+      cd ..
+      ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+    '';
+
+  pinpointDependencies = {dependencies, production}:
+    let
+      pinpointDependenciesFromPackageJSON = writeTextFile {
+        name = "pinpointDependencies.js";
+        text = ''
+          var fs = require('fs');
+          var path = require('path');
+
+          function resolveDependencyVersion(location, name) {
+              if(location == process.env['NIX_STORE']) {
+                  return null;
+              } else {
+                  var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json");
+
+                  if(fs.existsSync(dependencyPackageJSON)) {
+                      var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON));
+
+                      if(dependencyPackageObj.name == name) {
+                          return dependencyPackageObj.version;
+                      }
+                  } else {
+                      return resolveDependencyVersion(path.resolve(location, ".."), name);
+                  }
+              }
+          }
+
+          function replaceDependencies(dependencies) {
+              if(typeof dependencies == "object" && dependencies !== null) {
+                  for(var dependency in dependencies) {
+                      var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency);
+
+                      if(resolvedVersion === null) {
+                          process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n");
+                      } else {
+                          dependencies[dependency] = resolvedVersion;
+                      }
+                  }
+              }
+          }
+
+          /* Read the package.json configuration */
+          var packageObj = JSON.parse(fs.readFileSync('./package.json'));
+
+          /* Pinpoint all dependencies */
+          replaceDependencies(packageObj.dependencies);
+          if(process.argv[2] == "development") {
+              replaceDependencies(packageObj.devDependencies);
+          }
+          replaceDependencies(packageObj.optionalDependencies);
+
+          /* Write the fixed package.json file */
+          fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2));
+        '';
+      };
+    in
+    ''
+      node ${pinpointDependenciesFromPackageJSON} ${if production then "production" else "development"}
+
+      ${lib.optionalString (dependencies != [])
+        ''
+          if [ -d node_modules ]
+          then
+              cd node_modules
+              ${lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies}
+              cd ..
+          fi
+        ''}
+    '';
+
+  # Recursively traverses all dependencies of a package and pinpoints all
+  # dependencies in the package.json file to the versions that are actually
+  # being used.
+
+  pinpointDependenciesOfPackage = { packageName, dependencies ? [], production ? true, ... }@args:
+    ''
+      if [ -d "${packageName}" ]
+      then
+          cd "${packageName}"
+          ${pinpointDependencies { inherit dependencies production; }}
+          cd ..
+          ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+      fi
+    '';
+
+  # Extract the Node.js source code which is used to compile packages with
+  # native bindings
+  nodeSources = runCommand "node-sources" {} ''
+    tar --no-same-owner --no-same-permissions -xf ${nodejs.src}
+    mv node-* $out
+  '';
+
+  # Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty)
+  addIntegrityFieldsScript = writeTextFile {
+    name = "addintegrityfields.js";
+    text = ''
+      var fs = require('fs');
+      var path = require('path');
+
+      function augmentDependencies(baseDir, dependencies) {
+          for(var dependencyName in dependencies) {
+              var dependency = dependencies[dependencyName];
+
+              // Open package.json and augment metadata fields
+              var packageJSONDir = path.join(baseDir, "node_modules", dependencyName);
+              var packageJSONPath = path.join(packageJSONDir, "package.json");
+
+              if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored
+                  console.log("Adding metadata fields to: "+packageJSONPath);
+                  var packageObj = JSON.parse(fs.readFileSync(packageJSONPath));
+
+                  if(dependency.integrity) {
+                      packageObj["_integrity"] = dependency.integrity;
+                  } else {
+                      packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads.
+                  }
+
+                  if(dependency.resolved) {
+                      packageObj["_resolved"] = dependency.resolved; // Adopt the resolved property if one has been provided
+                  } else {
+                      packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories.
+                  }
+
+                  if(dependency.from !== undefined) { // Adopt from property if one has been provided
+                      packageObj["_from"] = dependency.from;
+                  }
+
+                  fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2));
+              }
+
+              // Augment transitive dependencies
+              if(dependency.dependencies !== undefined) {
+                  augmentDependencies(packageJSONDir, dependency.dependencies);
+              }
+          }
+      }
+
+      if(fs.existsSync("./package-lock.json")) {
+          var packageLock = JSON.parse(fs.readFileSync("./package-lock.json"));
+
+          if(![1, 2].includes(packageLock.lockfileVersion)) {
+             process.stderr.write("Sorry, I only understand lock file versions 1 and 2!\n");
+             process.exit(1);
+          }
+
+          if(packageLock.dependencies !== undefined) {
+              augmentDependencies(".", packageLock.dependencies);
+          }
+      }
+    '';
+  };
+
+  # Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes
+  reconstructPackageLock = writeTextFile {
+    name = "addintegrityfields.js";
+    text = ''
+      var fs = require('fs');
+      var path = require('path');
+
+      var packageObj = JSON.parse(fs.readFileSync("package.json"));
+
+      var lockObj = {
+          name: packageObj.name,
+          version: packageObj.version,
+          lockfileVersion: 1,
+          requires: true,
+          dependencies: {}
+      };
+
+      function augmentPackageJSON(filePath, dependencies) {
+          var packageJSON = path.join(filePath, "package.json");
+          if(fs.existsSync(packageJSON)) {
+              var packageObj = JSON.parse(fs.readFileSync(packageJSON));
+              dependencies[packageObj.name] = {
+                  version: packageObj.version,
+                  integrity: "sha1-000000000000000000000000000=",
+                  dependencies: {}
+              };
+              processDependencies(path.join(filePath, "node_modules"), dependencies[packageObj.name].dependencies);
+          }
+      }
+
+      function processDependencies(dir, dependencies) {
+          if(fs.existsSync(dir)) {
+              var files = fs.readdirSync(dir);
+
+              files.forEach(function(entry) {
+                  var filePath = path.join(dir, entry);
+                  var stats = fs.statSync(filePath);
+
+                  if(stats.isDirectory()) {
+                      if(entry.substr(0, 1) == "@") {
+                          // When we encounter a namespace folder, augment all packages belonging to the scope
+                          var pkgFiles = fs.readdirSync(filePath);
+
+                          pkgFiles.forEach(function(entry) {
+                              if(stats.isDirectory()) {
+                                  var pkgFilePath = path.join(filePath, entry);
+                                  augmentPackageJSON(pkgFilePath, dependencies);
+                              }
+                          });
+                      } else {
+                          augmentPackageJSON(filePath, dependencies);
+                      }
+                  }
+              });
+          }
+      }
+
+      processDependencies("node_modules", lockObj.dependencies);
+
+      fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2));
+    '';
+  };
+
+  prepareAndInvokeNPM = {packageName, bypassCache, reconstructLock, npmFlags, production}:
+    let
+      forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
+    in
+    ''
+        # Pinpoint the versions of all dependencies to the ones that are actually being used
+        echo "pinpointing versions of dependencies..."
+        source $pinpointDependenciesScriptPath
+
+        # Patch the shebangs of the bundled modules to prevent them from
+        # calling executables outside the Nix store as much as possible
+        patchShebangs .
+
+        # Deploy the Node.js package by running npm install. Since the
+        # dependencies have been provided already by ourselves, it should not
+        # attempt to install them again, which is good, because we want to make
+        # it Nix's responsibility. If it needs to install any dependencies
+        # anyway (e.g. because the dependency parameters are
+        # incomplete/incorrect), it fails.
+        #
+        # The other responsibilities of NPM are kept -- version checks, build
+        # steps, postprocessing etc.
+
+        export HOME=$TMPDIR
+        cd "${packageName}"
+        runHook preRebuild
+
+        ${lib.optionalString bypassCache ''
+          ${lib.optionalString reconstructLock ''
+            if [ -f package-lock.json ]
+            then
+                echo "WARNING: Reconstruct lock option enabled, but a lock file already exists!"
+                echo "This will most likely result in version mismatches! We will remove the lock file and regenerate it!"
+                rm package-lock.json
+            else
+                echo "No package-lock.json file found, reconstructing..."
+            fi
+
+            node ${reconstructPackageLock}
+          ''}
+
+          node ${addIntegrityFieldsScript}
+        ''}
+
+        npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild
+
+        if [ "''${dontNpmInstall-}" != "1" ]
+        then
+            # NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
+            rm -f npm-shrinkwrap.json
+
+            npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} install
+        fi
+    '';
+
+  # Builds and composes an NPM package including all its dependencies
+  buildNodePackage =
+    { name
+    , packageName
+    , version
+    , dependencies ? []
+    , buildInputs ? []
+    , production ? true
+    , npmFlags ? ""
+    , dontNpmInstall ? false
+    , bypassCache ? false
+    , reconstructLock ? false
+    , preRebuild ? ""
+    , dontStrip ? true
+    , unpackPhase ? "true"
+    , buildPhase ? "true"
+    , ... }@args:
+
+    let
+      extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" ];
+    in
+    stdenv.mkDerivation ({
+      name = "node_${name}-${version}";
+      buildInputs = [ tarWrapper python nodejs ]
+        ++ lib.optional (stdenv.isLinux) utillinux
+        ++ lib.optional (stdenv.isDarwin) libtool
+        ++ buildInputs;
+
+      inherit nodejs;
+
+      inherit dontStrip; # Stripping may fail a build for some package deployments
+      inherit dontNpmInstall preRebuild unpackPhase buildPhase;
+
+      compositionScript = composePackage args;
+      pinpointDependenciesScript = pinpointDependenciesOfPackage args;
+
+      passAsFile = [ "compositionScript" "pinpointDependenciesScript" ];
+
+      installPhase = ''
+        # Create and enter a root node_modules/ folder
+        mkdir -p $out/lib/node_modules
+        cd $out/lib/node_modules
+
+        # Compose the package and all its dependencies
+        source $compositionScriptPath
+
+        ${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
+
+        # Create symlink to the deployed executable folder, if applicable
+        if [ -d "$out/lib/node_modules/.bin" ]
+        then
+            ln -s $out/lib/node_modules/.bin $out/bin
+        fi
+
+        # Create symlinks to the deployed manual page folders, if applicable
+        if [ -d "$out/lib/node_modules/${packageName}/man" ]
+        then
+            mkdir -p $out/share
+            for dir in "$out/lib/node_modules/${packageName}/man/"*
+            do
+                mkdir -p $out/share/man/$(basename "$dir")
+                for page in "$dir"/*
+                do
+                    ln -s $page $out/share/man/$(basename "$dir")
+                done
+            done
+        fi
+
+        # Run post install hook, if provided
+        runHook postInstall
+      '';
+    } // extraArgs);
+
+  # Builds a node environment (a node_modules folder and a set of binaries)
+  buildNodeDependencies =
+    { name
+    , packageName
+    , version
+    , src
+    , dependencies ? []
+    , buildInputs ? []
+    , production ? true
+    , npmFlags ? ""
+    , dontNpmInstall ? false
+    , bypassCache ? false
+    , reconstructLock ? false
+    , dontStrip ? true
+    , unpackPhase ? "true"
+    , buildPhase ? "true"
+    , ... }@args:
+
+    let
+      extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" ];
+    in
+      stdenv.mkDerivation ({
+        name = "node-dependencies-${name}-${version}";
+
+        buildInputs = [ tarWrapper python nodejs ]
+          ++ lib.optional (stdenv.isLinux) utillinux
+          ++ lib.optional (stdenv.isDarwin) libtool
+          ++ buildInputs;
+
+        inherit dontStrip; # Stripping may fail a build for some package deployments
+        inherit dontNpmInstall unpackPhase buildPhase;
+
+        includeScript = includeDependencies { inherit dependencies; };
+        pinpointDependenciesScript = pinpointDependenciesOfPackage args;
+
+        passAsFile = [ "includeScript" "pinpointDependenciesScript" ];
+
+        installPhase = ''
+          mkdir -p $out/${packageName}
+          cd $out/${packageName}
+
+          source $includeScriptPath
+
+          # Create fake package.json to make the npm commands work properly
+          cp ${src}/package.json .
+          chmod 644 package.json
+          ${lib.optionalString bypassCache ''
+            if [ -f ${src}/package-lock.json ]
+            then
+                cp ${src}/package-lock.json .
+            fi
+          ''}
+
+          # Go to the parent folder to make sure that all packages are pinpointed
+          cd ..
+          ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+
+          ${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
+
+          # Expose the executables that were installed
+          cd ..
+          ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+
+          mv ${packageName} lib
+          ln -s $out/lib/node_modules/.bin $out/bin
+        '';
+      } // extraArgs);
+
+  # Builds a development shell
+  buildNodeShell =
+    { name
+    , packageName
+    , version
+    , src
+    , dependencies ? []
+    , buildInputs ? []
+    , production ? true
+    , npmFlags ? ""
+    , dontNpmInstall ? false
+    , bypassCache ? false
+    , reconstructLock ? false
+    , dontStrip ? true
+    , unpackPhase ? "true"
+    , buildPhase ? "true"
+    , ... }@args:
+
+    let
+      nodeDependencies = buildNodeDependencies args;
+    in
+    stdenv.mkDerivation {
+      name = "node-shell-${name}-${version}";
+
+      buildInputs = [ python nodejs ] ++ lib.optional (stdenv.isLinux) utillinux ++ buildInputs;
+      buildCommand = ''
+        mkdir -p $out/bin
+        cat > $out/bin/shell <<EOF
+        #! ${stdenv.shell} -e
+        $shellHook
+        exec ${stdenv.shell}
+        EOF
+        chmod +x $out/bin/shell
+      '';
+
+      # Provide the dependencies in a development shell through the NODE_PATH environment variable
+      inherit nodeDependencies;
+      shellHook = lib.optionalString (dependencies != []) ''
+        export NODE_PATH=${nodeDependencies}/lib/node_modules
+        export PATH="${nodeDependencies}/bin:$PATH"
+      '';
+    };
+in
+{
+  buildNodeSourceDist = lib.makeOverridable buildNodeSourceDist;
+  buildNodePackage = lib.makeOverridable buildNodePackage;
+  buildNodeDependencies = lib.makeOverridable buildNodeDependencies;
+  buildNodeShell = lib.makeOverridable buildNodeShell;
+}
diff --git a/pkgs/tools/misc/fx_cast/node-packages.nix b/pkgs/tools/misc/fx_cast/node-packages.nix
new file mode 100644
index 00000000000..c724f560574
--- /dev/null
+++ b/pkgs/tools/misc/fx_cast/node-packages.nix
@@ -0,0 +1,1706 @@
+# This file has been generated by node2nix 1.9.0. Do not edit!
+
+{nodeEnv, fetchurl, fetchgit, nix-gitignore, stdenv, lib, globalBuildInputs ? []}:
+
+let
+  sources = {
+    "@babel/parser-7.11.3" = {
+      name = "_at_babel_slash_parser";
+      packageName = "@babel/parser";
+      version = "7.11.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/parser/-/parser-7.11.3.tgz";
+        sha512 = "REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA==";
+      };
+    };
+    "@babel/runtime-7.11.2" = {
+      name = "_at_babel_slash_runtime";
+      packageName = "@babel/runtime";
+      version = "7.11.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz";
+        sha512 = "TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==";
+      };
+    };
+    "@nodelib/fs.scandir-2.1.3" = {
+      name = "_at_nodelib_slash_fs.scandir";
+      packageName = "@nodelib/fs.scandir";
+      version = "2.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz";
+        sha512 = "eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==";
+      };
+    };
+    "@nodelib/fs.stat-2.0.3" = {
+      name = "_at_nodelib_slash_fs.stat";
+      packageName = "@nodelib/fs.stat";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz";
+        sha512 = "bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==";
+      };
+    };
+    "@nodelib/fs.walk-1.2.4" = {
+      name = "_at_nodelib_slash_fs.walk";
+      packageName = "@nodelib/fs.walk";
+      version = "1.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz";
+        sha512 = "1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==";
+      };
+    };
+    "@protobufjs/aspromise-1.1.2" = {
+      name = "_at_protobufjs_slash_aspromise";
+      packageName = "@protobufjs/aspromise";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz";
+        sha1 = "9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf";
+      };
+    };
+    "@protobufjs/base64-1.1.2" = {
+      name = "_at_protobufjs_slash_base64";
+      packageName = "@protobufjs/base64";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz";
+        sha512 = "AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==";
+      };
+    };
+    "@protobufjs/codegen-2.0.4" = {
+      name = "_at_protobufjs_slash_codegen";
+      packageName = "@protobufjs/codegen";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz";
+        sha512 = "YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==";
+      };
+    };
+    "@protobufjs/eventemitter-1.1.0" = {
+      name = "_at_protobufjs_slash_eventemitter";
+      packageName = "@protobufjs/eventemitter";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz";
+        sha1 = "355cbc98bafad5978f9ed095f397621f1d066b70";
+      };
+    };
+    "@protobufjs/fetch-1.1.0" = {
+      name = "_at_protobufjs_slash_fetch";
+      packageName = "@protobufjs/fetch";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz";
+        sha1 = "ba99fb598614af65700c1619ff06d454b0d84c45";
+      };
+    };
+    "@protobufjs/float-1.0.2" = {
+      name = "_at_protobufjs_slash_float";
+      packageName = "@protobufjs/float";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz";
+        sha1 = "5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1";
+      };
+    };
+    "@protobufjs/inquire-1.1.0" = {
+      name = "_at_protobufjs_slash_inquire";
+      packageName = "@protobufjs/inquire";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz";
+        sha1 = "ff200e3e7cf2429e2dcafc1140828e8cc638f089";
+      };
+    };
+    "@protobufjs/path-1.1.2" = {
+      name = "_at_protobufjs_slash_path";
+      packageName = "@protobufjs/path";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz";
+        sha1 = "6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d";
+      };
+    };
+    "@protobufjs/pool-1.1.0" = {
+      name = "_at_protobufjs_slash_pool";
+      packageName = "@protobufjs/pool";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz";
+        sha1 = "09fd15f2d6d3abfa9b65bc366506d6ad7846ff54";
+      };
+    };
+    "@protobufjs/utf8-1.1.0" = {
+      name = "_at_protobufjs_slash_utf8";
+      packageName = "@protobufjs/utf8";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz";
+        sha1 = "a777360b5b39a1a2e5106f8e858f2fd2d060c570";
+      };
+    };
+    "@types/color-name-1.1.1" = {
+      name = "_at_types_slash_color-name";
+      packageName = "@types/color-name";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz";
+        sha512 = "rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==";
+      };
+    };
+    "@types/long-4.0.0" = {
+      name = "_at_types_slash_long";
+      packageName = "@types/long";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz";
+        sha512 = "1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==";
+      };
+    };
+    "@types/mdns-0.0.33" = {
+      name = "_at_types_slash_mdns";
+      packageName = "@types/mdns";
+      version = "0.0.33";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/mdns/-/mdns-0.0.33.tgz";
+        sha512 = "Uhm8lyPXIe2hz+aiiD6PXkGc7dlFk6Kc2HJlqmWXhAJktD5Arg27EYre0wv1SmmpSGQZ30X6iCjZyIGYKxmCxw==";
+      };
+    };
+    "@types/mime-types-2.1.0" = {
+      name = "_at_types_slash_mime-types";
+      packageName = "@types/mime-types";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz";
+        sha1 = "9ca52cda363f699c69466c2a6ccdaad913ea7a73";
+      };
+    };
+    "@types/minimist-1.2.1" = {
+      name = "_at_types_slash_minimist";
+      packageName = "@types/minimist";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz";
+        sha512 = "fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==";
+      };
+    };
+    "@types/node-10.14.19" = {
+      name = "_at_types_slash_node";
+      packageName = "@types/node";
+      version = "10.14.19";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/node/-/node-10.14.19.tgz";
+        sha512 = "j6Sqt38ssdMKutXBUuAcmWF8QtHW1Fwz/mz4Y+Wd9mzpBiVFirjpNQf363hG5itkG+yGaD+oiLyb50HxJ36l9Q==";
+      };
+    };
+    "@types/node-13.13.15" = {
+      name = "_at_types_slash_node";
+      packageName = "@types/node";
+      version = "13.13.15";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/node/-/node-13.13.15.tgz";
+        sha512 = "kwbcs0jySLxzLsa2nWUAGOd/s21WU1jebrEdtzhsj1D4Yps1EOuyI1Qcu+FD56dL7NRNIJtDDjcqIG22NwkgLw==";
+      };
+    };
+    "@types/node-fetch-2.5.7" = {
+      name = "_at_types_slash_node-fetch";
+      packageName = "@types/node-fetch";
+      version = "2.5.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.7.tgz";
+        sha512 = "o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==";
+      };
+    };
+    "@types/ws-7.4.2" = {
+      name = "_at_types_slash_ws";
+      packageName = "@types/ws";
+      version = "7.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/ws/-/ws-7.4.2.tgz";
+        sha512 = "PbeN0Eydl7LQl4OIav29YmkO2LxbVuz3nZD/kb19lOS+wLgIkRbWMNmU/QQR7ABpOJ7D7xDOU8co7iohObewrw==";
+      };
+    };
+    "ajv-6.12.3" = {
+      name = "ajv";
+      packageName = "ajv";
+      version = "6.12.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz";
+        sha512 = "4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==";
+      };
+    };
+    "ansi-styles-4.2.1" = {
+      name = "ansi-styles";
+      packageName = "ansi-styles";
+      version = "4.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz";
+        sha512 = "9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==";
+      };
+    };
+    "array-union-2.1.0" = {
+      name = "array-union";
+      packageName = "array-union";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz";
+        sha512 = "HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==";
+      };
+    };
+    "asn1-0.2.4" = {
+      name = "asn1";
+      packageName = "asn1";
+      version = "0.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz";
+        sha512 = "jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==";
+      };
+    };
+    "assert-plus-1.0.0" = {
+      name = "assert-plus";
+      packageName = "assert-plus";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz";
+        sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
+      };
+    };
+    "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";
+      };
+    };
+    "at-least-node-1.0.0" = {
+      name = "at-least-node";
+      packageName = "at-least-node";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz";
+        sha512 = "+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==";
+      };
+    };
+    "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.10.1" = {
+      name = "aws4";
+      packageName = "aws4";
+      version = "1.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz";
+        sha512 = "zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==";
+      };
+    };
+    "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";
+      };
+    };
+    "big-integer-1.6.44" = {
+      name = "big-integer";
+      packageName = "big-integer";
+      version = "1.6.44";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/big-integer/-/big-integer-1.6.44.tgz";
+        sha512 = "7MzElZPTyJ2fNvBkPxtFQ2fWIkVmuzw41+BZHSzpEq3ymB2MfeKp1+yXl/tS75xCx+WnyV+yb0kp+K1C3UNwmQ==";
+      };
+    };
+    "bindings-1.2.1" = {
+      name = "bindings";
+      packageName = "bindings";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz";
+        sha1 = "14ad6113812d2d37d72e67b4cacb4bb726505f11";
+      };
+    };
+    "bplist-creator-0.0.8" = {
+      name = "bplist-creator";
+      packageName = "bplist-creator";
+      version = "0.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz";
+        sha512 = "Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==";
+      };
+    };
+    "bplist-parser-0.2.0" = {
+      name = "bplist-parser";
+      packageName = "bplist-parser";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz";
+        sha512 = "z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==";
+      };
+    };
+    "braces-3.0.2" = {
+      name = "braces";
+      packageName = "braces";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz";
+        sha512 = "b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==";
+      };
+    };
+    "byline-5.0.0" = {
+      name = "byline";
+      packageName = "byline";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz";
+        sha1 = "741c5216468eadc457b03410118ad77de8c1ddb1";
+      };
+    };
+    "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";
+      };
+    };
+    "castv2-0.1.10" = {
+      name = "castv2";
+      packageName = "castv2";
+      version = "0.1.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/castv2/-/castv2-0.1.10.tgz";
+        sha512 = "3QWevHrjT22KdF08Y2a217IYCDQDP7vEJaY4n0lPBeC5UBYbMFMadDfVTsaQwq7wqsEgYUHElPGm3EO1ey+TNw==";
+      };
+    };
+    "chalk-3.0.0" = {
+      name = "chalk";
+      packageName = "chalk";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz";
+        sha512 = "4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==";
+      };
+    };
+    "color-convert-2.0.1" = {
+      name = "color-convert";
+      packageName = "color-convert";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz";
+        sha512 = "RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==";
+      };
+    };
+    "color-name-1.1.4" = {
+      name = "color-name";
+      packageName = "color-name";
+      version = "1.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz";
+        sha512 = "dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==";
+      };
+    };
+    "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==";
+      };
+    };
+    "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";
+      };
+    };
+    "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==";
+      };
+    };
+    "deep-is-0.1.3" = {
+      name = "deep-is";
+      packageName = "deep-is";
+      version = "0.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz";
+        sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
+      };
+    };
+    "delayed-stream-1.0.0" = {
+      name = "delayed-stream";
+      packageName = "delayed-stream";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
+        sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
+      };
+    };
+    "dir-glob-3.0.1" = {
+      name = "dir-glob";
+      packageName = "dir-glob";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz";
+        sha512 = "WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==";
+      };
+    };
+    "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";
+      };
+    };
+    "escodegen-1.14.3" = {
+      name = "escodegen";
+      packageName = "escodegen";
+      version = "1.14.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz";
+        sha512 = "qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==";
+      };
+    };
+    "esprima-4.0.1" = {
+      name = "esprima";
+      packageName = "esprima";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz";
+        sha512 = "eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==";
+      };
+    };
+    "estraverse-4.3.0" = {
+      name = "estraverse";
+      packageName = "estraverse";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz";
+        sha512 = "39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==";
+      };
+    };
+    "esutils-2.0.3" = {
+      name = "esutils";
+      packageName = "esutils";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz";
+        sha512 = "kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==";
+      };
+    };
+    "expand-template-2.0.3" = {
+      name = "expand-template";
+      packageName = "expand-template";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz";
+        sha512 = "XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==";
+      };
+    };
+    "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-3.1.3" = {
+      name = "fast-deep-equal";
+      packageName = "fast-deep-equal";
+      version = "3.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz";
+        sha512 = "f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==";
+      };
+    };
+    "fast-glob-3.2.4" = {
+      name = "fast-glob";
+      packageName = "fast-glob";
+      version = "3.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz";
+        sha512 = "kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==";
+      };
+    };
+    "fast-json-stable-stringify-2.1.0" = {
+      name = "fast-json-stable-stringify";
+      packageName = "fast-json-stable-stringify";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz";
+        sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==";
+      };
+    };
+    "fast-levenshtein-2.0.6" = {
+      name = "fast-levenshtein";
+      packageName = "fast-levenshtein";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
+        sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917";
+      };
+    };
+    "fast-srp-hap-2.0.2" = {
+      name = "fast-srp-hap";
+      packageName = "fast-srp-hap";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-srp-hap/-/fast-srp-hap-2.0.2.tgz";
+        sha512 = "wABhZRrFhlovqJQ1HygOUB4R6WZW2hmlpvVYh2dVCy8BPLabDrB/Tu6XI3B4QfmhtHk8s1OeiFqJHY7FBsphug==";
+      };
+    };
+    "fastq-1.8.0" = {
+      name = "fastq";
+      packageName = "fastq";
+      version = "1.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz";
+        sha512 = "SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==";
+      };
+    };
+    "fill-range-7.0.1" = {
+      name = "fill-range";
+      packageName = "fill-range";
+      version = "7.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz";
+        sha512 = "qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==";
+      };
+    };
+    "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==";
+      };
+    };
+    "form-data-3.0.0" = {
+      name = "form-data";
+      packageName = "form-data";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz";
+        sha512 = "CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==";
+      };
+    };
+    "from2-2.3.0" = {
+      name = "from2";
+      packageName = "from2";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz";
+        sha1 = "8bfb5502bde4a4d36cfdeea007fcca21d7e382af";
+      };
+    };
+    "fs-extra-8.1.0" = {
+      name = "fs-extra";
+      packageName = "fs-extra";
+      version = "8.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz";
+        sha512 = "yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==";
+      };
+    };
+    "fs-extra-9.1.0" = {
+      name = "fs-extra";
+      packageName = "fs-extra";
+      version = "9.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz";
+        sha512 = "hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==";
+      };
+    };
+    "getpass-0.1.7" = {
+      name = "getpass";
+      packageName = "getpass";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz";
+        sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa";
+      };
+    };
+    "glob-parent-5.1.1" = {
+      name = "glob-parent";
+      packageName = "glob-parent";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz";
+        sha512 = "FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==";
+      };
+    };
+    "globby-11.0.1" = {
+      name = "globby";
+      packageName = "globby";
+      version = "11.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz";
+        sha512 = "iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==";
+      };
+    };
+    "graceful-fs-4.2.6" = {
+      name = "graceful-fs";
+      packageName = "graceful-fs";
+      version = "4.2.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz";
+        sha512 = "nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==";
+      };
+    };
+    "har-schema-2.0.0" = {
+      name = "har-schema";
+      packageName = "har-schema";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz";
+        sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
+      };
+    };
+    "har-validator-5.1.5" = {
+      name = "har-validator";
+      packageName = "har-validator";
+      version = "5.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz";
+        sha512 = "nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==";
+      };
+    };
+    "has-flag-4.0.0" = {
+      name = "has-flag";
+      packageName = "has-flag";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz";
+        sha512 = "EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==";
+      };
+    };
+    "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";
+      };
+    };
+    "ignore-5.1.8" = {
+      name = "ignore";
+      packageName = "ignore";
+      version = "5.1.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz";
+        sha512 = "BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==";
+      };
+    };
+    "inherits-2.0.4" = {
+      name = "inherits";
+      packageName = "inherits";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz";
+        sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==";
+      };
+    };
+    "into-stream-5.1.1" = {
+      name = "into-stream";
+      packageName = "into-stream";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/into-stream/-/into-stream-5.1.1.tgz";
+        sha512 = "krrAJ7McQxGGmvaYbB7Q1mcA+cRwg9Ij2RfWIeVesNBgVDZmzY/Fa4IpZUT3bmdRzMzdf/mzltCG2Dq99IZGBA==";
+      };
+    };
+    "is-extglob-2.1.1" = {
+      name = "is-extglob";
+      packageName = "is-extglob";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz";
+        sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2";
+      };
+    };
+    "is-glob-4.0.1" = {
+      name = "is-glob";
+      packageName = "is-glob";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz";
+        sha512 = "5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==";
+      };
+    };
+    "is-number-7.0.0" = {
+      name = "is-number";
+      packageName = "is-number";
+      version = "7.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz";
+        sha512 = "41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==";
+      };
+    };
+    "is-typedarray-1.0.0" = {
+      name = "is-typedarray";
+      packageName = "is-typedarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz";
+        sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
+      };
+    };
+    "isarray-1.0.0" = {
+      name = "isarray";
+      packageName = "isarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
+        sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
+      };
+    };
+    "isstream-0.1.2" = {
+      name = "isstream";
+      packageName = "isstream";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
+        sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
+      };
+    };
+    "jsbn-0.1.1" = {
+      name = "jsbn";
+      packageName = "jsbn";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz";
+        sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513";
+      };
+    };
+    "json-schema-0.2.3" = {
+      name = "json-schema";
+      packageName = "json-schema";
+      version = "0.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz";
+        sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
+      };
+    };
+    "json-schema-traverse-0.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";
+      };
+    };
+    "jsonfile-4.0.0" = {
+      name = "jsonfile";
+      packageName = "jsonfile";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz";
+        sha1 = "8771aae0799b64076b76640fca058f9c10e33ecb";
+      };
+    };
+    "jsonfile-6.1.0" = {
+      name = "jsonfile";
+      packageName = "jsonfile";
+      version = "6.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz";
+        sha512 = "5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==";
+      };
+    };
+    "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";
+      };
+    };
+    "levn-0.3.0" = {
+      name = "levn";
+      packageName = "levn";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz";
+        sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee";
+      };
+    };
+    "long-4.0.0" = {
+      name = "long";
+      packageName = "long";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/long/-/long-4.0.0.tgz";
+        sha512 = "XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==";
+      };
+    };
+    "mdns-2.5.1" = {
+      name = "mdns";
+      packageName = "mdns";
+      version = "2.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mdns/-/mdns-2.5.1.tgz";
+        sha512 = "JglS7Ed3Yf0BCpyC7LXA1MUrumMV8jj4g67nT3+m886SFYllz2HWBg8ObywFXWbBSv5gW0meMOOS4vVa2jZGCw==";
+      };
+    };
+    "merge2-1.4.1" = {
+      name = "merge2";
+      packageName = "merge2";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz";
+        sha512 = "8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==";
+      };
+    };
+    "micromatch-4.0.2" = {
+      name = "micromatch";
+      packageName = "micromatch";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz";
+        sha512 = "y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==";
+      };
+    };
+    "mime-db-1.44.0" = {
+      name = "mime-db";
+      packageName = "mime-db";
+      version = "1.44.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz";
+        sha512 = "/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==";
+      };
+    };
+    "mime-types-2.1.27" = {
+      name = "mime-types";
+      packageName = "mime-types";
+      version = "2.1.27";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz";
+        sha512 = "JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==";
+      };
+    };
+    "minimist-1.2.5" = {
+      name = "minimist";
+      packageName = "minimist";
+      version = "1.2.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz";
+        sha512 = "FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==";
+      };
+    };
+    "mkdirp-0.5.5" = {
+      name = "mkdirp";
+      packageName = "mkdirp";
+      version = "0.5.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz";
+        sha512 = "NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==";
+      };
+    };
+    "ms-2.1.2" = {
+      name = "ms";
+      packageName = "ms";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz";
+        sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==";
+      };
+    };
+    "multistream-2.1.1" = {
+      name = "multistream";
+      packageName = "multistream";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/multistream/-/multistream-2.1.1.tgz";
+        sha512 = "xasv76hl6nr1dEy3lPvy7Ej7K/Lx3O/FCvwge8PeVJpciPPoNCbaANcNiBug3IpdvTveZUcAV0DJzdnUDMesNQ==";
+      };
+    };
+    "mustache-4.0.1" = {
+      name = "mustache";
+      packageName = "mustache";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mustache/-/mustache-4.0.1.tgz";
+        sha512 = "yL5VE97+OXn4+Er3THSmTdCFCtx5hHWzrolvH+JObZnUYwuaG7XV+Ch4fR2cIrcYI0tFHxS7iyFYl14bW8y2sA==";
+      };
+    };
+    "nan-2.14.1" = {
+      name = "nan";
+      packageName = "nan";
+      version = "2.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz";
+        sha512 = "isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==";
+      };
+    };
+    "node-fetch-2.6.0" = {
+      name = "node-fetch";
+      packageName = "node-fetch";
+      version = "2.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz";
+        sha512 = "8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==";
+      };
+    };
+    "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==";
+      };
+    };
+    "optionator-0.8.3" = {
+      name = "optionator";
+      packageName = "optionator";
+      version = "0.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz";
+        sha512 = "+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==";
+      };
+    };
+    "os-tmpdir-1.0.2" = {
+      name = "os-tmpdir";
+      packageName = "os-tmpdir";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz";
+        sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274";
+      };
+    };
+    "p-is-promise-3.0.0" = {
+      name = "p-is-promise";
+      packageName = "p-is-promise";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz";
+        sha512 = "Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==";
+      };
+    };
+    "path-parse-1.0.6" = {
+      name = "path-parse";
+      packageName = "path-parse";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz";
+        sha512 = "GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==";
+      };
+    };
+    "path-type-4.0.0" = {
+      name = "path-type";
+      packageName = "path-type";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz";
+        sha512 = "gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==";
+      };
+    };
+    "performance-now-2.1.0" = {
+      name = "performance-now";
+      packageName = "performance-now";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz";
+        sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
+      };
+    };
+    "picomatch-2.2.2" = {
+      name = "picomatch";
+      packageName = "picomatch";
+      version = "2.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz";
+        sha512 = "q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==";
+      };
+    };
+    "pkg-4.4.9" = {
+      name = "pkg";
+      packageName = "pkg";
+      version = "4.4.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pkg/-/pkg-4.4.9.tgz";
+        sha512 = "FK4GqHtcCY2PPPVaKViU0NyRzpo6gCS7tPKN5b7AkElqjAOCH1bsRKgohEnxThr6DWfTGByGqba2YHGR/BqbmA==";
+      };
+    };
+    "pkg-fetch-2.6.9" = {
+      name = "pkg-fetch";
+      packageName = "pkg-fetch";
+      version = "2.6.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-2.6.9.tgz";
+        sha512 = "EnVR8LRILXBvaNP+wJOSY02c3+qDDfyEyR+aqAHLhcc9PBnbxFT9UZ1+If49goPQzQPn26TzF//fc6KXZ0aXEg==";
+      };
+    };
+    "prelude-ls-1.1.2" = {
+      name = "prelude-ls";
+      packageName = "prelude-ls";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz";
+        sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54";
+      };
+    };
+    "process-nextick-args-2.0.1" = {
+      name = "process-nextick-args";
+      packageName = "process-nextick-args";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz";
+        sha512 = "3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==";
+      };
+    };
+    "progress-2.0.3" = {
+      name = "progress";
+      packageName = "progress";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz";
+        sha512 = "7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==";
+      };
+    };
+    "protobufjs-6.8.8" = {
+      name = "protobufjs";
+      packageName = "protobufjs";
+      version = "6.8.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz";
+        sha512 = "AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==";
+      };
+    };
+    "psl-1.8.0" = {
+      name = "psl";
+      packageName = "psl";
+      version = "1.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz";
+        sha512 = "RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==";
+      };
+    };
+    "punycode-2.1.1" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz";
+        sha512 = "XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==";
+      };
+    };
+    "qs-6.5.2" = {
+      name = "qs";
+      packageName = "qs";
+      version = "6.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz";
+        sha512 = "N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==";
+      };
+    };
+    "rage-edit-1.2.0" = {
+      name = "rage-edit";
+      packageName = "rage-edit";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rage-edit/-/rage-edit-1.2.0.tgz";
+        sha512 = "0RspBRc2s6We4g7hRCvT5mu7YPEnfjvQK8Tt354a2uUNJCMC7MKLvo/1mLvHUCQ/zbP6siQyp5VRZN7UCpMFZg==";
+      };
+    };
+    "readable-stream-2.3.7" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "2.3.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz";
+        sha512 = "Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==";
+      };
+    };
+    "regenerator-runtime-0.13.7" = {
+      name = "regenerator-runtime";
+      packageName = "regenerator-runtime";
+      version = "0.13.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz";
+        sha512 = "a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==";
+      };
+    };
+    "request-2.88.2" = {
+      name = "request";
+      packageName = "request";
+      version = "2.88.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/request/-/request-2.88.2.tgz";
+        sha512 = "MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==";
+      };
+    };
+    "request-progress-3.0.0" = {
+      name = "request-progress";
+      packageName = "request-progress";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz";
+        sha1 = "4ca754081c7fec63f505e4faa825aa06cd669dbe";
+      };
+    };
+    "resolve-1.17.0" = {
+      name = "resolve";
+      packageName = "resolve";
+      version = "1.17.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz";
+        sha512 = "ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==";
+      };
+    };
+    "reusify-1.0.4" = {
+      name = "reusify";
+      packageName = "reusify";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz";
+        sha512 = "U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==";
+      };
+    };
+    "run-parallel-1.1.9" = {
+      name = "run-parallel";
+      packageName = "run-parallel";
+      version = "1.1.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz";
+        sha512 = "DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==";
+      };
+    };
+    "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==";
+      };
+    };
+    "semver-6.3.0" = {
+      name = "semver";
+      packageName = "semver";
+      version = "6.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz";
+        sha512 = "b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==";
+      };
+    };
+    "slash-3.0.0" = {
+      name = "slash";
+      packageName = "slash";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz";
+        sha512 = "g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==";
+      };
+    };
+    "source-map-0.6.1" = {
+      name = "source-map";
+      packageName = "source-map";
+      version = "0.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz";
+        sha512 = "UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==";
+      };
+    };
+    "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==";
+      };
+    };
+    "stream-buffers-2.2.0" = {
+      name = "stream-buffers";
+      packageName = "stream-buffers";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz";
+        sha1 = "91d5f5130d1cef96dcfa7f726945188741d09ee4";
+      };
+    };
+    "stream-meter-1.0.4" = {
+      name = "stream-meter";
+      packageName = "stream-meter";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz";
+        sha1 = "52af95aa5ea760a2491716704dbff90f73afdd1d";
+      };
+    };
+    "string_decoder-1.1.1" = {
+      name = "string_decoder";
+      packageName = "string_decoder";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz";
+        sha512 = "n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==";
+      };
+    };
+    "supports-color-7.1.0" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "7.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz";
+        sha512 = "oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==";
+      };
+    };
+    "throttleit-1.0.0" = {
+      name = "throttleit";
+      packageName = "throttleit";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz";
+        sha1 = "9e785836daf46743145a5984b6268d828528ac6c";
+      };
+    };
+    "to-regex-range-5.0.1" = {
+      name = "to-regex-range";
+      packageName = "to-regex-range";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz";
+        sha512 = "65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==";
+      };
+    };
+    "tough-cookie-2.5.0" = {
+      name = "tough-cookie";
+      packageName = "tough-cookie";
+      version = "2.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz";
+        sha512 = "nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==";
+      };
+    };
+    "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";
+      };
+    };
+    "tweetnacl-1.0.3" = {
+      name = "tweetnacl";
+      packageName = "tweetnacl";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz";
+        sha512 = "6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==";
+      };
+    };
+    "type-check-0.3.2" = {
+      name = "type-check";
+      packageName = "type-check";
+      version = "0.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz";
+        sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72";
+      };
+    };
+    "typescript-4.2.4" = {
+      name = "typescript";
+      packageName = "typescript";
+      version = "4.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz";
+        sha512 = "V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==";
+      };
+    };
+    "uid2-0.0.3" = {
+      name = "uid2";
+      packageName = "uid2";
+      version = "0.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz";
+        sha1 = "483126e11774df2f71b8b639dcd799c376162b82";
+      };
+    };
+    "unique-temp-dir-1.0.0" = {
+      name = "unique-temp-dir";
+      packageName = "unique-temp-dir";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unique-temp-dir/-/unique-temp-dir-1.0.0.tgz";
+        sha1 = "6dce95b2681ca003eebfb304a415f9cbabcc5385";
+      };
+    };
+    "universalify-0.1.2" = {
+      name = "universalify";
+      packageName = "universalify";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz";
+        sha512 = "rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==";
+      };
+    };
+    "universalify-2.0.0" = {
+      name = "universalify";
+      packageName = "universalify";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz";
+        sha512 = "hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==";
+      };
+    };
+    "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==";
+      };
+    };
+    "util-deprecate-1.0.2" = {
+      name = "util-deprecate";
+      packageName = "util-deprecate";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
+        sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
+      };
+    };
+    "uuid-3.4.0" = {
+      name = "uuid";
+      packageName = "uuid";
+      version = "3.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz";
+        sha512 = "HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==";
+      };
+    };
+    "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";
+      };
+    };
+    "word-wrap-1.2.3" = {
+      name = "word-wrap";
+      packageName = "word-wrap";
+      version = "1.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz";
+        sha512 = "Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==";
+      };
+    };
+    "ws-7.4.5" = {
+      name = "ws";
+      packageName = "ws";
+      version = "7.4.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz";
+        sha512 = "xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==";
+      };
+    };
+  };
+  args = {
+    name = "fx_cast_bridge";
+    packageName = "fx_cast_bridge";
+    version = "0.1.2";
+    src = ./.;
+    dependencies = [
+      sources."@babel/parser-7.11.3"
+      sources."@babel/runtime-7.11.2"
+      sources."@nodelib/fs.scandir-2.1.3"
+      sources."@nodelib/fs.stat-2.0.3"
+      sources."@nodelib/fs.walk-1.2.4"
+      sources."@protobufjs/aspromise-1.1.2"
+      sources."@protobufjs/base64-1.1.2"
+      sources."@protobufjs/codegen-2.0.4"
+      sources."@protobufjs/eventemitter-1.1.0"
+      sources."@protobufjs/fetch-1.1.0"
+      sources."@protobufjs/float-1.0.2"
+      sources."@protobufjs/inquire-1.1.0"
+      sources."@protobufjs/path-1.1.2"
+      sources."@protobufjs/pool-1.1.0"
+      sources."@protobufjs/utf8-1.1.0"
+      sources."@types/color-name-1.1.1"
+      sources."@types/long-4.0.0"
+      sources."@types/mdns-0.0.33"
+      sources."@types/mime-types-2.1.0"
+      sources."@types/minimist-1.2.1"
+      sources."@types/node-13.13.15"
+      sources."@types/node-fetch-2.5.7"
+      sources."@types/ws-7.4.2"
+      sources."ajv-6.12.3"
+      sources."ansi-styles-4.2.1"
+      sources."array-union-2.1.0"
+      sources."asn1-0.2.4"
+      sources."assert-plus-1.0.0"
+      sources."asynckit-0.4.0"
+      sources."at-least-node-1.0.0"
+      sources."aws-sign2-0.7.0"
+      sources."aws4-1.10.1"
+      (sources."bcrypt-pbkdf-1.0.2" // {
+        dependencies = [
+          sources."tweetnacl-0.14.5"
+        ];
+      })
+      sources."big-integer-1.6.44"
+      sources."bindings-1.2.1"
+      sources."bplist-creator-0.0.8"
+      sources."bplist-parser-0.2.0"
+      sources."braces-3.0.2"
+      sources."byline-5.0.0"
+      sources."caseless-0.12.0"
+      (sources."castv2-0.1.10" // {
+        dependencies = [
+          sources."debug-4.1.1"
+          sources."ms-2.1.2"
+        ];
+      })
+      sources."chalk-3.0.0"
+      sources."color-convert-2.0.1"
+      sources."color-name-1.1.4"
+      sources."combined-stream-1.0.8"
+      sources."core-util-is-1.0.2"
+      sources."dashdash-1.14.1"
+      sources."deep-is-0.1.3"
+      sources."delayed-stream-1.0.0"
+      sources."dir-glob-3.0.1"
+      sources."ecc-jsbn-0.1.2"
+      sources."escodegen-1.14.3"
+      sources."esprima-4.0.1"
+      sources."estraverse-4.3.0"
+      sources."esutils-2.0.3"
+      sources."expand-template-2.0.3"
+      sources."extend-3.0.2"
+      sources."extsprintf-1.3.0"
+      sources."fast-deep-equal-3.1.3"
+      sources."fast-glob-3.2.4"
+      sources."fast-json-stable-stringify-2.1.0"
+      sources."fast-levenshtein-2.0.6"
+      sources."fast-srp-hap-2.0.2"
+      sources."fastq-1.8.0"
+      sources."fill-range-7.0.1"
+      sources."forever-agent-0.6.1"
+      sources."form-data-3.0.0"
+      sources."from2-2.3.0"
+      sources."fs-extra-9.1.0"
+      sources."getpass-0.1.7"
+      sources."glob-parent-5.1.1"
+      sources."globby-11.0.1"
+      sources."graceful-fs-4.2.6"
+      sources."har-schema-2.0.0"
+      sources."har-validator-5.1.5"
+      sources."has-flag-4.0.0"
+      sources."http-signature-1.2.0"
+      sources."ignore-5.1.8"
+      sources."inherits-2.0.4"
+      sources."into-stream-5.1.1"
+      sources."is-extglob-2.1.1"
+      sources."is-glob-4.0.1"
+      sources."is-number-7.0.0"
+      sources."is-typedarray-1.0.0"
+      sources."isarray-1.0.0"
+      sources."isstream-0.1.2"
+      sources."jsbn-0.1.1"
+      sources."json-schema-0.2.3"
+      sources."json-schema-traverse-0.4.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."jsonfile-6.1.0"
+      sources."jsprim-1.4.1"
+      sources."levn-0.3.0"
+      sources."long-4.0.0"
+      sources."mdns-2.5.1"
+      sources."merge2-1.4.1"
+      sources."micromatch-4.0.2"
+      sources."mime-db-1.44.0"
+      sources."mime-types-2.1.27"
+      sources."minimist-1.2.5"
+      sources."mkdirp-0.5.5"
+      sources."multistream-2.1.1"
+      sources."mustache-4.0.1"
+      sources."nan-2.14.1"
+      sources."node-fetch-2.6.0"
+      sources."oauth-sign-0.9.0"
+      sources."optionator-0.8.3"
+      sources."os-tmpdir-1.0.2"
+      sources."p-is-promise-3.0.0"
+      sources."path-parse-1.0.6"
+      sources."path-type-4.0.0"
+      sources."performance-now-2.1.0"
+      sources."picomatch-2.2.2"
+      (sources."pkg-4.4.9" // {
+        dependencies = [
+          sources."fs-extra-8.1.0"
+          sources."jsonfile-4.0.0"
+          sources."universalify-0.1.2"
+        ];
+      })
+      (sources."pkg-fetch-2.6.9" // {
+        dependencies = [
+          sources."fs-extra-8.1.0"
+          sources."jsonfile-4.0.0"
+          sources."universalify-0.1.2"
+        ];
+      })
+      sources."prelude-ls-1.1.2"
+      sources."process-nextick-args-2.0.1"
+      sources."progress-2.0.3"
+      (sources."protobufjs-6.8.8" // {
+        dependencies = [
+          sources."@types/node-10.14.19"
+        ];
+      })
+      sources."psl-1.8.0"
+      sources."punycode-2.1.1"
+      sources."qs-6.5.2"
+      sources."rage-edit-1.2.0"
+      sources."readable-stream-2.3.7"
+      sources."regenerator-runtime-0.13.7"
+      (sources."request-2.88.2" // {
+        dependencies = [
+          sources."form-data-2.3.3"
+        ];
+      })
+      sources."request-progress-3.0.0"
+      sources."resolve-1.17.0"
+      sources."reusify-1.0.4"
+      sources."run-parallel-1.1.9"
+      sources."safe-buffer-5.1.2"
+      sources."safer-buffer-2.1.2"
+      sources."semver-6.3.0"
+      sources."slash-3.0.0"
+      sources."source-map-0.6.1"
+      (sources."sshpk-1.16.1" // {
+        dependencies = [
+          sources."tweetnacl-0.14.5"
+        ];
+      })
+      sources."stream-buffers-2.2.0"
+      sources."stream-meter-1.0.4"
+      sources."string_decoder-1.1.1"
+      sources."supports-color-7.1.0"
+      sources."throttleit-1.0.0"
+      sources."to-regex-range-5.0.1"
+      sources."tough-cookie-2.5.0"
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-1.0.3"
+      sources."type-check-0.3.2"
+      sources."typescript-4.2.4"
+      sources."uid2-0.0.3"
+      sources."unique-temp-dir-1.0.0"
+      sources."universalify-2.0.0"
+      sources."uri-js-4.2.2"
+      sources."util-deprecate-1.0.2"
+      sources."uuid-3.4.0"
+      sources."verror-1.10.0"
+      sources."word-wrap-1.2.3"
+      sources."ws-7.4.5"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+    };
+    production = false;
+    bypassCache = true;
+    reconstructLock = false;
+  };
+in
+{
+  args = args;
+  sources = sources;
+  tarball = nodeEnv.buildNodeSourceDist args;
+  package = nodeEnv.buildNodePackage args;
+  shell = nodeEnv.buildNodeShell args;
+  nodeDependencies = nodeEnv.buildNodeDependencies (lib.overrideExisting args {
+    src = stdenv.mkDerivation {
+      name = args.name + "-package-json";
+      src = nix-gitignore.gitignoreSourcePure [
+        "*"
+        "!package.json"
+        "!package-lock.json"
+      ] args.src;
+      dontBuild = true;
+      installPhase = "mkdir -p $out; cp -r ./* $out;";
+    };
+  });
+}
diff --git a/pkgs/tools/misc/fx_cast/package-lock.json b/pkgs/tools/misc/fx_cast/package-lock.json
new file mode 100644
index 00000000000..22e62c6fed8
--- /dev/null
+++ b/pkgs/tools/misc/fx_cast/package-lock.json
@@ -0,0 +1,1327 @@
+{
+    "name": "fx_cast_bridge",
+    "version": "0.1.2",
+    "requires": true,
+    "lockfileVersion": 1,
+    "dependencies": {
+        "@babel/parser": {
+            "version": "7.11.3",
+            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.3.tgz",
+            "integrity": "sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA==",
+            "dev": true
+        },
+        "@babel/runtime": {
+            "version": "7.11.2",
+            "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz",
+            "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==",
+            "dev": true,
+            "requires": {
+                "regenerator-runtime": "^0.13.4"
+            }
+        },
+        "@nodelib/fs.scandir": {
+            "version": "2.1.3",
+            "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
+            "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
+            "dev": true,
+            "requires": {
+                "@nodelib/fs.stat": "2.0.3",
+                "run-parallel": "^1.1.9"
+            }
+        },
+        "@nodelib/fs.stat": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
+            "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
+            "dev": true
+        },
+        "@nodelib/fs.walk": {
+            "version": "1.2.4",
+            "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
+            "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
+            "dev": true,
+            "requires": {
+                "@nodelib/fs.scandir": "2.1.3",
+                "fastq": "^1.6.0"
+            }
+        },
+        "@protobufjs/aspromise": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
+            "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78="
+        },
+        "@protobufjs/base64": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
+            "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
+        },
+        "@protobufjs/codegen": {
+            "version": "2.0.4",
+            "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
+            "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
+        },
+        "@protobufjs/eventemitter": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
+            "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A="
+        },
+        "@protobufjs/fetch": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
+            "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
+            "requires": {
+                "@protobufjs/aspromise": "^1.1.1",
+                "@protobufjs/inquire": "^1.1.0"
+            }
+        },
+        "@protobufjs/float": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
+            "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E="
+        },
+        "@protobufjs/inquire": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
+            "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik="
+        },
+        "@protobufjs/path": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
+            "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0="
+        },
+        "@protobufjs/pool": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
+            "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q="
+        },
+        "@protobufjs/utf8": {
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
+            "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
+        },
+        "@types/color-name": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
+            "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
+            "dev": true
+        },
+        "@types/long": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz",
+            "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q=="
+        },
+        "@types/mdns": {
+            "version": "0.0.33",
+            "resolved": "https://registry.npmjs.org/@types/mdns/-/mdns-0.0.33.tgz",
+            "integrity": "sha512-Uhm8lyPXIe2hz+aiiD6PXkGc7dlFk6Kc2HJlqmWXhAJktD5Arg27EYre0wv1SmmpSGQZ30X6iCjZyIGYKxmCxw==",
+            "dev": true,
+            "requires": {
+                "@types/node": "*"
+            }
+        },
+        "@types/mime-types": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz",
+            "integrity": "sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM=",
+            "dev": true
+        },
+        "@types/minimist": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz",
+            "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg=="
+        },
+        "@types/node": {
+            "version": "13.13.15",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.15.tgz",
+            "integrity": "sha512-kwbcs0jySLxzLsa2nWUAGOd/s21WU1jebrEdtzhsj1D4Yps1EOuyI1Qcu+FD56dL7NRNIJtDDjcqIG22NwkgLw=="
+        },
+        "@types/node-fetch": {
+            "version": "2.5.7",
+            "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.7.tgz",
+            "integrity": "sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==",
+            "dev": true,
+            "requires": {
+                "@types/node": "*",
+                "form-data": "^3.0.0"
+            }
+        },
+        "@types/ws": {
+            "version": "7.4.2",
+            "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.2.tgz",
+            "integrity": "sha512-PbeN0Eydl7LQl4OIav29YmkO2LxbVuz3nZD/kb19lOS+wLgIkRbWMNmU/QQR7ABpOJ7D7xDOU8co7iohObewrw==",
+            "requires": {
+                "@types/node": "*"
+            }
+        },
+        "ajv": {
+            "version": "6.12.3",
+            "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
+            "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
+            "dev": true,
+            "requires": {
+                "fast-deep-equal": "^3.1.1",
+                "fast-json-stable-stringify": "^2.0.0",
+                "json-schema-traverse": "^0.4.1",
+                "uri-js": "^4.2.2"
+            }
+        },
+        "ansi-styles": {
+            "version": "4.2.1",
+            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+            "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+            "dev": true,
+            "requires": {
+                "@types/color-name": "^1.1.1",
+                "color-convert": "^2.0.1"
+            }
+        },
+        "array-union": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+            "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+            "dev": true
+        },
+        "asn1": {
+            "version": "0.2.4",
+            "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+            "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+            "dev": true,
+            "requires": {
+                "safer-buffer": "~2.1.0"
+            }
+        },
+        "assert-plus": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+            "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+            "dev": true
+        },
+        "asynckit": {
+            "version": "0.4.0",
+            "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+            "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+            "dev": true
+        },
+        "at-least-node": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+            "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+            "dev": true
+        },
+        "aws-sign2": {
+            "version": "0.7.0",
+            "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+            "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+            "dev": true
+        },
+        "aws4": {
+            "version": "1.10.1",
+            "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz",
+            "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==",
+            "dev": true
+        },
+        "bcrypt-pbkdf": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+            "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+            "dev": true,
+            "requires": {
+                "tweetnacl": "^0.14.3"
+            },
+            "dependencies": {
+                "tweetnacl": {
+                    "version": "0.14.5",
+                    "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+                    "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+                    "dev": true
+                }
+            }
+        },
+        "big-integer": {
+            "version": "1.6.44",
+            "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.44.tgz",
+            "integrity": "sha512-7MzElZPTyJ2fNvBkPxtFQ2fWIkVmuzw41+BZHSzpEq3ymB2MfeKp1+yXl/tS75xCx+WnyV+yb0kp+K1C3UNwmQ=="
+        },
+        "bindings": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz",
+            "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE="
+        },
+        "bplist-creator": {
+            "version": "0.0.8",
+            "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz",
+            "integrity": "sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==",
+            "requires": {
+                "stream-buffers": "~2.2.0"
+            }
+        },
+        "bplist-parser": {
+            "version": "0.2.0",
+            "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz",
+            "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==",
+            "requires": {
+                "big-integer": "^1.6.44"
+            }
+        },
+        "braces": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+            "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+            "dev": true,
+            "requires": {
+                "fill-range": "^7.0.1"
+            }
+        },
+        "byline": {
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz",
+            "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=",
+            "dev": true
+        },
+        "caseless": {
+            "version": "0.12.0",
+            "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+            "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+            "dev": true
+        },
+        "castv2": {
+            "version": "0.1.10",
+            "resolved": "https://registry.npmjs.org/castv2/-/castv2-0.1.10.tgz",
+            "integrity": "sha512-3QWevHrjT22KdF08Y2a217IYCDQDP7vEJaY4n0lPBeC5UBYbMFMadDfVTsaQwq7wqsEgYUHElPGm3EO1ey+TNw==",
+            "requires": {
+                "debug": "^4.1.1",
+                "protobufjs": "^6.8.8"
+            },
+            "dependencies": {
+                "debug": {
+                    "version": "4.1.1",
+                    "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+                    "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+                    "requires": {
+                        "ms": "^2.1.1"
+                    }
+                },
+                "ms": {
+                    "version": "2.1.2",
+                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+                    "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+                }
+            }
+        },
+        "chalk": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+            "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+            "dev": true,
+            "requires": {
+                "ansi-styles": "^4.1.0",
+                "supports-color": "^7.1.0"
+            }
+        },
+        "color-convert": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+            "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+            "dev": true,
+            "requires": {
+                "color-name": "~1.1.4"
+            }
+        },
+        "color-name": {
+            "version": "1.1.4",
+            "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+            "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+            "dev": true
+        },
+        "combined-stream": {
+            "version": "1.0.8",
+            "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+            "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+            "dev": true,
+            "requires": {
+                "delayed-stream": "~1.0.0"
+            }
+        },
+        "core-util-is": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+            "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+            "dev": true
+        },
+        "dashdash": {
+            "version": "1.14.1",
+            "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+            "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+            "dev": true,
+            "requires": {
+                "assert-plus": "^1.0.0"
+            }
+        },
+        "deep-is": {
+            "version": "0.1.3",
+            "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+            "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+            "dev": true
+        },
+        "delayed-stream": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+            "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+            "dev": true
+        },
+        "dir-glob": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+            "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+            "dev": true,
+            "requires": {
+                "path-type": "^4.0.0"
+            }
+        },
+        "ecc-jsbn": {
+            "version": "0.1.2",
+            "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+            "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+            "dev": true,
+            "requires": {
+                "jsbn": "~0.1.0",
+                "safer-buffer": "^2.1.0"
+            }
+        },
+        "escodegen": {
+            "version": "1.14.3",
+            "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
+            "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
+            "dev": true,
+            "requires": {
+                "esprima": "^4.0.1",
+                "estraverse": "^4.2.0",
+                "esutils": "^2.0.2",
+                "optionator": "^0.8.1",
+                "source-map": "~0.6.1"
+            }
+        },
+        "esprima": {
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+            "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+            "dev": true
+        },
+        "estraverse": {
+            "version": "4.3.0",
+            "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+            "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+            "dev": true
+        },
+        "esutils": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+            "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+            "dev": true
+        },
+        "expand-template": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
+            "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
+            "dev": true
+        },
+        "extend": {
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+            "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+            "dev": true
+        },
+        "extsprintf": {
+            "version": "1.3.0",
+            "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+            "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+            "dev": true
+        },
+        "fast-deep-equal": {
+            "version": "3.1.3",
+            "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+            "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+            "dev": true
+        },
+        "fast-glob": {
+            "version": "3.2.4",
+            "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz",
+            "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==",
+            "dev": true,
+            "requires": {
+                "@nodelib/fs.stat": "^2.0.2",
+                "@nodelib/fs.walk": "^1.2.3",
+                "glob-parent": "^5.1.0",
+                "merge2": "^1.3.0",
+                "micromatch": "^4.0.2",
+                "picomatch": "^2.2.1"
+            }
+        },
+        "fast-json-stable-stringify": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+            "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+            "dev": true
+        },
+        "fast-levenshtein": {
+            "version": "2.0.6",
+            "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+            "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+            "dev": true
+        },
+        "fast-srp-hap": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/fast-srp-hap/-/fast-srp-hap-2.0.2.tgz",
+            "integrity": "sha512-wABhZRrFhlovqJQ1HygOUB4R6WZW2hmlpvVYh2dVCy8BPLabDrB/Tu6XI3B4QfmhtHk8s1OeiFqJHY7FBsphug=="
+        },
+        "fastq": {
+            "version": "1.8.0",
+            "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz",
+            "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==",
+            "dev": true,
+            "requires": {
+                "reusify": "^1.0.4"
+            }
+        },
+        "fill-range": {
+            "version": "7.0.1",
+            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+            "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+            "dev": true,
+            "requires": {
+                "to-regex-range": "^5.0.1"
+            }
+        },
+        "forever-agent": {
+            "version": "0.6.1",
+            "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+            "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+            "dev": true
+        },
+        "form-data": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz",
+            "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==",
+            "dev": true,
+            "requires": {
+                "asynckit": "^0.4.0",
+                "combined-stream": "^1.0.8",
+                "mime-types": "^2.1.12"
+            }
+        },
+        "from2": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+            "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+            "dev": true,
+            "requires": {
+                "inherits": "^2.0.1",
+                "readable-stream": "^2.0.0"
+            }
+        },
+        "fs-extra": {
+            "version": "9.1.0",
+            "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+            "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+            "dev": true,
+            "requires": {
+                "at-least-node": "^1.0.0",
+                "graceful-fs": "^4.2.0",
+                "jsonfile": "^6.0.1",
+                "universalify": "^2.0.0"
+            }
+        },
+        "getpass": {
+            "version": "0.1.7",
+            "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+            "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+            "dev": true,
+            "requires": {
+                "assert-plus": "^1.0.0"
+            }
+        },
+        "glob-parent": {
+            "version": "5.1.1",
+            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+            "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+            "dev": true,
+            "requires": {
+                "is-glob": "^4.0.1"
+            }
+        },
+        "globby": {
+            "version": "11.0.1",
+            "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz",
+            "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==",
+            "dev": true,
+            "requires": {
+                "array-union": "^2.1.0",
+                "dir-glob": "^3.0.1",
+                "fast-glob": "^3.1.1",
+                "ignore": "^5.1.4",
+                "merge2": "^1.3.0",
+                "slash": "^3.0.0"
+            }
+        },
+        "graceful-fs": {
+            "version": "4.2.6",
+            "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
+            "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
+            "dev": true
+        },
+        "har-schema": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+            "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+            "dev": true
+        },
+        "har-validator": {
+            "version": "5.1.5",
+            "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+            "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+            "dev": true,
+            "requires": {
+                "ajv": "^6.12.3",
+                "har-schema": "^2.0.0"
+            }
+        },
+        "has-flag": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+            "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+            "dev": true
+        },
+        "http-signature": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+            "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+            "dev": true,
+            "requires": {
+                "assert-plus": "^1.0.0",
+                "jsprim": "^1.2.2",
+                "sshpk": "^1.7.0"
+            }
+        },
+        "ignore": {
+            "version": "5.1.8",
+            "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
+            "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
+            "dev": true
+        },
+        "inherits": {
+            "version": "2.0.4",
+            "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+            "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+            "dev": true
+        },
+        "into-stream": {
+            "version": "5.1.1",
+            "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-5.1.1.tgz",
+            "integrity": "sha512-krrAJ7McQxGGmvaYbB7Q1mcA+cRwg9Ij2RfWIeVesNBgVDZmzY/Fa4IpZUT3bmdRzMzdf/mzltCG2Dq99IZGBA==",
+            "dev": true,
+            "requires": {
+                "from2": "^2.3.0",
+                "p-is-promise": "^3.0.0"
+            }
+        },
+        "is-extglob": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+            "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+            "dev": true
+        },
+        "is-glob": {
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+            "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+            "dev": true,
+            "requires": {
+                "is-extglob": "^2.1.1"
+            }
+        },
+        "is-number": {
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+            "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+            "dev": true
+        },
+        "is-typedarray": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+            "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+            "dev": true
+        },
+        "isarray": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+            "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+            "dev": true
+        },
+        "isstream": {
+            "version": "0.1.2",
+            "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+            "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+            "dev": true
+        },
+        "jsbn": {
+            "version": "0.1.1",
+            "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+            "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+            "dev": true
+        },
+        "json-schema": {
+            "version": "0.2.3",
+            "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+            "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+            "dev": true
+        },
+        "json-schema-traverse": {
+            "version": "0.4.1",
+            "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+            "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+            "dev": true
+        },
+        "json-stringify-safe": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+            "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+            "dev": true
+        },
+        "jsonfile": {
+            "version": "6.1.0",
+            "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+            "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+            "dev": true,
+            "requires": {
+                "graceful-fs": "^4.1.6",
+                "universalify": "^2.0.0"
+            }
+        },
+        "jsprim": {
+            "version": "1.4.1",
+            "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+            "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+            "dev": true,
+            "requires": {
+                "assert-plus": "1.0.0",
+                "extsprintf": "1.3.0",
+                "json-schema": "0.2.3",
+                "verror": "1.10.0"
+            }
+        },
+        "levn": {
+            "version": "0.3.0",
+            "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+            "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+            "dev": true,
+            "requires": {
+                "prelude-ls": "~1.1.2",
+                "type-check": "~0.3.2"
+            }
+        },
+        "long": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
+            "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
+        },
+        "mdns": {
+            "version": "2.5.1",
+            "resolved": "https://registry.npmjs.org/mdns/-/mdns-2.5.1.tgz",
+            "integrity": "sha512-JglS7Ed3Yf0BCpyC7LXA1MUrumMV8jj4g67nT3+m886SFYllz2HWBg8ObywFXWbBSv5gW0meMOOS4vVa2jZGCw==",
+            "requires": {
+                "bindings": "~1.2.1",
+                "nan": "^2.14.0"
+            }
+        },
+        "merge2": {
+            "version": "1.4.1",
+            "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+            "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+            "dev": true
+        },
+        "micromatch": {
+            "version": "4.0.2",
+            "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+            "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+            "dev": true,
+            "requires": {
+                "braces": "^3.0.1",
+                "picomatch": "^2.0.5"
+            }
+        },
+        "mime-db": {
+            "version": "1.44.0",
+            "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+            "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
+        },
+        "mime-types": {
+            "version": "2.1.27",
+            "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+            "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+            "requires": {
+                "mime-db": "1.44.0"
+            }
+        },
+        "minimist": {
+            "version": "1.2.5",
+            "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+            "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+        },
+        "mkdirp": {
+            "version": "0.5.5",
+            "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+            "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+            "dev": true,
+            "requires": {
+                "minimist": "^1.2.5"
+            }
+        },
+        "multistream": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/multistream/-/multistream-2.1.1.tgz",
+            "integrity": "sha512-xasv76hl6nr1dEy3lPvy7Ej7K/Lx3O/FCvwge8PeVJpciPPoNCbaANcNiBug3IpdvTveZUcAV0DJzdnUDMesNQ==",
+            "dev": true,
+            "requires": {
+                "inherits": "^2.0.1",
+                "readable-stream": "^2.0.5"
+            }
+        },
+        "mustache": {
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.0.1.tgz",
+            "integrity": "sha512-yL5VE97+OXn4+Er3THSmTdCFCtx5hHWzrolvH+JObZnUYwuaG7XV+Ch4fR2cIrcYI0tFHxS7iyFYl14bW8y2sA==",
+            "dev": true
+        },
+        "nan": {
+            "version": "2.14.1",
+            "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
+            "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw=="
+        },
+        "node-fetch": {
+            "version": "2.6.0",
+            "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
+            "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
+        },
+        "oauth-sign": {
+            "version": "0.9.0",
+            "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+            "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+            "dev": true
+        },
+        "optionator": {
+            "version": "0.8.3",
+            "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+            "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+            "dev": true,
+            "requires": {
+                "deep-is": "~0.1.3",
+                "fast-levenshtein": "~2.0.6",
+                "levn": "~0.3.0",
+                "prelude-ls": "~1.1.2",
+                "type-check": "~0.3.2",
+                "word-wrap": "~1.2.3"
+            }
+        },
+        "os-tmpdir": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+            "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+            "dev": true
+        },
+        "p-is-promise": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz",
+            "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==",
+            "dev": true
+        },
+        "path-parse": {
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+            "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+            "dev": true
+        },
+        "path-type": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+            "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+            "dev": true
+        },
+        "performance-now": {
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+            "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+            "dev": true
+        },
+        "picomatch": {
+            "version": "2.2.2",
+            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
+            "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
+            "dev": true
+        },
+        "pkg": {
+            "version": "4.4.9",
+            "resolved": "https://registry.npmjs.org/pkg/-/pkg-4.4.9.tgz",
+            "integrity": "sha512-FK4GqHtcCY2PPPVaKViU0NyRzpo6gCS7tPKN5b7AkElqjAOCH1bsRKgohEnxThr6DWfTGByGqba2YHGR/BqbmA==",
+            "dev": true,
+            "requires": {
+                "@babel/parser": "^7.9.4",
+                "@babel/runtime": "^7.9.2",
+                "chalk": "^3.0.0",
+                "escodegen": "^1.14.1",
+                "fs-extra": "^8.1.0",
+                "globby": "^11.0.0",
+                "into-stream": "^5.1.1",
+                "minimist": "^1.2.5",
+                "multistream": "^2.1.1",
+                "pkg-fetch": "^2.6.9",
+                "progress": "^2.0.3",
+                "resolve": "^1.15.1",
+                "stream-meter": "^1.0.4"
+            },
+            "dependencies": {
+                "fs-extra": {
+                    "version": "8.1.0",
+                    "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+                    "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+                    "dev": true,
+                    "requires": {
+                        "graceful-fs": "^4.2.0",
+                        "jsonfile": "^4.0.0",
+                        "universalify": "^0.1.0"
+                    }
+                },
+                "jsonfile": {
+                    "version": "4.0.0",
+                    "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+                    "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+                    "dev": true,
+                    "requires": {
+                        "graceful-fs": "^4.1.6"
+                    }
+                },
+                "universalify": {
+                    "version": "0.1.2",
+                    "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+                    "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+                    "dev": true
+                }
+            }
+        },
+        "pkg-fetch": {
+            "version": "2.6.9",
+            "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-2.6.9.tgz",
+            "integrity": "sha512-EnVR8LRILXBvaNP+wJOSY02c3+qDDfyEyR+aqAHLhcc9PBnbxFT9UZ1+If49goPQzQPn26TzF//fc6KXZ0aXEg==",
+            "dev": true,
+            "requires": {
+                "@babel/runtime": "^7.9.2",
+                "byline": "^5.0.0",
+                "chalk": "^3.0.0",
+                "expand-template": "^2.0.3",
+                "fs-extra": "^8.1.0",
+                "minimist": "^1.2.5",
+                "progress": "^2.0.3",
+                "request": "^2.88.0",
+                "request-progress": "^3.0.0",
+                "semver": "^6.3.0",
+                "unique-temp-dir": "^1.0.0"
+            },
+            "dependencies": {
+                "fs-extra": {
+                    "version": "8.1.0",
+                    "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+                    "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+                    "dev": true,
+                    "requires": {
+                        "graceful-fs": "^4.2.0",
+                        "jsonfile": "^4.0.0",
+                        "universalify": "^0.1.0"
+                    }
+                },
+                "jsonfile": {
+                    "version": "4.0.0",
+                    "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+                    "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+                    "dev": true,
+                    "requires": {
+                        "graceful-fs": "^4.1.6"
+                    }
+                },
+                "universalify": {
+                    "version": "0.1.2",
+                    "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+                    "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+                    "dev": true
+                }
+            }
+        },
+        "prelude-ls": {
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+            "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+            "dev": true
+        },
+        "process-nextick-args": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+            "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+            "dev": true
+        },
+        "progress": {
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+            "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+            "dev": true
+        },
+        "protobufjs": {
+            "version": "6.8.8",
+            "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz",
+            "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==",
+            "requires": {
+                "@protobufjs/aspromise": "^1.1.2",
+                "@protobufjs/base64": "^1.1.2",
+                "@protobufjs/codegen": "^2.0.4",
+                "@protobufjs/eventemitter": "^1.1.0",
+                "@protobufjs/fetch": "^1.1.0",
+                "@protobufjs/float": "^1.0.2",
+                "@protobufjs/inquire": "^1.1.0",
+                "@protobufjs/path": "^1.1.2",
+                "@protobufjs/pool": "^1.1.0",
+                "@protobufjs/utf8": "^1.1.0",
+                "@types/long": "^4.0.0",
+                "@types/node": "^10.1.0",
+                "long": "^4.0.0"
+            },
+            "dependencies": {
+                "@types/node": {
+                    "version": "10.14.19",
+                    "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.19.tgz",
+                    "integrity": "sha512-j6Sqt38ssdMKutXBUuAcmWF8QtHW1Fwz/mz4Y+Wd9mzpBiVFirjpNQf363hG5itkG+yGaD+oiLyb50HxJ36l9Q=="
+                }
+            }
+        },
+        "psl": {
+            "version": "1.8.0",
+            "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+            "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+            "dev": true
+        },
+        "punycode": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+            "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+            "dev": true
+        },
+        "qs": {
+            "version": "6.5.2",
+            "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+            "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+            "dev": true
+        },
+        "rage-edit": {
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/rage-edit/-/rage-edit-1.2.0.tgz",
+            "integrity": "sha512-0RspBRc2s6We4g7hRCvT5mu7YPEnfjvQK8Tt354a2uUNJCMC7MKLvo/1mLvHUCQ/zbP6siQyp5VRZN7UCpMFZg==",
+            "optional": true
+        },
+        "readable-stream": {
+            "version": "2.3.7",
+            "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+            "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+            "dev": true,
+            "requires": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.3",
+                "isarray": "~1.0.0",
+                "process-nextick-args": "~2.0.0",
+                "safe-buffer": "~5.1.1",
+                "string_decoder": "~1.1.1",
+                "util-deprecate": "~1.0.1"
+            }
+        },
+        "regenerator-runtime": {
+            "version": "0.13.7",
+            "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
+            "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==",
+            "dev": true
+        },
+        "request": {
+            "version": "2.88.2",
+            "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+            "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+            "dev": true,
+            "requires": {
+                "aws-sign2": "~0.7.0",
+                "aws4": "^1.8.0",
+                "caseless": "~0.12.0",
+                "combined-stream": "~1.0.6",
+                "extend": "~3.0.2",
+                "forever-agent": "~0.6.1",
+                "form-data": "~2.3.2",
+                "har-validator": "~5.1.3",
+                "http-signature": "~1.2.0",
+                "is-typedarray": "~1.0.0",
+                "isstream": "~0.1.2",
+                "json-stringify-safe": "~5.0.1",
+                "mime-types": "~2.1.19",
+                "oauth-sign": "~0.9.0",
+                "performance-now": "^2.1.0",
+                "qs": "~6.5.2",
+                "safe-buffer": "^5.1.2",
+                "tough-cookie": "~2.5.0",
+                "tunnel-agent": "^0.6.0",
+                "uuid": "^3.3.2"
+            },
+            "dependencies": {
+                "form-data": {
+                    "version": "2.3.3",
+                    "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+                    "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+                    "dev": true,
+                    "requires": {
+                        "asynckit": "^0.4.0",
+                        "combined-stream": "^1.0.6",
+                        "mime-types": "^2.1.12"
+                    }
+                }
+            }
+        },
+        "request-progress": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
+            "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=",
+            "dev": true,
+            "requires": {
+                "throttleit": "^1.0.0"
+            }
+        },
+        "resolve": {
+            "version": "1.17.0",
+            "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
+            "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
+            "dev": true,
+            "requires": {
+                "path-parse": "^1.0.6"
+            }
+        },
+        "reusify": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+            "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+            "dev": true
+        },
+        "run-parallel": {
+            "version": "1.1.9",
+            "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
+            "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
+            "dev": true
+        },
+        "safe-buffer": {
+            "version": "5.1.2",
+            "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+            "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+            "dev": true
+        },
+        "safer-buffer": {
+            "version": "2.1.2",
+            "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+            "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+            "dev": true
+        },
+        "semver": {
+            "version": "6.3.0",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+            "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+            "dev": true
+        },
+        "slash": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+            "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+            "dev": true
+        },
+        "source-map": {
+            "version": "0.6.1",
+            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+            "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+            "dev": true,
+            "optional": true
+        },
+        "sshpk": {
+            "version": "1.16.1",
+            "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+            "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+            "dev": true,
+            "requires": {
+                "asn1": "~0.2.3",
+                "assert-plus": "^1.0.0",
+                "bcrypt-pbkdf": "^1.0.0",
+                "dashdash": "^1.12.0",
+                "ecc-jsbn": "~0.1.1",
+                "getpass": "^0.1.1",
+                "jsbn": "~0.1.0",
+                "safer-buffer": "^2.0.2",
+                "tweetnacl": "~0.14.0"
+            },
+            "dependencies": {
+                "tweetnacl": {
+                    "version": "0.14.5",
+                    "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+                    "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+                    "dev": true
+                }
+            }
+        },
+        "stream-buffers": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
+            "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ="
+        },
+        "stream-meter": {
+            "version": "1.0.4",
+            "resolved": "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz",
+            "integrity": "sha1-Uq+Vql6nYKJJFxZwTb/5D3Ov3R0=",
+            "dev": true,
+            "requires": {
+                "readable-stream": "^2.1.4"
+            }
+        },
+        "string_decoder": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+            "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+            "dev": true,
+            "requires": {
+                "safe-buffer": "~5.1.0"
+            }
+        },
+        "supports-color": {
+            "version": "7.1.0",
+            "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+            "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+            "dev": true,
+            "requires": {
+                "has-flag": "^4.0.0"
+            }
+        },
+        "throttleit": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
+            "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=",
+            "dev": true
+        },
+        "to-regex-range": {
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+            "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+            "dev": true,
+            "requires": {
+                "is-number": "^7.0.0"
+            }
+        },
+        "tough-cookie": {
+            "version": "2.5.0",
+            "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+            "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+            "dev": true,
+            "requires": {
+                "psl": "^1.1.28",
+                "punycode": "^2.1.1"
+            }
+        },
+        "tunnel-agent": {
+            "version": "0.6.0",
+            "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+            "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+            "dev": true,
+            "requires": {
+                "safe-buffer": "^5.0.1"
+            }
+        },
+        "tweetnacl": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
+            "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
+        },
+        "type-check": {
+            "version": "0.3.2",
+            "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+            "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+            "dev": true,
+            "requires": {
+                "prelude-ls": "~1.1.2"
+            }
+        },
+        "typescript": {
+            "version": "4.2.4",
+            "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz",
+            "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==",
+            "dev": true
+        },
+        "uid2": {
+            "version": "0.0.3",
+            "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz",
+            "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=",
+            "dev": true
+        },
+        "unique-temp-dir": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmjs.org/unique-temp-dir/-/unique-temp-dir-1.0.0.tgz",
+            "integrity": "sha1-bc6VsmgcoAPuv7MEpBX5y6vMU4U=",
+            "dev": true,
+            "requires": {
+                "mkdirp": "^0.5.1",
+                "os-tmpdir": "^1.0.1",
+                "uid2": "0.0.3"
+            }
+        },
+        "universalify": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+            "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+            "dev": true
+        },
+        "uri-js": {
+            "version": "4.2.2",
+            "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+            "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+            "dev": true,
+            "requires": {
+                "punycode": "^2.1.0"
+            }
+        },
+        "util-deprecate": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+            "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+            "dev": true
+        },
+        "uuid": {
+            "version": "3.4.0",
+            "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+            "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+            "dev": true
+        },
+        "verror": {
+            "version": "1.10.0",
+            "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+            "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+            "dev": true,
+            "requires": {
+                "assert-plus": "^1.0.0",
+                "core-util-is": "1.0.2",
+                "extsprintf": "^1.2.0"
+            }
+        },
+        "word-wrap": {
+            "version": "1.2.3",
+            "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+            "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+            "dev": true
+        },
+        "ws": {
+            "version": "7.4.5",
+            "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz",
+            "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g=="
+        }
+    }
+}
diff --git a/pkgs/tools/misc/fx_cast/package.json b/pkgs/tools/misc/fx_cast/package.json
new file mode 100644
index 00000000000..2c155f78632
--- /dev/null
+++ b/pkgs/tools/misc/fx_cast/package.json
@@ -0,0 +1,41 @@
+{
+    "name": "fx_cast_bridge",
+    "version": "0.1.2",
+    "__applicationName": "fx_cast_bridge",
+    "__applicationVersion": "0.1.0",
+    "__applicationDirectoryName": "fx_cast",
+    "__applicationExecutableName": "fx_cast_bridge",
+    "scripts": {
+        "build": "node bin/build.js",
+        "package": "node bin/build.js --package",
+        "install-manifest": "node bin/install-manifest.js",
+        "remove-manifest": "node bin/install-manifest.js --remove"
+    },
+    "dependencies": {
+        "@types/minimist": "^1.2.1",
+        "@types/ws": "^7.4.0",
+        "bplist-creator": "0.0.8",
+        "bplist-parser": "^0.2.0",
+        "castv2": "^0.1.10",
+        "fast-srp-hap": "^2.0.2",
+        "mdns": "^2.5.1",
+        "mime-types": "^2.1.27",
+        "minimist": "^1.2.5",
+        "node-fetch": "^2.6.0",
+        "tweetnacl": "^1.0.3",
+        "ws": "^7.4.3"
+    },
+    "devDependencies": {
+        "@types/mdns": "0.0.33",
+        "@types/mime-types": "^2.1.0",
+        "@types/node": "^13.13.15",
+        "@types/node-fetch": "^2.5.7",
+        "fs-extra": "^9.1.0",
+        "mustache": "^4.0.1",
+        "pkg": "^4.4.9",
+        "typescript": "^4.1.5"
+    },
+    "optionalDependencies": {
+        "rage-edit": "^1.2.0"
+    }
+}
diff --git a/pkgs/tools/misc/fxlinuxprintutil/default.nix b/pkgs/tools/misc/fxlinuxprintutil/default.nix
index 112f6a9f232..b97e082128a 100644
--- a/pkgs/tools/misc/fxlinuxprintutil/default.nix
+++ b/pkgs/tools/misc/fxlinuxprintutil/default.nix
@@ -49,7 +49,7 @@ stdenv.mkDerivation rec {
     wrapProgram $out/bin/fxlputil --prefix PATH : ${lib.makeBinPath [ tcl tk ]}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Optional configuration tool for fxlinuxprint";
     homepage = "https://onlinesupport.fujixerox.com";
     license = licenses.unfree;
diff --git a/pkgs/tools/misc/fzf/default.nix b/pkgs/tools/misc/fzf/default.nix
index d9fe6ac819b..3ef5a643259 100644
--- a/pkgs/tools/misc/fzf/default.nix
+++ b/pkgs/tools/misc/fzf/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "fzf";
-  version = "0.22.0";
+  version = "0.27.2";
 
   src = fetchFromGitHub {
     owner = "junegunn";
     repo = pname;
     rev = version;
-    sha256 = "0n0cy5q2r3dm1a3ivlzrv9c5d11awxlqim5b9x8zc85dlr73n35l";
+    sha256 = "sha256-JWTyZRZrW1mFy91D+eZL6iYV0CcNxJUT4JA0hrBKZZU=";
   };
 
-  vendorSha256 = "1c2iz28hjrw9rig9a6r27wd8clycdhi8fgs3da91c63w4qi140zm";
+  vendorSha256 = "sha256-FKDCIotyra/TZ48wbpzudJZ2aI2pn+ZR4EoZ+9+19Mw=";
 
   outputs = [ "out" "man" ];
 
@@ -19,8 +19,12 @@ buildGoModule rec {
 
   buildInputs = [ ncurses ];
 
+  buildFlagsArray = [
+    "-ldflags=-s -w -X main.version=${version} -X main.revision=${src.rev}"
+  ];
+
   # The vim plugin expects a relative path to the binary; patch it to abspath.
-  patchPhase = ''
+  postPatch = ''
     sed -i -e "s|expand('<sfile>:h:h')|'$out'|" plugin/fzf.vim
 
     if ! grep -q $out plugin/fzf.vim; then
@@ -65,7 +69,8 @@ buildGoModule rec {
     homepage = "https://github.com/junegunn/fzf";
     description = "A command-line fuzzy finder written in Go";
     license = licenses.mit;
-    maintainers = with maintainers; [ filalex77 ma27 zowoq ];
+    maintainers = with maintainers; [ Br1ght0ne ma27 zowoq ];
     platforms = platforms.unix;
+    changelog = "https://github.com/junegunn/fzf/blob/${version}/CHANGELOG.md";
   };
 }
diff --git a/pkgs/tools/misc/fzy/default.nix b/pkgs/tools/misc/fzy/default.nix
index 90042d632b7..f726adb0d46 100644
--- a/pkgs/tools/misc/fzy/default.nix
+++ b/pkgs/tools/misc/fzy/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "fzy";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A better fuzzy finder";
     homepage = "https://github.com/jhawthorn/fzy";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/g203-led/default.nix b/pkgs/tools/misc/g203-led/default.nix
new file mode 100644
index 00000000000..7290b57a323
--- /dev/null
+++ b/pkgs/tools/misc/g203-led/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv
+, fetchFromGitHub
+, python3
+}:
+stdenv.mkDerivation rec {
+  pname = "g203-led";
+  version = "unstable-2021-05-08";
+  src = fetchFromGitHub {
+    owner = "smasty";
+    repo = pname;
+    rev = "f9d10ba3aa8f9359f928bbab0a2ea00cefc69f4b";
+    sha256 = "1fhaimci80xmihg84bgrml61zr56pi9rkxfbs13vvw9dwjf031k0";
+  };
+
+  buildInputs = [
+    (python3.withPackages (ps: with ps; [
+      pyusb
+    ]))
+  ];
+
+  postPatch = ''
+    patchShebangs g203-led.py
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D g203-led.py $out/bin/g203-led
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Logitech G203 Prodigy / G203 LightSync Mouse LED control for Linux";
+    longDescription = ''
+      Allows you to control the LED lighting of your G203 Prodigy
+      or G203 LightSync Mouse programmatically.
+      Inspired by and based on g810-led.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ r-burns ];
+    homepage = "https://github.com/smasty/g203-led";
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/g933-utils/default.nix b/pkgs/tools/misc/g933-utils/default.nix
index 3da98301346..6116f15f729 100644
--- a/pkgs/tools/misc/g933-utils/default.nix
+++ b/pkgs/tools/misc/g933-utils/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform, udev, pkgconfig }:
+{ lib, fetchFromGitHub, rustPlatform, udev, pkg-config }:
 
 rustPlatform.buildRustPackage rec {
   pname = "g933-utils";
@@ -11,12 +11,12 @@ rustPlatform.buildRustPackage rec {
     sha256 = "06napzpk3nayzixb4l4fzdiwpgmcrsbc5j9m4qip1yn6dfkin3p0";
   };
 
-  cargoSha256 = "16xgk4rc36d6lylh2dzv63ryq9s7fli3h2qva1m1p6f0gpasnk7w";
+  cargoSha256 = "00gzfbxr5qzb9w7xkqd9jgfagb4c7p657m21b467pygzvaabbb8d";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ udev ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "An application to configure Logitech wireless G933/G533 headsets";
     homepage = "https://github.com/ashkitten/g933-utils";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/gammy/default.nix b/pkgs/tools/misc/gammy/default.nix
index 61430c3e41e..e06d20eb2ff 100644
--- a/pkgs/tools/misc/gammy/default.nix
+++ b/pkgs/tools/misc/gammy/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchFromGitHub, qmake, libXxf86vm, wrapQtAppsHook }:
+{ lib, stdenv, fetchFromGitHub, qmake, libXxf86vm, wrapQtAppsHook }:
 
 let
   pname = "gammy";
-  version = "0.9.58";
+  version = "0.9.64";
 in
 
 stdenv.mkDerivation {
@@ -12,23 +12,14 @@ stdenv.mkDerivation {
     owner = "Fushko";
     repo = pname;
     rev = "v${version}";
-    sha256 = "02f19b7acrzip4kbfjgqk06xv1c257rq77khpdg5gz0ai6ayvwm8";
+    sha256 = "sha256-NPvkT7jSbDjcZDHpMIOik9fNsz7OJXQ3g9OFxkpA3pk=";
   };
 
   nativeBuildInputs = [ qmake wrapQtAppsHook ];
 
   buildInputs = [ libXxf86vm ];
 
-  # FIXME remove when https://github.com/Fushko/gammy/issues/45 is fixed
-  installPhase = ''
-    runHook preInstall
-
-    install gammy -Dt $out/bin/
-
-    runHook postInstall
-  '';
-
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "GUI tool for manual- of auto-adjusting of brightness/temperature";
     homepage = "https://github.com/Fushko/gammy";
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/gams/default.nix b/pkgs/tools/misc/gams/default.nix
index 0723735228a..c6bd2c53844 100644
--- a/pkgs/tools/misc/gams/default.nix
+++ b/pkgs/tools/misc/gams/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, unzip, file, licenseFile ? null, optgamsFile ? null}:
+{ lib, stdenv, fetchurl, unzip, file, licenseFile ? null, optgamsFile ? null}:
 
 assert licenseFile != null;
 
@@ -10,7 +10,8 @@ stdenv.mkDerivation rec {
     sha256 = "4f95389579f33ff7c2586838a2c19021aa0746279555cbb51aa6e0efd09bd297";
   };
   unpackCmd = "unzip $src";
-  buildInputs = [ unzip file ];
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [ file ];
   dontBuild = true;
 
   installPhase = ''
@@ -18,7 +19,7 @@ stdenv.mkDerivation rec {
     cp -a * "$out/share/gams"
 
     cp ${licenseFile} $out/share/gams/gamslice.txt
-  '' + stdenv.lib.optionalString (optgamsFile != null) ''
+  '' + lib.optionalString (optgamsFile != null) ''
     cp ${optgamsFile} $out/share/gams/optgams.def
     ln -s $out/share/gams/optgams.def $out/bin/optgams.def
   '';
@@ -35,7 +36,7 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib;{
+  meta = with lib;{
     description = "General Algebraic Modeling System";
     longDescription = ''
       The General Algebraic Modeling System is a high-level modeling system for mathematical optimization.
diff --git a/pkgs/tools/misc/gawp/default.nix b/pkgs/tools/misc/gawp/default.nix
index 2856dd48559..5c7953a766e 100644
--- a/pkgs/tools/misc/gawp/default.nix
+++ b/pkgs/tools/misc/gawp/default.nix
@@ -1,10 +1,10 @@
-{ stdenv, buildGoPackage, fetchgit }:
+{ lib, buildGoPackage, fetchgit }:
 
 with builtins;
 
 buildGoPackage rec {
   pname = "gawp";
-  version = "20160121-${stdenv.lib.strings.substring 0 7 rev}";
+  version = "20160121-${lib.strings.substring 0 7 rev}";
   rev = "5db2d8faa220e8d6eaf8677354bd197bf621ff7f";
 
   goPackagePath = "github.com/martingallagher/gawp";
@@ -20,6 +20,6 @@ buildGoPackage rec {
   meta = {
     homepage = "https://github.com/martingallagher/gawp";
     description = "A simple, configurable, file watching, job execution tool";
-    license = stdenv.lib.licenses.asl20;
+    license = lib.licenses.asl20;
   };
 }
diff --git a/pkgs/tools/misc/gbdfed/default.nix b/pkgs/tools/misc/gbdfed/default.nix
index e5dc243ede1..ded2864dbc6 100644
--- a/pkgs/tools/misc/gbdfed/default.nix
+++ b/pkgs/tools/misc/gbdfed/default.nix
@@ -1,4 +1,4 @@
- { stdenv, fetchurl, pkgconfig, freetype, gtk }:
+ { lib, stdenv, fetchurl, pkg-config, freetype, gtk }:
 
 stdenv.mkDerivation rec {
   version = "1.6";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "0g09k6wim58hngxncq2brr7mwjm92j3famp0vs4b3p48wr65vcjx";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ freetype gtk ];
 
   patches = [ ./Makefile.patch ];
@@ -20,13 +20,13 @@ stdenv.mkDerivation rec {
     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 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. 
+      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;
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.linquize ];
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/geekbench/default.nix b/pkgs/tools/misc/geekbench/default.nix
index 4d9434e9fb5..17e67c0bc75 100644
--- a/pkgs/tools/misc/geekbench/default.nix
+++ b/pkgs/tools/misc/geekbench/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchurl, makeWrapper, ocl-icd, vulkan-loader, linuxPackages }:
+{ lib, stdenv, fetchurl, makeWrapper, ocl-icd, vulkan-loader, linuxPackages }:
 
 stdenv.mkDerivation rec {
   pname = "geekbench";
-  version = "5.2.3";
+  version = "5.3.2";
 
   src = fetchurl {
     url = "https://cdn.geekbench.com/Geekbench-${version}-Linux.tar.gz";
-    sha256 = "03hasbibw79vbcrpdf2fnm42i2mxc0ia7k96xv012wn6d4dfvr4w";
+    sha256 = "sha256-SdmcyOgK8k07pkjOVWLbNj36ktJnkQWJ8ObPiMgcMYk=";
   };
 
   dontConfigure = true;
@@ -27,11 +27,11 @@ stdenv.mkDerivation rec {
 
     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 ]}:$out/lib/"
+      wrapProgram $out/bin/$f --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc.lib ]}:$out/lib/"
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Cross-platform benchmark";
     homepage = "https://geekbench.com/";
     license = licenses.unfree;
diff --git a/pkgs/tools/misc/geteltorito/default.nix b/pkgs/tools/misc/geteltorito/default.nix
index cee93ae2991..be2de1167e3 100644
--- a/pkgs/tools/misc/geteltorito/default.nix
+++ b/pkgs/tools/misc/geteltorito/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, perl, ronn, fetchurl }:
+{ lib, stdenv, perl, ronn, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "geteltorito";
@@ -38,7 +38,7 @@ stdenv.mkDerivation rec {
     install -vD geteltorito $out/bin/geteltorito
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/misc/getopt/default.nix b/pkgs/tools/misc/getopt/default.nix
index f94d6eeff4e..c3b94465aea 100644
--- a/pkgs/tools/misc/getopt/default.nix
+++ b/pkgs/tools/misc/getopt/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation rec {
   pname = "getopt";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
   ];
 
   meta = {
-    platforms = stdenv.lib.platforms.unix;
+    platforms = lib.platforms.unix;
     homepage = "http://frodo.looijaard.name/project/getopt";
     description = "Parses command-line arguments from shell scripts";
   };
diff --git a/pkgs/tools/misc/gh-ost/default.nix b/pkgs/tools/misc/gh-ost/default.nix
index 17893ef18ae..2e2d8ccfc14 100644
--- a/pkgs/tools/misc/gh-ost/default.nix
+++ b/pkgs/tools/misc/gh-ost/default.nix
@@ -1,27 +1,23 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
-let
-  goPackagePath = "github.com/github/gh-ost";
-  version = "1.0.49";
-  sha256 = "0mncjhmv25wnhgjkn9gwkz2gzh0v6954w47ql7fs2iqr9al111dq";
+buildGoPackage rec {
+  pname = "gh-ost";
+  version = "1.1.2";
 
-in
-buildGoPackage ({
-    pname = "gh-ost";
-    inherit version;
-    inherit goPackagePath;
+  src = fetchFromGitHub {
+    owner = "github";
+    repo = "gh-ost";
+    rev = "v${version}";
+    sha256 = "sha256-q1wtATFm65c2esQ+TPR2f+YafYeOmC79EumHyGxXrnE=";
+  };
 
-    src = fetchFromGitHub {
-      owner = "github";
-      repo  = "gh-ost";
-      rev   = "v${version}";
-      inherit sha256;
-    };
+  goPackagePath = "github.com/github/gh-ost";
 
-    meta = with stdenv.lib; {
-      description = "Triggerless online schema migration solution for MySQL";
-      homepage = "https://github.com/github/gh-ost";
-      license = licenses.mit;
-    };
-})
+  buildFlagsArray = [ "-ldflags=-s -w -X main.AppVersion=${version} -X main.BuildDescribe=${src.rev}" ];
 
+  meta = with lib; {
+    description = "Triggerless online schema migration solution for MySQL";
+    homepage = "https://github.com/github/gh-ost";
+    license = licenses.mit;
+  };
+}
diff --git a/pkgs/tools/misc/gibo/default.nix b/pkgs/tools/misc/gibo/default.nix
index abee4950d87..6ee4698d750 100644
--- a/pkgs/tools/misc/gibo/default.nix
+++ b/pkgs/tools/misc/gibo/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, coreutils, findutils, git }:
+{ lib, stdenv, fetchFromGitHub, coreutils, findutils, git }:
 
 stdenv.mkDerivation rec {
   pname = "gibo";
@@ -11,24 +11,22 @@ stdenv.mkDerivation rec {
     sha256 = "07j3sv9ar9l074krajw8nfmsfmdp836irsbd053dbqk2v880gfm6";
   };
 
-  phases = [ "unpackPhase" "installPhase" "fixupPhase" ];
-
   installPhase = ''
-    mkdir -p $out/bin $out/etc/bash_completion.d
+    mkdir -p $out/bin $out/share/bash-completion/completions
     cp gibo $out/bin
-    cp gibo-completion.bash $out/etc/bash_completion.d
+    cp gibo-completion.bash $out/share/bash-completion/completions
 
     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"
+        -i "$out/share/bash-completion/completions/gibo-completion.bash"
   '';
 
   meta = {
     homepage = "https://github.com/simonwhitaker/gibo";
-    license = stdenv.lib.licenses.publicDomain;
+    license = lib.licenses.publicDomain;
     description = "A shell script for easily accessing gitignore boilerplates";
-    platforms = stdenv.lib.platforms.unix;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/gif-for-cli/default.nix b/pkgs/tools/misc/gif-for-cli/default.nix
index fed22e51893..bbb1b8b9640 100644
--- a/pkgs/tools/misc/gif-for-cli/default.nix
+++ b/pkgs/tools/misc/gif-for-cli/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchFromGitHub, python3Packages, ffmpeg_3, zlib, libjpeg }:
+{ lib, fetchFromGitHub, python3Packages, ffmpeg, zlib, libjpeg }:
 
 python3Packages.buildPythonApplication {
   pname = "gif-for-cli";
-  version = "unstable-2018-08-14";
+  version = "1.1.2";
 
   src = fetchFromGitHub {
     owner = "google";
     repo = "gif-for-cli";
-    rev = "9696f25fea2e38499b7c248a3151030c3c68bb00";
-    sha256 = "1rj8wjfsabn27k1ds7a5fdqgf2r28zpz4lvhbzssjfj1yf0mfh7s";
+    rev = "31f8aa2d617d6d6e941154f60e287c38dd9a74d5";
+    sha256 = "Bl5o492BUAn1KsscnlMIXCzJuy7xWUsdnxIKZKaRM3M=";
   };
 
   checkInputs = [ python3Packages.coverage ];
-  buildInputs = [ ffmpeg_3 zlib libjpeg ];
-  propagatedBuildInputs = with python3Packages; [ pillow requests x256 ];
+  buildInputs = [ zlib libjpeg ];
+  propagatedBuildInputs = with python3Packages; [ ffmpeg pillow requests x256 ];
 
-  meta = with stdenv.lib; {
+  meta = with 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";
diff --git a/pkgs/tools/misc/git-fire/default.nix b/pkgs/tools/misc/git-fire/default.nix
index 0b5deccaa90..15dc34cd526 100644
--- a/pkgs/tools/misc/git-fire/default.nix
+++ b/pkgs/tools/misc/git-fire/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation {
   name = "git-fire-unstable-2017-08-27";
@@ -14,7 +14,7 @@ stdenv.mkDerivation {
     install -D -m755 $src/git-fire $out/bin/git-fire
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = ''
       Push ALL changes in a git repository
     '';
@@ -23,7 +23,7 @@ stdenv.mkDerivation {
     '';
     homepage = "https://github.com/qw3rtman/git-fire";
     license = licenses.mit;
-    platforms = platforms.linux;
+    platforms = platforms.all;
     maintainers = [ maintainers.swflint ];
   };
 }
diff --git a/pkgs/tools/misc/git-town/default.nix b/pkgs/tools/misc/git-town/default.nix
index 7a8b16c55e0..88d62b896df 100644
--- a/pkgs/tools/misc/git-town/default.nix
+++ b/pkgs/tools/misc/git-town/default.nix
@@ -1,24 +1,23 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "git-town";
-  version = "7.3.0";
-
-  goPackagePath = "github.com/Originate/git-town";
+  version = "7.5.0";
 
+  goPackagePath = "github.com/git-town/git-town";
   src = fetchFromGitHub {
-    owner = "Originate";
+    owner = "git-town";
     repo = "git-town";
     rev = "v${version}";
-    sha256 = "166g9i79hqga8k5wvs0b84q6rqniizzsd39v37s9w16axgdrm6nb";
+    sha256 = "sha256-RmLDlTK+JO2KRLuLvO927W3WYdDlteBIpgTgDXh8lC8=";
   };
 
-  buildFlagsArray = [ "-ldflags=-X github.com/Originate/git-town/src/cmd.version=v${version} -X github.com/Originate/git-town/src/cmd.buildDate=nix" ];
+  buildFlagsArray = [ "-ldflags=-X github.com/git-town/git-town/src/cmd.version=v${version} -X github.com/git-town/git-town/src/cmd.buildDate=nix" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Generic, high-level git support for git-flow workflows";
-    homepage = "http://www.git-town.com/";
-    maintainers = [ maintainers.allonsy ];
+    homepage = "https://www.git-town.com/";
+    maintainers = [ maintainers.allonsy maintainers.blaggacao ];
     license = licenses.mit;
   };
 }
diff --git a/pkgs/tools/misc/github-backup/default.nix b/pkgs/tools/misc/github-backup/default.nix
new file mode 100644
index 00000000000..1fcaf3a4711
--- /dev/null
+++ b/pkgs/tools/misc/github-backup/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, python3
+, git
+, git-lfs
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "github-backup";
+  version = "0.39.0";
+
+  src = python3.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "71829df4bdbe5bd55c324a97008405a6b4c6113edb1a2a6a8b73a7059fe64a47";
+  };
+
+  makeWrapperArgs = [
+    "--prefix" "PATH" ":" (lib.makeBinPath [ git git-lfs ])
+  ];
+
+  # has no unit tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Backup a github user or organization";
+    homepage = "https://github.com/josegonzalez/python-github-backup";
+    changelog = "https://github.com/josegonzalez/python-github-backup/blob/${version}/CHANGES.rst";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/tools/misc/gitlint/default.nix b/pkgs/tools/misc/gitlint/default.nix
new file mode 100644
index 00000000000..267cdee7233
--- /dev/null
+++ b/pkgs/tools/misc/gitlint/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, gitMinimal
+, python3
+}:
+
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+
+      click = super.click.overridePythonAttrs (oldAttrs: rec {
+        version = "7.1.2";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj";
+        };
+      });
+
+      arrow = super.arrow.overridePythonAttrs (oldAttrs: rec {
+        version = "1.0.3";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "0793badh4hgbk2c5g70hmbl7n3d4g5d87bcflld0w9rjwy59r71r";
+        };
+      });
+
+      sh = super.sh.overridePythonAttrs (oldAttrs: rec {
+        version = "1.14.1";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "13hxgifab9ichla13qaa7sh8r0il7vs1r21js72s0n355zr9mair";
+        };
+      });
+    };
+  };
+in
+with py.pkgs;
+
+buildPythonApplication rec {
+  pname = "gitlint";
+  version = "0.15.1";
+
+  src = fetchFromGitHub {
+    owner = "jorisroovers";
+    repo = "gitlint";
+    rev = "v${version}";
+    sha256 = "sha256-CqmE4V+svSuQAsoX0I3NpUqPU5CQf3fyCHJPrjUjHF4=";
+  };
+
+  nativeBuildInputs = [
+    wheel
+  ];
+
+  propagatedBuildInputs = [
+    arrow
+    click
+    sh
+  ];
+
+  preCheck = ''
+    export PATH="$out/bin:$PATH"
+  '';
+
+  checkInputs = [
+    gitMinimal
+  ];
+
+  meta = with lib; {
+    description = "Linting for your git commit messages";
+    homepage = "https://jorisroovers.com/gitlint/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ethancedwards8 fab ];
+  };
+}
diff --git a/pkgs/tools/misc/gnokii/default.nix b/pkgs/tools/misc/gnokii/default.nix
index 25c31666191..9803e8db016 100644
--- a/pkgs/tools/misc/gnokii/default.nix
+++ b/pkgs/tools/misc/gnokii/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, intltool, perl, gettext, libusb-compat-0_1, pkgconfig, bluez
+{ lib, stdenv, fetchurl, intltool, perl, gettext, libusb-compat-0_1, pkg-config, bluez
 , readline, pcsclite, libical, gtk2, glib, libXpm }:
 
 stdenv.mkDerivation rec {
@@ -12,15 +12,15 @@ stdenv.mkDerivation rec {
 
   buildInputs = [
     perl intltool gettext libusb-compat-0_1
-    glib gtk2 pkgconfig bluez readline
+    glib gtk2 pkg-config bluez readline
     libXpm pcsclite libical
   ];
 
   meta = {
     description = "Cellphone tool";
     homepage = "http://www.gnokii.org";
-    maintainers = [ stdenv.lib.maintainers.raskin ];
-    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ lib.maintainers.raskin ];
+    platforms = lib.platforms.linux;
     broken = true; # 2018-04-10
   };
 }
diff --git a/pkgs/tools/misc/gnuvd/default.nix b/pkgs/tools/misc/gnuvd/default.nix
deleted file mode 100644
index 0c492962270..00000000000
--- a/pkgs/tools/misc/gnuvd/default.nix
+++ /dev/null
@@ -1,17 +0,0 @@
-{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 = "https://www.djcbsoftware.nl/code/gnuvd/";
-    license = licenses.gpl2;
-    platforms = platforms.unix;
-  };
-}
diff --git a/pkgs/tools/misc/go.rice/default.nix b/pkgs/tools/misc/go.rice/default.nix
index 340b2d41c66..f691221dd7b 100644
--- a/pkgs/tools/misc/go.rice/default.nix
+++ b/pkgs/tools/misc/go.rice/default.nix
@@ -1,25 +1,25 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "go.rice";
-  version = "1.0.0";
+  version = "1.0.2";
 
   src = fetchFromGitHub {
     owner = "GeertJohan";
     repo = "go.rice";
     rev = "v${version}";
-    sha256 = "0m1pkqnx9glf3mlx5jdaby9yxccbl02jpjgpi4m7x1hb4s2gn6vx";
+    sha256 = "sha256-jO4otde/m52L2NrE88aXRjdGDBNxnbP1Zt+5fEqfNIc=";
   };
 
-  vendorSha256 = "0cb5phyl2zm1xnkhvisv0lzgknsi93yzmpayg30w7jc6z4icwnw7";
+  vendorSha256 = "sha256-VlpdZcqg7yWUADN8oD/IAgAXVdzJeIeymx2Pu/7E21o=";
 
   doCheck = false;
 
   subPackages = [ "." "rice" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/GeertJohan/go.rice";
-    description = "A Go package that makes working with resources such as html, js, css, images, templates very easy.";
+    description = "A Go package that makes working with resources such as html, js, css, images, templates very easy";
     license = licenses.bsd2;
     maintainers = with maintainers; [ blaggacao ];
   };
diff --git a/pkgs/tools/misc/goaccess/default.nix b/pkgs/tools/misc/goaccess/default.nix
index 1906c9d5665..051e61e7af8 100644
--- a/pkgs/tools/misc/goaccess/default.nix
+++ b/pkgs/tools/misc/goaccess/default.nix
@@ -1,31 +1,29 @@
-{ stdenv, fetchurl, pkgconfig, ncurses, glib, libmaxminddb }:
+{ lib, stdenv, fetchurl, ncurses, gettext, openssl, withGeolocation ? true, libmaxminddb }:
 
 stdenv.mkDerivation rec {
-  version = "1.4";
+  version = "1.5.1";
   pname = "goaccess";
 
   src = fetchurl {
     url = "https://tar.goaccess.io/goaccess-${version}.tar.gz";
-    sha256 = "1gkpjg39f3afdwm9128jqjsfap07p8s027czzlnxfmi5hpzvkyz8";
+    sha256 = "sha256-iEF+eOYrcN45gLdiKRHk/NcZw2YPADyIeWjnGWw5lw8=";
   };
 
   configureFlags = [
-    "--enable-geoip=mmdb"
     "--enable-utf8"
-  ];
+    "--with-openssl"
+  ] ++ lib.optionals withGeolocation [ "--enable-geoip=mmdb" ];
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [
-    libmaxminddb
-    ncurses
-    glib
-  ];
+  buildInputs = [ ncurses openssl ]
+    ++ lib.optionals withGeolocation [ libmaxminddb ]
+    ++ lib.optionals stdenv.isDarwin [ gettext ];
 
   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 ];
+    changelog   = "https://github.com/allinurl/goaccess/raw/v${version}/ChangeLog";
+    license     = lib.licenses.mit;
+    platforms   = lib.platforms.linux ++ lib.platforms.darwin;
+    maintainers = with lib.maintainers; [ ederoyd46 ];
   };
 }
diff --git a/pkgs/tools/misc/godu/default.nix b/pkgs/tools/misc/godu/default.nix
new file mode 100644
index 00000000000..37511d2e847
--- /dev/null
+++ b/pkgs/tools/misc/godu/default.nix
@@ -0,0 +1,24 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "godu";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "viktomas";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1fp8iq4x0qiswksznnd6qh7c6g5pwglzz6ga11a7vgic0201wsvb";
+  };
+
+  patches = [ ./go-mod.patch ];
+
+  vendorSha256 = "1zq7b0zn24cbrjssk4g03i90szp1ms7ila4khwcm7hp9n1py245s";
+
+  meta = with lib; {
+    description = "Utility helping to discover large files/folders";
+    homepage = "https://github.com/viktomas/godu";
+    license = licenses.mit;
+    maintainers = with maintainers; [ rople380 ];
+  };
+}
diff --git a/pkgs/tools/misc/godu/go-mod.patch b/pkgs/tools/misc/godu/go-mod.patch
new file mode 100644
index 00000000000..2b3efe6be60
--- /dev/null
+++ b/pkgs/tools/misc/godu/go-mod.patch
@@ -0,0 +1,33 @@
+diff --git a/go.mod b/go.mod
+index cf8f2fb..e405e03 100644
+--- a/go.mod
++++ b/go.mod
+@@ -5,5 +5,6 @@ go 1.14
+ require (
+ 	github.com/gdamore/tcell v1.1.1
+ 	github.com/gosuri/uilive v0.0.0-20170323041506-ac356e6e42cd
++	github.com/mattn/go-isatty v0.0.12 // indirect
+ 	github.com/stretchr/testify v1.3.0
+ )
+diff --git a/go.sum b/go.sum
+index 23c1232..e25c87e 100644
+--- a/go.sum
++++ b/go.sum
+@@ -8,6 +8,8 @@ github.com/gosuri/uilive v0.0.0-20170323041506-ac356e6e42cd h1:1e+0Z+T4t1mKL5xxv
+ github.com/gosuri/uilive v0.0.0-20170323041506-ac356e6e42cd/go.mod h1:qkLSc0A5EXSP6B04TrN4oQoxqFI7A8XvoXSlJi8cwk8=
+ github.com/lucasb-eyer/go-colorful v0.0.0-20181028223441-12d3b2882a08 h1:5MnxBC15uMxFv5FY/J/8vzyaBiArCOkMdFT9Jsw78iY=
+ github.com/lucasb-eyer/go-colorful v0.0.0-20181028223441-12d3b2882a08/go.mod h1:NXg0ArsFk0Y01623LgUqoqcouGDB+PwCCQlrwrG6xJ4=
++github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
++github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
+ github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y=
+ github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
+ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+@@ -16,6 +18,8 @@ github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
+ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+ github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
+ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
++golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
++golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+ golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
+ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+ gopkg.in/DATA-DOG/go-sqlmock.v1 v1.3.0 h1:FVCohIoYO7IJoDDVpV2pdq7SgrMH6wHnuTyrdrxJNoY=
\ No newline at end of file
diff --git a/pkgs/tools/misc/goreleaser/default.nix b/pkgs/tools/misc/goreleaser/default.nix
new file mode 100644
index 00000000000..5e805920b68
--- /dev/null
+++ b/pkgs/tools/misc/goreleaser/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "goreleaser";
+  version = "0.173.2";
+
+  src = fetchFromGitHub {
+    owner = "goreleaser";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-X7Tj50A0CwkGUyKGsCj6LBAlNZwMhFk/gDEgG1KNjx0=";
+  };
+
+  vendorSha256 = "sha256-yX8Ffdzq22JHA2owtHurH8AEgqPgPjz+N06oD5ZiZmM=";
+
+  buildFlagsArray = [
+    "-ldflags="
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+    "-X main.builtBy=nixpkgs"
+  ];
+
+  # tests expect the source files to be a build repo
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Deliver Go binaries as fast and easily as possible";
+    homepage = "https://goreleaser.com";
+    maintainers = with maintainers; [ c0deaddict endocrimes sarcasticadmin ];
+    license = licenses.mit;
+  };
+}
diff --git a/pkgs/tools/misc/goss/default.nix b/pkgs/tools/misc/goss/default.nix
new file mode 100644
index 00000000000..bbe947ecd12
--- /dev/null
+++ b/pkgs/tools/misc/goss/default.nix
@@ -0,0 +1,34 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "goss";
+  version = "0.3.16";
+
+  src = fetchFromGitHub {
+    owner = "aelsabbahy";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1m5w5vwmc9knvaihk61848rlq7qgdyylzpcwi64z84rkw8qdnj6p";
+  };
+
+  vendorSha256 = "1lyqjkwj8hybj5swyrv6357hs8sxmf4wim0c8yhfb9mv7fsxhrv7";
+
+  CGO_ENABLED = 0;
+  preBuild = ''
+    buildFlagsArray+=("-ldflags" "-s -w -X main.version=v${version}")
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/aelsabbahy/goss/";
+    changelog = "https://github.com/aelsabbahy/goss/releases/tag/v${version}";
+    description = "Quick and easy server validation";
+    longDescription = ''
+      Goss is a YAML based serverspec alternative tool for validating a server’s configuration.
+      It eases the process of writing tests by allowing the user to generate tests from the current system state.
+      Once the test suite is written they can be executed, waited-on, or served as a health endpoint.
+    '';
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ hyzual jk ];
+  };
+}
diff --git a/pkgs/tools/misc/gosu/default.nix b/pkgs/tools/misc/gosu/default.nix
index bd53529a5d2..033883ab1c8 100644
--- a/pkgs/tools/misc/gosu/default.nix
+++ b/pkgs/tools/misc/gosu/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchgit }:
+{ lib, buildGoPackage, fetchgit }:
 
 buildGoPackage rec {
   pname = "gosu";
@@ -18,7 +18,7 @@ buildGoPackage rec {
   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;
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/gotify-cli/default.nix b/pkgs/tools/misc/gotify-cli/default.nix
index 9e9f3c84782..36a7055f875 100644
--- a/pkgs/tools/misc/gotify-cli/default.nix
+++ b/pkgs/tools/misc/gotify-cli/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "gotify-cli";
-  version = "2.1.1";
+  version = "2.2.0";
 
   src = fetchFromGitHub {
     owner = "gotify";
     repo = "cli";
     rev = "v${version}";
-    sha256 = "131gs6xzfggnrzq5jgyky23zvcmhx3q3hd17xvqxd02s2i9x1mg4";
+    sha256 = "0hgh1i8rdmf12qmk66cgksv8hz5qzkfbfb6cfmrkhbq765xkm4ir";
   };
 
-  vendorSha256 = "1lhhsf944gm1p6qxn05g2s3hdnra5dggj7pdrdq6qr6r2xg7f5qh";
+  vendorSha256 = "1l47s0h0v4cgqcsm5008cknvfa4vnv6f7n43d8ga0xq5ikqqzmja";
 
   doCheck = false;
 
@@ -19,10 +19,14 @@ buildGoModule rec {
     mv $out/bin/cli $out/bin/gotify
   '';
 
+  buildFlagsArray = [
+    "-ldflags=-X main.Version=${version} -X main.Commit=${version} -X main.BuildDate=1970-01-01"
+  ];
+
   meta = with lib; {
     license = licenses.mit;
     homepage = "https://github.com/gotify/cli";
-    description = "A command line interface for pushing messages to gotify/server.";
+    description = "A command line interface for pushing messages to gotify/server";
     maintainers = with maintainers; [ ma27 ];
   };
 }
diff --git a/pkgs/tools/misc/gparted/default.nix b/pkgs/tools/misc/gparted/default.nix
index 6292fb4a722..08e4641fb4c 100644
--- a/pkgs/tools/misc/gparted/default.nix
+++ b/pkgs/tools/misc/gparted/default.nix
@@ -1,14 +1,15 @@
-{ stdenv, fetchurl, intltool, gettext, makeWrapper, coreutils, gnused, gnome3
-, gnugrep, parted, glib, libuuid, pkgconfig, gtkmm3, libxml2
-, gpart, hdparm, procps, utillinux, polkit, wrapGAppsHook, substituteAll
+{ lib, stdenv, fetchurl, intltool, gettext, coreutils, gnused, gnome
+, gnugrep, parted, glib, libuuid, pkg-config, gtkmm3, libxml2
+, gpart, hdparm, procps, util-linux, polkit, wrapGAppsHook, substituteAll
 }:
 
 stdenv.mkDerivation rec {
-  name = "gparted-1.1.0";
+  pname = "gparted";
+  version = "1.3.1";
 
   src = fetchurl {
-    url = "mirror://sourceforge/gparted/${name}.tar.gz";
-    sha256 = "092rgwjh1825fal6v3yafq2wr0i61hh0a2n0j4296zn0zdx7pzp2";
+    url = "mirror://sourceforge/gparted/${pname}-${version}.tar.gz";
+    sha256 = "sha256-Xu4ubXSxXvlrE7OiMQyGjtIpjgM0ECHn0SpamKHR4Qk=";
   };
 
   # Tries to run `pkexec --version` to get version.
@@ -23,12 +24,12 @@ stdenv.mkDerivation rec {
 
   configureFlags = [ "--disable-doc" ];
 
-  buildInputs = [ parted glib libuuid gtkmm3 libxml2 polkit.bin gnome3.adwaita-icon-theme  ];
-  nativeBuildInputs = [ intltool gettext pkgconfig wrapGAppsHook ];
+  buildInputs = [ parted glib libuuid gtkmm3 libxml2 polkit.bin gnome.adwaita-icon-theme  ];
+  nativeBuildInputs = [ intltool gettext pkg-config wrapGAppsHook ];
 
   preFixup = ''
     gappsWrapperArgs+=(
-       --prefix PATH : "${stdenv.lib.makeBinPath [ gpart hdparm utillinux procps coreutils gnused gnugrep ]}"
+       --prefix PATH : "${lib.makeBinPath [ gpart hdparm util-linux procps coreutils gnused gnugrep ]}"
     )
   '';
 
@@ -38,7 +39,7 @@ stdenv.mkDerivation rec {
       $out/share/polkit-1/actions/org.gnome.gparted.policy
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Graphical disk partitioning tool";
     longDescription = ''
       GNOME Partition Editor for creating, reorganizing, and deleting disk
diff --git a/pkgs/tools/misc/gpick/default.nix b/pkgs/tools/misc/gpick/default.nix
new file mode 100644
index 00000000000..0d39bb810b9
--- /dev/null
+++ b/pkgs/tools/misc/gpick/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, fetchFromGitHub, cmake, glib, boost, pkg-config, gtk3, ragel, lua, lib }:
+
+stdenv.mkDerivation rec {
+  pname = "gpick";
+  version = "0.2.6";
+
+  src = fetchFromGitHub {
+    owner = "thezbyg";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "sha256-Z67EJRtKJZLoTUtdMttVTLkzTV2F5rKZ96vaothLiFo=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
+  buildInputs = [ boost gtk3 ragel lua ];
+
+  meta = with lib; {
+    description = "Advanced color picker written in C++ using GTK+ toolkit";
+    homepage = "http://www.gpick.org/";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.vanilla ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/graylog/default.nix b/pkgs/tools/misc/graylog/default.nix
index cb7adf795d3..8d18d654c72 100644
--- a/pkgs/tools/misc/graylog/default.nix
+++ b/pkgs/tools/misc/graylog/default.nix
@@ -1,19 +1,21 @@
-{ stdenv, fetchurl, makeWrapper, jre_headless }:
+{ lib, stdenv, fetchurl, makeWrapper, openjdk11_headless, nixosTests }:
 
 stdenv.mkDerivation rec {
   pname = "graylog";
-  version = "3.3.4";
+  version = "4.0.7";
 
   src = fetchurl {
     url = "https://packages.graylog2.org/releases/graylog/graylog-${version}.tgz";
-    sha256 = "0wynnb56plch61pzjl46jx5q94c5hclzyrr8567fc1jhnqycfngs";
+    sha256 = "sha256-sZn/ug4oh/SHbICbiQeAmtEIwT3++DBWbT2XBkYGYUc=";
   };
 
   dontBuild = true;
   dontStrip = true;
 
-  buildInputs = [ makeWrapper ];
-  makeWrapperArgs = [ "--prefix" "PATH" ":" "${jre_headless}/bin" ];
+  nativeBuildInputs = [ makeWrapper ];
+  makeWrapperArgs = [ "--set-default" "JAVA_HOME" "${openjdk11_headless}" ];
+
+  passthru.tests = { inherit (nixosTests) graylog; };
 
   installPhase = ''
     mkdir -p $out
@@ -21,7 +23,7 @@ stdenv.mkDerivation rec {
     wrapProgram $out/bin/graylogctl $makeWrapperArgs
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Open source log management solution";
     homepage    = "https://www.graylog.org/";
     license     = licenses.gpl3;
diff --git a/pkgs/tools/misc/graylog/plugins.nix b/pkgs/tools/misc/graylog/plugins.nix
index b1abc8a5065..8df7f34bb23 100644
--- a/pkgs/tools/misc/graylog/plugins.nix
+++ b/pkgs/tools/misc/graylog/plugins.nix
@@ -1,4 +1,4 @@
-{ pkgs,  stdenv, fetchurl, unzip, graylog }:
+{ pkgs,  lib, stdenv, fetchurl, unzip, graylog }:
 
 with pkgs.lib;
 
@@ -15,7 +15,7 @@ let
     stdenv.mkDerivation (a // {
       inherit installPhase;
       dontUnpack = true;
-      buildInputs = [ unzip ];
+      nativeBuildInputs = [ unzip ];
       meta = a.meta // {
         platforms = graylog.meta.platforms;
         maintainers = (a.meta.maintainers or []) ++ [ maintainers.fadenb ];
@@ -32,7 +32,7 @@ in {
     };
     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";
+      description = "A plugin that enables users to execute term searches and get notified when the given criteria are met";
     };
   };
   auth_sso = glPlugin rec {
@@ -64,10 +64,10 @@ in {
   enterprise-integrations = glPlugin rec {
     name = "graylog-enterprise-integrations-${version}";
     pluginName = "graylog-plugin-enterprise-integrations";
-    version = "3.3.4";
+    version = "3.3.9";
     src = fetchurl {
       url = "https://downloads.graylog.org/releases/graylog-enterprise-integrations/graylog-enterprise-integrations-plugins-${version}.tgz";
-      sha256 = "0ln0vmnfgxg6hdq7sh58xdqn14bl86qrgy3923f3q3hx209v6vn9";
+      sha256 = "0yr2lmf50w8qw5amimmym6y4jxga4d7s7cbiqs5sqzvipgsknbwj";
     };
     installPhase = ''
       mkdir -p $out/bin
@@ -77,7 +77,7 @@ in {
     meta = {
       homepage = "https://docs.graylog.org/en/3.3/pages/integrations.html#enterprise";
       description = "Integrations are tools that help Graylog work with external systems (unfree enterprise integrations)";
-      license = stdenv.lib.licenses.unfree;
+      license = lib.licenses.unfree;
     };
   };
   filter-messagesize = glPlugin rec {
@@ -96,10 +96,10 @@ in {
   integrations = glPlugin rec {
     name = "graylog-integrations-${version}";
     pluginName = "graylog-plugin-integrations";
-    version = "3.3.4";
+    version = "3.3.9";
     src = fetchurl {
       url = "https://downloads.graylog.org/releases/graylog-integrations/graylog-integrations-plugins-${version}.tgz";
-      sha256 = "14g6vdyibp3rva8bwss7vjbi9fpxvgp2gbk1r8divbhhpiwsjyxc";
+      sha256 = "0q858ffmkinngyqqsaszcrx93zc4fg43ny0xb7vm0p4wd48hjyqc";
     };
     installPhase = ''
       mkdir -p $out/bin
diff --git a/pkgs/tools/misc/grc/default.nix b/pkgs/tools/misc/grc/default.nix
index 1900764604b..e47ea74bbe9 100644
--- a/pkgs/tools/misc/grc/default.nix
+++ b/pkgs/tools/misc/grc/default.nix
@@ -1,15 +1,15 @@
-{ stdenv, fetchFromGitHub, python3Packages }:
+{ lib, fetchFromGitHub, buildPythonApplication }:
 
-python3Packages.buildPythonApplication rec {
+buildPythonApplication rec {
   pname = "grc";
-  version = "1.11.3";
+  version = "1.12";
   format = "other";
 
   src = fetchFromGitHub {
-    owner  = "garabik";
-    repo   = "grc";
-    rev    = "v${version}";
-    sha256 = "0b3wx9zr7l642hizk93ysbdss7rfymn22b2ykj4kpkf1agjkbv35";
+    owner = "garabik";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-XJj1j6sDt0iL3U6uMbB1j0OfpXRdP+x66gc6sKxrQIA=";
   };
 
   postPatch = ''
@@ -21,23 +21,20 @@ python3Packages.buildPythonApplication rec {
 
   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;
-
+  meta = with lib; {
+    homepage = "http://korpus.juls.savba.sk/~garabik/software/grc.html";
+    description = "A generic text colouriser";
     longDescription = ''
       Generic Colouriser is yet another colouriser (written in Python) for
       beautifying your logfiles or output of commands.
     '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ lovek323 AndersonTorres peterhoeg ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/grex/default.nix b/pkgs/tools/misc/grex/default.nix
new file mode 100644
index 00000000000..4d391b09943
--- /dev/null
+++ b/pkgs/tools/misc/grex/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv
+, fetchFromGitHub
+, fetchpatch
+, rustPlatform
+, Security
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "grex";
+  version = "1.2.0";
+
+  cargoSha256 = "sha256-aEwMJ9f08SJhrL8kLaTp54yP1hYGb3Ob5KNzZ5r752s=";
+
+  src = fetchFromGitHub {
+    owner = "pemistahl";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-3M6wQB7+1MKPcxSvjDTNs33TrFjCEeFlbh1akwJHLLU=";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/grex --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "A command-line tool for generating regular expressions from user-provided test cases";
+    homepage = "https://github.com/pemistahl/grex";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/pkgs/tools/misc/gringo/default.nix b/pkgs/tools/misc/gringo/default.nix
index 05e5e9b64cf..87902de0cb0 100644
--- a/pkgs/tools/misc/gringo/default.nix
+++ b/pkgs/tools/misc/gringo/default.nix
@@ -1,15 +1,11 @@
-{ stdenv, fetchurl,
+{ lib, stdenv, fetchurl,
   bison, re2c, sconsPackages,
   libcxx
 }:
 
-let
-  version = "4.5.4";
-in
-
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "gringo";
-  inherit version;
+  version = "4.5.4";
 
   src = fetchurl {
     url = "mirror://sourceforge/project/potassco/gringo/${version}/gringo-${version}-source.tar.gz";
@@ -23,7 +19,7 @@ stdenv.mkDerivation {
     ./gringo-4.5.4-to_string.patch
   ];
 
-  postPatch = stdenv.lib.optionalString stdenv.isDarwin ''
+  postPatch = lib.optionalString stdenv.isDarwin ''
     substituteInPlace ./SConstruct \
       --replace \
         "env['CXX']            = 'g++'" \
@@ -32,12 +28,12 @@ stdenv.mkDerivation {
     substituteInPlace ./SConstruct \
       --replace \
         "env['CPPPATH']        = []" \
-        "env['CPPPATH']        = ['${libcxx}/include/c++/v1']"
+        "env['CPPPATH']        = ['${lib.getDev libcxx}/include/c++/v1']"
 
     substituteInPlace ./SConstruct \
       --replace \
         "env['LIBPATH']        = []" \
-        "env['LIBPATH']        = ['${libcxx}/lib']"
+        "env['LIBPATH']        = ['${lib.getLib libcxx}/lib']"
   '';
 
   buildPhase = ''
@@ -49,7 +45,7 @@ stdenv.mkDerivation {
     cp build/release/gringo $out/bin/gringo
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Converts input programs with first-order variables to equivalent ground programs";
     homepage = "http://potassco.sourceforge.net/";
     platforms = platforms.all;
diff --git a/pkgs/tools/misc/grit/default.nix b/pkgs/tools/misc/grit/default.nix
new file mode 100644
index 00000000000..a793ed7ebed
--- /dev/null
+++ b/pkgs/tools/misc/grit/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "grit";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "climech";
+    repo = "grit";
+    rev = "v${version}";
+    sha256 = "sha256-c8wBwmXFjpst6UxL5zmTxMR4bhzpHYljQHiJFKiNDms=";
+  };
+
+  vendorSha256 = "sha256-iMMkjJ5dnlr0oSCifBQPWkInQBCp1bh23s+BcKzDNCg=";
+
+  meta = with lib; {
+    description = "A multitree-based personal task manager";
+    homepage = "https://github.com/climech/grit";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.ivar ];
+  };
+}
diff --git a/pkgs/tools/misc/grub/2.0x.nix b/pkgs/tools/misc/grub/2.0x.nix
index 4e00a4ddd49..d9c4ceeca2c 100644
--- a/pkgs/tools/misc/grub/2.0x.nix
+++ b/pkgs/tools/misc/grub/2.0x.nix
@@ -1,13 +1,19 @@
-{ stdenv, fetchgit, flex, bison, python, autoconf, automake, gnulib, libtool
-, gettext, ncurses, libusb-compat-0_1, freetype, qemu, lvm2, unifont, pkgconfig
+{ lib, stdenv, fetchgit, flex, bison, python3, autoconf, automake, gnulib, libtool
+, gettext, ncurses, libusb-compat-0_1, freetype, qemu, lvm2, unifont, pkg-config
+, buildPackages
+, fetchpatch
+, pkgsBuildBuild
+, nixosTests
 , fuse # only needed for grub-mount
+, runtimeShell
 , zfs ? null
 , efiSupport ? false
-, zfsSupport ? true
+, zfsSupport ? false
 , xenSupport ? false
+, kbdcompSupport ? false, ckbcomp
 }:
 
-with stdenv.lib;
+with lib;
 let
   pcSystems = {
     i686-linux.target = "i386";
@@ -17,6 +23,7 @@ let
   efiSystemsBuild = {
     i686-linux.target = "i386";
     x86_64-linux.target = "x86_64";
+    armv7l-linux.target = "arm";
     aarch64-linux.target = "aarch64";
   };
 
@@ -25,13 +32,14 @@ let
   efiSystemsInstall = {
     i686-linux.target = "i386";
     x86_64-linux.target = "x86_64";
+    armv7l-linux.target = "arm";
     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";
+  version = "2.06";
 
 in (
 
@@ -46,18 +54,34 @@ stdenv.mkDerivation rec {
   src = fetchgit {
     url = "git://git.savannah.gnu.org/grub.git";
     rev = "${pname}-${version}";
-    sha256 = "02gly3xw88pj4zzqjniv1fxa1ilknbq1mdk30bj6qy8n44g90i8w";
+    sha256 = "1vkxr6b4p7h259vayjw8bfgqj57x68byy939y4bmyaz6g7fgrv0f";
   };
 
   patches = [
     ./fix-bash-completion.patch
+    (fetchpatch {
+      name = "Add-hidden-menu-entries.patch";
+      # https://lists.gnu.org/archive/html/grub-devel/2016-04/msg00089.html
+      url = "https://marc.info/?l=grub-devel&m=146193404929072&q=mbox";
+      sha256 = "00wa1q5adiass6i0x7p98vynj9vsz1w0gn1g4dgz89v35mpyw2bi";
+    })
   ];
 
-  nativeBuildInputs = [ bison flex python pkgconfig autoconf automake ];
-  buildInputs = [ ncurses libusb-compat-0_1 freetype gettext lvm2 fuse libtool ]
+  postPatch = if kbdcompSupport then ''
+    sed -i util/grub-kbdcomp.in -e 's@\bckbcomp\b@${ckbcomp}/bin/ckbcomp@'
+  '' else ''
+    echo '#! ${runtimeShell}' > util/grub-kbdcomp.in
+    echo 'echo "Compile grub2 with { kbdcompSupport = true; } to enable support for this command."' >> util/grub-kbdcomp.in
+  '';
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ bison flex python3 pkg-config autoconf automake gettext freetype ];
+  buildInputs = [ ncurses libusb-compat-0_1 freetype lvm2 fuse libtool ]
     ++ optional doCheck qemu
     ++ optional zfsSupport zfs;
 
+  strictDeps = true;
+
   hardeningDisable = [ "all" ];
 
   # Work around a bug in the generated flex lexer (upstream flex bug?)
@@ -90,8 +114,20 @@ stdenv.mkDerivation rec {
       substituteInPlace ./configure --replace '/usr/share/fonts/unifont' '${unifont}/share/fonts'
     '';
 
-  configureFlags = [ "--enable-grub-mount" ] # dep of os-prober
-    ++ optional zfsSupport "--enable-libzfs"
+  configureFlags = [
+    "--enable-grub-mount" # dep of os-prober
+  ] ++ optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    # grub doesn't do cross-compilation as usual and tries to use unprefixed
+    # tools to target the host. Provide toolchain information explicitly for
+    # cross builds.
+    #
+    # Ref: # https://github.com/buildroot/buildroot/blob/master/boot/grub2/grub2.mk#L108
+    "TARGET_CC=${stdenv.cc.targetPrefix}cc"
+    "TARGET_NM=${stdenv.cc.targetPrefix}nm"
+    "TARGET_OBJCOPY=${stdenv.cc.targetPrefix}objcopy"
+    "TARGET_RANLIB=${stdenv.cc.targetPrefix}ranlib"
+    "TARGET_STRIP=${stdenv.cc.targetPrefix}strip"
+  ] ++ 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}"];
 
@@ -110,7 +146,15 @@ stdenv.mkDerivation rec {
     sed -i $out/lib/grub/*/modinfo.sh -e "/grub_target_cppflags=/ s|'.*'|' '|"
   '';
 
-  meta = with stdenv.lib; {
+  passthru.tests = {
+    nixos-grub = nixosTests.grub;
+    nixos-install-simple = nixosTests.installer.simple;
+    nixos-install-grub1 = nixosTests.installer.grub1;
+    nixos-install-grub-uefi = nixosTests.installer.simpleUefiGrub;
+    nixos-install-grub-uefi-spec = nixosTests.installer.simpleUefiGrubSpecialisation;
+  };
+
+  meta = with lib; {
     description = "GNU GRUB, the Grand Unified Boot Loader (2.x beta)";
 
     longDescription =
@@ -130,5 +174,7 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3Plus;
 
     platforms = platforms.gnu ++ platforms.linux;
+
+    maintainers = [ maintainers.samueldr ];
   };
 })
diff --git a/pkgs/tools/misc/grub/default.nix b/pkgs/tools/misc/grub/default.nix
index e657431429c..2371bdb0e05 100644
--- a/pkgs/tools/misc/grub/default.nix
+++ b/pkgs/tools/misc/grub/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, autoreconfHook, texinfo, buggyBiosCDSupport ? true }:
+{ lib, stdenv, fetchurl, autoreconfHook, texinfo, buggyBiosCDSupport ? true }:
 
 stdenv.mkDerivation {
   name = "grub-0.97-73";
@@ -14,10 +14,14 @@ stdenv.mkDerivation {
     # grub-install isn't smart enough.
     ./symlink.patch
   ]
-  ++ (stdenv.lib.optional buggyBiosCDSupport ./buggybios.patch)
+  ++ (lib.optional buggyBiosCDSupport ./buggybios.patch)
   ++ map fetchurl (import ./grub1.patches.nix)
   ;
 
+  preConfigure = ''
+    substituteInPlace ./configure.ac --replace 'AC_PREREQ(2.61)' 'AC_PREREQ(2.64)'
+  '';
+
   # autoreconfHook required for the splashimage patch.
   nativeBuildInputs = [ autoreconfHook ];
   buildInputs = [ texinfo ];
@@ -26,7 +30,7 @@ stdenv.mkDerivation {
 
   passthru.grubTarget = "";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.gnu.org/software/grub";
     description = "GRand Unified Bootloader";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/grub/pvgrub_image/default.nix b/pkgs/tools/misc/grub/pvgrub_image/default.nix
index 6b796dedb0a..d6aba812405 100644
--- a/pkgs/tools/misc/grub/pvgrub_image/default.nix
+++ b/pkgs/tools/misc/grub/pvgrub_image/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, grub2_xen }:
+{ lib, stdenv, grub2_xen }:
 
-with stdenv.lib;
+with lib;
 let
   efiSystemsBuild = {
     i686-linux.target = "i386";
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
     cp "grub-${efiSystemsBuild.${stdenv.hostPlatform.system}.target}-xen.bin" $out/lib/grub-xen/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "PvGrub image for use for booting PV Xen guests";
 
     longDescription =
diff --git a/pkgs/tools/misc/grub/trusted.nix b/pkgs/tools/misc/grub/trusted.nix
index f14758a3ae7..b0a8c9e1033 100644
--- a/pkgs/tools/misc/grub/trusted.nix
+++ b/pkgs/tools/misc/grub/trusted.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchurl, fetchgit, autogen, flex, bison, python, autoconf, automake
+{ lib, stdenv, fetchurl, fetchgit, autogen, flex, bison, python, autoconf, automake
 , gettext, ncurses, libusb-compat-0_1, freetype, qemu, lvm2
 , for_HP_laptop ? false
 }:
 
-with stdenv.lib;
+with lib;
 let
   pcSystems = {
     i686-linux.target = "i386";
@@ -91,7 +91,7 @@ stdenv.mkDerivation rec {
   doCheck = false;
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/misc/grub4dos/default.nix b/pkgs/tools/misc/grub4dos/default.nix
index 24548b4d209..6ffddd4f98a 100644
--- a/pkgs/tools/misc/grub4dos/default.nix
+++ b/pkgs/tools/misc/grub4dos/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, nasm }:
+{ lib, stdenv, fetchFromGitHub, nasm }:
 
 let arch =
   if stdenv.isi686 then "i386"
@@ -33,7 +33,7 @@ in stdenv.mkDerivation {
   # make[2]: *** No rule to make target 'pre_stage2_fullsize', needed by 'all-am'.  Stop.
   enableParallelBuilding = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://grub4dos.chenall.net/";
     description = "GRUB for DOS is the dos extension of GRUB";
     maintainers = with maintainers; [ abbradar ];
diff --git a/pkgs/tools/misc/gsmartcontrol/default.nix b/pkgs/tools/misc/gsmartcontrol/default.nix
index 2e85448bde8..e52ae44a83f 100644
--- a/pkgs/tools/misc/gsmartcontrol/default.nix
+++ b/pkgs/tools/misc/gsmartcontrol/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, smartmontools, autoreconfHook, gettext, gtkmm3, pkgconfig, wrapGAppsHook, pcre-cpp, gnome3 }:
+{ fetchurl, lib, stdenv, smartmontools, autoreconfHook, gettext, gtkmm3, pkg-config, wrapGAppsHook, pcre-cpp, gnome }:
 
 stdenv.mkDerivation rec {
   version="1.1.3";
@@ -13,14 +13,14 @@ stdenv.mkDerivation rec {
     ./fix-paths.patch
   ];
 
-  nativeBuildInputs = [ autoreconfHook gettext pkgconfig wrapGAppsHook ];
-  buildInputs = [ gtkmm3 pcre-cpp gnome3.adwaita-icon-theme ];
+  nativeBuildInputs = [ autoreconfHook gettext pkg-config wrapGAppsHook ];
+  buildInputs = [ gtkmm3 pcre-cpp gnome.adwaita-icon-theme ];
 
   enableParallelBuilding = true;
 
   preFixup = ''
     gappsWrapperArgs+=(
-      --prefix PATH : "${stdenv.lib.makeBinPath [ smartmontools ]}"
+      --prefix PATH : "${lib.makeBinPath [ smartmontools ]}"
     )
   '';
 
@@ -36,8 +36,8 @@ stdenv.mkDerivation rec {
       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;
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [qknight];
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/misc/gti/default.nix b/pkgs/tools/misc/gti/default.nix
index 9c2e65676c2..e950d58fc76 100644
--- a/pkgs/tools/misc/gti/default.nix
+++ b/pkgs/tools/misc/gti/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "gti";
@@ -11,14 +11,18 @@ stdenv.mkDerivation rec {
     sha256 = "1jivnjswlhwjfg5v9nwfg3vfssvqbdxxf9znwmfb5dgfblg9wxw9";
   };
 
+  postPatch = ''
+    substituteInPlace Makefile --replace 'CC=cc' 'CC=${stdenv.cc.targetPrefix}cc'
+  '';
+
   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";
+  meta = with lib; {
+    homepage = "https://r-wos.org/hacks/gti";
     license = licenses.mit;
     description = "Humorous typo-based git runner; drives a car over the terminal";
     maintainers = with maintainers; [ fadenb ];
diff --git a/pkgs/tools/misc/gtklp/default.nix b/pkgs/tools/misc/gtklp/default.nix
new file mode 100644
index 00000000000..43f67b6b795
--- /dev/null
+++ b/pkgs/tools/misc/gtklp/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, lib, fetchurl
+, autoreconfHook, libtool, pkg-config
+, gtk2, glib, cups, gettext, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gtklp";
+  version = "1.3.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.src.tar.gz";
+    sha256 = "1arvnnvar22ipgnzqqq8xh0kkwyf71q2sfsf0crajpsr8a8601xy";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    autoreconfHook
+  ];
+
+  buildInputs = [
+    cups
+    gettext
+    glib
+    gtk2
+    libtool
+    openssl
+  ];
+
+  patches = [
+    ./patches/mdv-fix-str-fmt.patch
+    ./patches/autoconf.patch
+  ];
+
+  preConfigure = ''
+    substituteInPlace include/defaults.h --replace "netscape" "firefox"
+    substituteInPlace include/defaults.h --replace "http://localhost:631/sum.html#STANDARD_OPTIONS" \
+                                                   "http://localhost:631/help/"
+  '';
+
+  preInstall = ''
+    install -D -m0644 -t $out/share/doc AUTHORS BUGS ChangeLog README USAGE
+  '';
+
+  meta = with lib; {
+    description = "A graphical frontend for CUPS";
+    homepage = "https://gtklp.sirtobi.com";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ caadar ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/pkgs/tools/misc/gtklp/patches/autoconf.patch b/pkgs/tools/misc/gtklp/patches/autoconf.patch
new file mode 100644
index 00000000000..c1698bee1fd
--- /dev/null
+++ b/pkgs/tools/misc/gtklp/patches/autoconf.patch
@@ -0,0 +1,23 @@
+Patch origin: http://sophie.zarb.org/rpms/68e90a72e0052022f558148d97c9ea2a/files/3
+
+diff --git a/configure.ac b/configure.ac
+index b7a30e9..3768ae9 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -8,6 +8,7 @@ AC_CONFIG_HEADERS([config.h])
+ 
+ AC_CONFIG_MACRO_DIR([m4])
+ AM_GNU_GETTEXT([external])
++AM_GNU_GETTEXT_REQUIRE_VERSION([0.21])
+ 
+ dnl Extra params
+ CUPSCONFIGPATH=""
+@@ -30,8 +31,6 @@ AC_SUBST(XLIBS)
+ 
+ dnl Checks for header files
+ 
+-dnl internationalization macros
+-AM_GNU_GETTEXT
+ 
+ 
+ # Forte Compiler ############################################################
diff --git a/pkgs/tools/misc/gtklp/patches/mdv-fix-str-fmt.patch b/pkgs/tools/misc/gtklp/patches/mdv-fix-str-fmt.patch
new file mode 100644
index 00000000000..6cfc90beb02
--- /dev/null
+++ b/pkgs/tools/misc/gtklp/patches/mdv-fix-str-fmt.patch
@@ -0,0 +1,22 @@
+Patch source: http://sophie.zarb.org/rpms/68e90a72e0052022f558148d97c9ea2a/files/1
+
+--- a/libgtklp/libgtklp.c	2020-08-25 17:31:52.427298559 +0100
++++ b/libgtklp/libgtklp.c	2020-08-25 17:36:37.728154682 +0100
+@@ -939,7 +939,7 @@
+ 		gtk_widget_show(pixmapwid);
+ 
+ 		if (strlen(gerror2) == 0)
+-			snprintf(tmplabel, (size_t) MAXLINE, gerror1);
++			snprintf(tmplabel, (size_t) MAXLINE, "%s", gerror1);
+ 		else
+ 			snprintf(tmplabel, (size_t) MAXLINE, gerror1, gerror2);
+ 		label = gtk_label_new(tmplabel);
+@@ -973,7 +973,7 @@
+ #endif
+ 	} else {
+ 		if (strlen(gerror2) == 0)
+-			g_warning(gerror1);
++			g_warning("%s", gerror1);
+ 		else
+ 			g_warning(gerror1, gerror2);
+ 	}
diff --git a/pkgs/tools/misc/gwe/default.nix b/pkgs/tools/misc/gwe/default.nix
new file mode 100644
index 00000000000..2eeb2f0d2c5
--- /dev/null
+++ b/pkgs/tools/misc/gwe/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, wrapGAppsHook
+, makeWrapper
+, pkg-config
+, meson
+, ninja
+, cmake
+, gobject-introspection
+, desktop-file-utils
+, python3
+, gtk3
+, libdazzle
+, libappindicator-gtk3
+, libnotify
+, nvidia_x11
+ }:
+
+let
+ pythonEnv = python3.withPackages (pypkgs: with pypkgs; [
+   injector
+   matplotlib
+   peewee
+   pynvml
+   pygobject3
+   xlib
+   pyxdg
+   requests
+   rx
+   gtk3
+ ]);
+in stdenv.mkDerivation rec {
+  pname = "gwe";
+  version = "0.15.3";
+
+  src = fetchFromGitLab {
+    owner = "leinardi";
+    repo = pname;
+    rev = version;
+    sha256 = "1znd2g02j0klg8w6cgwvaxc8anan6sidadknl0vh9jxmzz75xp9z";
+  };
+
+  prePatch = ''
+    patchShebangs scripts/{make_local_manifest,meson_post_install}.py
+
+    substituteInPlace gwe/repository/nvidia_repository.py \
+      --replace "from py3nvml import py3nvml" "import pynvml" \
+      --replace "py3nvml.py3nvml" "pynvml" \
+      --replace "py3nvml" "pynvml"
+  '';
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    pkg-config
+    meson
+    ninja
+    cmake
+    gobject-introspection
+    desktop-file-utils
+    pythonEnv
+  ];
+
+  buildInputs = [
+    gtk3
+    libdazzle
+    libappindicator-gtk3
+    libnotify
+  ];
+
+  postInstall = ''
+    mv $out/bin/gwe $out/lib/gwe-bin
+
+    makeWrapper ${pythonEnv}/bin/python $out/bin/gwe \
+      --add-flags "$out/lib/gwe-bin" \
+      --prefix LD_LIBRARY_PATH : "/run/opengl-driver/lib" \
+      --prefix PATH : "${builtins.concatStringsSep ":" [ (lib.makeBinPath [ nvidia_x11 nvidia_x11.settings ]) "/run/wrappers/bin" ]}" \
+      --unset "SHELL" \
+      ''${gappsWrapperArgs[@]}
+  '';
+
+  meta = with lib; {
+    description = "System utility designed to provide information, control the fans and overclock your NVIDIA card";
+    homepage = "https://gitlab.com/leinardi/gwe";
+    platforms = platforms.linux;
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.ivar ];
+  };
+}
diff --git a/pkgs/tools/misc/h/default.nix b/pkgs/tools/misc/h/default.nix
index 9a80945097b..3f5878472a7 100644
--- a/pkgs/tools/misc/h/default.nix
+++ b/pkgs/tools/misc/h/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, makeWrapper, ruby }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper, ruby }:
 
 stdenv.mkDerivation rec {
   pname = "h";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
     cp up $out/bin/up
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "faster shell navigation of projects";
     homepage = "https://github.com/zimbatm/h";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/hackertyper/default.nix b/pkgs/tools/misc/hackertyper/default.nix
index 4b5973e7eec..d72dd1798d5 100644
--- a/pkgs/tools/misc/hackertyper/default.nix
+++ b/pkgs/tools/misc/hackertyper/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, ncurses }:
+{ lib, stdenv, fetchFromGitHub, ncurses }:
 
 stdenv.mkDerivation {
   pname = "hackertyper";
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
     $out/bin/hackertyper -v
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A C rewrite of hackertyper.net";
     homepage = "https://github.com/Hurricane996/Hackertyper";
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/hacksaw/default.nix b/pkgs/tools/misc/hacksaw/default.nix
new file mode 100644
index 00000000000..6eecee46a38
--- /dev/null
+++ b/pkgs/tools/misc/hacksaw/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchCrate, rustPlatform, pkg-config, libXrandr, libX11, python3 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hacksaw";
+  version = "1.0.4";
+
+  nativeBuildInputs = [ pkg-config python3 ];
+
+  buildInputs = [ libXrandr libX11 ];
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "1l6i91xb81p1li1j2jm0r2rx8dbzl2yh468cl3dw0lqpqy4i65hx";
+  };
+
+  cargoSha256 = "1rykc06lq3bkblsrj68rbil63yqdnvxkxlppq1w74wf0d6cwjc08";
+
+  meta = with lib; {
+    description = "Lightweight selection tool for usage in screenshot scripts etc";
+    homepage = "https://github.com/neXromancers/hacksaw";
+    license = with licenses; [ mpl20 ];
+    maintainers = with maintainers; [ TethysSvensson ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/hakuneko/default.nix b/pkgs/tools/misc/hakuneko/default.nix
index 34405ccc7be..0a1d070d77e 100644
--- a/pkgs/tools/misc/hakuneko/default.nix
+++ b/pkgs/tools/misc/hakuneko/default.nix
@@ -6,6 +6,7 @@
 , makeWrapper
 , udev
 , stdenv
+, lib
 , wrapGAppsHook
 }:
 let
@@ -61,7 +62,7 @@ stdenv.mkDerivation rec {
   '';
 
   runtimeDependencies = [
-    udev.lib
+    (lib.getLib udev)
   ];
 
   postFixup = ''
@@ -69,7 +70,7 @@ stdenv.mkDerivation rec {
       "''${gappsWrapperArgs[@]}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Manga & Anime Downloader";
     homepage = "https://sourceforge.net/projects/hakuneko/";
     license = licenses.unlicense;
diff --git a/pkgs/tools/misc/handlr/default.nix b/pkgs/tools/misc/handlr/default.nix
new file mode 100644
index 00000000000..e9cd89c5f2d
--- /dev/null
+++ b/pkgs/tools/misc/handlr/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, shared-mime-info, libiconv, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "handlr";
+  version = "0.6.4";
+
+  src = fetchFromGitHub {
+    owner = "chmln";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-UYcJtBwbUDqDiRoj5PmO+urURfd7S7fSx2XhQRBrKTE=";
+  };
+
+  cargoSha256 = "sha256-xDQV8wVlzItz0lzR1nVRPVsg7nSf/khUhevDlGgSO3g=";
+
+  nativeBuildInputs = [ installShellFiles shared-mime-info ];
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  preCheck = ''
+    export HOME=$TEMPDIR
+  '';
+
+  postInstall = ''
+    installShellCompletion \
+      --zsh  completions/_handlr \
+      --fish completions/handlr.fish
+  '';
+
+  meta = with lib; {
+    description = "Alternative to xdg-open to manage default applications with ease";
+    homepage = "https://github.com/chmln/handlr";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mredaelli ];
+  };
+}
diff --git a/pkgs/tools/misc/hashit/default.nix b/pkgs/tools/misc/hashit/default.nix
index e33201c706b..edda48bdc92 100644
--- a/pkgs/tools/misc/hashit/default.nix
+++ b/pkgs/tools/misc/hashit/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, nix-update-script, meson, ninja, pkgconfig, vala, pantheon, python3, libgee, gtk3, desktop-file-utils, wrapGAppsHook }:
+{ lib, stdenv, fetchFromGitHub, nix-update-script, meson, ninja, pkg-config, vala, pantheon, python3, libgee, gtk3, desktop-file-utils, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
   pname = "hashit";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
     meson
     ninja
     vala
-    pkgconfig
+    pkg-config
     python3
     wrapGAppsHook
   ];
@@ -39,7 +39,7 @@ stdenv.mkDerivation rec {
     };
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A simple app for checking usual checksums - Designed for elementary OS";
     homepage = "https://github.com/artemanufrij/hashit";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/text/kramdown-rfc2629/Gemfile b/pkgs/tools/misc/haste-client/Gemfile
index 9b3347860b6..06dd69c0179 100644
--- a/pkgs/tools/text/kramdown-rfc2629/Gemfile
+++ b/pkgs/tools/misc/haste-client/Gemfile
@@ -1,2 +1,2 @@
 source 'https://rubygems.org'
-gem 'kramdown-rfc2629'
+gem 'haste'
diff --git a/pkgs/tools/misc/haste-client/Gemfile.lock b/pkgs/tools/misc/haste-client/Gemfile.lock
new file mode 100644
index 00000000000..3f395ed9ef8
--- /dev/null
+++ b/pkgs/tools/misc/haste-client/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    faraday (0.17.3)
+      multipart-post (>= 1.2, < 3)
+    haste (0.2.3)
+      faraday (~> 0.9)
+      json
+    json (2.5.1)
+    multipart-post (2.1.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  haste
+
+BUNDLED WITH
+   2.1.4
diff --git a/pkgs/tools/misc/haste-client/default.nix b/pkgs/tools/misc/haste-client/default.nix
new file mode 100644
index 00000000000..0005e94fe05
--- /dev/null
+++ b/pkgs/tools/misc/haste-client/default.nix
@@ -0,0 +1,19 @@
+{ lib
+, bundlerApp
+, buildRubyGem
+, ruby
+}:
+
+bundlerApp rec {
+  pname = "haste";
+  gemdir = ./.;
+  exes = [ "haste" ];
+
+  meta = with lib; {
+    description = "Command line interface to the AnyStyle Parser and Finder";
+    homepage    = "https://rubygems.org/gems/haste";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ shamilton ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/haste-client/gemset.nix b/pkgs/tools/misc/haste-client/gemset.nix
new file mode 100644
index 00000000000..e6cbbff11aa
--- /dev/null
+++ b/pkgs/tools/misc/haste-client/gemset.nix
@@ -0,0 +1,491 @@
+{
+  faraday = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13aghksmni2sl15y7wfpx6k5l3lfd8j9gdyqi6cbw6jgc7bqyyn2";
+      type = "gem";
+    };
+    version = "0.17.3";
+  };
+  haste = {
+    dependencies = ["faraday" "json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jaq0kvlxwvd0jq9pl707saqnaaal3dis13mqwfjbj121gr4hq4q";
+      type = "gem";
+    };
+    version = "0.2.3";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lrirj0gw420kw71bjjlqkqhqbrplla61gbv1jzgsz6bv90qr3ci";
+      type = "gem";
+    };
+    version = "2.5.1";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zgw9zlwh2a6i1yvhhc4a84ry1hv824d6g2iw2chs3k5aylpmpfj";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+}
diff --git a/pkgs/tools/misc/hdaps-gl/default.nix b/pkgs/tools/misc/hdaps-gl/default.nix
index 79f4d067b10..8ea863f4641 100644
--- a/pkgs/tools/misc/hdaps-gl/default.nix
+++ b/pkgs/tools/misc/hdaps-gl/default.nix
@@ -1,24 +1,23 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, freeglut, libGL, libGLU }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, freeglut, libGL, libGLU }:
 
-let version = "0.0.7"; in
-stdenv.mkDerivation {
-      pname = "hdaps-gl";
-      inherit version;
-      src = fetchFromGitHub {
-            owner = "linux-thinkpad";
-            repo = "hdaps-gl";
-            rev = version;
-            sha256 = "0jywsrcr1wzkjig5cvz014c3r026sbwscbkv7zh1014lkjm0kyyh";
-      };
+stdenv.mkDerivation rec {
+  pname = "hdaps-gl";
+  version = "0.0.7";
+  src = fetchFromGitHub {
+    owner = "linux-thinkpad";
+    repo = "hdaps-gl";
+    rev = version;
+    sha256 = "0jywsrcr1wzkjig5cvz014c3r026sbwscbkv7zh1014lkjm0kyyh";
+  };
 
-      nativeBuildInputs = [ autoreconfHook ];
-      buildInputs = [ freeglut libGL libGLU ];
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ freeglut libGL libGLU ];
 
-      meta = with stdenv.lib; {
-            description = "GL-based laptop model that rotates in real-time via hdaps";
-            homepage = "https://github.com/linux-thinkpad/hdaps-gl";
-            license = licenses.gpl2;
-            platforms = platforms.linux;
-            maintainers = [ maintainers.symphorien ];
-      };
+  meta = with lib; {
+    description = "GL-based laptop model that rotates in real-time via hdaps";
+    homepage = "https://github.com/linux-thinkpad/hdaps-gl";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.symphorien ];
+  };
 }
diff --git a/pkgs/tools/misc/hddtemp/default.nix b/pkgs/tools/misc/hddtemp/default.nix
index 1f3fbd2381f..3939d60144d 100644
--- a/pkgs/tools/misc/hddtemp/default.nix
+++ b/pkgs/tools/misc/hddtemp/default.nix
@@ -1,32 +1,38 @@
-{ stdenv, fetchurl }:
-
-stdenv.mkDerivation {
-  name = "hddtemp-0.3_beta15";
-
-  db = fetchurl{
+{ lib, stdenv, fetchurl }:
+let
+  db = fetchurl {
     url = "mirror://savannah/hddtemp/hddtemp.db";
     sha256 = "1fr6qgns6qv7cr40lic5yqwkkc7yjmmgx8j0z6d93csg3smzhhya";
   };
 
+in
+stdenv.mkDerivation rec {
+  pname = "hddtemp";
+  version = "0.3-beta15";
+
   src = fetchurl {
-    url = "mirror://savannah/hddtemp/hddtemp-0.3-beta15.tar.bz2";
-    sha256 = "0nzgg4nl8zm9023wp4dg007z6x3ir60rwbcapr9ks2al81c431b1";
+    url = "mirror://savannah/hddtemp/hddtemp-${version}.tar.bz2";
+    sha256 = "sha256-YYVBWEBUCT1TvootnoHJcXTzDwCvkcuHAKl+RC1571s=";
   };
 
   # 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
-    '';
+  configureFlags = [
+    "--with-db-path=${placeholder "out"}/share/${pname}/hddtemp.db"
+  ];
+
+  postInstall = ''
+    install -Dm444 ${db} $out/share/${pname}/hddtemp.db
+  '';
+
+  enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tool for displaying hard disk temperature";
     homepage = "https://savannah.nongnu.org/projects/hddtemp/";
     license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ peterhoeg ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/hdf4/darwin-aarch64.patch b/pkgs/tools/misc/hdf4/darwin-aarch64.patch
new file mode 100644
index 00000000000..cff81e58117
--- /dev/null
+++ b/pkgs/tools/misc/hdf4/darwin-aarch64.patch
@@ -0,0 +1,11 @@
+--- a/hdf/src/hdfi.h	2021-06-16 16:31:31.000000000 +1200
++++ b/hdf/src/hdfi.h	2021-06-16 16:42:26.000000000 +1200
+@@ -1343,7 +1343,7 @@
+ #endif /* IA64 */
+ 
+ /* Linux AArch64 */
+-#if defined __aarch64__
++#if defined __aarch64__ && !defined __APPLE__
+ 
+ #ifdef GOT_MACHINE
+ If you get an error on this line more than one machine type has been defined.
diff --git a/pkgs/tools/misc/hdf4/default.nix b/pkgs/tools/misc/hdf4/default.nix
index d5b8291d78e..99acda6b788 100644
--- a/pkgs/tools/misc/hdf4/default.nix
+++ b/pkgs/tools/misc/hdf4/default.nix
@@ -1,44 +1,74 @@
-{ stdenv
+{ lib, stdenv
 , fetchpatch
 , fetchurl
+, fixDarwinDylibNames
 , cmake
 , libjpeg
+, uselibtirpc ? stdenv.isLinux
+, libtirpc
 , zlib
 , szip ? null
+, javaSupport ? false
+, jdk
 }:
-
+let
+  javabase = "${jdk}/jre/lib/${jdk.architecture}";
+in
 stdenv.mkDerivation rec {
   pname = "hdf";
-  version = "4.2.14";
+  version = "4.2.15";
   src = fetchurl {
     url = "https://support.hdfgroup.org/ftp/HDF/releases/HDF${version}/src/hdf-${version}.tar.bz2";
-    sha256 = "0n29klrrbwan9307np0d9hr128dlpc4nnlf57a140080ll3jmp8l";
+    sha256 = "04nbgfxyj5jg4d6sr28162cxbfwqgv0sa7vz1ayzvm8wbbpkbq5x";
   };
 
-  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}";
-    };
+  patches = [
+    # Note that the PPC, SPARC and s390 patches are only needed so the aarch64 patch applies cleanly
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/hdf/raw/edbe5f49646b609f5bc9aeeee5a2be47e9556e8c/f/hdf-ppc.patch";
+      sha256 = "0dbbfpsvvqzy9zyfv38gd81zzc44gxjib9sd8scxqnkkqprj6jq0";
+    })
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/hdf/raw/edbe5f49646b609f5bc9aeeee5a2be47e9556e8c/f/hdf-4.2.4-sparc.patch";
+      sha256 = "0ip4prcjpa404clm87ib7l71605mws54x9492n9pbz5yb51r9aqh";
+    })
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/hdf/raw/edbe5f49646b609f5bc9aeeee5a2be47e9556e8c/f/hdf-s390.patch";
+      sha256 = "0aiqbr4s1l19y3r3y4wjd5fkv9cfc8rlr4apbh1p0d57wyvqa7i3";
+    })
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/hdf/raw/edbe5f49646b609f5bc9aeeee5a2be47e9556e8c/f/hdf-arm.patch";
+      sha256 = "157k1avvkpf3x89m1fv4a1kgab6k3jv74rskazrmjivgzav4qaw3";
+    })
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/hdf/raw/edbe5f49646b609f5bc9aeeee5a2be47e9556e8c/f/hdf-aarch64.patch";
+      sha256 = "112svcsilk16ybbsi8ywnxfl2p1v44zh3rfn4ijnl8z08vfqrvvs";
+    })
+    ./darwin-aarch64.patch
+  ];
 
-  in [
-    (getPatch "64bit"                     "1xqk9zpch4m6ipa0f3x2cm8rwaz4p0ppp1vqglvz18j6q91p8b5y")
-    (getPatch "hdfi.h"                    "01fr9csylnvk9jd9jn9y23bvxy192s07p32pr76mm3gwhgs9h7r4")
-    (getPatch "hdf-4.2.10-aarch64.patch"  "1hl0xw5pd9xhpq49xpwgg7c4z6vv5p19x6qayixw0myvgwj1r4zn")
-    (getPatch "reproducible-builds.patch" "02j639w26xkxpxx3pdhbi18ywz8w3qmjpqjb83n47gq29y4g13hc")
+  nativeBuildInputs = [
+    cmake
+  ] ++ lib.optionals stdenv.isDarwin [
+    fixDarwinDylibNames
   ];
 
   buildInputs = [
-    cmake
     libjpeg
     szip
     zlib
-  ];
+  ]
+  ++ lib.optional javaSupport jdk
+  ++ lib.optional uselibtirpc libtirpc;
 
-  preConfigure = stdenv.lib.optionalString (szip != null) "export SZIP_INSTALL=${szip}";
+  preConfigure = lib.optionalString uselibtirpc ''
+    # Make tirpc discovery work with CMAKE_PREFIX_PATH
+    substituteInPlace config/cmake/FindXDR.cmake \
+      --replace 'find_path(XDR_INCLUDE_DIR NAMES rpc/types.h PATHS "/usr/include" "/usr/include/tirpc")' \
+                'find_path(XDR_INCLUDE_DIR NAMES rpc/types.h PATH_SUFFIXES include/tirpc)'
+  '' + lib.optionalString (szip != null) ''
+    export SZIP_INSTALL=${szip}
+  '';
 
   cmakeFlags = [
     "-DBUILD_SHARED_LIBS=ON"
@@ -50,7 +80,12 @@ stdenv.mkDerivation rec {
     "-DHDF4_ENABLE_Z_LIB_SUPPORT=ON"
     "-DHDF4_BUILD_FORTRAN=OFF"
     "-DJPEG_DIR=${libjpeg}"
-  ] ++ stdenv.lib.optionals (szip != null) [
+  ] ++ lib.optionals javaSupport [
+    "-DHDF4_BUILD_JAVA=ON"
+    "-DJAVA_HOME=${jdk}"
+    "-DJAVA_AWT_LIBRARY=${javabase}/libawt.so"
+    "-DJAVA_JVM_LIBRARY=${javabase}/server/libjvm.so"
+  ] ++ lib.optionals (szip != null) [
     "-DHDF4_ENABLE_SZIP_ENCODING=ON"
     "-DHDF4_ENABLE_SZIP_SUPPORT=ON"
   ];
@@ -59,11 +94,11 @@ stdenv.mkDerivation rec {
 
   preCheck = ''
     export LD_LIBRARY_PATH=$(pwd)/bin
-  '' + stdenv.lib.optionalString (stdenv.isDarwin) ''
+  '' + lib.optionalString (stdenv.isDarwin) ''
     export DYLD_LIBRARY_PATH=$(pwd)/bin
   '';
 
-  excludedTests = stdenv.lib.optionals stdenv.isDarwin [
+  excludedTests = lib.optionals stdenv.isDarwin [
     "MFHDF_TEST-hdftest"
     "MFHDF_TEST-hdftest-shared"
     "HDP-dumpsds-18"
@@ -71,7 +106,7 @@ stdenv.mkDerivation rec {
   ];
 
   checkPhase = let excludedTestsRegex = if (excludedTests != [])
-    then "(" + (stdenv.lib.concatStringsSep "|" excludedTests) + ")"
+    then "(" + (lib.concatStringsSep "|" excludedTests) + ")"
     else ""; in ''
     runHook preCheck
     ctest -E "${excludedTestsRegex}" --output-on-failure
@@ -84,7 +119,7 @@ stdenv.mkDerivation rec {
     moveToOutput bin "$bin"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Data model, library, and file format for storing and managing data";
     homepage = "https://support.hdfgroup.org/products/hdf4/";
     maintainers = with maintainers; [ knedlsepp ];
diff --git a/pkgs/tools/misc/hdf5/1.10.nix b/pkgs/tools/misc/hdf5/1.10.nix
new file mode 100644
index 00000000000..4e57a1c8e48
--- /dev/null
+++ b/pkgs/tools/misc/hdf5/1.10.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv
+, fetchurl
+, removeReferencesTo
+, zlib ? null
+, enableShared ? !stdenv.hostPlatform.isStatic
+, javaSupport ? false
+, jdk
+}:
+
+let inherit (lib) optional optionals; in
+
+stdenv.mkDerivation rec {
+  # pinned to 1.10.6 for pythonPackages.tables v3.6.1. tables has test errors for hdf5 > 1.10.6. https://github.com/PyTables/PyTables/issues/845
+  version = "1.10.6";
+  pname = "hdf5";
+  src = fetchurl {
+    url = "https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-${lib.versions.majorMinor version}/${pname}-${version}/src/${pname}-${version}.tar.bz2";
+    sha256 = "1gf38x51128hn00744358w27xgzjk0ff4wra4yxh2lk804ck1mh9";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  buildInputs = optional javaSupport jdk;
+
+  nativeBuildInputs = [ removeReferencesTo ];
+
+  propagatedBuildInputs = optional (zlib != null) zlib;
+
+  configureFlags = []
+    ++ optional enableShared "--enable-shared"
+    ++ optional javaSupport "--enable-java";
+
+  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 = lib.licenses.bsd3; # Lawrence Berkeley National Labs BSD 3-Clause variant
+    homepage = "https://www.hdfgroup.org/HDF5/";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/hdf5/1_8.nix b/pkgs/tools/misc/hdf5/1_8.nix
deleted file mode 100644
index 849fa6b9ac3..00000000000
--- a/pkgs/tools/misc/hdf5/1_8.nix
+++ /dev/null
@@ -1,75 +0,0 @@
-{ 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/pkgs/tools/misc/hdf5/default.nix b/pkgs/tools/misc/hdf5/default.nix
index e56108767ab..37ebbe630ca 100644
--- a/pkgs/tools/misc/hdf5/default.nix
+++ b/pkgs/tools/misc/hdf5/default.nix
@@ -1,30 +1,34 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , removeReferencesTo
 , cpp ? false
 , gfortran ? null
 , zlib ? null
 , szip ? null
-, mpi ? null
-, enableShared ? true
+, mpiSupport ? false
+, mpi
+, enableShared ? !stdenv.hostPlatform.isStatic
+, javaSupport ? false
+, jdk
+, usev110Api ? false
 }:
 
 # cpp and mpi options are mutually exclusive
 # (--enable-unsupported could be used to force the build)
-assert !cpp || mpi == null;
+assert !cpp || !mpiSupport;
 
-let inherit (stdenv.lib) optional optionals; in
+let inherit (lib) optional optionals; in
 
 stdenv.mkDerivation rec {
-  version = "1.10.6";
+  version = "1.12.0";
   pname = "hdf5";
   src = fetchurl {
-    url = "https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/${pname}-${version}/src/${pname}-${version}.tar.bz2";
-    sha256 = "1gf38x51128hn00744358w27xgzjk0ff4wra4yxh2lk804ck1mh9";
+    url = "https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-${lib.versions.majorMinor version}/${pname}-${version}/src/${pname}-${version}.tar.bz2";
+    sha256 = "0qazfslkqbmzg495jafpvqp0khws3jkxa0z7rph9qvhacil6544p";
   };
 
   passthru = {
-    mpiSupport = (mpi != null);
+    inherit mpiSupport;
     inherit mpi;
   };
 
@@ -34,18 +38,21 @@ stdenv.mkDerivation rec {
 
   buildInputs = []
     ++ optional (gfortran != null) gfortran
-    ++ optional (szip != null) szip;
+    ++ optional (szip != null) szip
+    ++ optional javaSupport jdk;
 
   propagatedBuildInputs = []
     ++ optional (zlib != null) zlib
-    ++ optional (mpi != null) mpi;
+    ++ optional mpiSupport 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";
+    ++ optionals mpiSupport ["--enable-parallel" "CC=${mpi}/bin/mpicc"]
+    ++ optional enableShared "--enable-shared"
+    ++ optional javaSupport "--enable-java"
+    ++ optional usev110Api "--with-default-api-version=v110";
 
   patches = [
     ./bin-mv.patch
@@ -67,8 +74,8 @@ stdenv.mkDerivation rec {
       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
+    license = lib.licenses.bsd3; # Lawrence Berkeley National Labs BSD 3-Clause variant
     homepage = "https://www.hdfgroup.org/HDF5/";
-    platforms = stdenv.lib.platforms.unix;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/hdfjava/default.nix b/pkgs/tools/misc/hdfjava/default.nix
deleted file mode 100644
index 7ee84399831..00000000000
--- a/pkgs/tools/misc/hdfjava/default.nix
+++ /dev/null
@@ -1,27 +0,0 @@
-{ 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/pkgs/tools/misc/hdfview/default.nix b/pkgs/tools/misc/hdfview/default.nix
index 0125bfa7369..8537e5748c3 100644
--- a/pkgs/tools/misc/hdfview/default.nix
+++ b/pkgs/tools/misc/hdfview/default.nix
@@ -1,39 +1,58 @@
-{ stdenv, fetchurl, ant, javac, hdf_java }:
+{ lib, stdenv, fetchurl, ant, jdk, nettools, hdf4, hdf5, makeDesktopItem, copyDesktopItems }:
 
 stdenv.mkDerivation rec {
   pname = "hdfview";
-  version = "2.14";
+  version = "3.1.2";
 
   src = fetchurl {
-    url = "https://support.hdfgroup.org/ftp/HDF5/hdf-java/current/src/${pname}-${version}.tar.gz";
-    sha256 = "0lv9djfm7hnp14mcyzbiax3xjb8vkbzhh7bdl6cvgy53pc08784p";
+    url = "https://support.hdfgroup.org/ftp/HDF5/releases/HDF-JAVA/${pname}-${version}/src/${pname}-${version}.tar.gz";
+    sha256 = "0kyw9i3f817z71l0ak7shl0wqxasz9h5fl05mklyapa7cj27637c";
   };
 
-  nativeBuildInputs = [ ant javac ];
+  nativeBuildInputs = [
+    ant jdk
+    nettools  # "hostname" required
+    copyDesktopItems
+  ];
 
-  HDFLIBS = hdf_java;
+  HDFLIBS = (hdf4.override { javaSupport = true; }).out;
+  HDF5LIBS = (hdf5.override { javaSupport = true; }).out;
 
   buildPhase = ''
-    ant run
-    ant package
+    runHook preBuild
+
+    ant createJPackage
+
+    runHook postBuild
   '';
 
+  desktopItem = makeDesktopItem rec {
+    name = "HDFView";
+    desktopName = name;
+    exec = name;
+    icon = name;
+    comment = meta.description;
+    categories = "Science;DataVisualization;";
+  };
+
   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"
+    runHook preInstall
+
+    mkdir -p $out/bin $out/lib
+    cp -a build/dist/HDFView/bin/HDFView $out/bin/
+    cp -a build/dist/HDFView/lib/app $out/lib/
+    ln -s ${jdk}/lib/openjdk $out/lib/runtime
+
+    mkdir -p $out/share/applications $out/share/icons/hicolor/32x32/apps
+    cp src/HDFView.png $out/share/icons/hicolor/32x32/apps/
+
+    runHook postInstall
   '';
 
   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;
+    license = lib.licenses.free; # BSD-like
+    homepage = "https://portal.hdfgroup.org/display/HDFVIEW/HDFView";
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/hdl-dump/default.nix b/pkgs/tools/misc/hdl-dump/default.nix
new file mode 100644
index 00000000000..e5f3afb03d5
--- /dev/null
+++ b/pkgs/tools/misc/hdl-dump/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, upx
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hdl-dump";
+  version = "20202807";
+
+  # Using AkuHAK's repo because playstation2's repo is outdated
+  src = fetchFromGitHub {
+    owner = "AKuHAK";
+    repo = pname;
+    rev = "0c98b235c83c0fca1da93648f05ea5f940a4aee0";
+    sha256 = "1s3wflqjjlcslpa9n5chr8dbamhmfk88885dzw68apz4vf6g27iq";
+  };
+
+  buildInputs = [ upx ];
+
+  makeFlags = [ "RELEASE=yes" ];
+
+  installPhase = ''
+    install -Dm755 hdl_dump -t $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/AKuHAK/hdl-dump";
+    description = "PlayStation 2 HDLoader image dump/install utility";
+    platforms = platforms.linux;
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ makefu ];
+  };
+}
diff --git a/pkgs/tools/misc/heatseeker/default.nix b/pkgs/tools/misc/heatseeker/default.nix
index 207788ed61d..fd89775afd6 100644
--- a/pkgs/tools/misc/heatseeker/default.nix
+++ b/pkgs/tools/misc/heatseeker/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform, coreutils }:
+{ lib, fetchFromGitHub, rustPlatform, coreutils }:
 
 rustPlatform.buildRustPackage rec {
   pname = "heatseeker";
@@ -11,7 +11,7 @@ rustPlatform.buildRustPackage rec {
     sha256 = "1x7mdyf1m17s55f6yjdr1j510kb7a8f3zkd7lb2kzdc7nd3vgaxg";
   };
 
-  cargoSha256 = "0jnlcm7v29m4nc318qgf7r7jvs80s7n04fw83imm506vwr9rxbx9";
+  cargoSha256 = "0qs2s1bi93sdmmmfmkcnf55fm2blj9f095k95m210fyv5fpizdfm";
 
   # https://github.com/rschmitt/heatseeker/issues/42
   # I've suggested using `/usr/bin/env stty`, but doing that isn't quite as simple
@@ -24,7 +24,7 @@ rustPlatform.buildRustPackage rec {
   # which we can also make use of
   TRAVIS = "true";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A general-purpose fuzzy selector";
     homepage = "https://github.com/rschmitt/heatseeker";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/hebcal/default.nix b/pkgs/tools/misc/hebcal/default.nix
index 96c95848440..050cc63f6a5 100644
--- a/pkgs/tools/misc/hebcal/default.nix
+++ b/pkgs/tools/misc/hebcal/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchFromGitHub, autoreconfHook }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
 
 stdenv.mkDerivation rec {
-  version = "4.21";
+  version = "4.24";
   pname = "hebcal";
 
   src = fetchFromGitHub {
     owner = "hebcal";
     repo = "hebcal";
     rev = "v${version}";
-    sha256 = "0gqjhl5i0hvnpvsg6cfc2z5ckrs66h3jlrdgim62azn3hh5bday2";
+    sha256 = "sha256-iWp2S3s8z/y4dZ66Ogqu7Yf4gTUvSS1J5F7d0ifRbcY=";
   };
 
   nativeBuildInputs = [ autoreconfHook ];
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with 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.";
diff --git a/pkgs/tools/misc/heimdall/default.nix b/pkgs/tools/misc/heimdall/default.nix
index bd99fa7024c..3dcefa8b2d0 100644
--- a/pkgs/tools/misc/heimdall/default.nix
+++ b/pkgs/tools/misc/heimdall/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, mkDerivation, fetchFromGitHub, cmake, zlib, libusb1
+{ lib, stdenv, mkDerivation, fetchFromGitHub, cmake, zlib, libusb1
 , enableGUI ? false, qtbase ? null
 }:
 
@@ -16,7 +16,7 @@ mkDerivation {
 
   buildInputs = [
     zlib libusb1
-  ] ++ stdenv.lib.optional enableGUI qtbase;
+  ] ++ lib.optional enableGUI qtbase;
   nativeBuildInputs = [ cmake ];
 
   cmakeFlags = [
@@ -27,11 +27,15 @@ mkDerivation {
   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 ''
+  '' + lib.optionalString stdenv.isDarwin ''
     substituteInPlace libpit/CMakeLists.txt --replace "-std=gnu++11" ""
   '';
 
-  installPhase = ''
+  installPhase = lib.optionalString (stdenv.isDarwin && enableGUI) ''
+    mkdir -p $out/Applications
+    mv bin/heimdall-frontend.app $out/Applications/heimdall-frontend.app
+    wrapQtApp $out/Applications/heimdall-frontend.app/Contents/MacOS/heimdall-frontend
+  '' + ''
     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
@@ -39,9 +43,7 @@ mkDerivation {
     install -m644 ../OSX/README.txt $out/share/doc/heimdall/README.osx
   '';
 
-  enableParallelBuilding = true;
-
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/misc/hexd/default.nix b/pkgs/tools/misc/hexd/default.nix
index 0c0c56c5271..467e85128b8 100644
--- a/pkgs/tools/misc/hexd/default.nix
+++ b/pkgs/tools/misc/hexd/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   pname = "hexd";
diff --git a/pkgs/tools/misc/hexyl/default.nix b/pkgs/tools/misc/hexyl/default.nix
index d9bed8c607d..dcab5f249fe 100644
--- a/pkgs/tools/misc/hexyl/default.nix
+++ b/pkgs/tools/misc/hexyl/default.nix
@@ -1,19 +1,19 @@
-{ stdenv, fetchFromGitHub, rustPlatform }:
+{ lib, fetchFromGitHub, rustPlatform }:
 
 rustPlatform.buildRustPackage rec {
-  pname   = "hexyl";
-  version = "0.8.0";
+  pname = "hexyl";
+  version = "0.9.0";
 
   src = fetchFromGitHub {
-    owner  = "sharkdp";
-    repo   = pname;
-    rev    = "v${version}";
-    sha256 = "0aj2sysl0spf5zlcd5kfzlw97w7dzf9x93pv0d1v9blnbd1rz7lm";
+    owner = "sharkdp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hLDx5OzCE5iA492V3+dhaav2l8/rOVWyskrU4Gz1hf4=";
   };
 
-  cargoSha256 = "1am9vs7l2wzgwqakrsl27x1y7jpn9xaqa4kr48wwqzka401h6j4m";
+  cargoSha256 = "sha256-CGaCMrShagK4dAdwJtaeUMJlYOlG/cH+6E1QDYGrqL0=";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     changelog = "https://github.com/sharkdp/hexyl/releases/tag/v${version}";
     description = "A command-line hex viewer";
     longDescription = ''
@@ -22,9 +22,8 @@ rustPlatform.buildRustPackage rec {
       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;
+    homepage = "https://github.com/sharkdp/hexyl";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ dywedir SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/misc/hhpc/default.nix b/pkgs/tools/misc/hhpc/default.nix
index 4b1b0d0c762..5f02121e59f 100644
--- a/pkgs/tools/misc/hhpc/default.nix
+++ b/pkgs/tools/misc/hhpc/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchFromGitHub, xorg, pkgconfig}:
+{lib, stdenv, fetchFromGitHub, xorg, pkg-config}:
 
 stdenv.mkDerivation rec {
   pname = "hhpc";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
     sha256 = "1djsw1r38mh6zx0rbyn2cfa931hyddib4fl3i27c4z7xinl709ss";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ xorg.libX11 ];
 
   installPhase = ''
@@ -19,10 +19,10 @@ stdenv.mkDerivation rec {
       cp hhpc $out/bin/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Hides the mouse pointer in X11";
     maintainers = with maintainers; [ nico202 ];
     platforms = platforms.unix;
-    license = stdenv.lib.licenses.bsd3;
+    license = lib.licenses.bsd3;
   };
 }
diff --git a/pkgs/tools/misc/hid-listen/default.nix b/pkgs/tools/misc/hid-listen/default.nix
index afc7c5741fd..1f69a3fe749 100644
--- a/pkgs/tools/misc/hid-listen/default.nix
+++ b/pkgs/tools/misc/hid-listen/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchzip }:
+{ lib, stdenv, fetchzip }:
 stdenv.mkDerivation rec {
   pname = "hid-listen";
   version = "1.01";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
     mv ./hid_listen $out/bin/hid_listen
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tool thats prints debugging information from usb HID devices";
     homepage = "https://www.pjrc.com/teensy/hid_listen.html";
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/hidrd/default.nix b/pkgs/tools/misc/hidrd/default.nix
new file mode 100644
index 00000000000..74bb771c1d4
--- /dev/null
+++ b/pkgs/tools/misc/hidrd/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation {
+  pname = "hidrd";
+  version = "unstable-2019-06-03";
+
+  src = fetchFromGitHub {
+    owner = "DIGImend";
+    repo = "hidrd";
+    rev = "6c0ed39708a5777ac620f902f39c8a0e03eefe4e";
+    sha256 = "1rnhq6b0nrmphdig1qrpzpbpqlg3943gzpw0v7p5rwcdynb6bb94";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "HID report descriptor I/O library and conversion tool";
+    homepage = "https://github.com/DIGImend/hidrd";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ pacien ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/misc/homesick/gemset.nix b/pkgs/tools/misc/homesick/gemset.nix
index f5144827680..4a01696c2c7 100644
--- a/pkgs/tools/misc/homesick/gemset.nix
+++ b/pkgs/tools/misc/homesick/gemset.nix
@@ -16,4 +16,4 @@
     };
     version = "0.20.0";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/misc/hpcg/default.nix b/pkgs/tools/misc/hpcg/default.nix
index 6274178c266..d6896527ad2 100644
--- a/pkgs/tools/misc/hpcg/default.nix
+++ b/pkgs/tools/misc/hpcg/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, openmpi } :
+{ lib, stdenv, fetchurl, mpi } :
 
 stdenv.mkDerivation rec {
   pname = "hpcg";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  buildInputs = [ openmpi ];
+  buildInputs = [ mpi ];
 
   makeFlags = [ "arch=Linux_MPI" ];
 
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
     cp bin/hpcg.dat $out/share/hpcg
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "HPC conjugate gradient benchmark";
     homepage = "https://www.hpcg-benchmark.org";
     platforms = platforms.linux;
diff --git a/pkgs/tools/misc/hpl/default.nix b/pkgs/tools/misc/hpl/default.nix
index d688f3adf30..c9a81ebb8a1 100644
--- a/pkgs/tools/misc/hpl/default.nix
+++ b/pkgs/tools/misc/hpl/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, blas, lapack, mpi } :
+{ lib, stdenv, fetchurl, blas, lapack, mpi } :
 
 assert (!blas.isILP64) && (!lapack.isILP64);
 
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ blas lapack mpi ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Portable Implementation of the Linpack Benchmark for Distributed-Memory Computers";
     homepage = "http://www.netlib.org/benchmark/hpl/";
     platforms = platforms.unix;
diff --git a/pkgs/tools/misc/html-proofer/Gemfile.lock b/pkgs/tools/misc/html-proofer/Gemfile.lock
index 0ba32818d21..5cb5b3872a1 100644
--- a/pkgs/tools/misc/html-proofer/Gemfile.lock
+++ b/pkgs/tools/misc/html-proofer/Gemfile.lock
@@ -5,8 +5,8 @@ GEM
       public_suffix (>= 2.0.2, < 5.0)
     ethon (0.12.0)
       ffi (>= 1.3.0)
-    ffi (1.12.2)
-    html-proofer (3.15.3)
+    ffi (1.14.2)
+    html-proofer (3.18.8)
       addressable (~> 2.3)
       mercenary (~> 0.3)
       nokogumbo (~> 2.0)
@@ -15,15 +15,17 @@ GEM
       typhoeus (~> 1.3)
       yell (~> 2.0)
     mercenary (0.4.0)
-    mini_portile2 (2.4.0)
-    nokogiri (1.10.9)
-      mini_portile2 (~> 2.4.0)
-    nokogumbo (2.0.2)
+    mini_portile2 (2.5.0)
+    nokogiri (1.11.1)
+      mini_portile2 (~> 2.5.0)
+      racc (~> 1.4)
+    nokogumbo (2.0.4)
       nokogiri (~> 1.8, >= 1.8.4)
-    parallel (1.19.1)
-    public_suffix (4.0.4)
+    parallel (1.20.1)
+    public_suffix (4.0.6)
+    racc (1.5.2)
     rainbow (3.0.0)
-    typhoeus (1.3.1)
+    typhoeus (1.4.0)
       ethon (>= 0.9.0)
     yell (2.2.2)
 
diff --git a/pkgs/tools/misc/html-proofer/default.nix b/pkgs/tools/misc/html-proofer/default.nix
index ba136b06b8a..73025a212b2 100644
--- a/pkgs/tools/misc/html-proofer/default.nix
+++ b/pkgs/tools/misc/html-proofer/default.nix
@@ -1,4 +1,4 @@
-{ bundlerEnv, ruby, lib }:
+{ bundlerEnv, ruby, lib, bundlerUpdateScript }:
 
 bundlerEnv rec {
   name = "${pname}-${version}";
@@ -8,11 +8,13 @@ bundlerEnv rec {
   inherit ruby;
   gemdir = ./.;
 
+  passthru.updateScript = bundlerUpdateScript pname;
+
   meta = with lib; {
     description = "A tool to validate HTML files";
     homepage    = "https://github.com/gjtorikian/html-proofer";
     license     = licenses.mit;
-    maintainers = with maintainers; [ primeos ];
+    maintainers = with maintainers; [ ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/html-proofer/gemset.nix b/pkgs/tools/misc/html-proofer/gemset.nix
index c5836bc74ba..d05e096f78d 100644
--- a/pkgs/tools/misc/html-proofer/gemset.nix
+++ b/pkgs/tools/misc/html-proofer/gemset.nix
@@ -26,10 +26,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "10lfhahnnc91v63xpvk65apn61pib086zha3z5sp1xk9acfx12h4";
+      sha256 = "15hgiy09i8ywjihyzyvjvk42ivi3kmy6dm21s5sgg9j7y3h3zkkx";
       type = "gem";
     };
-    version = "1.12.2";
+    version = "1.14.2";
   };
   html-proofer = {
     dependencies = ["addressable" "mercenary" "nokogumbo" "parallel" "rainbow" "typhoeus" "yell"];
@@ -37,10 +37,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "18afz6rz72j8hnfgzhyr21wh1rfy1x41iyhbcgaq0r1bd7ng1vni";
+      sha256 = "0i5anzj9lp2m6bvghcbz16dlv5ww2mcwgkfj878mamgvb2pfk2m9";
       type = "gem";
     };
-    version = "3.15.3";
+    version = "3.18.8";
   };
   mercenary = {
     groups = ["default"];
@@ -57,21 +57,21 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
+      sha256 = "1hdbpmamx8js53yk3h8cqy12kgv6ca06k0c9n3pxh6b6cjfs19x7";
       type = "gem";
     };
-    version = "2.4.0";
+    version = "2.5.0";
   };
   nokogiri = {
-    dependencies = ["mini_portile2"];
+    dependencies = ["mini_portile2" "racc"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "12j76d0bp608932xkzmfi638c7aqah57l437q8494znzbj610qnm";
+      sha256 = "1ajwkqr28hwqbyl1l3czx4a34c88acxywyqp8cjyy0zgsd6sbhj2";
       type = "gem";
     };
-    version = "1.10.9";
+    version = "1.11.1";
   };
   nokogumbo = {
     dependencies = ["nokogiri"];
@@ -79,30 +79,40 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0sxjnpjvrn10gdmfw2dimhch861lz00f28hvkkz0b1gc2rb65k9s";
+      sha256 = "0pxm7hx2lhmanm8kljd39f1j1742kl0a31zx98jsjiwrkfb5hhc6";
       type = "gem";
     };
-    version = "2.0.2";
+    version = "2.0.4";
   };
   parallel = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "12jijkap4akzdv11lm08dglsc8jmc87xcgq6947i1s3qb69f4zn2";
+      sha256 = "0055br0mibnqz0j8wvy20zry548dhkakws681bhj3ycb972awkzd";
       type = "gem";
     };
-    version = "1.19.1";
+    version = "1.20.1";
   };
   public_suffix = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1l1kqw75asziwmzrig8rywxswxz8l91sc3pvns02ffsqac1a3wiz";
+      sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
       type = "gem";
     };
-    version = "4.0.4";
+    version = "4.0.6";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g";
+      type = "gem";
+    };
+    version = "1.5.2";
   };
   rainbow = {
     groups = ["default"];
@@ -120,10 +130,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0cni8b1idcp0dk8kybmxydadhfpaj3lbs99w5kjibv8bsmip2zi5";
+      sha256 = "1m22yrkmbj81rzhlny81j427qdvz57yk5wbcf3km0nf3bl6qiygz";
       type = "gem";
     };
-    version = "1.3.1";
+    version = "1.4.0";
   };
   yell = {
     groups = ["default"];
@@ -135,4 +145,4 @@
     };
     version = "2.2.2";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/misc/hyperfine/default.nix b/pkgs/tools/misc/hyperfine/default.nix
index ff9250a2bf6..747c1e56a81 100644
--- a/pkgs/tools/misc/hyperfine/default.nix
+++ b/pkgs/tools/misc/hyperfine/default.nix
@@ -1,22 +1,20 @@
-{ stdenv, fetchFromGitHub, rustPlatform, installShellFiles
+{ lib, stdenv, fetchCrate, rustPlatform, installShellFiles
 , Security
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "hyperfine";
-  version = "1.10.0";
+  version = "1.11.0";
 
-  src = fetchFromGitHub {
-    owner  = "sharkdp";
-    repo   = pname;
-    rev    = "refs/tags/v${version}";
-    sha256 = "0389lmyipmm4irrl39zw2748f2sdddfzwms4i4763xdykdvi8b57";
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "0dla2jzwcxkdx3n4fqkkh6wirqs2f31lvqsw2pjf1jbnnif54mzh";
   };
 
-  cargoSha256 = "06scvp7x1yixdadarsm461hbc256spx4aqhmjjn72x7hxn22h9cg";
+  cargoSha256 = "13dd5x0mr1pqcba48w9v5jjpddapd7gk34d4bysbjqsriwpbrdgp";
 
   nativeBuildInputs = [ installShellFiles ];
-  buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
+  buildInputs = lib.optional stdenv.isDarwin Security;
 
   postInstall = ''
     installManPage doc/hyperfine.1
@@ -26,7 +24,7 @@ rustPlatform.buildRustPackage rec {
       --zsh $releaseDir/build/hyperfine-*/out/_hyperfine
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Command-line benchmarking tool";
     homepage    = "https://github.com/sharkdp/hyperfine";
     license     = with licenses; [ asl20 /* or */ mit ];
diff --git a/pkgs/tools/misc/hyperledger-fabric/default.nix b/pkgs/tools/misc/hyperledger-fabric/default.nix
index e782d793dab..9f7fa31d3f2 100644
--- a/pkgs/tools/misc/hyperledger-fabric/default.nix
+++ b/pkgs/tools/misc/hyperledger-fabric/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "hyperledger-fabric";
@@ -26,7 +26,7 @@ buildGoPackage rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "An implementation of blockchain technology, leveraging familiar and proven technologies";
     homepage = "https://wiki.hyperledger.org/projects/Fabric";
     license = licenses.asl20;
diff --git a/pkgs/tools/misc/i3cat/default.nix b/pkgs/tools/misc/i3cat/default.nix
index bc934c424f3..e91b17856ed 100644
--- a/pkgs/tools/misc/i3cat/default.nix
+++ b/pkgs/tools/misc/i3cat/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, buildGoPackage, fetchgit }:
+{ lib, buildGoPackage, fetchgit }:
 
 buildGoPackage rec {
   pname = "i3cat";
-  version = "20150321-${stdenv.lib.strings.substring 0 7 rev}";
+  version = "20150321-${lib.strings.substring 0 7 rev}";
   rev = "b9ba886a7c769994ccd8d4627978ef4b51fcf576";
 
   goPackagePath = "github.com/vincent-petithory/i3cat";
diff --git a/pkgs/tools/misc/i3minator/default.nix b/pkgs/tools/misc/i3minator/default.nix
index ad9c41d4705..4db029ef8fa 100644
--- a/pkgs/tools/misc/i3minator/default.nix
+++ b/pkgs/tools/misc/i3minator/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub, pythonPackages, glibcLocales }:
+{ lib, fetchFromGitHub, python3Packages, glibcLocales }:
 
-pythonPackages.buildPythonApplication rec {
+python3Packages.buildPythonApplication rec {
   pname = "i3minator";
   version = "0.0.4";
 
@@ -13,12 +13,12 @@ pythonPackages.buildPythonApplication rec {
 
   LC_ALL = "en_US.UTF-8";
   buildInputs = [ glibcLocales ];
-  propagatedBuildInputs = [ pythonPackages.pyyaml pythonPackages.i3-py ];
+  propagatedBuildInputs = [ python3Packages.pyyaml python3Packages.i3-py ];
 
   # No tests
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "i3 project manager similar to tmuxinator";
     longDescription = ''
       A simple "workspace manager" for i3. It allows to quickly
@@ -26,9 +26,9 @@ pythonPackages.buildPythonApplication rec {
       project is inspired by tmuxinator and uses i3-py.
     '';
     homepage = "https://github.com/carlesso/i3minator";
-    license = stdenv.lib.licenses.wtfpl;
+    license = lib.licenses.wtfpl;
     maintainers = with maintainers; [ domenkozar ];
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
   };
 
 }
diff --git a/pkgs/tools/misc/i3nator/default.nix b/pkgs/tools/misc/i3nator/default.nix
new file mode 100644
index 00000000000..99f0edeeafd
--- /dev/null
+++ b/pkgs/tools/misc/i3nator/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "i3nator";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "pitkley";
+    repo = pname;
+    rev = version;
+    sha256 = "10rxvxq48dhzlw5p9fsj6x0ci4pap85s9b192zakgvk4h97ifp2p";
+  };
+
+  cargoSha256 = "04sx1dsznvh60s2yd9bzbvj6fgjvj37vv33qpww13fyph832i37g";
+
+  meta = with lib; {
+    description = "Tmuxinator for the i3 window manager";
+    homepage = "https://github.com/pitkley/i3nator";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ mpoquet ];
+  };
+}
diff --git a/pkgs/tools/misc/ical2org/default.nix b/pkgs/tools/misc/ical2org/default.nix
index ffdb4e93f58..78f40974ace 100644
--- a/pkgs/tools/misc/ical2org/default.nix
+++ b/pkgs/tools/misc/ical2org/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, buildGoPackage}:
+{ lib, fetchFromGitHub, buildGoPackage}:
 
 buildGoPackage rec {
   pname = "ical2org";
@@ -16,8 +16,8 @@ buildGoPackage rec {
 
   goDeps = ./deps.nix;
 
-  meta = with stdenv.lib; {
-    description = "Convert an iCal file to org agenda format, optionally deduplicating entries.";
+  meta = with 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 ];
diff --git a/pkgs/tools/misc/ideviceinstaller/default.nix b/pkgs/tools/misc/ideviceinstaller/default.nix
index 4046d775a54..f25c2eb62f6 100644
--- a/pkgs/tools/misc/ideviceinstaller/default.nix
+++ b/pkgs/tools/misc/ideviceinstaller/default.nix
@@ -1,19 +1,19 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, usbmuxd, libzip, libimobiledevice }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, usbmuxd, libzip, libimobiledevice }:
 
 stdenv.mkDerivation rec {
   pname = "ideviceinstaller";
-  version = "2018-10-01";
+  version = "1.1.1";
 
   src = fetchFromGitHub {
     owner = "libimobiledevice";
     repo = pname;
-    rev = "f14def7cd9303a0fe622732fae9830ae702fdd7c";
-    sha256 = "1biwhbldvgdhn8ygp7w79ca0rivzdjpykr76pyhy7r2fa56mrwq8";
+    rev = version;
+    sha256 = "1xp0sjgfx2z19x9mxihn18ybsmrnrcfc55zbh5a44g3vrmagmlzz";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig usbmuxd libimobiledevice libzip ];
+  nativeBuildInputs = [ autoreconfHook pkg-config usbmuxd libimobiledevice libzip ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/libimobiledevice/ideviceinstaller";
     description = "List/modify installed apps of iOS devices";
     longDescription = ''
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
       and enumerate installed or archived apps.
     '';
     license = licenses.gpl2;
-    platforms = platforms.linux;
+    platforms = platforms.linux ++ platforms.darwin;
     maintainers = with maintainers; [ aristid infinisil ];
   };
 }
diff --git a/pkgs/tools/misc/idevicerestore/default.nix b/pkgs/tools/misc/idevicerestore/default.nix
index 5a606411441..3e4739ee032 100644
--- a/pkgs/tools/misc/idevicerestore/default.nix
+++ b/pkgs/tools/misc/idevicerestore/default.nix
@@ -1,25 +1,26 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
 , curl
 , libimobiledevice
 , libirecovery
 , libzip
 , libusbmuxd
+, IOKit
 }:
 
 stdenv.mkDerivation rec {
   pname = "idevicerestore";
-  version = "2019-12-26";
+  version = "1.0.0";
 
   src = fetchFromGitHub {
     owner = "libimobiledevice";
     repo = pname;
-    rev = "8207daaa2ac3cb3a5107aae6aefee8ecbe39b6d4";
-    sha256 = "1jz72bzk1fh12bs65pv06l85135hgfz1aqnbb084bvqcpj4gl40h";
+    rev = version;
+    sha256 = "1w7ywp77xc6v4hifi3j9ywrj447vv7fkwg2w26w0lq95f3bkblqr";
   };
 
   nativeBuildInputs = [
     autoreconfHook
-    pkgconfig
+    pkg-config
   ];
 
   buildInputs = [
@@ -31,9 +32,9 @@ stdenv.mkDerivation rec {
     # Not listing other dependencies specified in
     # https://github.com/libimobiledevice/idevicerestore/blob/8a882038b2b1e022fbd19eaf8bea51006a373c06/README#L20
     # because they are inherited `libimobiledevice`.
-  ];
+  ] ++ lib.optionals stdenv.isDarwin [ IOKit ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/libimobiledevice/idevicerestore";
     description = "Restore/upgrade firmware of iOS devices";
     longDescription = ''
@@ -51,8 +52,8 @@ stdenv.mkDerivation rec {
       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;
+    # configure.ac suggests it should work for mingw as well but not tried yet
+    platforms = platforms.linux ++ platforms.darwin;
     maintainers = with maintainers; [ nh2 ];
   };
 }
diff --git a/pkgs/tools/misc/idutils/default.nix b/pkgs/tools/misc/idutils/default.nix
index 9afb9279134..e43ab2ae879 100644
--- a/pkgs/tools/misc/idutils/default.nix
+++ b/pkgs/tools/misc/idutils/default.nix
@@ -1,27 +1,29 @@
-{ fetchurl, stdenv, emacs }:
+{ fetchurl, lib, stdenv, emacs, gnulib, autoconf, bison, automake, gettext, gperf, texinfo, perl, rsync, gawk}:
 
 stdenv.mkDerivation rec {
-  name = "idutils-4.6";
+  pname = "idutils";
+  version = "4.6";
 
   src = fetchurl {
-    url = "mirror://gnu/idutils/${name}.tar.xz";
+    url = "mirror://gnu/idutils/idutils-${version}.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
+  preConfigure = ''
+    # replace embedded gnulib tests with those from gnulib package
+    bash -O extglob -c "cd gnulib-tests; rm -r !(Makefile.am)"
+    substituteInPlace ./configure.ac --replace "AC_PREREQ(2.61)" "AC_PREREQ(2.64)"
+    ./bootstrap --force --gnulib-srcdir=${gnulib} --skip-po --bootstrap-sync --no-git
     '';
 
-  buildInputs = stdenv.lib.optional stdenv.isLinux emacs;
+  buildInputs = lib.optional stdenv.isLinux emacs;
+  nativeBuildInputs = [ gnulib autoconf bison automake gettext gperf texinfo perl rsync gawk ];
 
   doCheck = !stdenv.isDarwin;
 
   patches = [ ./nix-mapping.patch ];
 
-  meta = {
+  meta = with lib; {
     description = "Text searching utility";
 
     longDescription = ''
@@ -46,10 +48,9 @@ stdenv.mkDerivation rec {
     '';
 
     homepage = "https://www.gnu.org/software/idutils/";
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = licenses.gpl3Plus;
 
-    maintainers = [ ];
-    platforms = stdenv.lib.platforms.all;
-    broken = true;
+    maintainers = with maintainers; [ gfrascadorio ];
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/ili2c/default.nix b/pkgs/tools/misc/ili2c/default.nix
index 43eed8367c4..93b61ec12dd 100644
--- a/pkgs/tools/misc/ili2c/default.nix
+++ b/pkgs/tools/misc/ili2c/default.nix
@@ -1,8 +1,9 @@
-{ stdenv, fetchFromGitHub, jdk, ant, makeWrapper, jre }:
+{ lib, stdenv, fetchFromGitHub, jdk8, ant, makeWrapper, jre8 }:
 
+let jdk = jdk8; jre = jre8; in
 stdenv.mkDerivation rec {
   pname = "ili2c";
-  version = "5.0.8";
+  version = "5.1.1";
 
   nativeBuildInputs = [ ant jdk makeWrapper ];
 
@@ -10,7 +11,7 @@ stdenv.mkDerivation rec {
     owner = "claeis";
     repo = pname;
     rev = "${pname}-${version}";
-    sha256 = "1yhsyh940kb33y2n6xl7zhf0f6q0nrxbyg6c4g5n2imllpn54sgi";
+    sha256 = "sha256-FHhx+f253+UdbFjd2fOlUY1tpQ6pA2aVu9CBSwUVoKQ=";
   };
 
   buildPhase = "ant jar";
@@ -25,7 +26,7 @@ stdenv.mkDerivation rec {
         --add-flags "-jar $out/share/${pname}/ili2c.jar"
     '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "The INTERLIS Compiler";
     longDescription = ''
       Checks the syntactical correctness of an INTERLIS data model.
diff --git a/pkgs/tools/misc/inav-blackbox-tools/default.nix b/pkgs/tools/misc/inav-blackbox-tools/default.nix
new file mode 100644
index 00000000000..5f2fb65f9f3
--- /dev/null
+++ b/pkgs/tools/misc/inav-blackbox-tools/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, cairo }:
+
+stdenv.mkDerivation rec {
+  pname = "inav-blackbox-tools";
+  version = "unstable-2021-04-22";
+
+  src = fetchFromGitHub {
+    owner = "iNavFlight";
+    repo = "blackbox-tools";
+    rev = "0109e2fb9b44d593e60bca4cef4098d83c55c373";
+    sha256 = "1rdlw74dqq0hahnka2w2pgvs172vway2x6v8byxl2s773l22k4ln";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ cairo ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/bin"
+    cp obj/{blackbox_decode,blackbox_render,encoder_testbed} "$out/bin"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tools for working with blackbox flight logs";
+    homepage = "https://github.com/inavflight/blackbox-tools";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ expipiplus1 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/misc/infracost/default.nix b/pkgs/tools/misc/infracost/default.nix
new file mode 100644
index 00000000000..3d91dd6d9ab
--- /dev/null
+++ b/pkgs/tools/misc/infracost/default.nix
@@ -0,0 +1,58 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, terraform }:
+
+buildGoModule rec {
+  pname = "infracost";
+  version = "0.9.4";
+
+  src = fetchFromGitHub {
+    owner = "infracost";
+    rev = "v${version}";
+    repo = "infracost";
+    sha256 = "sha256-OQwMO9bhPK+Wjob8rAFYJQRpAYf1bPdRi2BjETjpSpE=";
+  };
+  vendorSha256 = "sha256-zMEtVPyzwW4SrbpydDFDqgHEC0/khkrSxlEnQ5I0he8=";
+
+  ldflags = [ "-s" "-w" "-X github.com/infracost/infracost/internal/version.Version=v${version}" ];
+
+  # Install completions post-install
+  nativeBuildInputs = [ installShellFiles ];
+
+  checkInputs = [ terraform ];
+  checkPhase = ''
+    runHook preCheck
+    make test
+    runHook postCheck
+  '';
+
+  postInstall = ''
+    export INFRACOST_SKIP_UPDATE_CHECK=true
+    installShellCompletion --cmd infracost \
+      --bash <($out/bin/infracost completion --shell bash) \
+      --fish <($out/bin/infracost completion --shell fish) \
+      --zsh <($out/bin/infracost completion --shell zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    export INFRACOST_SKIP_UPDATE_CHECK=true
+    $out/bin/infracost --help
+    $out/bin/infracost --version | grep "v${version}"
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://infracost.io";
+    changelog = "https://github.com/infracost/infracost/releases/tag/v${version}";
+    description = "Cloud cost estimates for Terraform in your CLI and pull requests";
+    longDescription = ''
+      Infracost shows hourly and monthly cost estimates for a Terraform project.
+      This helps developers, DevOps et al. quickly see the cost breakdown and
+      compare different deployment options upfront.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ davegallant jk ];
+  };
+}
diff --git a/pkgs/tools/misc/ink/default.nix b/pkgs/tools/misc/ink/default.nix
new file mode 100644
index 00000000000..8037d541310
--- /dev/null
+++ b/pkgs/tools/misc/ink/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, libinklevel }:
+
+stdenv.mkDerivation rec {
+  pname = "ink";
+  version = "0.5.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1fk0b8vic04a3i3vmq73hbk7mzbi57s8ks6ighn3mvr6m2v8yc9d";
+  };
+
+  buildInputs = [
+    libinklevel
+  ];
+
+  outputs = [ "out" "man" ];
+
+  meta = with lib; {
+    description = "A command line tool for checking the ink level of your locally connected printer";
+    longDescription = ''
+      Ink is a command line tool for checking the ink level of your locally connected printer on a system which runs Linux or FreeBSD. Canon BJNP network printers are supported too.
+    '';
+    homepage = "http://ink.sourceforge.net/";
+    license = licenses.gpl2;
+    platforms = platforms.linux ++ platforms.freebsd;
+    maintainers = with maintainers; [ samb96 ];
+  };
+}
diff --git a/pkgs/tools/misc/interactsh/default.nix b/pkgs/tools/misc/interactsh/default.nix
new file mode 100644
index 00000000000..8bc70967b16
--- /dev/null
+++ b/pkgs/tools/misc/interactsh/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "interactsh";
+  version = "0.0.3";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0a3jfdnhh5idf2j14gppjxmdhqnyymg42z7nlnbr2zaigkvgz487";
+  };
+
+  vendorSha256 = "sha256-hLnxtARre+7HqEtU7bB9SvEieOaAoBM6VFUnKvLCD60=";
+
+  modRoot = ".";
+  subPackages = [
+    "cmd/interactsh-client"
+    "cmd/interactsh-server"
+  ];
+
+  # Test files are not part of the release tarball
+  doCheck = false;
+
+  meta = with lib; {
+    description = "An Out of bounds interaction gathering server and client library";
+    longDescription = ''
+      Interactsh is an Open-Source Solution for Out of band Data Extraction,
+      A tool designed to detect bugs that cause external interactions,
+      For example - Blind SQLi, Blind CMDi, SSRF, etc.
+    '';
+    homepage = "https://github.com/projectdiscovery/interactsh";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hanemile ];
+  };
+}
diff --git a/pkgs/tools/misc/intermodal/default.nix b/pkgs/tools/misc/intermodal/default.nix
index de52909a810..c1f182d6966 100644
--- a/pkgs/tools/misc/intermodal/default.nix
+++ b/pkgs/tools/misc/intermodal/default.nix
@@ -1,25 +1,25 @@
-{ stdenv, rustPlatform, fetchFromGitHub }:
+{ lib, stdenv, rustPlatform, fetchFromGitHub }:
 
 rustPlatform.buildRustPackage rec {
   pname = "intermodal";
-  version = "0.1.10";
+  version = "0.1.12";
 
   src = fetchFromGitHub {
     owner = "casey";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0vdla0vhvgj1yrg631jdm3kwdm1q0acw8sh2nz57dp3x7chq6ipx";
+    sha256 = "0mn0wm3bihn7ffqk0p79mb1hik54dbhc9diq1wh9ylpld2iqmz68";
   };
 
-  cargoSha256 = "1yl1chh243ixa9lhkmgi94w6mvnrnr7xmsh4kvj7ax693249pzjv";
+  cargoSha256 = "1bvs23rb25qdwbrygzq11p8cvck5lxjp9llvs1cjdh0qzr65jwla";
 
   # include_hidden test tries to use `chflags` on darwin
-  checkFlagsArray = stdenv.lib.optionals stdenv.isDarwin [ "--skip=subcommand::torrent::create::tests::include_hidden" ];
+  checkFlagsArray = lib.optionals stdenv.isDarwin [ "--skip=subcommand::torrent::create::tests::include_hidden" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "User-friendly and featureful command-line BitTorrent metainfo utility";
     homepage = "https://github.com/casey/intermodal";
     license = licenses.cc0;
-    maintainers = with maintainers; [ filalex77 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/misc/iotools/default.nix b/pkgs/tools/misc/iotools/default.nix
new file mode 100644
index 00000000000..12411aac6c6
--- /dev/null
+++ b/pkgs/tools/misc/iotools/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "iotools";
+  version = "unstable-2017-12-11";
+
+  src = fetchFromGitHub {
+    owner = "adurbin";
+    repo = pname;
+    rev = "18949fdc4dedb1da3f51ee83a582b112fb9f2c71";
+    sha256 = "0vymnah44d5bzsjhfmxkcrlrikkp0db22k7a1s8bknz7glk9fldn";
+  };
+
+  makeFlags = [ "DEBUG=0" "STATIC=0" ];
+
+  installPhase = ''
+    install -Dm755 iotools -t $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Set of simple command line tools which allow access to
+      hardware device registers";
+    longDescription = ''
+      Provides a set of simple command line tools which allow access to
+      hardware device registers. Supported register interfaces include PCI,
+      IO, memory mapped IO, SMBus, CPUID, and MSR. Also included are some
+      utilities which allow for simple arithmetic, logical, and other
+      operations.
+    '';
+    homepage = "https://github.com/adurbin/iotools";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ felixsinger ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/pkgs/tools/misc/ipad_charge/default.nix b/pkgs/tools/misc/ipad_charge/default.nix
index 981d9f2dc6c..d92961be9c5 100644
--- a/pkgs/tools/misc/ipad_charge/default.nix
+++ b/pkgs/tools/misc/ipad_charge/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libusb1 }:
+{ lib, stdenv, fetchFromGitHub, libusb1 }:
 
 stdenv.mkDerivation rec {
   pname = "ipad_charge";
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
     mkdir -p $out/{bin,lib/udev/rules.d}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit (src.meta) homepage;
     description = "Apple device USB charging utility for Linux";
     longDescription = ''
diff --git a/pkgs/tools/misc/ipbt/default.nix b/pkgs/tools/misc/ipbt/default.nix
index e523dd198d4..25dad59c9fe 100644
--- a/pkgs/tools/misc/ipbt/default.nix
+++ b/pkgs/tools/misc/ipbt/default.nix
@@ -1,18 +1,18 @@
-{ stdenv, fetchurl, perl, ncurses }:
+{ lib, stdenv, fetchurl, perl, ncurses }:
 
 stdenv.mkDerivation rec {
-  version = "20190601.d1519e0";
+  version = "20210215.5a9cb02";
   pname = "ipbt";
 
   src = fetchurl {
     url = "https://www.chiark.greenend.org.uk/~sgtatham/ipbt/ipbt-${version}.tar.gz";
-    sha256 = "1aj8pajdd81vq2qw6vzfm27i0aj8vfz9m7k3sda30pnsrizm06d5";
+    sha256 = "0w6blpv22jjivzr58y440zv6djvi5iccdmj4y2md52fbpjngmsha";
   };
 
   nativeBuildInputs = [ perl ];
   buildInputs = [ ncurses ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A high-tech ttyrec player for Unix";
     homepage = "https://www.chiark.greenend.org.uk/~sgtatham/ipbt/";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/ipxe/default.nix b/pkgs/tools/misc/ipxe/default.nix
index 87b26f223bc..4be0b3d417e 100644
--- a/pkgs/tools/misc/ipxe/default.nix
+++ b/pkgs/tools/misc/ipxe/default.nix
@@ -1,4 +1,5 @@
-{ stdenv, lib, fetchFromGitHub, perl, cdrkit, syslinux, xz, openssl, gnu-efi, mtools
+{ stdenv, lib, fetchFromGitHub, perl, cdrkit, xz, openssl, gnu-efi, mtools
+, syslinux ? null
 , embedScript ? null
 , additionalTargets ? {}
 }:
@@ -8,26 +9,34 @@ let
     "bin-x86_64-efi/ipxe.efi" = null;
     "bin-x86_64-efi/ipxe.efirom" = null;
     "bin-x86_64-efi/ipxe.usb" = "ipxe-efi.usb";
-  } // {
+  } // lib.optionalAttrs (stdenv.isi686 || stdenv.isx86_64) {
     "bin/ipxe.dsk" = null;
     "bin/ipxe.usb" = null;
     "bin/ipxe.iso" = null;
     "bin/ipxe.lkrn" = null;
     "bin/undionly.kpxe" = null;
+  } // lib.optionalAttrs stdenv.isAarch32 {
+    "bin-arm32-efi/ipxe.efi" = null;
+    "bin-arm32-efi/ipxe.efirom" = null;
+    "bin-arm32-efi/ipxe.usb" = "ipxe-efi.usb";
+  } // lib.optionalAttrs stdenv.isAarch64 {
+    "bin-arm64-efi/ipxe.efi" = null;
+    "bin-arm64-efi/ipxe.efirom" = null;
+    "bin-arm64-efi/ipxe.usb" = "ipxe-efi.usb";
   };
 in
 
 stdenv.mkDerivation rec {
   pname = "ipxe";
-  version = "1.20.1";
+  version = "1.21.1";
 
-  nativeBuildInputs = [ perl cdrkit syslinux xz openssl gnu-efi mtools ];
+  nativeBuildInputs = [ perl cdrkit xz openssl gnu-efi mtools ] ++ lib.optional (stdenv.isi686 || stdenv.isx86_64) syslinux;
 
   src = fetchFromGitHub {
     owner = "ipxe";
     repo = "ipxe";
     rev = "v${version}";
-    sha256 = "0w7h7y97gj9nqvbmsg1zp6zj5mpbbpckqbbx7bpp6k3ahy5fk8zp";
+    sha256 = "1pkf1n1c0rdlzfls8fvjvi1sd9xjd9ijqlyz3wigr70ijcv6x8i9";
   };
 
   # not possible due to assembler code
@@ -37,6 +46,7 @@ stdenv.mkDerivation rec {
 
   makeFlags =
     [ "ECHO_E_BIN_ECHO=echo" "ECHO_E_BIN_ECHO_E=echo" # No /bin/echo here.
+    ] ++ lib.optionals (stdenv.isi686 || stdenv.isx86_64) [
       "ISOLINUX_BIN_LIST=${syslinux}/share/syslinux/isolinux.bin"
       "LDLINUX_C32=${syslinux}/share/syslinux/ldlinux.c32"
     ] ++ lib.optional (embedScript != null) "EMBED=${embedScript}";
@@ -62,6 +72,8 @@ stdenv.mkDerivation rec {
   buildFlags = lib.attrNames targets;
 
   installPhase = ''
+    runHook preInstall
+
     mkdir -p $out
     ${lib.concatStringsSep "\n" (lib.mapAttrsToList (from: to:
       if to == null
@@ -71,15 +83,17 @@ stdenv.mkDerivation rec {
     # 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
+
+    runHook postInstall
   '';
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib;
+  meta = with lib;
     { description = "Network boot firmware";
       homepage = "https://ipxe.org/";
-      license = licenses.gpl2;
+      license = licenses.gpl2Only;
       maintainers = with maintainers; [ ehmry ];
-      platforms = [ "x86_64-linux" "i686-linux" ];
+      platforms = platforms.linux;
     };
 }
diff --git a/pkgs/tools/misc/ised/default.nix b/pkgs/tools/misc/ised/default.nix
index 3529324b30a..9032a2d2451 100644
--- a/pkgs/tools/misc/ised/default.nix
+++ b/pkgs/tools/misc/ised/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "ised";
@@ -10,8 +10,8 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A numeric sequence editor";
-    maintainers = with stdenv.lib.maintainers; [ raskin ];
-    platforms = with stdenv.lib.platforms; linux;
-    license = stdenv.lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ raskin ];
+    platforms = with lib.platforms; linux;
+    license = lib.licenses.gpl3Plus;
   };
 }
diff --git a/pkgs/tools/misc/ix/default.nix b/pkgs/tools/misc/ix/default.nix
index cedaa13b74a..95b53c3b6cc 100644
--- a/pkgs/tools/misc/ix/default.nix
+++ b/pkgs/tools/misc/ix/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, makeWrapper, curl }:
+{ lib, stdenv, fetchurl, makeWrapper, curl }:
 
 stdenv.mkDerivation {
   pname = "ix";
@@ -9,19 +9,19 @@ stdenv.mkDerivation {
     sha256 =  "0xc2s4s1aq143zz8lgkq5k25dpf049dw253qxiav5k7d7qvzzy57";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
-  phases = [ "installPhase" "fixupPhase" ];
+  dontUnpack = true;
 
   installPhase = ''
     install -Dm +x $src $out/bin/ix
   '';
 
   postFixup = ''
-    wrapProgram $out/bin/ix --prefix PATH : "${stdenv.lib.makeBinPath [ curl ]}"
+    wrapProgram $out/bin/ix --prefix PATH : "${lib.makeBinPath [ curl ]}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://ix.io";
     description = "Command line pastebin";
     maintainers = with maintainers; [ asymmetric ];
diff --git a/pkgs/tools/misc/jdiskreport/default.nix b/pkgs/tools/misc/jdiskreport/default.nix
index 5e6c0bdd596..abd8398601c 100644
--- a/pkgs/tools/misc/jdiskreport/default.nix
+++ b/pkgs/tools/misc/jdiskreport/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, unzip, jre, makeDesktopItem }:
+{ lib, stdenv, fetchurl, unzip, jre, makeDesktopItem, copyDesktopItems }:
 
 let
   desktopItem = makeDesktopItem {
@@ -18,11 +18,11 @@ stdenv.mkDerivation {
     sha256 = "0d5mzkwsbh9s9b1vyvpaawqc09b0q41l2a7pmwf7386b1fsx6d58";
   };
 
-  buildInputs = [ unzip ];
+  nativeBuildInputs = [ copyDesktopItems unzip ];
   inherit jre;
 
   installPhase = ''
-    source $stdenv/setup
+    runHook preInstall
 
     unzip $src
 
@@ -38,10 +38,12 @@ stdenv.mkDerivation {
     EOF
     chmod +x $out/bin/jdiskreport
 
-    ${desktopItem.buildCommand}
+    runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  desktopItems = [ desktopItem ];
+
+  meta = with lib; {
     homepage = "http://www.jgoodies.com/freeware/jdiskreport/";
     description = "A graphical utility to visualize disk usage";
     license = licenses.unfreeRedistributable; #TODO freedist, libs under BSD-3
diff --git a/pkgs/tools/misc/jdupes/default.nix b/pkgs/tools/misc/jdupes/default.nix
index 7d559a1468e..2589b57821b 100644
--- a/pkgs/tools/misc/jdupes/default.nix
+++ b/pkgs/tools/misc/jdupes/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "jdupes";
-  version = "1.18.2";
+  version = "1.20.0";
 
   src = fetchFromGitHub {
     owner = "jbruchon";
     repo  = "jdupes";
     rev   = "v${version}";
-    sha256 = "1gaqdcz0s31qncar9dzlr8izv50zlk4y6dgdm9xjk6as2g8b0fkk";
+    sha256 = "sha256-G6ixqSIdDoM/OVlPfv2bI4MA/k0x3Jic/kFo5XEsN/M=";
     # 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.
@@ -19,10 +19,10 @@ stdenv.mkDerivation rec {
 
   makeFlags = [
     "PREFIX=${placeholder "out"}"
-  ] ++ stdenv.lib.optionals stdenv.isLinux [
+  ] ++ lib.optionals stdenv.isLinux [
     "ENABLE_DEDUPE=1"
     "STATIC_DEDUPE_H=1"
-  ] ++ stdenv.lib.optionals stdenv.cc.isGNU [
+  ] ++ lib.optionals stdenv.cc.isGNU [
     "HARDEN=1"
   ];
 
@@ -34,7 +34,7 @@ stdenv.mkDerivation rec {
     install -Dm444 -t $out/share/doc/jdupes CHANGES LICENSE README.md
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A powerful duplicate file finder and an enhanced fork of 'fdupes'";
     longDescription = ''
       jdupes is a program for identifying and taking actions upon
diff --git a/pkgs/tools/misc/journaldriver/default.nix b/pkgs/tools/misc/journaldriver/default.nix
index 77df7ab6908..5ce1bb5d158 100644
--- a/pkgs/tools/misc/journaldriver/default.nix
+++ b/pkgs/tools/misc/journaldriver/default.nix
@@ -1,9 +1,9 @@
-{ lib, fetchFromGitHub, rustPlatform, pkgconfig, openssl, systemd }:
+{ lib, fetchFromGitHub, rustPlatform, pkg-config, openssl, systemd }:
 
 rustPlatform.buildRustPackage rec {
   pname = "journaldriver";
   version     = "1.1.0";
-  cargoSha256 = "1vyc9pglppfz5idahvcj01wpmmm6jw043zk896wdksywa5zcqn28";
+  cargoSha256 = "1gzfwkcm63fn41jls16c5sqxz28b0hrfpjhwsvvbwcfv40qxjhsg";
 
   src = fetchFromGitHub {
     owner  = "tazjin";
@@ -13,7 +13,7 @@ rustPlatform.buildRustPackage rec {
   };
 
   buildInputs       = [ openssl systemd ];
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   meta = with lib; {
     description = "Log forwarder from journald to Stackdriver Logging";
diff --git a/pkgs/tools/misc/jstest-gtk/default.nix b/pkgs/tools/misc/jstest-gtk/default.nix
new file mode 100644
index 00000000000..6824753c73c
--- /dev/null
+++ b/pkgs/tools/misc/jstest-gtk/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, lib, fetchFromGitLab, cmake, pkg-config, gtkmm3, libsigcxx, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "jstest-gtk";
+  version = "2018-07-10";
+
+  src = fetchFromGitLab {
+    owner = pname;
+    repo = pname;
+    rev = "62f6e2d7d44620e503149510c428df9e004c9f3b";
+    sha256 = "0icbbhrj5aqljhiavdy3hic60vp0zzfzyg0d6vpjaqkbzd5pv9d8";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ gtkmm3 libsigcxx xorg.libX11 ];
+
+  meta = with lib; {
+    description = "A simple joystick tester based on Gtk+";
+    longDescription = ''
+      It provides you with a list of attached joysticks, a way to display which
+      buttons and axis are pressed, a way to remap axis and buttons and a way
+      to calibrate your joystick.
+    '';
+    homepage = "https://jstest-gtk.gitlab.io/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ wucke13 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/jugglinglab/default.nix b/pkgs/tools/misc/jugglinglab/default.nix
index 32c45b31a17..f9038da04b5 100644
--- a/pkgs/tools/misc/jugglinglab/default.nix
+++ b/pkgs/tools/misc/jugglinglab/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, jre, makeWrapper, ant, jdk }:
+{ lib, stdenv, fetchFromGitHub, jre, makeWrapper, ant, jdk }:
 stdenv.mkDerivation rec {
   version = "1.2.1";
   name = "jugglinglab";
@@ -21,10 +21,10 @@ stdenv.mkDerivation rec {
       --add-flags "-jar $out/lib/JugglingLab.jar"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
       description = "A program to visualize different juggling pattens";
       license = licenses.gpl2;
       maintainers = with maintainers; [ wnklmnn ];
       platforms = platforms.all;
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/misc/kak-lsp/default.nix b/pkgs/tools/misc/kak-lsp/default.nix
index 1c2d7ab6717..86d85815374 100644
--- a/pkgs/tools/misc/kak-lsp/default.nix
+++ b/pkgs/tools/misc/kak-lsp/default.nix
@@ -1,19 +1,19 @@
-{ stdenv, lib, darwin, fetchFromGitHub, rustPlatform }:
+{ stdenv, lib, fetchFromGitHub, rustPlatform, Security }:
 
 rustPlatform.buildRustPackage rec {
   pname = "kak-lsp";
-  version = "8.0.0";
+  version = "10.0.0";
 
   src = fetchFromGitHub {
-    owner = "ul";
+    owner = pname;
     repo = pname;
     rev = "v${version}";
-    sha256 = "0nka51szivwhlfkimjiyzj67nxh75m784c28ass6ihlfax631w9m";
+    sha256 = "sha256-SmK4G9AoKGqKGbXucn5AO5DTOeVNq3gCBGvDTIJQgRU=";
   };
 
-  cargoSha256 = "174qy50m9487vv151vm8q6sby79dq3gbqjbz6h4326jwsc9wwi8c";
+  cargoSha256 = "sha256-iY5xT8e/gRN/mBT9v5LhMcl9g1/SyrH/glPBP+toZ9o=";
 
-  buildInputs = lib.optional stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
+  buildInputs = lib.optional stdenv.isDarwin [ Security ];
 
   meta = with lib; {
     description = "Kakoune Language Server Protocol Client";
diff --git a/pkgs/tools/misc/kalker/default.nix b/pkgs/tools/misc/kalker/default.nix
new file mode 100644
index 00000000000..503edb910f0
--- /dev/null
+++ b/pkgs/tools/misc/kalker/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, fetchFromGitHub
+, m4
+, rustPlatform
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "kalker";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "PaddiM8";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-1iZvp30/V0bw9NBxiKNiDgOMYJkDsGhTGdBsAPggdEg=";
+  };
+
+  cargoSha256 = "sha256-fBWnMlOLgwrOBPS2GIfOUDHQHcMMaU5r9JZVMbA+W58=";
+
+  nativeBuildInputs = [ m4 ];
+
+  outputs = [ "out" "lib" ];
+
+  postInstall = ''
+    moveToOutput "lib" "$lib"
+  '';
+
+  meta = with lib; {
+    homepage = "https://kalker.strct.net";
+    changelog = "https://github.com/PaddiM8/kalker/releases/tag/v${version}";
+    description = "A command line calculator";
+    longDescription = ''
+      A command line calculator that supports math-like syntax with user-defined
+      variables, functions, derivation, integration, and complex numbers
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ lovesegfault ];
+  };
+}
diff --git a/pkgs/tools/misc/kargo/default.nix b/pkgs/tools/misc/kargo/default.nix
index eb9805b22d8..34b93403487 100644
--- a/pkgs/tools/misc/kargo/default.nix
+++ b/pkgs/tools/misc/kargo/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, python3Packages }:
+{ lib, fetchurl, python3Packages }:
 
 with python3Packages;
 
@@ -28,10 +28,10 @@ buildPythonApplication rec {
     HOME=$TMPDIR $out/bin/kargo -v
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/kubespray/kargo-cli";
-    description = "A tool helps to deploy a kubernetes cluster with Ansible.";
-    platforms = platforms.linux;
+    description = "A tool helps to deploy a kubernetes cluster with Ansible";
+    platforms = platforms.all;
     license = licenses.gpl3;
     maintainers = with maintainers; [ ];
   };
diff --git a/pkgs/tools/misc/kcollectd/default.nix b/pkgs/tools/misc/kcollectd/default.nix
new file mode 100644
index 00000000000..e38cb6f5a79
--- /dev/null
+++ b/pkgs/tools/misc/kcollectd/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, fetchFromGitLab
+, mkDerivation
+, qtbase
+, cmake
+, kconfig
+, kio
+, kiconthemes
+, kxmlgui
+, ki18n
+, kguiaddons
+, extra-cmake-modules
+, boost
+, shared-mime-info
+, rrdtool
+, breeze-icons
+}:
+
+mkDerivation rec {
+  pname = "kcollectd";
+  version = "0.12.0";
+  src = fetchFromGitLab {
+    owner = "aerusso";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Ihd4Ps4t9+sNB3joO3vTxDR/25t7Ecl6yvHQ15QiUdY=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    shared-mime-info
+  ];
+
+  buildInputs = [
+    qtbase
+    kconfig
+    kio
+    kxmlgui
+    kiconthemes
+    ki18n
+    kguiaddons
+    boost
+    rrdtool
+    # otherwise some buttons are blank
+    breeze-icons
+  ];
+
+  meta = with lib; {
+    description = "A graphical frontend to collectd";
+    homepage = "https://www.antonioerusso.com/projects/kcollectd/";
+    maintainers = [ maintainers.symphorien ];
+    license = [ lib.licenses.gpl3Plus ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/kdecoration-viewer/default.nix b/pkgs/tools/misc/kdecoration-viewer/default.nix
deleted file mode 100644
index 53b1763ad6a..00000000000
--- a/pkgs/tools/misc/kdecoration-viewer/default.nix
+++ /dev/null
@@ -1,28 +0,0 @@
-{ 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/pkgs/tools/misc/kepubify/default.nix b/pkgs/tools/misc/kepubify/default.nix
index 6f8dbb21e1c..b1ece43154f 100644
--- a/pkgs/tools/misc/kepubify/default.nix
+++ b/pkgs/tools/misc/kepubify/default.nix
@@ -2,18 +2,21 @@
 
 buildGoModule rec {
   pname = "kepubify";
-  version = "3.1.4";
+  version = "4.0.0";
 
   src = fetchFromGitHub {
     owner = "pgaskin";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0d71d1ra7lk4ayypq3fcigd9lpb2dafa8ci14h0g7rivm4lz8l1j";
+    sha256 = "sha256-Mxe43U0kxkSdAzs+lSJ0x/VspbJPam59DpTpFEJVMl4=";
   };
 
-  vendorSha256 = "0jzx5midawvzims9ghh8fbslvwcdczvlpf0k6a9q0bdf4wlp2z5n";
+  vendorSha256 = "sha256-bLQH7ZY2hE8fBTcW7DNoUQxe4N3m9Mv3JjjKO4cG7DY=";
 
-  buildFlagsArray = [ "-ldflags=-s -w -X main.version=${version}" ];
+  # remove when built with >= go 1.17
+  buildFlags = [ "-tags" "zip117" ];
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
 
   excludedPackages = [ "kobotest" ];
 
diff --git a/pkgs/tools/misc/kermit/default.nix b/pkgs/tools/misc/kermit/default.nix
index f81d9b7266b..1a561f0bef4 100644
--- a/pkgs/tools/misc/kermit/default.nix
+++ b/pkgs/tools/misc/kermit/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, ncurses, glibc }:
+{ lib, stdenv, fetchurl, ncurses, glibc }:
 
 stdenv.mkDerivation {
   name = "kermit-9.0.302";
@@ -16,12 +16,12 @@ stdenv.mkDerivation {
     tar xvzf $src
   '';
 
-  patchPhase = ''
+  postPatch = ''
     sed -i -e 's@-I/usr/include/ncurses@@' \
       -e 's@/usr/local@'"$out"@ makefile
   '';
 
-  buildPhase = "make -f makefile linux LNKFLAGS='-lcrypt -lresolv'";
+  buildPhase = "make -f makefile linux KFLAGS='-D_IO_file_flags' LNKFLAGS='-lcrypt -lresolv'";
 
   installPhase = ''
     mkdir -p $out/bin
@@ -29,12 +29,11 @@ stdenv.mkDerivation {
     make -f makefile install
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
-    broken = true;
   };
 }
diff --git a/pkgs/tools/misc/keychain/default.nix b/pkgs/tools/misc/keychain/default.nix
index a65d408fa6b..61abb3eee10 100644
--- a/pkgs/tools/misc/keychain/default.nix
+++ b/pkgs/tools/misc/keychain/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, makeWrapper, coreutils, openssh, gnupg
+{ lib, stdenv, fetchFromGitHub, makeWrapper, coreutils, openssh, gnupg
 , perl, procps, gnugrep, gawk, findutils, gnused }:
 
 stdenv.mkDerivation rec {
@@ -12,7 +12,8 @@ stdenv.mkDerivation rec {
     sha256 = "1bkjlg0a2bbdjhwp37ci1rwikvrl4s3xlbf2jq2z4azc96dr83mj";
   };
 
-  buildInputs = [ makeWrapper perl ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
 
   installPhase = ''
     mkdir -p $out/{bin,share/man/man1}
@@ -32,23 +33,23 @@ stdenv.mkDerivation rec {
   meta = {
     description = "Keychain management tool";
     homepage = "https://www.funtoo.org/Keychain";
-    license = stdenv.lib.licenses.gpl2;
+    license = lib.licenses.gpl2;
     # other platforms are untested (AFAIK)
     platforms =
-      with stdenv.lib;
+      with lib;
       platforms.linux ++ platforms.darwin;
-    maintainers = with stdenv.lib.maintainers; [ sigma ];
+    maintainers = with 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.
+      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.
+      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/pkgs/tools/misc/kisslicer/default.nix b/pkgs/tools/misc/kisslicer/default.nix
index c6ec5f3103f..73d86e7dfc6 100644
--- a/pkgs/tools/misc/kisslicer/default.nix
+++ b/pkgs/tools/misc/kisslicer/default.nix
@@ -2,12 +2,12 @@
 , libX11
 , libGLU, libGL
 , makeWrapper
-, stdenv
+, lib, stdenv
 }:
 
 let
 
-  libPath = stdenv.lib.makeLibraryPath [
+  libPath = lib.makeLibraryPath [
     libGLU libGL
     stdenv.cc.cc
     libX11
@@ -26,8 +26,6 @@ stdenv.mkDerivation {
     stripRoot = false;
   };
 
-  phases = [ "unpackPhase" "installPhase" "fixupPhase" ];
-
   buildInputs = [
     makeWrapper
     libGLU libGL
@@ -48,7 +46,7 @@ stdenv.mkDerivation {
       --run "mkdir -p ${inidir}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Convert STL files into Gcode";
     homepage = "http://www.kisslicer.com";
     license = licenses.unfree;
diff --git a/pkgs/tools/misc/kodi-cli/default.nix b/pkgs/tools/misc/kodi-cli/default.nix
index 37eed61008b..10b9cea73d7 100644
--- a/pkgs/tools/misc/kodi-cli/default.nix
+++ b/pkgs/tools/misc/kodi-cli/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchFromGitHub, makeWrapper, curl, bash, jq, youtube-dl, gnome3 }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper, curl, bash, jq, youtube-dl, gnome }:
 
 stdenv.mkDerivation rec {
   pname = "kodi-cli";
   version = "1.1.1";
-  
+
   src = fetchFromGitHub {
     owner = "nawar";
     repo = pname;
@@ -16,12 +16,12 @@ stdenv.mkDerivation rec {
   installPhase = ''
     mkdir -p $out/bin
     cp -a kodi-cli $out/bin
-    wrapProgram $out/bin/kodi-cli --prefix PATH : ${stdenv.lib.makeBinPath [ curl bash ]}
+    wrapProgram $out/bin/kodi-cli --prefix PATH : ${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 ]}
+    wrapProgram $out/bin/playlist_to_kodi --prefix PATH : ${lib.makeBinPath [ curl bash gnome.zenity jq youtube-dl ]}
   '';
-  
-  meta = with stdenv.lib; {
+
+  meta = with 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;
diff --git a/pkgs/tools/misc/krapslog/default.nix b/pkgs/tools/misc/krapslog/default.nix
new file mode 100644
index 00000000000..a499c3eb46b
--- /dev/null
+++ b/pkgs/tools/misc/krapslog/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "krapslog";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "acj";
+    repo = "krapslog-rs";
+    rev = version;
+    sha256 = "sha256-IXbOmeWLhGOijO1xLItw1wzbHxl0Zyd0dHvfcaPWE8U=";
+  };
+
+  cargoSha256 = "sha256-2XCtjMV8ko6jnvXYtJhLlNvB1uc0QLO/aYsQX40deBk=";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  meta = with lib; {
+    description = "Visualize a log file with sparklines";
+    homepage = "https://github.com/acj/krapslog-rs";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ yanganto ];
+  };
+}
diff --git a/pkgs/tools/misc/kt/default.nix b/pkgs/tools/misc/kt/default.nix
index 9664759cf5a..e4713890ac4 100644
--- a/pkgs/tools/misc/kt/default.nix
+++ b/pkgs/tools/misc/kt/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, buildGoPackage }:
+{ lib, fetchFromGitHub, buildGoPackage }:
 
 buildGoPackage rec {
   pname = "kt";
@@ -13,7 +13,7 @@ buildGoPackage rec {
 
   goPackagePath = "github.com/fgeller/kt";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Kafka command line tool";
     homepage = "https://github.com/fgeller/kt";
     maintainers = with maintainers; [ utdemir ];
diff --git a/pkgs/tools/misc/latex2html/default.nix b/pkgs/tools/misc/latex2html/default.nix
index 33ecdb8cd8e..126d5bd4c49 100644
--- a/pkgs/tools/misc/latex2html/default.nix
+++ b/pkgs/tools/misc/latex2html/default.nix
@@ -1,16 +1,16 @@
-{ stdenv, fetchFromGitHub, makeWrapper
+{ lib, stdenv, fetchFromGitHub, makeWrapper
 , ghostscript, netpbm, perl }:
 # TODO: withTex
 
 stdenv.mkDerivation rec {
   pname = "latex2html";
-  version = "2020.2";
+  version = "2021.2";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "v${version}";
-    sha256 = "1icyl6kl60wh7cavprgbd8q6lpjwr7wn24m34kpiif7ahknhcbcm";
+    sha256 = "sha256-WxMB70TeN53S6PNYDUVZ7lBKw7DvKnJDiHek9/GUYcA=";
   };
 
   buildInputs = [ ghostscript netpbm perl ];
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "LaTeX-to-HTML translator";
     longDescription = ''
       A Perl program that translates LaTeX into HTML (HyperText Markup
diff --git a/pkgs/tools/misc/lazydocker/default.nix b/pkgs/tools/misc/lazydocker/default.nix
index d0c4d71c58a..2a63074c8d7 100644
--- a/pkgs/tools/misc/lazydocker/default.nix
+++ b/pkgs/tools/misc/lazydocker/default.nix
@@ -1,24 +1,24 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "lazydocker";
-  version = "0.9";
+  version = "0.12";
 
   src = fetchFromGitHub {
     owner = "jesseduffield";
     repo = "lazydocker";
     rev = "v${version}";
-    sha256 = "08j2qp632fdmswnb92wxa9lhnal4mrmq6gmxaxngnxiqgkfx37zy";
+    sha256 = "sha256-bpc83DFAyrAQ3VI9saYe+10ZQqOHgscerRKRyjfYD4g=";
   };
 
   goPackagePath = "github.com/jesseduffield/lazydocker";
 
   subPackages = [ "." ];
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = with maintainers; [ das-g Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/misc/lbdb/default.nix b/pkgs/tools/misc/lbdb/default.nix
index 7a6553461cb..ce3a5acd4c9 100644
--- a/pkgs/tools/misc/lbdb/default.nix
+++ b/pkgs/tools/misc/lbdb/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, perl, perlPackages, finger_bsd, makeWrapper
+{ lib, stdenv, fetchurl, fetchpatch, perl, finger_bsd
 , abook ? null
 , gnupg ? null
 , goobook ? null
@@ -7,31 +7,30 @@
 }:
 
 let
-  version = "0.48.1";
+  perl' = perl.withPackages (p: with p; [ ConvertASN1 perlldap AuthenSASL ]);
 in
-with stdenv.lib;
-with perlPackages;
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "lbdb";
-  inherit version;
+  version = "0.48.1";
   src = fetchurl {
-    url = "http://www.spinnaker.de/lbdb/download/lbdb_${version}.tar.gz";
+    url = "https://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;
+  buildInputs = [ goobook perl' ]
+    ++ lib.optional (!stdenv.isDarwin) finger_bsd
+    ++ lib.optional   (abook != null) abook
+    ++ lib.optional   (gnupg != null) gnupg
+    ++ lib.optional (goobook != null) goobook
+    ++ lib.optional   (khard != null) khard
+    ++ lib.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";
+    ++ lib.optional   (abook != null) "--with-abook"
+    ++ lib.optional   (gnupg != null) "--with-gpg"
+    ++ lib.optional (goobook != null) "--with-goobook"
+    ++ lib.optional   (khard != null) "--with-khard"
+    ++ lib.optional      (mu != null) "--with-mu";
 
   patches = [ ./add-methods-to-rc.patch
     # fix undefined exec_prefix. Remove with the next release
@@ -41,13 +40,9 @@ stdenv.mkDerivation {
       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/";
+  meta = with lib; {
+    homepage = "https://www.spinnaker.de/lbdb/";
     license = licenses.gpl2;
     platforms = platforms.all;
     description = "The Little Brother's Database";
diff --git a/pkgs/tools/misc/lcdf-typetools/default.nix b/pkgs/tools/misc/lcdf-typetools/default.nix
index 44f6768fd3b..3c4fd39713b 100644
--- a/pkgs/tools/misc/lcdf-typetools/default.nix
+++ b/pkgs/tools/misc/lcdf-typetools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   pname = "lcdf-typetools";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
 
   configureFlags = [ "--without-kpathsea" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Utilities for manipulating OpenType, PostScript Type 1, and Multiple Master fonts";
     homepage = "https://www.lcdf.org/type";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/ldapvi/default.nix b/pkgs/tools/misc/ldapvi/default.nix
index 52e6b0c6a30..759e8608090 100644
--- a/pkgs/tools/misc/ldapvi/default.nix
+++ b/pkgs/tools/misc/ldapvi/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, openldap, openssl, popt, glib, ncurses, readline, pkgconfig, cyrus_sasl, autoconf, automake }:
+{ lib, stdenv, fetchgit, openldap, openssl, popt, glib, ncurses, readline, pkg-config, cyrus_sasl, autoconf, automake }:
 
 stdenv.mkDerivation {
   pname = "ldapvi";
@@ -10,7 +10,7 @@ stdenv.mkDerivation {
     sha256 = "3ef3103030ecb04d7fe80180e3fd490377cf81fb2af96782323fddabc3225030";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ openldap openssl popt glib ncurses readline cyrus_sasl autoconf automake ];
 
   preConfigure = ''
@@ -18,7 +18,7 @@ stdenv.mkDerivation {
     ./autogen.sh
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Interactive LDAP client for Unix terminals";
     longDescription = ''
       ldapvi is an interactive LDAP client for Unix terminals. Using it, you
@@ -26,7 +26,7 @@ stdenv.mkDerivation {
     '';
     homepage = "http://www.lichteblau.com/ldapvi/";
     license = licenses.gpl2;
-    maintainers = with maintainers; [ domenkozar ];
-    platforms = stdenv.lib.platforms.linux;
+    maintainers = with maintainers; [ ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/ldmtool/default.nix b/pkgs/tools/misc/ldmtool/default.nix
index 9c9751d35c3..a826f3a0de5 100644
--- a/pkgs/tools/misc/ldmtool/default.nix
+++ b/pkgs/tools/misc/ldmtool/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoconf, automake, gtk-doc, pkgconfig, libuuid,
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, gtk-doc, pkg-config, libuuid,
   libtool, readline, gobject-introspection, json-glib, lvm2, libxslt, docbook_xsl
 , fetchpatch }:
 
@@ -31,12 +31,12 @@ stdenv.mkDerivation rec {
 
   configureScript = "sh autogen.sh";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ autoconf automake gtk-doc lvm2 libxslt.bin
     libtool readline gobject-introspection json-glib libuuid
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tool and library for managing Microsoft Windows Dynamic Disks";
     homepage = "https://github.com/mdbooth/libldm";
     maintainers = with maintainers; [ jensbin ];
diff --git a/pkgs/tools/misc/less/default.nix b/pkgs/tools/misc/less/default.nix
index 9b1aa0dc590..d63861ace33 100644
--- a/pkgs/tools/misc/less/default.nix
+++ b/pkgs/tools/misc/less/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchurl, ncurses, lessSecure ? false }:
+{ lib, stdenv, fetchurl, ncurses, lessSecure ? false }:
 
 stdenv.mkDerivation rec {
   pname = "less";
-  version = "551";
+  version = "581.2";
 
   src = fetchurl {
-    url = "http://www.greenwoodsoftware.com/${pname}/${pname}-${version}.tar.gz";
-    sha256 = "0ggyjl3yzn7c450zk1rixi9ls6asdhgqynhk34zsd0ckhmsm45pz";
+    url = "https://www.greenwoodsoftware.com/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "0fyqslvrasv19qjvqrwfwz2n7mnm93y61x9bcx09ga90mxyb8d6f";
   };
 
   configureFlags = [ "--sysconfdir=/etc" ] # Look for ‘sysless’ in /etc.
-    ++ stdenv.lib.optional lessSecure [ "--with-secure" ];
+    ++ lib.optional lessSecure [ "--with-secure" ];
 
   buildInputs = [ ncurses ];
 
-  meta = with stdenv.lib; {
-    homepage = "http://www.greenwoodsoftware.com/less/";
+  meta = with lib; {
+    homepage = "https://www.greenwoodsoftware.com/less/";
     description = "A more advanced file pager than ‘more’";
     platforms = platforms.unix;
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/lesspipe/default.nix b/pkgs/tools/misc/lesspipe/default.nix
index 231e660f582..5c8a13e3c20 100644
--- a/pkgs/tools/misc/lesspipe/default.nix
+++ b/pkgs/tools/misc/lesspipe/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchFromGitHub, substituteAll, perl, file, ncurses }:
+{ lib, stdenv, fetchFromGitHub, substituteAll, perl, file, ncurses }:
 
 stdenv.mkDerivation rec {
   pname = "lesspipe";
-  version = "1.84";
+  version = "1.85";
 
   buildInputs = [ perl ];
   preConfigure = "patchShebangs .";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
     owner = "wofr06";
     repo = "lesspipe";
     rev = version;
-    sha256 = "124ffhzrikr88ab14rk6753n8adxijpmg7q3zx7nmqc52wpkfd8q";
+    sha256 = "1v1jdkdq1phc93gdr6mjlk98gipxrkkq4bj8kks0kfdvjgdwkdaa";
   };
 
   patches = [
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     })
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A preprocessor for less";
     longDescription = ''
       Usually lesspipe.sh is called as an input filter to less. With the help
diff --git a/pkgs/tools/misc/lf/default.nix b/pkgs/tools/misc/lf/default.nix
index a00fd7494d8..8aa8e9a663b 100644
--- a/pkgs/tools/misc/lf/default.nix
+++ b/pkgs/tools/misc/lf/default.nix
@@ -2,18 +2,16 @@
 
 buildGoModule rec {
   pname = "lf";
-  version = "16";
+  version = "24";
 
   src = fetchFromGitHub {
     owner = "gokcehan";
     repo = "lf";
     rev = "r${version}";
-    sha256 = "174h6xnm3amayf0wfiai16m8qnkx54h5zy4rs7j3yzycd7sirs5b";
+    sha256 = "0nc7vfkaxxl2a201wnbz74an3siz8cjwrfylx17v6al5n93vxip0";
   };
 
-  vendorSha256 = "10na3jzvln353ygcvbhj4243yr83skw5zf3r2n8p6d7i83i86c8w";
-
-  doCheck = false;
+  vendorSha256 = "sha256-ujQh4aE++K/fn3PJqkAbTtwRyJPSI9TJQ1DvwLF9etU=";
 
   nativeBuildInputs = [ installShellFiles ];
 
@@ -37,6 +35,6 @@ buildGoModule rec {
     changelog = "https://github.com/gokcehan/lf/releases/tag/r${version}";
     license = licenses.mit;
     platforms = platforms.unix;
-    maintainers = with maintainers; [ primeos ];
+    maintainers = with maintainers; [ dotlambda ];
   };
 }
diff --git a/pkgs/tools/misc/libbitcoin/libbitcoin-client.nix b/pkgs/tools/misc/libbitcoin/libbitcoin-client.nix
index bad820c1506..a940fba2967 100644
--- a/pkgs/tools/misc/libbitcoin/libbitcoin-client.nix
+++ b/pkgs/tools/misc/libbitcoin/libbitcoin-client.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook
 , boost, libbitcoin, libbitcoin-protocol }:
 
 let
@@ -15,7 +15,7 @@ in stdenv.mkDerivation {
     sha256 = "0a9c00f1pfi8wczbfd1djkvr7di3iw1ynak6if910w01dkhbm6v4";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   propagatedBuildInputs = [ libbitcoin libbitcoin-protocol ];
 
   enableParallelBuilding = true;
@@ -26,11 +26,11 @@ in stdenv.mkDerivation {
     "--with-boost-libdir=${boost.out}/lib"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Bitcoin client query library";
     homepage = "https://github.com/libbitcoin/libbitcoin-client";
     platforms = platforms.linux ++ platforms.darwin;
-    maintainers = with maintainers; [ chris-martin ];
+    maintainers = with maintainers; [ ];
 
     # AGPL with a lesser clause
     license = licenses.agpl3;
diff --git a/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix b/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix
index 93d8ceed2b4..7d00e4c09ad 100644
--- a/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix
+++ b/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook
 , boost, libbitcoin-client, libbitcoin-network }:
 
 let
@@ -15,7 +15,7 @@ in stdenv.mkDerivation {
     sha256 = "033nrdzrha4kypxk4biixjsbjd16r4m2mjvpid4gdj5hzbbj1p93";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ libbitcoin-client libbitcoin-network ];
 
   enableParallelBuilding = true;
@@ -27,11 +27,11 @@ in stdenv.mkDerivation {
     "--with-bash-completiondir=$out/share/bash-completion/completions"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Bitcoin command line tool";
     homepage = "https://github.com/libbitcoin/libbitcoin-explorer";
     platforms = platforms.linux ++ platforms.darwin;
-    maintainers = with maintainers; [ chris-martin asymmetric ];
+    maintainers = with maintainers; [ asymmetric ];
 
     # AGPL with a lesser clause
     license = licenses.agpl3;
diff --git a/pkgs/tools/misc/libbitcoin/libbitcoin-network.nix b/pkgs/tools/misc/libbitcoin/libbitcoin-network.nix
index fc660687ffc..48dab31e9a8 100644
--- a/pkgs/tools/misc/libbitcoin/libbitcoin-network.nix
+++ b/pkgs/tools/misc/libbitcoin/libbitcoin-network.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook
 , boost, libbitcoin, zeromq }:
 
 let
@@ -15,7 +15,7 @@ in stdenv.mkDerivation {
     sha256 = "0vqg3i40kwmbys4lyp82xvg2nx3ik4qhc66gcm8k66a86wpj9ji6";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ libbitcoin zeromq ];
 
   enableParallelBuilding = true;
@@ -26,7 +26,7 @@ in stdenv.mkDerivation {
     "--with-boost-libdir=${boost.out}/lib"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Bitcoin P2P Network Library";
     homepage = "https://libbitcoin.org/";
     platforms = platforms.linux ++ platforms.darwin;
diff --git a/pkgs/tools/misc/libbitcoin/libbitcoin-protocol.nix b/pkgs/tools/misc/libbitcoin/libbitcoin-protocol.nix
index a5467fdcbd7..1d8af4a336b 100644
--- a/pkgs/tools/misc/libbitcoin/libbitcoin-protocol.nix
+++ b/pkgs/tools/misc/libbitcoin/libbitcoin-protocol.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook
 , boost, libbitcoin, secp256k1, zeromq }:
 
 let
@@ -15,7 +15,7 @@ in stdenv.mkDerivation {
     sha256 = "1ln9r04hlnc7qmv17rakyhrnzw1a541pg5jc1sw3ccn90a5x6cfv";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ libbitcoin secp256k1 ];
   propagatedBuildInputs = [ zeromq ];
 
@@ -27,7 +27,7 @@ in stdenv.mkDerivation {
     "--with-boost-libdir=${boost.out}/lib"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Bitcoin Blockchain Query Protocol";
     homepage = "https://libbitcoin.org/";
     platforms = platforms.linux ++ platforms.darwin;
diff --git a/pkgs/tools/misc/libbitcoin/libbitcoin.nix b/pkgs/tools/misc/libbitcoin/libbitcoin.nix
index e68635585d0..b4f91bc936d 100644
--- a/pkgs/tools/misc/libbitcoin/libbitcoin.nix
+++ b/pkgs/tools/misc/libbitcoin/libbitcoin.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook
 , boost, secp256k1 }:
 
 let
@@ -15,7 +15,7 @@ in stdenv.mkDerivation {
     sha256 = "1rppyp3zpb6ymwangjpblwf6qh4y3d1hczrjx8aavmrq7hznnrhq";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
   propagatedBuildInputs = [ secp256k1 ];
 
@@ -27,11 +27,11 @@ in stdenv.mkDerivation {
     "--with-boost-libdir=${boost.out}/lib"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "C++ library for building bitcoin applications";
     homepage = "https://libbitcoin.org/";
     platforms = platforms.linux ++ platforms.darwin;
-    maintainers = with maintainers; [ chris-martin ];
+    maintainers = with maintainers; [ ];
 
     # AGPL with a lesser clause
     license = licenses.agpl3;
diff --git a/pkgs/tools/misc/libcpuid/default.nix b/pkgs/tools/misc/libcpuid/default.nix
index 873399c185b..8c4cb5c1a75 100644
--- a/pkgs/tools/misc/libcpuid/default.nix
+++ b/pkgs/tools/misc/libcpuid/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchFromGitHub, autoreconfHook }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   pname = "libcpuid";
-  version = "0.5.0";
+  version = "0.5.1";
 
   src = fetchFromGitHub {
     owner = "anrieff";
     repo = "libcpuid";
     rev = "v${version}";
-    sha256 = "13v5x8gyka2v4kx52khwalb6ai328z7kk9jlipbbbys63p6nyddr";
+    sha256 = "sha256-m10LdtwBk1Lx31AJ4HixEYaCkT7EHpF9+tOV1rSA6VU=";
   };
 
   patches = [
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ autoreconfHook ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://libcpuid.sourceforge.net/";
     description = "A small C library for x86 CPU detection and feature extraction";
     license = licenses.bsd2;
diff --git a/pkgs/tools/misc/librespeed-cli/default.nix b/pkgs/tools/misc/librespeed-cli/default.nix
new file mode 100644
index 00000000000..09d6de6ad9d
--- /dev/null
+++ b/pkgs/tools/misc/librespeed-cli/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "librespeed-cli";
+  version = "1.0.9";
+
+  src = fetchFromGitHub {
+    owner = "librespeed";
+    repo = "speedtest-cli";
+    rev = "v${version}";
+    sha256 = "sha256-rtZZgx5QNwYd6vXSts/ICSiXv7sMZA8ihHgxTjZ/6KQ=";
+  };
+
+  vendorSha256 = "sha256-psZyyySpY06J+ji+9uHUtX7Ks1hzZC3zINszYP75NfQ=";
+
+  # Tests have additonal requirements
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command line client for LibreSpeed";
+    homepage = "https://github.com/librespeed/speedtest-cli";
+    license = with licenses; [ lgpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/misc/lice/default.nix b/pkgs/tools/misc/lice/default.nix
index f4653f81f3a..4cb3f794fd4 100644
--- a/pkgs/tools/misc/lice/default.nix
+++ b/pkgs/tools/misc/lice/default.nix
@@ -1,20 +1,19 @@
-{ stdenv, fetchFromGitHub, python3Packages }:
+{ lib, buildPythonPackage, fetchPypi , setuptools, pytestCheckHook }:
 
-python3Packages.buildPythonPackage rec {
+buildPythonPackage rec {
+  pname = "lice";
+  version = "0.6";
 
-  version = "0.4";
-  name = "lice-${version}";
-
-  src = fetchFromGitHub {
-    owner = "licenses";
-    repo = "lice";
-    rev = version;
-    sha256 = "0yxf70fi8ds3hmwjply2815k466r99k8n22r0ppfhwjvp3rn60qx";
-    fetchSubmodules = true;
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0skyyirbidknfdzdvsjga8zb4ar6xpd5ilvz11dfm2a9yxh3d59d";
   };
 
-  meta = with stdenv.lib; {
-    description = "Print license based on selection and user options.";
+  propagatedBuildInputs = [ setuptools ];
+
+  checkInputs = [ pytestCheckHook ];
+  meta = with lib; {
+    description = "Print license based on selection and user options";
     homepage = "https://github.com/licenses/lice";
     license = licenses.bsd3;
     maintainers = with maintainers; [ swflint ];
diff --git a/pkgs/tools/misc/licensor/default.nix b/pkgs/tools/misc/licensor/default.nix
index 3a87e0a1bb8..6cf31c7835c 100644
--- a/pkgs/tools/misc/licensor/default.nix
+++ b/pkgs/tools/misc/licensor/default.nix
@@ -1,27 +1,22 @@
-{ lib, rustPlatform, fetchFromGitHub, fetchpatch }:
+{ lib, rustPlatform, fetchFromGitHub }:
 
 rustPlatform.buildRustPackage rec {
   pname = "licensor";
-  version = "2.1.0";
+  version = "unstable-2021-02-03";
 
   src = fetchFromGitHub {
     owner = "raftario";
     repo = pname;
-    rev = "v${version}";
-    sha256 = "0zr8hcq7crmhrdhwcclc0nap68wvg5kqn5l93ha0vn9xgjy8z11p";
+    rev = "1897882a708ec6ed65a9569ae0e07d6ea576c652";
+    sha256 = "0x0lkfrj7jka0p6nx6i9syz0bnzya5z9np9cw09zm1c9njv9mm32";
   };
 
-  patches = [ (fetchpatch {
-    url = "https://github.com/raftario/licensor/commit/77ae1ea6d9b6de999ee7590d9dbd3c8465d70bb6.patch";
-    sha256 = "0kfyg06wa2v7swm7hs9kkazjg34mircd4nm4qmljyzjh2yh8icg3";
-  })];
-
-  cargoSha256 = "1z2r8nfizifj8sk1ghppyqk5r65sgmbk47fiq95pnwpadm5drvqa";
+  cargoSha256 = "1h66d1brx441bg7vzbqdish4avgmc6h7rrkw2qf1siwmplwqqhw0";
 
   meta = with lib; {
     description = "Write licenses to stdout";
     homepage = "https://github.com/raftario/licensor";
     license = licenses.mit;
-    maintainers = with maintainers; [ filalex77 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/misc/lifecycled/default.nix b/pkgs/tools/misc/lifecycled/default.nix
new file mode 100644
index 00000000000..1c30b760a9c
--- /dev/null
+++ b/pkgs/tools/misc/lifecycled/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+buildGoModule rec {
+  pname = "lifecycled";
+  version = "3.1.0";
+
+  src = fetchFromGitHub {
+    owner = "buildkite";
+    repo = "lifecycled";
+    rev = "v${version}";
+    sha256 = "F9eovZpwbigP0AMdjAIxULPLDC3zO6GxQmPdt5Xvpkk=";
+  };
+
+  vendorSha256 = "q5wYKSLHRzL+UGn29kr8+mUupOPR1zohTscbzjMRCS0=";
+
+  postInstall = ''
+    mkdir -p $out/lib/systemd/system
+    substitute init/systemd/lifecycled.unit $out/lib/systemd/system/lifecycled.service \
+      --replace /usr/bin/lifecycled $out/bin/lifecycled
+  '';
+
+  meta = with lib; {
+    description = "A daemon for responding to AWS AutoScaling Lifecycle Hooks";
+    homepage = "https://github.com/buildkite/lifecycled/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cole-h grahamc ];
+  };
+}
+
diff --git a/pkgs/tools/misc/lilo/default.nix b/pkgs/tools/misc/lilo/default.nix
new file mode 100644
index 00000000000..2babcb2bedd
--- /dev/null
+++ b/pkgs/tools/misc/lilo/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, lib, fetchurl, dev86, sharutils }:
+
+stdenv.mkDerivation rec {
+  pname = "lilo";
+  version = "24.2";
+  src = fetchurl {
+    url = "https://www.joonet.de/lilo/ftp/sources/${pname}-${version}.tar.gz";
+    hash = "sha256-4VjxneRWDJNevgUHwht5v/F2GLkjDYB2/oxf/5/b1bE=";
+  };
+  nativeBuildInputs = [ dev86 sharutils ];
+  DESTDIR = placeholder "out";
+
+  meta = with lib; {
+    homepage = "https://www.joonet.de/lilo/";
+    description = "Linux bootloader";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ kaction ];
+  };
+}
diff --git a/pkgs/tools/misc/linuxquota/default.nix b/pkgs/tools/misc/linuxquota/default.nix
index b6b722379da..729dc41a107 100644
--- a/pkgs/tools/misc/linuxquota/default.nix
+++ b/pkgs/tools/misc/linuxquota/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, e2fsprogs, openldap, pkgconfig }:
+{ lib, stdenv, fetchurl, e2fsprogs, openldap, pkg-config }:
 
 stdenv.mkDerivation rec {
   version = "4.05";
@@ -11,10 +11,10 @@ stdenv.mkDerivation rec {
 
   outputs = [ "out" "dev" "doc" "man" ];
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ e2fsprogs openldap ];
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/misc/livedl/default.nix b/pkgs/tools/misc/livedl/default.nix
new file mode 100644
index 00000000000..b989fe27a65
--- /dev/null
+++ b/pkgs/tools/misc/livedl/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "livedl";
+  version = "unstable-2021-05-16";
+
+  src = fetchFromGitHub {
+    owner = "himananiito";
+    repo = pname;
+    rev = "a8720f1e358e5b0ade6fdeb8aacc00781e6cc504";
+    sha256 = "1zax215jp6sl47m8ahssyyrbzn96dh74srq9g61jc76sq10xg329";
+  };
+
+  sourceRoot = "source/src";
+
+  vendorSha256 = sha256:g5Y1IH1U1zOOHygTzAJuBnUj+MyPe64KHTYikipt3TY=;
+
+  meta = with lib; {
+    description = "Command-line tool to download nicovideo.jp livestreams";
+    homepage = "https://github.com/himananiito/livedl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ wakira ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/pkgs/tools/misc/lnav/default.nix b/pkgs/tools/misc/lnav/default.nix
index aab980d76e7..373687fafdf 100644
--- a/pkgs/tools/misc/lnav/default.nix
+++ b/pkgs/tools/misc/lnav/default.nix
@@ -1,16 +1,15 @@
-{ stdenv, fetchFromGitHub, pcre-cpp, sqlite, ncurses
+{ lib, stdenv, fetchFromGitHub, pcre-cpp, sqlite, ncurses
 , readline, zlib, bzip2, autoconf, automake, curl }:
 
 stdenv.mkDerivation rec {
-
-  name = "lnav-${meta.version}";
+  pname = "lnav";
+  version = "0.9.0";
 
   src = fetchFromGitHub {
     owner = "tstack";
     repo = "lnav";
-    rev = "v${meta.version}";
-    sha256 = "0z8bsr0falxlkmd1b5gy871vyafyih0sw7lgg858lqnbsy0q2m4i";
-    inherit name;
+    rev = "v${version}";
+    sha256 = "1frdrr3yjlk2fns3ny0qbr30rpswhwlvv3kyhdl3l6a0q5cqaqsg";
   };
 
   buildInputs = [
@@ -25,11 +24,15 @@ stdenv.mkDerivation rec {
     curl
   ];
 
+  postPatch = ''
+    sed -ie '/DUMP_INTERNALS/d' src/Makefile.am
+  '';
+
   preConfigure = ''
     ./autogen.sh
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/tstack/lnav";
     description = "The Logfile Navigator";
     longDescription = ''
@@ -43,7 +46,6 @@ stdenv.mkDerivation rec {
     '';
     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/pkgs/tools/misc/lnch/default.nix b/pkgs/tools/misc/lnch/default.nix
index 51b9b94ef70..a9c73652539 100644
--- a/pkgs/tools/misc/lnch/default.nix
+++ b/pkgs/tools/misc/lnch/default.nix
@@ -1,21 +1,22 @@
-{ stdenv, fetchFromGitHub, buildGoPackage }:
+{ lib, fetchFromGitHub, buildGoPackage }:
 
 buildGoPackage rec {
   pname = "lnch";
-  version = "2017-02-16";
+  version = "unstable-2021-02-10";
 
   goPackagePath = "github.com/oem/${pname}";
 
   src = fetchFromGitHub {
     owner = "oem";
     repo = pname;
-    rev = "f24eed5392f01d2c8a9cfe9cdf70dcfbbf4b6b36";
-    sha256 = "0skzrjnbxq1yj7y64cq7angp4wqnrgw1xp9v8vw9zp8f8zwmpy0y";
+    rev = "6ed336dd893afa071178b8ac6f6297d23fc55514";
+    sha256 = "K2TV+mx6C3/REJyDpC6a/Zn/ZZFxkDMC3EnkveH6YNQ=";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/oem/lnch";
-    description = "A small go app that launches a process and moves it out of the process group";
-    license = licenses.publicDomain; # really I don't know
+    description = "Launches a process and moves it out of the process group";
+    license = licenses.mit;
+    platforms = with platforms; all;
   };
 }
diff --git a/pkgs/tools/misc/loadlibrary/default.nix b/pkgs/tools/misc/loadlibrary/default.nix
index d33f6d8610a..e6d19fc6d40 100644
--- a/pkgs/tools/misc/loadlibrary/default.nix
+++ b/pkgs/tools/misc/loadlibrary/default.nix
@@ -1,11 +1,11 @@
-{ cabextract, fetchFromGitHub, readline, stdenv_32bit }:
+{ lib, 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}";
+  version = "20170525-${lib.strings.substring 0 7 rev}";
   rev = "721b084c088d779075405b7f20c77c2578e2a961";
   src = fetchFromGitHub {
     inherit rev;
@@ -21,7 +21,7 @@ stdenv_32bit.mkDerivation rec {
     cp mpclient $out/bin/
   '';
 
-  meta = with stdenv_32bit.lib; {
+  meta = with lib; {
     homepage = "https://github.com/taviso/loadlibrary";
     description = "Porting Windows Dynamic Link Libraries to Linux";
     platforms = platforms.linux;
diff --git a/pkgs/tools/misc/lockfile-progs/default.nix b/pkgs/tools/misc/lockfile-progs/default.nix
index e30b36919b7..68c2fb781f8 100644
--- a/pkgs/tools/misc/lockfile-progs/default.nix
+++ b/pkgs/tools/misc/lockfile-progs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, liblockfile }:
+{ lib, stdenv, fetchurl, liblockfile }:
 
 stdenv.mkDerivation rec {
   _name   = "lockfile-progs";
@@ -21,9 +21,9 @@ stdenv.mkDerivation rec {
   meta = {
     description = "Programs for locking and unlocking files and mailboxes";
     homepage = "http://packages.debian.org/sid/lockfile-progs";
-    license = stdenv.lib.licenses.gpl2;
+    license = lib.licenses.gpl2;
 
-    maintainers = [ stdenv.lib.maintainers.bluescreen303 ];
-    platforms = stdenv.lib.platforms.all;
+    maintainers = [ lib.maintainers.bluescreen303 ];
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/logstash/6.x.nix b/pkgs/tools/misc/logstash/6.x.nix
index ec8106e922a..1c7ab29cbc8 100644
--- a/pkgs/tools/misc/logstash/6.x.nix
+++ b/pkgs/tools/misc/logstash/6.x.nix
@@ -1,14 +1,15 @@
 { elk6Version
 , enableUnfree ? true
-, stdenv
+, lib, stdenv
 , fetchurl
 , makeWrapper
+, nixosTests
 , jre
 }:
 
-with stdenv.lib;
+with lib;
 
-stdenv.mkDerivation rec {
+let this = stdenv.mkDerivation rec {
   version = elk6Version;
   name = "logstash-${optionalString (!enableUnfree) "oss-"}${version}";
 
@@ -30,6 +31,7 @@ stdenv.mkDerivation rec {
   ];
 
   installPhase = ''
+    runHook preInstall
     mkdir -p $out
     cp -r {Gemfile*,modules,vendor,lib,bin,config,data,logstash-core,logstash-core-plugin-api} $out
 
@@ -41,13 +43,22 @@ stdenv.mkDerivation rec {
 
     wrapProgram $out/bin/logstash-plugin \
        --set JAVA_HOME "${jre}"
+    runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
-    description = "Logstash is a data pipeline that helps you process logs and other event data from a variety of systems";
+  meta = with lib; {
+    description = "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 ];
   };
-}
+  passthru.tests =
+    optionalAttrs (!enableUnfree) (
+      assert this.drvPath == nixosTests.elk.ELK-6.elkPackages.logstash.drvPath;
+      {
+        elk = nixosTests.elk.ELK-6;
+      }
+    );
+};
+in this
diff --git a/pkgs/tools/misc/logstash/7.x.nix b/pkgs/tools/misc/logstash/7.x.nix
index e7872b0c406..1abc0ff9bf8 100644
--- a/pkgs/tools/misc/logstash/7.x.nix
+++ b/pkgs/tools/misc/logstash/7.x.nix
@@ -1,14 +1,15 @@
 { elk7Version
 , enableUnfree ? true
-, stdenv
+, lib, stdenv
 , fetchurl
 , makeWrapper
+, nixosTests
 , jre
 }:
 
-with stdenv.lib;
+with lib;
 
-stdenv.mkDerivation rec {
+let this = stdenv.mkDerivation rec {
   version = elk7Version;
   name = "logstash-${optionalString (!enableUnfree) "oss-"}${version}";
 
@@ -30,6 +31,7 @@ stdenv.mkDerivation rec {
   ];
 
   installPhase = ''
+    runHook preInstall
     mkdir -p $out
     cp -r {Gemfile*,modules,vendor,lib,bin,config,data,logstash-core,logstash-core-plugin-api} $out
 
@@ -41,13 +43,22 @@ stdenv.mkDerivation rec {
 
     wrapProgram $out/bin/logstash-plugin \
        --set JAVA_HOME "${jre}"
+    runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
   };
-}
+  passthru.tests =
+    optionalAttrs (!enableUnfree) (
+      assert this.drvPath == nixosTests.elk.ELK-7.elkPackages.logstash.drvPath;
+      {
+        elk = nixosTests.elk.ELK-7;
+      }
+    );
+};
+in this
diff --git a/pkgs/tools/misc/logstash/contrib.nix b/pkgs/tools/misc/logstash/contrib.nix
index d03e031b7ae..d4c88dc32ed 100644
--- a/pkgs/tools/misc/logstash/contrib.nix
+++ b/pkgs/tools/misc/logstash/contrib.nix
@@ -1,7 +1,7 @@
 { stdenv, lib, fetchzip }:
 
 # Note that plugins are supposed to be installed as:
-#   $path/logstash/{inputs,codecs,filters,outputs}/*.rb 
+#   $path/logstash/{inputs,codecs,filters,outputs}/*.rb
 stdenv.mkDerivation rec {
   version = "1.4.2";
   pname = "logstash-contrib";
@@ -17,15 +17,17 @@ stdenv.mkDerivation rec {
   dontPatchShebangs = true;
 
   installPhase = ''
+    runHook preInstall
     mkdir -p $out/logstash
     cp -r lib/* $out
+    runHook postInstall
   '';
 
   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;
+    license     = lib.licenses.asl20;
+    platforms   = lib.platforms.unix;
     maintainers = with maintainers; [ cstrahan ];
   };
 }
diff --git a/pkgs/tools/misc/logtop/default.nix b/pkgs/tools/misc/logtop/default.nix
new file mode 100644
index 00000000000..2113da9976f
--- /dev/null
+++ b/pkgs/tools/misc/logtop/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, uthash, pkg-config }:
+
+stdenv.mkDerivation {
+  name = "logtop-0.7";
+
+  src = fetchFromGitHub {
+    rev = "a0935ab2e7056feb3e8a90f5129990c9b335a587";
+    owner = "JulienPalard";
+    repo  ="logtop";
+    sha256 = "1f8vk9gybldxvc0kwz38jxmwvzwangsvlfslpsx8zf04nvbkqi12";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ ncurses uthash ];
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  postConfigure = ''
+    substituteInPlace Makefile --replace /usr ""
+  '';
+
+  meta = with lib; {
+    description = "Displays a real-time count of strings received from stdin";
+    longDescription = ''
+      logtop displays a real-time count of strings received from stdin.
+      It can be useful in some cases, like getting the IP flooding your
+      server or the top buzzing article of your blog
+    '';
+    license = licenses.bsd2;
+    homepage = "https://github.com/JulienPalard/logtop";
+    platforms = platforms.unix;
+    maintainers = [ maintainers.starcraft66 ];
+  };
+}
diff --git a/pkgs/tools/misc/lokalise2-cli/default.nix b/pkgs/tools/misc/lokalise2-cli/default.nix
index 3705d7df6f0..6c1f1759084 100644
--- a/pkgs/tools/misc/lokalise2-cli/default.nix
+++ b/pkgs/tools/misc/lokalise2-cli/default.nix
@@ -1,17 +1,17 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "lokalise2-cli";
-  version = "2.6.0";
+  version = "2.6.4";
 
   src = fetchFromGitHub {
     owner = "lokalise";
     repo = "lokalise-cli-2-go";
     rev = "v${version}";
-    sha256 = "15lwy2rrb5d5r0asa51bgjr42pcknk6znx6qirw9s924i8dbzp6s";
+    sha256 = "sha256-D/I1I7r3IuDz1MZZrzKVMhdLIZxbN2bYeGmqJVlUU6g=";
   };
 
-  vendorSha256 = "06y1v0v1kkbd5vxa8h0qvasm9ibwwhz0v4x03k3nb5xlwn0x9jx8";
+  vendorSha256 = "sha256-iWYlbGeLp/SiF8/OyWGIHJQB1RJjma9/EDc3zOsjNG8=";
 
   doCheck = false;
 
@@ -19,8 +19,8 @@ buildGoModule rec {
     mv $out/bin/lokalise-cli-2-go $out/bin/lokalise2
   '';
 
-  meta = with stdenv.lib; {
-    description = "Translation platform for developers. Upload language files, translate, integrate via API.";
+  meta = with lib; {
+    description = "Translation platform for developers. Upload language files, translate, integrate via API";
     homepage = "https://lokalise.com";
     license = licenses.bsd3;
     maintainers = with maintainers; [ timstott ];
diff --git a/pkgs/tools/misc/lolcat/gemset.nix b/pkgs/tools/misc/lolcat/gemset.nix
index 421e1874db7..9d71d400a69 100644
--- a/pkgs/tools/misc/lolcat/gemset.nix
+++ b/pkgs/tools/misc/lolcat/gemset.nix
@@ -40,4 +40,4 @@
     };
     version = "2.2.0";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/misc/loop/default.nix b/pkgs/tools/misc/loop/default.nix
index 3cc0466d80a..17491b645d4 100644
--- a/pkgs/tools/misc/loop/default.nix
+++ b/pkgs/tools/misc/loop/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform }:
+{ lib, fetchFromGitHub, rustPlatform }:
 
 rustPlatform.buildRustPackage {
   pname = "loop";
@@ -11,9 +11,9 @@ rustPlatform.buildRustPackage {
     sha256 = "0v61kahwk1kdy8pb40rjnzcxby42nh02nyg9jqqpx3vgdrpxlnix";
   };
 
-  cargoSha256 = "0a3l580ca23vx8isd1qff870ci3p7wf4qrm53jl7nhfjh7rg5a4w";
+  cargoSha256 = "0pk6hwmzs58vgbkvmlpa4s4cd29izp6xq17zaix5v2didbzr5ixi";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "UNIX's missing `loop` command";
     homepage = "https://github.com/Miserlou/Loop";
     maintainers = with maintainers; [ koral ];
diff --git a/pkgs/tools/misc/lorri/default.nix b/pkgs/tools/misc/lorri/default.nix
index 8c544d3f0db..94720f11937 100644
--- a/pkgs/tools/misc/lorri/default.nix
+++ b/pkgs/tools/misc/lorri/default.nix
@@ -1,51 +1,43 @@
-{ stdenv
+{ lib
+, stdenv
 , pkgs
+, rustPackages
 , fetchFromGitHub
 , rustPlatform
-  # Updater script
-, runtimeShell
 , writers
-  # Tests
 , nixosTests
-  # Apple dependencies
 , CoreServices
 , Security
 }:
 
 let
   # Run `eval $(nix-build -A lorri.updater)` after updating the revision!
-  version = "1.2";
-  gitRev = "43a260c221d5dac4a44fd82271736c8444474eec";
-  sha256 = "0g6zq27dpr8bdan5xrqchybpbqwnhhc7x8sxbfygigbqd3xv9i6n";
-  cargoSha256 = "1zmlp14v7av0znmjyy2aq83lc74503p6r0l11l9iw7s3xad8rda4";
+  version = "1.5.0";
+  gitRev = "f4b6a135e2efb18b3a679e3946d4d070a1c45a2c";
+  sha256 = "0irgzw7vwhvm97nmylj44x2dnd8pwf47gvlgw7fj58fj67a0l8fr";
+  cargoSha256 = "18l7yxciqcvagsg9lykilfhr104a4qqdydjkjysxgd197xalxgzr";
 
 in (rustPlatform.buildRustPackage rec {
   pname = "lorri";
   inherit version;
 
-  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";
+    owner = "nix-community";
     repo = pname;
     rev = gitRev;
     inherit sha256;
   };
 
+  outputs = [ "out" "man" "doc" ];
+
   inherit cargoSha256;
   doCheck = false;
 
   BUILD_REV_COUNT = src.revCount or 1;
-  RUN_TIME_CLOSURE = pkgs.callPackage ./runtime.nix {};
+  RUN_TIME_CLOSURE = pkgs.callPackage ./runtime.nix { };
 
-  nativeBuildInputs = with pkgs; [ rustPackages.rustfmt ];
-  buildInputs =
-    stdenv.lib.optionals stdenv.isDarwin [ CoreServices Security ];
+  nativeBuildInputs = [ rustPackages.rustfmt ];
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices Security ];
 
   # copy the docs to the $man and $doc outputs
   postInstall = ''
@@ -68,7 +60,11 @@ in (rustPlatform.buildRustPackage rec {
       nixos = nixosTests.lorri;
     };
   };
-}).overrideAttrs (old: {
-  # add man and doc outputs to put our documentation into
-  outputs = old.outputs or [ "out" ] ++ [ "man" "doc" ];
+
+  meta = with lib; {
+    description = "Your project's nix-env";
+    homepage = "https://github.com/target/lorri";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ grahamc Profpatsch ];
+  };
 })
diff --git a/pkgs/tools/misc/lottieconverter/default.nix b/pkgs/tools/misc/lottieconverter/default.nix
index bf2a68df702..aae27cb652e 100644
--- a/pkgs/tools/misc/lottieconverter/default.nix
+++ b/pkgs/tools/misc/lottieconverter/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libpng, rlottie, zlib }:
+{ lib, stdenv, fetchFromGitHub, libpng, rlottie, zlib }:
 
 stdenv.mkDerivation rec {
   pname = "LottieConverter";
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/sot-tech/LottieConverter/";
     description = "Lottie converter utility";
     license = licenses.lgpl21Plus;
diff --git a/pkgs/tools/misc/lrzsz/default.nix b/pkgs/tools/misc/lrzsz/default.nix
index 112a14f55f2..09e90ca0794 100644
--- a/pkgs/tools/misc/lrzsz/default.nix
+++ b/pkgs/tools/misc/lrzsz/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, gettext, fetchurl, fetchpatch }:
 
 stdenv.mkDerivation rec {
   name = "lrzsz-0.12.20";
@@ -8,11 +8,21 @@ stdenv.mkDerivation rec {
     sha256 = "1wcgfa9fsigf1gri74gq0pa7pyajk12m4z69x7ci9c6x9fqkd2y2";
   };
 
+  patches = [
+    (fetchpatch {
+      name = "CVE-2018-10195.patch";
+      url = "https://bugzilla.redhat.com/attachment.cgi?id=79507";
+      sha256 = "0jlh8w0cjaz6k56f0h3a0h4wgc51axmrdn3mdspk7apjfzqcvx3c";
+    })
+  ];
+
+  nativeBuildInputs = [ gettext ];
+
   hardeningDisable = [ "format" ];
 
   configureFlags = [ "--program-transform-name=s/^l//" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://ohse.de/uwe/software/lrzsz.html";
     description = "Communication package providing the XMODEM, YMODEM ZMODEM file transfer protocols";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/lsd/default.nix b/pkgs/tools/misc/lsd/default.nix
index 73dcbd3bc3c..54b3b443d0a 100644
--- a/pkgs/tools/misc/lsd/default.nix
+++ b/pkgs/tools/misc/lsd/default.nix
@@ -1,4 +1,5 @@
-{ stdenv
+{ lib
+, nixosTests
 , fetchFromGitHub
 , rustPlatform
 , installShellFiles
@@ -6,26 +7,31 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "lsd";
-  version = "0.17.0";
+  version = "0.20.1";
 
   src = fetchFromGitHub {
     owner = "Peltoche";
     repo = pname;
     rev = version;
-    sha256 = "1vyww54fl4yfvszr0dh8ym2jd9gilrccmwkvl7rbx70sfqzsgaai";
+    sha256 = "sha256-r/Rllu+tgKqz+vkxA8BSN+3V0lUUd6dEATfickQp4+s=";
   };
 
-  cargoSha256 = "13g0p6zh2b1z005lszll098d4lv62dzsxwhl76bianzrydif61lr";
+  cargoSha256 = "sha256-O8P29eYlHgmmAADZ/DgTBmj0ZOa+4u/Oee+TMF+/4Ro=";
 
   nativeBuildInputs = [ installShellFiles ];
   postInstall = ''
     installShellCompletion $releaseDir/build/lsd-*/out/{_lsd,lsd.{bash,fish}}
   '';
 
-  meta = with stdenv.lib; {
+  # Found argument '--test-threads' which wasn't expected, or isn't valid in this context
+  doCheck = false;
+
+  passthru.tests = { inherit (nixosTests) lsd; };
+
+  meta = with lib; {
     homepage = "https://github.com/Peltoche/lsd";
     description = "The next gen ls command";
     license = licenses.asl20;
-    maintainers = with maintainers; [ filalex77 marsam ];
+    maintainers = with maintainers; [ Br1ght0ne marsam zowoq SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/misc/ltunify/default.nix b/pkgs/tools/misc/ltunify/default.nix
index e345f86e021..df425162d84 100644
--- a/pkgs/tools/misc/ltunify/default.nix
+++ b/pkgs/tools/misc/ltunify/default.nix
@@ -1,23 +1,26 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, 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
+# 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 {
+stdenv.mkDerivation rec {
   pname = "ltunify";
-  version = "unstable-20180330";
+  version = "0.3";
 
   src = fetchFromGitHub {
-    owner  = "Lekensteyn";
-    repo   = "ltunify";
-    rev    = "f664d1d41d5c4beeac5b81e485c3498f13109db7";
-    sha256 = "07sqhih9jmm7vgiwqsjzihd307cj7l096sxjl25p7nwr1q4180wv";
+    owner = "Lekensteyn";
+    repo = "ltunify";
+    rev = "v${version}";
+    sha256 = "sha256-9avri/2H0zv65tkBsIi9yVxx3eVS9oCkVCCFdjXqSgI=";
   };
 
   makeFlags = [ "DESTDIR=$(out)" "bindir=/bin" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tool for working with Logitech Unifying receivers and devices";
+    longDescription = ''
+      This tool requires either to be run with root/sudo or alternatively to have the udev rules files installed. On NixOS this can be achieved by setting `hardware.logitech.wireless.enable`.
+    '';
     homepage = "https://lekensteyn.nl/logitech-unifying.html";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ abbradar ];
diff --git a/pkgs/tools/misc/macchina/default.nix b/pkgs/tools/misc/macchina/default.nix
new file mode 100644
index 00000000000..053240e2119
--- /dev/null
+++ b/pkgs/tools/misc/macchina/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, installShellFiles
+, libiconv, Foundation }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "macchina";
+  version = "0.9.2";
+
+  src = fetchFromGitHub {
+    owner = "Macchina-CLI";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256:0d6nqjn2828kk91430yjl6xlwx1j10xhp2i0vv2slm3wv0a4w24x";
+  };
+
+  cargoSha256 = "sha256:0mjqqd43jj6hxicgjkvmdf966vj5xf0ndibszzwp38zdb5kzshqi";
+
+  nativeBuildInputs = [ installShellFiles ];
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Foundation ];
+
+  postInstall = ''
+    installShellCompletion target/completions/*.{bash,fish}
+  '';
+
+  meta = with lib; {
+    description = "A fast, minimal and customizable system information fetcher";
+    homepage = "https://github.com/Macchina-CLI/macchina";
+    changelog = "https://github.com/Macchina-CLI/macchina/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ _414owen ];
+  };
+}
diff --git a/pkgs/tools/misc/makebootfat/default.nix b/pkgs/tools/misc/makebootfat/default.nix
index dc66976720d..1f512d04a22 100644
--- a/pkgs/tools/misc/makebootfat/default.nix
+++ b/pkgs/tools/misc/makebootfat/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "makebootfat-1.4";
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "0v0g1xax0y6hmw2x10nfhchp9n7vqyvgc33gcxqax8jdq2pxm1q2";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Create bootable USB disks using the FAT filesystem and syslinux";
     homepage = "http://advancemame.sourceforge.net/boot-readme.html";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/man-db/default.nix b/pkgs/tools/misc/man-db/default.nix
index 68e1aaa4d61..9c8adc1d8d4 100644
--- a/pkgs/tools/misc/man-db/default.nix
+++ b/pkgs/tools/misc/man-db/default.nix
@@ -1,17 +1,17 @@
-{ stdenv, fetchurl, pkgconfig, libpipeline, db, groff, libiconv, makeWrapper, buildPackages }:
+{ lib, stdenv, fetchurl, pkg-config, libpipeline, db, groff, libiconv, makeWrapper, buildPackages }:
 
 stdenv.mkDerivation rec {
-  name = "man-db-2.9.3";
+  name = "man-db-2.9.4";
 
   src = fetchurl {
     url = "mirror://savannah/man-db/${name}.tar.xz";
-    sha256 = "1f4palf5bdyf3f8sa0981cqxn9cjcr2pz53ngrrsybb9n0da2nps";
+    sha256 = "sha256-tmyZ7frRatkoyIn4fPdjgCY8FgkyPCgLOp5pY/2xZ1Y=";
   };
 
   outputs = [ "out" "doc" ];
   outputMan = "out"; # users will want `man man` to work
 
-  nativeBuildInputs = [ pkgconfig makeWrapper groff ];
+  nativeBuildInputs = [ pkg-config makeWrapper groff ];
   buildInputs = [ libpipeline db groff ]; # (Yes, 'groff' is both native and build input)
   checkInputs = [ libiconv /* for 'iconv' binary */ ];
 
@@ -37,7 +37,7 @@ stdenv.mkDerivation rec {
     "--with-systemdtmpfilesdir=${placeholder "out"}/lib/tmpfiles.d"
     "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
     "--with-pager=less"
-  ] ++ stdenv.lib.optional stdenv.hostPlatform.isDarwin [
+  ] ++ lib.optional stdenv.hostPlatform.isDarwin [
     "ac_cv_func__set_invalid_parameter_handler=no"
     "ac_cv_func_posix_fadvise=no"
     "ac_cv_func_mempcpy=no"
@@ -56,7 +56,7 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  postFixup = stdenv.lib.optionalString (buildPackages.groff != groff) ''
+  postFixup = 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}
@@ -72,10 +72,11 @@ stdenv.mkDerivation rec {
 
   doCheck = !stdenv.hostPlatform.isMusl /* iconv binary */ && !stdenv.hostPlatform.isDarwin;
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms = lib.platforms.unix;
+    mainProgram = "man";
   };
 }
diff --git a/pkgs/tools/misc/mandoc/default.nix b/pkgs/tools/misc/mandoc/default.nix
index 82fc1dee00c..da756f764d4 100644
--- a/pkgs/tools/misc/mandoc/default.nix
+++ b/pkgs/tools/misc/mandoc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, zlib }:
+{ lib, stdenv, fetchurl, zlib }:
 
 stdenv.mkDerivation rec {
   pname = "mandoc";
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
     echo $configureLocal > configure.local
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://mandoc.bsd.lv/";
     description = "suite of tools compiling mdoc and man";
     downloadPage = "http://mandoc.bsd.lv/snapshots/";
diff --git a/pkgs/tools/misc/markdown-anki-decks/default.nix b/pkgs/tools/misc/markdown-anki-decks/default.nix
new file mode 100644
index 00000000000..d74eb84dc34
--- /dev/null
+++ b/pkgs/tools/misc/markdown-anki-decks/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "markdown-anki-decks";
+  version = "1.0.0";
+
+  format = "pyproject";
+
+  src = python3.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "R6T8KOHMb1Neg/RG5JQl9+7LxOkAoZL0L5wvVaqm9O0=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    genanki
+    typer
+    colorama
+    shellingham
+    beautifulsoup4
+    markdown
+    python-frontmatter
+  ];
+
+  postPatch = ''
+    # No API changes.
+    substituteInPlace pyproject.toml --replace 'python-frontmatter = "^0.5.0"' 'python-frontmatter = "^1.0.0"'
+  '';
+
+  # No tests available on Pypi and there is only a failing version assertion test in the repo.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Simple program to convert markdown files into anki decks";
+    maintainers = with maintainers; [ jtojnar ];
+    homepage = "https://github.com/lukesmurray/markdown-anki-decks";
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/marlin-calc/default.nix b/pkgs/tools/misc/marlin-calc/default.nix
index c7222f696c9..0e75af62231 100644
--- a/pkgs/tools/misc/marlin-calc/default.nix
+++ b/pkgs/tools/misc/marlin-calc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation {
   pname = "marlin-calc";
@@ -21,7 +21,7 @@ stdenv.mkDerivation {
     install -Dm0755 {,$out/bin/}marlin-calc
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/eyal0/Marlin";
     description = "Marlin 3D printer timing simulator";
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/mathpix-snipping-tool/default.nix b/pkgs/tools/misc/mathpix-snipping-tool/default.nix
new file mode 100644
index 00000000000..7e940ee4f77
--- /dev/null
+++ b/pkgs/tools/misc/mathpix-snipping-tool/default.nix
@@ -0,0 +1,31 @@
+{ appimageTools, lib, fetchurl }:
+let
+  pname = "mathpix-snipping-tool";
+  version = "03.00.0025";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://download.mathpix.com/linux/Mathpix_Snipping_Tool-x86_64.v${version}.AppImage";
+    sha256 = "0p39rsmjfz3m5s3k9pmmkqbp8f21s1cwjgspz8m47dq5jjls8ay8";
+  };
+
+  appimageContents = appimageTools.extract { inherit name src; };
+in appimageTools.wrapType2 {
+  inherit name src;
+
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+
+    install -m 444 -D ${appimageContents}/${pname}.desktop -t $out/share/applications
+
+    cp -r ${appimageContents}/usr/share/icons $out/share
+  '';
+
+  meta = with lib; {
+    description = "OCR tool to convert pictures to LaTeX.";
+    homepage = "https://mathpix.com/";
+    license = licenses.unfree;
+    maintainers = [ maintainers.hiro98 ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/pkgs/tools/misc/mbuffer/default.nix b/pkgs/tools/misc/mbuffer/default.nix
index 8b1cb938fb7..24ac8e19807 100644
--- a/pkgs/tools/misc/mbuffer/default.nix
+++ b/pkgs/tools/misc/mbuffer/default.nix
@@ -1,24 +1,32 @@
-{ stdenv, fetchurl,
-	openssl,
+{ lib, stdenv, fetchurl,
+  openssl,
  } :
 
 stdenv.mkDerivation rec {
-  version = "20200505";
+  version = "20210328";
   pname = "mbuffer";
 
   src = fetchurl {
     url = "http://www.maier-komor.de/software/mbuffer/mbuffer-${version}.tgz";
-    sha256 = "02qzy3appah0llg6aa71isl2a5nc93bkzy5r4d682lcy2j1n216c";
+    sha256 = "sha256-UbW42EiJkaVf4d/OkBMPnke8HOKGugO09ijAS3hP3F0=";
   };
 
   buildInputs = [ openssl ];
+
+  # The mbuffer configure scripts fails to recognize the correct
+  # objdump binary during cross-building for foreign platforms.
+  # The correct objdump is exposed via the environment variable
+  # $OBJDUMP, which should be used in such cases.
+  preConfigure = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    substituteInPlace configure --replace "OBJDUMP=$ac_cv_path_OBJDUMP" 'OBJDUMP=''${OBJDUMP}'
+  '';
   doCheck = true;
 
   meta = {
-    homepage = "http://www.maier-komor.de/mbuffer.html";
+    homepage = "https://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
+    license = lib.licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ tokudan ];
+    platforms = lib.platforms.linux; # Maybe other non-darwin Unix
   };
 }
diff --git a/pkgs/tools/misc/mc/default.nix b/pkgs/tools/misc/mc/default.nix
index fb279f313b4..cddda2c6a62 100644
--- a/pkgs/tools/misc/mc/default.nix
+++ b/pkgs/tools/misc/mc/default.nix
@@ -1,6 +1,6 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
-, pkgconfig
+, pkg-config
 , glib
 , gpm
 , file
@@ -16,18 +16,24 @@
 , openssl
 , coreutils
 , autoreconfHook
+, autoSignDarwinBinariesHook
 }:
 
 stdenv.mkDerivation rec {
   pname = "mc";
-  version = "4.8.25";
+  version = "4.8.26";
 
   src = fetchurl {
     url = "https://www.midnight-commander.org/downloads/${pname}-${version}.tar.xz";
-    sha256 = "12jlnabnc91xsm35g99g2wnh96jmznvrhffd18rj7fqfy8brdhgz";
+    sha256 = "sha256-xt6txQWV8tmiLcbCmanyizk+NYNG6/bKREqEadwWbCc=";
   };
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  nativeBuildInputs = [ pkg-config autoreconfHook unzip ]
+    # The preFixup hook rewrites the binary, which invaliates the code
+    # signature. Add the fixup hook to sign the output.
+    ++ lib.optionals (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64) [
+      autoSignDarwinBinariesHook
+    ];
 
   buildInputs = [
     file
@@ -39,9 +45,8 @@ stdenv.mkDerivation rec {
     openssl
     perl
     slang
-    unzip
     zip
-  ] ++ stdenv.lib.optionals (!stdenv.isDarwin) [ e2fsprogs gpm ];
+  ] ++ lib.optionals (!stdenv.isDarwin) [ e2fsprogs gpm ];
 
   enableParallelBuilding = true;
 
@@ -55,9 +60,14 @@ stdenv.mkDerivation rec {
   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
+  '' + lib.optionalString (!stdenv.isDarwin) ''
+    # libX11.so is loaded dynamically so autopatch doesn't detect it
+    patchelf \
+      --add-needed ${libX11}/lib/libX11.so \
+      $out/bin/mc
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "File Manager and User Shell for the GNU Project";
     downloadPage = "https://www.midnight-commander.org/downloads/";
     homepage = "https://www.midnight-commander.org";
diff --git a/pkgs/tools/misc/mcfly/default.nix b/pkgs/tools/misc/mcfly/default.nix
index 39f9b47f465..6412eaa1f80 100644
--- a/pkgs/tools/misc/mcfly/default.nix
+++ b/pkgs/tools/misc/mcfly/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, rustPlatform, fetchFromGitHub }:
+{ lib, rustPlatform, fetchFromGitHub }:
 
 rustPlatform.buildRustPackage rec {
   pname = "mcfly";
-  version = "0.5.0";
+  version = "0.5.6";
 
   src = fetchFromGitHub {
     owner = "cantino";
     repo = "mcfly";
     rev = "v${version}";
-    sha256 = "155x745jakfcpr6kmp24cy8xwdhv81jdfjjhd149bnw5ilg0z037";
+    sha256 = "sha256-x2cED+WEc50RB8BxiDEm/XnauT1RqqGjSIdL5MMaFBY=";
   };
 
   postInstall = ''
@@ -20,11 +20,12 @@ rustPlatform.buildRustPackage rec {
     install -Dm644 -t $out/share/mcfly mcfly.fish
   '';
 
-  cargoSha256 = "0y6sjbzg5qqqip9sc9ajyd5ra3n2wwvarj6nhpzjhh05kqz3qja4";
+  cargoSha256 = "sha256-7RKewz5jBS2HhHvXHBUWaQQ/wq9nryS9E+DqzBOVjPs=";
 
-  meta = with stdenv.lib; {
+  meta = with 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";
+    changelog = "https://github.com/cantino/mcfly/blob/v${version}/CHANGELOG.txt";
     license = licenses.mit;
     maintainers = [ maintainers.melkor333 ];
   };
diff --git a/pkgs/tools/misc/mcrypt/default.nix b/pkgs/tools/misc/mcrypt/default.nix
index afbe811e7f2..8349e0fd4d7 100644
--- a/pkgs/tools/misc/mcrypt/default.nix
+++ b/pkgs/tools/misc/mcrypt/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libmcrypt, libmhash }:
+{ lib, stdenv, fetchurl, libmcrypt, libmhash }:
 
 stdenv.mkDerivation rec {
   version = "2.6.8";
@@ -14,6 +14,7 @@ stdenv.mkDerivation rec {
     ./overflow_CVE-2012-4409.patch
     ./segv.patch
     ./sprintf_CVE-2012-4527.patch
+    ./malloc_to_stdlib.patch
   ];
 
   buildInputs = [ libmcrypt libmhash ];
@@ -26,8 +27,8 @@ stdenv.mkDerivation rec {
       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 ];
+    license = lib.licenses.gpl3Only;
+    platforms = lib.platforms.all;
+    maintainers = [ lib.maintainers.qknight ];
   };
 }
diff --git a/pkgs/tools/misc/mcrypt/malloc_to_stdlib.patch b/pkgs/tools/misc/mcrypt/malloc_to_stdlib.patch
new file mode 100755
index 00000000000..6bead60dc56
--- /dev/null
+++ b/pkgs/tools/misc/mcrypt/malloc_to_stdlib.patch
@@ -0,0 +1,26 @@
+From e295844e8ef5c13487996ab700e5f12a7fadb1a6 Mon Sep 17 00:00:00 2001
+From: Private <private@private.priv>
+Date: Wed, 30 Dec 2020 16:06:46 -0800
+Subject: [PATCH] malloc.h to stdlib.h in rfc2440.c
+
+The malloc.h is deprecated and should not be used
+---
+ src/rfc2440.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/rfc2440.c b/src/rfc2440.c
+index 5a1f296..4d6a5db 100644
+--- a/src/rfc2440.c
++++ b/src/rfc2440.c
+@@ -23,7 +23,7 @@
+ #include <zlib.h>
+ #endif
+ #include <stdio.h>
+-#include <malloc.h>
++#include <stdlib.h>
+ 
+ #include "xmalloc.h"
+ #include "keys.h"
+-- 
+2.13.5
+
diff --git a/pkgs/tools/misc/mdbtools/default.nix b/pkgs/tools/misc/mdbtools/default.nix
index aedaa364888..b25a850311e 100644
--- a/pkgs/tools/misc/mdbtools/default.nix
+++ b/pkgs/tools/misc/mdbtools/default.nix
@@ -1,32 +1,26 @@
 { stdenv, lib, fetchFromGitHub, glib, readline
-, bison, flex, pkgconfig, autoreconfHook, libxslt, makeWrapper
+, bison, flex, pkg-config, autoreconfHook, libxslt, makeWrapper
 , txt2man, which
-# withUi currently doesn't work. It compiles but fails to run.
-, withUi ? false, gtk2, gnome2
 }:
 
-let
-  uiDeps = [ gtk2 ] ++ (with gnome2; [ GConf libglade libgnomeui gnome-doc-utils ]);
-
-in
 stdenv.mkDerivation rec {
   pname = "mdbtools";
-  version = "0.8.2";
+  version = "0.9.3";
 
   src = fetchFromGitHub {
-    owner = "cyberemissary";
+    owner = "mdbtools";
     repo = "mdbtools";
-    rev = version;
-    sha256 = "12rhf6rgnws6br5dn1l2j7i77q9p4l6ryga10jpax01vvzhr26qc";
+    rev = "v${version}";
+    sha256 = "11cv7hh8j8akpgm1a6pp7im6iacpgx6wzcg9n9rmb41j0fgxamdf";
   };
 
   configureFlags = [ "--disable-scrollkeeper" ];
 
   nativeBuildInputs = [
-    pkgconfig bison flex autoreconfHook txt2man which
-  ] ++ lib.optional withUi libxslt;
+    pkg-config bison flex autoreconfHook txt2man which
+  ];
 
-  buildInputs = [ glib readline ] ++ lib.optionals withUi uiDeps;
+  buildInputs = [ glib readline ];
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/tools/misc/me_cleaner/default.nix b/pkgs/tools/misc/me_cleaner/default.nix
index d224ad1dcc5..308b69c9d74 100644
--- a/pkgs/tools/misc/me_cleaner/default.nix
+++ b/pkgs/tools/misc/me_cleaner/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildPythonPackage, fetchFromGitHub }:
+{ lib, buildPythonPackage, fetchFromGitHub }:
 
 buildPythonPackage rec {
   pname = "me_cleaner";
@@ -11,7 +11,7 @@ buildPythonPackage rec {
     sha256 = "1bdj2clm13ir441vn7sv860xsc5gh71ja5lc2wn0gggnff0adxj4";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit (src.meta) homepage;
     description = "Tool for partial deblobbing of Intel ME/TXE firmware images";
     longDescription = ''
@@ -19,6 +19,6 @@ buildPythonPackage rec {
       with the final purpose of reducing its ability to interact with the system.
     '';
     license = licenses.gpl3;
-    maintainers = with maintainers; [ gnidorah ];
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/tools/misc/megacli/default.nix b/pkgs/tools/misc/megacli/default.nix
index e202cc7ae46..3f86a073c09 100644
--- a/pkgs/tools/misc/megacli/default.nix
+++ b/pkgs/tools/misc/megacli/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, rpmextract, ncurses5, patchelf, fetchurl, unzip }:
+{ lib, stdenv, rpmextract, ncurses5, patchelf, fetchurl, unzip }:
 
 stdenv.mkDerivation rec {
   pname = "megacli";
@@ -9,9 +9,10 @@ stdenv.mkDerivation rec {
     sha256 = "1sdn58fbmd3fj4nzbajq3gcyw71ilgdh45r5p4sa6xmb7np55cfr";
   };
 
-  buildInputs = [rpmextract ncurses5 unzip];
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [rpmextract ncurses5];
   libPath =
-    stdenv.lib.makeLibraryPath
+    lib.makeLibraryPath
        [ stdenv.cc.cc stdenv.cc.libc ncurses5 ];
 
   buildCommand = ''
@@ -33,7 +34,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "CLI program for LSI MegaRAID cards, which also works with some Dell PERC RAID cards";
-    license = stdenv.lib.licenses.unfree;
+    license = lib.licenses.unfree;
     platforms = [ "x86_64-linux" ];
   };
 }
diff --git a/pkgs/tools/misc/memtest86+/default.nix b/pkgs/tools/misc/memtest86+/default.nix
index 57cf5bb97e2..0db6f9f7287 100644
--- a/pkgs/tools/misc/memtest86+/default.nix
+++ b/pkgs/tools/misc/memtest86+/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit }:
+{ lib, stdenv, fetchgit }:
 
 stdenv.mkDerivation {
   pname = "memtest86+";
@@ -25,7 +25,7 @@ stdenv.mkDerivation {
   meta = {
     homepage = "http://www.memtest.org/";
     description = "A tool to detect memory errors";
-    license = stdenv.lib.licenses.gpl2;
+    license = lib.licenses.gpl2;
     platforms = [ "x86_64-linux" "i686-linux" ];
   };
 }
diff --git a/pkgs/tools/misc/memtest86-efi/default.nix b/pkgs/tools/misc/memtest86-efi/default.nix
index c33aa074404..125f8f35acc 100644
--- a/pkgs/tools/misc/memtest86-efi/default.nix
+++ b/pkgs/tools/misc/memtest86-efi/default.nix
@@ -1,14 +1,14 @@
 { stdenv
 , lib
 , fetchzip
-, utillinux
+, util-linux
 , jq
 , mtools
 }:
 
 stdenv.mkDerivation rec {
   pname = "memtest86-efi";
-  version = "8.3";
+  version = "8.4";
 
   src = fetchzip {
     # TODO: We're using the previous version of memtest86 because the
@@ -24,17 +24,19 @@ stdenv.mkDerivation rec {
     # 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 = "0aldz7rvnfnzb4h447q10k9c9p5ghwzdyn7f6g5lrxiv5vxf3x96";
+    sha256 = "sha256-jh4FKCYZbOQhRv6B7N8Hmw6RQCQvbBGaGFTMLwM1nk8=";
     stripRoot = false;
   };
 
   nativeBuildInputs = [
-    utillinux
+    util-linux
     jq
     mtools
   ];
 
   installPhase = ''
+    runHook preInstall
+
     # memtest86 is distributed as a bootable USB image.  It contains the actual
     # memtest86 EFI app.
     #
@@ -50,6 +52,8 @@ stdenv.mkDerivation rec {
     ')
     mkdir $out
     mcopy -vsi $IMG@@$ESP_OFFSET ::'/EFI/BOOT/*' $out/
+
+    runHook postInstall
   '';
 
   meta = with lib; {
diff --git a/pkgs/tools/misc/mht2htm/default.nix b/pkgs/tools/misc/mht2htm/default.nix
index 31f645e48ce..e417c0e665d 100644
--- a/pkgs/tools/misc/mht2htm/default.nix
+++ b/pkgs/tools/misc/mht2htm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, unzip, fpc, lazarus }:
+{ lib, stdenv, fetchurl, unzip, fpc, lazarus }:
 
 let
   date = "07.apr.2016";
@@ -33,7 +33,7 @@ in stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Convert .mht files to .html";
     homepage    = "http://pgm.bpalanka.com/mht2htm.html";
     license     = licenses.gpl3;
diff --git a/pkgs/tools/misc/microplane/default.nix b/pkgs/tools/misc/microplane/default.nix
new file mode 100644
index 00000000000..89b0bc4d8b8
--- /dev/null
+++ b/pkgs/tools/misc/microplane/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "microplane";
+  version = "0.0.32";
+
+  src = fetchFromGitHub {
+    owner = "Clever";
+    repo = "microplane";
+    rev = "v${version}";
+    sha256 = "sha256-QYii/UmYus5hloTUsbVKsw50bSfI4bArUgGzFSK8Cas=";
+  };
+
+  vendorSha256 = "sha256-1XtpoGqQ//2ccJdl8E7jnSBQhYoA4/YVBbHeI+OfaR0=";
+
+  buildFlagsArray = ''
+    -ldflags=-s -w -X main.version=${version}
+  '';
+
+  postInstall = ''
+    ln -s $out/bin/microplane $out/bin/mp
+  '';
+
+  meta = with lib; {
+    description = "A CLI tool to make git changes across many repos";
+    homepage = "https://github.com/Clever/microplane";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dbirks ];
+  };
+}
diff --git a/pkgs/tools/misc/mimeo/default.nix b/pkgs/tools/misc/mimeo/default.nix
index 55cc9717688..ea79b8d2f0f 100644
--- a/pkgs/tools/misc/mimeo/default.nix
+++ b/pkgs/tools/misc/mimeo/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, desktop-file-utils, file, python3Packages }:
+{ lib, fetchurl, desktop-file-utils, file, python3Packages }:
 
 python3Packages.buildPythonApplication rec {
   pname = "mimeo";
@@ -23,9 +23,9 @@ python3Packages.buildPythonApplication rec {
 
   installPhase = "install -Dm755 Mimeo.py $out/bin/mimeo";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Open files by MIME-type or file name using regular expressions";
-    homepage = "http://xyne.archlinux.ca/projects/mimeo/";
+    homepage = "https://xyne.archlinux.ca/projects/mimeo/";
     license = [ licenses.gpl2 ];
     maintainers = [ maintainers.rycee ];
     platforms = platforms.unix;
diff --git a/pkgs/tools/misc/minicom/default.nix b/pkgs/tools/misc/minicom/default.nix
index 35c04faf459..d237c3b7fdd 100644
--- a/pkgs/tools/misc/minicom/default.nix
+++ b/pkgs/tools/misc/minicom/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, autoreconfHook, makeWrapper, pkgconfig
+{ lib, stdenv, fetchgit, autoreconfHook, makeWrapper, pkg-config
 , lrzsz, ncurses, libiconv }:
 
 stdenv.mkDerivation {
@@ -12,9 +12,9 @@ stdenv.mkDerivation {
     sha256 = "0j95727xni4r122dalp09963gvc1nqa18l1d4wzz8746kw5s2rrb";
   };
 
-  buildInputs = [ ncurses ] ++ stdenv.lib.optional stdenv.isDarwin libiconv;
+  buildInputs = [ ncurses ] ++ lib.optional stdenv.isDarwin libiconv;
 
-  nativeBuildInputs = [ autoreconfHook makeWrapper pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook makeWrapper pkg-config ];
 
   enableParallelBuilding = true;
 
@@ -34,11 +34,11 @@ stdenv.mkDerivation {
   postInstall = ''
     for f in $out/bin/*minicom ; do
       wrapProgram $f \
-        --prefix PATH : ${stdenv.lib.makeBinPath [ lrzsz ]}:$out/bin
+        --prefix PATH : ${lib.makeBinPath [ lrzsz ]}:$out/bin
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Modem control and terminal emulation program";
     homepage = "https://salsa.debian.org/minicom-team/minicom";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/minipro/default.nix b/pkgs/tools/misc/minipro/default.nix
new file mode 100644
index 00000000000..95385a47e59
--- /dev/null
+++ b/pkgs/tools/misc/minipro/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, pkg-config
+, libusb1
+}:
+
+stdenv.mkDerivation rec {
+  pname = "minipro";
+  version = "0.5";
+
+  src = fetchFromGitLab {
+    owner = "DavidGriffith";
+    repo = "minipro";
+    rev = version;
+    sha256 = "sha256-Hyj2LyY7W8opjigH+QLHHbDyelC0LMgGgdN+u3nNoJc=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libusb1 ];
+  makeFlags = [
+    "PREFIX=$(out)"
+    "UDEV_DIR=$(out)/lib/udev"
+    "COMPLETIONS_DIR=$(out)/share/bash-completion/completions"
+    "PKG_CONFIG=${pkg-config}/bin/${pkg-config.targetPrefix}pkg-config"
+    "CC=${stdenv.cc.targetPrefix}cc"
+  ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/DavidGriffith/minipro";
+    description = "An open source program for controlling the MiniPRO TL866xx series of chip programmers";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.bmwalters ];
+  };
+}
diff --git a/pkgs/tools/misc/miniserve/default.nix b/pkgs/tools/misc/miniserve/default.nix
index 5da2a366cf8..98fb8335788 100644
--- a/pkgs/tools/misc/miniserve/default.nix
+++ b/pkgs/tools/misc/miniserve/default.nix
@@ -1,35 +1,44 @@
-{ stdenv
+{ lib
+, stdenv
 , rustPlatform
 , fetchFromGitHub
+, installShellFiles
 , pkg-config
 , zlib
-, openssl
+, libiconv
 , Security
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "miniserve";
-  version = "0.8.0";
+  version = "0.14.0";
 
   src = fetchFromGitHub {
     owner = "svenstaro";
     repo = "miniserve";
     rev = "v${version}";
-    sha256 = "1h4872jb0xz8yzs02q8wfvqrp20y7kdva5ka6bh6nq4jrnnky8zb";
+    sha256 = "sha256-Hv1aefuiu7pOlSMUjZLGY6bxVy+6myFH1afZZ5gtmi0=";
   };
 
-  cargoSha256 = "1vq1rrav9r9z4y0v7hpn0fcq64slq4zrm2pybmnmb7h9nfxxyr6k";
+  cargoSha256 = "sha256-CgiHluc9+5+hKwsC7UZimy1586QBUsj+TVlb2lQRXs0=";
 
-  RUSTC_BOOTSTRAP = 1;
+  nativeBuildInputs = [ installShellFiles pkg-config zlib ];
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security ];
 
-  nativeBuildInputs = [ pkg-config zlib ];
-  buildInputs = if stdenv.isDarwin then [ Security ] else [ openssl ];
+  checkFlags = [ "--skip=cant_navigate_up_the_root" ];
 
-  meta = with stdenv.lib; {
+  postInstall = ''
+    installShellCompletion --cmd miniserve \
+      --bash <($out/bin/miniserve --print-completions bash) \
+      --fish <($out/bin/miniserve --print-completions fish) \
+      --zsh <($out/bin/miniserve --print-completions zsh)
+  '';
+
+  meta = with 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 zowoq ];
+    maintainers = with maintainers; [ zowoq ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/ministat/default.nix b/pkgs/tools/misc/ministat/default.nix
index dfc2e2c624e..0cd3ff3a5c1 100644
--- a/pkgs/tools/misc/ministat/default.nix
+++ b/pkgs/tools/misc/ministat/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit }:
+{ lib, stdenv, fetchgit }:
 
 stdenv.mkDerivation rec {
   pname = "ministat";
@@ -21,11 +21,11 @@ stdenv.mkDerivation rec {
     cp ministat.1 $out/share/man/man1/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/mktorrent/default.nix b/pkgs/tools/misc/mktorrent/default.nix
index 485c3403cff..194a0c62721 100644
--- a/pkgs/tools/misc/mktorrent/default.nix
+++ b/pkgs/tools/misc/mktorrent/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchFromGitHub, openssl}:
+{lib, stdenv, fetchFromGitHub, openssl}:
 
 stdenv.mkDerivation rec {
   pname = "mktorrent";
@@ -12,8 +12,8 @@ stdenv.mkDerivation rec {
   };
 
   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";
+    ++ lib.optional stdenv.isi686 "USE_LARGE_FILES=1"
+    ++ lib.optional stdenv.isLinux "CFLAGS=-lgcc_s";
 
   installFlags = [ "PREFIX=${placeholder "out"}" ];
 
@@ -21,8 +21,8 @@ stdenv.mkDerivation rec {
 
   meta = {
     homepage = "http://mktorrent.sourceforge.net/";
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
     description = "Command line utility to create BitTorrent metainfo files";
-    maintainers = with stdenv.lib.maintainers; [Profpatsch];
+    maintainers = with lib.maintainers; [Profpatsch];
   };
 }
diff --git a/pkgs/tools/misc/mlocate/default.nix b/pkgs/tools/misc/mlocate/default.nix
index d3f406c5355..12d9f5622cc 100644
--- a/pkgs/tools/misc/mlocate/default.nix
+++ b/pkgs/tools/misc/mlocate/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchurl, config }:
+{ lib, stdenv, fetchurl, config }:
 
 let
-  dbfile = stdenv.lib.attrByPath [ "locate" "dbfile" ] "/var/cache/locatedb" config;
+  dbfile = lib.attrByPath [ "locate" "dbfile" ] "/var/cache/locatedb" config;
 in stdenv.mkDerivation rec {
   pname = "mlocate";
   version = "0.26";
@@ -14,7 +14,7 @@ in stdenv.mkDerivation rec {
   buildInputs = [ ];
   makeFlags = [ "dbfile=${dbfile}" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Merging locate is an utility to index and quickly search for files";
     homepage = "https://pagure.io/mlocate";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/mmake/default.nix b/pkgs/tools/misc/mmake/default.nix
index a761530a0a0..564e1989aee 100644
--- a/pkgs/tools/misc/mmake/default.nix
+++ b/pkgs/tools/misc/mmake/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "mmake";
@@ -15,7 +15,7 @@ buildGoPackage rec {
 
   goDeps = ./deps.nix;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/tj/mmake";
     description = "A small program  which wraps make to provide additional functionality";
     longDescription = ''
diff --git a/pkgs/tools/misc/mmv-go/default.nix b/pkgs/tools/misc/mmv-go/default.nix
new file mode 100644
index 00000000000..8787e4a838f
--- /dev/null
+++ b/pkgs/tools/misc/mmv-go/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "mmv-go";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "itchyny";
+    repo = "mmv";
+    rev = "v${version}";
+    sha256 = "12k5zzyr0lhjadc9kza04v0zgb20v7m4syaqwc7qvn3kfvv1mz8s";
+  };
+
+  vendorSha256 = "0xnrai15ww9lfk02bc9p5ssycwnqkyjj5ch1srh7yvnbw3fakx68";
+
+  buildFlagsArray = [ "-ldflags=-s -w -X main.revision=${src.rev}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/itchyny/mmv";
+    description = "Rename multiple files using your $EDITOR";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zowoq ];
+  };
+}
diff --git a/pkgs/tools/misc/mmv/default.nix b/pkgs/tools/misc/mmv/default.nix
index 48c3b393262..2c58381100a 100644
--- a/pkgs/tools/misc/mmv/default.nix
+++ b/pkgs/tools/misc/mmv/default.nix
@@ -1,49 +1,30 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, gengetopt, m4, gnupg
+, git, perl, autoconf, automake, help2man, boehmgc }:
 
 stdenv.mkDerivation rec {
   pname = "mmv";
-  version = "1.01b";
-
-  src = fetchurl {
-    url = "mirror://debian/pool/main/m/mmv/mmv_${version}.orig.tar.gz";
-    sha256 = "0399c027ea1e51fd607266c1e33573866d4db89f64a74be8b4a1d2d1ff1fdeef";
+  version = "2.1";
+
+  src = fetchFromGitHub {
+    owner = "rrthomas";
+    repo = "mmv";
+    rev = "v${version}";
+    sha256 = "sha256-3XWXOp30P/bOd+c7PC8duidewX8h0hk9VsEUw05dAE4=";
+    fetchSubmodules = true;
   };
 
-  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
+  preConfigure = ''
+    ./bootstrap
   '';
 
-  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
-  '';
+  nativeBuildInputs = [ gengetopt m4 git gnupg perl autoconf automake help2man pkg-config ];
+  buildInputs = [ boehmgc ];
 
   meta = {
-    homepage = "http://linux.maruhn.com/sec/mmv.html";
+    homepage = "https://github.com/rrthomas/mmv";
     description = "Utility for wildcard renaming, copying, etc";
-    license = stdenv.lib.licenses.gpl2;
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.all;
+    maintainers = with lib.maintainers; [ siraben ];
   };
 }
diff --git a/pkgs/tools/misc/mongodb-compass/default.nix b/pkgs/tools/misc/mongodb-compass/default.nix
index bdc3ac4ddeb..8baeb1556b1 100644
--- a/pkgs/tools/misc/mongodb-compass/default.nix
+++ b/pkgs/tools/misc/mongodb-compass/default.nix
@@ -1,13 +1,14 @@
-{ stdenv, fetchurl, dpkg
-, alsaLib, atk, cairo, cups, curl, dbus, expat, fontconfig, freetype, glib
-, gnome2, gnome3, libnotify, libxcb, nspr, nss, systemd, xorg, wrapGAppsHook }:
+{ lib, stdenv, fetchurl, dpkg
+, alsa-lib, at-spi2-atk, at-spi2-core, atk, cairo, cups, curl, dbus, expat, fontconfig, freetype, glib
+, gnome2, gdk-pixbuf, gtk3, pango, libnotify, libsecret, libuuid, libxcb, nspr, nss, systemd, xorg, wrapGAppsHook }:
 
 let
+  version = "1.25.0";
 
-  version = "1.17.0";
-
-  rpath = stdenv.lib.makeLibraryPath [
-    alsaLib
+  rpath = lib.makeLibraryPath [
+    alsa-lib
+    at-spi2-atk
+    at-spi2-core
     atk
     cairo
     cups
@@ -18,10 +19,12 @@ let
     freetype
     glib
     gnome2.GConf
-    gnome2.gdk_pixbuf
-    gnome3.gtk
-    gnome2.pango
+    gdk-pixbuf
+    gtk3
+    pango
     libnotify
+    libsecret
+    libuuid
     libxcb
     nspr
     nss
@@ -46,7 +49,7 @@ let
     if stdenv.hostPlatform.system == "x86_64-linux" then
       fetchurl {
         url = "https://downloads.mongodb.com/compass/mongodb-compass_${version}_amd64.deb";
-        sha256 = "085xq1ik8kyza1kq9kn0pf98zk6g2qa21clxhn48rgnqk20aninv";
+        sha256 = "sha256-998/voQ04fLj3KZCy6BueUoI1v++4BoGRTGJT7Nsv40=";
       }
     else
       throw "MongoDB compass is not supported on ${stdenv.hostPlatform.system}";
@@ -57,29 +60,39 @@ in stdenv.mkDerivation {
 
   inherit src;
 
-  buildInputs = [ dpkg wrapGAppsHook gnome3.gtk ];
+  buildInputs = [ dpkg wrapGAppsHook gtk3 ];
   dontUnpack = true;
 
   buildCommand = ''
     IFS=$'\n'
-    dpkg -x $src $out
-    cp -av $out/usr/* $out
+
+    # The deb file contains a setuid binary, so 'dpkg -x' doesn't work here
+    dpkg --fsys-tarfile $src | tar --extract
+
+    mkdir -p $out
+    mv usr/* $out
+
+    # cp -av $out/usr/* $out
     rm -rf $out/share/lintian
-    #The node_modules are bringing in non-linux files/dependencies
+
+    # 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
+      patchelf --set-rpath ${rpath}:$out/lib/mongodb-compass "$file" || true
     done
+
     wrapGAppsHook $out/bin/mongodb-compass
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "The GUI for MongoDB";
     homepage = "https://www.mongodb.com/products/compass";
     license = licenses.unfree;
diff --git a/pkgs/tools/misc/mongodb-tools/default.nix b/pkgs/tools/misc/mongodb-tools/default.nix
index c3e9a0dc2ff..7949a82edc4 100644
--- a/pkgs/tools/misc/mongodb-tools/default.nix
+++ b/pkgs/tools/misc/mongodb-tools/default.nix
@@ -1,9 +1,8 @@
-{ stdenv
-, lib
+{ lib
 , buildGoPackage
 , fetchFromGitHub
 , openssl
-, pkgconfig
+, pkg-config
 , libpcap
 }:
 
@@ -35,7 +34,7 @@ in buildGoPackage {
     sha256 = "0mjwvx0cxvb6zam6jyr3753xjnwcygxcjzqhhlsq0b3xnwws9yh7";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ openssl libpcap ];
 
   # Mongodb incorrectly names all of their binaries main
@@ -44,7 +43,7 @@ in buildGoPackage {
     # move vendored codes so nixpkgs go builder could find it
     runHook preBuild
 
-    ${stdenv.lib.concatMapStrings (t: ''
+    ${lib.concatMapStrings (t: ''
       go build -o "$out/bin/${t}" -tags ssl -ldflags "-s -w" $goPackagePath/${t}/main
     '') tools}
 
diff --git a/pkgs/tools/misc/mons/default.nix b/pkgs/tools/misc/mons/default.nix
index c1dbfa0aa49..920cab1763b 100644
--- a/pkgs/tools/misc/mons/default.nix
+++ b/pkgs/tools/misc/mons/default.nix
@@ -2,26 +2,36 @@
 
 stdenv.mkDerivation rec {
   pname = "mons";
-  version = "20200107";
+  version = "20200320";
 
   src = fetchFromGitHub {
     owner = "Ventto";
     repo = pname;
-    rev = "0c9e1a1dddff23a0525ed8e4ec9af8f9dd8cad4c";
-    sha256 = "02c41mw3g1mgl91hhpz1n45iaqk9s7mdk1ixm8yv6sv17hy8rr4w";
+    rev = "375bbba3aa700c8b3b33645a7fb70605c8b0ff0c";
+    sha256 = "19r5y721yrxhd9jp99s29jjvm0p87vl6xfjlcj38bljq903f21cl";
     fetchSubmodules = true;
   };
 
-  # PR: https://github.com/Ventto/mons/pull/36
-  preConfigure = ''sed -i 's/usr\///' Makefile'';
-  
+  patches = [
+    # Substitute xrandr path with @xrandr@ so we can replace it with
+    # real path in substituteInPlace
+    ./xrandr.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace mons.sh --replace '@xrandr@' '${xrandr}/bin/xrandr'
+  '';
+
   nativeBuildInputs = [ help2man ];
-  makeFlags = [ "DESTDIR=$(out)" ];
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX="
+  ];
 
   meta = with lib; {
     description = "POSIX Shell script to quickly manage 2-monitors display";
     homepage = "https://github.com/Ventto/mons.git";
     license = licenses.mit;
-    maintainers = [ maintainers.mschneider ];
+    maintainers = with maintainers; [ mschneider thiagokokada ];
   };
 }
diff --git a/pkgs/tools/misc/mons/xrandr.patch b/pkgs/tools/misc/mons/xrandr.patch
new file mode 100644
index 00000000000..6cbcdf9d514
--- /dev/null
+++ b/pkgs/tools/misc/mons/xrandr.patch
@@ -0,0 +1,14 @@
+diff --git a/mons.sh b/mons.sh
+index b86ce5c..feb0f33 100755
+--- a/mons.sh
++++ b/mons.sh
+@@ -151,8 +151,7 @@ main() {
+     # =============================
+ 
+     [ -z "$DISPLAY" ]  && { echo 'DISPLAY: no variable set.';  exit 1; }
+-    command -vp xrandr >/dev/null 2>&1 || { echo 'xrandr: command not found.'; exit 1; }
+-    XRANDR="$(command -pv xrandr)"
++    XRANDR="@xrandr@"
+ 
+     # =============================
+     #      Argument Checking
diff --git a/pkgs/tools/misc/moreutils/default.nix b/pkgs/tools/misc/moreutils/default.nix
index 92402797d11..5a1452007af 100644
--- a/pkgs/tools/misc/moreutils/default.nix
+++ b/pkgs/tools/misc/moreutils/default.nix
@@ -1,26 +1,27 @@
-{ stdenv, fetchgit, libxml2, libxslt, docbook-xsl, docbook_xml_dtd_44, perlPackages, makeWrapper, darwin }:
+{ lib, stdenv, fetchgit, libxml2, libxslt, docbook-xsl, docbook_xml_dtd_44, perlPackages, makeWrapper, darwin }:
 
-with stdenv.lib;
+with lib;
 stdenv.mkDerivation rec {
   pname = "moreutils";
-  version = "0.63";
+  version = "0.65";
 
   src = fetchgit {
     url = "git://git.joeyh.name/moreutils";
     rev = "refs/tags/${version}";
-    sha256 = "17sszmcdck4w01hgcq7vd25p2iw3yzvjwx1yf20jg85gzs1dplrd";
+    sha256 = "17r80xs756c5vv4ghh901c8abraqqfp7ncagv9ys4il3jngfqbrb";
   };
 
   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 ]
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ libxml2 libxslt docbook-xsl docbook_xml_dtd_44 ]
     ++ optional stdenv.isDarwin darwin.cctools;
 
   propagatedBuildInputs = with perlPackages; [ perl IPCRun TimeDate TimeDuration ];
 
-  buildFlags = [ "CC=cc" ];
+  buildFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
   installFlags = [ "PREFIX=$(out)" ];
 
   postInstall = ''
diff --git a/pkgs/tools/misc/most/default.nix b/pkgs/tools/misc/most/default.nix
index 7adac5ee2ee..de2118083d9 100644
--- a/pkgs/tools/misc/most/default.nix
+++ b/pkgs/tools/misc/most/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, slang, ncurses }:
+{ lib, stdenv, fetchurl, slang, ncurses }:
 
 stdenv.mkDerivation rec {
   pname = "most";
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ slang ncurses ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A terminal pager similar to 'more' and 'less'";
     longDescription = ''
       MOST is a powerful paging program for Unix, VMS, MSDOS, and win32
diff --git a/pkgs/tools/misc/mpdscribble/default.nix b/pkgs/tools/misc/mpdscribble/default.nix
index 49f9c6bc031..fce376bb32e 100644
--- a/pkgs/tools/misc/mpdscribble/default.nix
+++ b/pkgs/tools/misc/mpdscribble/default.nix
@@ -1,23 +1,39 @@
-{ stdenv, fetchurl, mpd_clientlib, curl, glib, pkgconfig }:
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, meson
+, ninja
+, boost
+, curl
+, libgcrypt
+, libmpdclient
+, systemd
+}:
 
 stdenv.mkDerivation rec {
   pname = "mpdscribble";
-  version = "0.22";
+  version = "0.23";
 
   src = fetchurl {
-    url =
-    "https://www.musicpd.org/download/mpdscribble/${version}/mpdscribble-${version}.tar.bz2";
-    sha256 = "0hgb7xh3w455m00lpldwkyrc5spjn3q1pl2ry3kf7w3hiigjpphw";
+    url = "https://www.musicpd.org/download/mpdscribble/${version}/mpdscribble-${version}.tar.xz";
+    sha256 = "0s66zqscb44p88cl3kcv5jkjcqsskcnrv7xgrjhzrchf2kcpwf53";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ mpd_clientlib curl glib ];
+  nativeBuildInputs = [ pkg-config meson ninja ];
+  buildInputs = [
+    libmpdclient
+    curl
+    boost
+    libgcrypt
+    systemd
+  ];
 
-  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)";
+  meta = with lib; {
+    description = "A MPD client which submits info about tracks being played to a scrobbler";
     homepage = "https://www.musicpd.org/clients/mpdscribble/";
-    license = licenses.gpl2;
-    maintainers = [ maintainers.matthiasbeyer ];
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.sohalt ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/mrtg/default.nix b/pkgs/tools/misc/mrtg/default.nix
index 047cd87308f..e8ebde4ad4d 100644
--- a/pkgs/tools/misc/mrtg/default.nix
+++ b/pkgs/tools/misc/mrtg/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl, gd, rrdtool }:
+{ lib, stdenv, fetchurl, perl, gd, rrdtool }:
 
 stdenv.mkDerivation rec {
 
@@ -17,8 +17,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.robberer ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/ms-sys/default.nix b/pkgs/tools/misc/ms-sys/default.nix
index 315dbce7407..0df6de82bd2 100644
--- a/pkgs/tools/misc/ms-sys/default.nix
+++ b/pkgs/tools/misc/ms-sys/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, gettext }:
+{ lib, stdenv, fetchurl, gettext }:
 
 stdenv.mkDerivation rec {
   pname = "ms-sys";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A program for writing Microsoft-compatible boot records";
     homepage = "http://ms-sys.sourceforge.net/";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/misc/mslink/default.nix b/pkgs/tools/misc/mslink/default.nix
new file mode 100644
index 00000000000..6db1ae3275c
--- /dev/null
+++ b/pkgs/tools/misc/mslink/default.nix
@@ -0,0 +1,33 @@
+{ gccStdenv
+, lib
+, fetchurl
+}:
+
+gccStdenv.mkDerivation rec {
+  pname = "mslink";
+  version = "1.3";
+
+  src = fetchurl {
+    url = "http://www.mamachine.org/mslink/mslink_v${version}.tar.gz";
+    sha256 = "1qiwqa6w2in6gk4sxiy37c2wwpakin6l2ad2cf5s7ij96z2ijgqg";
+  };
+
+  preBuild = ''
+    rm mslink # clean up shipped executable
+  '';
+
+  installPhase = ''
+    if [[ "$(uname)" == "Darwin" ]]; then
+      mv mslink.exe mslink
+    fi
+    install -D mslink $out/bin/mslink
+  '';
+
+  meta = with lib; {
+    description = "Create Windows Shortcut Files (.LNK) without using Windows";
+    homepage = "http://www.mamachine.org/mslink/index.en.html";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ mkg20001 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/mstflint/default.nix b/pkgs/tools/misc/mstflint/default.nix
index 20d7110944d..70bace74b1e 100644
--- a/pkgs/tools/misc/mstflint/default.nix
+++ b/pkgs/tools/misc/mstflint/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, autoreconfHook, fetchFromGitHub, zlib, libibmad, openssl }:
+{ lib, stdenv, autoreconfHook, fetchFromGitHub, zlib, libibmad, openssl }:
 
 stdenv.mkDerivation rec {
   pname = "mstflint";
@@ -18,7 +18,8 @@ stdenv.mkDerivation rec {
 
   dontDisableStatic = true;  # the build fails without this. should probably be reported upstream
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
+    description = "Open source version of Mellanox Firmware Tools (MFT)";
     homepage = "https://github.com/Mellanox/mstflint";
     license = with licenses; [ gpl2 bsd2 ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/misc/mtm/default.nix b/pkgs/tools/misc/mtm/default.nix
index 5b45c0b712b..bc8ac50d1ae 100644
--- a/pkgs/tools/misc/mtm/default.nix
+++ b/pkgs/tools/misc/mtm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, ncurses }:
+{ lib, stdenv, fetchFromGitHub, ncurses }:
 
 stdenv.mkDerivation rec {
   pname = "mtm";
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Perhaps the smallest useful terminal multiplexer in the world";
     homepage = "https://github.com/deadpixi/mtm";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/misc/multitail/default.nix b/pkgs/tools/misc/multitail/default.nix
index eef53769f06..3304d3c1912 100644
--- a/pkgs/tools/misc/multitail/default.nix
+++ b/pkgs/tools/misc/multitail/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, ncurses, pkg-config }:
+{ lib, stdenv, fetchurl, ncurses, pkg-config }:
 
 stdenv.mkDerivation rec {
   version = "6.5.0";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ ncurses ];
 
-  makeFlags = stdenv.lib.optionals stdenv.isDarwin [ "-f" "makefile.macosx" ];
+  makeFlags = lib.optionals stdenv.isDarwin [ "-f" "makefile.macosx" ];
 
   installPhase = ''
     mkdir -p $out/bin
@@ -23,8 +23,8 @@ stdenv.mkDerivation rec {
   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;
+    maintainers = with lib.maintainers; [ matthiasbeyer ];
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl2Plus;
   };
 }
diff --git a/pkgs/tools/misc/multitime/default.nix b/pkgs/tools/misc/multitime/default.nix
index a46ee2b7c9c..015f50fa57f 100644
--- a/pkgs/tools/misc/multitime/default.nix
+++ b/pkgs/tools/misc/multitime/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   pname = "multitime";
@@ -32,8 +32,8 @@ stdenv.mkDerivation rec {
       performance.
     '';
 
-    license = stdenv.lib.licenses.mit;
+    license = lib.licenses.mit;
     homepage = "https://tratt.net/laurie/src/multitime/";
-    platforms = stdenv.lib.platforms.unix;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/mutagen/default.nix b/pkgs/tools/misc/mutagen/default.nix
index ca75bf34dd1..7e824cf90ca 100644
--- a/pkgs/tools/misc/mutagen/default.nix
+++ b/pkgs/tools/misc/mutagen/default.nix
@@ -1,22 +1,38 @@
-{ lib, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub, fetchzip }:
 
 buildGoModule rec {
   pname = "mutagen";
-  version = "0.11.7";
+  version = "0.11.8";
 
   src = fetchFromGitHub {
     owner = "mutagen-io";
     repo = pname;
     rev = "v${version}";
-    sha256 = "11wp94khj9bzmadij0nq6i6q0x9z6h0zy4a6fhf322y5nxsmvcgy";
+    sha256 = "17ycd2y7hgwa2yxbin86i6aj67x7xaajwz3mqgdyfvkja5hgbjyr";
   };
 
   vendorSha256 = "0szs9yc49fyh55ra1wf8zj76kdah0x49d45cgivk3gqh2hl17j6l";
 
+  agents = fetchzip {
+    name = "mutagen-agents-${version}";
+    # The package architecture does not matter since all packages contain identical mutagen-agents.tar.gz.
+    url = "https://github.com/mutagen-io/mutagen/releases/download/v${version}/mutagen_linux_amd64_v${version}.tar.gz";
+    stripRoot = false;
+    extraPostFetch = ''
+      rm $out/mutagen # Keep only mutagen-agents.tar.gz.
+    '';
+    sha256 = "0k8iif09kvxfxx6qm5qmkf3lr7ar6i98ivkndimj680ah9v1hkj8";
+  };
+
   doCheck = false;
 
   subPackages = [ "cmd/mutagen" "cmd/mutagen-agent" ];
 
+  postInstall = ''
+    install -d $out/libexec
+    ln -s ${agents}/mutagen-agents.tar.gz $out/libexec/
+  '';
+
   meta = with lib; {
     description = "Make remote development work with your local tools";
     homepage = "https://mutagen.io/";
diff --git a/pkgs/tools/misc/mutt-wizard/default.nix b/pkgs/tools/misc/mutt-wizard/default.nix
new file mode 100644
index 00000000000..1a63730d31e
--- /dev/null
+++ b/pkgs/tools/misc/mutt-wizard/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "mutt-wizard";
+  version = "3.2.1";
+
+  src = fetchFromGitHub {
+    owner = "LukeSmithxyz";
+    repo = "mutt-wizard";
+    rev = "v${version}";
+    sha256 = "1m4s0vj57hh38rdgdc28p10vnsq80dh708imvdgxbj1i96nq41r8";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "System for automatically configuring mutt and isync";
+    homepage = "https://github.com/LukeSmithxyz/mutt-wizard";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ shamilton ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/mysql2pgsql/default.nix b/pkgs/tools/misc/mysql2pgsql/default.nix
index 829bb7f5be7..f0556b69f23 100644
--- a/pkgs/tools/misc/mysql2pgsql/default.nix
+++ b/pkgs/tools/misc/mysql2pgsql/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl }:
+{ lib, stdenv, fetchurl, perl }:
 
 # The homepage says this script is mature..
 stdenv.mkDerivation {
@@ -18,8 +18,8 @@ stdenv.mkDerivation {
 
   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;
+    homepage = "https://pgfoundry.org/projects/mysql2pgsql/";
+    license = lib.licenses.bsdOriginal;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/mysqltuner/default.nix b/pkgs/tools/misc/mysqltuner/default.nix
index 2f7889111b0..2acbfd41adf 100644
--- a/pkgs/tools/misc/mysqltuner/default.nix
+++ b/pkgs/tools/misc/mysqltuner/default.nix
@@ -1,27 +1,36 @@
-{ stdenv, fetchFromGitHub, perl }:
+{ lib, stdenv, fetchFromGitHub, perl }:
 
 stdenv.mkDerivation rec {
   pname = "mysqltuner";
-  version = "1.7.17";
+  version = "1.7.21";
 
   src = fetchFromGitHub {
-    owner  = "major";
-    repo   = "MySQLTuner-perl";
-    rev    = version;
-    sha256 = "0wjdqraa6r6kd6rsgrn177dq6xsnnr1sgnbs9whknjbs4fn3wwl5";
+    owner = "major";
+    repo = "MySQLTuner-perl";
+    rev = version;
+    sha256 = "sha256-Yv1XjD8sZcmGr2SVD6TEElUH7vspJ61WwQwfXLOrao0=";
   };
 
+  postPatch = ''
+    substituteInPlace mysqltuner.pl \
+      --replace '/usr/share' "$out/share"
+  '';
+
   buildInputs = [ perl ];
 
   installPhase = ''
-    mkdir -p $out/bin
-    install -m0755 mysqltuner.pl $out/bin/mysqltuner
+    runHook preInstall
+
+    install -Dm0555 mysqltuner.pl $out/bin/mysqltuner
+    install -Dm0444 -t $out/share/mysqltuner basic_passwords.txt vulnerabilities.csv
+
+    runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Make recommendations for increased performance and stability of MariaDB/MySQL";
     homepage = "http://mysqltuner.com";
-    license = licenses.gpl3;
-    maintainers = with maintainers; [ peterhoeg ];
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ peterhoeg shamilton ];
   };
 }
diff --git a/pkgs/tools/misc/nagstamon/default.nix b/pkgs/tools/misc/nagstamon/default.nix
index 9b063947a44..e9f76dbf22d 100644
--- a/pkgs/tools/misc/nagstamon/default.nix
+++ b/pkgs/tools/misc/nagstamon/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pythonPackages }:
+{ lib, fetchurl, pythonPackages }:
 
 pythonPackages.buildPythonApplication rec {
   pname = "nagstamon";
@@ -15,11 +15,13 @@ pythonPackages.buildPythonApplication rec {
   propagatedBuildInputs = with pythonPackages; [ configparser pyqt5 psutil requests
      beautifulsoup4 keyring requests-kerberos kerberos lxml ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A status monitor for the desktop";
     homepage = "https://nagstamon.ifw-dresden.de/";
     license = licenses.gpl2;
     maintainers = with maintainers; [ pSub ];
-    inherit version;
+    # fails to install with:
+    # TypeError: cannot unpack non-iterable bool object
+    broken = true;
   };
 }
diff --git a/pkgs/tools/misc/nbench/default.nix b/pkgs/tools/misc/nbench/default.nix
index 950f3883f8f..dc9dcb1e5be 100644
--- a/pkgs/tools/misc/nbench/default.nix
+++ b/pkgs/tools/misc/nbench/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "nbench-byte";
@@ -22,10 +22,10 @@ stdenv.mkDerivation rec {
     cp NNET.DAT $out
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = with lib.maintainers; [ bennofs ];
   };
 }
diff --git a/pkgs/tools/misc/ncdu/default.nix b/pkgs/tools/misc/ncdu/default.nix
index 2d56ab9c09b..66429f338ac 100644
--- a/pkgs/tools/misc/ncdu/default.nix
+++ b/pkgs/tools/misc/ncdu/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchurl, ncurses }:
+{ lib, stdenv, fetchurl, ncurses }:
 
 stdenv.mkDerivation rec {
   pname = "ncdu";
-  version = "1.15.1";
+  version = "1.16";
 
   src = fetchurl {
     url = "https://dev.yorhel.nl/download/${pname}-${version}.tar.gz";
-    sha256 = "1c1zxalm5asyhn4p1hd51h7khw17515gbqmvdz63kc8xpx6xqbdh";
+    sha256 = "1m0gk09jaz114piidiw8fkg0id5l6nhz1cg5nlaf1yl3l595g49b";
   };
 
   buildInputs = [ ncurses ];
 
-  meta = with stdenv.lib; {
+  meta = with 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 zowoq ];
+    maintainers = with maintainers; [ pSub SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/misc/neo-cowsay/default.nix b/pkgs/tools/misc/neo-cowsay/default.nix
index 4473f869a38..4ed1bd51696 100644
--- a/pkgs/tools/misc/neo-cowsay/default.nix
+++ b/pkgs/tools/misc/neo-cowsay/default.nix
@@ -21,6 +21,6 @@ buildGoModule rec {
     description = "Cowsay reborn, written in Go";
     homepage = "https://github.com/Code-Hex/Neo-cowsay";
     license = with licenses; [artistic1 /* or */ gpl3];
-    maintainers = with maintainers; [ filalex77 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/misc/neofetch/default.nix b/pkgs/tools/misc/neofetch/default.nix
index f08e3828325..3d4bf8500ba 100644
--- a/pkgs/tools/misc/neofetch/default.nix
+++ b/pkgs/tools/misc/neofetch/default.nix
@@ -1,28 +1,41 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenvNoCC, fetchFromGitHub, bash, makeWrapper, pciutils
+, x11Support ? true, ueberzug
+}:
 
-stdenv.mkDerivation rec {
+stdenvNoCC.mkDerivation rec {
   pname = "neofetch";
-  version = "7.1.0";
+  version = "unstable-2020-11-26";
 
   src = fetchFromGitHub {
     owner = "dylanaraps";
     repo = "neofetch";
-    rev = version;
-    sha256 = "0i7wpisipwzk0j62pzaigbiq42y1mn4sbraz4my2jlz6ahwf00kv";
+    rev = "6dd85d67fc0d4ede9248f2df31b2cd554cca6c2f";
+    sha256 = "sha256-PZjFF/K7bvPIjGVoGqaoR8pWE6Di/qJVKFNcIz7G8xE=";
   };
 
-  dontBuild = true;
+  strictDeps = true;
+  buildInputs = [ bash ];
+  nativeBuildInputs = [ makeWrapper ];
+  postPatch = ''
+    patchShebangs --host neofetch
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/neofetch \
+      --prefix PATH : ${lib.makeBinPath ([ pciutils ] ++ lib.optional x11Support ueberzug) }
+  '';
 
   makeFlags = [
     "PREFIX=${placeholder "out"}"
     "SYSCONFDIR=${placeholder "out"}/etc"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    mainProgram = "neofetch";
   };
 }
diff --git a/pkgs/tools/misc/nginx-config-formatter/default.nix b/pkgs/tools/misc/nginx-config-formatter/default.nix
index c9726d7e040..fb5412a5866 100644
--- a/pkgs/tools/misc/nginx-config-formatter/default.nix
+++ b/pkgs/tools/misc/nginx-config-formatter/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python3 }:
+{ lib, stdenv, fetchFromGitHub, python3 }:
 
 stdenv.mkDerivation {
   version = "2019-02-13";
@@ -23,7 +23,7 @@ stdenv.mkDerivation {
     install -m 0755 $src/nginxfmt.py $out/bin/nginxfmt
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "nginx config file formatter";
     maintainers = with maintainers; [ Baughn ];
     license = licenses.asl20;
diff --git a/pkgs/tools/misc/nix-direnv/default.nix b/pkgs/tools/misc/nix-direnv/default.nix
index d92f2346563..de7074d12b5 100644
--- a/pkgs/tools/misc/nix-direnv/default.nix
+++ b/pkgs/tools/misc/nix-direnv/default.nix
@@ -1,23 +1,31 @@
-{ lib, stdenv, fetchFromGitHub, gnugrep, nix }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, gnugrep
+, nixStable
+, nixUnstable
+, enableFlakes ? false
+}:
 
+let
+  nix = if enableFlakes then nixUnstable else nixStable;
+in
 stdenv.mkDerivation rec {
   pname = "nix-direnv";
-  version = "1.1";
+  version = "1.4.0";
 
   src = fetchFromGitHub {
     owner = "nix-community";
     repo = "nix-direnv";
-    rev = "${version}";
-    sha256 = "sha256-xMz6e0OLeB3eltGrLV3Hew0lMjH5LSgqJ1l7JT2Ho/M=";
+    rev = version;
+    sha256 = "sha256-BKiuYvxgY2P7GK59jul5l0kHNrJtD2jmsMGmX0+09hY=";
   };
 
   # Substitute instead of wrapping because the resulting file is
   # getting sourced, not executed:
   postPatch = ''
-    substituteInPlace direnvrc \
-      --replace "grep" "${gnugrep}/bin/grep" \
-      --replace "nix-shell" "${nix}/bin/nix-shell" \
-      --replace "nix-instantiate" "${nix}/bin/nix-instantiate"
+    sed -i "1a NIX_BIN_PREFIX=${nix}/bin/" direnvrc
+    substituteInPlace direnvrc --replace "grep" "${gnugrep}/bin/grep"
   '';
 
   installPhase = ''
@@ -26,7 +34,7 @@ stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A fast, persistent use_nix implementation for direnv";
     homepage    = "https://github.com/nix-community/nix-direnv";
     license     = licenses.mit;
diff --git a/pkgs/tools/misc/nms/default.nix b/pkgs/tools/misc/nms/default.nix
index 0005ffe824b..8edddc4238d 100644
--- a/pkgs/tools/misc/nms/default.nix
+++ b/pkgs/tools/misc/nms/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "nms";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
   buildFlags = [ "nms" "sneakers" ];
   installFlags = [ "prefix=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/bartobri/no-more-secrets";
     description = ''
       A command line tool that recreates the famous data decryption
diff --git a/pkgs/tools/misc/nncp/default.nix b/pkgs/tools/misc/nncp/default.nix
new file mode 100644
index 00000000000..fc02431c768
--- /dev/null
+++ b/pkgs/tools/misc/nncp/default.nix
@@ -0,0 +1,71 @@
+{ lib, stdenv
+, go
+, fetchurl
+, redo-apenwarr
+, curl
+, perl
+, genericUpdater
+, writeShellScript
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nncp";
+  version = "6.5.0";
+
+  src = fetchurl {
+    url = "http://www.nncpgo.org/download/${pname}-${version}.tar.xz";
+    sha256 = "16hbcwwf65h2avgdyya2bk42bmmqnfl1m5v7y23cyp174ykjl794";
+  };
+
+  nativeBuildInputs = [ go redo-apenwarr ];
+
+  buildPhase = ''
+    runHook preBuild
+    export GOCACHE=$PWD/.cache
+    export CFGPATH=/etc/nncp.hjson
+    export SENDMAIL=sendmail # default value for generated config file
+    redo ''${enableParallelBuilding:+-j''${NIX_BUILD_CORES}}
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    export PREFIX=$out
+    rm -f INSTALL # work around case insensitivity
+    redo install
+    runHook postInstall
+  '';
+
+  enableParallelBuilding = true;
+
+  passthru.updateScript = genericUpdater {
+    inherit pname version;
+    versionLister = writeShellScript "nncp-versionLister" ''
+      echo "# Versions for $1:" >> "$2"
+      ${curl}/bin/curl -s http://www.nncpgo.org/Tarballs.html | ${perl}/bin/perl -lne 'print $1 if /Release.*>([0-9.]+)</'
+    '';
+  };
+
+  meta = with lib; {
+    description = "Secure UUCP-like store-and-forward exchanging";
+    longDescription = ''
+      This utilities are intended to help build up small size (dozens of
+      nodes) ad-hoc friend-to-friend (F2F) statically routed darknet
+      delay-tolerant networks for fire-and-forget secure reliable files,
+      file requests, Internet mail and commands transmission. All
+      packets are integrity checked, end-to-end encrypted, explicitly
+      authenticated by known participants public keys. Onion encryption
+      is applied to relayed packets. Each node acts both as a client and
+      server, can use push and poll behaviour model.
+
+      Out-of-box offline sneakernet/floppynet, dead drops, sequential
+      and append-only CD-ROM/tape storages, air-gapped computers
+      support. But online TCP daemon with full-duplex resumable data
+      transmission exists.
+    '';
+    homepage = "http://www.nncpgo.org/";
+    license = licenses.gpl3Only;
+    platforms = platforms.all;
+    maintainers = [ maintainers.woffs ];
+  };
+}
diff --git a/pkgs/tools/misc/noteshrink/default.nix b/pkgs/tools/misc/noteshrink/default.nix
index b934b128870..67c49c3ad0d 100644
--- a/pkgs/tools/misc/noteshrink/default.nix
+++ b/pkgs/tools/misc/noteshrink/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python3, imagemagick }:
+{ lib, fetchFromGitHub, python3, imagemagick }:
 
 with python3.pkgs;
 
@@ -15,7 +15,7 @@ buildPythonApplication rec {
 
   propagatedBuildInputs = [ numpy scipy imagemagick pillow ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Convert scans of handwritten notes to beautiful, compact PDFs";
     homepage    = "https://mzucker.github.io/2016/09/20/noteshrink.html";
     license     = licenses.mit;
diff --git a/pkgs/tools/misc/noti/default.nix b/pkgs/tools/misc/noti/default.nix
index 3a3a1a77037..9bfc7e259d5 100644
--- a/pkgs/tools/misc/noti/default.nix
+++ b/pkgs/tools/misc/noti/default.nix
@@ -3,13 +3,13 @@
 
 buildGoPackage rec {
   pname = "noti";
-  version = "3.4.0";
+  version = "3.5.0";
 
   src = fetchFromGitHub {
     owner = "variadico";
     repo = "noti";
     rev = version;
-    sha256 = "0bcwfyd93fx0rzjc9jgg4pvvqbpxwizr044yqqa5rx70gaasz7qa";
+    sha256 = "12r9wawwl6x0rfv1kahwkamfa0pjq24z60az9pn9nsi2z1rrlwkd";
   };
 
   buildInputs = lib.optional stdenv.isDarwin Cocoa;
@@ -26,7 +26,7 @@ buildGoPackage rec {
   '';
 
   meta = with lib; {
-    description = "Monitor a process and trigger a notification.";
+    description = "Monitor a process and trigger a notification";
     longDescription = ''
       Monitor a process and trigger a notification.
 
diff --git a/pkgs/tools/misc/notify-desktop/default.nix b/pkgs/tools/misc/notify-desktop/default.nix
index 61aa2c41c4f..c906443b07c 100644
--- a/pkgs/tools/misc/notify-desktop/default.nix
+++ b/pkgs/tools/misc/notify-desktop/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, dbus, pkgconfig }:
+{ lib, stdenv, fetchFromGitHub, dbus, pkg-config }:
 
 stdenv.mkDerivation {
   pname = "notify-desktop";
@@ -11,14 +11,14 @@ stdenv.mkDerivation {
     sha256 = "1brcvl2fx0yzxj9mc8hzfl32zdka1f1bxpzsclcsjplyakyinr1a";
   };
 
-  buildInputs = [ dbus pkgconfig ];
+  buildInputs = [ dbus pkg-config ];
 
   installPhase = ''
     mkdir -p $out/bin
     install -m 755 bin/notify-desktop $out/bin/notify-desktop
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Little application that lets you send desktop notifications with one command";
     longDescription = ''
       It's basically clone of notify-send from libnotify,
diff --git a/pkgs/tools/misc/notify/default.nix b/pkgs/tools/misc/notify/default.nix
new file mode 100644
index 00000000000..0d7e6af8363
--- /dev/null
+++ b/pkgs/tools/misc/notify/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "notify";
+  version = "0.0.2";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1nlsl4himxs5jv0fcd48jkwjnmn1w3alp0dcm1awmp6702zrsgqj";
+  };
+
+  vendorSha256 = "13dz0sk3561hrixsl1ghr9y0pzap2a8zrlbzzb7zs7550snbdcyg";
+
+  modRoot = ".";
+  subPackages = [
+    "cmd/notify/"
+  ];
+
+  # Test files are not part of the release tarball
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Notify allows sending the output from any tool to Slack, Discord and Telegram";
+    longDescription = ''
+      Notify is a helper utility written in Go that allows you to post the output from any tool
+      to Slack, Discord, and Telegram.
+    '';
+    homepage = "https://github.com/projectdiscovery/notify";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hanemile ];
+  };
+}
diff --git a/pkgs/tools/misc/ntfy/default.nix b/pkgs/tools/misc/ntfy/default.nix
index a3cf6ad07d5..e2bb64ef529 100644
--- a/pkgs/tools/misc/ntfy/default.nix
+++ b/pkgs/tools/misc/ntfy/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, pythonPackages, fetchFromGitHub }:
+{ lib, python3Packages, fetchFromGitHub }:
 
-pythonPackages.buildPythonApplication rec {
+python3Packages.buildPythonApplication rec {
   pname = "ntfy";
   version = "2.7.0";
 
@@ -11,13 +11,13 @@ pythonPackages.buildPythonApplication rec {
     sha256 = "09f02cn4i1l2aksb3azwfb70axqhn7d0d0vl2r6640hqr74nc1cv";
   };
 
-  checkInputs = with pythonPackages; [
+  checkInputs = with python3Packages; [
     mock
   ];
 
-  propagatedBuildInputs = with pythonPackages; [
+  propagatedBuildInputs = with python3Packages; [
     requests ruamel_yaml appdirs
-    sleekxmpp dns
+    sleekxmpp dnspython
     emoji
     psutil
     matrix-client
@@ -25,10 +25,10 @@ pythonPackages.buildPythonApplication rec {
   ];
 
   checkPhase = ''
-    HOME=$(mktemp -d) ${pythonPackages.python.interpreter} setup.py test
+    HOME=$(mktemp -d) ${python3Packages.python.interpreter} setup.py test
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A utility for sending notifications, on demand and when commands finish";
     homepage = "http://ntfy.rtfd.org/";
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/nvfancontrol/default.nix b/pkgs/tools/misc/nvfancontrol/default.nix
new file mode 100644
index 00000000000..2bfdb9896e4
--- /dev/null
+++ b/pkgs/tools/misc/nvfancontrol/default.nix
@@ -0,0 +1,31 @@
+{ lib, rustPlatform, fetchFromGitHub, libXNVCtrl, libX11, libXext }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nvfancontrol";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "foucault";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-0WBQSnTYVc3sNmZf/KFzznMg9AVsyaBgdx/IvG1dZAw=";
+  };
+
+  cargoSha256 = "sha256-fEzdghGQSSeyeyiHjw1ggQ38gsETJFl9bq/tizGxIis=";
+
+  nativeBuildInputs = [ libXNVCtrl libX11 libXext ];
+
+  # Needed for static linking
+  preConfigure = ''
+    export LIBRARY_PATH=${libXNVCtrl}/lib:${libX11}/lib:${libXext}/lib
+  '';
+
+  meta = with lib; {
+    description = "NVidia dynamic fan control for Linux";
+    homepage = "https://github.com/foucault/nvfancontrol";
+    changelog = "https://github.com/foucault/nvfancontrol/releases/tag/${version}";
+    license = with licenses; [ gpl3Only ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ devins2518 ];
+  };
+}
diff --git a/pkgs/tools/misc/nvimpager/default.nix b/pkgs/tools/misc/nvimpager/default.nix
new file mode 100644
index 00000000000..e0798919886
--- /dev/null
+++ b/pkgs/tools/misc/nvimpager/default.nix
@@ -0,0 +1,54 @@
+{ fetchFromGitHub
+, lib, stdenv
+, ncurses, neovim, procps
+, scdoc, lua51Packages, util-linux
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nvimpager";
+  version = "0.10";
+
+  src = fetchFromGitHub {
+    owner = "lucc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-okYnPwuxU/syxcKIMUBc25r791D6Bug2w2axH4vvmAY=";
+  };
+
+  buildInputs = [
+    ncurses # for tput
+    procps # for nvim_get_proc() which uses ps(1)
+  ];
+  nativeBuildInputs = [ scdoc ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+  buildFlags = [ "nvimpager.configured" "nvimpager.1" ];
+  preBuild = ''
+    patchShebangs nvimpager
+    substituteInPlace nvimpager --replace ':-nvim' ':-${neovim}/bin/nvim'
+    # remove git command from makefile as we run from a tarball
+    # replace with actual timestamp of the commit
+    substituteInPlace makefile --replace '$(shell git log -1 --no-show-signature --pretty="%ct")' 1623019602
+    '';
+
+  doCheck = true;
+  checkInputs = [ lua51Packages.busted util-linux neovim ];
+  checkPhase = ''
+    runHook preCheck
+    script -c "busted --lpath './?.lua' test"
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "Use neovim as pager";
+    longDescription = ''
+      Use neovim as a pager to view manpages, diffs, etc with nvim's syntax
+      highlighting.  Includes a cat mode to print highlighted files to stdout
+      and a ansi esc mode to highlight ansi escape sequences in neovim.
+    '';
+    homepage = "https://github.com/lucc/nvimpager";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.lucc ];
+  };
+}
diff --git a/pkgs/tools/misc/nyancat/default.nix b/pkgs/tools/misc/nyancat/default.nix
index a7b06614785..3aca7cc1729 100644
--- a/pkgs/tools/misc/nyancat/default.nix
+++ b/pkgs/tools/misc/nyancat/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "nyancat";
@@ -22,8 +22,8 @@ stdenv.mkDerivation rec {
     mkdir -p $out/share/man/man1
   '';
 
-  meta = with stdenv.lib; {
-    description = "Nyancat in your terminal, rendered through ANSI escape sequences.";
+  meta = with lib; {
+    description = "Nyancat in your terminal, rendered through ANSI escape sequences";
     homepage = "https://nyancat.dakko.us";
     license = licenses.ncsa;
     maintainers = with maintainers; [ midchildan ];
diff --git a/pkgs/tools/misc/ocz-ssd-guru/default.nix b/pkgs/tools/misc/ocz-ssd-guru/default.nix
deleted file mode 100644
index 00926663a6c..00000000000
--- a/pkgs/tools/misc/ocz-ssd-guru/default.nix
+++ /dev/null
@@ -1,53 +0,0 @@
-{ 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/pkgs/tools/misc/odroid-xu3-bootloader/default.nix b/pkgs/tools/misc/odroid-xu3-bootloader/default.nix
index 3896ca77a16..052c46cef8c 100644
--- a/pkgs/tools/misc/odroid-xu3-bootloader/default.nix
+++ b/pkgs/tools/misc/odroid-xu3-bootloader/default.nix
@@ -25,7 +25,7 @@ stdenv.mkDerivation {
       $out/bin/sd_fuse-xu3
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     platforms = platforms.linux;
     license = licenses.unfreeRedistributableFirmware;
     description = "Secure boot enabled boot loader for ODROID-XU{3,4}";
diff --git a/pkgs/tools/misc/odyssey/default.nix b/pkgs/tools/misc/odyssey/default.nix
index f736184ea50..788f3006735 100644
--- a/pkgs/tools/misc/odyssey/default.nix
+++ b/pkgs/tools/misc/odyssey/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, openssl }:
+{ lib, stdenv, fetchFromGitHub, cmake, openssl }:
 
 stdenv.mkDerivation rec {
   pname = "odyssey";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     install -Dm755 -t $out/bin sources/odyssey
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Scalable PostgreSQL connection pooler";
     homepage = "https://github.com/yandex/odyssey";
     license = licenses.bsd3;
diff --git a/pkgs/tools/misc/onefetch/default.nix b/pkgs/tools/misc/onefetch/default.nix
index 58abf6f72f8..6e7484a7e40 100644
--- a/pkgs/tools/misc/onefetch/default.nix
+++ b/pkgs/tools/misc/onefetch/default.nix
@@ -1,34 +1,33 @@
-{ fetchFromGitHub, rustPlatform, stdenv, fetchpatch
-, CoreFoundation, libiconv, libresolv, Security }:
+{ fetchFromGitHub
+, rustPlatform
+, lib
+, stdenv
+, fetchpatch
+, CoreFoundation
+, libiconv
+, libresolv
+, Security
+}:
 
 rustPlatform.buildRustPackage rec {
   pname = "onefetch";
-  version = "2.2.0";
+  version = "2.10.2";
 
   src = fetchFromGitHub {
     owner = "o2sh";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1sgpai3gx3w7w3ilmbnmzgdxdim6klkfiqaqxmffpyap6qgksfqs";
+    sha256 = "sha256-lrRp01ZeK9bGn7L7SqAxJAU9qugpHnC06CWChhVPGGQ=";
   };
 
-  cargoSha256 = "18z887mklynxpjci6va4i5zhg90j824avykym24vbz9w97nqpdd5";
+  cargoSha256 = "sha256-vNa1OF1x/MCTo9B4DTDZNWyHTsOl7Za3EgjnpsL/gWg=";
 
-  buildInputs = with stdenv;
-    lib.optionals isDarwin [ CoreFoundation libiconv libresolv Security ];
+  buildInputs = lib.optionals stdenv.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; {
+  meta = with lib; {
     description = "Git repository summary on your terminal";
     homepage = "https://github.com/o2sh/onefetch";
     license = licenses.mit;
-    maintainers = with maintainers; [ filalex77 ];
+    maintainers = with maintainers; [ Br1ght0ne kloenk SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/misc/opencorsairlink/default.nix b/pkgs/tools/misc/opencorsairlink/default.nix
index 11df20b3b82..14f955be1cd 100644
--- a/pkgs/tools/misc/opencorsairlink/default.nix
+++ b/pkgs/tools/misc/opencorsairlink/default.nix
@@ -1,11 +1,11 @@
-{ stdenv, fetchFromGitHub, libusb1, pkgconfig }:
+{ lib, stdenv, fetchFromGitHub, libusb1, pkg-config }:
 
 stdenv.mkDerivation rec {
   name = "OpenCorsairLink-${version}";
   version = "2019-12-23";
 
   buildInputs = [ libusb1 ];
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   makeFlags = [ "PREFIX=${placeholder "out"}" ];
 
@@ -16,11 +16,11 @@ stdenv.mkDerivation rec {
     sha256 = "1nizicl0mc9pslc6065mnrs0fnn8sh7ca8iiw7w9ix57zrhabpld";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Linux and Mac OS support for the CorsairLink Devices ";
     homepage = "https://github.com/audiohacked/OpenCorsairLink";
     license = licenses.gpl2;
     platforms = platforms.all;
-    maintainers = [ stdenv.lib.maintainers.expipiplus1 ];
+    maintainers = [ lib.maintainers.expipiplus1 ];
   };
 }
diff --git a/pkgs/tools/misc/opentelemetry-collector/default.nix b/pkgs/tools/misc/opentelemetry-collector/default.nix
new file mode 100644
index 00000000000..7c730c8c4a5
--- /dev/null
+++ b/pkgs/tools/misc/opentelemetry-collector/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule
+, fetchFromGitHub
+, stdenv
+, lib
+}:
+
+buildGoModule rec {
+  pname = "opentelemetry-collector";
+  version = "0.26.0";
+
+  src = fetchFromGitHub {
+    owner = "open-telemetry";
+    repo = "opentelemetry-collector-contrib";
+    rev = "v${version}";
+    sha256 = "03713b4bkhcz61maz0r5mkd36kv3rq8rji3qcpi9zf5bkkjs1yzb";
+  };
+
+  vendorSha256 = if stdenv.isDarwin
+    then "0anw3l6pq8yys2g2607ndhklb9m1i9krgjrw4wb99igavjzp3wpj"
+    else "04h463d2d7g6wqp5mzkqlszwzdbq0pix6j7n2s9s80lwg7nh8k3h";
+
+  subPackages = [ "cmd/otelcontribcol" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/open-telemetry/opentelemetry-collector";
+    description = "OpenTelemetry Collector";
+    license = licenses.asl20;
+    maintainers = [ maintainers.uri-canva ];
+  };
+}
diff --git a/pkgs/tools/misc/opentsdb/default.nix b/pkgs/tools/misc/opentsdb/default.nix
index 3b9623d5ad0..678c2607b61 100644
--- a/pkgs/tools/misc/opentsdb/default.nix
+++ b/pkgs/tools/misc/opentsdb/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, autoconf, automake, curl, fetchurl, jdk, jre, makeWrapper, nettools
+{ lib, stdenv, autoconf, automake, curl, fetchurl, jdk8, makeWrapper, nettools
 , python, git
 }:
 
-with stdenv.lib;
+let jdk = jdk8; jre = jdk8.jre; in
 
 stdenv.mkDerivation rec {
   pname = "opentsdb";
@@ -13,7 +13,8 @@ stdenv.mkDerivation rec {
     sha256 = "0b0hilqmgz6n1q7irp17h48v8fjpxhjapgw1py8kyav1d51s7mm2";
   };
 
-  buildInputs = [ autoconf automake curl jdk makeWrapper nettools python git ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ autoconf automake curl jdk nettools python git ];
 
   preConfigure = ''
     patchShebangs ./build-aux/
@@ -26,11 +27,14 @@ stdenv.mkDerivation rec {
       --set JAVA "${jre}/bin/java"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Time series database with millisecond precision";
     homepage = "http://opentsdb.net";
     license = licenses.lgpl21Plus;
-    platforms = stdenv.lib.platforms.linux;
-    maintainers = [ maintainers.ocharles ];
+    platforms = lib.platforms.linux;
+    maintainers = [ ];
+    knownVulnerabilities = [
+      "CVE-2020-35476" # https://github.com/OpenTSDB/opentsdb/issues/2051
+    ];
   };
 }
diff --git a/pkgs/tools/misc/oppai-ng/default.nix b/pkgs/tools/misc/oppai-ng/default.nix
index 46b2fd444ec..f36dacdd3a2 100644
--- a/pkgs/tools/misc/oppai-ng/default.nix
+++ b/pkgs/tools/misc/oppai-ng/default.nix
@@ -1,16 +1,16 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 }:
 
 stdenv.mkDerivation rec {
   pname = "oppai-ng";
-  version = "3.2.3";
+  version = "4.1.0";
 
   src = fetchFromGitHub {
     owner = "Francesco149";
     repo = pname;
     rev = version;
-    sha256 = "1wrnpnx1yl0pdzmla4knlpcwy7baamy2wpdypnbdqxrn0zkw7kzk";
+    sha256 = "sha256-L9eraLOWm1tMImS8bLB9T4Md4VdTSxqI9Bt4r8eqxqs=";
   };
 
   buildPhase = ''
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
     install -D liboppai.so $out/lib/liboppai.so
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Difficulty and pp calculator for osu!";
     homepage = "https://github.com/Francesco149/oppai-ng";
     license = licenses.unlicense;
diff --git a/pkgs/tools/misc/os-prober/default.nix b/pkgs/tools/misc/os-prober/default.nix
index 9b2afed0a9a..bc5dbe4672e 100644
--- a/pkgs/tools/misc/os-prober/default.nix
+++ b/pkgs/tools/misc/os-prober/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitLab, makeWrapper, nixosTests,
+{ lib, stdenv, fetchFromGitLab, makeWrapper, nixosTests,
 # optional dependencies, the command(s) they provide
 coreutils,  # mktemp
 grub2,      # grub-mount and grub-probe
@@ -11,17 +11,17 @@ lvm2        # lvs
 }:
 
 stdenv.mkDerivation rec {
-  version = "1.77";
+  version = "1.78";
   pname = "os-prober";
   src = fetchFromGitLab {
     domain = "salsa.debian.org";
     owner = "installer-team";
     repo = pname;
     rev = version;
-    sha256 = "05sji756xdl67pp2sf7rk0ih9h6f6kgk9nvxlyv1bzbmcizlh2d2";
+    sha256 = "sha256-mfv1b40n/opXdyj6IXWVf/32sWlS+/DbXIRwE1zX4KM=";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
   installPhase = ''
     # executables
     install -Dt $out/bin os-prober linux-boot-prober
@@ -56,7 +56,7 @@ stdenv.mkDerivation rec {
     done;
     for file in $out/bin/*; do
       wrapProgram $file \
-        --suffix PATH : ${stdenv.lib.makeBinPath [ grub2 udev coreutils cryptsetup libuuid ntfs3g lvm2 dmraid ]} \
+        --suffix PATH : ${lib.makeBinPath [ grub2 udev coreutils cryptsetup libuuid ntfs3g lvm2 dmraid ]} \
         --run "[ -d /var/lib/os-prober ] || mkdir /var/lib/os-prober"
     done;
   '';
@@ -64,7 +64,7 @@ stdenv.mkDerivation rec {
   passthru.tests = {
     os-prober = nixosTests.os-prober;
   };
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Utility to detect other OSs on a set of drives";
     homepage = "http://packages.debian.org/source/sid/os-prober";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/misc/osinfo-db-tools/default.nix b/pkgs/tools/misc/osinfo-db-tools/default.nix
index c0921a496cc..4ee1749c6d3 100644
--- a/pkgs/tools/misc/osinfo-db-tools/default.nix
+++ b/pkgs/tools/misc/osinfo-db-tools/default.nix
@@ -1,20 +1,20 @@
-{ stdenv, fetchurl, pkgconfig, meson, ninja, gettext, glib, libxml2, perl, python3
-, libxslt, libarchive, bzip2, lzma, json-glib, libsoup
+{ lib, stdenv, fetchurl, pkg-config, meson, ninja, gettext, glib, libxml2, perl, python3
+, libxslt, libarchive, bzip2, xz, json-glib, libsoup
 }:
 
 stdenv.mkDerivation rec {
   pname = "osinfo-db-tools";
-  version = "1.8.0";
+  version = "1.9.0";
 
   src = fetchurl {
     url = "https://releases.pagure.org/libosinfo/${pname}-${version}.tar.xz";
-    sha256 = "038q3gzdbkfkhpicj0755mw1q4gbvn57pslpw8n2dp3lds9im0g9";
+    sha256 = "sha256-JV8ch4us7HDDAg/1qcsPa9hhygAJ8kYI31729i1SQ8A=";
   };
 
-  nativeBuildInputs = [ meson ninja pkgconfig gettext perl python3 ];
-  buildInputs = [ glib json-glib libxml2 libxslt libarchive bzip2 lzma libsoup ];
+  nativeBuildInputs = [ meson ninja pkg-config gettext perl python3 ];
+  buildInputs = [ glib json-glib libxml2 libxslt libarchive bzip2 xz libsoup ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tools for managing the osinfo database";
     homepage = "https://libosinfo.org/";
     license = licenses.lgpl2Plus;
diff --git a/pkgs/tools/misc/osm2pgsql/default.nix b/pkgs/tools/misc/osm2pgsql/default.nix
index ebe99eca8cf..062b49e8bbd 100644
--- a/pkgs/tools/misc/osm2pgsql/default.nix
+++ b/pkgs/tools/misc/osm2pgsql/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , cmake
 , expat
@@ -16,30 +16,28 @@
 
 stdenv.mkDerivation rec {
   pname = "osm2pgsql";
-  version = "1.3.0";
+  version = "1.5.0";
 
   src = fetchFromGitHub {
     owner = "openstreetmap";
     repo = pname;
     rev = version;
-    sha256 = "1dsyhcifixmcw05qxjald02pml0zfdij81pgy9yh8p00v0rqq57x";
+    sha256 = "sha256-PHr9wP+DgsiQAvrVNO8Aa/X/dkrAUnlPDwAzSISa0GM=";
   };
 
   nativeBuildInputs = [ cmake ];
 
   buildInputs = [ expat proj bzip2 zlib boost postgresql libosmium protozero ]
-    ++ stdenv.lib.optional withLuaJIT luajit
-    ++ stdenv.lib.optional (!withLuaJIT) lua;
+    ++ lib.optional withLuaJIT luajit
+    ++ lib.optional (!withLuaJIT) lua;
 
   cmakeFlags = [ "-DEXTERNAL_LIBOSMIUM=ON" "-DEXTERNAL_PROTOZERO=ON" ]
-    ++ stdenv.lib.optional withLuaJIT "-DWITH_LUAJIT:BOOL=ON";
+    ++ lib.optional withLuaJIT "-DWITH_LUAJIT:BOOL=ON";
 
-  NIX_CFLAGS_COMPILE = "-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H";
-
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "OpenStreetMap data to PostgreSQL converter";
-    homepage = "https://github.com/openstreetmap/osm2pgsql";
-    license = licenses.gpl2;
+    homepage = "https://osm2pgsql.org";
+    license = licenses.gpl2Plus;
     platforms = with platforms; linux ++ darwin;
     maintainers = with maintainers; [ jglukasik das-g ];
   };
diff --git a/pkgs/tools/misc/ostree/default.nix b/pkgs/tools/misc/ostree/default.nix
index 568afb50403..b5c0940910c 100644
--- a/pkgs/tools/misc/ostree/default.nix
+++ b/pkgs/tools/misc/ostree/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , fetchpatch
 , substituteAll
@@ -12,6 +12,8 @@
 , xz
 , e2fsprogs
 , libsoup
+, glib-networking
+, wrapGAppsHook
 , gpgme
 , which
 , makeWrapper
@@ -19,13 +21,13 @@
 , automake
 , libtool
 , fuse
-, utillinuxMinimal
+, util-linuxMinimal
 , libselinux
 , libsodium
 , libarchive
 , libcap
 , bzip2
-, yacc
+, bison
 , libxslt
 , docbook-xsl-nons
 , docbook_xml_dtd_42
@@ -39,13 +41,13 @@ let
   ]));
 in stdenv.mkDerivation rec {
   pname = "ostree";
-  version = "2020.4";
+  version = "2021.1";
 
   outputs = [ "out" "dev" "man" "installedTests" ];
 
   src = fetchurl {
     url = "https://github.com/ostreedev/ostree/releases/download/v${version}/libostree-${version}.tar.xz";
-    sha256 = "0s13cjrpx5r1dc9j9c9924zak45wl9nlbg9hiwgpsal80l92c39n";
+    sha256 = "sha256-kbS9kmSDHSD/AOxELUjt5SbbVTeb2RdgaGPAX0O4WlE=";
   };
 
   patches = [
@@ -74,10 +76,11 @@ in stdenv.mkDerivation rec {
     gobject-introspection
     which
     makeWrapper
-    yacc
+    bison
     libxslt
     docbook-xsl-nons
     docbook_xml_dtd_42
+    wrapGAppsHook
   ];
 
   buildInputs = [
@@ -85,6 +88,7 @@ in stdenv.mkDerivation rec {
     systemd
     e2fsprogs
     libsoup
+    glib-networking
     gpgme
     fuse
     libselinux
@@ -93,7 +97,7 @@ in stdenv.mkDerivation rec {
     libarchive
     bzip2
     xz
-    utillinuxMinimal # for libmount
+    util-linuxMinimal # for libmount
 
     # for installed tests
     testPython
@@ -119,7 +123,7 @@ in stdenv.mkDerivation rec {
   '';
 
   postFixup = let
-    typelibPath = stdenv.lib.makeSearchPath "/lib/girepository-1.0" [
+    typelibPath = lib.makeSearchPath "/lib/girepository-1.0" [
       (placeholder "out")
       gobject-introspection
     ];
@@ -135,7 +139,7 @@ in stdenv.mkDerivation rec {
     };
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Git for operating system binaries";
     homepage = "https://ostree.readthedocs.io/en/latest/";
     license = licenses.lgpl2Plus;
diff --git a/pkgs/tools/misc/otfcc/default.nix b/pkgs/tools/misc/otfcc/default.nix
index dc7e3effe0a..b233e94f4f6 100644
--- a/pkgs/tools/misc/otfcc/default.nix
+++ b/pkgs/tools/misc/otfcc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, premake5 }:
+{ lib, stdenv, fetchFromGitHub, premake5 }:
 
 stdenv.mkDerivation rec {
   pname = "otfcc";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     ./move-makefiles.patch
   ];
 
-  buildFlags = stdenv.lib.optional stdenv.isAarch64 [ "config=release_arm" ];
+  buildFlags = lib.optional stdenv.isAarch64 [ "config=release_arm" ];
 
   installPhase = ''
     mkdir -p $out/bin
@@ -27,11 +27,11 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Optimized OpenType builder and inspector";
     homepage = "https://github.com/caryll/otfcc";
     license = licenses.asl20;
-    platforms = [ "aarch64-linux" "i686-linux" "x86_64-linux" "x86_64-darwin" ];
+    platforms = platforms.unix;
     maintainers = with maintainers; [ jfrankenau ttuegel ];
   };
 
diff --git a/pkgs/tools/misc/ovh-ttyrec/default.nix b/pkgs/tools/misc/ovh-ttyrec/default.nix
new file mode 100644
index 00000000000..98d9ef20100
--- /dev/null
+++ b/pkgs/tools/misc/ovh-ttyrec/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, zstd }:
+
+stdenv.mkDerivation rec {
+  pname = "ovh-ttyrec";
+  version = "1.1.6.7";
+
+  src = fetchFromGitHub {
+    owner = "ovh";
+    repo = "ovh-ttyrec";
+    rev = "v${version}";
+    sha256 = "sha256-OkSs0Cu79u53+fN57px48f6kJKuOJLjGUar+lLTdUJU=";
+  };
+
+  nativeBuildInputs = [ zstd ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,man}
+    cp ttytime ttyplay ttyrec $out/bin
+    cp docs/*.1 $out/man
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ovh/ovh-ttyrec/";
+    description = "Terminal interaction recorder and player";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ chaduffy zimbatm ];
+  };
+}
diff --git a/pkgs/tools/misc/page/default.nix b/pkgs/tools/misc/page/default.nix
index c93084a16d7..9d1d6d5abe6 100644
--- a/pkgs/tools/misc/page/default.nix
+++ b/pkgs/tools/misc/page/default.nix
@@ -2,13 +2,13 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "page";
-  version = "2.3.4";
+  version = "2.3.5";
 
   src = fetchFromGitHub {
     owner = "I60R";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0xcbnl8fbdfdmcbv5d7v830aa3vfhg7nlf768rbrfd5a0970pllh";
+    sha256 = "1pk3iclmwbkg4nvsgarq4qjpzapjhsl7b7z6zw6havp1zmx9h806";
   };
 
   nativeBuildInputs = [ installShellFiles ];
@@ -20,7 +20,7 @@ rustPlatform.buildRustPackage rec {
     installShellCompletion --zsh $completions_dir/_page
   '';
 
-  cargoSha256 = "0ckfmqi6jvbvj99vbdp798mmy6gc54254n32br0ri842b04i26qf";
+  cargoSha256 = "19ff5h8z34z15wdnd3mj8bwlqcixwbimys77gfjmzb3w1g9ivlks";
 
   meta = with lib; {
     description = "Use neovim as pager";
diff --git a/pkgs/tools/misc/pal/default.nix b/pkgs/tools/misc/pal/default.nix
index c285dc2463b..635c6e0b524 100644
--- a/pkgs/tools/misc/pal/default.nix
+++ b/pkgs/tools/misc/pal/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, glib, gettext, readline, pkgconfig }:
+{lib, stdenv, fetchurl, glib, gettext, readline, pkg-config }:
 
 stdenv.mkDerivation rec {
   name = "pal-0.4.3";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "prefix=$(out)" ];
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ glib gettext readline ];
 
   hardeningDisable = [ "format" ];
@@ -22,8 +22,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/misc/pandoc-lua-filters/default.nix b/pkgs/tools/misc/pandoc-lua-filters/default.nix
new file mode 100644
index 00000000000..6eb3359b3b5
--- /dev/null
+++ b/pkgs/tools/misc/pandoc-lua-filters/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pandoc-lua-filters";
+  version = "2020-11-30";
+
+  src = fetchFromGitHub {
+    owner = "pandoc";
+    repo = "lua-filters";
+    rev = "v${version}";
+    sha256 = "HWBlmlIuJOSgRVrUmXOAI4XTxs1PbZhcwZgZFX0x2wM=";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dt $out/share/pandoc/filters **/*.lua
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A collection of lua filters for pandoc";
+    homepage = "https://github.com/pandoc/lua-filters";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jtojnar ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/misc/pandoc-plantuml-filter/default.nix b/pkgs/tools/misc/pandoc-plantuml-filter/default.nix
index 61a0f14d597..cdf0ab862df 100644
--- a/pkgs/tools/misc/pandoc-plantuml-filter/default.nix
+++ b/pkgs/tools/misc/pandoc-plantuml-filter/default.nix
@@ -19,7 +19,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     homepage = "https://github.com/timofurrer/pandoc-plantuml-filter";
-    description = "Pandoc filter which converts PlantUML code blocks to PlantUML images.";
+    description = "Pandoc filter which converts PlantUML code blocks to PlantUML images";
     license = licenses.mit;
     maintainers = with maintainers; [ cmcdragonkai ];
   };
diff --git a/pkgs/tools/misc/paperlike-go/default.nix b/pkgs/tools/misc/paperlike-go/default.nix
new file mode 100644
index 00000000000..0278fb1f791
--- /dev/null
+++ b/pkgs/tools/misc/paperlike-go/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule {
+  pname = "paperlike-go";
+  version = "unstable-2021-03-26";
+
+  src = fetchFromGitHub {
+    owner = "leoluk";
+    repo = "paperlike-go";
+    rev = "bd658d88ea9a3b21e1b301b96253abab7cf56d79";
+    sha256 = "1h0n2n5w5pn3r08qf6hbmiib5m71br27y66ki9ajnaa890377qaj";
+  };
+
+  subPackages = [ "cmd/paperlike-cli" ];
+
+  vendorSha256 = "00mn0zfivxp2h77s7gmyyjp8p5a1vysn73wwaalgajymvljxxx1r";
+
+  meta = {
+    description = "paperlike-go is a Linux Go library and CLI utility to control a Dasung Paperlike display via I2C DDC.";
+    homepage = "https://github.com/leoluk/paperlike-go";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.adisbladis ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/paps/default.nix b/pkgs/tools/misc/paps/default.nix
index 8084f49f1b3..ca6607b2f18 100644
--- a/pkgs/tools/misc/paps/default.nix
+++ b/pkgs/tools/misc/paps/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub
-, autoconf, automake, pkgconfig, intltool, pango }:
+{ lib, stdenv, fetchFromGitHub
+, autoconf, automake, pkg-config, intltool, pango }:
 
 stdenv.mkDerivation rec {
   pname = "paps";
@@ -12,14 +12,14 @@ stdenv.mkDerivation rec {
     sha256 = "129wpm2ayxs6qfh2761d4x9c034ivb2bcmmcnl56qs4448qb9495";
   };
 
-  nativeBuildInputs = [ autoconf automake pkgconfig intltool ];
+  nativeBuildInputs = [ autoconf automake pkg-config intltool ];
   buildInputs = [ pango ];
 
   preConfigure = ''
     ./autogen.sh
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Pango to PostScript converter";
     homepage = "https://github.com/dov/paps";
     license = licenses.lgpl2;
diff --git a/pkgs/tools/misc/parallel/default.nix b/pkgs/tools/misc/parallel/default.nix
index d11c41195ce..0667327d062 100644
--- a/pkgs/tools/misc/parallel/default.nix
+++ b/pkgs/tools/misc/parallel/default.nix
@@ -1,26 +1,27 @@
-{ fetchurl, stdenv, perl, makeWrapper, procps }:
+{ fetchurl, lib, stdenv, perl, makeWrapper, procps, coreutils }:
 
 stdenv.mkDerivation rec {
-  name = "parallel-20200722";
+  pname = "parallel";
+  version = "20210322";
 
   src = fetchurl {
-    url = "mirror://gnu/parallel/${name}.tar.bz2";
-    sha256 = "0vqd8nhf4lkvbfy7nnibxjkpzpfandpklqm0hrix5vki5x7x80a8";
+    url = "mirror://gnu/parallel/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-mPcbRFojoYu06bzk83S5PmptnezfiSvo0iRZ8iS4VpQ=";
   };
 
-  outputs = [ "out" "man" ];
+  outputs = [ "out" "man" "doc" ];
 
   nativeBuildInputs = [ makeWrapper ];
   buildInputs = [ perl procps ];
 
   postInstall = ''
     wrapProgram $out/bin/parallel \
-      --prefix PATH : "${stdenv.lib.makeBinPath [ procps perl ]}"
+      --prefix PATH : "${lib.makeBinPath [ procps perl coreutils ]}"
   '';
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Shell tool for executing jobs in parallel";
     longDescription =
       '' GNU Parallel is a shell tool for executing jobs in parallel.  A job
diff --git a/pkgs/tools/misc/parcellite/default.nix b/pkgs/tools/misc/parcellite/default.nix
index 97c67f59b08..615e9e528d7 100644
--- a/pkgs/tools/misc/parcellite/default.nix
+++ b/pkgs/tools/misc/parcellite/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub, autoreconfHook
-, gtk2, hicolor-icon-theme, intltool, pkgconfig
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
+, gtk2, hicolor-icon-theme, intltool, pkg-config
 , which, wrapGAppsHook, xdotool }:
 
 stdenv.mkDerivation rec {
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
     sha256 = "19q4x6x984s6gxk1wpzaxawgvly5vnihivrhmja2kcxhzqrnfhiy";
   };
 
-  nativeBuildInputs = [ autoreconfHook intltool pkgconfig wrapGAppsHook ];
+  nativeBuildInputs = [ autoreconfHook intltool pkg-config wrapGAppsHook ];
   buildInputs = [ gtk2 hicolor-icon-theme ];
   NIX_LDFLAGS = "-lgio-2.0";
 
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     gappsWrapperArgs+=(--prefix PATH : "${which}/bin:${xdotool}/bin")
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Lightweight GTK clipboard manager";
     homepage = "https://github.com/rickyrockrat/parcellite";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/misc/parted/default.nix b/pkgs/tools/misc/parted/default.nix
index 808b0382f32..e954bfbe5e4 100644
--- a/pkgs/tools/misc/parted/default.nix
+++ b/pkgs/tools/misc/parted/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , fetchpatch
 , lvm2
@@ -8,18 +8,18 @@
 , dosfstools
 , e2fsprogs
 , perl
-, python2
-, utillinux
+, python3
+, util-linux
 , check
-, enableStatic ? false
+, enableStatic ? stdenv.hostPlatform.isStatic
 }:
 
 stdenv.mkDerivation rec {
-  name = "parted-3.3";
+  name = "parted-3.4";
 
   src = fetchurl {
     url = "mirror://gnu/parted/${name}.tar.xz";
-    sha256 = "0i1xp367wpqw75b20c3jnism3dg3yqj4a7a22p2jb1h1hyyv9qjp";
+    sha256 = "sha256-4SmAIkctpVibfyvh1e48G2bsPZbfutA9xkKv0AnaU0I=";
   };
 
   outputs = [ "out" "dev" "man" "info" ];
@@ -29,21 +29,21 @@ stdenv.mkDerivation rec {
   '';
 
   buildInputs = [ libuuid ]
-    ++ stdenv.lib.optional (readline != null) readline
-    ++ stdenv.lib.optional (gettext != null) gettext
-    ++ stdenv.lib.optional (lvm2 != null) lvm2;
+    ++ lib.optional (readline != null) readline
+    ++ lib.optional (gettext != null) gettext
+    ++ 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";
+    ++ lib.optional (lvm2 == null) "--disable-device-mapper"
+    ++ 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 ];
+  checkInputs = [ check dosfstools e2fsprogs perl python3 util-linux ];
 
   meta = {
     description = "Create, destroy, resize, check, and copy partitions";
@@ -59,13 +59,13 @@ stdenv.mkDerivation rec {
     '';
 
     homepage = "https://www.gnu.org/software/parted/";
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
 
     maintainers = [
       # Add your name here!
     ];
 
     # GNU Parted requires libuuid, which is part of util-linux-ng.
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/partition-manager/default.nix b/pkgs/tools/misc/partition-manager/default.nix
index 1b5f7dbdbec..064590ef979 100644
--- a/pkgs/tools/misc/partition-manager/default.nix
+++ b/pkgs/tools/misc/partition-manager/default.nix
@@ -1,32 +1,66 @@
-{ mkDerivation, fetchurl, lib
+{ mkDerivation, fetchurl, lib, makeWrapper
 , extra-cmake-modules, kdoctools, wrapGAppsHook, wrapQtAppsHook
 , kconfig, kcrash, kinit, kpmcore
-, eject, libatasmart , utillinux, qtbase
+, cryptsetup, lvm2, mdadm, smartmontools, systemdMinimal, util-linux
+, btrfs-progs, dosfstools, e2fsprogs, exfat, f2fs-tools, fatresize, hfsprogs
+, jfsutils, nilfs-utils, ntfs3g, reiser4progs, reiserfsprogs, udftools, xfsprogs, zfs
 }:
 
 let
-  pname = "partitionmanager";
+  # External programs are resolved by `partition-manager` and then
+  # invoked by `kpmcore_externalcommand` from `kpmcore` as root.
+  # So these packages should be in PATH of `partition-manager`.
+  # https://github.com/KDE/kpmcore/blob/06f15334ecfbe871730a90dbe2b694ba060ee998/src/util/externalcommand_whitelist.h
+  runtimeDeps = lib.makeBinPath [
+    cryptsetup
+    lvm2
+    mdadm
+    smartmontools
+    systemdMinimal
+    util-linux
+
+    btrfs-progs
+    dosfstools
+    e2fsprogs
+    exfat
+    f2fs-tools
+    fatresize
+    hfsprogs
+    jfsutils
+    nilfs-utils
+    ntfs3g
+    reiser4progs
+    reiserfsprogs
+    udftools
+    xfsprogs
+    zfs
+
+    # FIXME: Missing command: tune.exfat hfsck hformat fsck.nilfs2 {fsck,mkfs,debugfs,tunefs}.ocfs2
+  ];
+
 in mkDerivation rec {
-  name = "${pname}-${version}";
-  version = "3.3.1";
+  pname = "partitionmanager";
+  # NOTE: When changing this version, also change the version of `kpmcore`.
+  version = "4.2.0";
 
   src = fetchurl {
-    url = "mirror://kde/stable/${pname}/${version}/src/${name}.tar.xz";
-    sha256 = "0jhggb4xksb0k0mj752n6pz0xmccnbzlp984xydqbz3hkigra1si";
+    url = "mirror://kde/stable/${pname}/${version}/src/${pname}-${version}.tar.xz";
+    hash = "sha256-6Qlt1c47Eek6TkWWBzTyBZYJ1jfhtwsC9X5q5h6IhPg=";
   };
 
-  enableParallelBuilding = true;
-
-  nativeBuildInputs = [ extra-cmake-modules kdoctools wrapGAppsHook wrapQtAppsHook ];
+  nativeBuildInputs = [ extra-cmake-modules kdoctools wrapGAppsHook wrapQtAppsHook makeWrapper ];
 
-  # refer to kpmcore for the use of eject
-  buildInputs = [ eject libatasmart utillinux ];
   propagatedBuildInputs = [ kconfig kcrash kinit kpmcore ];
 
+  postFixup = ''
+    wrapProgram $out/bin/partitionmanager \
+      --prefix PATH : "${runtimeDeps}"
+  '';
+
   meta = with lib; {
     description = "KDE Partition Manager";
-    license = licenses.gpl2;
+    license = with licenses; [ cc-by-40 cc0 gpl3Plus lgpl3Plus mit ];
     homepage = "https://www.kde.org/applications/system/kdepartitionmanager/";
-    maintainers = with maintainers; [ peterhoeg ];
+    maintainers = with maintainers; [ peterhoeg oxalica ];
   };
 }
diff --git a/pkgs/tools/misc/past-time/default.nix b/pkgs/tools/misc/past-time/default.nix
new file mode 100644
index 00000000000..3604e4ddcb4
--- /dev/null
+++ b/pkgs/tools/misc/past-time/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildPythonApplication
+, click
+, fetchFromGitHub
+, freezegun
+, pytestCheckHook
+, tqdm
+}:
+
+buildPythonApplication rec {
+  pname = "past-time";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "fabaff";
+    repo = pname;
+    rev = version;
+    sha256 = "0yhc0630rmcx4ia9y6klpx002mavfmqf1s3jb2gz54jlccwqbfgl";
+  };
+
+  propagatedBuildInputs = [
+    click
+    tqdm
+  ];
+
+  checkInputs = [
+    freezegun
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "past_time" ];
+
+  meta = with lib; {
+    description = "Tool to visualize the progress of the year based on the past days";
+    homepage = "https://github.com/fabaff/past-time";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/misc/pastebinit/default.nix b/pkgs/tools/misc/pastebinit/default.nix
index a3134f57397..c5419b27fec 100644
--- a/pkgs/tools/misc/pastebinit/default.nix
+++ b/pkgs/tools/misc/pastebinit/default.nix
@@ -1,4 +1,8 @@
-{ stdenv, fetchurl, python3 }:
+{ lib, stdenv
+, fetchurl
+, fetchpatch
+, python3
+}:
 
 stdenv.mkDerivation rec {
   version = "1.5";
@@ -9,7 +13,26 @@ stdenv.mkDerivation rec {
     sha256 = "0mw48fgm9lyh9d3pw997fccmglzsjccf2y347gxjas74wx6aira2";
   };
 
-  buildInputs = [ python3 ];
+  buildInputs = [
+    (python3.withPackages (p: [ p.distro ]))
+  ];
+
+  patchFlags = [ "-p0" ];
+
+  patches = [
+    # Required to allow pastebinit 1.5 to run on Python 3.8
+    (fetchpatch {
+      name = "use-distro-module.patch";
+      url = "https://bazaar.launchpad.net/~arnouten/pastebinit/python38/diff/264?context=3";
+      sha256 = "1gp5inp4xald65xbb7fc5aqq5s2fhw464niwjjja9anqyp3zhawj";
+    })
+    # Required because pastebin.com now redirects http requests to https
+    (fetchpatch {
+      name = "pastebin-com-https.patch";
+      url = "https://bazaar.launchpad.net/~arnouten/pastebinit/pastebin-com-https/diff/264?context=3";
+      sha256 = "0hxhhfcai0mll8qfyhdl3slmbf34ynb759b648x63274m9nd2kji";
+    })
+  ];
 
   installPhase = ''
     mkdir -p $out/bin
@@ -19,10 +42,10 @@ stdenv.mkDerivation rec {
     substituteInPlace $out/bin/pastebinit --replace "'/etc/pastebin.d" "'$out/etc/pastebin.d"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = with maintainers; [ raboof ];
     license = licenses.gpl2;
     platforms = platforms.linux;
   };
diff --git a/pkgs/tools/misc/patdiff/default.nix b/pkgs/tools/misc/patdiff/default.nix
index e0b54e56081..dcd06ce1d2b 100644
--- a/pkgs/tools/misc/patdiff/default.nix
+++ b/pkgs/tools/misc/patdiff/default.nix
@@ -4,8 +4,8 @@ with ocamlPackages;
 
 janePackage {
   pname = "patdiff";
-  hash = "1yqvxdmkgcwgx3npgncpdqwkpdxiqr1q41wci7589s8z7xi5nwyz";
-  buildInputs = [ core_extended expect_test_helpers patience_diff ocaml_pcre shell ];
+  hash = "1yslj6xxyv8rx8y5s1civ1zq8y6vvxmkszdds958zdm1p1ign54r";
+  buildInputs = [ core patience_diff ocaml_pcre ];
   meta = {
     description = "File Diff using the Patience Diff algorithm";
   };
diff --git a/pkgs/tools/misc/pazi/default.nix b/pkgs/tools/misc/pazi/default.nix
index cc7e7b043e0..08adb3c199d 100644
--- a/pkgs/tools/misc/pazi/default.nix
+++ b/pkgs/tools/misc/pazi/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform, darwin }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, darwin }:
 
 rustPlatform.buildRustPackage rec {
   pname = "pazi";
@@ -11,11 +11,11 @@ rustPlatform.buildRustPackage rec {
     sha256 = "0z8x70mwg0mvz6iap92gil37d4kpg5dizlyfx3zk7984ynycgap8";
   };
 
-  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
+  buildInputs = lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
 
-  cargoSha256 = "0sja0q9i0b1zb3a0a6z561yg9lqykylwr3iwin4r6cmi7j2sw5j6";
+  cargoSha256 = "1iamlp5519h8mmgd4964cvyp7mmnqdg2d3qj5v7yzilyp4nz15jc";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "An autojump \"zap to directory\" helper";
     homepage = "https://github.com/euank/pazi";
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/pb_cli/default.nix b/pkgs/tools/misc/pb_cli/default.nix
index 858422b8532..48b819d5bfd 100644
--- a/pkgs/tools/misc/pb_cli/default.nix
+++ b/pkgs/tools/misc/pb_cli/default.nix
@@ -1,5 +1,5 @@
 { screenshots ? true, video ? false, clipboard ? true
-, stdenv, jq, curl, fetchFromGitHub, makeWrapper, maim ? null, xclip ? null, capture ? null }:
+, lib, stdenv, jq, curl, fetchFromGitHub, makeWrapper, maim ? null, xclip ? null, capture ? null }:
 
 assert screenshots -> maim != null;
 assert video -> capture != null;
@@ -16,21 +16,21 @@ stdenv.mkDerivation rec {
     sha256 = "0w6a789zffvz4ixsb92q45n5s4xyx7s2l2f07972i3dajaaai8z7";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
-  liveDeps = [ jq curl ] ++ stdenv.lib.optional screenshots maim
-                         ++ stdenv.lib.optional video capture
-                         ++ stdenv.lib.optional clipboard xclip;
+  liveDeps = [ jq curl ] ++ lib.optional screenshots maim
+                         ++ lib.optional video capture
+                         ++ 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}'
+      --prefix PATH : '${lib.makeBinPath liveDeps}'
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A no bullshit 0x0.st client";
     homepage = "https://github.com/ptpb/pb_cli";
     maintainers = [ maintainers.ar1a ];
diff --git a/pkgs/tools/misc/pcb2gcode/default.nix b/pkgs/tools/misc/pcb2gcode/default.nix
new file mode 100644
index 00000000000..d7f6a3d8739
--- /dev/null
+++ b/pkgs/tools/misc/pcb2gcode/default.nix
@@ -0,0 +1,46 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, boost
+, glibmm
+, gtkmm2
+, gerbv
+, librsvg
+, bash
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pcb2gcode";
+  version = "2.3.1";
+
+  src = fetchFromGitHub {
+    owner = "pcb2gcode";
+    repo = "pcb2gcode";
+    rev = "v${version}";
+    sha256 = "sha256-blbfpMBe7X3OrNbBiz8fNzKcS/bbViQUTXtdxZpXPBk=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ boost glibmm gtkmm2 gerbv librsvg ];
+
+  postPatch = ''
+    substituteInPlace ./Makefile.am \
+    --replace '`git describe --dirty --always --tags`' '${version}'
+  '';
+
+  meta = with lib; {
+    description = "Command-line tool for isolation, routing and drilling of PCBs ";
+    longDescription = ''
+      pcb2gcode is a command-line software for the isolation, routing and drilling of PCBs.
+      It takes Gerber files as input and it outputs gcode files, suitable for the milling of PCBs.
+      It also includes an Autoleveller, useful for the automatic dynamic calibration of the milling depth.
+    '';
+    homepage = "https://github.com/pcb2gcode/pcb2gcode";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ kritnich ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/pdd/default.nix b/pkgs/tools/misc/pdd/default.nix
index f94d2cc2737..8403a6c2575 100644
--- a/pkgs/tools/misc/pdd/default.nix
+++ b/pkgs/tools/misc/pdd/default.nix
@@ -1,23 +1,23 @@
-{ stdenv, fetchFromGitHub, buildPythonApplication, dateutil }:
+{ lib, fetchFromGitHub, buildPythonApplication, python-dateutil }:
 
 buildPythonApplication rec {
   pname = "pdd";
-  version = "1.4";
+  version = "1.5";
 
   src = fetchFromGitHub {
     owner = "jarun";
     repo = "pdd";
     rev = "v${version}";
-    sha256 = "1cirb8mmxxadks7az6a3a4sp8djv45cwa9dx0zrarzfmw0x7xb9g";
+    sha256 = "1ivzcbm888aibiihw03idp38qbl8mywj1lc1x0q787v0pzqfb4ss";
   };
 
   format = "other";
 
-  propagatedBuildInputs = [ dateutil ];
+  propagatedBuildInputs = [ python-dateutil ];
 
   installFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/jarun/pdd";
     description = "Tiny date, time diff calculator";
     longDescription = ''
diff --git a/pkgs/tools/misc/pdf-parser/default.nix b/pkgs/tools/misc/pdf-parser/default.nix
index 3fee457f6f5..90c128f8ac3 100644
--- a/pkgs/tools/misc/pdf-parser/default.nix
+++ b/pkgs/tools/misc/pdf-parser/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3Packages, fetchzip }:
+{ lib, python3Packages, fetchzip }:
 
 python3Packages.buildPythonApplication {
   pname = "pdf-parser";
@@ -20,7 +20,7 @@ python3Packages.buildPythonApplication {
       --replace '/usr/bin/python' '${python3Packages.python}/bin/python'
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Parse a PDF document";
     longDescription = ''
       This tool will parse a PDF document to identify the fundamental elements used in the analyzed file.
@@ -29,6 +29,6 @@ python3Packages.buildPythonApplication {
     homepage = "https://blog.didierstevens.com/programs/pdf-tools/";
     license = licenses.publicDomain;
     maintainers = [ maintainers.lightdiscord ];
-    platforms = platforms.linux;
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/peep/default.nix b/pkgs/tools/misc/peep/default.nix
index 161ea3f75e6..6379f24649b 100644
--- a/pkgs/tools/misc/peep/default.nix
+++ b/pkgs/tools/misc/peep/default.nix
@@ -12,7 +12,7 @@ rustPlatform.buildRustPackage rec {
   };
 
   cargoPatches = [ ./0001-Add-Cargo.lock-by-running-cargo-vendor.patch ];
-  cargoSha256 = "15qc9a4zpnq7lbcaji1mkik93qkx366misczbi1mipiq5w7sgn0l";
+  cargoSha256 = "12jqhvf8kdi17c442hl8sfpgxhni07x59khjwyyn54bnwc5h3zf9";
 
   meta = with lib; {
     description = "The CLI text viewer tool that works like less command on small pane within the terminal window";
diff --git a/pkgs/tools/misc/pferd/default.nix b/pkgs/tools/misc/pferd/default.nix
new file mode 100644
index 00000000000..c964a334553
--- /dev/null
+++ b/pkgs/tools/misc/pferd/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "pferd";
+  version = "3.1.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "Garmelon";
+    repo = "PFERD";
+    rev = "v${version}";
+    sha256 = "08kcl1c8z8qx65dfz5ghmbfqyjgkng4g9ymcnhydiz8j27smkj5d";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    aiohttp
+    beautifulsoup4
+    rich
+    keyring
+    certifi
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Garmelon/PFERD";
+    description = "Tool for downloading course-related files from ILIAS";
+    license = licenses.mit;
+    maintainers = with maintainers; [ _0xbe7a ];
+  };
+}
diff --git a/pkgs/tools/misc/pfsshell/default.nix b/pkgs/tools/misc/pfsshell/default.nix
new file mode 100644
index 00000000000..10cde1385bb
--- /dev/null
+++ b/pkgs/tools/misc/pfsshell/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, meson, ninja }:
+
+stdenv.mkDerivation rec {
+  version = "1.1.1";
+  pname = "pfsshell";
+
+  src = fetchFromGitHub {
+    owner = "uyjulian";
+    repo = "pfsshell";
+    rev = "v${version}";
+    sha256 = "0cr91al3knsbfim75rzl7rxdsglcc144x0nizn7q4jx5cad3zbn8";
+  };
+
+  nativeBuildInputs = [ meson ninja ];
+
+  # Build errors since 1.1.1 when format hardening is enabled:
+  #   cc1: error: '-Wformat-security' ignored without '-Wformat' [-Werror=format-security]
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "PFS (PlayStation File System) shell for POSIX-based systems";
+    platforms = platforms.unix;
+    license = with licenses; [
+      gpl2Only # the pfsshell software itself
+      afl20    # APA, PFS, and iomanX libraries which are compiled together with this package
+    ];
+    maintainers = with maintainers; [ makefu ];
+  };
+}
diff --git a/pkgs/tools/misc/pg_flame/default.nix b/pkgs/tools/misc/pg_flame/default.nix
index b8345210e59..7625e67e001 100644
--- a/pkgs/tools/misc/pg_flame/default.nix
+++ b/pkgs/tools/misc/pg_flame/default.nix
@@ -19,6 +19,6 @@ buildGoModule rec {
     description = "Flamegraph generator for Postgres EXPLAIN ANALYZE output";
     homepage = "https://github.com/mgartner/pg_flame";
     license = licenses.asl20;
-    maintainers = with maintainers; [ filalex77 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/misc/pg_top/default.nix b/pkgs/tools/misc/pg_top/default.nix
index ca3318d45c6..f5d42431e4f 100644
--- a/pkgs/tools/misc/pg_top/default.nix
+++ b/pkgs/tools/misc/pg_top/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, ncurses, postgresql }:
+{ lib, stdenv, fetchurl, ncurses, postgresql }:
 
 stdenv.mkDerivation rec {
   name = "pg_top-3.7.0";
@@ -10,10 +10,10 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ ncurses postgresql ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A 'top' like tool for PostgreSQL";
-    longDescription = '' 
-      pg_top allows you to: 
+    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.
diff --git a/pkgs/tools/misc/pgbadger/default.nix b/pkgs/tools/misc/pgbadger/default.nix
new file mode 100644
index 00000000000..d6e3588f6bb
--- /dev/null
+++ b/pkgs/tools/misc/pgbadger/default.nix
@@ -0,0 +1,31 @@
+{ buildPerlPackage, lib, fetchFromGitHub, which, bzip2, PodMarkdown, JSONXS
+, TextCSV }:
+buildPerlPackage rec {
+  pname = "pgbadger";
+  version = "11.5";
+  src = fetchFromGitHub {
+    owner = "darold";
+    repo = "pgbadger";
+    rev = "98b38161ba99faae77c81d5fa47bd769c1dd750b";
+    sha256 = "0r01mx1922g1m56x4958cihk491zjlaijvap0i32grjmnv4s5v88";
+  };
+
+  postPatch = ''
+    patchShebangs ./pgbadger
+  '';
+
+  outputs = [ "out" ];
+
+  PERL_MM_OPT = "INSTALL_BASE=${placeholder "out"}";
+
+  buildInputs = [ PodMarkdown JSONXS TextCSV ];
+
+  checkInputs = [ which bzip2 ];
+
+  meta = {
+    homepage = "https://github.com/darold/pgbadger";
+    description = "A fast PostgreSQL Log Analyzer";
+    license = lib.licenses.postgresql;
+    maintainers = lib.teams.determinatesystems.members;
+  };
+}
diff --git a/pkgs/tools/misc/pgcenter/default.nix b/pkgs/tools/misc/pgcenter/default.nix
index a84ad1fadb0..e1fed81b2db 100644
--- a/pkgs/tools/misc/pgcenter/default.nix
+++ b/pkgs/tools/misc/pgcenter/default.nix
@@ -1,22 +1,31 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "pgcenter";
-  version = "0.6.5";
+  version = "0.9.1";
 
   src = fetchFromGitHub {
     owner  = "lesovsky";
     repo   = "pgcenter";
     rev    = "v${version}";
-    sha256 = "03n1gn944z6rz5g643y68hvfxpxp65mip32w1zx43xr60x1vpf2v";
+    sha256 = "18s102hv6qqlx0nra91srdlb5fyv6x3hwism6c2r6zbxh68pgsag";
   };
 
-  vendorSha256 = "1mzvpr12qh9668iz97p62zl4zhlrcyfgwr4a9zg9irj585pkb5x2";
+  vendorSha256 = "0mgq9zl56wlr37dxxa1sh53wfkhrl9ybjvxj5y9djspqkp4j45pn";
+
+  subPackages = [ "cmd" ];
+
+  buildFlagsArray = [ "-ldflags=-w -s -X main.gitTag=${src.rev} -X main.gitCommit=${src.rev} -X main.gitBranch=master" ];
+
+  postInstall = ''
+    mv $out/bin/cmd $out/bin/pgcenter
+  '';
 
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://pgcenter.org/";
+    changelog = "https://github.com/lesovsky/pgcenter/raw/v${version}/doc/Changelog";
     description = "Command-line admin tool for observing and troubleshooting PostgreSQL";
     license = licenses.bsd3;
     maintainers = [ maintainers.marsam ];
diff --git a/pkgs/tools/misc/pgmetrics/default.nix b/pkgs/tools/misc/pgmetrics/default.nix
index 726c9526224..54e7093747b 100644
--- a/pkgs/tools/misc/pgmetrics/default.nix
+++ b/pkgs/tools/misc/pgmetrics/default.nix
@@ -1,23 +1,23 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "pgmetrics";
-  version = "1.9.3";
+  version = "1.10.5";
 
   src = fetchFromGitHub {
     owner  = "rapidloop";
     repo   = pname;
     rev    = "v${version}";
-    sha256 = "1g0kdvc93ij155r3g7cd9f5p1x33vdi9p40403waanq5wiavjnzq";
+    sha256 = "sha256-rqaK94Rw0K1+r7+7jHI2bzBupCGTkokeC4heJ3Yu6pQ=";
   };
 
-  vendorSha256 = "16x33fmh4q993rw0jr65337yimska4fwgyyw3kmq84q0x28a3zg5";
+  vendorSha256 = "sha256-5f2hkOgAE4TrHNz7xx1RU9fozxjFZAl4HilhAqsbo5s=";
 
   doCheck = false;
 
   buildFlagsArray = [ "-ldflags=-s -w -X main.version=${version}" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://pgmetrics.io/";
     description = "Collect and display information and stats from a running PostgreSQL server";
     license = licenses.asl20;
diff --git a/pkgs/tools/misc/phoronix-test-suite/default.nix b/pkgs/tools/misc/phoronix-test-suite/default.nix
index bea73610dda..971f924faaa 100644
--- a/pkgs/tools/misc/phoronix-test-suite/default.nix
+++ b/pkgs/tools/misc/phoronix-test-suite/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchurl, php, which, gnused, makeWrapper, gnumake, gcc, callPackage }:
+{ lib, stdenv, fetchurl, php, which, gnused, makeWrapper, gnumake, gcc, callPackage }:
 
 stdenv.mkDerivation rec {
   pname = "phoronix-test-suite";
-  version = "9.8.0";
+  version = "10.2.2";
 
   src = fetchurl {
     url = "https://phoronix-test-suite.com/releases/${pname}-${version}.tar.gz";
-    sha256 = "05q01cr4a2mmyski50pqna9sgw2jy93fgfpjwkhbkc09na6400sq";
+    sha256 = "sha256-g5hUmsn01Msopxzmi/G4LcZISXMD2wFqreaHMkFzF1Y=";
   };
 
   buildInputs = [ php ];
@@ -16,14 +16,14 @@ stdenv.mkDerivation rec {
     ./install-sh $out
     wrapProgram $out/bin/phoronix-test-suite \
     --set PHP_BIN ${php}/bin/php \
-    --prefix PATH : ${stdenv.lib.makeBinPath [ gnumake gcc ]}
+    --prefix PATH : ${lib.makeBinPath [ gnumake gcc ]}
   '';
 
   passthru.tests = {
     simple-execution = callPackage ./tests.nix { };
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Open-Source, Automated Benchmarking";
     homepage = "https://www.phoronix-test-suite.com/";
     maintainers = with maintainers; [ davidak ];
diff --git a/pkgs/tools/misc/phraseapp-client/default.nix b/pkgs/tools/misc/phraseapp-client/default.nix
index 8e1787f29a8..12b11cf20d0 100644
--- a/pkgs/tools/misc/phraseapp-client/default.nix
+++ b/pkgs/tools/misc/phraseapp-client/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "phraseapp-client";
-  version = "1.11.0";
+  version = "1.17.1";
 
   goPackagePath = "github.com/phrase/phraseapp-client";
   subPackages = [ "." ];
@@ -11,14 +11,14 @@ buildGoPackage rec {
     owner = "phrase";
     repo = "phraseapp-client";
     rev = version;
-    sha256 = "0lfx0wv95hgczi74qnkw2cripwgvl53z2gi5i6nyflisy4r7vvkr";
+    sha256 = "0j8fygp9bw68p1736hq7n7qv86rghchxbdm1xibvk5jpgph1nzl7";
   };
 
   postInstall = ''
     ln -s $out/bin/phraseapp-client $out/bin/phraseapp
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://docs.phraseapp.com";
     description = "PhraseApp API v2 Command Line Client";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/pick/default.nix b/pkgs/tools/misc/pick/default.nix
index ceb2bace7db..a8203978fee 100644
--- a/pkgs/tools/misc/pick/default.nix
+++ b/pkgs/tools/misc/pick/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, ncurses, pkgconfig }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, ncurses, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "pick";
@@ -13,9 +13,9 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ ncurses ];
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit (src.meta) homepage;
     description = "Fuzzy text selection utility";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/picocom/default.nix b/pkgs/tools/misc/picocom/default.nix
index 5dd83c4887b..e9ec3c38994 100644
--- a/pkgs/tools/misc/picocom/default.nix
+++ b/pkgs/tools/misc/picocom/default.nix
@@ -1,36 +1,48 @@
-{ stdenv, fetchFromGitHub, makeWrapper, lrzsz, IOKit }:
-
-assert stdenv.isDarwin -> IOKit != null;
-
-with stdenv.lib;
+{ lib, stdenv
+, fetchFromGitHub
+, installShellFiles
+, lrzsz
+, IOKit
+}:
 
 stdenv.mkDerivation rec {
   pname = "picocom";
-  version = "3.1";
+  # last tagged release is 3.1 but 3.2 is still considered a release
+  version = "3.2a";
 
+  # upstream is quiet as the original author is no longer active since March 2018
   src = fetchFromGitHub {
     owner = "npat-efault";
     repo = "picocom";
-    rev = version;
-    sha256 = "1vvjydqf0ax47nvdyyl67jafw5b3sfsav00xid6qpgia1gs2r72n";
+    rev = "1acf1ddabaf3576b4023c4f6f09c5a3e4b086fb8";
+    sha256 = "sha256-cs2bxqZfTbnY5d+VJ257C5hssaFvYup3tBKz68ROnAo=";
   };
 
-  buildInputs = [ makeWrapper ]
-    ++ optionals stdenv.isDarwin [ IOKit ];
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace '.picocom_history' '.cache/picocom_history'
 
-  installPhase = ''
-    mkdir -p $out/bin $out/share/man/man1
-    cp picocom $out/bin
-    cp picocom.1 $out/share/man/man1
+    substituteInPlace picocom.c \
+      --replace '"rz -vv"' '"${lrzsz}/bin/rz -vv"' \
+      --replace '"sz -vv"' '"${lrzsz}/bin/sz -vv"'
+  '';
 
-    wrapProgram $out/bin/picocom \
-      --prefix PATH ":" "${lrzsz}/bin"
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optional stdenv.isDarwin IOKit;
+
+  installPhase = ''
+    install -Dm555 -t $out/bin picocom
+    installManPage picocom.1
+    installShellCompletion --bash bash_completion/picocom
   '';
 
-  meta = {
+  meta = with lib; {
     description = "Minimal dumb-terminal emulation program";
     homepage = "https://github.com/npat-efault/picocom/";
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = licenses.gpl2Plus;
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/pipelight/default.nix b/pkgs/tools/misc/pipelight/default.nix
index fe16406256f..a5a5b727a8d 100644
--- a/pkgs/tools/misc/pipelight/default.nix
+++ b/pkgs/tools/misc/pipelight/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, bash, cabextract, curl, gnupg, libX11, libGLU, libGL, wine-staging }:
+{ lib, stdenv, fetchurl, bash, cabextract, curl, gnupg, libX11, libGLU, libGL, wine-staging }:
 
 let
   wine_custom = wine-staging;
@@ -21,7 +21,10 @@ in stdenv.mkDerivation rec {
 
   NIX_CFLAGS_COMPILE = [ "-fpermissive" ];
 
-  patches = [ ./pipelight.patch ];
+  patches = [
+    ./pipelight.patch
+    ./wine-6.13-new-args.patch
+  ];
 
   configurePhase = ''
     patchShebangs .
@@ -53,9 +56,9 @@ in stdenv.mkDerivation rec {
 
   meta = {
     homepage = "http://pipelight.net/";
-    license = with stdenv.lib.licenses; [ mpl11 gpl2 lgpl21 ];
+    license = with lib.licenses; [ mpl11 gpl2 lgpl21 ];
     description = "A wrapper for using Windows plugins in Linux browsers";
-    maintainers = with stdenv.lib.maintainers; [ skeidel ];
+    maintainers = with lib.maintainers; [ skeidel ];
     platforms = [ "x86_64-linux" "i686-linux" ];
   };
 }
diff --git a/pkgs/tools/misc/pipelight/wine-6.13-new-args.patch b/pkgs/tools/misc/pipelight/wine-6.13-new-args.patch
new file mode 100644
index 00000000000..b67af621f64
--- /dev/null
+++ b/pkgs/tools/misc/pipelight/wine-6.13-new-args.patch
@@ -0,0 +1,42 @@
+diff --git a/src/windows/pluginloader/apihook.c b/src/windows/pluginloader/apihook.c
+index 80bf726..6b80f70 100644
+--- a/src/windows/pluginloader/apihook.c
++++ b/src/windows/pluginloader/apihook.c
+@@ -42,7 +42,9 @@
+ #include "common/common.h"
+ #include "pluginloader.h"
+ 
++#define new cnew
+ #include <windows.h>							// for PVOID and other types
++#undef new
+ #include <string.h>								// for memset
+ 
+ void* patchDLLExport(PVOID ModuleBase, const char* functionName, void* newFunctionPtr){
+diff --git a/src/windows/pluginloader/npnfunctions.c b/src/windows/pluginloader/npnfunctions.c
+index e4e38aa..19f29d5 100644
+--- a/src/windows/pluginloader/npnfunctions.c
++++ b/src/windows/pluginloader/npnfunctions.c
+@@ -41,7 +41,9 @@
+ #include "common/common.h"
+ #include "pluginloader.h"
+ 
++#define new cnew
+ #include <windows.h>
++#undef new
+ 
+ /* Shockwave sometimes calls the function with a wrong instance? Is this a wine bug? */
+ NPP shockwaveInstanceBug = NULL;
+diff --git a/src/windows/pluginloader/pluginloader.c b/src/windows/pluginloader/pluginloader.c
+index 8f1170a..99dbceb 100644
+--- a/src/windows/pluginloader/pluginloader.c
++++ b/src/windows/pluginloader/pluginloader.c
+@@ -50,7 +50,9 @@
+ #include "pluginloader.h"
+ #include "apihook.h"
+ 
++#define new cnew
+ #include <windows.h>
++#undef new
+ #include <objbase.h>							// for CoInitializeEx
+ #include <GL/gl.h>
+ 
diff --git a/pkgs/tools/misc/pipreqs/default.nix b/pkgs/tools/misc/pipreqs/default.nix
index bbd4125c4b0..3f27be2c9f9 100644
--- a/pkgs/tools/misc/pipreqs/default.nix
+++ b/pkgs/tools/misc/pipreqs/default.nix
@@ -1,16 +1,17 @@
-{ lib, python2Packages }:
+{ lib, python3 }:
 
-# Using python 2 because when packaging with python 3 pipreqs fails to parse python 2 code.
-python2Packages.buildPythonApplication rec {
+with python3.pkgs;
+
+buildPythonApplication rec {
   pname = "pipreqs";
   version = "0.4.10";
 
-  src = python2Packages.fetchPypi {
+  src = fetchPypi {
     inherit pname version;
     sha256 = "0fdr3mbxjpmrxr7yfc1sn9kbpcyb0qwafimhhrrqvf989dj1sdcy";
   };
 
-  propagatedBuildInputs = with python2Packages; [ yarg docopt ];
+  propagatedBuildInputs = [ yarg docopt ];
 
   # Tests requires network access. Works fine without sandboxing
   doCheck = false;
diff --git a/pkgs/tools/misc/pistol/default.nix b/pkgs/tools/misc/pistol/default.nix
index dfbe5536bcc..52c83abdf68 100644
--- a/pkgs/tools/misc/pistol/default.nix
+++ b/pkgs/tools/misc/pistol/default.nix
@@ -1,21 +1,23 @@
-{ stdenv
+{ lib
 , buildGoModule
 , fetchFromGitHub
 , file
+, installShellFiles
+, asciidoctor
 }:
 
 buildGoModule rec {
   pname = "pistol";
-  version = "0.1.4";
+  version = "0.2.1";
 
   src = fetchFromGitHub {
     owner = "doronbehar";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1x9wb0gj5l71xz15ia0i2hrnhcpf457i21w41jzw2ink2fbdxp3b";
+    sha256 = "sha256-NUHk48P3kUx+e9BR9k9K/VaHnbZ6Do6RRf1S0974sO8=";
   };
 
-  vendorSha256 = "0dg4f9g6895nv3c6d74ijl6hzsyn620ndspbcq7ynvb1z0hsg6iz";
+  vendorSha256 = "sha256-n98cjXsgg2w3shbZPnk3g7mBbzV5Tc3jd9ZtiRk1KUM=";
 
   doCheck = false;
 
@@ -24,10 +26,18 @@ buildGoModule rec {
   buildInputs = [
     file
   ];
+  nativeBuildInputs = [
+    installShellFiles
+    asciidoctor
+  ];
+  postBuild = ''
+    asciidoctor -b manpage -d manpage README.adoc
+    installManPage pistol.1
+  '';
 
   buildFlagsArray = [ "-ldflags=-s -w -X main.Version=${version}" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "General purpose file previewer designed for Ranger, Lf to make scope.sh redundant";
     homepage = "https://github.com/doronbehar/pistol";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/piston-cli/default.nix b/pkgs/tools/misc/piston-cli/default.nix
new file mode 100644
index 00000000000..5e1ca0242bc
--- /dev/null
+++ b/pkgs/tools/misc/piston-cli/default.nix
@@ -0,0 +1,24 @@
+{ lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "piston-cli";
+  version = "1.4.3";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "qvDGVJcaMXUajdUQWl4W1dost8k0PsS9XX/o8uQrtfY=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ rich prompt_toolkit requests pygments pyyaml more-itertools ];
+
+  checkPhase = ''
+    $out/bin/piston --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Piston api tool";
+    homepage = "https://github.com/Shivansh-007/piston-cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ethancedwards8 ];
+  };
+}
diff --git a/pkgs/tools/misc/pixd/default.nix b/pkgs/tools/misc/pixd/default.nix
index a2dc84ed6a9..8152849d9b5 100644
--- a/pkgs/tools/misc/pixd/default.nix
+++ b/pkgs/tools/misc/pixd/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   pname = "pixd";
diff --git a/pkgs/tools/misc/pk2cmd/default.nix b/pkgs/tools/misc/pk2cmd/default.nix
index 8c7e5b8bcf2..009d841bf55 100644
--- a/pkgs/tools/misc/pk2cmd/default.nix
+++ b/pkgs/tools/misc/pk2cmd/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, libusb-compat-0_1, makeWrapper}:
+{lib, stdenv, fetchurl, libusb-compat-0_1, makeWrapper}:
 
 stdenv.mkDerivation {
   name = "pk2cmd-1.20";
@@ -16,11 +16,12 @@ stdenv.mkDerivation {
     wrapProgram $out/bin/pk2cmd --prefix PATH : $out/share/pk2
   '';
 
-  buildInputs = [ libusb-compat-0_1 makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ libusb-compat-0_1 ];
 
   meta = {
     homepage = "https://www.microchip.com/pickit2";
-    license = stdenv.lib.licenses.unfree; #MicroChip-PK2
+    license = lib.licenses.unfree; #MicroChip-PK2
     description = "Microchip PIC programming software for the PICKit2 programmer";
   };
 }
diff --git a/pkgs/tools/misc/pkgdiff/default.nix b/pkgs/tools/misc/pkgdiff/default.nix
index 04d0c95b81a..2f68e9505ed 100644
--- a/pkgs/tools/misc/pkgdiff/default.nix
+++ b/pkgs/tools/misc/pkgdiff/default.nix
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     wrapProgram $out/bin/pkgdiff --prefix PATH : ${lib.makeBinPath [ wdiff ]}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tool for visualizing changes in Linux software packages";
     homepage = "https://lvc.github.io/pkgdiff/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/plantuml-server/default.nix b/pkgs/tools/misc/plantuml-server/default.nix
new file mode 100644
index 00000000000..eef6cdc11d5
--- /dev/null
+++ b/pkgs/tools/misc/plantuml-server/default.nix
@@ -0,0 +1,70 @@
+{ lib, stdenv, fetchFromGitHub, maven, jdk8_headless }:
+
+let
+  version = "1.2021.7";
+
+  src = fetchFromGitHub {
+    owner = "plantuml";
+    repo = "plantuml-server";
+    rev = "v${version}";
+    sha256 = "sha256-kY7b3ocm1zudGIf72MNMZDUG2t2FFqucRr3kRaFv7mo=";
+  };
+
+  # perform fake build to make a fixed-output derivation out of the files downloaded from maven central
+  deps = stdenv.mkDerivation {
+    name = "plantuml-server-${version}-deps";
+    inherit src;
+    nativeBuildInputs = [ jdk8_headless maven ];
+    buildPhase = ''
+      runHook preBuild
+
+      while mvn package -Dmaven.repo.local=$out/.m2; [ $? = 1 ]; do
+        echo "timeout, restart maven to continue downloading"
+      done
+
+      runHook postBuild
+    '';
+    # keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside
+    installPhase = ''find $out/.m2 -type f -regex '.+\(\.lastUpdated\|resolver-status\.properties\|_remote\.repositories\)' -delete'';
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = "sha256-HzT5rBycrd48KskWKAGtkMKdCDQ8NPYADVWZh8K0ll4=";
+  };
+in
+
+stdenv.mkDerivation rec {
+  pname = "plantuml-server";
+  inherit version;
+  inherit src;
+
+  nativeBuildInputs = [ jdk8_headless maven ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    # 'maven.repo.local' must be writable so copy it out of nix store
+    cp -R $src repo
+    chmod +w -R repo
+    cd repo
+    mvn package --offline -Dmaven.repo.local=$(cp -dpR ${deps}/.m2 ./ && chmod +w -R .m2 && pwd)/.m2
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/webapps"
+    cp "target/plantuml.war" "$out/webapps/plantuml.war"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A web application to generate UML diagrams on-the-fly.";
+    homepage = "https://plantuml.com/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ truh ];
+  };
+}
diff --git a/pkgs/tools/misc/plantuml/default.nix b/pkgs/tools/misc/plantuml/default.nix
index 5b139bf4929..270a9ef8641 100644
--- a/pkgs/tools/misc/plantuml/default.nix
+++ b/pkgs/tools/misc/plantuml/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchurl, makeWrapper, jre, graphviz }:
+{ lib, stdenv, fetchurl, makeWrapper, jre, graphviz }:
 
 stdenv.mkDerivation rec {
-  version = "1.2020.15";
+  version = "1.2021.7";
   pname = "plantuml";
 
   src = fetchurl {
     url = "mirror://sourceforge/project/plantuml/${version}/plantuml.${version}.jar";
-    sha256 = "0dvm24ihdr71giz0mihg7wjqf2nrkk7a52vbbzimrvbilaih6s8v";
+    sha256 = "sha256-2hQIwUpkxLHGG+kx8AekSKJ1qO8inL8xnko0dlLC1Kg=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
@@ -23,12 +23,12 @@ stdenv.mkDerivation rec {
     $out/bin/plantuml -help
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = with maintainers; [ bjornfor Mogria ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/plocate/default.nix b/pkgs/tools/misc/plocate/default.nix
new file mode 100644
index 00000000000..faff84e52fa
--- /dev/null
+++ b/pkgs/tools/misc/plocate/default.nix
@@ -0,0 +1,45 @@
+{ stdenv
+, lib
+, fetchgit
+, pkg-config
+, meson
+, ninja
+, systemd
+, liburing
+, zstd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "plocate";
+  version = "1.1.7";
+
+  src = fetchgit {
+    url = "https://git.sesse.net/plocate";
+    rev = version;
+    sha256 = "sha256-5Ie4qgiKUoI9Kma6YvjXirvBbpbKVuaMSSAZa36zN3M=";
+  };
+
+  postPatch = ''
+    sed -i meson.build \
+      -e "s@unitdir =.*@unitdir = '$out/lib/systemd/system'@" \
+      -e '/mkdir\.sh/d'
+  '';
+
+  nativeBuildInputs = [ meson ninja pkg-config ];
+
+  buildInputs = [ systemd liburing zstd ];
+
+  mesonFlags = [
+    # I don't know why we can't do this but instead have to resort to patching meson.build
+    #   "-Dsystemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
+    "-Dsharedstatedir=/var/lib"
+  ];
+
+  meta = with lib; {
+    description = "Much faster locate";
+    homepage = "https://plocate.sesse.net/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/plotinus/default.nix b/pkgs/tools/misc/plotinus/default.nix
index 6440ed533f6..112010c8008 100644
--- a/pkgs/tools/misc/plotinus/default.nix
+++ b/pkgs/tools/misc/plotinus/default.nix
@@ -1,8 +1,8 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , gettext
 , libxml2
-, pkgconfig
+, pkg-config
 , gtk3
 , cmake
 , ninja
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     wrapGAppsHook
     vala
     cmake
@@ -33,7 +33,7 @@ stdenv.mkDerivation rec {
     gtk3
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A searchable command palette in every modern GTK application";
     homepage = "https://github.com/p-e-w/plotinus";
     maintainers = with maintainers; [ samdroid-apps ];
diff --git a/pkgs/tools/misc/plowshare/default.nix b/pkgs/tools/misc/plowshare/default.nix
index 1d3e8c6c33d..1d15db02040 100644
--- a/pkgs/tools/misc/plowshare/default.nix
+++ b/pkgs/tools/misc/plowshare/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, makeWrapper, curl, recode, spidermonkey }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper, curl, recode, spidermonkey_78 }:
 
 stdenv.mkDerivation rec {
 
@@ -12,15 +12,15 @@ stdenv.mkDerivation rec {
     sha256 = "1p8s60dlzaldp006yj710s371aan915asyjhd99188vrj4jj1x79";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
-  phases = [ "unpackPhase" "installPhase" "fixupPhase" ];
+  dontBuild = true;
 
   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 ]}"
+      wrapProgram "$out/bin/$fn" --prefix PATH : "${lib.makeBinPath [ curl recode spidermonkey_78 ]}"
     done
   '';
 
@@ -28,8 +28,8 @@ stdenv.mkDerivation rec {
     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;
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ aforemny jfrankenau ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/pmbootstrap/default.nix b/pkgs/tools/misc/pmbootstrap/default.nix
new file mode 100644
index 00000000000..3f75e8e33af
--- /dev/null
+++ b/pkgs/tools/misc/pmbootstrap/default.nix
@@ -0,0 +1,95 @@
+{ lib, git, openssl, makeWrapper, buildPythonApplication, pytestCheckHook, ps
+, fetchPypi, fetchFromGitLab }:
+
+buildPythonApplication rec {
+  pname = "pmbootstrap";
+  version = "1.30.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-uHN3nplQOMuBeQIxAocCVqwnmJUQZL67+iXLhQ7onps=";
+  };
+
+  repo = fetchFromGitLab {
+    domain = "gitlab.com";
+    owner = "postmarketOS";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-JunI/mqq+UvmzNVt3mdJN3+tKGN4uTrxkUU2imCNCNY=";
+  };
+
+  pmb_test = "${repo}/test";
+
+  checkInputs = [ pytestCheckHook git openssl ps ];
+
+  # Add test dependency in PATH
+  checkPhase = "export PYTHONPATH=$PYTHONPATH:${pmb_test}";
+
+  # skip impure tests
+  disabledTests = [
+    "test_get_apkbuild"
+    "test_check_build_for_arch"
+    "test_get_depends"
+    "test_build_depends_no_binary_error"
+    "test_build_depends_binary_outdated"
+    "test_init_buildenv"
+    "test_run_abuild"
+    "test_finish"
+    "test_package"
+    "test_build_depends_high_level"
+    "test_build_local_source_high_level"
+    "test_chroot_interactive_shell"
+    "test_chroot_interactive_shell_user"
+    "test_chroot_arguments"
+    "test_switch_to_channel_branch"
+    "test_read_config_channel"
+    "test_cross_compile_distcc"
+    "test_build_src_invalid_path"
+    "test_can_fast_forward"
+    "test_clean_worktree"
+    "test_get_upstream_remote"
+    "test_pull"
+    "test_helpers_package_get_apkindex"
+    "test_filter_missing_packages_invalid"
+    "test_filter_missing_packages_binary_exists"
+    "test_filter_missing_packages_pmaports"
+    "test_filter_aport_packages"
+    "test_pmbootstrap_status"
+    "test_print_checks_git_repo"
+    "test_helpers_ui"
+    "test_newapkbuild"
+    "test_package_from_aports"
+    "test_recurse_invalid"
+    "test_questions_bootimg"
+    "test_questions_keymaps"
+    "test_questions_work_path"
+    "test_questions_channel"
+    "test_apk_static"
+    "test_aportgen"
+    "test_aportgen_device_wizard"
+    "test_bootimg"
+    "test_build_is_necessary"
+    "test_config_user"
+    "test_crossdirect"
+    "test_file"
+    "test_folder_size"
+    "test_helpers_lint"
+    "test_helpers_repo"
+    "test_kconfig_check"
+    "test_keys"
+    "test_pkgrel_bump"
+    "test_qemu_running_processes"
+    "test_run_core"
+    "test_shell_escape"
+    "test_version"
+  ];
+
+  makeWrapperArgs = [ "--prefix PATH : ${lib.makeBinPath [ git openssl ]}" ];
+
+  meta = with lib; {
+    description = "Sophisticated chroot/build/flash tool to develop and install postmarketOS";
+    homepage = "https://gitlab.com/postmarketOS/pmbootstrap";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ payas ];
+  };
+}
diff --git a/pkgs/tools/misc/pod2mdoc/default.nix b/pkgs/tools/misc/pod2mdoc/default.nix
index 75710025126..4e919e28489 100644
--- a/pkgs/tools/misc/pod2mdoc/default.nix
+++ b/pkgs/tools/misc/pod2mdoc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "pod2mdoc";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
     install -m 0444 pod2mdoc.1 $out/share/man/man1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://mdocml.bsd.lv/";
     description = "converter from POD into mdoc";
     license = licenses.isc;
diff --git a/pkgs/tools/misc/polar/Gemfile b/pkgs/tools/misc/polar/Gemfile
new file mode 100644
index 00000000000..65e27d16703
--- /dev/null
+++ b/pkgs/tools/misc/polar/Gemfile
@@ -0,0 +1,7 @@
+source 'https://rubygems.org'
+
+gem 'google-protobuf'
+gem 'libusb'
+gem 'rubyserial'
+gem 'nokogiri'
+
diff --git a/pkgs/tools/misc/polar/Gemfile.lock b/pkgs/tools/misc/polar/Gemfile.lock
new file mode 100644
index 00000000000..bd3b0226510
--- /dev/null
+++ b/pkgs/tools/misc/polar/Gemfile.lock
@@ -0,0 +1,27 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    ffi (1.15.0)
+    google-protobuf (3.15.6)
+    libusb (0.6.4)
+      ffi (~> 1.0)
+      mini_portile2 (~> 2.1)
+    mini_portile2 (2.5.0)
+    nokogiri (1.11.2)
+      mini_portile2 (~> 2.5.0)
+      racc (~> 1.4)
+    racc (1.5.2)
+    rubyserial (0.6.0)
+      ffi (~> 1.9, >= 1.9.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  google-protobuf
+  libusb
+  nokogiri
+  rubyserial
+
+BUNDLED WITH
+   2.1.4
diff --git a/pkgs/tools/misc/polar/default.nix b/pkgs/tools/misc/polar/default.nix
new file mode 100644
index 00000000000..022752bbc75
--- /dev/null
+++ b/pkgs/tools/misc/polar/default.nix
@@ -0,0 +1,73 @@
+{ lib, stdenv, fetchFromGitHub, ruby, bundlerEnv }:
+let
+
+  # To create Gemfile.lock and gemset.nix
+  # > nix-shell -p bundix bundler zlib
+  # > bundle install
+  # > bundix
+  gems = bundlerEnv {
+    name = "polar-env";
+    inherit ruby;
+    gemdir = ./.;
+  };
+
+in
+stdenv.mkDerivation rec {
+
+  pname = "polar";
+  # The package has no releases so let's use the latest commit
+  version = "unstable-2021-01-12";
+
+  src = fetchFromGitHub {
+    owner = "cmaion";
+    repo = pname;
+    rev = "be15f5f897f8a919dd639009873147dca2a9cea0";
+    sha256 = "0gqkqfrqnrsy6avg372xwqj22yz8g6r2hnzbw6197b1rf7zr1il7";
+  };
+
+  prePatch = ''
+    for script in polar_*
+    do
+      substituteInPlace $script --replace "#{File.dirname(__FILE__)}/lib" "$out/lib/polar"
+    done
+  '';
+  buildInputs = [ gems ruby ];
+
+  # See: https://nixos.wiki/wiki/Packaging/Ruby
+  #
+  # Put library content under lib/polar and the raw scripts under share/polar.
+  # Then, wrap the scripts so that they use the correct ruby environment and put
+  # these wrapped executables under bin.
+  installPhase = ''
+    install -Dm644 -t $out/etc/udev/rules.d ./pkg/99-polar.rules
+    mkdir -p $out/{bin,lib/polar,share/polar}
+    cp -r lib/* $out/lib/polar/
+    for script in ./polar_*
+    do
+      raw="$out/share/polar/$script"
+      bin="$out/bin/$script"
+      cp "$script" "$raw"
+      cat > $bin <<EOF
+#!/bin/sh -e
+exec ${gems}/bin/bundle exec ${ruby}/bin/ruby "$raw" "\$@"
+EOF
+      chmod +x $bin
+    done
+  '';
+
+  meta = with lib; {
+    description = "Command-line tools to interact with Polar watches";
+    longDescription = ''
+      A set of command line tools written in Ruby to interact with Polar watches
+      and decode raw data files.
+
+      Udev rules can be added as:
+
+        services.udev.packages = [ pkgs.polar ]
+    '';
+    homepage = "https://github.com/cmaion/polar";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ jluttine ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/polar/gemset.nix b/pkgs/tools/misc/polar/gemset.nix
new file mode 100644
index 00000000000..4e360d9b21c
--- /dev/null
+++ b/pkgs/tools/misc/polar/gemset.nix
@@ -0,0 +1,75 @@
+{
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nq1fb3vbfylccwba64zblxy96qznxbys5900wd7gm9bpplmf432";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  google-protobuf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ak5yqqhr04b4x0axzvpw1xzwmxmfcw0gf4r1ijixv15kidhsj3z";
+      type = "gem";
+    };
+    version = "3.15.6";
+  };
+  libusb = {
+    dependencies = ["ffi" "mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "005q4f3bi68yapza1vxamgwz2gpix2akci52s4yvr03hsxi137a6";
+      type = "gem";
+    };
+    version = "0.6.4";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hdbpmamx8js53yk3h8cqy12kgv6ca06k0c9n3pxh6b6cjfs19x7";
+      type = "gem";
+    };
+    version = "2.5.0";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b51df8fwadak075cvi17w0nch6qz1r66564qp29qwfj67j9qp0p";
+      type = "gem";
+    };
+    version = "1.11.2";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g";
+      type = "gem";
+    };
+    version = "1.5.2";
+  };
+  rubyserial = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vj5yan6srbvkf5vfp9d9b9z8wyygd0zxcy54c35yhkjl6kwd22q";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+}
diff --git a/pkgs/tools/misc/ponysay/default.nix b/pkgs/tools/misc/ponysay/default.nix
index 3fc3efa0eda..b27aa32481c 100644
--- a/pkgs/tools/misc/ponysay/default.nix
+++ b/pkgs/tools/misc/ponysay/default.nix
@@ -1,19 +1,21 @@
-{ stdenv, fetchurl, python3, texinfo, makeWrapper }:
+{ lib, stdenv, fetchFromGitHub, python3, texinfo, makeWrapper }:
 
-stdenv.mkDerivation {
-  name = "ponysay-3.0.3";
+stdenv.mkDerivation rec {
+  name = "ponysay";
+  version = "3.0.3";
 
-  src = fetchurl {
-    url = "https://github.com/erkin/ponysay/archive/3.0.3.tar.gz";
-    sha256 = "12mjabf5cpp5dgg63s19rlyq3dhhpzzy2sa439yncqzsk7rdg0n3";
+  src = fetchFromGitHub {
+    owner = "erkin";
+    repo = "ponysay";
+    rev = version;
+    sha256 = "sha256-R2B0TU3ZSEncGsijKgvhaHIbcZa5Dx/jVPxrILBaoVw=";
   };
 
-  buildInputs = [ python3 texinfo makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ python3 texinfo ];
 
   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 \
@@ -24,11 +26,11 @@ stdenv.mkDerivation {
         --with-bash
   '';
 
-  meta = {
+  meta = with lib; {
     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;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ bodil ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/poweralertd/default.nix b/pkgs/tools/misc/poweralertd/default.nix
new file mode 100644
index 00000000000..4121b0712bd
--- /dev/null
+++ b/pkgs/tools/misc/poweralertd/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromSourcehut, meson, ninja, pkg-config, scdoc, systemd }:
+
+stdenv.mkDerivation rec {
+  pname = "poweralertd";
+  version = "0.2.0";
+
+  outputs = [ "out" "man" ];
+
+  src = fetchFromSourcehut {
+    owner = "~kennylevinsen";
+    repo = "poweralertd";
+    rev = version;
+    sha256 = "19rw9q4pcqw56nmzjfglfikzx5wwjl4n08awwdhg0jy1k0bm3dvp";
+  };
+
+  patchPhase = ''
+    substituteInPlace meson.build --replace "systemd.get_pkgconfig_variable('systemduserunitdir')" "'${placeholder "out"}/lib/systemd/user'"
+  '';
+
+  buildInputs = [
+    systemd
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+  ];
+
+  depsBuildBuild = [
+    scdoc
+    pkg-config
+  ];
+
+  meta = with lib; {
+    description = "UPower-powered power alerter";
+    homepage = "https://git.sr.ht/~kennylevinsen/poweralertd";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ thibautmarty ];
+  };
+}
diff --git a/pkgs/tools/misc/powerline-go/default.nix b/pkgs/tools/misc/powerline-go/default.nix
index 9ec7c0a32bf..004bebaebbe 100644
--- a/pkgs/tools/misc/powerline-go/default.nix
+++ b/pkgs/tools/misc/powerline-go/default.nix
@@ -1,23 +1,28 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
 
 buildGoModule rec {
   pname = "powerline-go";
-  version = "1.17.0";
+  version = "unstable-2021-07-15";
 
   src = fetchFromGitHub {
     owner = "justjanne";
     repo = pname;
-    rev = "v${version}";
-    sha256 = "135j18d53nhg6adjd2hax067c5f1py9fyprzfcr3plsxnaki2hrx";
+    rev = "f27435b26b5001c52ffb1aee454572c59494c81b";
+    sha256 = "sha256-YB/WMprjXA5ZN6baT5nWahNj0xwbP8kzS7X/1tCwWiE=";
   };
 
-  vendorSha256 = "0dkgp9vlb76la0j439w0rb548qg5v8648zryk3rqgfhd4qywlk11";
+  vendorSha256 = "sha256-HYF6aKz+P241EKmupEoretadlrh9FBRx6nIER66jofg=";
 
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A Powerline like prompt for Bash, ZSH and Fish";
-    license = licenses.gpl3;
+    homepage = "https://github.com/justjanne/powerline-go";
+    changelog = "https://github.com/justjanne/powerline-go/releases/tag/v${version}";
+    license = licenses.gpl3Plus;
     platforms = platforms.unix;
     maintainers = with maintainers; [ sifmelcara ];
   };
diff --git a/pkgs/tools/misc/powerline-rs/default.nix b/pkgs/tools/misc/powerline-rs/default.nix
index df0d344afaa..7222ac9be7d 100644
--- a/pkgs/tools/misc/powerline-rs/default.nix
+++ b/pkgs/tools/misc/powerline-rs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, rustPlatform, fetchFromGitLab, pkgconfig, file, perl, curl, cmake, openssl, libssh2, libgit2, libzip, Security }:
+{ stdenv, lib, rustPlatform, fetchFromGitLab, pkg-config, file, perl, curl, cmake, openssl, libssh2, libgit2, libzip, Security }:
 
 rustPlatform.buildRustPackage rec {
   pname = "powerline-rs";
@@ -12,21 +12,21 @@ rustPlatform.buildRustPackage rec {
     sha256 = "0rqlxxl58dpfvm2idhi0vzinraf4bgiapmawiih9wxs599fnhm3y";
   };
 
-  cargoSha256 = "0a41a6kgwgz4040c2369jldvk6xy6s6fkgayca0qy7hdwc4bcxdp";
+  cargoSha256 = "1i29wps7wz6b0qarqqg8rplq7ak1zz83k6m182sjk17cni74n21l";
 
-  nativeBuildInputs = [ pkgconfig file perl cmake curl ];
+  nativeBuildInputs = [ pkg-config 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}.bash" "$out/share/bash-completion/completions/${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 ];
+    maintainers = with maintainers; [ ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/profile-cleaner/default.nix b/pkgs/tools/misc/profile-cleaner/default.nix
index b8a747d4222..59bbe2c2ab1 100644
--- a/pkgs/tools/misc/profile-cleaner/default.nix
+++ b/pkgs/tools/misc/profile-cleaner/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, makeWrapper, parallel, sqlite, bc, file }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper, parallel, sqlite, bc, file }:
 
 stdenv.mkDerivation rec {
   version = "2.41";
@@ -11,12 +11,12 @@ stdenv.mkDerivation rec {
     sha256 = "11sjf4j9dr6ih9jkg6vqq6gkfg6wly4182bi1008bsm1zdmm5iz7";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
   installPhase = ''
     PREFIX=\"\" DESTDIR=$out make install
     wrapProgram $out/bin/profile-cleaner \
-      --prefix PATH : "${stdenv.lib.makeBinPath [ parallel sqlite bc file ]}"
+      --prefix PATH : "${lib.makeBinPath [ parallel sqlite bc file ]}"
   '';
 
   meta = {
@@ -28,8 +28,8 @@ stdenv.mkDerivation rec {
       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 ];
+    license = lib.licenses.mit;
+    platforms = lib.platforms.all;
+    maintainers = [ lib.maintainers.devhell ];
   };
 }
diff --git a/pkgs/tools/misc/profile-sync-daemon/default.nix b/pkgs/tools/misc/profile-sync-daemon/default.nix
index 7d68ada2c1b..d0bd0c76a83 100644
--- a/pkgs/tools/misc/profile-sync-daemon/default.nix
+++ b/pkgs/tools/misc/profile-sync-daemon/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchurl, utillinux, coreutils}:
+{ lib, stdenv, fetchurl, util-linux, coreutils}:
 
 stdenv.mkDerivation rec {
-  version = "6.40";
+  version = "6.44";
   pname = "profile-sync-daemon";
 
   src = fetchurl {
     url = "https://github.com/graysky2/profile-sync-daemon/archive/v${version}.tar.gz";
-    sha256 = "1z1n7dqbkk0x9w2pq71nf93wp4hrzin4a0hcvfynj1khf12z369h";
+    sha256 = "sha256-+iQr7T99X/jYYgq0xNHLPCJG5mZU/6dN76Z1FB51Z54=";
   };
 
   installPhase = ''
@@ -17,13 +17,13 @@ stdenv.mkDerivation rec {
     # $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:${coreutils}/bin" \
-      --replace "sudo " "/run/wrappers/bin/sudo " 
+      --replace "PATH=/usr/bin:/bin" "PATH=${util-linux.bin}/bin:${coreutils}/bin" \
+      --replace "sudo " "/run/wrappers/bin/sudo "
   '';
 
   preferLocalBuild = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Syncs browser profile dirs to RAM";
     longDescription = ''
       Profile-sync-daemon (psd) is a tiny pseudo-daemon designed to manage your
diff --git a/pkgs/tools/misc/progress/default.nix b/pkgs/tools/misc/progress/default.nix
index a43101f607d..9feee484170 100644
--- a/pkgs/tools/misc/progress/default.nix
+++ b/pkgs/tools/misc/progress/default.nix
@@ -1,22 +1,22 @@
-{ stdenv, fetchFromGitHub, pkgconfig, ncurses, which }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, ncurses, which }:
 
 stdenv.mkDerivation rec {
   pname = "progress";
-  version = "0.15";
+  version = "0.16";
 
   src = fetchFromGitHub {
     owner = "Xfennec";
     repo = "progress";
     rev = "v${version}";
-    sha256 = "1cnb4ixlhshn139mj5sr42k5m6gjjbyqvkn1324c47niwrgp7dqm";
+    sha256 = "sha256-kkEyflyBaQ5hUVo646NUuC1u54uzLJJsVFej9pMEwT0=";
   };
 
-  nativeBuildInputs = [ pkgconfig which ];
+  nativeBuildInputs = [ pkg-config which ];
   buildInputs = [ ncurses ];
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/Xfennec/progress";
     description = "Tool that shows the progress of coreutils programs";
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/proxytunnel/default.nix b/pkgs/tools/misc/proxytunnel/default.nix
index 74c04905994..7743793143a 100644
--- a/pkgs/tools/misc/proxytunnel/default.nix
+++ b/pkgs/tools/misc/proxytunnel/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, openssl }:
+{ lib, stdenv, fetchurl, openssl }:
 
 stdenv.mkDerivation {
   name = "proxytunnel-1.9.0";
@@ -15,7 +15,7 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/pspg/default.nix b/pkgs/tools/misc/pspg/default.nix
index 63acdbfc13b..ff4e15c9cc8 100644
--- a/pkgs/tools/misc/pspg/default.nix
+++ b/pkgs/tools/misc/pspg/default.nix
@@ -1,22 +1,22 @@
-{ stdenv, fetchFromGitHub, gnugrep, ncurses, pkgconfig, readline, postgresql }:
+{ lib, stdenv, fetchFromGitHub, gnugrep, ncurses, pkg-config, readline, postgresql }:
 
 stdenv.mkDerivation rec {
   pname = "pspg";
-  version = "3.1.2";
+  version = "4.5.0";
 
   src = fetchFromGitHub {
     owner = "okbob";
     repo = pname;
     rev = version;
-    sha256 = "1x4x93c8qqalrhaah1rmrspr4gjcgf1sg6kplf9rg1c42mk672f8";
+    sha256 = "sha256-RWezBNqjKybMtfpxPhDg2ysb4ksKphTPdTNTwCe4pas=";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ gnugrep ncurses readline postgresql ];
 
   makeFlags = [ "PREFIX=${placeholder "out"}" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/okbob/pspg";
     description = "Postgres Pager";
     license = licenses.bsd2;
diff --git a/pkgs/tools/misc/psw/default.nix b/pkgs/tools/misc/psw/default.nix
new file mode 100644
index 00000000000..c3d9b347ce1
--- /dev/null
+++ b/pkgs/tools/misc/psw/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "psw";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "Wulfsta";
+    repo = pname;
+    rev = version;
+    sha256 = "1nwmps3zw99lrz6k1j14w4rcm7yj8vhf4cs9wjfc3c1zfjibz9iz";
+  };
+
+  cargoSha256 = "1y2am1bz68q7d9bn4264al13fv2j6a87bwrd60ycx0qak9fczlmv";
+
+  meta = with lib; {
+    description = "A command line tool to write random bytes to stdout";
+    homepage = "https://github.com/Wulfsta/psw";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ wulfsta ];
+  };
+}
diff --git a/pkgs/tools/misc/pubs/default.nix b/pkgs/tools/misc/pubs/default.nix
index 158b56e2a5d..36afc1d4cbb 100644
--- a/pkgs/tools/misc/pubs/default.nix
+++ b/pkgs/tools/misc/pubs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fetchpatch, python3Packages }:
+{ lib, fetchFromGitHub, python3Packages }:
 
 python3Packages.buildPythonApplication rec {
   pname = "pubs";
@@ -12,20 +12,20 @@ python3Packages.buildPythonApplication rec {
   };
 
   propagatedBuildInputs = with python3Packages; [
-    argcomplete dateutil configobj feedparser bibtexparser pyyaml requests six 
+    argcomplete python-dateutil configobj feedparser bibtexparser pyyaml requests six
     beautifulsoup4
   ];
 
   checkInputs = with python3Packages; [ pyfakefs mock ddt ];
 
   # Disabling git tests because they expect git to be preconfigured
-  # with the user's details. See 
+  # with the user's details. See
   # https://github.com/NixOS/nixpkgs/issues/94663
   preCheck = ''
     rm tests/test_git.py
     '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Command-line bibliography manager";
     homepage = "https://github.com/pubs/pubs";
     license = licenses.lgpl3;
diff --git a/pkgs/tools/misc/pv/default.nix b/pkgs/tools/misc/pv/default.nix
index dd64366679c..013ddb8e3da 100644
--- a/pkgs/tools/misc/pv/default.nix
+++ b/pkgs/tools/misc/pv/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl } :
+{ lib, stdenv, fetchurl } :
 
 stdenv.mkDerivation rec {
   name = "pv-1.6.6";
@@ -11,8 +11,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.artistic2;
+    maintainers = with lib.maintainers; [ ];
+    platforms = with lib.platforms; all;
   };
 }
diff --git a/pkgs/tools/misc/pws/default.nix b/pkgs/tools/misc/pws/default.nix
index 0edec63c8c9..783bb9b5a38 100644
--- a/pkgs/tools/misc/pws/default.nix
+++ b/pkgs/tools/misc/pws/default.nix
@@ -1,15 +1,16 @@
 { stdenv, lib, bundlerEnv, ruby, bundlerUpdateScript, xsel, makeWrapper }:
 
 stdenv.mkDerivation rec {
-  name = "pws-${(import ./gemset.nix).pws.version}";
+  pname = "pws";
+  version = (import ./gemset.nix).pws.version;
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
-  phases = ["installPhase"];
+  dontUnpack = true;
 
   installPhase = let
     env = bundlerEnv {
-      name = "${name}-gems";
+      name = "${pname}-gems";
 
       inherit ruby;
 
diff --git a/pkgs/tools/misc/pws/gemset.nix b/pkgs/tools/misc/pws/gemset.nix
index 2aa26f9a020..e0b263e86a5 100644
--- a/pkgs/tools/misc/pws/gemset.nix
+++ b/pkgs/tools/misc/pws/gemset.nix
@@ -31,4 +31,4 @@
     };
     version = "1.0.6";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/misc/q-text-as-data/default.nix b/pkgs/tools/misc/q-text-as-data/default.nix
index e70b8274d36..69d11ab3458 100644
--- a/pkgs/tools/misc/q-text-as-data/default.nix
+++ b/pkgs/tools/misc/q-text-as-data/default.nix
@@ -1,26 +1,32 @@
-{ stdenvNoCC, fetchFromGitHub, python2 }:
+{ lib, fetchFromGitHub, python3Packages }:
 
-stdenvNoCC.mkDerivation rec {
+python3Packages.buildPythonApplication rec {
   pname = "q-text-as-data";
-  version = "1.7.4";
+  version = "2.0.19";
 
   src = fetchFromGitHub {
     owner = "harelba";
     repo = "q";
     rev = version;
-    sha256 = "0p8rbfwwcqjyrix51v52zp9b03z4xg1fv2raf2ygqp9a4l27dca8";
+    sha256 = "18cwyfjgxxavclyd08bmb943c8bvzp1gnqp4klkq5xlgqwivr4sv";
   };
 
-  buildInputs = [ python2 ];
-  dontBuild = true;
+  propagatedBuildInputs = with python3Packages; [
+    setuptools
+    six
+  ];
 
-  installPhase = ''
-    mkdir -p $out/bin
-    cp bin/q $out/bin
-    chmod +x $out/bin/q
+  doCheck = false;
+
+  patchPhase = ''
+    # remove broken symlink
+    rm bin/qtextasdata.py
+
+    # not considered good practice pinning in install_requires
+    substituteInPlace setup.py --replace 'six==' 'six>='
   '';
 
-  meta = with stdenvNoCC.lib; {
+  meta = with 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).
diff --git a/pkgs/tools/misc/qdl/default.nix b/pkgs/tools/misc/qdl/default.nix
new file mode 100644
index 00000000000..79b9cec2ed5
--- /dev/null
+++ b/pkgs/tools/misc/qdl/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, libxml2, systemd }:
+
+stdenv.mkDerivation {
+  pname   = "qdl";
+  version = "unstable-2021-05-06";
+
+  src = fetchFromGitHub {
+    owner  = "andersson";
+    repo   = "qdl";
+    rev    = "2021b303a81ca1bcf21b7f1f23674b5c8747646f";
+    sha256 = "0akrdca4jjdkfdya36vy1y5vzimrc4pp5jm24rmlw8hbqxvj72ri";
+  };
+
+  buildInputs = [ systemd libxml2 ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 ./qdl -t $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage    = "https://github.com/andersson/qdl";
+    description = "Tool for flashing images to Qualcomm devices";
+    license     = licenses.bsd3;
+    maintainers = with maintainers; [ musfay ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/qjoypad/default.nix b/pkgs/tools/misc/qjoypad/default.nix
index 2b8a2fb02be..7fc578ec857 100644
--- a/pkgs/tools/misc/qjoypad/default.nix
+++ b/pkgs/tools/misc/qjoypad/default.nix
@@ -1,11 +1,11 @@
-{ stdenv, fetchurl, pkgconfig, libX11, libXtst, qt4 }:
+{ lib, stdenv, fetchurl, pkg-config, libX11, libXtst, qt4 }:
 stdenv.mkDerivation rec {
   name = "qjoypad-4.1.0";
   src = fetchurl {
     url = "mirror://sourceforge/qjoypad/${name}.tar.gz";
     sha256 = "1jlm7i26nfp185xrl41kz5z6fgvyj51bjpz48cg27xx64y40iamm";
   };
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libX11 libXtst qt4 ];
   NIX_LDFLAGS = "-lX11";
   patchPhase = ''
@@ -33,8 +33,8 @@ stdenv.mkDerivation rec {
       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;
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ astsmtl ];
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/misc/qmk/default.nix b/pkgs/tools/misc/qmk/default.nix
new file mode 100644
index 00000000000..3fa088d8e2b
--- /dev/null
+++ b/pkgs/tools/misc/qmk/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, python3
+, fetchpatch
+}:
+
+let
+  inherit (python3.pkgs) buildPythonApplication fetchPypi;
+in
+buildPythonApplication rec {
+  pname = "qmk";
+  version = "0.0.52";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-mNF+bRhaL6JhNbROmjYDHkKKokRIALd5FZbRt9Kg5XQ=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    flake8
+    nose2
+    pep8-naming
+    setuptools-scm
+    yapf
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    appdirs
+    argcomplete
+    colorama
+    dotty-dict
+    hid
+    hjson
+    jsonschema
+    milc
+    pygments
+    pyusb
+  ];
+
+  # no tests implemented
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/qmk/qmk_cli";
+    description = "A program to help users work with QMK Firmware";
+    longDescription = ''
+      qmk_cli is a companion tool to QMK firmware. With it, you can:
+
+      - Interact with your qmk_firmware tree from any location
+      - Use qmk clone to pull down anyone's qmk_firmware fork
+      - Setup and work with your build environment:
+        - qmk setup
+        - qmk doctor
+        - qmk compile
+        - qmk console
+        - qmk flash
+        - qmk lint
+      - ... and many more!
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ bhipple ];
+  };
+}
diff --git a/pkgs/tools/misc/quich/default.nix b/pkgs/tools/misc/quich/default.nix
new file mode 100644
index 00000000000..ea4fbc7eead
--- /dev/null
+++ b/pkgs/tools/misc/quich/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "quich";
+  version = "3.1.0";
+
+  src = fetchFromGitHub {
+    owner = "Usbac";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1n9c01q2v6g9wnmxp248yclhp8cxclnj0yyn1qrvjsn6srcpr22c";
+  };
+
+  doCheck = true;
+
+  makeFlags = [ "DESTDIR=" "PREFIX=$(out)" "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  meta = with lib; {
+    description = "The advanced terminal calculator";
+    longDescription = ''
+      Quich is a compact, fast, powerful and useful calculator for your terminal
+      with numerous features, supporting Windows and Linux Systems,
+      written in ANSI C.
+    '';
+    homepage = "https://github.com/Usbac/quich";
+    license = licenses.mit;
+    maintainers = [ maintainers.xdhampus ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/misc/radeon-profile/default.nix b/pkgs/tools/misc/radeon-profile/default.nix
index 852c46b6d00..acadda5c549 100644
--- a/pkgs/tools/misc/radeon-profile/default.nix
+++ b/pkgs/tools/misc/radeon-profile/default.nix
@@ -5,7 +5,7 @@
 mkDerivation rec {
 
   pname = "radeon-profile";
-  version = "20190903";
+  version = "20200824";
 
   nativeBuildInputs = [ qmake ];
   buildInputs = [ qtbase qtcharts libXrandr libdrm ];
@@ -14,7 +14,7 @@ mkDerivation rec {
     owner  = "marazmista";
     repo   = "radeon-profile";
     rev    = version;
-    sha256 = "0ax5417q03xjwi3pn7yyjdb90ssaygdprfgb1pz9nkyk6773ckx5";
+    sha256 = "0z6a9w79s5wiy8cvwcdp5wmgf6702d0wzw95f6176yhp4cwy4cq2";
   }) + "/radeon-profile";
 
   preConfigure = ''
diff --git a/pkgs/tools/misc/rargs/default.nix b/pkgs/tools/misc/rargs/default.nix
index 6ebbeb39c6e..ed15e81709d 100644
--- a/pkgs/tools/misc/rargs/default.nix
+++ b/pkgs/tools/misc/rargs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, rustPlatform, fetchFromGitHub }:
+{ lib, rustPlatform, fetchFromGitHub }:
 
 rustPlatform.buildRustPackage rec {
   pname   = "rargs";
@@ -11,14 +11,14 @@ rustPlatform.buildRustPackage rec {
     sha256 = "188gj05rbivci1z4z29vwdwxlj2w01v5i4avwrxjnj1dd6mmlbxd";
   };
 
-  cargoSha256 = "0qzkhx0n28f5wy4fral3adn499q3f10q71cd544s4ghqwqn4khc9";
+  cargoSha256 = "18yd4dpzjyw6w1ms74pzxqyn5fkh8q4rsg6rqsp6bsz7300fxxvh";
 
   doCheck=false;  # `rargs`'s test depends on the deprecated `assert_cli` crate, which in turn is not in Nixpkgs
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "xargs + awk with pattern matching support";
     homepage    = "https://github.com/lolabout/rargs";
     license     = with licenses; [ mit ];
-    maintainers = with maintainers; [ pblkt ]; 
+    maintainers = with maintainers; [ pblkt ];
   };
 }
diff --git a/pkgs/tools/misc/rauc/default.nix b/pkgs/tools/misc/rauc/default.nix
new file mode 100644
index 00000000000..667ce3cabe4
--- /dev/null
+++ b/pkgs/tools/misc/rauc/default.nix
@@ -0,0 +1,51 @@
+{ autoreconfHook
+, curl
+, dbus
+, fetchFromGitHub
+, glib
+, json-glib
+, lib
+, nix-update-script
+, openssl
+, pkg-config
+, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rauc";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-AIizbD2jaZ5SY0K/hwpHdGE20KEhWC53LWUiVYs9Oiw=";
+  };
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+
+  buildInputs = [ curl dbus glib json-glib openssl ];
+
+  configureFlags = [
+    "--with-systemdunitdir=${placeholder "out"}/lib/systemd/system"
+    "--with-dbusinterfacesdir=${placeholder "out"}/share/dbus-1/interfaces"
+    "--with-dbuspolicydir=${placeholder "out"}/share/dbus-1/system.d"
+    "--with-dbussystemservicedir=${placeholder "out"}/share/dbus-1/system-services"
+  ];
+
+  meta = with lib; {
+    description = "Safe and secure software updates for embedded Linux";
+    homepage = "https://rauc.io";
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ emantor ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/pkgs/tools/misc/rcm/default.nix b/pkgs/tools/misc/rcm/default.nix
index 570b55c9acf..6eea6fe7beb 100644
--- a/pkgs/tools/misc/rcm/default.nix
+++ b/pkgs/tools/misc/rcm/default.nix
@@ -1,12 +1,15 @@
-{ stdenv, fetchurl }:
+{ lib
+, stdenv
+, fetchurl
+}:
 
 stdenv.mkDerivation rec {
   pname = "rcm";
-  version = "1.3.3";
+  version = "1.3.4";
 
   src = fetchurl {
     url = "https://thoughtbot.github.io/rcm/dist/rcm-${version}.tar.gz";
-    sha256 = "1bqk7rrp1ckzvsvl9wghsr77m8xl3a7yc5gqdsisz492dx2j8mck";
+    sha256 = "sha256-mxGuN0Sc9NI07G0TSEeb/tMlPauhH36ed0BZhltmwko=";
   };
 
   patches = [ ./fix-rcmlib-path.patch ];
@@ -17,11 +20,11 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
-    description = "Management Suite for Dotfiles";
+  meta = with lib; {
     homepage = "https://github.com/thoughtbot/rcm";
+    description = "Management Suite for Dotfiles";
     license = licenses.bsd3;
-    maintainers = with maintainers; [ malyn ];
+    maintainers = with maintainers; [ malyn AndersonTorres ];
     platforms = with platforms; unix;
   };
 }
diff --git a/pkgs/tools/misc/recoverjpeg/default.nix b/pkgs/tools/misc/recoverjpeg/default.nix
index bf75213acdf..4b8ea50cd4e 100644
--- a/pkgs/tools/misc/recoverjpeg/default.nix
+++ b/pkgs/tools/misc/recoverjpeg/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, makeWrapper, python2, exif, imagemagick }:
+{ lib, stdenv, fetchurl, makeWrapper, python2, exif, imagemagick }:
 
 stdenv.mkDerivation rec {
   pname = "recoverjpeg";
@@ -15,10 +15,10 @@ stdenv.mkDerivation rec {
 
   postFixup = ''
     wrapProgram $out/bin/sort-pictures \
-      --prefix PATH : ${stdenv.lib.makeBinPath [ exif imagemagick ]}
+      --prefix PATH : ${lib.makeBinPath [ exif imagemagick ]}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/misc/recutils/default.nix b/pkgs/tools/misc/recutils/default.nix
index 416fa23f453..5453ab75a4a 100644
--- a/pkgs/tools/misc/recutils/default.nix
+++ b/pkgs/tools/misc/recutils/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, emacs, curl, check, bc }:
+{ fetchurl, lib, stdenv, emacs, curl, check, bc }:
 
 stdenv.mkDerivation rec {
   name = "recutils-1.8";
@@ -27,9 +27,9 @@ stdenv.mkDerivation rec {
 
     homepage = "https://www.gnu.org/software/recutils/";
 
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
 
-    platforms = stdenv.lib.platforms.all;
+    platforms = lib.platforms.all;
     maintainers = [ ];
   };
 }
diff --git a/pkgs/tools/misc/remind/default.nix b/pkgs/tools/misc/remind/default.nix
index 5c7fa9d4c24..d10811ffa04 100644
--- a/pkgs/tools/misc/remind/default.nix
+++ b/pkgs/tools/misc/remind/default.nix
@@ -1,29 +1,28 @@
-{stdenv, fetchurl, tk, tcllib, makeWrapper
+{ lib
+, stdenv
+, fetchurl
+, tk
+, tcllib
+, tcl
 , 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);
+  inherit (lib) optional optionals optionalString;
+  tclLibraries = optionals tkremind [ tcllib tk ];
   tkremindPatch = optionalString tkremind ''
     substituteInPlace scripts/tkremind --replace "exec wish" "exec ${tk}/bin/wish"
   '';
-in stdenv.mkDerivation rec {
+in
+tcl.mkTclDerivation rec {
   pname = "remind";
-  version = "03.03.01";
+  version = "03.03.06";
 
   src = fetchurl {
     url = "https://dianne.skoll.ca/projects/remind/download/remind-${version}.tar.gz";
-    sha256 = "0y4l960529sl3sn4r4g36qpy3jk5h1x4algjy7an7sfiqb8n98fi";
+    sha256 = "sha256-lpoMAXDJxwODY0/aoo25GRBYWFhE4uf11pR5/ITZX1s=";
   };
 
-  nativeBuildInputs = optional tkremind makeWrapper;
   propagatedBuildInputs = tclLibraries;
 
   postPatch = ''
@@ -35,15 +34,11 @@ in stdenv.mkDerivation rec {
     ${tkremindPatch}
   '';
 
-  postInstall = optionalString tkremind ''
-    wrapProgram $out/bin/tkremind --set TCLLIBPATH "${tclLibPaths}"
-  '';
-
-  meta = {
+  meta = with lib; {
     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;
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ raskin kovirobi ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/rename/default.nix b/pkgs/tools/misc/rename/default.nix
index e32b016016b..a8b5f4a54ac 100644
--- a/pkgs/tools/misc/rename/default.nix
+++ b/pkgs/tools/misc/rename/default.nix
@@ -1,19 +1,19 @@
-{ stdenv, fetchFromGitHub, perlPackages }:
+{ lib, fetchFromGitHub, perlPackages }:
 
-perlPackages.buildPerlPackage {
+perlPackages.buildPerlPackage rec {
   pname = "rename";
-  version = "1.9";
+  version = "1.11";
   outputs = [ "out" ];
   src = fetchFromGitHub {
     owner = "pstray";
     repo = "rename";
-    rev = "d46f1d0ced25dc5849acb5d5974a3e2e9d97d536";
-    sha256 = "0qahs1cqfaci2hdf1xncrz4k0z5skkfr43apnm3kybs7za33apzw";
+    rev = "v${version}";
+    sha256 = "SK6wS3IxjCftuDiiZU27TFnn9GVd137zmzvGH88cNLI=";
   };
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Rename files according to a Perl rewrite expression";
     homepage = "https://github.com/pstray/rename";
-    maintainers = with maintainers; [ mkg ];
+    maintainers = with maintainers; [ mkg cyplo ];
     license = with licenses; [ gpl1Plus ];
   };
 }
diff --git a/pkgs/tools/misc/renameutils/default.nix b/pkgs/tools/misc/renameutils/default.nix
index 73146f09792..e730b583d7c 100644
--- a/pkgs/tools/misc/renameutils/default.nix
+++ b/pkgs/tools/misc/renameutils/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, readline}:
+{lib, stdenv, fetchurl, readline}:
 
 stdenv.mkDerivation {
   name = "renameutils-0.12.0";
@@ -15,7 +15,7 @@ stdenv.mkDerivation {
   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;
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl2Plus;
   };
 }
diff --git a/pkgs/tools/misc/reredirect/default.nix b/pkgs/tools/misc/reredirect/default.nix
index 15045d4bd8a..eb1c90324e0 100644
--- a/pkgs/tools/misc/reredirect/default.nix
+++ b/pkgs/tools/misc/reredirect/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "reredirect";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
       --replace "reredirect" "${placeholder "out"}/bin/reredirect"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tool to dynamicly redirect outputs of a running process";
     homepage = "https://github.com/jerome-pouiller/reredirect";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/riemann-c-client/default.nix b/pkgs/tools/misc/riemann-c-client/default.nix
index 48e0f7757ae..c60dd9f7c7a 100644
--- a/pkgs/tools/misc/riemann-c-client/default.nix
+++ b/pkgs/tools/misc/riemann-c-client/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, file , protobufc }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, file , protobufc }:
 
 stdenv.mkDerivation rec {
   name = "riemann-c-client-1.10.4";
@@ -10,14 +10,14 @@ stdenv.mkDerivation rec {
     sha256 = "01gzqxqm1xvki2vd78c7my2kgp4fyhkcf5j5fmy8z0l93lgj82rr";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ file protobufc ];
 
   preBuild = ''
     make lib/riemann/proto/riemann.pb-c.h
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/algernon/riemann-c-client";
     description = "A C client library for the Riemann monitoring system";
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/riemann-tools/gemset.nix b/pkgs/tools/misc/riemann-tools/gemset.nix
index e775de987d6..57acb5ac901 100644
--- a/pkgs/tools/misc/riemann-tools/gemset.nix
+++ b/pkgs/tools/misc/riemann-tools/gemset.nix
@@ -71,4 +71,4 @@
     };
     version = "2.9.9";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/misc/rig/default.nix b/pkgs/tools/misc/rig/default.nix
index 7e1d9307a16..5efa92ef157 100644
--- a/pkgs/tools/misc/rig/default.nix
+++ b/pkgs/tools/misc/rig/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl } :
+{ lib, stdenv, fetchurl } :
 
 stdenv.mkDerivation rec {
   version = "1.11";
@@ -13,8 +13,10 @@ stdenv.mkDerivation rec {
   # http://deb.debian.org/debian/pool/main/r/rig/rig_1.11-1.diff.gz
   patches = [ ./rig_1.11-1.diff ];
 
+  makeFlags = [ "CXX=${stdenv.cc.targetPrefix}c++" ];
+
   meta = {
-    homepage = "http://rig.sourceforge.net/"; 
+    homepage = "http://rig.sourceforge.net/";
     description = "Random identity generator";
     longDescription = ''
       RIG (Random Identity Generator) is a free replacement for a shareware
@@ -24,8 +26,8 @@ stdenv.mkDerivation rec {
       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;
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ tomberek ];
+    platforms = with lib.platforms; all;
   };
 }
diff --git a/pkgs/tools/misc/rkflashtool/default.nix b/pkgs/tools/misc/rkflashtool/default.nix
index 94d6ca95748..b96d9be8a4d 100644
--- a/pkgs/tools/misc/rkflashtool/default.nix
+++ b/pkgs/tools/misc/rkflashtool/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libusb1 }:
+{ lib, stdenv, fetchurl, libusb1 }:
 
 stdenv.mkDerivation rec {
   name = "rkflashtool-5.1";
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
     cp rkunpack rkcrc rkflashtool rkparameters rkparametersblock rkunsign rkmisc $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://sourceforge.net/projects/rkflashtool/";
     description = "Tools for flashing Rockchip devices";
     platforms = platforms.linux;
diff --git a/pkgs/tools/misc/rlwrap/default.nix b/pkgs/tools/misc/rlwrap/default.nix
index c19b0f1f9ac..a78d6f143a1 100644
--- a/pkgs/tools/misc/rlwrap/default.nix
+++ b/pkgs/tools/misc/rlwrap/default.nix
@@ -1,26 +1,30 @@
-{ stdenv, fetchurl, readline }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, perl, readline }:
 
 stdenv.mkDerivation rec {
   pname = "rlwrap";
-  version = "0.43";
+  version = "0.45";
 
-  src = fetchurl {
-    url = "https://github.com/hanslub42/rlwrap/releases/download/v${version}/${pname}-${version}.tar.gz";
-    sha256 = "0bzb7ylk2770iv59v2d0gypb21y2xn87m299s9rqm6rdi2vx11lf";
+  src = fetchFromGitHub {
+    owner = "hanslub42";
+    repo = "rlwrap";
+    rev = "v${version}";
+    sha256 = "1ppkjdnxrxh99g4xaiaglm5bmp24006rfahci0cn1g7zwilkjy8s";
   };
 
-  buildInputs = [ readline ];
-
-  # Be high-bit-friendly
-  preBuild = ''
-    sed -i src/readline.c -e "s@[*]p [<] ' '@(*p >= 0) \\&\\& (*p < ' ')@"
+  postPatch = ''
+    substituteInPlace src/readline.c \
+      --replace "if(*p >= 0 && *p < ' ')" "if(*p >= 0 && (*p >= 0) && (*p < ' '))"
   '';
 
-  meta = {
+  nativeBuildInputs = [ autoreconfHook perl ];
+
+  buildInputs = [ readline ];
+
+  meta = with lib; {
     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; [ ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/misc/rmlint/default.nix b/pkgs/tools/misc/rmlint/default.nix
index 936c78b695d..8211c5aebc7 100644
--- a/pkgs/tools/misc/rmlint/default.nix
+++ b/pkgs/tools/misc/rmlint/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , cairo
 , fetchFromGitHub
 , gettext
@@ -9,16 +9,18 @@
 , libelf
 , makeWrapper
 , pango
-, pkgconfig
+, pkg-config
 , polkit
 , python3
 , scons
 , sphinx
-, utillinux
+, util-linux
 , wrapGAppsHook
 , withGui ? false }:
 
-with stdenv.lib;
+assert withGui -> !stdenv.isDarwin;
+
+with lib;
 stdenv.mkDerivation rec {
   pname = "rmlint";
   version = "2.10.1";
@@ -30,14 +32,11 @@ stdenv.mkDerivation rec {
     sha256 = "15xfkcw1bkfyf3z8kl23k3rlv702m0h7ghqxvhniynvlwbgh6j2x";
   };
 
-  CFLAGS="-I${stdenv.lib.getDev utillinux}/include";
-
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     sphinx
-    gettext
     scons
-  ] ++ stdenv.lib.optionals withGui [
+  ] ++ lib.optionals withGui [
     makeWrapper
     wrapGAppsHook
   ];
@@ -46,8 +45,8 @@ stdenv.mkDerivation rec {
     glib
     json-glib
     libelf
-    utillinux
-  ] ++ stdenv.lib.optionals withGui [
+    util-linux
+  ] ++ lib.optionals withGui [
     cairo
     gobject-introspection
     gtksourceview3
@@ -57,12 +56,24 @@ stdenv.mkDerivation rec {
     python3.pkgs.pygobject3
   ];
 
-  # this doesn't seem to support configureFlags, and appends $out afterwards,
-  # so add the --without-gui in front of it
-  prefixKey = stdenv.lib.optionalString (!withGui) " --without-gui " + "--prefix=";
+  prePatch = ''
+    export CFLAGS="$NIX_CFLAGS_COMPILE"
+    export LDFLAGS="''${NIX_LDFLAGS//-rpath /-Wl,-rpath=}"
+
+    # remove sources of nondeterminism
+    substituteInPlace lib/cmdline.c \
+      --replace "__DATE__" "\"Jan  1 1970\"" \
+      --replace "__TIME__" "\"00:00:00\""
+    substituteInPlace docs/SConscript \
+      --replace "gzip -c " "gzip -cn "
+  '';
+
+  prefixKey = "--prefix=";
+
+  sconsFlags = lib.optionals (!withGui) [ "--without-gui" ];
 
   # in GUI mode, this shells out to itself, and tries to import python modules
-  postInstall = stdenv.lib.optionalString withGui ''
+  postInstall = lib.optionalString withGui ''
     gappsWrapperArgs+=(--prefix PATH : "$out/bin")
     gappsWrapperArgs+=(--prefix PYTHONPATH : "$(toPythonPath $out):$(toPythonPath ${python3.pkgs.pygobject3}):$(toPythonPath ${python3.pkgs.pycairo})")
   '';
@@ -70,8 +81,8 @@ stdenv.mkDerivation rec {
   meta = {
     description = "Extremely fast tool to remove duplicates and other lint from your filesystem";
     homepage = "https://rmlint.readthedocs.org";
-    platforms = platforms.linux;
+    platforms = platforms.unix;
     license = licenses.gpl3;
-    maintainers = [ maintainers.koral ];
+    maintainers = with maintainers; [ aaschmid koral ];
   };
 }
diff --git a/pkgs/tools/misc/rmtrash/default.nix b/pkgs/tools/misc/rmtrash/default.nix
index 073871b0f43..61b8ead738c 100644
--- a/pkgs/tools/misc/rmtrash/default.nix
+++ b/pkgs/tools/misc/rmtrash/default.nix
@@ -1,20 +1,17 @@
-{ lib, stdenv, fetchFromGitHub, makeWrapper
+{ lib, stdenvNoCC, fetchFromGitHub, makeWrapper
 , trash-cli, coreutils, which, getopt }:
 
-stdenv.mkDerivation rec {
+stdenvNoCC.mkDerivation rec {
   pname = "rmtrash";
-  version = "1.13";
+  version = "1.14";
 
   src = fetchFromGitHub {
     owner = "PhrozenByte";
     repo = pname;
     rev = "v${version}";
-    sha256 = "04a9c65wnkq1fj8qhdsdbps88xjbp7rn6p27y25v47kaysvrw01j";
+    sha256 = "0wfb2ykzlsxyqn9krfsis9jxhaxy3pxl71a4f15an1ngfndai694";
   };
 
-  dontConfigure = true;
-  dontBuild = true;
-
   nativeBuildInputs = [ makeWrapper ];
 
   installPhase = ''
@@ -35,5 +32,6 @@ stdenv.mkDerivation rec {
     '';
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ peelz ];
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/rockbox-utility/default.nix b/pkgs/tools/misc/rockbox-utility/default.nix
index 6be32e21478..a75b90d6f54 100644
--- a/pkgs/tools/misc/rockbox-utility/default.nix
+++ b/pkgs/tools/misc/rockbox-utility/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchurl, pkgconfig, cryptopp
+{ lib, stdenv, fetchurl, pkg-config, cryptopp
 , libusb1, qtbase, qttools, makeWrapper
 , qmake, withEspeak ? false, espeak ? null
 , qt5 }:
 
-let inherit (stdenv.lib) getDev; in
+let inherit (lib) getDev; in
 
 stdenv.mkDerivation  rec {
   pname = "rockbox-utility";
@@ -15,8 +15,8 @@ stdenv.mkDerivation  rec {
   };
 
   buildInputs = [ cryptopp libusb1 qtbase qttools ]
-    ++ stdenv.lib.optional withEspeak espeak;
-  nativeBuildInputs = [ makeWrapper pkgconfig qmake qt5.wrapQtAppsHook ];
+    ++ lib.optional withEspeak espeak;
+  nativeBuildInputs = [ makeWrapper pkg-config qmake qt5.wrapQtAppsHook ];
 
   postPatch = ''
     sed -i rbutil/rbutilqt/rbutilqt.pro \
@@ -34,7 +34,7 @@ stdenv.mkDerivation  rec {
     install -Dm755 RockboxUtility $out/bin/rockboxutility
     ln -s $out/bin/rockboxutility $out/bin/RockboxUtility
     wrapProgram $out/bin/rockboxutility \
-    ${stdenv.lib.optionalString withEspeak ''
+    ${lib.optionalString withEspeak ''
       --prefix PATH : ${espeak}/bin
     ''}
 
@@ -47,7 +47,7 @@ stdenv.mkDerivation  rec {
   # may clobber the files read by the parallel `make build/rcc/qrc_rbutilqt-lang.cpp`.
   enableParallelBuilding = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Open source firmware for mp3 players";
     homepage = "https://www.rockbox.org";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/roundup/default.nix b/pkgs/tools/misc/roundup/default.nix
index 8d0c62889f9..fd2272e6cd5 100644
--- a/pkgs/tools/misc/roundup/default.nix
+++ b/pkgs/tools/misc/roundup/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, ronn, shocco }:
+{ lib, stdenv, fetchFromGitHub, ronn, shocco }:
 
 stdenv.mkDerivation rec {
   pname = "roundup";
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/misc/routino/default.nix b/pkgs/tools/misc/routino/default.nix
index 8d948734460..5f2a8852e31 100644
--- a/pkgs/tools/misc/routino/default.nix
+++ b/pkgs/tools/misc/routino/default.nix
@@ -1,16 +1,16 @@
-{ stdenv, fetchurl, fetchpatch, perl, zlib, bzip2 }:
+{ lib, stdenv, fetchurl, fetchpatch, perl, zlib, bzip2 }:
 
 stdenv.mkDerivation rec {
   pname = "routino";
-  version = "3.3.2";
+  version = "3.3.3";
 
   src = fetchurl {
     url = "https://routino.org/download/${pname}-${version}.tgz";
-    sha256 = "1ccx3s99j8syxc1gqkzsaqkmyf44l7h3adildnc5iq2md7bp8wab";
+    sha256 = "1xa7l2bjn832nk6bc7b481nv8hd2gj41jwhg0d2qy10lqdvjpn5b";
   };
 
   patchFlags = [ "-p0" ];
-  patches = stdenv.lib.optionals stdenv.isDarwin [
+  patches = lib.optionals stdenv.isDarwin [
     (fetchpatch {
       url = "https://raw.githubusercontent.com/macports/macports-ports/18fd229516a46e7272003acbe555735b2a902db7/gis/routino/files/patch-Makefile_conf.diff";
       sha256 = "1b7hpa4sizansnwwxq1c031nxwdwh71pg08jl9z9apiab8pjsn53";
@@ -21,20 +21,25 @@ stdenv.mkDerivation rec {
     })
   ];
 
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile.conf \
+      --subst-var-by PREFIX $out
+  '';
+
   nativeBuildInputs = [ perl ];
 
   buildInputs = [ zlib bzip2 ];
 
   outputs = [ "out" "doc" ];
 
-  CLANG = stdenv.lib.optionalString stdenv.cc.isClang "1";
+  CLANG = lib.optionalString stdenv.cc.isClang "1";
 
   makeFlags = [ "prefix=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.routino.org/";
     description = "OpenStreetMap Routing Software";
-    license = licenses.agpl3;
+    license = licenses.agpl3Plus;
     maintainers = with maintainers; [ dotlambda ];
     platforms = with platforms; linux ++ darwin;
   };
diff --git a/pkgs/tools/misc/rpcsvc-proto/default.nix b/pkgs/tools/misc/rpcsvc-proto/default.nix
new file mode 100644
index 00000000000..400a63f7dfe
--- /dev/null
+++ b/pkgs/tools/misc/rpcsvc-proto/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, lib, fetchFromGitHub, autoreconfHook, buildPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "rpcsvc-proto";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "thkukuk";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "006l1f824r9bcbwn1s1vbs33cdwhs66jn6v97yas597y884y40z9";
+  };
+
+  outputs = [ "out" "man" ];
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ autoreconfHook ];
+
+  postPatch = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    substituteInPlace rpcsvc/Makefile.am \
+      --replace '$(top_builddir)/rpcgen/rpcgen' '${buildPackages.rpcsvc-proto}/bin/rpcgen'
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/thkukuk/rpcsvc-proto";
+    description = "This package contains rpcsvc proto.x files from glibc, which are missing in libtirpc";
+    longDescription = ''
+      The RPC-API has been removed from glibc. The 2.32-release-notes
+      (https://sourceware.org/pipermail/libc-announce/2020/000029.html) recommend to use
+      `libtirpc` and this package instead.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ ma27 ];
+  };
+}
diff --git a/pkgs/tools/misc/rpi-imager/default.nix b/pkgs/tools/misc/rpi-imager/default.nix
new file mode 100644
index 00000000000..c67dddf536f
--- /dev/null
+++ b/pkgs/tools/misc/rpi-imager/default.nix
@@ -0,0 +1,56 @@
+{ mkDerivation,
+  stdenv,
+  lib,
+  fetchFromGitHub,
+  cmake,
+  curl,
+  libarchive,
+  util-linux,
+  qtbase,
+  qtdeclarative,
+  qtsvg,
+  qttools,
+  qtquickcontrols2,
+  qtgraphicaleffects
+}:
+
+mkDerivation rec {
+  pname = "rpi-imager";
+  version = "1.6.2";
+
+  src = fetchFromGitHub {
+    owner = "raspberrypi";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ITn31ENEf2bysgJgV3u+NNPXk1pfIkUyJWIvS2DOrzY=";
+  };
+
+  nativeBuildInputs = [ cmake util-linux ];
+
+  buildInputs = [
+    curl
+    libarchive
+    qtbase
+    qtdeclarative
+    qtsvg
+    qttools
+    qtquickcontrols2
+    qtgraphicaleffects
+  ];
+
+  /* By default, the builder checks for JSON support in lsblk by running "lsblk --json",
+    but that throws an error, as /sys/dev doesn't exist in the sandbox.
+    This patch removes the check. */
+  patches = [ ./lsblkCheckFix.patch ];
+
+  meta = with lib; {
+    description = "Raspberry Pi Imaging Utility";
+    homepage = "https://www.raspberrypi.org/software/";
+    downloadPage = "https://github.com/raspberrypi/rpi-imager/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ymarkus ];
+    platforms = platforms.all;
+    # does not build on darwin
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/pkgs/tools/misc/rpi-imager/lsblkCheckFix.patch b/pkgs/tools/misc/rpi-imager/lsblkCheckFix.patch
new file mode 100644
index 00000000000..98fd2a659dc
--- /dev/null
+++ b/pkgs/tools/misc/rpi-imager/lsblkCheckFix.patch
@@ -0,0 +1,16 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 3d7fc79..8ce72b9 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -229,11 +229,6 @@ else()
+         if (NOT LSBLK)
+             message(FATAL_ERROR "Unable to locate lsblk (used for disk enumeration)")
+         endif()
+-
+-        execute_process(COMMAND "${LSBLK}" "--json" RESULT_VARIABLE ret)
+-        if (ret EQUAL "1")
+-            message(FATAL_ERROR "util-linux package too old. lsblk does not support --json (used for disk enumeration)")
+-        endif()
+     endif()
+ 
+     configure_file(
diff --git a/pkgs/tools/misc/rpm-ostree/default.nix b/pkgs/tools/misc/rpm-ostree/default.nix
index e04d37ba3c6..38a43c7ac3d 100644
--- a/pkgs/tools/misc/rpm-ostree/default.nix
+++ b/pkgs/tools/misc/rpm-ostree/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , ostree
 , rpm
@@ -6,7 +6,7 @@
 , autoconf
 , automake
 , libtool
-, pkgconfig
+, pkg-config
 , cargo
 , rustc
 , gobject-introspection
@@ -33,24 +33,24 @@
 , json_c
 , zchunk
 , libmodulemd
-, utillinux
+, util-linux
 , sqlite
 , cppunit
 }:
 
 stdenv.mkDerivation rec {
   pname = "rpm-ostree";
-  version = "2020.2";
+  version = "2021.2";
 
   outputs = [ "out" "dev" "man" "devdoc" ];
 
   src = fetchurl {
     url = "https://github.com/coreos/${pname}/releases/download/v${version}/${pname}-${version}.tar.xz";
-    sha256 = "nuEBEVFqr9J+Nf98GZkvNNYOtpMUjKzYrzCc1T2cR3A=";
+    sha256 = "sha256-msu5LReTYupgoS6Rm2nrMz9jauciAD99hh+w8BhSYn4=";
   };
 
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     which
     autoconf
     automake
@@ -89,7 +89,7 @@ stdenv.mkDerivation rec {
     json_c
     zchunk
     libmodulemd
-    utillinux # for smartcols.pc
+    util-linux # for smartcols.pc
     sqlite
     cppunit
   ];
@@ -114,9 +114,9 @@ stdenv.mkDerivation rec {
     env NOCONFIGURE=1 ./autogen.sh
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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/";
+    homepage = "https://coreos.github.io/rpm-ostree/";
     license = licenses.lgpl2Plus;
     maintainers = with maintainers; [ copumpkin ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/misc/rrdtool/default.nix b/pkgs/tools/misc/rrdtool/default.nix
index 10ff6db63f1..2f8b9092eea 100644
--- a/pkgs/tools/misc/rrdtool/default.nix
+++ b/pkgs/tools/misc/rrdtool/default.nix
@@ -1,7 +1,7 @@
-{ fetchurl, stdenv, gettext, perl, pkgconfig, libxml2, pango, cairo, groff
+{ fetchurl, lib, stdenv, gettext, perl, pkg-config, libxml2, pango, cairo, groff
 , tcl-8_5, darwin }:
 
-stdenv.mkDerivation rec {
+perl.pkgs.toPerlModule (stdenv.mkDerivation rec {
   name = "rrdtool-1.7.2";
 
   src = fetchurl {
@@ -9,10 +9,10 @@ stdenv.mkDerivation rec {
     sha256 = "1nsqra0g2nja19akmf9x5y9hhgc35ml3w9dcdz2ayz7zgvmzm6d1";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   buildInputs = [ gettext perl libxml2 pango cairo groff ]
-    ++ stdenv.lib.optionals stdenv.isDarwin [ tcl-8_5 darwin.apple_sdk.frameworks.ApplicationServices ];
+    ++ lib.optionals stdenv.isDarwin [ tcl-8_5 darwin.apple_sdk.frameworks.ApplicationServices ];
 
   postInstall = ''
     # for munin and rrdtool support
@@ -20,11 +20,11 @@ stdenv.mkDerivation rec {
     mv $out/lib/perl/5* $out/${perl.libPrefix}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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/pkgs/tools/misc/rw/default.nix b/pkgs/tools/misc/rw/default.nix
index b36eff12a2f..5299d249146 100644
--- a/pkgs/tools/misc/rw/default.nix
+++ b/pkgs/tools/misc/rw/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "rw";
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://sortix.org/rw";
     description = "Block device and byte copying program similar to dd";
     longDescription = ''
@@ -22,7 +22,5 @@ stdenv.mkDerivation rec {
     '';
     license = licenses.isc;
     maintainers = with maintainers; [ dtzWill ];
-
-    broken = stdenv.hostPlatform.isDarwin;
   };
 }
diff --git a/pkgs/tools/misc/s6-portable-utils/default.nix b/pkgs/tools/misc/s6-portable-utils/default.nix
index bc32489c588..d6f475a408e 100644
--- a/pkgs/tools/misc/s6-portable-utils/default.nix
+++ b/pkgs/tools/misc/s6-portable-utils/default.nix
@@ -2,13 +2,10 @@
 
 with skawarePackages;
 
-let
+buildPackage {
   pname = "s6-portable-utils";
-
-in buildPackage {
-  pname = pname;
-  version = "2.2.2.2";
-  sha256 = "1k3la37q46n93vjwk9wm9ym4w87z6lqzv43f03qd0vqj9k94mpv3";
+  version = "2.2.3.2";
+  sha256 = "173nmygkp7ky3093dg4rx3ahvyl7ll86z8qj6pl3jd96xb9s49v6";
 
   description = "A set of tiny general Unix utilities optimized for simplicity and small size";
 
@@ -28,7 +25,7 @@ in buildPackage {
     rm $(find -name "s6-*" -type f -mindepth 1 -maxdepth 1 -executable)
     rm seekablepipe
 
-    mv doc $doc/share/doc/${pname}/html
+    mv doc $doc/share/doc/s6-portable-utils/html
   '';
 
 
diff --git a/pkgs/tools/misc/sacad/default.nix b/pkgs/tools/misc/sacad/default.nix
new file mode 100644
index 00000000000..50599fbbabd
--- /dev/null
+++ b/pkgs/tools/misc/sacad/default.nix
@@ -0,0 +1,39 @@
+{ lib, python3Packages, jpegoptim, optipng }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "sacad";
+  version = "2.4.0";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-KLVkyiXjpqskM67W9uPl9aPKc3pYMu0nAfwI0OpOniE=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    aiohttp
+    appdirs
+    bitarray
+    cssselect
+    fake-useragent
+    lxml
+    mutagen
+    pillow
+    tqdm
+    unidecode
+    web-cache
+    jpegoptim
+    optipng
+  ];
+
+  # tests require internet connection
+  doCheck = false;
+
+  pythonImportsCheck = [ "sacad" ];
+
+  meta = with lib; {
+    description = "Smart Automatic Cover Art Downloader";
+    homepage = "https://github.com/desbma/sacad";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ fortuneteller2k ];
+  };
+}
diff --git a/pkgs/tools/misc/sam-ba/default.nix b/pkgs/tools/misc/sam-ba/default.nix
index 67c751a5779..60853d2cf7e 100644
--- a/pkgs/tools/misc/sam-ba/default.nix
+++ b/pkgs/tools/misc/sam-ba/default.nix
@@ -1,10 +1,10 @@
-{ stdenv, fetchzip, libX11, libXScrnSaver, libXext, libXft, libXrender
+{ lib, stdenv, fetchzip, libX11, libXScrnSaver, libXext, libXft, libXrender
 , freetype, zlib, fontconfig
 }:
 
 let
   maybe64 = if stdenv.isx86_64 then "_64" else "";
-  libPath = stdenv.lib.makeLibraryPath
+  libPath = lib.makeLibraryPath
     [ stdenv.cc.cc.lib libX11 libXScrnSaver libXext libXft libXrender freetype
       zlib fontconfig
     ];
@@ -36,7 +36,7 @@ stdenv.mkDerivation rec {
   # Do our own thing
   dontPatchELF = true;
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/misc/savepagenow/default.nix b/pkgs/tools/misc/savepagenow/default.nix
new file mode 100644
index 00000000000..d9166d07b74
--- /dev/null
+++ b/pkgs/tools/misc/savepagenow/default.nix
@@ -0,0 +1,25 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "savepagenow";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "pastpages";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1lz6rc47cds9rb35jdf8n13gr61wdkh5jqzx4skikm1yrqkwjyhm";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ click requests ];
+
+  # requires network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A simple Python wrapper for archive.org's \"Save Page Now\" capturing service";
+    homepage = "https://github.com/pastpages/savepagenow";
+    license = licenses.mit;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/pkgs/tools/misc/scanmem/default.nix b/pkgs/tools/misc/scanmem/default.nix
index 58350f7a638..bd6b8dbb1d1 100644
--- a/pkgs/tools/misc/scanmem/default.nix
+++ b/pkgs/tools/misc/scanmem/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, autoconf, automake, intltool, libtool, fetchFromGitHub, readline }:
+{ lib, stdenv, autoconf, automake, intltool, libtool, fetchFromGitHub, readline }:
 
 stdenv.mkDerivation rec {
   version = "0.17";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
   preConfigure = ''
     ./autogen.sh
   '';
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/scanmem/scanmem";
     description = "Memory scanner for finding and poking addresses in executing processes";
     maintainers = [ maintainers.chattered ];
diff --git a/pkgs/tools/misc/screen/default.nix b/pkgs/tools/misc/screen/default.nix
index 9bc219289c4..70a95957855 100644
--- a/pkgs/tools/misc/screen/default.nix
+++ b/pkgs/tools/misc/screen/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, ncurses, utmp, pam ? null }:
+{ lib, stdenv, fetchurl, fetchpatch, ncurses, utmp, pam ? null }:
 
 stdenv.mkDerivation rec {
   pname = "screen";
@@ -16,25 +16,32 @@ stdenv.mkDerivation rec {
     "--enable-colors256"
   ];
 
-  patches = stdenv.lib.optional stdenv.hostPlatform.isMusl
+  patches = [
+    (fetchpatch {
+      # Fixes denial of services in encoding.c, remove > 4.8.0
+      name = "CVE-2021-26937.patch";
+      url = "https://salsa.debian.org/debian/screen/-/raw/master/debian/patches/99_CVE-2021-26937.patch";
+      sha256 = "05f3p1c7s83nccwkhmavjzgaysxnvq41c7jffs31ra65kcpabqy0";
+    })
+  ] ++ 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)
+  postPatch = 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;
+  buildInputs = [ ncurses ] ++ lib.optional stdenv.isLinux pam
+                            ++ lib.optional stdenv.isDarwin utmp;
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.gnu.org/software/screen/";
     description = "A window manager that multiplexes a physical terminal";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/misc/sd-mux-ctrl/default.nix b/pkgs/tools/misc/sd-mux-ctrl/default.nix
new file mode 100644
index 00000000000..d42909a5c77
--- /dev/null
+++ b/pkgs/tools/misc/sd-mux-ctrl/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchgit, cmake, pkg-config, libftdi1, popt}:
+
+stdenv.mkDerivation rec {
+  pname = "sd-mux-ctrl-unstable";
+  version = "2020-02-17";
+
+  src = fetchgit {
+    url = "https://git.tizen.org/cgit/tools/testlab/sd-mux";
+    rev = "9dd189d973da64e033a0c5c2adb3d94b23153d94";
+    sha256 = "0fxl8m1zkkyxkc2zi8930m0njfgnd04a22acny6vljnzag2shjvg";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ libftdi1 popt ];
+
+  postInstall = ''
+    install -D -m 644 ../doc/man/sd-mux-ctrl.1 $out/share/man/man1/sd-mux-ctrl.1
+  '';
+
+  meta = with lib; {
+    description = "Tool for controlling multiple sd-mux devices";
+    homepage = "https://wiki.tizen.org/SD_MUX";
+    license = licenses.asl20;
+    maintainers =  with maintainers; [ sarcasticadmin ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/sdate/default.nix b/pkgs/tools/misc/sdate/default.nix
index 06b5360086c..69c9d726713 100644
--- a/pkgs/tools/misc/sdate/default.nix
+++ b/pkgs/tools/misc/sdate/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, autoreconfHook }:
+{ lib, stdenv, fetchurl, autoreconfHook }:
 stdenv.mkDerivation rec {
   pname = "sdate";
   version = "0.7";
@@ -12,8 +12,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ edef ];
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/sdl-jstest/default.nix b/pkgs/tools/misc/sdl-jstest/default.nix
index bb1bf6b0a37..c299a140b07 100644
--- a/pkgs/tools/misc/sdl-jstest/default.nix
+++ b/pkgs/tools/misc/sdl-jstest/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, cmake, pkgconfig, SDL, SDL2, ncurses, docbook_xsl, git }:
+{ lib, stdenv, fetchgit, cmake, pkg-config, SDL, SDL2, ncurses, docbook_xsl, git }:
 
 stdenv.mkDerivation {
   pname = "sdl-jstest";
@@ -12,9 +12,9 @@ stdenv.mkDerivation {
   };
 
   buildInputs = [ SDL SDL2 ncurses ];
-  nativeBuildInputs = [ cmake pkgconfig docbook_xsl git ];
-  
-  meta = with stdenv.lib; {
+  nativeBuildInputs = [ cmake pkg-config docbook_xsl git ];
+
+  meta = with lib; {
     homepage = "https://github.com/Grumbel/sdl-jstest";
     description = "Simple SDL joystick test application for the console";
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/semiphemeral/default.nix b/pkgs/tools/misc/semiphemeral/default.nix
new file mode 100644
index 00000000000..67f0f62e877
--- /dev/null
+++ b/pkgs/tools/misc/semiphemeral/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "semiphemeral";
+  version = "0.6";
+
+  src = python3.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "c90d73b14c826f262b1339d1f5926c5abc6431181090ea87177af821c0866fb7";
+  };
+
+  doCheck = false; # upstream has no tests
+
+  pythonImportsCheck = [ "semiphemeral" ];
+
+  propagatedBuildInputs = with python3.pkgs; [ click sqlalchemy flask tweepy colorama ];
+
+  meta = with lib; {
+    description = "Automatically delete your old tweets, except for the ones you want to keep";
+    homepage = "https://github.com/micahflee/semiphemeral";
+    license = licenses.mit;
+    maintainers = with maintainers; [ amanjeev ];
+  };
+}
diff --git a/pkgs/tools/misc/sfeed/default.nix b/pkgs/tools/misc/sfeed/default.nix
new file mode 100644
index 00000000000..93ef69ea2ea
--- /dev/null
+++ b/pkgs/tools/misc/sfeed/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, fetchgit }:
+
+stdenv.mkDerivation rec {
+  pname = "sfeed";
+  version = "0.9.21";
+
+  src = fetchgit {
+    url = "git://git.codemadness.org/sfeed";
+    rev = version;
+    sha256 = "010wasp6hcnwbf0d3gaxmjpkvr85zyv2xxz2pnkwxyk2bbr1h6q8";
+  };
+
+  installPhase = ''
+    mkdir $out
+    make install PREFIX=$out
+  '';
+
+  meta = with lib; {
+    homepage = "https://codemadness.org/sfeed-simple-feed-parser.html";
+    description = "A RSS and Atom parser (and some format programs)";
+    longDescription = ''
+      It converts RSS or Atom feeds from XML to a TAB-separated file. There are
+      formatting programs included to convert this TAB-separated format to
+      various other formats. There are also some programs and scripts included
+      to import and export OPML and to fetch, filter, merge and order feed
+      items.
+    '';
+    license = licenses.isc;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/misc/shadowenv/default.nix b/pkgs/tools/misc/shadowenv/default.nix
index 9becd52273e..1f2d48b86ec 100644
--- a/pkgs/tools/misc/shadowenv/default.nix
+++ b/pkgs/tools/misc/shadowenv/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform, installShellFiles, Security }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, installShellFiles, Security }:
 
 rustPlatform.buildRustPackage rec {
   pname = "shadowenv";
@@ -11,11 +11,11 @@ rustPlatform.buildRustPackage rec {
     sha256 = "1h8hfyxxl4bpx8azzxj0snmzccn6xjd9vc2iyp8i2ar7aiyhf5yd";
   };
 
-  cargoSha256 = "1bjkwn57vm3in8lajhm7p9fjwyqhmkrb3fyq1k7lqjvrrh9jysb2";
+  cargoSha256 = "1ixjkb82863z160spylza2a5hk82x0c4wjjnzgakbzgrwv29pai3";
 
   nativeBuildInputs = [ installShellFiles ];
 
-  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ Security ];
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
 
   postInstall = ''
     installManPage man/man1/shadowenv.1
@@ -25,7 +25,7 @@ rustPlatform.buildRustPackage rec {
     installShellCompletion --zsh sh/completions/_shadowenv
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://shopify.github.io/shadowenv/";
     description = "reversible directory-local environment variable manipulations";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/shallot/default.nix b/pkgs/tools/misc/shallot/default.nix
index e8ab6168541..c3c88a6baf0 100644
--- a/pkgs/tools/misc/shallot/default.nix
+++ b/pkgs/tools/misc/shallot/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fetchpatch
+{ lib, stdenv, fetchFromGitHub, fetchpatch
 , openssl
 }:
 
@@ -36,10 +36,10 @@ stdenv.mkDerivation rec {
   '';
 
   meta = {
-    description = "Shallot allows you to create customized .onion addresses for your hidden service";
+    description = "Allows you to create customized .onion addresses for your hidden service";
 
-    license = stdenv.lib.licenses.mit;
+    license = lib.licenses.mit;
     homepage = "https://github.com/katmagic/Shallot";
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/shell-hist/default.nix b/pkgs/tools/misc/shell-hist/default.nix
index c4c496b978f..48e8667cc7e 100644
--- a/pkgs/tools/misc/shell-hist/default.nix
+++ b/pkgs/tools/misc/shell-hist/default.nix
@@ -11,7 +11,7 @@ rustPlatform.buildRustPackage {
     sha256 = "0kc128xnnp1d56if70vfv0w3qnwhljhbnvzwwb7hfm3x2m0vqrqf";
   };
 
-  cargoSha256 = "0mfgax937na351qvi5n6s1ql9136djqiydzyfyax4684sp3kp613";
+  cargoSha256 = "1b2cfs03vlaz7jnr67ilgjfi7cm59izpcdi6pyvbzv8s46z2dysp";
 
   meta = with lib; {
     description = "Inspect your shell history";
diff --git a/pkgs/tools/misc/shelldap/default.nix b/pkgs/tools/misc/shelldap/default.nix
index bfa8ea16ed3..c782b129200 100644
--- a/pkgs/tools/misc/shelldap/default.nix
+++ b/pkgs/tools/misc/shelldap/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perlPackages }:
+{ lib, fetchurl, perlPackages }:
 perlPackages.buildPerlPackage rec {
   pname = "shelldap";
   version = "1.4.0";
@@ -6,7 +6,7 @@ perlPackages.buildPerlPackage rec {
     url = "https://bitbucket.org/mahlon/shelldap/downloads/shelldap-${version}.tar.gz";
     sha256 = "07gkvvxcgw3pgkfy8p9mmidakciaq1rsq5zhmdqd8zcwgqkrr24i";
   };
-  buildInputs = with perlPackages; [ perl YAMLSyck NetLDAP AlgorithmDiff IOSocketSSL AuthenSASL TermReadLineGnu TermShell ];
+  buildInputs = with perlPackages; [ perl YAMLSyck perlldap AlgorithmDiff IOSocketSSL AuthenSASL TermReadLineGnu TermShell ];
   prePatch = ''
     touch Makefile.PL
   '';
@@ -16,7 +16,7 @@ perlPackages.buildPerlPackage rec {
     runHook preInstall
   '';
   outputs = [ "out" ];
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/misc/shunit2/default.nix b/pkgs/tools/misc/shunit2/default.nix
index 186235be442..1895acacac2 100644
--- a/pkgs/tools/misc/shunit2/default.nix
+++ b/pkgs/tools/misc/shunit2/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation {
   pname = "shunit2";
@@ -22,9 +22,9 @@ stdenv.mkDerivation {
     $out/bin/shunit2
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/kward/shunit2";
-    description = "A xUnit based unit test framework for Bourne based shell scripts.";
+    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/pkgs/tools/misc/silicon/default.nix b/pkgs/tools/misc/silicon/default.nix
index 99de1c3d175..40586f6be65 100644
--- a/pkgs/tools/misc/silicon/default.nix
+++ b/pkgs/tools/misc/silicon/default.nix
@@ -2,42 +2,44 @@
 , stdenv
 , rustPlatform
 , fetchFromGitHub
-, pkgconfig
+, pkg-config
 , cmake
 , llvmPackages
 , expat
 , freetype
 , libxcb
 , python3
+, libiconv
 , AppKit
 , CoreText
 , Security
+, fira-code
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "silicon";
-  version = "0.3.2";
+  version = "0.4.2";
 
   src = fetchFromGitHub {
     owner = "Aloxaf";
     repo = "silicon";
     rev = "v${version}";
-    sha256 = "1ga632c86l30n6wjj8rc3gz43v93mb7kcl9f8vhig16ycgiw8v09";
+    sha256 = "sha256-k+p8AEEL1BBJTmPc58QoIk7EOzu8QKdG00RQ58EN3bg=";
   };
 
-  cargoSha256 = "0bgm29v9vmd1xcdazg1psrx6hb1z3zfzr1c4iy8j1r28csbmm6kq";
+  cargoSha256 = "sha256-vpegobS7lpRkt/oZePW9WggYeg0JXDte8fQP/bf7oAI=";
 
-  buildInputs = [ llvmPackages.libclang expat freetype ]
+  buildInputs = [ llvmPackages.libclang expat freetype fira-code ]
     ++ lib.optionals stdenv.isLinux [ libxcb ]
-    ++ lib.optionals stdenv.isDarwin [ AppKit CoreText Security ];
+    ++ lib.optionals stdenv.isDarwin [ libiconv AppKit CoreText Security ];
 
-  nativeBuildInputs = [ cmake pkgconfig ]
+  nativeBuildInputs = [ cmake pkg-config ]
     ++ lib.optionals stdenv.isLinux [ python3 ];
 
-  LIBCLANG_PATH = "${llvmPackages.libclang}/lib";
+  LIBCLANG_PATH = "${llvmPackages.libclang.lib}/lib";
 
   meta = with lib; {
-    description = "Create beautiful image of your source code.";
+    description = "Create beautiful image of your source code";
     homepage = "https://github.com/Aloxaf/silicon";
     license = with licenses; [ mit /* or */ asl20 ];
     maintainers = with maintainers; [ evanjs ];
diff --git a/pkgs/tools/misc/sixpair/default.nix b/pkgs/tools/misc/sixpair/default.nix
index f738ed71ec7..52c61d917b1 100644
--- a/pkgs/tools/misc/sixpair/default.nix
+++ b/pkgs/tools/misc/sixpair/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libusb-compat-0_1 }:
+{ lib, stdenv, fetchurl, libusb-compat-0_1 }:
 stdenv.mkDerivation {
   name = "sixpair-2007-04-18";
 
@@ -31,8 +31,8 @@ stdenv.mkDerivation {
       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;
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.tomsmeets ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/skim/default.nix b/pkgs/tools/misc/skim/default.nix
index e89cf366136..63931914e94 100644
--- a/pkgs/tools/misc/skim/default.nix
+++ b/pkgs/tools/misc/skim/default.nix
@@ -1,19 +1,17 @@
-{ stdenv, fetchFromGitHub, rustPlatform }:
+{ lib, stdenv, fetchCrate, rustPlatform }:
 
 rustPlatform.buildRustPackage rec {
   pname = "skim";
-  version = "0.8.2";
+  version = "0.9.4";
 
-  src = fetchFromGitHub {
-    owner = "lotabout";
-    repo = pname;
-    rev = "v${version}";
-    sha256 = "0paxrf03rqzahbpr4gnsj62vl09vcxvw248n9wzhjq14dqlwcr9w";
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "0yvjzmz2vqc63l8911jflqf5aww7wxsav2yal5wg9ci9hzq6dl7j";
   };
 
   outputs = [ "out" "vim" ];
 
-  cargoSha256 = "0rxxdad60fpwkb4wx5407ihd89wqpf2ldcnp7nsx17xh4brp1l9r";
+  cargoSha256 = "1jk2vcm2z6r1xd6md98jzpcy7kdwp5p2fzxvvaz9qscyfnx28x17";
 
   postPatch = ''
     sed -i -e "s|expand('<sfile>:h:h')|'$out'|" plugin/skim.vim
@@ -34,7 +32,7 @@ rustPlatform.buildRustPackage rec {
     chmod +x $out/bin/sk-share
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Command-line fuzzy finder written in Rust";
     homepage = "https://github.com/lotabout/skim";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/sl/default.nix b/pkgs/tools/misc/sl/default.nix
index 902617665d8..dc55a8e783b 100644
--- a/pkgs/tools/misc/sl/default.nix
+++ b/pkgs/tools/misc/sl/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, ncurses }:
+{ lib, stdenv, fetchFromGitHub, ncurses }:
 
 stdenv.mkDerivation rec {
   pname = "sl";
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 {
diff --git a/pkgs/tools/misc/slop/default.nix b/pkgs/tools/misc/slop/default.nix
index 36f40dca6cb..a73dd8d3cbe 100644
--- a/pkgs/tools/misc/slop/default.nix
+++ b/pkgs/tools/misc/slop/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config
 , glew, glm, libGLU, libGL, libX11, libXext, libXrender, icu
 , cppcheck
 }:
@@ -14,17 +14,17 @@ stdenv.mkDerivation rec {
     sha256 = "1k8xxb4rj2fylr4vj16yvsf73cyywliz9cy78pl4ibmi03jhg837";
   };
 
-  nativeBuildInputs = [ cmake pkgconfig ];
+  nativeBuildInputs = [ cmake pkg-config ];
   buildInputs = [ glew glm libGLU libGL libX11 libXext libXrender icu ]
-                ++ stdenv.lib.optional doCheck cppcheck;
+                ++ lib.optional doCheck cppcheck;
 
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl3Plus;
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/tools/misc/slsnif/default.nix b/pkgs/tools/misc/slsnif/default.nix
index 8078ee51eb2..7f6f9fa40c2 100644
--- a/pkgs/tools/misc/slsnif/default.nix
+++ b/pkgs/tools/misc/slsnif/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation {
   name = "slsnif-0.4.4";
@@ -8,10 +8,10 @@ stdenv.mkDerivation {
     sha256 = "0gn8c5hj8m3sywpwdgn6w5xl4rzsvg0z7d2w8dxi6p152j5b0pii";
   };
 
-  meta = { 
+  meta = {
     description = "Serial line sniffer";
     homepage = "http://slsnif.sourceforge.net/";
-    license = stdenv.lib.licenses.gpl2;
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/smc/default.nix b/pkgs/tools/misc/smc/default.nix
index 87bda5d78b4..5b0342621e8 100644
--- a/pkgs/tools/misc/smc/default.nix
+++ b/pkgs/tools/misc/smc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, jre, runtimeShell }:
+{ lib, stdenv, fetchurl, jre, runtimeShell }:
 
 stdenv.mkDerivation {
   name = "smc-6.6.3";
@@ -28,7 +28,7 @@ stdenv.mkDerivation {
     chmod a+x "$out/bin/smc"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Generate state machine code from text input (state diagram)";
     longDescription = ''
       SMC (State Machine Compiler) takes a text input file describing states,
diff --git a/pkgs/tools/misc/smenu/default.nix b/pkgs/tools/misc/smenu/default.nix
index 4d24a1542fa..1d1ed78b2fa 100644
--- a/pkgs/tools/misc/smenu/default.nix
+++ b/pkgs/tools/misc/smenu/default.nix
@@ -1,29 +1,28 @@
-{ stdenv, fetchFromGitHub, ncurses }:
+{ lib, stdenv, fetchFromGitHub, ncurses }:
 
 stdenv.mkDerivation rec {
-  version = "0.9.15";
+  version = "0.9.17";
   pname = "smenu";
 
   src = fetchFromGitHub {
-    owner  = "p-gen";
-    repo   = "smenu";
-    rev    = "v${version}";
-    sha256 = "0s9qhg6dln33x8r2g8igvgkyrv8g1z26wf8gcnqp3kbp6fw12izi";
+    owner = "p-gen";
+    repo = "smenu";
+    rev = "v${version}";
+    sha256 = "1p8y1fgrfb7jxmv5ycvvnqaz7ghdi50paisgzk71169fqwp1crfa";
   };
 
   buildInputs = [ ncurses ];
 
-  meta = with stdenv.lib; {
-    homepage        = "https://github.com/p-gen/smenu";
-    description     = "Terminal selection utility";
+  meta = with 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;
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ matthiasbeyer SuperSandro2000 ];
+    platforms = platforms.unix;
   };
 }
-
diff --git a/pkgs/tools/misc/snapper/default.nix b/pkgs/tools/misc/snapper/default.nix
index ab4aad48556..8eeee269b07 100644
--- a/pkgs/tools/misc/snapper/default.nix
+++ b/pkgs/tools/misc/snapper/default.nix
@@ -1,38 +1,31 @@
-{ stdenv, fetchFromGitHub
-, autoreconfHook, pkgconfig, docbook_xsl, libxslt, docbook_xml_dtd_45
+{ lib, stdenv, fetchFromGitHub
+, autoreconfHook, pkg-config, docbook_xsl, libxslt, docbook_xml_dtd_45
 , acl, attr, boost, btrfs-progs, dbus, diffutils, e2fsprogs, libxml2
-, lvm2, pam, python, utillinux, fetchpatch, json_c, nixosTests }:
+, lvm2, pam, python, util-linux, json_c, nixosTests
+, ncurses }:
 
 stdenv.mkDerivation rec {
   pname = "snapper";
-  version = "0.8.12";
+  version = "0.9.0";
 
   src = fetchFromGitHub {
     owner = "openSUSE";
     repo = "snapper";
     rev = "v${version}";
-    sha256 = "0vkzncgyf1l2wcr5qd615qbd0hmclfrblg38mx52m707z3wyv88v";
+    sha256 = "1gx3ichbkdqlzl7w187vc3xpmr9prmnp7as0h6ympgigradj5c7g";
   };
 
   nativeBuildInputs = [
-    autoreconfHook pkgconfig
+    autoreconfHook pkg-config
     docbook_xsl libxslt docbook_xml_dtd_45
   ];
   buildInputs = [
     acl attr boost btrfs-progs dbus diffutils e2fsprogs libxml2
-    lvm2 pam python utillinux json_c
+    lvm2 pam python util-linux json_c ncurses
   ];
 
   passthru.tests.snapper = nixosTests.snapper;
 
-  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
@@ -65,10 +58,10 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tool for Linux filesystem snapshot management";
     homepage = "http://snapper.io";
-    license = licenses.gpl2;
+    license = licenses.gpl2Only;
     platforms = platforms.linux;
     maintainers = with maintainers; [ tstrobel markuskowa ];
   };
diff --git a/pkgs/tools/misc/snore/default.nix b/pkgs/tools/misc/snore/default.nix
index f6f177811b0..5efeafcd26f 100644
--- a/pkgs/tools/misc/snore/default.nix
+++ b/pkgs/tools/misc/snore/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   version = "0.1";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=${placeholder "out"}" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "sleep with feedback";
     homepage = "https://github.com/clamiax/snore";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/somafm-cli/default.nix b/pkgs/tools/misc/somafm-cli/default.nix
new file mode 100644
index 00000000000..abead39d348
--- /dev/null
+++ b/pkgs/tools/misc/somafm-cli/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv
+, fetchFromGitHub
+, makeWrapper
+, curl
+, jq
+, mpv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "somafm-cli";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "rockymadden";
+    repo = "somafm-cli";
+    rev = "v${version}";
+    sha256 = "1h5p9qsczgfr450sklh2vkllcpzb7nicbs8ciyvkavh3d7hds0yy";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -m0755 -D src/somafm $out/bin/somafm
+    wrapProgram $out/bin/somafm --prefix PATH ":" "${lib.makeBinPath [ curl jq mpv ]}";
+  '';
+
+  meta = with lib; {
+    description = "Listen to SomaFM in your terminal via pure bash";
+    homepage = "https://github.com/rockymadden/somafm-cli";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/pkgs/tools/misc/spigot/default.nix b/pkgs/tools/misc/spigot/default.nix
index fbed27a2447..a088705036d 100644
--- a/pkgs/tools/misc/spigot/default.nix
+++ b/pkgs/tools/misc/spigot/default.nix
@@ -11,11 +11,11 @@
 
 stdenv.mkDerivation rec {
   pname = "spigot";
-  version = "20200101";
+  version = "20200901";
   src = fetchgit {
     url = "https://git.tartarus.org/simon/spigot.git";
-    rev = "b1b0b202b3523b72f0638fb31fd49c47f4abb39c";
-    sha256 = "0lh5v42aia1hvhsqzs515q0anrjc6c2s9bjklfaap5gz0cg59wbv";
+    rev = "9910e5bdc203bae6b7bbe1ed4a93f13755c1cae";
+    sha256 = "1az6v9gk0g2k197lr288nmr9jv20bvgc508vn9ic3v7mav7hf5bf";
   };
 
   nativeBuildInputs = [ autoreconfHook halibut perl ];
@@ -29,8 +29,8 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     description = "A command-line exact real calculator";
     homepage = "https://www.chiark.greenend.org.uk/~sgtatham/spigot/";
-    license = stdenv.lib.licenses.mit;
-    platforms = stdenv.lib.platforms.all;
+    license = lib.licenses.mit;
+    platforms = lib.platforms.all;
     maintainers = with maintainers; [ mcbeth ];
   };
 }
diff --git a/pkgs/tools/misc/sta/default.nix b/pkgs/tools/misc/sta/default.nix
index aa27ddf0838..809287edcf6 100644
--- a/pkgs/tools/misc/sta/default.nix
+++ b/pkgs/tools/misc/sta/default.nix
@@ -1,16 +1,21 @@
-{ stdenv, lib, fetchFromGitHub, autoreconfHook }:
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoreconfHook
+}:
+
 stdenv.mkDerivation {
   pname = "sta";
-  version = "unstable-2016-01-25";
+  version = "unstable-2020-05-10";
 
   src = fetchFromGitHub {
     owner = "simonccarter";
     repo = "sta";
-    rev = "2aa2a6035dde88b24978b875e4c45e0e296f77ed";
-    sha256 = "05804f106nb89yvdd0csvpd5skwvnr9x4qr3maqzaw0qr055mrsk";
+    rev = "566e3a77b103aa27a5f77ada8e068edf700f26ef";
+    sha256 = "1v20di90ckl405rj5pn6lxlpxh2m2b3y9h2snjvk0k9sihk7w7d5";
   };
 
-  buildInputs = [ autoreconfHook ];
+  nativeBuildInputs = [ autoreconfHook ];
 
   meta = with lib; {
     description = "Simple statistics from the command line interface (CLI), fast";
diff --git a/pkgs/tools/misc/starship/default.nix b/pkgs/tools/misc/starship/default.nix
index a170eef35fb..052e6198d4f 100644
--- a/pkgs/tools/misc/starship/default.nix
+++ b/pkgs/tools/misc/starship/default.nix
@@ -1,49 +1,47 @@
-{ stdenv, fetchFromGitHub, rustPlatform, pkg-config, openssl, installShellFiles
-, libiconv, Security }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, installShellFiles
+, libiconv
+, Security
+}:
 
 rustPlatform.buildRustPackage rec {
   pname = "starship";
-  version = "0.44.0";
+  version = "0.56.0";
 
   src = fetchFromGitHub {
     owner = "starship";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1pxrg5sfqqkvqww3fabq64j1fg03v5fj5yvm2xg2qa5n2f2qwnhi";
+    sha256 = "0wcldggdavmxajq6dkksdacs5f4729yvxvqiyb9vgalv4akik4yj";
   };
 
-  nativeBuildInputs = [ installShellFiles ] ++ stdenv.lib.optionals stdenv.isLinux [ pkg-config ];
+  nativeBuildInputs = [ installShellFiles ] ++ lib.optionals stdenv.isLinux [ pkg-config ];
 
-  buildInputs = stdenv.lib.optionals stdenv.isLinux [ openssl ]
-    ++ stdenv.lib.optionals stdenv.isDarwin [ libiconv Security ];
-
-  postPatch = ''
-    substituteInPlace src/utils.rs \
-      --replace "/bin/echo" "echo"
-  '';
+  buildInputs = lib.optionals stdenv.isLinux [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ libiconv Security ];
 
   postInstall = ''
     for shell in bash fish zsh; do
-      $out/bin/starship completions $shell > starship.$shell
+      STARSHIP_CACHE=$TMPDIR $out/bin/starship completions $shell > starship.$shell
       installShellCompletion starship.$shell
     done
   '';
 
-  cargoSha256 = "1b5gsw7jpiqjc7kbwf2kp6h6ks7jcgygrwzvn2akz86z40sskyg3";
+  cargoSha256 = "1ligh5mwids7crf2qh657sdij9fcw7pb3w7vqskpvkyk25h2z6r9";
 
   preCheck = ''
-    substituteInPlace tests/testsuite/common.rs \
-      --replace "./target/debug/starship" "./$releaseDir/starship"
-    substituteInPlace tests/testsuite/python.rs \
-      --replace "#[test]" "#[test] #[ignore]"
+    HOME=$TMPDIR
   '';
 
-  checkFlagsArray = [ "--skip=directory::home_directory" "--skip=directory::directory_in_root" ];
-
-  meta = with stdenv.lib; {
+  meta = with 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 Frostman marsam ];
+    maintainers = with maintainers; [ bbigras davidtwco Br1ght0ne Frostman marsam ];
   };
 }
diff --git a/pkgs/tools/misc/staruml/default.nix b/pkgs/tools/misc/staruml/default.nix
index a1e6f57ce3d..847e8bb8428 100644
--- a/pkgs/tools/misc/staruml/default.nix
+++ b/pkgs/tools/misc/staruml/default.nix
@@ -1,12 +1,11 @@
-{ stdenv, fetchurl, makeWrapper
+{ stdenv, lib, fetchurl, makeWrapper
 , dpkg, patchelf
-, gtk2, glib, gdk-pixbuf, alsaLib, nss, nspr, GConf, cups, libgcrypt, dbus, systemd
+, gtk2, glib, gdk-pixbuf, alsa-lib, 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 ];
+    [ glib gtk2 gdk-pixbuf alsa-lib nss nspr GConf cups libgcrypt dbus libXdamage expat ];
 in
 stdenv.mkDerivation rec {
   version = "2.8.1";
@@ -35,7 +34,7 @@ stdenv.mkDerivation rec {
 
     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
+    ln -s ${lib.getLib systemd}/lib/libudev.so.1 $out/lib/libudev.so.0
 
     for binary in StarUML Brackets-node; do
       ${patchelf}/bin/patchelf \
@@ -46,9 +45,9 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A sophisticated software modeler";
-    homepage = "http://staruml.io/";
+    homepage = "https://staruml.io/";
     license = licenses.unfree;
     platforms = [ "i686-linux" "x86_64-linux" ];
   };
diff --git a/pkgs/tools/misc/statserial/default.nix b/pkgs/tools/misc/statserial/default.nix
index 66ae899b9c5..1ca0771914b 100644
--- a/pkgs/tools/misc/statserial/default.nix
+++ b/pkgs/tools/misc/statserial/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, ncurses, glibc }:
+{ lib, stdenv, fetchurl, ncurses, glibc }:
 
 stdenv.mkDerivation rec {
   pname = "statserial";
@@ -27,9 +27,9 @@ stdenv.mkDerivation rec {
   cp statserial.1 $out/share/man/man1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://sites.google.com/site/tranter/software";
-    description = "Display serial port modem status lines.";
+    description = "Display serial port modem status lines";
     license = licenses.gpl2;
 
     longDescription =
diff --git a/pkgs/tools/misc/stow/default.nix b/pkgs/tools/misc/stow/default.nix
index 80741f0543c..05a8fab58d1 100644
--- a/pkgs/tools/misc/stow/default.nix
+++ b/pkgs/tools/misc/stow/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl, perlPackages }:
+{ lib, stdenv, fetchurl, perl, perlPackages }:
 
 let
   pname = "stow";
@@ -29,8 +29,8 @@ stdenv.mkDerivation {
       as .../share, .../man, and so on.
     '';
 
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
     homepage = "https://www.gnu.org/software/stow/";
-    platforms = stdenv.lib.platforms.all;
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/subberthehut/default.nix b/pkgs/tools/misc/subberthehut/default.nix
index e4fa57e30ac..b9698e1e536 100644
--- a/pkgs/tools/misc/subberthehut/default.nix
+++ b/pkgs/tools/misc/subberthehut/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, xmlrpc_c, glib, zlib }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, xmlrpc_c, glib, zlib }:
 stdenv.mkDerivation rec {
   pname = "subberthehut";
   version = "20";
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
     sha256 = "19prdqbk19h0wak318g2jn1mnfm7l7f83a633bh0rhskysmqrsj1";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ xmlrpc_c glib zlib ];
 
   installPhase = ''
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     install -Dm644 bash_completion $out/share/bash-completion/completions/subberthehut
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/mus65/subberthehut";
     description = "An OpenSubtitles.org downloader";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/sutils/default.nix b/pkgs/tools/misc/sutils/default.nix
index c94b8f646a9..f611b7adc07 100644
--- a/pkgs/tools/misc/sutils/default.nix
+++ b/pkgs/tools/misc/sutils/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, alsaLib }:
+{ lib, stdenv, fetchFromGitHub, alsa-lib }:
 
 stdenv.mkDerivation rec {
    version = "0.2";
@@ -13,15 +13,15 @@ stdenv.mkDerivation rec {
 
    hardeningDisable = [ "format" ];
 
-   buildInputs = [ alsaLib ];
+   buildInputs = [ alsa-lib ];
 
    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 ];
+     maintainers = [ lib.maintainers.meisternu ];
      license = "Custom";
-     platforms = stdenv.lib.platforms.linux;
+     platforms = lib.platforms.linux;
    };
 }
diff --git a/pkgs/tools/misc/svtplay-dl/default.nix b/pkgs/tools/misc/svtplay-dl/default.nix
index 8490771ad8d..5514fd4e30f 100644
--- a/pkgs/tools/misc/svtplay-dl/default.nix
+++ b/pkgs/tools/misc/svtplay-dl/default.nix
@@ -1,35 +1,40 @@
-{ stdenv, fetchFromGitHub, makeWrapper, python3Packages, perl, zip
-, gitMinimal }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper, python3Packages, perl, zip
+, gitMinimal, ffmpeg }:
 
 let
 
   inherit (python3Packages)
-    python nose pycrypto pyyaml requests mock python-dateutil setuptools;
+    python pytest nose cryptography pyyaml requests mock python-dateutil setuptools;
 
 in stdenv.mkDerivation rec {
   pname = "svtplay-dl";
-  version = "2.4";
+  version = "4.1";
 
   src = fetchFromGitHub {
     owner = "spaam";
     repo = "svtplay-dl";
     rev = version;
-    sha256 = "146ss7pzh61yw84crk6hzfxkfdnf6bq07m11b6lgsw4hsn71g59w";
+    sha256 = "0b0q4k5aacw2nna5higr6sk5lsdn62lw2l9lccfy5s3m530banni";
   };
 
-  pythonPaths = [ pycrypto pyyaml requests ];
-  buildInputs = [ python perl nose mock makeWrapper python-dateutil setuptools ] ++ pythonPaths;
-  nativeBuildInputs = [ gitMinimal zip ];
+  pythonPaths = [ cryptography pyyaml requests ];
+  buildInputs = [ python perl mock python-dateutil setuptools ] ++ pythonPaths;
+  nativeBuildInputs = [ gitMinimal zip makeWrapper ];
+  checkInputs = [ nose pytest ];
 
   postPatch = ''
     substituteInPlace scripts/run-tests.sh \
       --replace 'PYTHONPATH=lib' 'PYTHONPATH=lib:$PYTHONPATH'
+
+    sed -i '/def test_sublang2\?(/ i\    @unittest.skip("accesses network")' \
+      lib/svtplay_dl/tests/test_postprocess.py
   '';
 
   makeFlags = [ "PREFIX=$(out)" "SYSCONFDIR=$(out)/etc" "PYTHON=${python.interpreter}" ];
 
   postInstall = ''
     wrapProgram "$out/bin/svtplay-dl" \
+      --prefix PATH : "${ffmpeg}" \
       --prefix PYTHONPATH : "$PYTHONPATH"
   '';
 
@@ -38,11 +43,17 @@ in stdenv.mkDerivation rec {
     sh scripts/run-tests.sh -2
   '';
 
-  meta = with stdenv.lib; {
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/svtplay-dl --help > /dev/null
+    runHook postInstallCheck
+  '';
+
+  meta = with 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 ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/swaglyrics/default.nix b/pkgs/tools/misc/swaglyrics/default.nix
new file mode 100644
index 00000000000..a82a71abf96
--- /dev/null
+++ b/pkgs/tools/misc/swaglyrics/default.nix
@@ -0,0 +1,48 @@
+{ lib, python3, fetchFromGitHub, ncurses }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "swaglyrics";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "SwagLyrics";
+    repo = "SwagLyrics-For-Spotify";
+    rev = "v${version}";
+    sha256 = "1dwj9fpyhqqpm2z3imp8hfribkzxya891shh77yg77rc2xghp7mh";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    unidecode colorama beautifulsoup4 flask requests swspotify
+  ];
+
+  preConfigure = ''
+    substituteInPlace setup.py \
+      --replace 'requests>=2.24.0' 'requests~=2.23' \
+      --replace 'beautifulsoup4==4.9.1' 'beautifulsoup4~=4.9' \
+      --replace 'colorama==0.4.3' 'colorama~=0.4' \
+      --replace 'unidecode==1.1.1' 'unidecode~=1.2'
+  '';
+
+  preBuild = "export HOME=$NIX_BUILD_TOP";
+
+  # disable tests which touch network
+  disabledTests = [
+     "test_database_for_unsupported_song"
+     "test_that_lyrics_works_for_unsupported_songs"
+     "test_that_get_lyrics_works"
+     "test_lyrics_are_shown_in_tab"
+     "test_songchanged_can_raise_songplaying"
+  ];
+
+  checkInputs = with python3.pkgs;
+    [ blinker swspotify pytestCheckHook flask mock flask_testing ]
+    ++ [ ncurses ];
+
+  meta = with lib; {
+    description = "Lyrics fetcher for currently playing Spotify song";
+    homepage = "https://github.com/SwagLyrics/SwagLyrics-For-Spotify";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/sweep-visualizer/default.nix b/pkgs/tools/misc/sweep-visualizer/default.nix
index 21e6f49df1f..74f0807a708 100644
--- a/pkgs/tools/misc/sweep-visualizer/default.nix
+++ b/pkgs/tools/misc/sweep-visualizer/default.nix
@@ -1,6 +1,6 @@
 { stdenv, lib, makeWrapper, fetchurl,
-  alsaLib, atk, cairo, cups, dbus, expat, fontconfig, freetype, gdk-pixbuf, glib,
-  gnome2, gtk2-x11, nspr, nss,
+  alsa-lib, atk, cairo, cups, dbus, expat, fontconfig, freetype, gdk-pixbuf, glib,
+  gnome2, pango, gtk2-x11, nspr, nss,
   libX11, libxcb, libXcomposite, libXcursor, libXdamage, libXext, libXfixes,
   libXi, libXrandr, libXrender, libXScrnSaver, libXtst,
   libudev0-shim
@@ -21,7 +21,7 @@
       ar p "$src" data.tar.xz | tar xJ
     '';
 
-    buildPhase = ":";
+    dontBuild = true;
 
     installPhase = ''
       mkdir -p $out/bin $out/share/sweep-visualizer
@@ -32,8 +32,8 @@
 
     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
+        alsa-lib atk cairo cups.lib dbus.lib expat fontconfig.lib freetype
+        gdk-pixbuf glib gnome2.GConf pango gtk2-x11 nspr nss stdenv.cc.cc.lib
         libX11 libxcb libXcomposite libXcursor libXdamage libXext libXfixes
         libXi libXrandr libXrender libXScrnSaver libXtst
       ];
@@ -49,7 +49,7 @@
       wrapProgram "$out/bin/sweep_visualizer" --prefix LD_LIBRARY_PATH : ${runtimeLibs}
     '';
 
-    meta = with stdenv.lib; {
+    meta = with 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;
diff --git a/pkgs/tools/misc/system-config-printer/default.nix b/pkgs/tools/misc/system-config-printer/default.nix
index 8a0c881a277..aafdfe07ff9 100644
--- a/pkgs/tools/misc/system-config-printer/default.nix
+++ b/pkgs/tools/misc/system-config-printer/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fetchpatch, udev, intltool, pkgconfig, glib, xmlto, wrapGAppsHook
+{ lib, stdenv, fetchFromGitHub, fetchpatch, udev, intltool, pkg-config, glib, xmlto, wrapGAppsHook
 , docbook_xml_dtd_412, docbook_xsl
 , libxml2, desktop-file-utils, libusb1, cups, gdk-pixbuf, pango, atk, libnotify
 , gobject-introspection, libsecret, packagekit
@@ -8,13 +8,13 @@
 
 stdenv.mkDerivation rec {
   pname = "system-config-printer";
-  version = "1.5.12";
+  version = "1.5.15";
 
   src = fetchFromGitHub {
     owner = "openPrinting";
     repo = pname;
-    rev = version;
-    sha256 = "1a812jsd9pb02jbz9bq16qj5j6k2kw44g7s1xdqqkg7061rd7mwf";
+    rev = "v${version}";
+    sha256 = "0a3v8fp1dfb5cwwpadc3f6mv608b5yrrqd8ddkmnrngizqwlswsc";
   };
 
   prePatch = ''
@@ -26,17 +26,6 @@ stdenv.mkDerivation rec {
 
   patches = [
     ./detect_serverbindir.patch
-
-    # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=958104
-    # (Fixes will be included in next upstream release.)
-    (fetchpatch {
-      url = "https://github.com/OpenPrinting/system-config-printer/commit/cf9903466c1a2d18a701f3b5e8c7e03483e1244d.patch";
-      sha256 = "03gpav618w50q90m2kdkgwclc7fv17m493fgjd633zfavb5kqr3n";
-    })
-    (fetchpatch {
-      url = "https://github.com/OpenPrinting/system-config-printer/commit/b9289dfe105bdb502f183f0afe7a115ecae5f2af.patch";
-      sha256 = "12w47hy3ly4phh8jcqxvdnd5sgbnbp8dnscjd7d5y2i43kxj7b23";
-    })
   ];
 
   buildInputs = [
@@ -47,7 +36,7 @@ stdenv.mkDerivation rec {
   ];
 
   nativeBuildInputs = [
-    intltool pkgconfig
+    intltool pkg-config
     xmlto libxml2 docbook_xml_dtd_412 docbook_xsl desktop-file-utils
     python3Packages.wrapPython
     wrapGAppsHook autoreconfHook
@@ -55,6 +44,10 @@ stdenv.mkDerivation rec {
 
   pythonPath = with python3Packages; requiredPythonModules [ pycups pycurl dbus-python pygobject3 requests pycairo pysmbc ];
 
+  preConfigure = ''
+    intltoolize --copy --force --automake
+  '';
+
   configureFlags = [
     "--with-udev-rules"
     "--with-udevdir=${placeholder "out"}/etc/udev"
@@ -84,7 +77,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     homepage = "https://github.com/openprinting/system-config-printer";
-    platforms = stdenv.lib.platforms.linux;
-    license = stdenv.lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl2;
   };
 }
diff --git a/pkgs/tools/misc/systrayhelper/default.nix b/pkgs/tools/misc/systrayhelper/default.nix
index a8376356e86..03d8e58f8b0 100644
--- a/pkgs/tools/misc/systrayhelper/default.nix
+++ b/pkgs/tools/misc/systrayhelper/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, pkgconfig, libappindicator-gtk3, buildGoPackage, fetchFromGitHub }:
+{ lib, pkg-config, libappindicator-gtk3, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "systrayhelper";
-  version = "0.0.4";
+  version = "0.0.5";
   rev = "ded1f2ed4d30f6ca2c89a13db0bd3046c6d6d0f9";
 
   goPackagePath = "github.com/ssbc/systrayhelper";
@@ -11,11 +11,9 @@ buildGoPackage rec {
     rev = "v${version}";
     owner = "ssbc";
     repo = "systrayhelper";
-    sha256 = "1iq643brha5q6w2v1hz5l3d1z0pqzqr43gpwih4cnx3m5br0wg2k";
+    sha256 = "0bn3nf43m89qmh8ds5vmv0phgdz32idz1zisr47jmvqm2ky1a45s";
   };
 
-  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=
@@ -26,10 +24,10 @@ buildGoPackage rec {
     -w
   '' ];
 
-  nativeBuildInputs = [ pkgconfig libappindicator-gtk3 ];
+  nativeBuildInputs = [ pkg-config libappindicator-gtk3 ];
   buildInputs = [ libappindicator-gtk3 ];
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/misc/systrayhelper/deps.nix b/pkgs/tools/misc/systrayhelper/deps.nix
deleted file mode 100644
index 93c984337e6..00000000000
--- a/pkgs/tools/misc/systrayhelper/deps.nix
+++ /dev/null
@@ -1,102 +0,0 @@
-# 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/pkgs/tools/misc/t/gemset.nix b/pkgs/tools/misc/t/gemset.nix
index f3627e8d6e9..a61eb81b1da 100644
--- a/pkgs/tools/misc/t/gemset.nix
+++ b/pkgs/tools/misc/t/gemset.nix
@@ -259,4 +259,4 @@
     };
     version = "0.0.7.6";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/misc/t1utils/default.nix b/pkgs/tools/misc/t1utils/default.nix
index fd4ca5f92d5..690fbe8abcb 100644
--- a/pkgs/tools/misc/t1utils/default.nix
+++ b/pkgs/tools/misc/t1utils/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "t1utils-1.41";
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "09rlc837dr69hyiiicha3il37mchsvz84qw8hnvb60lrh9zdsppw";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Collection of simple Type 1 font manipulation programs";
     longDescription = ''
       t1utils is a collection of simple type-1 font manipulation programs.
diff --git a/pkgs/tools/misc/tab-rs/default.nix b/pkgs/tools/misc/tab-rs/default.nix
new file mode 100644
index 00000000000..1782e327f8a
--- /dev/null
+++ b/pkgs/tools/misc/tab-rs/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, IOKit }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tab-rs";
+  version = "0.5.7";
+
+  src = fetchFromGitHub {
+    owner = "austinjones";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1crj0caimin667f9kz34c0sm77892dmqaf1kxryqakqm75az5wfr";
+  };
+
+  cargoSha256 = "0v5vkxr2sncw4r4pwvk0jbk4as7zwwfvjk2cpj9872zp07s35a77";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ IOKit ];
+
+  # many tests are failing
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Intuitive, config-driven terminal multiplexer designed for software & systems engineers";
+    homepage = "https://github.com/austinjones/tab-rs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bbigras ];
+  };
+}
diff --git a/pkgs/tools/misc/tagref/default.nix b/pkgs/tools/misc/tagref/default.nix
new file mode 100644
index 00000000000..f47a5808d06
--- /dev/null
+++ b/pkgs/tools/misc/tagref/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+rustPlatform.buildRustPackage rec {
+  pname = "tagref";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "stepchowfun";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0y1c0v2zjpav1n72pgf3kpqdz6ixp2mjhcvvza4gzfp865c236nc";
+  };
+
+  cargoSha256 = "0ca6maapn2337i78mq97199xjqk87ckw14k8kspc8kx5wnics2hl";
+
+  meta = with lib; {
+    description = "Tagref helps you refer to other locations in your codebase.";
+    homepage = "https://github.com/stepchowfun/tagref";
+    license = licenses.mit;
+    maintainers = [ maintainers.yusdacra ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/td/default.nix b/pkgs/tools/misc/td/default.nix
index f4b120d1bc1..bca5bd601d4 100644
--- a/pkgs/tools/misc/td/default.nix
+++ b/pkgs/tools/misc/td/default.nix
@@ -8,7 +8,7 @@ bundlerApp {
   passthru.updateScript = bundlerUpdateScript "td";
 
   meta = with lib; {
-    description = "CLI to manage data on Treasure Data, the Hadoop-based cloud data warehousing.";
+    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 ];
diff --git a/pkgs/tools/misc/td/gemset.nix b/pkgs/tools/misc/td/gemset.nix
index e4680640ae2..53d9df0502d 100644
--- a/pkgs/tools/misc/td/gemset.nix
+++ b/pkgs/tools/misc/td/gemset.nix
@@ -100,4 +100,4 @@
     };
     version = "0.3";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/misc/tea/default.nix b/pkgs/tools/misc/tea/default.nix
new file mode 100644
index 00000000000..a7af4fec7ba
--- /dev/null
+++ b/pkgs/tools/misc/tea/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitea }:
+
+buildGoModule rec {
+  pname = "tea";
+  version = "0.7.0";
+
+  src = fetchFromGitea {
+    domain = "gitea.com";
+    owner = "gitea";
+    repo = "tea";
+    rev = "v${version}";
+    sha256 = "sha256-Kq+A6YELfBJ04t7pPnX8Ulh4NSMFn3AHggplLD9J8MY=";
+  };
+
+  vendorSha256 = null;
+
+  meta = with lib; {
+    description = "Gitea official CLI client";
+    homepage    = "https://gitea.com/gitea/tea";
+    license     = licenses.mit;
+    maintainers = [ maintainers.j4m3s ];
+  };
+}
diff --git a/pkgs/tools/misc/tealdeer/default.nix b/pkgs/tools/misc/tealdeer/default.nix
index 311f43fdb2a..985f2dccd68 100644
--- a/pkgs/tools/misc/tealdeer/default.nix
+++ b/pkgs/tools/misc/tealdeer/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , rustPlatform
 , fetchFromGitHub
 , pkg-config
@@ -9,16 +9,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "tealdeer";
-  version = "1.3.0";
+  version = "1.4.1";
 
   src = fetchFromGitHub {
     owner = "dbrgn";
     repo = "tealdeer";
     rev = "v${version}";
-    sha256 = "0l16qqkrya22nnm4j3dxyq4gb85i3c07p10s00bpqcvki6n6v6r8";
+    sha256 = "1f37qlw4nxdhlqlqzzb4j11gsv26abk2nk2qhbzj77kp4v2b125x";
   };
 
-  cargoSha256 = "0jvgcf493rmkrh85j0fkf8ffanva80syyxclzkvkrzvvwwj78b5l";
+  cargoSha256 = "1rjnparpcn8rnqy43xl4gg151p1a0zj9sna600hz01r41g1hgccq";
 
   buildInputs = if stdenv.isDarwin then [ Security ] else [ openssl ];
 
@@ -35,7 +35,7 @@ rustPlatform.buildRustPackage rec {
   # and i can't disable just this one
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A very fast implementation of tldr in Rust";
     homepage = "https://github.com/dbrgn/tealdeer";
     maintainers = with maintainers; [ davidak ];
diff --git a/pkgs/tools/misc/teamocil/default.nix b/pkgs/tools/misc/teamocil/default.nix
index b1f6c7cdcab..5218453d15e 100644
--- a/pkgs/tools/misc/teamocil/default.nix
+++ b/pkgs/tools/misc/teamocil/default.nix
@@ -13,7 +13,7 @@ bundlerEnv {
     license         = licenses.mit;
     platforms       = platforms.all;
     maintainers     = with maintainers; [
-      zachcoyle 
+      zachcoyle
       nicknovitski
     ];
   };
diff --git a/pkgs/tools/misc/teamocil/gemset.nix b/pkgs/tools/misc/teamocil/gemset.nix
index f363d62b6d6..2c522b096c8 100644
--- a/pkgs/tools/misc/teamocil/gemset.nix
+++ b/pkgs/tools/misc/teamocil/gemset.nix
@@ -7,4 +7,4 @@
     };
     version = "1.4.2";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/misc/teleconsole/default.nix b/pkgs/tools/misc/teleconsole/default.nix
index 374bf9b54b2..63277c90d47 100644
--- a/pkgs/tools/misc/teleconsole/default.nix
+++ b/pkgs/tools/misc/teleconsole/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, stdenv, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "teleconsole";
@@ -13,12 +13,21 @@ buildGoPackage rec {
     sha256 = "01552422n0bj1iaaw6pvg9l1qr66r69sdsngxbcdjn1xh3mj74sm";
   };
 
-  goDeps = ./deps.nix;
+  srcTeleport = fetchFromGitHub {
+    owner = "gravitational";
+    repo = "teleport";
+    rev = "2cb40abd8ea8fb2915304ea4888b5b9f3e5bc223";
+    sha256 = "1xw3bfnjbj88x465snwwzn4bmpmzmsrq9r0pkj388qwvfrclgnfk";
+  };
+
+  preBuild = ''
+    cp -r ${srcTeleport} ./go/src/github.com/gravitational/teleport
+  '';
 
   CGO_ENABLED = 1;
   buildFlags = [ "-ldflags" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.teleconsole.com/";
     description = "Share your terminal session with people you trust";
     license = licenses.asl20;
diff --git a/pkgs/tools/misc/teleconsole/deps.nix b/pkgs/tools/misc/teleconsole/deps.nix
deleted file mode 100644
index f13529d4b25..00000000000
--- a/pkgs/tools/misc/teleconsole/deps.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-[
-    # 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/pkgs/tools/misc/tensorman/default.nix b/pkgs/tools/misc/tensorman/default.nix
index 85091a41b12..307a472c73f 100644
--- a/pkgs/tools/misc/tensorman/default.nix
+++ b/pkgs/tools/misc/tensorman/default.nix
@@ -1,4 +1,4 @@
-{ pkgconfig, stdenv, rustPlatform, rustc, cargo, docker, openssl, fetchFromGitHub }:
+{ pkg-config, lib, rustPlatform, rustc, cargo, docker, openssl, fetchFromGitHub }:
 
 rustPlatform.buildRustPackage rec {
   pname = "tensorman";
@@ -11,14 +11,14 @@ rustPlatform.buildRustPackage rec {
     sha256 = "0ywb53snvymmwh10hm6whckz7dwmpqa4rxiggd24y178jdfrm2ns";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ openssl ];
-  cargoSha256 = "0vckay4jhg02xg68mvh7ys0yjj0p30m6wsjriqc8k24wjsrhiw9k";
+  cargoSha256 = "1lza3kc43581a09ss82bb5p0r74dy7si2x07cj4cb8dizl60b71v";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Utility for easy management of Tensorflow containers";
     homepage = "https://github.com/pop-os/tensorman/";
-    license = stdenv.lib.licenses.gpl3;
+    license = lib.licenses.gpl3;
     platforms =  [ "x86_64-linux" ];
     maintainers = with maintainers; [ thefenriswolf ];
   };
diff --git a/pkgs/tools/misc/termplay/default.nix b/pkgs/tools/misc/termplay/default.nix
index d60a65214b7..80c6341f025 100644
--- a/pkgs/tools/misc/termplay/default.nix
+++ b/pkgs/tools/misc/termplay/default.nix
@@ -12,7 +12,7 @@ rustPlatform.buildRustPackage rec {
   };
 
   cargoBuildFlags = ["--features" "bin"];
-  cargoSha256 = "0nxm2k8dx6nxyghvpw44wqfd1n65947v2wqxxvy641hin4d7xzma";
+  cargoSha256 = "08ip6x4kink244majlk595yh551c2ap3ry58wly994mh8wf6ifwb";
 
   nativeBuildInputs = [ makeWrapper ];
   buildInputs = [
@@ -32,7 +32,7 @@ rustPlatform.buildRustPackage rec {
     description = "Play an image/video in your terminal";
     homepage = "https://jd91mzm2.github.io/termplay/";
     license = licenses.mit;
-    maintainers = with maintainers; [ jD91mZM2 ];
+    maintainers = with maintainers; [ ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/tewisay/default.nix b/pkgs/tools/misc/tewisay/default.nix
index b63ffb1cd10..3434ac110b3 100644
--- a/pkgs/tools/misc/tewisay/default.nix
+++ b/pkgs/tools/misc/tewisay/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub, makeWrapper }:
+{ lib, buildGoPackage, fetchFromGitHub, makeWrapper }:
 
 buildGoPackage rec {
   pname = "tewisay-unstable";
@@ -29,7 +29,7 @@ buildGoPackage rec {
   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 ];
+    license = lib.licenses.cc0;
+    maintainers = [ lib.maintainers.chiiruno ];
   };
 }
diff --git a/pkgs/tools/misc/texi2mdoc/default.nix b/pkgs/tools/misc/texi2mdoc/default.nix
index 6c090c0b4b3..2b73c4f34db 100644
--- a/pkgs/tools/misc/texi2mdoc/default.nix
+++ b/pkgs/tools/misc/texi2mdoc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "texi2mdoc";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://mdocml.bsd.lv/";
     description = "converter from Texinfo into mdoc";
     license = licenses.isc;
diff --git a/pkgs/tools/misc/tfk8s/default.nix b/pkgs/tools/misc/tfk8s/default.nix
new file mode 100644
index 00000000000..d9c9ad0451b
--- /dev/null
+++ b/pkgs/tools/misc/tfk8s/default.nix
@@ -0,0 +1,50 @@
+{ lib, buildGoModule, fetchFromGitHub, callPackage }:
+
+buildGoModule rec {
+  pname = "tfk8s";
+  version = "0.1.5";
+  tag = "v${version}";
+
+  src = fetchFromGitHub {
+    owner = "jrhouston";
+    repo = "tfk8s";
+    rev = tag;
+    sha256 = "sha256-T0zM2JOmzk8YyS3+De6yGwiwLgyb6Rwy6hT9b44wNxQ=";
+  };
+
+  vendorSha256 = "sha256-eLPmghs05pMMtys97Ja7YGdVMZmMmiaFeMwzaWNxW0I=";
+  runVend = true;
+
+  buildFlagsArray = [
+    "-ldflags="
+    "-s"
+    "-w"
+    "-X main.toolVersion=${tag}"
+    "-X main.builtBy=nixpkgs"
+  ];
+
+  doCheck = true;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/tfk8s --version | grep ${tag} > /dev/null
+  '';
+
+  passthru.tests = {
+    sample1 = callPackage ./tests/sample1 { };
+  };
+
+  meta = with lib; {
+    description = "An utility to convert Kubernetes YAML manifests to Terraform's HCL format";
+    license = licenses.mit;
+    longDescription = ''
+      tfk8s is a tool that makes it easier to work with the Terraform Kubernetes Provider.
+      If you want to copy examples from the Kubernetes documentation or migrate existing YAML manifests and use them with Terraform without having to convert YAML to HCL by hand, this tool is for you.
+      Features:
+      * Convert a YAML file containing multiple manifests.
+      * Strip out server side fields when piping kubectl get $R -o yaml | tfk8s --strip
+    '';
+    homepage = "https://github.com/jrhouston/tfk8s/";
+    maintainers = with maintainers; [ superherointj ];
+  };
+}
diff --git a/pkgs/tools/misc/tfk8s/tests/sample1/default.nix b/pkgs/tools/misc/tfk8s/tests/sample1/default.nix
new file mode 100644
index 00000000000..6b06dbf3234
--- /dev/null
+++ b/pkgs/tools/misc/tfk8s/tests/sample1/default.nix
@@ -0,0 +1,11 @@
+{ runCommandCC, tfk8s }:
+
+runCommandCC "tfk8s-test-sample1" {
+    buildInputs = [
+      tfk8s
+    ];
+    meta.timeout = 60;
+  }
+  ''
+    cmp <(${tfk8s}/bin/tfk8s -f ${./input.yaml}) ${./output.tf} > $out
+  ''
diff --git a/pkgs/tools/misc/tfk8s/tests/sample1/input.yaml b/pkgs/tools/misc/tfk8s/tests/sample1/input.yaml
new file mode 100644
index 00000000000..58ed0eb11d7
--- /dev/null
+++ b/pkgs/tools/misc/tfk8s/tests/sample1/input.yaml
@@ -0,0 +1,7 @@
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: test
+data:
+  TEST: test
diff --git a/pkgs/tools/misc/tfk8s/tests/sample1/output.tf b/pkgs/tools/misc/tfk8s/tests/sample1/output.tf
new file mode 100644
index 00000000000..51d564400b5
--- /dev/null
+++ b/pkgs/tools/misc/tfk8s/tests/sample1/output.tf
@@ -0,0 +1,12 @@
+resource "kubernetes_manifest" "configmap_test" {
+  manifest = {
+    "apiVersion" = "v1"
+    "data" = {
+      "TEST" = "test"
+    }
+    "kind" = "ConfigMap"
+    "metadata" = {
+      "name" = "test"
+    }
+  }
+}
diff --git a/pkgs/tools/misc/thefuck/default.nix b/pkgs/tools/misc/thefuck/default.nix
index b2d31a62911..7ede307a86f 100644
--- a/pkgs/tools/misc/thefuck/default.nix
+++ b/pkgs/tools/misc/thefuck/default.nix
@@ -1,37 +1,27 @@
-{ stdenv, fetchFromGitHub, buildPythonApplication
+{ lib, fetchFromGitHub, buildPythonApplication
 , colorama, decorator, psutil, pyte, six
-, pytest, pytest-mock
+, go, mock, pytestCheckHook, pytest-mock
 }:
 
 buildPythonApplication rec {
   pname = "thefuck";
-  version = "3.30";
+  version = "3.31";
 
   src = fetchFromGitHub {
     owner = "nvbn";
     repo = pname;
     rev = version;
-    sha256 = "0fnf78956pwhb9cgv1jmgypnkma5xzflkivfrkfiadbgin848yfg";
+    sha256 = "sha256-eKKUUJr00sUtT4u91MUgJjyPOXp3NigYVfYUP/sDBhY=";
   };
 
   propagatedBuildInputs = [ colorama decorator psutil pyte six ];
 
-  checkInputs = [ pytest pytest-mock ];
+  checkInputs = [ go mock pytestCheckHook 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; {
+  meta = with lib; {
     homepage = "https://github.com/nvbn/thefuck";
-    description = "Magnificent app which corrects your previous console command.";
+    description = "Magnificent app which corrects your previous console command";
     license = licenses.mit;
-    maintainers = with maintainers; [ ma27 ];
+    maintainers = with maintainers; [ ma27 SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/misc/thin-provisioning-tools/default.nix b/pkgs/tools/misc/thin-provisioning-tools/default.nix
index 0aba67647e0..bff6c9c9688 100644
--- a/pkgs/tools/misc/thin-provisioning-tools/default.nix
+++ b/pkgs/tools/misc/thin-provisioning-tools/default.nix
@@ -1,37 +1,23 @@
-{ stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, expat, libaio, boost }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, expat, libaio, boost }:
 
 stdenv.mkDerivation rec {
   pname = "thin-provisioning-tools";
-  version = "0.7.6";
+  version = "0.9.0";
 
   src = fetchFromGitHub {
     owner = "jthornber";
     repo = "thin-provisioning-tools";
     rev = "v${version}";
-    sha256 = "175mk3krfdmn43cjw378s32hs62gq8fmq549rjmyc651sz6jnj0g";
+    sha256 = "1iwg04rhmdhijmlk5hfl8wvv83115lzb65if6cc1glkkfva8jfjp";
   };
 
   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; {
+  meta = with 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;
diff --git a/pkgs/tools/misc/time/default.nix b/pkgs/tools/misc/time/default.nix
index 89af4f693d3..8707309937b 100644
--- a/pkgs/tools/misc/time/default.nix
+++ b/pkgs/tools/misc/time/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation rec {
   pname = "time";
@@ -26,8 +26,8 @@ stdenv.mkDerivation rec {
       `time' reports unavailable information as zero values.
     '';
 
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
     homepage = "https://www.gnu.org/software/time/";
-    platforms = stdenv.lib.platforms.unix;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/timidity/default.nix b/pkgs/tools/misc/timidity/default.nix
index f33520aee0a..760284140b1 100644
--- a/pkgs/tools/misc/timidity/default.nix
+++ b/pkgs/tools/misc/timidity/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, alsaLib, libjack2, ncurses, pkgconfig }:
+{ lib, stdenv, fetchurl, alsa-lib, libjack2, ncurses, pkg-config }:
 
 stdenv.mkDerivation {
   name = "timidity-2.15.0";
@@ -10,8 +10,8 @@ stdenv.mkDerivation {
 
   patches = [ ./timidity-iA-Oj.patch ];
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ alsaLib libjack2 ncurses ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ alsa-lib libjack2 ncurses ];
 
   configureFlags = [ "--enable-audio=oss,alsa,jack" "--enable-alsaseq" "--with-default-output=alsa" "--enable-ncurses" ];
 
@@ -29,7 +29,7 @@ stdenv.mkDerivation {
     tar --strip-components=1 -xf $instruments -C $out/share/timidity/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://sourceforge.net/projects/timidity/";
     license = licenses.gpl2;
     description = "A software MIDI renderer";
diff --git a/pkgs/tools/misc/tio/default.nix b/pkgs/tools/misc/tio/default.nix
index bab0098ecaa..a25b821c7e3 100644
--- a/pkgs/tools/misc/tio/default.nix
+++ b/pkgs/tools/misc/tio/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchzip, autoreconfHook }:
+{ lib, stdenv, fetchzip, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   pname = "tio";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ autoreconfHook ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Serial console TTY";
     homepage = "https://tio.github.io/";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/misc/tldr/default.nix b/pkgs/tools/misc/tldr/default.nix
index 66d763fd304..dfde5a9113b 100644
--- a/pkgs/tools/misc/tldr/default.nix
+++ b/pkgs/tools/misc/tldr/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, curl, libzip, pkgconfig }:
+{ lib, stdenv, fetchFromGitHub, curl, libzip, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "tldr";
@@ -12,13 +12,13 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ curl libzip ];
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
-  makeFlags = ["CC=cc" "LD=cc" "CFLAGS="];
+  makeFlags = ["CC=${stdenv.cc.targetPrefix}cc" "LD=${stdenv.cc.targetPrefix}cc" "CFLAGS="];
 
   installFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Simplified and community-driven man pages";
     longDescription = ''
       tldr pages gives common use cases for commands, so you don't need to hunt
diff --git a/pkgs/tools/misc/tlp/default.nix b/pkgs/tools/misc/tlp/default.nix
index 5a467dd626d..a615330a4a8 100644
--- a/pkgs/tools/misc/tlp/default.nix
+++ b/pkgs/tools/misc/tlp/default.nix
@@ -16,7 +16,7 @@
 , shellcheck
 , smartmontools
 , systemd
-, utillinux
+, util-linux
 , x86_energy_perf_policy
   # RDW only works with NetworkManager, and thus is optional with default off
 , enableRDW ? false
@@ -86,9 +86,9 @@
         perl
         smartmontools
         systemd
-        utillinux
-        x86_energy_perf_policy
+        util-linux
       ] ++ lib.optional enableRDW networkmanager
+        ++ lib.optional (lib.meta.availableOn stdenv.hostPlatform x86_energy_perf_policy) x86_energy_perf_policy
     );
   in
     ''
diff --git a/pkgs/tools/misc/tmate/default.nix b/pkgs/tools/misc/tmate/default.nix
index 3a125fcdbf7..d43d94cc8ed 100644
--- a/pkgs/tools/misc/tmate/default.nix
+++ b/pkgs/tools/misc/tmate/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, cmake, libtool, pkgconfig
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, cmake, libtool, pkg-config
 , zlib, openssl, libevent, ncurses, ruby, msgpack, libssh }:
 
 stdenv.mkDerivation rec {
@@ -15,10 +15,9 @@ stdenv.mkDerivation rec {
   dontUseCmakeConfigure = true;
 
   buildInputs = [ libtool zlib openssl libevent ncurses ruby msgpack libssh ];
-  nativeBuildInputs = [ autoreconfHook cmake pkgconfig ];
-  enableParallelBuilding = true;
+  nativeBuildInputs = [ autoreconfHook cmake pkg-config ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage    = "https://tmate.io/";
     description = "Instant Terminal Sharing";
     license     = licenses.mit;
diff --git a/pkgs/tools/misc/tmpwatch/default.nix b/pkgs/tools/misc/tmpwatch/default.nix
index ac20cab2842..1ef486fa855 100644
--- a/pkgs/tools/misc/tmpwatch/default.nix
+++ b/pkgs/tools/misc/tmpwatch/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, psmisc }:
+{ lib, stdenv, fetchurl, psmisc }:
 
 stdenv.mkDerivation {
   name = "tmpwatch-2.11";
@@ -10,7 +10,7 @@ stdenv.mkDerivation {
 
   configureFlags = [ "--with-fuser=${psmisc}/bin/fuser" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/misc/tmux-cssh/default.nix b/pkgs/tools/misc/tmux-cssh/default.nix
index c38769f448f..830c365fa40 100644
--- a/pkgs/tools/misc/tmux-cssh/default.nix
+++ b/pkgs/tools/misc/tmux-cssh/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, makeWrapper, tmux }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper, tmux }:
 
 stdenv.mkDerivation {
   name = "tmux-cssh-20151015";
@@ -10,7 +10,7 @@ stdenv.mkDerivation {
     sha256 = "473e27f3b69864b905d1340d97917cd202705c761611eb3aec4c24521f69b52c";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
   installPhase = ''
     mkdir -p $out/bin
@@ -33,9 +33,9 @@ stdenv.mkDerivation {
       like most server do.
       '';
 
-    license = stdenv.lib.licenses.asl20;
+    license = lib.licenses.asl20;
 
-    platforms = stdenv.lib.platforms.unix;
-    maintainers = with stdenv.lib.maintainers; [ zimbatm ];
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ zimbatm ];
   };
 }
diff --git a/pkgs/tools/misc/tmux-mem-cpu-load/default.nix b/pkgs/tools/misc/tmux-mem-cpu-load/default.nix
new file mode 100644
index 00000000000..2f9f436a149
--- /dev/null
+++ b/pkgs/tools/misc/tmux-mem-cpu-load/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, lib, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "tmux-mem-cpu-load";
+  version = "3.4.0";
+
+  src = fetchFromGitHub {
+    owner = "thewtex";
+    repo = "tmux-mem-cpu-load";
+    rev = "v${version}";
+    sha256 = "1ybj513l4953jhayrzb47dlh4yv9bkvs0q1lfvky17v9fdkxgn2j";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "CPU, RAM, and load monitor for use with tmux";
+    homepage = https://github.com/thewtex/tmux-mem-cpu-load;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ thomasjm ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/misc/tmux-xpanes/default.nix b/pkgs/tools/misc/tmux-xpanes/default.nix
index 6e41eba7359..a410eaa9238 100644
--- a/pkgs/tools/misc/tmux-xpanes/default.nix
+++ b/pkgs/tools/misc/tmux-xpanes/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchFromGitHub, openssl, perl }:
+{ lib, stdenv, fetchFromGitHub, openssl, perl }:
 
 stdenv.mkDerivation rec {
   pname = "tmux-xpanes";
-  version = "4.1.2";
+  version = "4.1.3";
 
   src = fetchFromGitHub {
     owner = "greymd";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0vm5mi6dqdbg0b5qh4r8sr1plpc00jryd8a2qxpp3a72cigjvvf0";
+    sha256 = "sha256-e0dEkkEkColBQ0PgOQpoVbIkR3aVsrMZoSGbg4O11SU=";
   };
 
   buildInputs = [ openssl perl ];
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
     install -m 644 man/*.1 $out/share/man/man1/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "tmux-based terminal divider";
     homepage = "https://github.com/greymd/tmux-xpanes";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/tmux/default.nix b/pkgs/tools/misc/tmux/default.nix
index 12ea456b9f7..90273068f3e 100644
--- a/pkgs/tools/misc/tmux/default.nix
+++ b/pkgs/tools/misc/tmux/default.nix
@@ -1,8 +1,8 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
+, fetchpatch
 , autoreconfHook
-, pkgconfig
-, makeWrapper
+, pkg-config
 , bison
 , ncurses
 , libevent
@@ -13,15 +13,15 @@ let
   bashCompletion = fetchFromGitHub {
     owner = "imomaliev";
     repo = "tmux-bash-completion";
-    rev = "fcda450d452f07d36d2f9f27e7e863ba5241200d";
-    sha256 = "092jpkhggjqspmknw7h3icm0154rg21mkhbc71j5bxfmfjdxmya8";
+    rev = "f5d53239f7658f8e8fbaf02535cc369009c436d6";
+    sha256 = "0sq2g3w0h3mkfa6qwqdw93chb5f1hgkz5vdl8yw8mxwdqwhsdprr";
   };
 
 in
 
 stdenv.mkDerivation rec {
   pname = "tmux";
-  version = "3.1b";
+  version = "3.2a";
 
   outputs = [ "out" "man" ];
 
@@ -29,11 +29,19 @@ stdenv.mkDerivation rec {
     owner = "tmux";
     repo = "tmux";
     rev = version;
-    sha256 = "0jvyq4r691bn0wsr8i6c0q0lzss25vm9nx8sv3fhw9cs63ncq04y";
+    sha256 = "0143ylfk7zsl3xmiasb768238gr582cfhsgv3p0h0f13bp8d6q09";
   };
 
+  patches = [
+    # See https://github.com/tmux/tmux/pull/2755
+    (fetchpatch {
+      url = "https://github.com/tmux/tmux/commit/d0a2683120ec5a33163a14b0e1b39d208745968f.patch";
+      sha256 = "070knpncxfxi6k4q64jwi14ns5vm3606cf402h1c11cwnaa84n1g";
+    })
+  ];
+
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     autoreconfHook
     bison
   ];
@@ -41,7 +49,6 @@ stdenv.mkDerivation rec {
   buildInputs = [
     ncurses
     libevent
-    makeWrapper
   ];
 
   configureFlags = [
@@ -49,13 +56,15 @@ stdenv.mkDerivation rec {
     "--localstatedir=/var"
   ];
 
+  enableParallelBuilding = true;
+
   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/";
+    homepage = "https://tmux.github.io/";
     description = "Terminal multiplexer";
 
     longDescription =
@@ -71,10 +80,10 @@ stdenv.mkDerivation rec {
           * Terminal locking, manually or after a timeout.
           * A clean, easily extended, BSD-licensed codebase, under active development.
       '';
+    changelog = "https://github.com/tmux/tmux/raw/${version}/CHANGES";
+    license = lib.licenses.bsd3;
 
-    license = stdenv.lib.licenses.bsd3;
-
-    platforms = stdenv.lib.platforms.unix;
-    maintainers = with stdenv.lib.maintainers; [ thammers fpletz ];
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ thammers fpletz ];
   };
 }
diff --git a/pkgs/tools/misc/tmuxinator/default.nix b/pkgs/tools/misc/tmuxinator/default.nix
index e631aa9d342..c248546fdb4 100644
--- a/pkgs/tools/misc/tmuxinator/default.nix
+++ b/pkgs/tools/misc/tmuxinator/default.nix
@@ -8,8 +8,8 @@ buildRubyGem rec {
   inherit ruby;
   name = "${gemName}-${version}";
   gemName = "tmuxinator";
-  version = "2.0.1";
-  source.sha256 = "03q1q6majci0l6kzw6kv7r395jycrl862mlqmyydxcd29y8wm3m2";
+  version = "3.0.1";
+  source.sha256 = "1vm96iyzbcy1388b3zyqivfhs4p63v87mp5qwlr4s8i2haq62xyf";
 
   erubis = buildRubyGem rec {
     inherit ruby;
diff --git a/pkgs/tools/misc/tmuxp/default.nix b/pkgs/tools/misc/tmuxp/default.nix
index 5a14981ef26..5820cbbba2c 100644
--- a/pkgs/tools/misc/tmuxp/default.nix
+++ b/pkgs/tools/misc/tmuxp/default.nix
@@ -1,36 +1,32 @@
-{ stdenv, python }:
+{ lib, python3Packages }:
 
-with python.pkgs;
+let
+  pypkgs = python3Packages;
 
-buildPythonApplication rec {
+in
+pypkgs.buildPythonApplication rec {
   pname = "tmuxp";
-  version = "1.5.5";
+  version = "1.9.2";
 
-  src = fetchPypi {
+  src = pypkgs.fetchPypi {
     inherit pname version;
-    sha256 = "1jbziyqggbfd5m884lg00h0zi99c6cvjxkl4jzr34c4affr295yd";
+    sha256 = "sha256-3RlTbIq7UGvEESMvncq97bhjJw8O4m+0aFVZgBQOwkM=";
   };
 
-  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
+  propagatedBuildInputs = with pypkgs; [
+    click
+    colorama
+    kaptan
+    libtmux
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Manage tmux workspaces from JSON and YAML";
     homepage = "https://tmuxp.git-pull.com/";
     license = licenses.bsd3;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ peterhoeg ];
   };
 }
diff --git a/pkgs/tools/misc/togglesg-download/default.nix b/pkgs/tools/misc/togglesg-download/default.nix
deleted file mode 100644
index 4afa1781ac0..00000000000
--- a/pkgs/tools/misc/togglesg-download/default.nix
+++ /dev/null
@@ -1,46 +0,0 @@
-{ 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/pkgs/tools/misc/toilet/default.nix b/pkgs/tools/misc/toilet/default.nix
index c598b37897c..41eaa6b03bf 100644
--- a/pkgs/tools/misc/toilet/default.nix
+++ b/pkgs/tools/misc/toilet/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, libcaca }:
+{ lib, stdenv, fetchurl, pkg-config, libcaca }:
 
 stdenv.mkDerivation rec {
   pname = "toilet";
@@ -9,10 +9,10 @@ stdenv.mkDerivation rec {
     sha256 = "1pl118qb7g0frpgl9ps43w4sd0psjirpmq54yg1kqcclqcqbbm49";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libcaca ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Display large colourful characters in text mode";
     homepage = "http://caca.zoy.org/wiki/toilet";
     license = licenses.wtfpl;
diff --git a/pkgs/tools/misc/topgrade/default.nix b/pkgs/tools/misc/topgrade/default.nix
index 578d2ba42e5..0c1cea4beed 100644
--- a/pkgs/tools/misc/topgrade/default.nix
+++ b/pkgs/tools/misc/topgrade/default.nix
@@ -1,26 +1,30 @@
-{ stdenv, lib, fetchFromGitHub, rustPlatform, Foundation }:
+{ stdenv, lib, fetchFromGitHub, rustPlatform, Foundation, installShellFiles }:
 
 rustPlatform.buildRustPackage rec {
   pname = "topgrade";
-  version = "5.4.0";
+  version = "7.1.0";
 
   src = fetchFromGitHub {
     owner = "r-darwish";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1v57dqkrh67cmj1ish650z8yk737hm1qynqr5yv0vlna86gwhrhs";
+    sha256 = "sha256-MGu0rQhNEaToPY4o9fz9E3RlvcLKjDq76Mqoq4UeL08=";
   };
 
-  cargoSha256 = "00vxrv8lbdwwbdbaqb4rq0w3bc8n9qwk9zgb1j656lyswib7g1d3";
+  cargoSha256 = "sha256-Nx0Mw+V8Hgtioi77sk7p/lq6KGJQ3zRXWMNEIzT4Xn8=";
 
   buildInputs = lib.optional stdenv.isDarwin Foundation;
 
-  # TODO: add manpage (topgrade.8) to postInstall on next update
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installManPage topgrade.8
+  '';
 
   meta = with lib; {
     description = "Upgrade all the things";
     homepage = "https://github.com/r-darwish/topgrade";
-    license = licenses.gpl3;
-    maintainers = with maintainers; [ filalex77 hugoreeves ];
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ Br1ght0ne hugoreeves SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/misc/toybox/default.nix b/pkgs/tools/misc/toybox/default.nix
index 23fdc2f7135..25db7e66867 100644
--- a/pkgs/tools/misc/toybox/default.nix
+++ b/pkgs/tools/misc/toybox/default.nix
@@ -1,21 +1,23 @@
 {
   stdenv, lib, fetchFromGitHub, which,
-  enableStatic ? false,
+  buildPackages,
+  enableStatic ? stdenv.hostPlatform.isStatic,
   enableMinimal ? false,
   extraConfig ? ""
 }:
 
 stdenv.mkDerivation rec {
   pname = "toybox";
-  version = "0.8.3";
+  version = "0.8.4";
 
   src = fetchFromGitHub {
     owner = "landley";
     repo = pname;
     rev = version;
-    sha256 = "0cb1n0skanwwkwgzlswwhvfb4iji1bw9iqskmczlhakpw3j1yaqa";
+    sha256 = "0cgbmv6qk1haj709hjx5q4sl7wgh91i459gzs1203adwc7rvk6jv";
   };
 
+  depsBuildBuild = [ buildPackages.stdenv.cc ]; # needed for cross
   buildInputs = lib.optionals enableStatic [ stdenv.cc.libc stdenv.cc.libc.static ];
 
   postPatch = "patchShebangs .";
@@ -55,11 +57,13 @@ stdenv.mkDerivation rec {
 
   NIX_CFLAGS_COMPILE = "-Wno-error";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Lightweight implementation of some Unix command line utilities";
     homepage = "https://landley.net/toybox/";
     license = licenses.bsd0;
     platforms = with platforms; linux ++ darwin ++ freebsd;
+    # https://github.com/NixOS/nixpkgs/issues/101229
+    broken = stdenv.isDarwin;
     maintainers = with maintainers; [ hhm ];
     priority = 10;
   };
diff --git a/pkgs/tools/misc/trash-cli/default.nix b/pkgs/tools/misc/trash-cli/default.nix
index 141cceff24d..301f6163d76 100644
--- a/pkgs/tools/misc/trash-cli/default.nix
+++ b/pkgs/tools/misc/trash-cli/default.nix
@@ -1,49 +1,51 @@
-{ stdenv, fetchFromGitHub, fetchpatch, coreutils
-, python3Packages, substituteAll }:
+{ lib, fetchFromGitHub, python3Packages }:
 
 python3Packages.buildPythonApplication rec {
   pname = "trash-cli";
-  version = "0.17.1.14";
+  version = "0.21.7.23";
 
   src = fetchFromGitHub {
     owner = "andreafrancia";
     repo = "trash-cli";
     rev = version;
-    sha256 = "1bqazna223ibqjwbc1wfvfnspfyrvjy8347qlrgv4cpng72n7gfi";
+    sha256 = "1kdkzs9mbyac8ndc6r0wa39z8d3fj8zglqp149id4j37aydxb10l";
   };
 
-  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";
-    })
-  ];
+  propagatedBuildInputs = [ python3Packages.psutil ];
 
   checkInputs = with python3Packages; [
-    nose
     mock
+    pytestCheckHook
   ];
-  checkPhase = "nosetests";
 
-  meta = with stdenv.lib; {
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    # Create a home directory with a test file.
+    HOME="$(mktemp -d)"
+    touch "$HOME/deleteme"
+
+    # Verify that trash list is initially empty.
+    [[ $($out/bin/trash-list) == "" ]]
+
+    # Trash a test file and verify that it shows up in the list.
+    $out/bin/trash "$HOME/deleteme"
+    [[ $($out/bin/trash-list) == *" $HOME/deleteme" ]]
+
+    # Empty the trash and verify that it is empty.
+    $out/bin/trash-empty
+    [[ $($out/bin/trash-list) == "" ]]
+
+    runHook postInstallCheck
+  '';
+
+  meta = with 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;
+    mainProgram = "trash";
   };
 }
diff --git a/pkgs/tools/misc/trash-cli/nix-paths.patch b/pkgs/tools/misc/trash-cli/nix-paths.patch
deleted file mode 100644
index d7b485eec15..00000000000
--- a/pkgs/tools/misc/trash-cli/nix-paths.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- 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/pkgs/tools/misc/tremor-rs/default.nix b/pkgs/tools/misc/tremor-rs/default.nix
new file mode 100644
index 00000000000..5f6acfd9696
--- /dev/null
+++ b/pkgs/tools/misc/tremor-rs/default.nix
@@ -0,0 +1,47 @@
+{ lib, rustPlatform, pkg-config, cmake, llvmPackages, openssl, fetchFromGitHub
+, installShellFiles, stdenv, Security, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tremor";
+  version = "0.11.5";
+
+  src = fetchFromGitHub {
+    owner = "tremor-rs";
+    repo = "tremor-runtime";
+    rev = "v${version}";
+    sha256 = "sha256-fE0f0tCI2V+HqHZwn9cO+xs0o3o6w0nrJg9Et0zJMOE=";
+  };
+
+  cargoHash = "sha256-dky9ejzMgKXlzpg+9bmkd7th+EHBpNmZJkgYt2pjuuI=";
+
+  nativeBuildInputs = [ cmake pkg-config installShellFiles ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [ Security libiconv ];
+
+  # TODO export TREMOR_PATH($out/lib) variable
+  postInstall = ''
+    # Copy the standard library to $out/lib
+    cp -r ${src}/tremor-script/lib/ $out
+
+    installShellCompletion --cmd tremor \
+      --bash <($out/bin/tremor completions bash) \
+      --fish <($out/bin/tremor completions fish) \
+      --zsh <($out/bin/tremor completions zsh)
+  '';
+
+  LIBCLANG_PATH = "${llvmPackages.libclang.lib}/lib";
+
+  # OPENSSL_NO_VENDOR - If set, always find OpenSSL in the system, even if the vendored feature is enabled.
+  OPENSSL_NO_VENDOR = 1;
+
+  cargoBuildFlags = [ "-p tremor-cli" ];
+
+  meta = with lib; {
+    description = "Early stage event processing system for unstructured data with rich support for structural pattern matching, filtering and transformation";
+    homepage = "https://www.tremor.rs/";
+    license = licenses.asl20;
+    platforms = platforms.x86_64;
+    maintainers = with maintainers; [ humancalico ];
+  };
+}
diff --git a/pkgs/tools/misc/trillian/default.nix b/pkgs/tools/misc/trillian/default.nix
new file mode 100644
index 00000000000..9959fe9375b
--- /dev/null
+++ b/pkgs/tools/misc/trillian/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "trillian";
+  version = "1.3.13";
+  vendorSha256 = "1ad0vaw0k57njzk9x233iqjbplyvw66qjk8r9j7sx87pdc6a4lpb";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1ns394yd4js9g1psd1dkrffidyzixqvjp5lhw2x2iycrxbnm3y44";
+  };
+
+  subPackages = [
+    "cmd/trillian_log_server"
+    "cmd/trillian_log_signer"
+    "cmd/createtree"
+    "cmd/deletetree"
+    "cmd/updatetree"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/google/trillian";
+    description = "A transparent, highly scalable and cryptographically verifiable data store.";
+    license = [ licenses.asl20 ];
+    maintainers = [ maintainers.adisbladis ];
+  };
+}
diff --git a/pkgs/tools/misc/ttf2pt1/default.nix b/pkgs/tools/misc/ttf2pt1/default.nix
index b7888f0884b..fcab21eb92b 100644
--- a/pkgs/tools/misc/ttf2pt1/default.nix
+++ b/pkgs/tools/misc/ttf2pt1/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl, freetype }:
+{ lib, stdenv, fetchurl, perl, freetype }:
 
 stdenv.mkDerivation {
   name = "ttf2pt1-3.4.4";
@@ -20,13 +20,13 @@ stdenv.mkDerivation {
 
   buildInputs = [ freetype ];
   nativeBuildInputs = [ perl ];
-  
+
   patches = ./gentoo-makefile.patch; # also contains the freetype patch
 
-  meta = { 
+  meta = {
     description = "True Type to Postscript Type 3 converter, fpdf";
     homepage = "http://ttf2pt1.sourceforge.net/index.html";
     license = "ttf2pt1";
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/ttfautohint/default.nix b/pkgs/tools/misc/ttfautohint/default.nix
index 502b829afce..fe121c2d51c 100644
--- a/pkgs/tools/misc/ttfautohint/default.nix
+++ b/pkgs/tools/misc/ttfautohint/default.nix
@@ -1,5 +1,5 @@
 {
-  stdenv, lib, fetchurl, pkgconfig, autoreconfHook
+  stdenv, lib, fetchurl, pkg-config, autoreconfHook
 , freetype, harfbuzz, libiconv, qtbase
 , enableGUI ? true
 }:
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
     substituteInPlace configure --replace "macx-g++" "macx-clang"
   '';
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
 
   buildInputs = [ freetype harfbuzz libiconv ] ++ lib.optional enableGUI qtbase;
 
@@ -25,7 +25,9 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  dontWrapQtApps = true;
+
+  meta = with lib; {
     description = "An automatic hinter for TrueType fonts";
     longDescription = ''
       A library and two programs which take a TrueType font as the
diff --git a/pkgs/tools/misc/ttmkfdir/default.nix b/pkgs/tools/misc/ttmkfdir/default.nix
index d75011ea6f4..bc1279a7dec 100644
--- a/pkgs/tools/misc/ttmkfdir/default.nix
+++ b/pkgs/tools/misc/ttmkfdir/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, freetype, fontconfig, libunwind, libtool, flex, bison }:
+{ lib, stdenv, fetchurl, freetype, fontconfig, libunwind, libtool, flex, bison }:
 
 stdenv.mkDerivation {
   name = "ttf-mkfontdir-3.0.9-6";
@@ -7,7 +7,7 @@ stdenv.mkDerivation {
     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 =
@@ -15,7 +15,7 @@ stdenv.mkDerivation {
         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)
     ];
 
@@ -27,6 +27,6 @@ stdenv.mkDerivation {
 
   meta = {
     description = "Create fonts.dir for TTF font directory";
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/ttwatch/default.nix b/pkgs/tools/misc/ttwatch/default.nix
index 8788608876e..ecfc40bdf6f 100644
--- a/pkgs/tools/misc/ttwatch/default.nix
+++ b/pkgs/tools/misc/ttwatch/default.nix
@@ -1,29 +1,29 @@
-{ stdenv, fetchFromGitHub
-, cmake, perl, pkgconfig
+{ lib, stdenv, fetchFromGitHub
+, cmake, perl, pkg-config
 , openssl, curl, libusb1, protobufc
 , enableUnsafe ? false }:
 
 stdenv.mkDerivation {
   pname = "ttwatch";
-  version = "2020-02-05";
+  version = "2020-06-24";
 
   src = fetchFromGitHub {
     owner = "ryanbinns";
     repo = "ttwatch";
-    rev = "bfdf1372515574e1fb3871dc1039f8d8a5dbdada";
-    sha256 = "07nd4dbkchxy8js1h1f6pzn63pls2afww97wyiiw6zid43mpqyg4";
+    rev = "260aff5869fd577d788d86b546399353d9ff72c1";
+    sha256 = "0yd2hs9d03gfvwm1vywpg2qga6x5c74zrj665wf9aa8gmn96hv8r";
   };
 
-  nativeBuildInputs = [ cmake perl pkgconfig ];
+  nativeBuildInputs = [ cmake perl pkg-config ];
   buildInputs = [ openssl curl libusb1 protobufc ];
 
-  cmakeFlags = stdenv.lib.optional enableUnsafe [ "-Dunsafe=on" ];
+  cmakeFlags = lib.optional enableUnsafe [ "-Dunsafe=on" ];
 
   preFixup = ''
     chmod +x $out/bin/ttbin2mysports
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/ryanbinns/ttwatch";
     description = "Linux TomTom GPS Watch Utilities";
     maintainers = with maintainers; [ dotlambda ];
diff --git a/pkgs/tools/misc/tty-clock/default.nix b/pkgs/tools/misc/tty-clock/default.nix
index f6a312f0460..b6cca5fe5c3 100644
--- a/pkgs/tools/misc/tty-clock/default.nix
+++ b/pkgs/tools/misc/tty-clock/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, ncurses, pkgconfig }:
+{ lib, stdenv, fetchFromGitHub, ncurses, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "tty-clock";
@@ -10,13 +10,13 @@ stdenv.mkDerivation rec {
     rev = "v${version}";
     sha256 = "16v3pmva13skpfjja96zacjpxrwzs1nb1iqmrp2qzvdbcm9061pp";
   };
-  
-  nativeBuildInputs = [ pkgconfig ];
+
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ ncurses ];
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/xorg62/tty-clock";
     license = licenses.free;
     description = "Digital clock in ncurses";
diff --git a/pkgs/tools/misc/ttygif/default.nix b/pkgs/tools/misc/ttygif/default.nix
index 5a14dade01b..226109ab20c 100644
--- a/pkgs/tools/misc/ttygif/default.nix
+++ b/pkgs/tools/misc/ttygif/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper, imagemagick, xorg }:
 
 stdenv.mkDerivation rec {
   pname = "ttygif";
@@ -13,7 +13,13 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "CC:=$(CC)" "PREFIX=${placeholder "out"}" ];
 
-  meta = with stdenv.lib; {
+  nativeBuildInputs = [ makeWrapper ];
+  postInstall = ''
+    wrapProgram $out/bin/ttygif \
+      --prefix PATH : ${lib.makeBinPath [ imagemagick xorg.xwd ]}
+  '';
+
+  meta = with lib; {
     homepage = "https://github.com/icholy/ttygif";
     description = "Convert terminal recordings to animated gifs";
     platforms = platforms.unix;
diff --git a/pkgs/tools/misc/ttylog/default.nix b/pkgs/tools/misc/ttylog/default.nix
index 55785c7a211..248630795cb 100644
--- a/pkgs/tools/misc/ttylog/default.nix
+++ b/pkgs/tools/misc/ttylog/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake }:
+{ lib, stdenv, fetchFromGitHub, cmake }:
 
 stdenv.mkDerivation rec {
   pname = "ttylog";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ cmake ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://ttylog.sourceforge.net";
     description = "Simple serial port logger";
     longDescription = ''
diff --git a/pkgs/tools/misc/ttyplot/default.nix b/pkgs/tools/misc/ttyplot/default.nix
index afa4cb3e155..7becc090a83 100644
--- a/pkgs/tools/misc/ttyplot/default.nix
+++ b/pkgs/tools/misc/ttyplot/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, ncurses }:
+{ lib, stdenv, fetchFromGitHub, ncurses }:
 
 stdenv.mkDerivation rec {
   pname = "ttyplot";
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     cp ttyplot $out/bin/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A simple general purpose plotting utility for tty with data input from stdin";
     homepage = "https://github.com/tenox7/ttyplot";
     license = licenses.unlicense;
diff --git a/pkgs/tools/misc/ttyrec/clang-fixes.patch b/pkgs/tools/misc/ttyrec/clang-fixes.patch
deleted file mode 100644
index 126ab44090e..00000000000
--- a/pkgs/tools/misc/ttyrec/clang-fixes.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-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/pkgs/tools/misc/ttyrec/default.nix b/pkgs/tools/misc/ttyrec/default.nix
deleted file mode 100644
index 97049276a32..00000000000
--- a/pkgs/tools/misc/ttyrec/default.nix
+++ /dev/null
@@ -1,31 +0,0 @@
-{ 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 ];
-    broken = true; # 2020-01-28
-  };
-}
diff --git a/pkgs/tools/misc/tvnamer/default.nix b/pkgs/tools/misc/tvnamer/default.nix
new file mode 100644
index 00000000000..204914c280c
--- /dev/null
+++ b/pkgs/tools/misc/tvnamer/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, python3
+}:
+
+let
+  python' = python3.override {
+    packageOverrides = self: super: rec {
+      # tvdb_api v3.1.0 has a hard requirement on requests-cache < 0.6
+      requests-cache = super.requests-cache.overridePythonAttrs (super: rec {
+        version = "0.5.2";
+        src = self.fetchPypi {
+          inherit (super) pname;
+          inherit version;
+          sha256 = "sha256-gTAjJpaGBF+OAeIonMHn6a5asi3dHihJqQk6s6tycOs=";
+        };
+
+        # too many changes have been made to requests-cache based on version 0.6 so
+        # simply disable tests
+        doCheck = false;
+      });
+    };
+  };
+
+  pypkgs = python'.pkgs;
+
+in
+pypkgs.buildPythonApplication rec {
+  pname = "tvnamer";
+  version = "3.0.4";
+
+  src = pypkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "dc2ea8188df6ac56439343630466b874c57756dd0b2538dd8e7905048f425f04";
+  };
+
+  propagatedBuildInputs = with pypkgs; [ tvdb_api ];
+
+  # no tests from pypi
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Automatic TV episode file renamer, uses data from thetvdb.com via tvdb_api.";
+    homepage = "https://github.com/dbr/tvnamer";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/pkgs/tools/misc/twurl/Gemfile b/pkgs/tools/misc/twurl/Gemfile
new file mode 100644
index 00000000000..55b6e9f5650
--- /dev/null
+++ b/pkgs/tools/misc/twurl/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem 'twurl'
diff --git a/pkgs/tools/misc/twurl/Gemfile.lock b/pkgs/tools/misc/twurl/Gemfile.lock
new file mode 100644
index 00000000000..d29268e656d
--- /dev/null
+++ b/pkgs/tools/misc/twurl/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    oauth (0.5.6)
+    twurl (0.9.6)
+      oauth (~> 0.4)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  twurl
+
+BUNDLED WITH
+   2.1.4
diff --git a/pkgs/tools/misc/twurl/default.nix b/pkgs/tools/misc/twurl/default.nix
new file mode 100644
index 00000000000..dccb67fbaf6
--- /dev/null
+++ b/pkgs/tools/misc/twurl/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "twurl";
+  gemdir = ./.;
+  exes = [ "twurl" ];
+
+  passthru.updateScript = bundlerUpdateScript "twurl";
+
+  meta = with lib; {
+    description = "OAuth-enabled curl for the Twitter API";
+    homepage    = "https://github.com/twitter/twurl";
+    license     = "MIT";
+    maintainers = with maintainers; [ brecht ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/twurl/gemset.nix b/pkgs/tools/misc/twurl/gemset.nix
new file mode 100644
index 00000000000..a1a2ed835d3
--- /dev/null
+++ b/pkgs/tools/misc/twurl/gemset.nix
@@ -0,0 +1,23 @@
+{
+  oauth = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zwd6v39yqfdrpg1p3d9jvzs9ljg55ana2p06m0l7qn5w0lgx1a0";
+      type = "gem";
+    };
+    version = "0.5.6";
+  };
+  twurl = {
+    dependencies = ["oauth"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jgsxa0cnkajnsxxlsrgl2wq3m7khaxvr0rcir4vwbc1hx210700";
+      type = "gem";
+    };
+    version = "0.9.6";
+  };
+}
diff --git a/pkgs/tools/misc/txr/default.nix b/pkgs/tools/misc/txr/default.nix
index ce928f0a378..d5a37e2e67f 100644
--- a/pkgs/tools/misc/txr/default.nix
+++ b/pkgs/tools/misc/txr/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, bison, flex, libffi }:
+{ lib, stdenv, fetchurl, bison, flex, libffi }:
 
 stdenv.mkDerivation rec {
   pname = "txr";
@@ -32,11 +32,11 @@ stdenv.mkDerivation rec {
     EOF
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Programming language for convenient data munging";
     license = licenses.bsd2;
     homepage = "http://nongnu.org/txr";
-    maintainers = with stdenv.lib.maintainers; [ dtzWill ];
+    maintainers = with lib.maintainers; [ dtzWill ];
     platforms = platforms.linux; # Darwin fails although it should work AFAIK
   };
 }
diff --git a/pkgs/tools/misc/txt2man/default.nix b/pkgs/tools/misc/txt2man/default.nix
index ded409754bc..27ff219a6e1 100644
--- a/pkgs/tools/misc/txt2man/default.nix
+++ b/pkgs/tools/misc/txt2man/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, coreutils, gawk }:
+{ lib, stdenv, fetchurl, coreutils, gawk }:
 
 stdenv.mkDerivation rec {
   pname = "txt2man";
@@ -36,8 +36,8 @@ stdenv.mkDerivation rec {
   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 ];
+    license = lib.licenses.gpl2;
+    platforms = with lib.platforms; linux ++ darwin;
+    maintainers = with lib.maintainers; [ bjornfor ];
   };
 }
diff --git a/pkgs/tools/misc/txtw/default.nix b/pkgs/tools/misc/txtw/default.nix
index 1cf80007901..e8a14b57634 100644
--- a/pkgs/tools/misc/txtw/default.nix
+++ b/pkgs/tools/misc/txtw/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cairo }:
+{ lib, stdenv, fetchFromGitHub, cairo }:
 
 stdenv.mkDerivation rec {
   version = "0.4";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
 
   prePatch = ''sed -i "s@/usr/local@$out@" Makefile'';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Compute text widths";
     homepage = "https://github.com/baskerville/txtw";
     maintainers = with maintainers; [ lihop ];
diff --git a/pkgs/tools/misc/tydra/default.nix b/pkgs/tools/misc/tydra/default.nix
index c6d7c86c7ef..fd8e8e6ee5a 100644
--- a/pkgs/tools/misc/tydra/default.nix
+++ b/pkgs/tools/misc/tydra/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, rustPlatform, fetchFromGitHub, installShellFiles }:
+{ lib, rustPlatform, fetchFromGitHub, installShellFiles }:
 
 rustPlatform.buildRustPackage rec {
   pname = "tydra";
@@ -11,7 +11,7 @@ rustPlatform.buildRustPackage rec {
     sha256 = "1kvyski3qy2lwlpipynq894i0g9x2j4a1iy2mgdwfibfyfkv2jnm";
   };
 
-  cargoSha256 = "11l3fvym16wrrpm9vy4asmqdh8qynwjy0w4gx2bbcnc6300ag43a";
+  cargoSha256 = "0handd5vxxvmlllzxhvwgadl4r7yc78f068r8jryprpap31azg3a";
 
   nativeBuildInputs = [ installShellFiles ];
 
@@ -25,10 +25,10 @@ rustPlatform.buildRustPackage rec {
     installShellCompletion tydra.{bash,fish} _tydra
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Shortcut menu-based task runner, inspired by Emacs Hydra";
     homepage = "https://github.com/Mange/tydra";
     license = licenses.mit;
-    maintainers = with maintainers; [ filalex77 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/misc/tz/default.nix b/pkgs/tools/misc/tz/default.nix
new file mode 100644
index 00000000000..c46137bd9e5
--- /dev/null
+++ b/pkgs/tools/misc/tz/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "tz";
+  version = "0.5";
+
+  src = fetchFromGitHub {
+    owner = "oz";
+    repo = "tz";
+    rev = "v${version}";
+    sha256 = "sha256-OwjhV3n1B1yQTNYm4VOW500t0524g85YYiOAAu9yPeo=";
+  };
+
+  vendorSha256 = "sha256-Soa87I7oMa34LjYKxNAz9Limi0kQ6JUtb/zI4G7yZnw=";
+
+  meta = with lib; {
+    description = "A time zone helper";
+    homepage = "https://github.com/oz/tz";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ siraben ];
+  };
+}
diff --git a/pkgs/tools/misc/ugtrain/default.nix b/pkgs/tools/misc/ugtrain/default.nix
new file mode 100644
index 00000000000..e92170ad595
--- /dev/null
+++ b/pkgs/tools/misc/ugtrain/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, scanmem
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.4.1";
+  pname = "ugtrain";
+
+  src = fetchFromGitHub {
+    owner  = "ugtrain";
+    repo   = "ugtrain";
+    rev    = "v${version}";
+    sha256 = "0pw9lm8y83mda7x39874ax2147818h1wcibi83pd2x4rp1hjbkkn";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config scanmem ];
+
+  meta = with lib; {
+    homepage = "https://github.com/ugtrain/ugtrain";
+    description = "The Universal Elite Game Trainer for CLI (Linux game trainer research project)";
+    maintainers = with maintainers; [ mtrsk ];
+    platforms = platforms.linux;
+    license = licenses.gpl3Only;
+  };
+}
diff --git a/pkgs/tools/misc/uhubctl/default.nix b/pkgs/tools/misc/uhubctl/default.nix
index 49da81d6094..f5bbe2de73f 100644
--- a/pkgs/tools/misc/uhubctl/default.nix
+++ b/pkgs/tools/misc/uhubctl/default.nix
@@ -1,23 +1,25 @@
-{ stdenv
+{ lib
+, stdenv
 , fetchFromGitHub
 , libusb1
 }:
 
 stdenv.mkDerivation rec {
   pname = "uhubctl";
-  version = "2.2.0";
+  version = "2.4.0";
 
   src = fetchFromGitHub {
     owner = "mvp";
     repo = "uhubctl";
-    rev = "refs/tags/v${version}";
-    sha256 = "0pimhw2a2wfg7nh1ahsxmzkb0j6bbncwdqsvyp8l23zhs5kx7wm9";
+    rev = "v${version}";
+    sha256 = "sha256-F3fOoZYnfIWMrESyVJ/9z6Vou1279avhs600rQayUVA=";
   };
 
   buildInputs = [ libusb1 ];
 
   installFlags = [ "prefix=${placeholder "out"}" ];
-  meta = with stdenv.lib; {
+
+  meta = with lib; {
     homepage = "https://github.com/mvp/uhubctl";
     description = "Utility to control USB power per-port on smart USB hubs";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/ultrastar-creator/default.nix b/pkgs/tools/misc/ultrastar-creator/default.nix
index 923f6e7a3a4..990547291f6 100644
--- a/pkgs/tools/misc/ultrastar-creator/default.nix
+++ b/pkgs/tools/misc/ultrastar-creator/default.nix
@@ -1,5 +1,5 @@
 { lib, mkDerivation, fetchFromGitHub
-, qmake, qtbase, pkgconfig, taglib, libbass, libbass_fx }:
+, qmake, qtbase, pkg-config, taglib, libbass, libbass_fx }:
 
 # TODO: get rid of (unfree) libbass
 # issue:https://github.com/UltraStar-Deluxe/UltraStar-Creator/issues/3
@@ -33,7 +33,7 @@ mkDerivation {
     cd src
   '';
 
-  nativeBuildInputs = [ qmake pkgconfig ];
+  nativeBuildInputs = [ qmake pkg-config ];
   buildInputs = [ qtbase taglib libbass libbass_fx ];
 
   meta = with lib; {
diff --git a/pkgs/tools/misc/ultrastar-manager/default.nix b/pkgs/tools/misc/ultrastar-manager/default.nix
index 64221a92139..d5dd47e0f66 100644
--- a/pkgs/tools/misc/ultrastar-manager/default.nix
+++ b/pkgs/tools/misc/ultrastar-manager/default.nix
@@ -1,4 +1,4 @@
-{ lib, mkDerivation, fetchFromGitHub, pkgconfig, symlinkJoin, qmake, diffPlugins
+{ lib, mkDerivation, fetchFromGitHub, pkg-config, symlinkJoin, qmake, diffPlugins
 , qtbase, qtmultimedia, taglib, libmediainfo, libzen, libbass }:
 
 let
@@ -27,7 +27,8 @@ let
     in mkDerivation {
       name = "${src.name}-patched";
       inherit src;
-      phases = [ "unpackPhase" "patchPhase" ];
+
+      dontInstall = true;
 
       patchPhase = with lib; ''
         # we don’t want prebuild binaries checked into version control!
@@ -109,7 +110,7 @@ in mkDerivation {
     make install
   '';
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   inherit buildInputs;
 
   meta = with lib; {
diff --git a/pkgs/tools/misc/umlet/default.nix b/pkgs/tools/misc/umlet/default.nix
index b0edf3e7de0..d88e0bdea15 100644
--- a/pkgs/tools/misc/umlet/default.nix
+++ b/pkgs/tools/misc/umlet/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, jre, unzip, runtimeShell }:
+{ lib, stdenv, fetchurl, jre, unzip, runtimeShell }:
 
 stdenv.mkDerivation rec {
   major = "14";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
     sha256 = "0jfyxjxsjx29xhs3fl0f574nyncmk9j5jp8zlgd401mcaznn9c7l";
   };
 
-  buildInputs = [ unzip ];
+  nativeBuildInputs = [ unzip ];
 
   installPhase = ''
     mkdir -p "$out/bin"
@@ -33,7 +33,7 @@ stdenv.mkDerivation rec {
     chmod a+x "$out/bin/umlet"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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:
diff --git a/pkgs/tools/misc/unclutter-xfixes/default.nix b/pkgs/tools/misc/unclutter-xfixes/default.nix
index 7d2e5e0c367..d59b759503f 100644
--- a/pkgs/tools/misc/unclutter-xfixes/default.nix
+++ b/pkgs/tools/misc/unclutter-xfixes/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub,
+{ lib, stdenv, fetchFromGitHub,
   xlibsWrapper, libev, libXi, libXfixes,
-  pkgconfig, asciidoc, libxslt, docbook_xsl }:
+  pkg-config, asciidoc, libxslt, docbook_xsl }:
 
 stdenv.mkDerivation rec {
   pname = "unclutter-xfixes";
@@ -13,18 +13,17 @@ stdenv.mkDerivation rec {
     sha256 = "148m4wx8v57s3l2wb69y9imb00y8ca2li27hsxibwnl1wrkb7z4b";
   };
 
-  nativeBuildInputs = [ pkgconfig asciidoc libxslt docbook_xsl ];
+  nativeBuildInputs = [ pkg-config asciidoc libxslt docbook_xsl ];
   buildInputs = [ xlibsWrapper libev libXi libXfixes ];
 
   makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
 
   installFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Rewrite of unclutter using the X11 Xfixes extension";
     platforms = platforms.unix;
-    license = stdenv.lib.licenses.mit;
-    inherit version;
+    license = lib.licenses.mit;
     maintainers = [ maintainers.globin ];
   };
 }
diff --git a/pkgs/tools/misc/unclutter/default.nix b/pkgs/tools/misc/unclutter/default.nix
index ef8e865e91f..66344c9fdee 100644
--- a/pkgs/tools/misc/unclutter/default.nix
+++ b/pkgs/tools/misc/unclutter/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, xlibsWrapper}:
+{lib, stdenv, fetchurl, xlibsWrapper}:
 
 stdenv.mkDerivation {
   name = "unclutter-8";
@@ -9,7 +9,7 @@ stdenv.mkDerivation {
 
   buildInputs = [xlibsWrapper];
 
-  buildFlags = [ "CC=cc" ];
+  buildFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
 
   installPhase = ''
     mkdir -pv "$out/bin"
@@ -18,7 +18,7 @@ stdenv.mkDerivation {
     make DESTDIR="$out" MANPATH="$out/share/man" PREFIX="" install.man
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Hides mouse pointer while not in use";
     longDescription = ''
       Unclutter hides your X mouse cursor when you do not need it, to prevent
@@ -32,6 +32,6 @@ stdenv.mkDerivation {
     '';
     maintainers = with maintainers; [ domenkozar ];
     platforms = platforms.unix;
-    license = stdenv.lib.licenses.publicDomain;
+    license = lib.licenses.publicDomain;
   };
 }
diff --git a/pkgs/tools/misc/unicode/default.nix b/pkgs/tools/misc/unicode/default.nix
index b83dd17d0bc..a2bc615ed86 100644
--- a/pkgs/tools/misc/unicode/default.nix
+++ b/pkgs/tools/misc/unicode/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fetchurl, python3Packages, installShellFiles }:
+{ lib, fetchFromGitHub, fetchurl, python3Packages, installShellFiles }:
 
 python3Packages.buildPythonApplication rec {
   pname = "unicode";
@@ -27,7 +27,7 @@ python3Packages.buildPythonApplication rec {
     installManPage paracode.1 unicode.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Display unicode character properties";
     homepage = "https://github.com/garabik/unicode";
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/units/default.nix b/pkgs/tools/misc/units/default.nix
index d62f10daeea..04e955a78b1 100644
--- a/pkgs/tools/misc/units/default.nix
+++ b/pkgs/tools/misc/units/default.nix
@@ -11,11 +11,11 @@ assert enableCurrenciesUpdater -> pythonPackages != null;
 
 stdenv.mkDerivation rec {
   pname = "units";
-  version = "2.19";
+  version = "2.21";
 
   src = fetchurl {
     url = "mirror://gnu/units/${pname}-${version}.tar.gz";
-    sha256 = "0mk562g7dnidjgfgvkxxpvlba66fh1ykmfd9ylzvcln1vxmi6qj2";
+    sha256 = "sha256-bD6AqfmAWJ/ZYqWFKiZ0ZCJX2xxf1bJ8TZ5mTzSGy68=";
   };
 
   pythonEnv = pythonPackages.python.withPackages(ps: [
@@ -37,7 +37,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Unit conversion tool";
     homepage = "https://www.gnu.org/software/units/";
     license = [ licenses.gpl3Plus ];
diff --git a/pkgs/tools/misc/up/default.nix b/pkgs/tools/misc/up/default.nix
index b3d275d3081..47c504cd1a7 100644
--- a/pkgs/tools/misc/up/default.nix
+++ b/pkgs/tools/misc/up/default.nix
@@ -2,18 +2,16 @@
 
 buildGoModule rec {
   pname = "up";
-  version = "0.3.2";
-
-  patches = [ ./gomod.patch ];
+  version = "0.4";
 
   src = fetchFromGitHub {
     owner = "akavel";
     repo = "up";
     rev = "v${version}";
-    sha256 = "1psixyymk98z52yy92lwb75yfins45dw6rif9cxwd7yiascwg2if";
+    sha256 = "1j8fi14fiwjscfzdfjqxgavjadwvcm5mqr8fb7hx3jmxs4kl58bp";
   };
 
-  vendorSha256 = "1h3w4i7dyh6yagqmdclvflfq6fx0z880jdnpf28assv7fxd9rjsx";
+  vendorSha256 = "1q8wfsfl3rz698ck5q5s5z6iw9k134fxxvwipcp2b052n998rcrx";
 
   doCheck = false;
 
diff --git a/pkgs/tools/misc/up/gomod.patch b/pkgs/tools/misc/up/gomod.patch
deleted file mode 100644
index f894f14d21f..00000000000
--- a/pkgs/tools/misc/up/gomod.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-diff --git a/go.mod b/go.mod
-index ecbfe90..56a1409 100644
---- a/go.mod
-+++ b/go.mod
-@@ -1,11 +1,14 @@
- module github.com/akavel/up
- 
-+go 1.14
-+
- require (
--	github.com/gdamore/encoding v0.0.0-20151215212835-b23993cbb635
-+	github.com/gdamore/encoding v0.0.0-20151215212835-b23993cbb635 // indirect
- 	github.com/gdamore/tcell v0.0.0-20180924055237-493f3b46b3c2
--	github.com/lucasb-eyer/go-colorful v0.0.0-20170903184257-231272389856
-+	github.com/lucasb-eyer/go-colorful v0.0.0-20170903184257-231272389856 // indirect
- 	github.com/mattn/go-isatty v0.0.3
--	github.com/mattn/go-runewidth v0.0.2
-+	github.com/mattn/go-runewidth v0.0.2 // indirect
- 	github.com/spf13/pflag v1.0.3
--	golang.org/x/text v0.0.0-20171214130843-f21a4dfb5e38
-+	golang.org/x/sys v0.0.0-20200501145240-bc7a7d42d5c3 // indirect
-+	golang.org/x/text v0.0.0-20171214130843-f21a4dfb5e38 // indirect
- )
diff --git a/pkgs/tools/misc/upower-notify/default.nix b/pkgs/tools/misc/upower-notify/default.nix
index 2258f31fd31..79460f3a5b7 100644
--- a/pkgs/tools/misc/upower-notify/default.nix
+++ b/pkgs/tools/misc/upower-notify/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchgit }:
+{ lib, buildGoPackage, fetchgit }:
 
 # To use upower-notify, the maintainer suggests adding something like this to your configuration.nix:
 #
@@ -8,7 +8,7 @@
 # '';
 buildGoPackage rec {
   pname = "upower-notify";
-  version = "20160310-${stdenv.lib.strings.substring 0 7 rev}";
+  version = "20160310-${lib.strings.substring 0 7 rev}";
   rev = "14c581e683a7e90ec9fa6d409413c16599a5323c";
 
   goPackagePath = "github.com/omeid/upower-notify";
diff --git a/pkgs/tools/misc/upterm/default.nix b/pkgs/tools/misc/upterm/default.nix
new file mode 100644
index 00000000000..2f504a0cef8
--- /dev/null
+++ b/pkgs/tools/misc/upterm/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles }:
+
+buildGoModule rec {
+  pname = "upterm";
+  version = "0.6.5";
+
+  src = fetchFromGitHub {
+    owner = "owenthereal";
+    repo = "upterm";
+    rev = "v${version}";
+    sha256 = "sha256-wzDK7iQN/z/M1mTKPCH3c+OjFsavplV/0oMiOe5thuI=";
+  };
+
+  vendorSha256 = null;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    $out/bin/gendoc
+    rm $out/bin/gendoc
+    installManPage etc/man/man*/*
+    installShellCompletion --bash --name upterm.bash etc/completion/upterm.bash_completion.sh
+    installShellCompletion --zsh --name _upterm etc/completion/upterm.zsh_completion
+  '';
+
+  doCheck = true;
+
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    description = "Secure terminal-session sharing";
+    homepage = "https://upterm.dev";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ hax404 ];
+  };
+}
diff --git a/pkgs/tools/misc/urjtag/default.nix b/pkgs/tools/misc/urjtag/default.nix
index 2056fb9d0a5..4630ec31ebb 100644
--- a/pkgs/tools/misc/urjtag/default.nix
+++ b/pkgs/tools/misc/urjtag/default.nix
@@ -1,41 +1,57 @@
-{ stdenv, autoconf, automake, pkgconfig, gettext, libtool, bison
-, flex, which, subversion, fetchsvn, makeWrapper, libftdi, libusb-compat-0_1, readline
-, python3
-, svfSupport ? true
+{ lib
+, stdenv
+, fetchurl
+, autoconf
+, automake
+, autoreconfHook
+, gettext
+, libftdi1
+, libtool
+, libusb-compat-0_1
+, makeWrapper
+, pkg-config
+, readline
+, which
 , bsdlSupport ? true
-, staplSupport ? true
 , jedecSupport ? true
+, staplSupport ? true
+, svfSupport ? true
 }:
 
-stdenv.mkDerivation {
-  version = "0.10";
+stdenv.mkDerivation rec {
   pname = "urjtag";
+  version = "2021.03";
 
-  src = fetchsvn {
-    url = "svn://svn.code.sf.net/p/urjtag/svn/trunk/urjtag";
-    rev = "2051";
-    sha256 = "0pyl0y27136nr8mmjdml7zjnfnpbjmgqzkjk99j3hvj38k10wq7f";
+  src = fetchurl {
+    url = "mirror://sourceforge/project/${pname}/${pname}/${version}/${pname}-${version}.tar.xz";
+    hash = "sha256-sKLqokVROvCW3E13AQmDIzXGlMbBKqXpL++uhoVBbxw=";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ gettext autoconf automake libtool bison flex which
-    subversion makeWrapper readline libftdi libusb-compat-0_1 python3 ];
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    which
+    gettext
+  ];
+  buildInputs = [
+    libftdi1
+    libtool
+    libusb-compat-0_1
+    readline
+  ];
 
   configureFlags = [
-    (stdenv.lib.enableFeature svfSupport   "svf")
-    (stdenv.lib.enableFeature bsdlSupport  "bsdl")
-    (stdenv.lib.enableFeature staplSupport "stapl")
-    (stdenv.lib.enableFeature jedecSupport "jedec-exp")
+    (lib.enableFeature bsdlSupport  "bsdl")
+    (lib.enableFeature jedecSupport "jedec-exp")
+    (lib.enableFeature staplSupport "stapl")
+    (lib.enableFeature svfSupport   "svf")
   ];
 
-  preConfigure = "./autogen.sh";
-
-  meta = {
-    description = "Enhanced, modern tool for communicating over JTAG with flash chips, CPUs,and many more";
+  meta = with lib; {
     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 ];
+    description = "Universal JTAG library, server and tools";
+    license = with licenses; [ gpl2Plus lgpl21Plus ];
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.linux;
   };
 }
-
diff --git a/pkgs/tools/misc/urn-timer/default.nix b/pkgs/tools/misc/urn-timer/default.nix
new file mode 100644
index 00000000000..83dad9ebe7f
--- /dev/null
+++ b/pkgs/tools/misc/urn-timer/default.nix
@@ -0,0 +1,66 @@
+{ lib, stdenv
+, fetchFromGitHub
+, fetchpatch
+, unstableGitUpdater
+, xxd
+, pkg-config
+, imagemagick
+, wrapGAppsHook
+, gtk3
+, jansson
+}:
+
+stdenv.mkDerivation {
+  pname = "urn-timer";
+  version = "unstable-2017-08-20";
+
+  src = fetchFromGitHub {
+    owner = "3snowp7im";
+    repo = "urn";
+    rev = "246a7a642fa7a673166c1bd281585d0fc22e75b2";
+    sha256 = "0bniwf3nhsqapsss9m9y9ylh38v6v7q45999wa1qcsddpa72k0i0";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    # https://github.com/3snowp7im/urn/pull/50
+    (fetchpatch {
+      name = "stop-hardcoding-prefix";
+      url = "https://github.com/3snowp7im/urn/commit/6054ee62dcd6095e31e8fb2a229155dbbcb39f68.patch";
+      sha256 = "1xdkylbqlqjwqx4pb9v1snf81ag7b6q8vybirz3ibsv6iy79v9pk";
+    })
+    # https://github.com/3snowp7im/urn/pull/53
+    (fetchpatch {
+      name = "create-installation-directories";
+      url = "https://github.com/3snowp7im/urn/commit/fb032851b9c5bebb5066d306f5366f0be34f0797.patch";
+      sha256 = "0jjhcz4n8bm3hl56rvjzkvxr6imc05qlyavzjrlafa19hf036g4a";
+    })
+  ];
+
+  postPatch = ''substituteInPlace GNUmakefile --replace 'rsync -a --exclude=".*"' 'cp -r' '';
+
+  nativeBuildInputs = [
+    xxd
+    pkg-config
+    imagemagick
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    jansson
+  ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  passthru.updateScript = unstableGitUpdater {
+    url = "https://github.com/3snowp7im/urn.git";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/3snowp7im/urn";
+    description = "Split tracker / timer for speedrunning with GTK+ frontend";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
diff --git a/pkgs/tools/misc/usbmuxd/default.nix b/pkgs/tools/misc/usbmuxd/default.nix
index 1c1da7597e7..96b82a8a20a 100644
--- a/pkgs/tools/misc/usbmuxd/default.nix
+++ b/pkgs/tools/misc/usbmuxd/default.nix
@@ -1,17 +1,17 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, libusb1, libimobiledevice }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, libusb1, libimobiledevice }:
 
 stdenv.mkDerivation rec {
   pname = "usbmuxd";
-  version = "2019-11-11";
+  version = "unstable-2021-05-08";
 
   src = fetchFromGitHub {
     owner = "libimobiledevice";
     repo = pname;
-    rev = "9af2b12552693a47601347e1eafc1e94132d727e";
-    sha256 = "0w8mf2wfpqijg882vhb8xarlp6zja23xf0b59z5zi774pnpjbqvj";
+    rev = "5e484e18f1383b5a0bd6c353ab1d668b03e4ffab";
+    sha256 = "sha256-hhbfRmLEhVVuJNnw65PakPnvjSCrN3oSMK6D7Zwnw60=";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   propagatedBuildInputs = [ libimobiledevice libusb1 ];
 
   preConfigure = ''
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
     configureFlags="$configureFlags --with-systemdsystemunitdir=$out/lib/systemd/system"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/libimobiledevice/usbmuxd";
     description = "A socket daemon to multiplex connections from and to iOS devices";
     longDescription = ''
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
       in parallel. The higher-level layers are handled by libimobiledevice.
     '';
     license = licenses.gpl2Plus;
-    platforms = platforms.linux;
+    platforms = platforms.linux ++ platforms.darwin;
     maintainers = with maintainers; [ infinisil ];
   };
 }
diff --git a/pkgs/tools/misc/usbview/default.nix b/pkgs/tools/misc/usbview/default.nix
new file mode 100644
index 00000000000..2f417ea86de
--- /dev/null
+++ b/pkgs/tools/misc/usbview/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, gtk3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "usbview";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "gregkh";
+    repo = "usbview";
+    rev = "v${version}";
+    sha256 = "1cw5jjpidjn34rxdjslpdlj99k4dqaq1kz6mplv5hgjdddijvn5p";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    gtk3
+  ];
+
+  meta = with lib; {
+    description = "USB viewer for Linux";
+    license = licenses.gpl2Only;
+    homepage = "http://www.kroah.com/linux-usb/";
+    maintainers = with maintainers; [ shamilton ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/uucp/default.nix b/pkgs/tools/misc/uucp/default.nix
index 1516e9dba33..42084fa6296 100644
--- a/pkgs/tools/misc/uucp/default.nix
+++ b/pkgs/tools/misc/uucp/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "uucp-1.07";
@@ -29,9 +29,9 @@ stdenv.mkDerivation rec {
 
     homepage = "https://www.gnu.org/software/uucp/uucp.html";
 
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
 
-    platforms = stdenv.lib.platforms.all;
+    platforms = lib.platforms.all;
     maintainers = [ ];
   };
 }
diff --git a/pkgs/tools/misc/uudeview/default.nix b/pkgs/tools/misc/uudeview/default.nix
index a8495d7767c..47bc916ceb5 100644
--- a/pkgs/tools/misc/uudeview/default.nix
+++ b/pkgs/tools/misc/uudeview/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, tcl, tk }:
+{ lib, stdenv, fetchurl, tcl, tk }:
 
 stdenv.mkDerivation rec {
   name = "uudeview-0.5.20";
@@ -20,8 +20,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ woffs ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/uutils-coreutils/default.nix b/pkgs/tools/misc/uutils-coreutils/default.nix
index f18deb0c83d..8abfb077596 100644
--- a/pkgs/tools/misc/uutils-coreutils/default.nix
+++ b/pkgs/tools/misc/uutils-coreutils/default.nix
@@ -1,31 +1,46 @@
-{ stdenv, fetchFromGitHub, rustPlatform, cargo, cmake, sphinx, lib, prefix ? "uutils-"
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, cargo
+, sphinx
 , Security
+, libiconv
+, prefix ? "uutils-"
+, buildMulticallBinary ? true
 }:
 
-rustPlatform.buildRustPackage {
-  name = "uutils-coreutils-2019-05-03";
+stdenv.mkDerivation rec {
+  pname = "uutils-coreutils";
+  version = "0.0.7";
+
   src = fetchFromGitHub {
     owner = "uutils";
     repo = "coreutils";
-    rev = "036dd812958ace22d973acf7b370f58072049dac";
-    sha256 = "0d9w3iiphhsk7l5l34682wayp90rgq5a3d94l3qdvhcqkfmpg727";
+    rev = version;
+    sha256 = "sha256-XI6061nCVyL8Q1s+QH75IesneJNhbhxGnILZxQCa5LU=";
   };
 
-  # too many impure/platform-dependent tests
-  doCheck = false;
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    name = "${pname}-${version}";
+    hash = "sha256-bfwWyeuslLjh4OCt+H8CM8hCrRFqlibOS8gS64lysa0=";
+  };
 
-  cargoSha256 = "186hwzdpy7j0gw7491qx02vy4di5md47hipf1xxi1qccvmcfghwh";
+  nativeBuildInputs = [ rustPlatform.cargoSetupHook sphinx ];
 
-  makeFlags =
-    [ "CARGO=${cargo}/bin/cargo" "PREFIX=$(out)" "PROFILE=release" "INSTALLDIR_MAN=$(out)/share/man/man1" ]
-    ++ lib.optional (prefix != null) [ "PROG_PREFIX=${prefix}" ];
+  buildInputs = lib.optionals stdenv.isDarwin [ Security libiconv ];
 
-  nativeBuildInputs = [ cmake cargo sphinx ];
-  buildInputs = lib.optional stdenv.isDarwin Security;
+  makeFlags = [
+    "CARGO=${cargo}/bin/cargo"
+    "PREFIX=${placeholder "out"}"
+    "PROFILE=release"
+    "INSTALLDIR_MAN=${placeholder "out"}/share/man/man1"
+  ] ++ lib.optionals (prefix != null) [ "PROG_PREFIX=${prefix}" ]
+  ++ lib.optionals buildMulticallBinary [ "MULTICALL=y" ];
 
-  # empty {build,install}Phase to use defaults of `stdenv.mkDerivation` rather than rust defaults
-  buildPhase = "";
-  installPhase = "";
+  # too many impure/platform-dependent tests
+  doCheck = false;
 
   meta = with lib; {
     description = "Cross-platform Rust rewrite of the GNU coreutils";
@@ -34,7 +49,7 @@ rustPlatform.buildRustPackage {
       CLI utils in Rust. This repo is to aggregate the GNU coreutils rewrites.
     '';
     homepage = "https://github.com/uutils/coreutils";
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ siraben SuperSandro2000 ];
     license = licenses.mit;
     platforms = platforms.unix;
   };
diff --git a/pkgs/tools/misc/uwuify/default.nix b/pkgs/tools/misc/uwuify/default.nix
new file mode 100644
index 00000000000..b276abf3e5c
--- /dev/null
+++ b/pkgs/tools/misc/uwuify/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "uwuify";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "Daniel-Liu-c0deb0t";
+    repo = "uwu";
+    rev = "v${version}";
+    sha256 = "sha256-MzXObbxccwEG7egmQMCdhUukGqZS+NgbYwZjTaqME7I=";
+  };
+
+  cargoSha256 = "sha256-1BoB7K/dWy3AbogvHIDLrdPD7K54EISvn4RVU5RLTi4=";
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  meta = with lib; {
+    description = "Fast text uwuifier";
+    homepage = "https://github.com/Daniel-Liu-c0deb0t/uwu";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+  };
+}
diff --git a/pkgs/tools/misc/vcs_query/default.nix b/pkgs/tools/misc/vcs_query/default.nix
index da42b35391b..7e1387df1f8 100644
--- a/pkgs/tools/misc/vcs_query/default.nix
+++ b/pkgs/tools/misc/vcs_query/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3, fetchFromGitHub }:
+{ lib, stdenv, python3, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "vcs_query";
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     patchPythonScript $out/bin/vcs_query
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/mageta/vcs_query";
     description = "eMail query-command to use vCards in mutt and Vim";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/vector/default.nix b/pkgs/tools/misc/vector/default.nix
index ddbd78c699c..d9e454d4ab8 100644
--- a/pkgs/tools/misc/vector/default.nix
+++ b/pkgs/tools/misc/vector/default.nix
@@ -1,41 +1,86 @@
-{ stdenv, lib, fetchFromGitHub, rustPlatform
-, openssl, pkg-config, protobuf
-, Security, libiconv, rdkafka
+{ stdenv
+, lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, llvmPackages
+, openssl
+, protobuf
+, rdkafka
+, oniguruma
+, zstd
+, Security
+, libiconv
+, coreutils
+, CoreServices
 , tzdata
-
-, 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" ])
+  # kafka is optional but one of the most used features
+, enableKafka ? true
+  # TODO investigate adding "api" "api-client" "vrl-cli" and various "vendor-*"
+  # "disk-buffer" is using leveldb TODO: investigate how useful
+  # it would be, perhaps only for massive scale?
+, features ? ([ "sinks" "sources" "transforms" ]
+    # the second feature flag is passed to the rdkafka dependency
+    # building on linux fails without this feature flag (both x86_64 and AArch64)
+    ++ (lib.optionals enableKafka [ "rdkafka-plain" "rdkafka/dynamic_linking" ])
+    ++ (lib.optional stdenv.targetPlatform.isUnix "unix"))
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "vector";
-  version = "0.8.1";
+  version = "0.15.0";
 
   src = fetchFromGitHub {
-    owner  = "timberio";
-    repo   = pname;
-    rev    = "v${version}";
-    sha256 = "0k15scvjcg2v4z80vq27yrn2wm50fp8xj8lga2czzs0zxhlv21nl";
+    owner = "timberio";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-8ZsZyV6zlMiNTVYPwqQi7F1OJ4hV33IqrrGkvUb8JaY=";
   };
 
-  cargoSha256 = "1al8jzjxjhxwb5n1d52pvl59d11g0bdg2dcw8ir2nclya1w68f2w";
+  cargoSha256 = "sha256-t6KeyBwIfCQTfaennFiFX3K+8unFOsduBP7nRbAo9wI=";
   nativeBuildInputs = [ pkg-config ];
-  buildInputs = [ openssl protobuf rdkafka ]
-                ++ stdenv.lib.optional stdenv.isDarwin [ Security libiconv ];
+  buildInputs = [ oniguruma openssl protobuf rdkafka zstd ]
+    ++ lib.optional stdenv.isDarwin [ Security libiconv coreutils CoreServices ];
 
   # needed for internal protobuf c wrapper library
-  PROTOC="${protobuf}/bin/protoc";
-  PROTOC_INCLUDE="${protobuf}/include";
+  PROTOC = "${protobuf}/bin/protoc";
+  PROTOC_INCLUDE = "${protobuf}/include";
+  RUSTONIG_SYSTEM_LIBONIG = true;
+  LIBCLANG_PATH = "${llvmPackages.libclang.lib}/lib";
+
+  cargoBuildFlags = [ "--no-default-features" "--features" (lib.concatStringsSep "," features) ];
+  # TODO investigate compilation failure for tests
+  # dev dependency includes httpmock which depends on iashc which depends on curl-sys with http2 feature enabled
+  # compilation fails because of a missing http2 include
+  doCheck = !stdenv.isDarwin;
+  checkPhase = "TZDIR=${tzdata}/share/zoneinfo cargo test --no-default-features --features ${lib.concatStringsSep "," features} -- --test-threads 1";
+
+  # recent overhauls of DNS support in 0.9 mean that we try to resolve
+  # vector.dev during the checkPhase, which obviously isn't going to work.
+  # these tests in the DNS module are trivial though, so stubbing them out is
+  # fine IMO.
+  #
+  # the geoip transform yields maxmindb.so which contains references to rustc.
+  # neither figured out why the shared object is included in the output
+  # (it doesn't seem to be a runtime dependencies of the geoip transform),
+  # nor do I know why it depends on rustc.
+  # However, in order for the closure size to stay at a reasonable level,
+  # transforms-geoip is patched out of Cargo.toml for now - unless explicitly asked for.
+  postPatch = ''
+    substituteInPlace ./src/dns.rs \
+      --replace "#[tokio::test]" ""
+
+    ${lib.optionalString (!builtins.elem "transforms-geoip" features) ''
+        substituteInPlace ./Cargo.toml --replace '"transforms-geoip",' ""
+    ''}
+  '';
 
-  cargoBuildFlags = [ "--no-default-features" "--features" "${lib.concatStringsSep "," features}" ];
-  checkPhase = "TZDIR=${tzdata}/share/zoneinfo cargo test --no-default-features --features ${lib.concatStringsSep "," features},disable-resolv-conf -- --test-threads 1";
+  passthru = { inherit features; };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A high-performance logs, metrics, and events router";
-    homepage    = "https://github.com/timberio/vector";
-    license     = with licenses; [ asl20 ];
-    maintainers = with maintainers; [ thoughtpolice ];
+    homepage = "https://github.com/timberio/vector";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ thoughtpolice happysalada ];
   };
 }
diff --git a/pkgs/tools/misc/veikk-linux-driver-gui/default.nix b/pkgs/tools/misc/veikk-linux-driver-gui/default.nix
new file mode 100644
index 00000000000..a833846dd00
--- /dev/null
+++ b/pkgs/tools/misc/veikk-linux-driver-gui/default.nix
@@ -0,0 +1,32 @@
+{ lib, mkDerivation, fetchFromGitHub, gnumake, qmake }:
+
+mkDerivation rec {
+  name = "veikk-linux-driver-gui";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "jlam55555";
+    repo = name;
+    rev = "v${version}";
+    sha256 = "02g1q79kwjlzg95w38a1d7nxvcry8xcsvhax2js4c7xqvzhkki5j";
+  };
+
+  nativeBuildInputs = [ qmake ];
+
+  postBuild = ''
+    make all clean
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp veikk-linux-driver-gui $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Configuration tool for the VEIKK Linux driver";
+    homepage = "https://github.com/jlam55555/veikk-linux-driver-gui/";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ nicbk ];
+  };
+}
diff --git a/pkgs/tools/misc/venus/default.nix b/pkgs/tools/misc/venus/default.nix
deleted file mode 100644
index 944b6e4ef64..00000000000
--- a/pkgs/tools/misc/venus/default.nix
+++ /dev/null
@@ -1,53 +0,0 @@
-{ 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/pkgs/tools/misc/via/default.nix b/pkgs/tools/misc/via/default.nix
new file mode 100644
index 00000000000..5667c8a4c46
--- /dev/null
+++ b/pkgs/tools/misc/via/default.nix
@@ -0,0 +1,41 @@
+{ lib, fetchurl, appimageTools }:
+
+let
+  pname = "via";
+  version = "1.3.1";
+  name = "${pname}-${version}";
+  nameExecutable = pname;
+  src = fetchurl {
+    url = "https://github.com/the-via/releases/releases/download/v${version}/via-${version}-linux.AppImage";
+    name = "via-${version}-linux.AppImage";
+    sha256 = "d2cd73d280a265149fedb24161ec7c575523596c4d30898ad6b5875e09b3f34a";
+  };
+  appimageContents = appimageTools.extractType2 { inherit name src; };
+in appimageTools.wrapType2 {
+  inherit name src;
+
+  profile = ''
+    # Skip prompt to add udev rule.
+    # On NixOS you can add this rule with `services.udev.packages = [ pkgs.via ];`.
+    export DISABLE_SUDO_PROMPT=1
+  '';
+
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+    install -m 444 -D ${appimageContents}/via.desktop -t $out/share/applications
+    substituteInPlace $out/share/applications/via.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+    cp -r ${appimageContents}/usr/share/icons $out/share
+
+    mkdir -p $out/etc/udev/rules.d
+    echo 'KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666", TAG+="uaccess", TAG+="udev-acl"' > $out/etc/udev/rules.d/92-viia.rules
+  '';
+
+  meta = with lib; {
+    description = "Yet another keyboard configurator";
+    homepage = "https://caniusevia.com/";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ angustrau ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/pkgs/tools/misc/vial/default.nix b/pkgs/tools/misc/vial/default.nix
new file mode 100644
index 00000000000..c8d38d826d1
--- /dev/null
+++ b/pkgs/tools/misc/vial/default.nix
@@ -0,0 +1,33 @@
+{ lib, fetchurl, appimageTools }:
+let
+  name = "vial-${version}";
+  version = "0.4";
+  pname = "Vial";
+
+  src = fetchurl {
+    url = "https://github.com/vial-kb/vial-gui/releases/download/v${version}/${pname}-v${version}-x86_64.AppImage";
+    sha256 = "sha256-4EDEVSqjQ6Ybqx4BoNwE4pT5yFLYM05FBHc5deQU9f8=";
+  };
+
+  appimageContents = appimageTools.extractType2 { inherit name src; };
+in
+appimageTools.wrapType2 {
+  inherit name src;
+
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+    install -m 444 -D ${appimageContents}/${pname}.desktop -t $out/share/applications
+    cp -r ${appimageContents}/usr/share/icons $out/share
+
+    mkdir -p $out/etc/udev/rules.d/ # https://get.vial.today/getting-started/linux-udev.html
+    echo 'KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666", TAG+="uaccess", TAG+="udev-acl"' > $out/etc/udev/rules.d/92-viia.rules
+  '';
+
+  meta = with lib; {
+    description = "An Open-source cross-platform (Windows, Linux and Mac) GUI and a QMK fork for configuring your keyboard in real time";
+    homepage = "https://get.vial.today";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ kranzes ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/pkgs/tools/misc/vimer/default.nix b/pkgs/tools/misc/vimer/default.nix
index 5bef80adcaf..bbab2d64bb0 100644
--- a/pkgs/tools/misc/vimer/default.nix
+++ b/pkgs/tools/misc/vimer/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   version = "0.2.0";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
     chmod +x $out/bin/vimer
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/susam/vimer";
     description = ''
       A convenience wrapper for gvim/mvim --remote(-tab)-silent to open files
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
     '';
     license = licenses.mit;
     maintainers = [ maintainers.matthiasbeyer ];
-    platforms = platforms.linux;
+    platforms = platforms.all;
   };
 
 }
diff --git a/pkgs/tools/misc/vimpager/build.nix b/pkgs/tools/misc/vimpager/build.nix
index 60389f6862b..ec1766d7af3 100644
--- a/pkgs/tools/misc/vimpager/build.nix
+++ b/pkgs/tools/misc/vimpager/build.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , coreutils
 , sharutils
@@ -30,7 +30,7 @@ stdenv.mkDerivation {
   '';
 
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Use Vim as PAGER";
     homepage    = "https://www.vim.org/scripts/script.php?script_id=1723";
     license     = with licenses; [ bsd2 mit vim ];
diff --git a/pkgs/tools/misc/vimv/default.nix b/pkgs/tools/misc/vimv/default.nix
new file mode 100644
index 00000000000..a36c9548462
--- /dev/null
+++ b/pkgs/tools/misc/vimv/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenvNoCC, fetchFromGitHub }:
+
+stdenvNoCC.mkDerivation {
+  pname = "vimv";
+  version = "unstable-2019-10-31";
+
+  src = fetchFromGitHub {
+    owner = "thameera";
+    repo = "vimv";
+    rev = "4152496c1946f68a13c648fb7e583ef23dac4eb8";
+    sha256 = "1fsrfx2gs6bqx7wk7pgcji2i2x4alqpsi66aif4kqvnpqfhcfzjd";
+  };
+
+  installPhase = ''
+    install -d $out/bin
+    install $src/vimv $out/bin/vimv
+    patchShebangs $out/bin/vimv
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/thameera/vimv";
+    description = "Batch-rename files using Vim";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.kmein ];
+  };
+}
diff --git a/pkgs/tools/misc/vimwiki-markdown/default.nix b/pkgs/tools/misc/vimwiki-markdown/default.nix
index b85bb087660..18adf99b9c9 100644
--- a/pkgs/tools/misc/vimwiki-markdown/default.nix
+++ b/pkgs/tools/misc/vimwiki-markdown/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib
 , buildPythonApplication
 , fetchPypi
 , markdown
@@ -6,12 +6,12 @@
 }:
 
 buildPythonApplication rec {
-  version = "0.3.0";
+  version = "0.3.3";
   pname = "vimwiki-markdown";
 
   src = fetchPypi {
     inherit version pname;
-    sha256 = "1icfnc623f9pyn59wgb76g0fnsx41s87q69x354qy17gw23bxabx";
+    sha256 = "ee4ef08f7e4df27f67ffebb5fa413a7cf4fad967a248c1c75d48b00122a5b945";
   };
 
   propagatedBuildInputs= [
@@ -19,7 +19,7 @@ buildPythonApplication rec {
     pygments
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Vimwiki markdown plugin";
     homepage = "https://github.com/WnP/vimwiki_markdown";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/vivid/default.nix b/pkgs/tools/misc/vivid/default.nix
index c8831a6fca5..d0a6114316f 100644
--- a/pkgs/tools/misc/vivid/default.nix
+++ b/pkgs/tools/misc/vivid/default.nix
@@ -1,28 +1,19 @@
-{ stdenv, fetchFromGitHub, rustPlatform }:
+{ lib, fetchFromGitHub, rustPlatform }:
 
 rustPlatform.buildRustPackage rec {
   pname = "vivid";
-  version = "0.5.0";
+  version = "0.7.0";
 
   src = fetchFromGitHub {
     owner = "sharkdp";
     repo = pname;
     rev = "v${version}";
-    sha256 = "00xxk1ipr3hndd717q52j7s2wfxis1p4glaa9lvp72gwwzmv5k9w";
+    sha256 = "sha256-2rdNjpJrBuj6toLFzFJScNh6od5qUhkSaZF+NbPBlQA=";
   };
 
-  postPatch = ''
-    substituteInPlace src/main.rs --replace /usr/share $out/share
-  '';
+  cargoSha256 = "sha256-1aox1eiF3hu5guBjRcM3qb6mHJOutI+yargW7X4cFfg=";
 
-  cargoSha256 = "1l34i7qalid9mlcbpqhbb2bxgn2ylb2lwki4c0hf4kkq646ql0n1";
-
-  postInstall = ''
-    mkdir -p $out/share/${pname}
-    cp -rv config/* themes $out/share/${pname}
-  '';
-
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/misc/vix/default.nix b/pkgs/tools/misc/vix/default.nix
new file mode 100644
index 00000000000..cf060218889
--- /dev/null
+++ b/pkgs/tools/misc/vix/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, SDL }:
+
+stdenv.mkDerivation {
+  pname = "vix";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "BatchDrake";
+    repo = "vix";
+    rev = "824b6755157a0f7430a0be0af454487d1492204d";
+    sha256 = "1y0a2sajkrsg36px21b8lgx1irf0pyj7hccyd6k806bm4zhgxw1z";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ SDL ];
+
+  meta = with lib; {
+    description = "Visual Interface heXadecimal dump ";
+    homepage = "http://actinid.org/vix/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.ehmry ];
+  };
+}
diff --git a/pkgs/tools/misc/vmtouch/default.nix b/pkgs/tools/misc/vmtouch/default.nix
index 0f46d8141f1..276389205f0 100644
--- a/pkgs/tools/misc/vmtouch/default.nix
+++ b/pkgs/tools/misc/vmtouch/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchFromGitHub, perl}:
+{lib, stdenv, fetchFromGitHub, perl}:
 
 stdenv.mkDerivation rec {
   pname = "vmtouch";
@@ -19,8 +19,8 @@ stdenv.mkDerivation rec {
     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;
+    license = lib.licenses.bsd3;
+    maintainers = [ lib.maintainers.garrison ];
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/void/default.nix b/pkgs/tools/misc/void/default.nix
index 21df532f948..7057fed8ca1 100644
--- a/pkgs/tools/misc/void/default.nix
+++ b/pkgs/tools/misc/void/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform }:
+{ lib, fetchFromGitHub, rustPlatform }:
 
 rustPlatform.buildRustPackage rec {
   pname = "void";
@@ -14,9 +14,9 @@ rustPlatform.buildRustPackage rec {
   # The tests are long-running and not that useful
   doCheck = false;
 
-  cargoSha256 = "0fnkcjxcsiw9j0ibh4z7zy0m6r5d84q5hvr2darwpckbn9ryrh3k";
+  cargoSha256 = "1wh1yb02w5afghd19i2s0v8mq4lq20djsljrr44xciq68bqfdcp0";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Terminal-based personal organizer";
     homepage = "https://github.com/spacejam/void";
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/vorbisgain/default.nix b/pkgs/tools/misc/vorbisgain/default.nix
index fdb283d4dce..7aebfeab2ce 100644
--- a/pkgs/tools/misc/vorbisgain/default.nix
+++ b/pkgs/tools/misc/vorbisgain/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, unzip, libogg, libvorbis }:
+{ lib, stdenv, fetchurl, libogg, libvorbis }:
 
 stdenv.mkDerivation rec {
   name = "vorbisgain-0.37";
@@ -10,18 +10,18 @@ stdenv.mkDerivation rec {
 
   hardeningDisable = [ "format" ];
 
-  buildInputs = [ unzip libogg libvorbis ];
+  buildInputs = [ libogg libvorbis ];
 
   patchPhase = ''
     chmod -v +x configure
     configureFlags="--mandir=$out/share/man"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms = platforms.unix;
     maintainers = with maintainers; [ pSub ];
   };
 }
diff --git a/pkgs/tools/misc/vsh/default.nix b/pkgs/tools/misc/vsh/default.nix
new file mode 100644
index 00000000000..13a3df4d6b9
--- /dev/null
+++ b/pkgs/tools/misc/vsh/default.nix
@@ -0,0 +1,26 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "vsh";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "fishi0x01";
+    repo = "vsh";
+    rev = "v${version}";
+    sha256 = "059zzsg94287sxlk5clz6in7jscqaq530c84xqgy537f6cq3vr2p";
+  };
+
+  # vendor directory is part of repository
+  vendorSha256 = null;
+
+  # make sure version gets set at compile time
+  buildFlagsArray = [ "-ldflags=-s -w -X main.vshVersion=v${version}" ];
+
+  meta = with lib; {
+    description = "HashiCorp Vault interactive shell";
+    homepage = "https://github.com/fishi0x01/vsh";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fishi0x01 ];
+  };
+}
diff --git a/pkgs/tools/misc/vttest/default.nix b/pkgs/tools/misc/vttest/default.nix
index 6be05cf53a2..a78b6856964 100644
--- a/pkgs/tools/misc/vttest/default.nix
+++ b/pkgs/tools/misc/vttest/default.nix
@@ -1,18 +1,18 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "vttest";
-  version = "20200610";
+  version = "20210210";
 
   src = fetchurl {
     urls = [
       "https://invisible-mirror.net/archives/${pname}/${pname}-${version}.tgz"
       "ftp://ftp.invisible-island.net/${pname}/${pname}-${version}.tgz"
     ];
-    sha256 = "0181lk999gfqk8pkd4yx0qrz9r3k9a0z0i50wcayp7z1n1ivqllb";
+    sha256 = "sha256-D5ii4wWYKRXxUgmEw+hpjjrNUI7iEHEVKMifWn6n8EY=";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tests the compatibility so-called 'VT100-compatible' terminals";
     homepage = "https://invisible-island.net/vttest/";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/wacomtablet/default.nix b/pkgs/tools/misc/wacomtablet/default.nix
index aa631d44114..5ff2800496a 100644
--- a/pkgs/tools/misc/wacomtablet/default.nix
+++ b/pkgs/tools/misc/wacomtablet/default.nix
@@ -1,4 +1,4 @@
-{ lib, mkDerivation, fetchurl, extra-cmake-modules, qtx11extras,
+{ lib, mkDerivation, fetchurl, fetchpatch, extra-cmake-modules, qtx11extras,
   plasma-workspace, libwacom, xf86_input_wacom
 }:
 
@@ -9,6 +9,12 @@ mkDerivation rec {
     url = "mirror://kde/stable/${pname}/${version}/${pname}-${version}.tar.xz";
     sha256 = "197pwpl87gqlnza36bp68jvw8ww25znk08acmi8bpz7n84xfc368";
   };
+  patches = [
+    (fetchpatch {
+      url = "https://invent.kde.org/system/wacomtablet/commit/4f73ff02b3efd5e8728b18fcf1067eca166704ee.patch";
+      sha256 = "0185gbh1vywfz8a3wnvncmzdk0dd189my4bzimkbh85rlrqq2nf8";
+    })
+  ];
 
   nativeBuildInputs = [ extra-cmake-modules ];
   buildInputs = [
@@ -22,7 +28,7 @@ mkDerivation rec {
       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/";
+    homepage = "https://invent.kde.org/system/wacomtablet";
     license = lib.licenses.gpl2;
     maintainers = [ lib.maintainers.Thra11 ];
     platforms = lib.platforms.linux;
diff --git a/pkgs/tools/misc/wagyu/default.nix b/pkgs/tools/misc/wagyu/default.nix
index 8ed952a82ce..59748992dae 100644
--- a/pkgs/tools/misc/wagyu/default.nix
+++ b/pkgs/tools/misc/wagyu/default.nix
@@ -1,4 +1,4 @@
-{ lib, rustPlatform, fetchFromGitHub }:
+{ lib, stdenv, rustPlatform, fetchFromGitHub, Security }:
 
 rustPlatform.buildRustPackage rec {
   pname = "wagyu";
@@ -11,7 +11,9 @@ rustPlatform.buildRustPackage rec {
     sha256 = "1646j0lgg3hhznifvbkvr672p3yqlcavswijawaxq7n33ll8vmcn";
   };
 
-  cargoSha256 = "16d1b3pamkg29nq80n6cbzc4zl9z3cgfvdxjkr2z4xrnzmkn1ysi";
+  cargoSha256 = "10al0j8ak95x4d85lzphgq8kmdnb809l6gahfp5miyvsfd4dxmpi";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
 
   meta = with lib; {
     description = "Rust library for generating cryptocurrency wallets";
diff --git a/pkgs/tools/misc/wakatime/default.nix b/pkgs/tools/misc/wakatime/default.nix
index 4e0e9193fe7..e8bd12d567b 100644
--- a/pkgs/tools/misc/wakatime/default.nix
+++ b/pkgs/tools/misc/wakatime/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3Packages, fetchFromGitHub, glibcLocales }:
+{ lib, python3Packages, fetchFromGitHub, glibcLocales }:
 
 with python3Packages;
 buildPythonApplication rec {
@@ -22,7 +22,7 @@ buildPythonApplication rec {
     pytest tests
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit (src.meta) homepage;
     description = "WakaTime command line interface";
     longDescription = ''
diff --git a/pkgs/tools/misc/watchexec/default.nix b/pkgs/tools/misc/watchexec/default.nix
index 8e3db232feb..ce525dd98dd 100644
--- a/pkgs/tools/misc/watchexec/default.nix
+++ b/pkgs/tools/misc/watchexec/default.nix
@@ -1,32 +1,31 @@
-{ stdenv, rustPlatform, fetchFromGitHub, CoreServices, installShellFiles }:
+{ lib, stdenv, rustPlatform, fetchFromGitHub, CoreServices, installShellFiles, libiconv }:
 
 rustPlatform.buildRustPackage rec {
   pname = "watchexec";
-  version = "1.14.0";
+  version = "1.15.1";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = version;
-    sha256 = "0nvd8x60nkk8izqy8m8m1fi0x48s9sjh4zfl8d2ig46lqc8n5cpm";
+    sha256 = "1xznhfljvsvc0ykv5h1wg31n93v96lvhbxfhavxivq3b0xh5vxrw";
   };
 
-  cargoSha256 = "08pv7nr471apzy77da1pffdmx2dgf5mbj09302cfmf8sj49saal6";
+  cargoSha256 = "00dampnsnpzmchjcn0j5zslx17i0qgrv99gq772n0683m1l2lfq3";
 
   nativeBuildInputs = [ installShellFiles ];
 
-  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ CoreServices ];
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices libiconv ];
 
   postInstall = ''
     installManPage doc/watchexec.1
     installShellCompletion --zsh --name _watchexec completions/zsh
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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/pkgs/tools/misc/websocat/default.nix b/pkgs/tools/misc/websocat/default.nix
index c936b159963..7ba2accc678 100644
--- a/pkgs/tools/misc/websocat/default.nix
+++ b/pkgs/tools/misc/websocat/default.nix
@@ -1,34 +1,40 @@
-{ stdenv, fetchFromGitHub, pkgconfig, openssl, rustPlatform, Security, makeWrapper, bash }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, openssl, rustPlatform, libiconv
+, Security, makeWrapper, bash }:
 
 rustPlatform.buildRustPackage rec {
   pname = "websocat";
-  version = "1.6.0";
+  version = "1.8.0";
 
   src = fetchFromGitHub {
     owner = "vi";
-    repo = "websocat";
+    repo = pname;
     rev = "v${version}";
-    sha256 = "0iilq96bxcb2fsljvlgy47pg514w0jf72ckz39yy3k0gwc1yfcja";
+    sha256 = "sha256-jwoWxK4phBqhIeo3+oRnpGsfvtn9gTR1ryd4N+0Lmbw=";
   };
 
   cargoBuildFlags = [ "--features=ssl" ];
-  cargoSha256 = "1hsms8rlnds8npr8m0dm21h04ci5ljda09pqb598v7ny3j2dldiq";
+  cargoSha256 = "sha256-+3SG1maarY4DJ4+QiYGwltGLksOoOhKtcqstRwgzi2k=";
 
-  nativeBuildInputs = [ pkgconfig makeWrapper ];
-  buildInputs = [ openssl ] ++ stdenv.lib.optional stdenv.isDarwin Security;
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ libiconv Security ];
+
+  # Needed to get openssl-sys to use pkg-config.
+  OPENSSL_NO_VENDOR=1;
 
   # The wrapping is required so that the "sh-c" option of websocat works even
   # if sh is not in the PATH (as can happen, for instance, when websocat is
   # started as a systemd service).
   postInstall = ''
     wrapProgram $out/bin/websocat \
-      --prefix PATH : ${stdenv.lib.makeBinPath [ bash ]}
+      --prefix PATH : ${lib.makeBinPath [ bash ]}
   '';
 
-  meta = with stdenv.lib; {
-    description = "Command-line client for WebSockets (like netcat/socat)";
+  meta = with lib; {
     homepage = "https://github.com/vi/websocat";
+    description = "Command-line client for WebSockets (like netcat/socat)";
+    changelog = "https://github.com/vi/websocat/releases/tag/v${version}";
     license = licenses.mit;
-    maintainers = with maintainers; [ thoughtpolice filalex77 ];
+    maintainers = with maintainers; [ thoughtpolice Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/misc/wemux/default.nix b/pkgs/tools/misc/wemux/default.nix
new file mode 100644
index 00000000000..0eee60187f2
--- /dev/null
+++ b/pkgs/tools/misc/wemux/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, lib, fetchFromGitHub, tmux, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "wemux";
+  version = "unstable-2021-04-16";
+
+  src = fetchFromGitHub {
+    owner = "zolrath";
+    repo = "wemux";
+    rev = "01c6541f8deceff372711241db2a13f21c4b210c";
+    sha256 = "1y962nzvs7sf720pl3wa582l6irxc8vavd0gp4ag4243b2gs4qvm";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+
+    substituteInPlace wemux \
+        --replace tmux ${tmux}/bin/tmux \
+        --replace "/usr/local/etc" "/etc"
+
+    substituteInPlace man/wemux.1 --replace "/usr/local/etc" "/etc"
+
+    install -Dm755 wemux -t $out/bin
+    installManPage man/wemux.1
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/zolrath/wemux";
+    description = "Multi-user tmux made easy";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ bsima ];
+  };
+}
diff --git a/pkgs/tools/misc/wimboot/default.nix b/pkgs/tools/misc/wimboot/default.nix
index a63fa410634..04dbca9ed63 100644
--- a/pkgs/tools/misc/wimboot/default.nix
+++ b/pkgs/tools/misc/wimboot/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fetchpatch, libbfd, zlib, libiberty }:
+{ lib, stdenv, fetchFromGitHub, fetchpatch, libbfd, zlib, libiberty }:
 
 stdenv.mkDerivation rec {
   pname = "wimboot";
@@ -14,12 +14,17 @@ stdenv.mkDerivation rec {
   NIX_CFLAGS_COMPILE = "-Wno-address-of-packed-member"; # Fails on gcc9
 
   patches = [
-    # Fix for newer binutils
+    # Fixes for newer binutils
+    # Add R_X86_64_PLT32 as known reloc target
     (fetchpatch {
-      url =
-        "https://github.com/ipxe/wimboot/commit/91be50c17d4d9f463109d5baafd70f9fdadd86db.patch";
+      url = "https://github.com/ipxe/wimboot/commit/91be50c17d4d9f463109d5baafd70f9fdadd86db.patch";
       sha256 = "113448n49hmk8nz1dxbhxiciwl281zwalvb8z5p9xfnjvibj8274";
     })
+    # Fix building with binutils 2.34 (bfd_get_section_* removed in favour of bfd_section_*)
+    (fetchpatch {
+      url = "https://github.com/ipxe/wimboot/commit/2f97e681703d30b33a4d5032a8025ab8b9f2de75.patch";
+      sha256 = "0476mp74jaq3k099b654al6yi2yhgn37d9biz0wv3ln2q1gy94yf";
+    })
   ];
 
   # We cannot use sourceRoot because the patch wouldn't apply
@@ -37,10 +42,10 @@ stdenv.mkDerivation rec {
     cp wimboot.x86_64.efi $out/share/wimboot
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://ipxe.org/wimboot";
     description = "Windows Imaging Format bootloader";
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
     maintainers = with maintainers; [ das_j ajs124 ];
     platforms = platforms.x86; # Fails on aarch64
   };
diff --git a/pkgs/tools/misc/wlc/default.nix b/pkgs/tools/misc/wlc/default.nix
new file mode 100644
index 00000000000..874e31ca6ef
--- /dev/null
+++ b/pkgs/tools/misc/wlc/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, python3
+}:
+
+with python3.pkgs;
+
+buildPythonPackage rec {
+  pname = "wlc";
+  version = "1.11";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256:0ysx250v2qycy1m3jj0wxmyf2f5n8fxf6br69vcbyq2cnqw609nx";
+  };
+
+  propagatedBuildInputs = [
+    argcomplete
+    python-dateutil
+    requests
+    pyxdg
+    pre-commit
+    responses
+    twine
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  meta = with lib; {
+    description = "wlc is a Weblate commandline client using Weblate's REST API.";
+    homepage = "https://github.com/WeblateOrg/wlc";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ paperdigits ];
+  };
+}
diff --git a/pkgs/tools/misc/woeusb/default.nix b/pkgs/tools/misc/woeusb/default.nix
index 4c235b4866f..ade752e09f6 100644
--- a/pkgs/tools/misc/woeusb/default.nix
+++ b/pkgs/tools/misc/woeusb/default.nix
@@ -1,45 +1,38 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, makeWrapper
-, coreutils, dosfstools, findutils, gawk, gnugrep, grub2_light, ncurses, ntfs3g, parted, p7zip, utillinux, wget
-, wxGTK30 }:
+{ lib, stdenv, fetchFromGitHub, installShellFiles, makeWrapper
+, coreutils, dosfstools, findutils, gawk, gnugrep, grub2_light, ncurses, ntfs3g, parted, p7zip, util-linux, wimlib, wget }:
 
 stdenv.mkDerivation rec {
-  version = "3.3.1";
+  version = "5.1.0";
   pname = "woeusb";
 
   src = fetchFromGitHub {
-    owner = "slacka";
+    owner = "WoeUSB";
     repo = "WoeUSB";
     rev = "v${version}";
-    sha256 = "1hbr88sr943s4yqdvbny543jvgvnsa622wq4cmwd23hjsfcrvyiv";
+    sha256 = "1qakk7lnj71m061rn72nabk4c37vw0vkx2a28xgxas8v8cwvkkam";
   };
 
-  patches = [ ./remove-workaround.patch ];
-
-  nativeBuildInputs = [ autoreconfHook makeWrapper ];
-  buildInputs = [ wxGTK30 ];
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
 
   postPatch = ''
     # Emulate version smudge filter (see .gitattributes, .gitconfig).
-    for file in configure.ac debian/changelog src/woeusb src/woeusb.1 src/woeusbgui.1; do
+    for file in sbin/woeusb share/man/man1/woeusb.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/
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mv sbin/woeusb $out/bin
+    installManPage share/man/man1/woeusb.1
 
-    # 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 ]}'
+      --set PATH '${lib.makeBinPath [ coreutils dosfstools findutils gawk gnugrep grub2_light ncurses ntfs3g parted p7zip util-linux wget wimlib ]}'
+
+    runHook postInstall
   '';
 
   doInstallCheck = true;
@@ -50,11 +43,11 @@ stdenv.mkDerivation rec {
     [ "$out_version" = '${version}' ]
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Create bootable USB disks from Windows ISO images";
-    homepage = "https://github.com/slacka/WoeUSB";
-    license = licenses.gpl3;
-    maintainers = with maintainers; [ bjornfor gnidorah ];
+    homepage = "https://github.com/WoeUSB/WoeUSB";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ bjornfor ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/woeusb/remove-workaround.patch b/pkgs/tools/misc/woeusb/remove-workaround.patch
deleted file mode 100644
index 3550002dfed..00000000000
--- a/pkgs/tools/misc/woeusb/remove-workaround.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-https://github.com/slacka/WoeUSB/issues/267
-
-diff --git a/src/woeusb b/src/woeusb
-index 8cb292c..c017dbf 100755
---- a/src/woeusb
-+++ b/src/woeusb
-@@ -1661,6 +1661,8 @@ workaround_support_windows_7_uefi_boot(){
- ## - 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(){
-+	return 0
-+
- 	util_check_function_parameters_quantity 1 "${#}"
- 	local -r mode="${1}"
- 
diff --git a/pkgs/tools/misc/woof/default.nix b/pkgs/tools/misc/woof/default.nix
index e00634dd53e..3f13cd496c5 100644
--- a/pkgs/tools/misc/woof/default.nix
+++ b/pkgs/tools/misc/woof/default.nix
@@ -1,31 +1,32 @@
-{ stdenv, fetchurl, python }:
+{ lib, stdenv, fetchFromGitHub, python3 }:
 
 stdenv.mkDerivation rec {
-  version = "2012-05-31";
+  version = "2020-12-17";
   pname = "woof";
 
-  src = fetchurl {
-    url = "http://www.home.unix-ag.org/simon/woof-${version}.py";
-    sha256 = "d84353d07f768321a1921a67193510bf292cf0213295e8c7689176f32e945572";
+  src = fetchFromGitHub {
+    owner = "simon-budig";
+    repo = "woof";
+    rev = "4aab9bca5b80379522ab0bdc5a07e4d652c375c5";
+    sha256 = "0ypd2fs8isv6bqmlrdl2djgs5lnk91y1c3rn4ar6sfkpsqp9krjn";
   };
 
-  buildInputs = [ python ];
+  propagatedBuildInputs = [ python3 ];
 
   dontUnpack = true;
 
-  installPhase =
-    ''
-      mkdir -p $out/bin
-      cp $src $out/bin/woof
-      chmod +x $out/bin/woof
-    '';
+  installPhase = ''
+    mkdir -p $out/bin
+    cp $src/woof $out/bin/woof
+    chmod +x $out/bin/woof
+  '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
+    maintainers = with maintainers; [ matthiasbeyer ];
   };
 }
 
diff --git a/pkgs/tools/misc/wootility/default.nix b/pkgs/tools/misc/wootility/default.nix
index c07de47e477..a79f414a359 100644
--- a/pkgs/tools/misc/wootility/default.nix
+++ b/pkgs/tools/misc/wootility/default.nix
@@ -9,14 +9,14 @@
 }:
 let
   pname = "wootility";
-  version = "3.5.10";
+  version = "3.5.12";
 in
 appimageTools.wrapType2 rec {
   name = "${pname}-${version}";
 
   src = fetchurl {
     url = "https://s3.eu-west-2.amazonaws.com/wooting-update/wootility-linux-latest/wootility-${version}.AppImage";
-    sha256 = "1bhk4jcziis01lyn8dmx93abd6p41gmbrysphcd5810l7zcfz59y";
+    sha256 = "13bhckk25fzq9r9cdsg3yqjd4kn47asqdx8kw0in8iky4ri41vnc";
   };
 
   profile = ''
@@ -35,7 +35,7 @@ appimageTools.wrapType2 rec {
 
   meta = with lib; {
     homepage = "https://wooting.io/wootility";
-    description = "Wootility is customization and management software for Wooting keyboards.";
+    description = "A customization and management software for Wooting keyboards";
     platforms = [ "x86_64-linux" ];
     license = "unknown";
     maintainers = with maintainers; [ davidtwco ];
diff --git a/pkgs/tools/misc/wsl-open/default.nix b/pkgs/tools/misc/wsl-open/default.nix
new file mode 100644
index 00000000000..2b5808e3be9
--- /dev/null
+++ b/pkgs/tools/misc/wsl-open/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "wsl-open";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "4U6U57";
+    repo = "wsl-open";
+    rev = "v${version}";
+    sha256 = "1mwak846zh47p3pp4q5f54cw8d9qk61zn43q81j2pkcm35mv9lzg";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  installPhase = ''
+    install -m0755 -D wsl-open.sh $out/bin/wsl-open
+    installManPage wsl-open.1
+  '';
+
+  meta = with lib; {
+    description = "Open files with xdg-open from Windows Subsystem for Linux (WSL) in Windows applications";
+    homepage = "https://gitlab.com/4U6U57/wsl-open";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/pkgs/tools/misc/wv/default.nix b/pkgs/tools/misc/wv/default.nix
index 78affe34b58..32cdeaa2886 100644
--- a/pkgs/tools/misc/wv/default.nix
+++ b/pkgs/tools/misc/wv/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, zlib, imagemagick, libpng, glib, pkgconfig, libgsf
+{ lib, stdenv, fetchurl, zlib, imagemagick, libpng, glib, pkg-config, libgsf
 , libxml2, bzip2 }:
 
 stdenv.mkDerivation rec {
@@ -10,14 +10,14 @@ stdenv.mkDerivation rec {
     sha256 = "17f16lkdv1c3amaz2hagiicih59ynpp4786k1m2qa1sw68xhswsc";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   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;
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl2;
   };
 }
diff --git a/pkgs/tools/misc/wv2/default.nix b/pkgs/tools/misc/wv2/default.nix
index abac98d855f..c0f85b4b8de 100644
--- a/pkgs/tools/misc/wv2/default.nix
+++ b/pkgs/tools/misc/wv2/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, cmake, libgsf, glib, libxml2 }:
+{ lib, stdenv, fetchurl, pkg-config, cmake, libgsf, glib, libxml2 }:
 
 stdenv.mkDerivation rec {
   name = "wv2-0.4.2";
@@ -9,14 +9,14 @@ stdenv.mkDerivation rec {
 
   patches = [ ./fix-include.patch ];
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ cmake libgsf glib libxml2 ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ 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;
+    license = lib.licenses.lgpl2;
     homepage = "http://wvware.sourceforge.net";
   };
 }
diff --git a/pkgs/tools/misc/wyrd/default.nix b/pkgs/tools/misc/wyrd/default.nix
index e1c4e4fd2fc..491c362eed4 100644
--- a/pkgs/tools/misc/wyrd/default.nix
+++ b/pkgs/tools/misc/wyrd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, ocamlPackages, ncurses, remind }:
+{ lib, stdenv, fetchurl, ocamlPackages, ncurses, remind }:
 
 stdenv.mkDerivation rec {
   version = "1.4.6";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
 
   preferLocalBuild = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A text-based front-end to Remind";
     longDescription = ''
       Wyrd is a text-based front-end to Remind, a sophisticated
diff --git a/pkgs/tools/misc/x11idle/default.nix b/pkgs/tools/misc/x11idle/default.nix
index 5e64137cbf6..cd1c11dbdb6 100644
--- a/pkgs/tools/misc/x11idle/default.nix
+++ b/pkgs/tools/misc/x11idle/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libXScrnSaver, libX11 }:
+{ lib, stdenv, fetchurl, libXScrnSaver, libX11 }:
 
 stdenv.mkDerivation rec {
 
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
     gcc -lXss -lX11 $src -o $out/bin/x11idle
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = ''
       Compute consecutive idle time for current X11 session with millisecond resolution
     '';
diff --git a/pkgs/tools/misc/xburst-tools/default.nix b/pkgs/tools/misc/xburst-tools/default.nix
index 12acbcfbe1c..f3fdc7e2227 100644
--- a/pkgs/tools/misc/xburst-tools/default.nix
+++ b/pkgs/tools/misc/xburst-tools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, libusb-compat-0_1, libusb1, autoconf, automake, libconfuse, pkgconfig
+{ lib, stdenv, fetchgit, libusb-compat-0_1, libusb1, autoconf, automake, libconfuse, pkg-config
 , gccCross ? null
 }:
 
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
     sh autogen.sh
   '';
 
-  configureFlags = stdenv.lib.optionals (gccCross != null) [
+  configureFlags = lib.optionals (gccCross != null) [
     "--enable-firmware"
     "CROSS_COMPILE=${gccCross.targetPrefix}"
   ];
@@ -29,15 +29,15 @@ stdenv.mkDerivation {
   # Not to strip cross build binaries (this is for the gcc-cross-wrapper)
   dontCrossStrip = true;
 
-  nativeBuildInputs = [ autoconf automake pkgconfig ];
+  nativeBuildInputs = [ autoconf automake pkg-config ];
   buildInputs = [ libusb-compat-0_1 libusb1 libconfuse ] ++
-    stdenv.lib.optional (gccCross != null) gccCross;
+    lib.optional (gccCross != null) gccCross;
 
   meta = {
     description = "Qi tools to access the Ben Nanonote USB_BOOT mode";
-    license = stdenv.lib.licenses.gpl3;
+    license = lib.licenses.gpl3;
     homepage = "http://www.linux-mtd.infradead.org/";
-    maintainers = with stdenv.lib.maintainers; [viric];
-    platforms = stdenv.lib.platforms.x86_64;
+    maintainers = with lib.maintainers; [viric];
+    platforms = lib.platforms.x86_64;
   };
 }
diff --git a/pkgs/tools/misc/xcd/default.nix b/pkgs/tools/misc/xcd/default.nix
new file mode 100644
index 00000000000..7e340210419
--- /dev/null
+++ b/pkgs/tools/misc/xcd/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "xcd";
+  version = "1.2";
+
+  src = fetchurl {
+    url = "https://www.muppetlabs.com/~breadbox/pub/software/${pname}-${version}.tar.gz";
+    sha256 = "1cgwspy08q05rhxbp7m1yrrix252i9jzfcfbzmhdvlgf5bfpl25g";
+  };
+
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D $pname $out/bin/$pname
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Colorized hexdump tool";
+    homepage = "https://www.muppetlabs.com/~breadbox/software/xcd.html";
+    maintainers = [ maintainers.xfnw ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/xclip/default.nix b/pkgs/tools/misc/xclip/default.nix
index c1a015d3c09..6c5857f1c9a 100644
--- a/pkgs/tools/misc/xclip/default.nix
+++ b/pkgs/tools/misc/xclip/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, libXmu }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libXmu }:
 
 stdenv.mkDerivation rec {
   pname = "xclip";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/xcp/default.nix b/pkgs/tools/misc/xcp/default.nix
new file mode 100644
index 00000000000..907e39a3f27
--- /dev/null
+++ b/pkgs/tools/misc/xcp/default.nix
@@ -0,0 +1,25 @@
+{ rustPlatform, fetchFromGitHub, lib }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "xcp";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "tarka";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Kwt1qLuP63bIn0VY3oFEcbKh1GGBdObfOmtPV4DMQUU=";
+  };
+
+  # no such file or directory errors
+  doCheck = false;
+
+  cargoSha256 = "sha256-wFOXRQSOfmGB6Zmkqn7KoK+vyHeFKyGNx7Zf2zzPcE4=";
+
+  meta = with lib; {
+    description = "An extended cp(1)";
+    homepage = "https://github.com/tarka/xcp";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ legendofmiracles ];
+  };
+}
diff --git a/pkgs/tools/misc/xdaliclock/default.nix b/pkgs/tools/misc/xdaliclock/default.nix
index 3950e6bee28..7f453892934 100644
--- a/pkgs/tools/misc/xdaliclock/default.nix
+++ b/pkgs/tools/misc/xdaliclock/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libX11, xorgproto, libXt, libICE, libSM, libXext }:
+{ lib, stdenv, fetchurl, libX11, xorgproto, libXt, libICE, libSM, libXext }:
 
 stdenv.mkDerivation rec {
   pname = "xdaliclock";
@@ -19,9 +19,9 @@ stdenv.mkDerivation rec {
     mkdir -vp $out/bin $out/share/man/man1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A clock application that morphs digits when they are changed";
-    maintainers = with maintainers; [ raskin rycee ];
+    maintainers = with maintainers; [ raskin ];
     platforms = with platforms; linux ++ freebsd;
     license = licenses.free; #TODO BSD on Gentoo, looks like MIT
     downloadPage = "http://www.jwz.org/xdaliclock/";
diff --git a/pkgs/tools/misc/xdo/default.nix b/pkgs/tools/misc/xdo/default.nix
index f9928b6f140..31df9552acc 100644
--- a/pkgs/tools/misc/xdo/default.nix
+++ b/pkgs/tools/misc/xdo/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libxcb, xcbutil, xcbutilwm }:
+{ lib, stdenv, fetchFromGitHub, libxcb, xcbutil, xcbutilwm }:
 
 stdenv.mkDerivation rec {
    pname = "xdo";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
 
    buildInputs = [ libxcb xcbutilwm xcbutil ];
 
-   meta = with stdenv.lib; {
+   meta = with lib; {
      description = "Small X utility to perform elementary actions on windows";
      homepage = "https://github.com/baskerville/xdo";
      maintainers = with maintainers; [ meisternu ];
diff --git a/pkgs/tools/misc/xdummy/default.nix b/pkgs/tools/misc/xdummy/default.nix
index 7d7942f7ca9..227829346cd 100644
--- a/pkgs/tools/misc/xdummy/default.nix
+++ b/pkgs/tools/misc/xdummy/default.nix
@@ -1,4 +1,5 @@
-{ writeText, writeScriptBin, xorg, xkeyboard_config, runtimeShell }:
+{ writeText, writeScriptBin, xorg, xkeyboard_config, runtimeShell
+, unfreeFonts ? false, lib}:
 
 let
   xorgConfig = writeText "dummy-xorg.conf" ''
@@ -23,11 +24,13 @@ let
       XkbDir "${xkeyboard_config}/share/X11/xkb"
       FontPath "${xorg.fontadobe75dpi}/lib/X11/fonts/75dpi"
       FontPath "${xorg.fontadobe100dpi}/lib/X11/fonts/100dpi"
+      FontPath "${xorg.fontmiscmisc}/lib/X11/fonts/misc"
+      FontPath "${xorg.fontcursormisc}/lib/X11/fonts/misc"
+    ${lib.optionalString unfreeFonts ''
       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"
diff --git a/pkgs/tools/misc/xdxf2slob/default.nix b/pkgs/tools/misc/xdxf2slob/default.nix
index 00f1899f97a..28c952400f1 100644
--- a/pkgs/tools/misc/xdxf2slob/default.nix
+++ b/pkgs/tools/misc/xdxf2slob/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python3Packages }:
+{ lib, fetchFromGitHub, python3Packages }:
 
 python3Packages.buildPythonApplication {
   name = "xdxf2slob-unstable-2015-06-30";
@@ -12,11 +12,10 @@ python3Packages.buildPythonApplication {
 
   propagatedBuildInputs = [ python3Packages.PyICU python3Packages.slob ];
 
-  meta = with stdenv.lib; {
+  meta = with 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/pkgs/tools/misc/xflux/default.nix b/pkgs/tools/misc/xflux/default.nix
index adc3b87ffa7..92c00d7e44d 100644
--- a/pkgs/tools/misc/xflux/default.nix
+++ b/pkgs/tools/misc/xflux/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, libXxf86vm, libXext, libX11, libXrandr, gcc}:
+{lib, stdenv, fetchurl, libXxf86vm, libXext, libX11, libXrandr, gcc}:
 stdenv.mkDerivation {
   name = "xflux-2013-09-01";
   src = fetchurl {
@@ -6,7 +6,7 @@ stdenv.mkDerivation {
     sha256 = "cc50158fabaeee58c331f006cc1c08fd2940a126e99d37b76c8e878ef20c2021";
   };
 
-  libPath = stdenv.lib.makeLibraryPath [
+  libPath = lib.makeLibraryPath [
     gcc.cc
     libXxf86vm
     libXext
@@ -32,8 +32,8 @@ stdenv.mkDerivation {
       when the sun rises.
     '';
     homepage = "https://justgetflux.com/";
-    license = stdenv.lib.licenses.unfree;
-    platforms = stdenv.lib.platforms.linux;
-    maintainers = [ stdenv.lib.maintainers.paholg ];
+    license = lib.licenses.unfree;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.paholg ];
   };
 }
diff --git a/pkgs/tools/misc/xflux/gui.nix b/pkgs/tools/misc/xflux/gui.nix
index 03a458e818d..9acd4c442a7 100644
--- a/pkgs/tools/misc/xflux/gui.nix
+++ b/pkgs/tools/misc/xflux/gui.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub, buildPythonApplication, python3Packages, wrapGAppsHook
+{ lib, fetchFromGitHub, buildPythonApplication, python3Packages, wrapGAppsHook
 , xflux, librsvg, gtk3, gobject-introspection, pango, gdk-pixbuf, atk
-, pexpect, pyGtkGlade, pygobject3, pyxdg, libappindicator-gtk3
+, pexpect, pygobject3, pyxdg, libappindicator-gtk3
 }:
 buildPythonApplication rec {
   pname = "xflux-gui";
@@ -42,8 +42,8 @@ buildPythonApplication rec {
   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;
+    license = lib.licenses.unfree; # marked as unfree since the source code contains a copy of the unfree xflux binary
+    maintainers = [ lib.maintainers.sheenobu ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/xfstests/default.nix b/pkgs/tools/misc/xfstests/default.nix
index 5f6d2bb1278..769e23c389c 100644
--- a/pkgs/tools/misc/xfstests/default.nix
+++ b/pkgs/tools/misc/xfstests/default.nix
@@ -1,7 +1,7 @@
 { 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 }:
+, time, util-linux, which, writeScript, xfsprogs, runtimeShell }:
 
 stdenv.mkDerivation {
   name = "xfstests-2019-09-08";
@@ -96,11 +96,11 @@ stdenv.mkDerivation {
 
     export PATH=${lib.makeBinPath [acl attr bc e2fsprogs fio gawk keyutils
                                    libcap lvm2 perl procps killall quota
-                                   utillinux which xfsprogs]}:$PATH
+                                   util-linux which xfsprogs]}:$PATH
     exec ./check "$@"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Torture test suite for filesystems";
     homepage = "https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/misc/xiccd/default.nix b/pkgs/tools/misc/xiccd/default.nix
index 82759441a46..7569045fa4f 100644
--- a/pkgs/tools/misc/xiccd/default.nix
+++ b/pkgs/tools/misc/xiccd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, libX11, libXrandr, glib, colord }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, libX11, libXrandr, glib, colord }:
 
 stdenv.mkDerivation rec {
   pname = "xiccd";
@@ -11,10 +11,10 @@ stdenv.mkDerivation rec {
     sha256 = "159fyz5535lcabi5bzmxgmjdgxlqcjaiqgzr00mi3ax0i5fdldwn";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ libX11 libXrandr glib colord ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "X color profile daemon";
     homepage = "https://github.com/agalakhov/xiccd";
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/xilinx-bootgen/default.nix b/pkgs/tools/misc/xilinx-bootgen/default.nix
index e7aa30ac059..5d0c80c55bf 100644
--- a/pkgs/tools/misc/xilinx-bootgen/default.nix
+++ b/pkgs/tools/misc/xilinx-bootgen/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, openssl }:
+{ lib, stdenv, fetchFromGitHub, openssl }:
 
 stdenv.mkDerivation {
   pname = "xilinx-bootgen";
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
     install -Dm755 bootgen $out/bin/bootgen
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Generate Boot Images for Xilinx Zynq and ZU+ SoCs";
     longDescription = ''
       Bootgen for Xilinx Zynq and ZU+ SoCs, without code related to generating
diff --git a/pkgs/tools/misc/xjobs/default.nix b/pkgs/tools/misc/xjobs/default.nix
new file mode 100644
index 00000000000..5edb365a332
--- /dev/null
+++ b/pkgs/tools/misc/xjobs/default.nix
@@ -0,0 +1,65 @@
+{ lib, stdenv, fetchurl
+, flex, installShellFiles, ncurses, which
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xjobs";
+  version = "20200726";
+
+  src = fetchurl {
+    url = "mirror://sourceforge//xjobs/files/${pname}-${version}.tgz";
+    sha256 = "0ay6gn43pnm7r1jamwgpycl67bjg5n87ncl27jb01w2x6x70z0i3";
+  };
+
+  nativeBuildInputs = [
+    flex
+    installShellFiles
+    which
+  ];
+  buildInputs = [
+    ncurses
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+    ./${pname} -V
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/{bin,etc}
+    install -m755 ${pname} $out/bin/${pname}
+    install -m644 ${pname}.rc $out/etc/${pname}.rc
+    installManPage ${pname}.1
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A program which reads job descriptions line by line and executes them in parallel";
+    homepage = "https://www.maier-komor.de/xjobs.html";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.siriobalmelli ];
+    longDescription = ''
+      xjobs reads job descriptions line by line and executes them in parallel.
+
+      It limits the number of parallel executing jobs and starts new jobs when jobs finish.
+
+      Therefore, it combines the arguments from every input line with the utility
+      and arguments given on the command line.
+      If no utility is given as an argument to xjobs,
+      then the first argument on every job line will be used as utility.
+      To execute utility xjobs searches the directories given in the PATH environment variable
+      and uses the first file found in these directories.
+
+      xjobs is most useful on multi-processor/core machines when one needs to execute
+      several time consuming command several that could possibly be run in parallel.
+      With xjobs this can be achieved easily, and it is possible to limit the load
+      of the machine to a useful value.
+
+      It works similar to xargs, but starts several processes simultaneously
+      and gives only one line of arguments to each utility call.
+    '';
+  };
+}
diff --git a/pkgs/tools/misc/xmonad-log/default.nix b/pkgs/tools/misc/xmonad-log/default.nix
index 5dfbcdfad74..acd4a9e1d46 100644
--- a/pkgs/tools/misc/xmonad-log/default.nix
+++ b/pkgs/tools/misc/xmonad-log/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "xmonad-log";
@@ -15,7 +15,7 @@ buildGoPackage rec {
 
   goDeps = ./deps.nix;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "xmonad DBus monitoring solution";
     homepage = "https://github.com/xintron/xmonad-log";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/xprite-editor/default.nix b/pkgs/tools/misc/xprite-editor/default.nix
index 3f7e2e32294..fadeec41031 100644
--- a/pkgs/tools/misc/xprite-editor/default.nix
+++ b/pkgs/tools/misc/xprite-editor/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , rustPlatform
 , gtk3
@@ -24,16 +24,16 @@ rustPlatform.buildRustPackage rec {
     '';
   };
 
-  buildInputs = stdenv.lib.optionals stdenv.isLinux [ gtk3 ]
-    ++ stdenv.lib.optionals stdenv.isDarwin [ AppKit ];
+  buildInputs = lib.optionals stdenv.isLinux [ gtk3 ]
+    ++ lib.optionals stdenv.isDarwin [ AppKit ];
 
-  nativeBuildInputs = stdenv.lib.optionals stdenv.isLinux [ pkg-config python3 ];
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config python3 ];
 
-  cargoSha256 = "1a0zy8gfc1gdk8nnv5qr4yspqy1jsip5nql3w74rl6h46cplpf5y";
+  cargoSha256 = "0z1ip667d1qwvm9md3zg8ib9jixpg7qj5ypwib7r2928h14yg7ck";
 
   cargoBuildFlags = [ "--bin" "xprite-native" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/rickyhan/xprite-editor";
     description = "Pixel art editor";
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/xsel/default.nix b/pkgs/tools/misc/xsel/default.nix
index aea86eda9cb..69061eb15b8 100644
--- a/pkgs/tools/misc/xsel/default.nix
+++ b/pkgs/tools/misc/xsel/default.nix
@@ -1,15 +1,14 @@
-{stdenv, lib, fetchFromGitHub, libX11, autoreconfHook }:
+{ stdenv, lib, fetchFromGitHub, libX11, autoreconfHook }:
 
 stdenv.mkDerivation {
   pname = "xsel-unstable";
-
-  version = "2019-08-21";
+  version = "2020-05-27";
 
   src = fetchFromGitHub {
     owner = "kfish";
     repo = "xsel";
-    rev = "ef01f3c72a195dbce682184c842b81b17d7d7ad1";
-    sha256 = "191qa6022b7nww3bicfxpgp4d9x6c8s3sgixi780383ghkxds08c";
+    rev = "062e6d373537c60829fa9b5dcddbcd942986b3c3";
+    sha256 = "0fbf80zsc22vcqp59r9fdx4icxhrkv7l3lphw83326jrmkzy6kri";
   };
 
   nativeBuildInputs = [ autoreconfHook ];
diff --git a/pkgs/tools/misc/xtitle/default.nix b/pkgs/tools/misc/xtitle/default.nix
index 2c24e627b63..5199977e587 100644
--- a/pkgs/tools/misc/xtitle/default.nix
+++ b/pkgs/tools/misc/xtitle/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libxcb, xcbutil, xcbutilwm, git }:
+{ lib, stdenv, fetchurl, libxcb, xcbutil, xcbutilwm, git }:
 
 stdenv.mkDerivation {
    name = "xtitle-0.4.4";
@@ -16,8 +16,8 @@ stdenv.mkDerivation {
    meta = {
      description = "Outputs X window titles";
      homepage = "https://github.com/baskerville/xtitle";
-     maintainers = [ stdenv.lib.maintainers.meisternu ];
+     maintainers = [ lib.maintainers.meisternu ];
      license = "Custom";
-     platforms = stdenv.lib.platforms.linux;
+     platforms = lib.platforms.linux;
    };
 }
diff --git a/pkgs/tools/misc/xvfb-run/default.nix b/pkgs/tools/misc/xvfb-run/default.nix
index 04c1902f3a0..06e886e4d04 100644
--- a/pkgs/tools/misc/xvfb-run/default.nix
+++ b/pkgs/tools/misc/xvfb-run/default.nix
@@ -1,29 +1,28 @@
-{ stdenv, fetchurl, makeWrapper, xorgserver, getopt
-, xauth, utillinux, which, fontsConf, gawk, coreutils }:
+{ lib, stdenv, fetchurl, makeWrapper, xorgserver, getopt
+, xauth, util-linux, which, fontsConf, gawk, coreutils }:
 let
-  xvfb_run = fetchurl {
+  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";
+    url = "https://raw.githubusercontent.com/archlinux/svntogit-packages/9cb733cefa92af3fca608fb051d5251160c9bbff/trunk/xvfb-run";
     sha256 = "1307mz4nr8ga3qz73i8hbcdphky75rq8lrvfk2zm4kmv6pkbk611";
   };
 in
 stdenv.mkDerivation {
   name = "xvfb-run";
-  buildInputs = [makeWrapper];
+  nativeBuildInputs = [ makeWrapper ];
   buildCommand = ''
     mkdir -p $out/bin
-    cp ${xvfb_run} $out/bin/xvfb-run
+    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 ]}
+      --prefix PATH : ${lib.makeBinPath [ getopt xorgserver xauth which util-linux gawk coreutils ]}
   '';
 
-  meta = with stdenv.lib; {
-    platforms = platforms.unix;
+  meta = with lib; {
+    platforms = platforms.linux;
     license = licenses.gpl2;
   };
 }
diff --git a/pkgs/tools/misc/xxv/default.nix b/pkgs/tools/misc/xxv/default.nix
index b22dfc7e4cd..99a8193c6ca 100644
--- a/pkgs/tools/misc/xxv/default.nix
+++ b/pkgs/tools/misc/xxv/default.nix
@@ -17,7 +17,7 @@ rustPlatform.buildRustPackage rec {
     sha256 = "0ppfsgdigza2jppbkg4qanjhlkpnq7p115c4471vc6vpikpfrlk3";
   };
 
-  cargoSha256 = "1gnyig87a0yqgkng52fpn6hv629vym6k7ydljnxrhb5phmj2qbqx";
+  cargoSha256 = "0pmpvlmy4pw252is34r9af1ysrp78xs8pz8cw4rys9s4fh2hmhjb";
 
   buildInputs = lib.optionals useNcurses [ ncurses ]
   ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ Security ])
diff --git a/pkgs/tools/misc/yad/default.nix b/pkgs/tools/misc/yad/default.nix
index d00d737c17c..2069ba6b159 100644
--- a/pkgs/tools/misc/yad/default.nix
+++ b/pkgs/tools/misc/yad/default.nix
@@ -1,15 +1,15 @@
-{ stdenv, fetchFromGitHub, pkgconfig, intltool, autoreconfHook, wrapGAppsHook
+{ lib, stdenv, fetchFromGitHub, pkg-config, intltool, autoreconfHook, wrapGAppsHook
 , gtk3, hicolor-icon-theme, netpbm }:
 
 stdenv.mkDerivation rec {
   pname = "yad";
-  version = "6.0";
+  version = "8.0";
 
   src = fetchFromGitHub {
     owner = "v1cont";
     repo = "yad";
     rev = "v${version}";
-    sha256 = "07myjv0g0iwgclc6q9wkj25myhlc86ahy2lqma8vgv9i3rgy03p7";
+    sha256 = "sha256-KntJtli1PtqH/9XOTq4FkVJYklp0L7bChwQQGCBTLDA=";
   };
 
   configureFlags = [
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ gtk3 hicolor-icon-theme ];
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig intltool wrapGAppsHook ];
+  nativeBuildInputs = [ autoreconfHook pkg-config intltool wrapGAppsHook ];
 
   postPatch = ''
     sed -i src/file.c -e '21i#include <glib/gprintf.h>'
@@ -34,7 +34,7 @@ stdenv.mkDerivation rec {
     intltoolize
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://sourceforge.net/projects/yad-dialog/";
     description = "GUI dialog tool for shell scripts";
     longDescription = ''
diff --git a/pkgs/tools/misc/yafetch/default.nix b/pkgs/tools/misc/yafetch/default.nix
new file mode 100644
index 00000000000..5a082184400
--- /dev/null
+++ b/pkgs/tools/misc/yafetch/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitLab }:
+
+stdenv.mkDerivation rec {
+  pname = "yafetch";
+  version = "unstable-2021-07-18";
+
+  src = fetchFromGitLab {
+    owner = "cyberkitty";
+    repo = pname;
+    rev = "f3efbca54df1ffea22cc40034114af141ccff9c1";
+    sha256 = "1cxhrjy9vzq87rzql4dcknkwca7nydysp1p1x4fh1qfw79dfdmxw";
+  };
+
+  # Use the provided NixOS logo automatically
+  prePatch = ''
+    substituteInPlace ./config.h --replace \
+      "#include \"ascii/tux.h\"" "#include \"ascii/nixos.h\""
+  '';
+
+  # Fixes installation path
+  PREFIX = placeholder "out";
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/cyberkitty/yafetch";
+    description = "Yet another fetch clone written in C++";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ ivar ashley ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/misc/yajsv/default.nix b/pkgs/tools/misc/yajsv/default.nix
new file mode 100644
index 00000000000..6e5f20bfbd2
--- /dev/null
+++ b/pkgs/tools/misc/yajsv/default.nix
@@ -0,0 +1,28 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+let version = "1.4.0";
+in buildGoModule {
+  pname = "yajsv";
+  version = version;
+
+  src = fetchFromGitHub {
+    owner = "neilpa";
+    repo = "yajsv";
+    rev = "v${version}";
+    sha256 = "0smaij3905fqgcjmnfs58r6silhp3hyv7ccshk7n13fmllmsm7v7";
+  };
+
+  vendorSha256 = "0rmc31i5jra2qcqhw1azflmhawxasrq0d6qwd6qp250sj1jr6ahq";
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/yajsv -v > /dev/null
+  '';
+
+  meta = {
+    description = "Yet Another JSON Schema Validator";
+    homepage = "https://github.com/neilpa/yajsv";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ rycee ];
+  };
+}
diff --git a/pkgs/tools/misc/yank/default.nix b/pkgs/tools/misc/yank/default.nix
index 6111a0f9870..dbbe14cf386 100644
--- a/pkgs/tools/misc/yank/default.nix
+++ b/pkgs/tools/misc/yank/default.nix
@@ -1,21 +1,20 @@
-{ stdenv, fetchFromGitHub, xsel }:
+{ lib, stdenv, fetchFromGitHub, xsel }:
 
 stdenv.mkDerivation rec {
-
-  name = "yank-${meta.version}";
+  pname = "yank";
+  version = "1.2.0";
 
   src = fetchFromGitHub {
     owner = "mptre";
     repo = "yank";
-    rev = "v${meta.version}";
+    rev = "v${version}";
     sha256 = "1izygx7f1z35li74i2cwca0p28c3v8fbr7w72dwpiqdaiwywa8xc";
-    inherit name;
   };
 
   installFlags = [ "PREFIX=$(out)" ];
   makeFlags = [ "YANKCMD=${xsel}/bin/xsel" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/mptre/yank";
     description = "Yank terminal output to clipboard";
     longDescription = ''
@@ -27,7 +26,6 @@ stdenv.mkDerivation rec {
     '';
     downloadPage = "https://github.com/mptre/yank/releases";
     license = licenses.mit;
-    version = "1.2.0";
     maintainers = [ maintainers.dochang ];
     platforms = platforms.unix;
   };
diff --git a/pkgs/tools/misc/yle-dl/default.nix b/pkgs/tools/misc/yle-dl/default.nix
index 00624a482c8..209072da3b0 100644
--- a/pkgs/tools/misc/yle-dl/default.nix
+++ b/pkgs/tools/misc/yle-dl/default.nix
@@ -1,29 +1,30 @@
-{ stdenv, fetchFromGitHub, rtmpdump, php, pythonPackages, ffmpeg_3 }:
+{ lib, fetchFromGitHub, rtmpdump, php, wget, python3Packages, ffmpeg }:
 
-pythonPackages.buildPythonApplication rec {
+python3Packages.buildPythonApplication rec {
   pname = "yle-dl";
-  version = "2.31";
+  version = "20210502";
 
   src = fetchFromGitHub {
     owner = "aajanki";
     repo = "yle-dl";
     rev = version;
-    sha256 = "0k93p9csyjm0w33diwl5s22kzs3g78jl3n9k8nxxpqrybfjl912f";
+    sha256 = "sha256-HkhyxsiOMOfTHTj+qmY8l2z2sMtO4eMZmJUU/WvV4wY=";
   };
 
-  propagatedBuildInputs = with pythonPackages; [
-    lxml pyamf pycrypto requests future ffmpeg_3 setuptools
+  propagatedBuildInputs = with python3Packages; [
+    attrs configargparse ffmpeg future lxml requests
   ];
-  pythonPath = [ rtmpdump php ];
+  pythonPath = [ rtmpdump php wget ];
 
   doCheck = false; # tests require network access
-  checkInputs = with pythonPackages; [ pytest pytestrunner ];
+  checkInputs = with python3Packages; [ ffmpeg pytest pytest-runner ];
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    changelog = "https://github.com/aajanki/yle-dl/blob/${version}/ChangeLog";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dezgeg SuperSandro2000 ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/you-get/default.nix b/pkgs/tools/misc/you-get/default.nix
index 8314dc2c9a3..f58fb349c95 100644
--- a/pkgs/tools/misc/you-get/default.nix
+++ b/pkgs/tools/misc/you-get/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, buildPythonApplication, fetchPypi }:
+{ lib, buildPythonApplication, fetchPypi }:
 
 buildPythonApplication rec {
   pname = "you-get";
-  version = "0.4.1456";
+  version = "0.4.1500";
 
   # Tests aren't packaged, but they all hit the real network so
   # probably aren't suitable for a build environment anyway.
@@ -10,10 +10,10 @@ buildPythonApplication rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "14miw5gmj571584rmdzjxf88icmb1psrsfbwpabn8blz8l5aq6bv";
+    sha256 = "5a6cc0d661fe0cd4210bf467d6c89afd8611609e402690254722c1415736da92";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tiny command line utility to download media contents from the web";
     homepage = "https://you-get.org";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/youtube-dl/default.nix b/pkgs/tools/misc/youtube-dl/default.nix
index 07dae0b9600..7bf0c440a37 100644
--- a/pkgs/tools/misc/youtube-dl/default.nix
+++ b/pkgs/tools/misc/youtube-dl/default.nix
@@ -18,11 +18,11 @@ buildPythonPackage rec {
   # 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.07.28";
+  version = "2021.06.06";
 
   src = fetchurl {
     url = "https://yt-dl.org/downloads/${version}/${pname}-${version}.tar.gz";
-    sha256 = "1if7xyi7g9rpni1jbs7gv5m12s34qdb15dpfbbjn8120h16y7cqz";
+    sha256 = "1hqan9h55x9gfdakw554vic68w9gpvhblchwxlw265zxp56hxjrw";
   };
 
   nativeBuildInputs = [ installShellFiles makeWrapper ];
@@ -63,6 +63,6 @@ buildPythonPackage rec {
     '';
     license = licenses.publicDomain;
     platforms = with platforms; linux ++ darwin;
-    maintainers = with maintainers; [ bluescreen303 phreedom AndersonTorres fpletz enzime ma27 ];
+    maintainers = with maintainers; [ bluescreen303 phreedom AndersonTorres fpletz ma27 zowoq ];
   };
 }
diff --git a/pkgs/tools/misc/ytfzf/default.nix b/pkgs/tools/misc/ytfzf/default.nix
new file mode 100644
index 00000000000..a35e9200a71
--- /dev/null
+++ b/pkgs/tools/misc/ytfzf/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, coreutils
+, curl
+, dmenu
+, fzf
+, gnused
+, jq
+, mpv
+, ncurses
+, ueberzug
+, youtube-dl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ytfzf";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "pystardust";
+    repo = "ytfzf";
+    rev = "v${version}";
+    sha256 = "sha256-3wbjCtRmnd9tm8kqKaIF6VmMdKsWznhOvQkEsrAJpAE=";
+  };
+
+  patches = [
+    # Updates have to be installed through Nix.
+    ./no-update.patch
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}/bin" ];
+
+  dontBuild = true;
+
+  postInstall = ''
+    wrapProgram "$out/bin/ytfzf" --prefix PATH : ${lib.makeBinPath [
+      coreutils curl dmenu fzf gnused jq mpv ncurses ueberzug youtube-dl
+    ]}
+  '';
+
+  meta = with lib; {
+    description = "A posix script to find and watch youtube videos from the terminal";
+    homepage = "https://github.com/pystardust/ytfzf";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/tools/misc/ytfzf/no-update.patch b/pkgs/tools/misc/ytfzf/no-update.patch
new file mode 100644
index 00000000000..e71582f6364
--- /dev/null
+++ b/pkgs/tools/misc/ytfzf/no-update.patch
@@ -0,0 +1,29 @@
+diff --git a/ytfzf b/ytfzf
+index f4d2e0d..7a3b4b6 100755
+--- a/ytfzf
++++ b/ytfzf
+@@ -1260,22 +1260,8 @@ EOF
+ }
+ 
+ update_ytfzf () {
+-	branch="$1"
+-	updatefile="/tmp/ytfzf-update"
+-	curl -L "https://raw.githubusercontent.com/pystardust/ytfzf/$branch/ytfzf" -o "$updatefile"
+-
+-	if sed -n '1p' < "$updatefile" | grep -q '#!/bin/sh'; then
+-		chmod 755 "$updatefile"
+-		[ "$(uname)" = "Darwin" ] && prefix="/usr/local/bin" || prefix="/usr/bin"
+-		function_exists "sudo" && doasroot="sudo" || doasroot="doas"
+-		$doasroot cp "$updatefile" "$prefix/ytfzf"
+-		unset prefix doasroot
+-	else
+-		printf "%bFailed to update ytfzf. Try again later.%b" "$c_red" "$c_reset"
+-	fi
+-
+-	rm "$updatefile"
+-	exit 0
++	printf "%bUpdates have to be installed through Nix.%b\n" "$c_red" "$c_reset"
++	exit 1
+ }
+ 
+ #gives a value to sort by (this will give the unix time the video was uploaded)
diff --git a/pkgs/tools/misc/ytmdl/default.nix b/pkgs/tools/misc/ytmdl/default.nix
new file mode 100644
index 00000000000..43f46bc0523
--- /dev/null
+++ b/pkgs/tools/misc/ytmdl/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, fetchFromGitHub
+, python3
+, fetchpatch
+, ffmpeg
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ytmdl";
+  version = "2021.06.26";
+
+  src = fetchFromGitHub {
+    owner = "deepjyoti30";
+    repo = pname;
+    rev = version;
+    sha256 = "1jpd5zhqg2m9vjjjw4mgzb594q1v1pq1yl65py6kw42bq9w5yl5p";
+  };
+
+  patches = [
+    # Fixes https://github.com/deepjyoti30/ytmdl/issues/188
+    # Only needed until the next major release after 2021.06.26
+    (fetchpatch {
+      url = "https://github.com/deepjyoti30/ytmdl/commit/37ba821d9692249c1fa563505cf60bd11b8e209e.patch";
+      includes = [ "bin/ytmdl" ];
+      sha256 = "sha256-VqtthpUL0Oub3DK7tSvAnemOzPPTcLvXXeebZIGOgdc=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "bs4" "beautifulsoup4"
+  '';
+
+
+  propagatedBuildInputs = with python3.pkgs; [
+    ffmpeg-python
+    musicbrainzngs
+    rich
+    simber
+    pydes
+    youtube-search
+    unidecode
+    pyxdg
+    downloader-cli
+    beautifulsoup4
+    itunespy
+    mutagen
+    pysocks
+    youtube-dl
+    ytmusicapi
+  ];
+
+  makeWrapperArgs = [
+    "--prefix" "PATH" ":" (lib.makeBinPath [ ffmpeg ])
+  ];
+
+  # This application has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/deepjyoti30/ytmdl";
+    description = "YouTube Music Downloader";
+    license = licenses.mit;
+    maintainers = with maintainers; [ j0hax ];
+  };
+}
diff --git a/pkgs/tools/misc/ytree/default.nix b/pkgs/tools/misc/ytree/default.nix
index 0400e59d22f..9121b1289f2 100644
--- a/pkgs/tools/misc/ytree/default.nix
+++ b/pkgs/tools/misc/ytree/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , ncurses
 , readline
@@ -6,15 +6,16 @@
 
 stdenv.mkDerivation rec {
   pname = "ytree";
-  version = "2.02";
+  version = "2.03";
 
   src = fetchurl {
     url = "https://han.de/~werner/${pname}-${version}.tar.gz";
-    sha256 = "1v70l244rc22f20gac1zha1smrhqkag45jn0iwgcyngfdfml3gz5";
+    sha256 = "sha256-WDqnFVLRNH4Oq+OaI2+loXS/Z93piHGFO5/iojO8rvE=";
   };
 
   buildInputs = [
-    ncurses readline
+    ncurses
+    readline
   ];
 
   # don't save timestamp, in order to improve reproducibility
@@ -22,23 +23,13 @@ stdenv.mkDerivation rec {
     substituteInPlace Makefile --replace 'gzip' 'gzip -n'
   '';
 
-  preBuild = ''
-    makeFlagsArray+=(CC="cc"
-                     ADD_CFLAGS=""
-                     COLOR="-DCOLOR_SUPPORT"
-                     CLOCK="-DCLOCK_SUPPORT"
-                     READLINE="-DREADLINE_SUPPORT"
-                     CFLAGS="-D_GNU_SOURCE -DWITH_UTF8 $(ADD_CFLAGS) $(COLOR) $(CLOCK) $(READLINE)"
-                     LDFLAGS="-lncursesw -lreadline")
-  '';
-
   installFlags = [ "DESTDIR=${placeholder "out"}" ];
 
   preInstall = ''
     mkdir -p $out/bin $out/share/man/man1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A curses-based file manager similar to DOS Xtree(TM)";
     homepage = "https://www.han.de/~werner/ytree.html";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/misc/yubico-piv-tool/default.nix b/pkgs/tools/misc/yubico-piv-tool/default.nix
index 07f186e3322..827eaec048f 100644
--- a/pkgs/tools/misc/yubico-piv-tool/default.nix
+++ b/pkgs/tools/misc/yubico-piv-tool/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, openssl, check, pcsclite, PCSC
+{ lib, stdenv, fetchurl, pkg-config, openssl, check, pcsclite, PCSC
 , withApplePCSC ? stdenv.isDarwin
 }:
 
@@ -10,13 +10,13 @@ stdenv.mkDerivation rec {
     sha256 = "124lhlim05gw32ydjh1yawqbnx6wdllz1ir9j00j09wji3m11rfs";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ openssl check ]
     ++ (if withApplePCSC then [ PCSC ] else [ pcsclite ]);
 
   configureFlags = [ "--with-backend=${if withApplePCSC then "macscard" else "pcsc"}" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://developers.yubico.com/yubico-piv-tool/";
     description = ''
       Used for interacting with the Privilege and Identification Card (PIV)
diff --git a/pkgs/tools/misc/yubikey-manager-qt/default.nix b/pkgs/tools/misc/yubikey-manager-qt/default.nix
index 8ebbe75d686..cb575adf75e 100644
--- a/pkgs/tools/misc/yubikey-manager-qt/default.nix
+++ b/pkgs/tools/misc/yubikey-manager-qt/default.nix
@@ -1,63 +1,65 @@
-{ stdenv
+{ lib
+, mkDerivation
 , 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 {
+mkDerivation rec {
   pname = "yubikey-manager-qt";
-  version = "1.1.4";
+  version = "1.2.2";
 
   src = fetchurl {
     url = "https://developers.yubico.com/${pname}/Releases/${pname}-${version}.tar.gz";
-    sha256 = "0rbr72741q7fqkr9qmvgj2mi6192ayz7bl935q2bsnqils4wsa3f";
+    sha256 = "1jqibv7na9h2r8nxgzp40j9qpyiwx97c65krivkcqjwdjk5lrahl";
   };
 
-  nativeBuildInputs = [ wrapQtAppsHook python3.pkgs.wrapPython qmake ];
+  nativeBuildInputs = [
+    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;
+  buildInputs = [
+    pyotherside
+    python3
+    qtbase
+    qtgraphicaleffects
+    qtquickcontrols2
+  ];
 
-  pythonPath = [ yubikey-manager ];
+  pythonPath = [
+    (yubikey-manager.override { python3Packages = python3.pkgs; })
+  ];
 
-  dontWrapQtApps = true;
   postInstall = ''
-    buildPythonPath "$pythonPath"
+    install -Dt $out/share/applications resources/ykman-gui.desktop
+    install -Dt $out/share/ykman-gui/icons resources/icons/*.{icns,ico,png,xpm}
+    substituteInPlace $out/share/applications/ykman-gui.desktop \
+      --replace 'Exec=ykman-gui' "Exec=$out/bin/ykman-gui"
+  '';
 
-    wrapQtApp $out/bin/ykman-gui \
-      --prefix LD_LIBRARY_PATH : "${stdenv.lib.getLib pcsclite}/lib:${yubikey-personalization}/lib" \
-      --prefix PYTHONPATH : "$program_PYTHONPATH"
+  qtWrapperArgs = [
+    "--prefix" "LD_LIBRARY_PATH" ":" (lib.makeLibraryPath [ pcsclite yubikey-personalization ])
+  ];
 
-    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" \
+  preFixup = ''
+    buildPythonPath "$pythonPath"
+    qtWrapperArgs+=(--prefix PYTHONPATH : "$program_PYTHONPATH")
   '';
 
   meta = with lib; {
-    inherit version;
-    description = "Cross-platform application for configuring any YubiKey over all USB interfaces.";
+    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 ];
diff --git a/pkgs/tools/misc/yubikey-manager/default.nix b/pkgs/tools/misc/yubikey-manager/default.nix
index 4740b3ac55f..ed4f76fa627 100644
--- a/pkgs/tools/misc/yubikey-manager/default.nix
+++ b/pkgs/tools/misc/yubikey-manager/default.nix
@@ -3,11 +3,11 @@
 
 python3Packages.buildPythonPackage rec {
   pname = "yubikey-manager";
-  version = "3.1.0";
+  version = "4.0.3";
 
   srcs = fetchurl {
     url = "https://developers.yubico.com/${pname}/Releases/${pname}-${version}.tar.gz";
-    sha256 = "0nb3qzpggyp61lchvprnklby5mf5n0xpn9z8vlhh99pz1k9sqdq1";
+    hash = "sha256-p7tv/bj6PMCnCU5j8Vhi60LxLiPmR1Cuf8xVdDVtZvQ=";
   };
 
   propagatedBuildInputs =
@@ -42,12 +42,11 @@ python3Packages.buildPythonPackage rec {
       --replace 'compdef _ykman_completion ykman;' '_ykman_completion "$@"'
   '';
 
-  # See https://github.com/NixOS/nixpkgs/issues/29169
-  doCheck = false;
+  checkInputs = with python3Packages; [ pytestCheckHook makefun ];
 
   meta = with lib; {
     homepage = "https://developers.yubico.com/yubikey-manager";
-    description = "Command line tool for configuring any YubiKey over all USB transports.";
+    description = "Command line tool for configuring any YubiKey over all USB transports";
 
     license = licenses.bsd2;
     platforms = platforms.unix;
diff --git a/pkgs/tools/misc/yubikey-neo-manager/default.nix b/pkgs/tools/misc/yubikey-neo-manager/default.nix
deleted file mode 100644
index cb37ae24928..00000000000
--- a/pkgs/tools/misc/yubikey-neo-manager/default.nix
+++ /dev/null
@@ -1,28 +0,0 @@
-{ 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/pkgs/tools/misc/yubikey-neo-manager/fix-pyside-requirement.diff b/pkgs/tools/misc/yubikey-neo-manager/fix-pyside-requirement.diff
deleted file mode 100644
index d11a3a1cc6d..00000000000
--- a/pkgs/tools/misc/yubikey-neo-manager/fix-pyside-requirement.diff
+++ /dev/null
@@ -1,17 +0,0 @@
-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/pkgs/tools/misc/yubikey-personalization-gui/default.nix b/pkgs/tools/misc/yubikey-personalization-gui/default.nix
index 96e7024f7a7..af6843e3820 100644
--- a/pkgs/tools/misc/yubikey-personalization-gui/default.nix
+++ b/pkgs/tools/misc/yubikey-personalization-gui/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, mkDerivation, pkgconfig, qtbase, qmake, imagemagick
+{ lib, fetchurl, mkDerivation, pkg-config, qtbase, qmake, imagemagick
 , libyubikey, yubikey-personalization }:
 
 mkDerivation rec {
@@ -9,7 +9,7 @@ mkDerivation rec {
     sha256 = "1knyv5yss8lhzaff6jpfqv12fjf1b8b21mfxzx3qi0hw4nl8n2v8";
   };
 
-  nativeBuildInputs = [ pkgconfig qmake imagemagick ];
+  nativeBuildInputs = [ pkg-config qmake imagemagick ];
   buildInputs = [ yubikey-personalization qtbase libyubikey ];
 
   installPhase = ''
@@ -32,7 +32,7 @@ mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/misc/yubikey-personalization/default.nix b/pkgs/tools/misc/yubikey-personalization/default.nix
index 69e3d588653..59739e06aa0 100644
--- a/pkgs/tools/misc/yubikey-personalization/default.nix
+++ b/pkgs/tools/misc/yubikey-personalization/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, pkgconfig, libusb1, libyubikey, json_c }:
+{ lib, stdenv, fetchurl, fetchpatch, pkg-config, libusb1, libyubikey, json_c }:
 
 stdenv.mkDerivation rec {
   pname = "yubikey-personalization";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     })
   ];
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libusb1 libyubikey json_c ];
 
   configureFlags = [
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
     install -D -t $out/lib/udev/rules.d 69-yubikey.rules
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://developers.yubico.com/yubikey-personalization";
     description = "A library and command line tool to personalize YubiKeys";
     license = licenses.bsd2;
diff --git a/pkgs/tools/misc/z-lua/default.nix b/pkgs/tools/misc/z-lua/default.nix
index 59149506e6c..79be68c8d56 100644
--- a/pkgs/tools/misc/z-lua/default.nix
+++ b/pkgs/tools/misc/z-lua/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchFromGitHub, lua52Packages, makeWrapper }:
+{ lib, stdenv, fetchFromGitHub, lua52Packages, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "z-lua";
-  version = "1.8.7";
+  version = "1.8.12";
 
   src = fetchFromGitHub {
     owner = "skywind3000";
     repo = "z.lua";
     rev = version;
-    sha256 = "14n1abv7gh4zajq471bgzpcv8l1159g00h9x83h719i9kxxsa2ba";
+    sha256 = "sha256-q4hJ6QAR8cXjXM2e5Et1/DzyEw9L0120sgpTtqGG5wQ=";
   };
 
   dontBuild = true;
@@ -20,13 +20,15 @@ stdenv.mkDerivation rec {
   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;
+    install -Dm755 z.lua $out/bin/z.lua
+    wrapProgram $out/bin/z.lua --set LUA_CPATH "${lua52Packages.luafilesystem}/lib/lua/5.2/lfs.so" --set _ZL_USE_LFS 1;
+    # Create symlink for backwards compatibility. See: https://github.com/NixOS/nixpkgs/pull/96081
+    ln -s $out/bin/z.lua $out/bin/z
 
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/misc/zabbixctl/default.nix b/pkgs/tools/misc/zabbixctl/default.nix
index c54456ede3d..81d81b6794e 100644
--- a/pkgs/tools/misc/zabbixctl/default.nix
+++ b/pkgs/tools/misc/zabbixctl/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "zabbixctl";
@@ -15,7 +15,7 @@ buildGoPackage rec {
 
   goDeps = ./deps.nix;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Most effective way for operating in Zabbix Server";
     homepage = "https://github.com/kovetskiy/zabbixctl";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/zalgo/default.nix b/pkgs/tools/misc/zalgo/default.nix
new file mode 100644
index 00000000000..71cc7f8b7dd
--- /dev/null
+++ b/pkgs/tools/misc/zalgo/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "zalgo";
+  version = "unstable-2020-08-26";
+
+  src = fetchFromGitHub {
+    owner = "lunasorcery";
+    repo = "zalgo";
+    rev = "6aa1f66cfe183f8164a666730dfeaf39133cf01a";
+    sha256 = "00q56yvfcj2f89wllrckvizihivqmd6l77nihb52ffqd99rdd24w";
+  };
+
+  installPhase = ''
+    install -Dm755 zalgo -t $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Read stdin and corrupt it with combining diacritics";
+    homepage = "https://github.com/lunasorcery/zalgo";
+    license = licenses.unfree;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ djanatyn ];
+  };
+}
diff --git a/pkgs/tools/misc/zellij/default.nix b/pkgs/tools/misc/zellij/default.nix
new file mode 100644
index 00000000000..c7889b15873
--- /dev/null
+++ b/pkgs/tools/misc/zellij/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, stdenv
+, installShellFiles
+, pkg-config
+, libiconv
+, openssl
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "zellij";
+  version = "0.15.0";
+
+  src = fetchFromGitHub {
+    owner = "zellij-org";
+    repo = "zellij";
+    rev = "v${version}";
+    sha256 = "sha256-IcpCE9mqR7H1+gRhHyscvXhYHOynJFtOyrSr1FiMxFc=";
+  };
+
+  cargoSha256 = "sha256-22ggPs4iVOI1LKHtW5skfSO7J/FLF8EinvcyHVO14Dw=";
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ libiconv ];
+
+  preCheck = ''
+    HOME=$TMPDIR
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd $pname \
+      --bash <($out/bin/zellij setup --generate-completion bash) \
+      --fish <($out/bin/zellij setup --generate-completion fish) \
+      --zsh <($out/bin/zellij setup --generate-completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "A terminal workspace with batteries included";
+    homepage = "https://zellij.dev/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ therealansh _0x4A6F ];
+  };
+}
diff --git a/pkgs/tools/misc/zoxide/default.nix b/pkgs/tools/misc/zoxide/default.nix
index 3e4cbfd8433..a28cf27ab1a 100644
--- a/pkgs/tools/misc/zoxide/default.nix
+++ b/pkgs/tools/misc/zoxide/default.nix
@@ -1,34 +1,48 @@
 { lib
+, stdenv
 , fetchFromGitHub
 , rustPlatform
 , withFzf ? true
 , fzf
+, installShellFiles
+, libiconv
 }:
-let
-  version = "0.4.3";
-in
-rustPlatform.buildRustPackage {
+
+rustPlatform.buildRustPackage rec {
   pname = "zoxide";
-  inherit version;
+  version = "0.7.2";
 
   src = fetchFromGitHub {
     owner = "ajeetdsouza";
     repo = "zoxide";
     rev = "v${version}";
-    sha256 = "1ghdal6pqkp56rqawhj26ch1x4cvnjj032xz3626aiddqgn134zj";
+    sha256 = "sha256-M83J28aG4NACBZtCJzYNU7aYNTJILAboaDv5aAo35OM=";
   };
 
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
   postPatch = lib.optionalString withFzf ''
     substituteInPlace src/fzf.rs \
       --replace '"fzf"' '"${fzf}/bin/fzf"'
   '';
 
-  cargoSha256 = "0klnjmda77bq9i9f0rz48jzaw4rcf7hafcjjpb0i570d7hlxnwsr";
+  cargoSha256 = "sha256-aF0vdudOFBcDrHpgsS7+HNE70GTNPdBOmbvQhLwmsM0=";
+
+  postInstall = ''
+    installManPage man/*
+    installShellCompletion --cmd zoxide \
+      --bash contrib/completions/zoxide.bash \
+      --fish contrib/completions/zoxide.fish \
+      --zsh contrib/completions/_zoxide
+  '';
 
   meta = with lib; {
     description = "A fast cd command that learns your habits";
     homepage = "https://github.com/ajeetdsouza/zoxide";
+    changelog = "https://github.com/ajeetdsouza/zoxide/raw/v${version}/CHANGELOG.md";
     license = with licenses; [ mit ];
-    maintainers = with maintainers; [ ysndr cole-h ];
+    maintainers = with maintainers; [ ysndr cole-h SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/misc/zsh-autoenv/default.nix b/pkgs/tools/misc/zsh-autoenv/default.nix
index c44837b877d..51cfda5e0aa 100644
--- a/pkgs/tools/misc/zsh-autoenv/default.nix
+++ b/pkgs/tools/misc/zsh-autoenv/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchFromGitHub, runtimeShell }:
+{ lib, stdenv, fetchFromGitHub, runtimeShell }:
 
 stdenv.mkDerivation {
   pname = "zsh-autoenv";
-  version = "2017-12-16";
+  version = "unstable-2017-12-16";
 
   src = fetchFromGitHub {
     owner = "Tarrasch";
@@ -11,7 +11,7 @@ stdenv.mkDerivation {
     sha256 = "004svkfzhc3ab6q2qvwzgj36wvicg5bs8d2gcibx6adq042di7zj";
   };
 
-  buildPhase = ":";
+  dontBuild = true;
 
   installPhase = ''
     mkdir -p $out/{bin,share}
@@ -19,14 +19,14 @@ stdenv.mkDerivation {
 
     cat <<SCRIPT > $out/bin/zsh-autoenv-share
     #!${runtimeShell}
-    # Run this script to find the fzf shared folder where all the shell
+    # Run this script to find the zsh-autoenv 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; {
+  meta = with lib; {
     description = "Automatically sources whitelisted .autoenv.zsh files";
     longDescription = ''
       zsh-autoenv automatically sources (known/whitelisted)
@@ -35,6 +35,6 @@ stdenv.mkDerivation {
       variables (overwriting and restoring).
     '';
     homepage = "https://github.com/Tarrasch/zsh-autoenv";
-    platforms = stdenv.lib.platforms.all;
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/misc/zsh-navigation-tools/default.nix b/pkgs/tools/misc/zsh-navigation-tools/default.nix
index 86dd990cd74..f719fe3b692 100644
--- a/pkgs/tools/misc/zsh-navigation-tools/default.nix
+++ b/pkgs/tools/misc/zsh-navigation-tools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "zsh-navigation-tools";
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     cp .config/znt/n-* $out/share/zsh/site-functions/.config/znt
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Curses-based tools for ZSH";
     homepage = "https://github.com/psprint/zsh-navigation-tools";
     license = licenses.gpl3;
diff --git a/pkgs/tools/misc/zthrottle/default.nix b/pkgs/tools/misc/zthrottle/default.nix
new file mode 100644
index 00000000000..66209ead6fa
--- /dev/null
+++ b/pkgs/tools/misc/zthrottle/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, zsh }:
+
+stdenv.mkDerivation rec {
+  pname = "zthrottle";
+  version = "unstable-2017-7-24";
+
+  src = fetchFromGitHub {
+    owner = "anko";
+    repo = pname;
+    rev = "f62066661e49375baeb891fa8e43ad4527cbd0a0";
+    sha256 = "1ipvwmcsigzmxlg7j22cxpvdcgqckkmfpsnvzy18nbybd5ars9l5";
+  };
+
+  buildInputs = [ zsh ];
+
+  installPhase = ''
+    install -D zthrottle $out/bin/zthrottle
+  '';
+
+  meta = with lib; {
+    description = "A program that throttles a pipeline, only letting a line through at most every $1 seconds.";
+    homepage = "https://github.com/anko/zthrottle";
+    license = licenses.unlicense;
+    maintainers = [ maintainers.ronthecookie ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/networking/6tunnel/default.nix b/pkgs/tools/networking/6tunnel/default.nix
index bf0e8ba3316..fbdd23f754e 100644
--- a/pkgs/tools/networking/6tunnel/default.nix
+++ b/pkgs/tools/networking/6tunnel/default.nix
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
     description = "Tunnelling for application that don't speak IPv6";
     homepage = "https://github.com/wojtekka/6tunnel";
     license = licenses.gpl2;
-    maintainers = with maintainers; [ filalex77 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/acme-client/default.nix b/pkgs/tools/networking/acme-client/default.nix
index 00f8778cafd..f20d4eefb47 100644
--- a/pkgs/tools/networking/acme-client/default.nix
+++ b/pkgs/tools/networking/acme-client/default.nix
@@ -1,24 +1,23 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
-, apple_sdk ? null
 , libbsd
 , libressl
-, pkgconfig
+, pkg-config
 }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   pname = "acme-client";
-  version = "1.0.1";
+  version = "1.2.0";
 
   src = fetchurl {
     url = "https://data.wolfsden.cz/sources/acme-client-${version}.tar.xz";
-    sha256 = "0gmdvmyw8a61w08hrxllypf7rpnqg0fxipbk3zmvsxj7m5i6iysj";
+    sha256 = "sha256-fRSYwQmyV0WapjUJNG0UGO/tUDNTGUraj/BWq/a1QTo=";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ libbsd libressl ] ++ optional stdenv.isDarwin apple_sdk.sdk;
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libbsd libressl ];
 
   makeFlags = [ "PREFIX=${placeholder "out"}" ];
 
diff --git a/pkgs/tools/networking/ahcpd/default.nix b/pkgs/tools/networking/ahcpd/default.nix
index 0789b37c65a..75a7fc83858 100644
--- a/pkgs/tools/networking/ahcpd/default.nix
+++ b/pkgs/tools/networking/ahcpd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "ahcpd-0.53";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.mit;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/aircrack-ng/default.nix b/pkgs/tools/networking/aircrack-ng/default.nix
index fe07d203607..33a90636659 100644
--- a/pkgs/tools/networking/aircrack-ng/default.nix
+++ b/pkgs/tools/networking/aircrack-ng/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, libpcap, openssl, zlib, wirelesstools
-, iw, ethtool, pciutils, libnl, pkgconfig, makeWrapper
+{ lib, stdenv, fetchurl, libpcap, openssl, zlib, wirelesstools
+, iw, ethtool, pciutils, libnl, pkg-config, makeWrapper
 , autoreconfHook, usbutils }:
 
 stdenv.mkDerivation rec {
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
     sha256 = "0ix2k64qg7x3w0bzdsbk1m50kcpq1ws59g3zkwiafvpwdr4gs2sg";
   };
 
-  nativeBuildInputs = [ pkgconfig makeWrapper autoreconfHook ];
+  nativeBuildInputs = [ pkg-config makeWrapper autoreconfHook ];
   buildInputs = [ libpcap openssl zlib libnl iw ethtool pciutils ];
 
   patchPhase = ''
@@ -18,16 +18,16 @@ stdenv.mkDerivation rec {
   '';
 
   postFixup = ''
-    wrapProgram $out/bin/airmon-ng --prefix PATH : ${stdenv.lib.makeBinPath [
+    wrapProgram $out/bin/airmon-ng --prefix PATH : ${lib.makeBinPath [
       ethtool iw pciutils usbutils
     ]}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Wireless encryption cracking tools";
     homepage = "http://www.aircrack-ng.org/";
     license = licenses.gpl2Plus;
-    maintainers = with maintainers; [ domenkozar ];
+    maintainers = with maintainers; [ ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/airfield/default.nix b/pkgs/tools/networking/airfield/default.nix
index d08996eb13f..374a76871cb 100644
--- a/pkgs/tools/networking/airfield/default.nix
+++ b/pkgs/tools/networking/airfield/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub
+{ lib, stdenv, fetchFromGitHub
 , pkgs, makeWrapper, buildEnv
 , nodejs, runtimeShell
 }:
@@ -42,7 +42,8 @@ let
 in stdenv.mkDerivation {
   inherit name version src;
 
-  buildInputs = [ makeWrapper nodejs ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ nodejs ];
 
   dontBuild = true;
 
@@ -60,7 +61,7 @@ in stdenv.mkDerivation {
       --set NODE_PATH "${runtimeEnv}/lib/node_modules"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A web-interface for hipache-proxy";
     license = licenses.mit;
     homepage = "https://github.com/emblica/airfield";
diff --git a/pkgs/tools/networking/airfield/node-packages.nix b/pkgs/tools/networking/airfield/node-packages.nix
index 66e70162675..b43d2938009 100644
--- a/pkgs/tools/networking/airfield/node-packages.nix
+++ b/pkgs/tools/networking/airfield/node-packages.nix
@@ -1,16 +1,16 @@
-# This file has been generated by node2nix 1.8.0. Do not edit!
+# This file has been generated by node2nix 1.9.0. Do not edit!
 
-{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}:
+{nodeEnv, fetchurl, fetchgit, nix-gitignore, stdenv, lib, globalBuildInputs ? []}:
 
 let
   sources = {
-    "ajv-6.12.0" = {
+    "ajv-6.12.6" = {
       name = "ajv";
       packageName = "ajv";
-      version = "6.12.0";
+      version = "6.12.6";
       src = fetchurl {
-        url = "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz";
-        sha512 = "0gkcic96nmpcq311i2jfwbaa961x0mj7mkl7iwk213hyn4jgxbl0a472lcpg9dr7ybacn3i45fj6q0dz3g8rqmva7r14i9la240ba0g";
+        url = "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz";
+        sha512 = "j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==";
       };
     };
     "asn1-0.2.4" = {
@@ -19,7 +19,7 @@ let
       version = "0.2.4";
       src = fetchurl {
         url = "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz";
-        sha512 = "1v2z1ll0l8rif8hh0d03jc49kz3p8hym63q8ixbas48w4a8akl413hwn08nx83m89sj3mxl06aa0grp7n8hj6hcbsb2k3fhj913674g";
+        sha512 = "jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==";
       };
     };
     "assert-plus-1.0.0" = {
@@ -49,13 +49,13 @@ let
         sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8";
       };
     };
-    "aws4-1.9.1" = {
+    "aws4-1.11.0" = {
       name = "aws4";
       packageName = "aws4";
-      version = "1.9.1";
+      version = "1.11.0";
       src = fetchurl {
-        url = "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz";
-        sha512 = "2x4b6c0ny64yv6ljfs6sv82akh200klmnh1m1i18hdj28ksxkr9c0szphnwcasy3g5y3l1wn858wcxnc2gi9q5wql8s678fc61xbhf0";
+        url = "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz";
+        sha512 = "xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==";
       };
     };
     "bcrypt-pbkdf-1.0.2" = {
@@ -100,7 +100,7 @@ let
       version = "1.0.8";
       src = fetchurl {
         url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz";
-        sha512 = "1v09nkip7zpn3k3prkkg53w331rhczpfgcqb0q42i97nafra43l2khl5zvhd4ar0qmh145nmw7944jy8p108ny0xpgy29gf2wqph0qm";
+        sha512 = "FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==";
       };
     };
     "commander-0.6.1" = {
@@ -166,13 +166,13 @@ let
         sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0";
       };
     };
-    "debug-4.1.1" = {
+    "debug-4.3.2" = {
       name = "debug";
       packageName = "debug";
-      version = "4.1.1";
+      version = "4.3.2";
       src = fetchurl {
-        url = "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz";
-        sha512 = "1kmf9j5pka2rsljg5x6shniwmgs9444ksgdn0d3fjmis7yghxxn2zj526s36ip8rmpfni9zpj8z74w7irax32a67j59xw38wk6hi055";
+        url = "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz";
+        sha512 = "mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==";
       };
     };
     "delayed-stream-1.0.0" = {
@@ -184,13 +184,13 @@ let
         sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
       };
     };
-    "denque-1.4.1" = {
+    "denque-1.5.0" = {
       name = "denque";
       packageName = "denque";
-      version = "1.4.1";
+      version = "1.5.0";
       src = fetchurl {
-        url = "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz";
-        sha512 = "2spb0s12jkarfiydj4sj4iw1yfjzaplakzw7bma0pwnbra23l1b85rsyzc25szlfdl3bm5bb42fmy4xhf1xdpxaywmwh6aa4swwzz1r";
+        url = "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz";
+        sha512 = "CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==";
       };
     };
     "ecc-jsbn-0.1.2" = {
@@ -208,7 +208,7 @@ let
       version = "3.0.2";
       src = fetchurl {
         url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz";
-        sha512 = "3zad2109w3q3gh46s5msrnzfy2nl581sqpy20b52fs7v5pdjh3irpg7szl3xvh4sfy63218jy8ry6qlnir3baxbbfrb03swkw5swfky";
+        sha512 = "fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==";
       };
     };
     "extsprintf-1.3.0" = {
@@ -220,13 +220,13 @@ let
         sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05";
       };
     };
-    "fast-deep-equal-3.1.1" = {
+    "fast-deep-equal-3.1.3" = {
       name = "fast-deep-equal";
       packageName = "fast-deep-equal";
-      version = "3.1.1";
+      version = "3.1.3";
       src = fetchurl {
-        url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz";
-        sha512 = "1j7wq3vqvfgnpd2sjblnlgryxlic2fsy343fx8w4ywb2mngj1w5afq8fmly8cp9fi66dhz1fhcfpn23g5zasnzs6n1snb83qkkilhgi";
+        url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz";
+        sha512 = "f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==";
       };
     };
     "fast-json-stable-stringify-2.1.0" = {
@@ -235,7 +235,7 @@ let
       version = "2.1.0";
       src = fetchurl {
         url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz";
-        sha512 = "0gz06zkjlqc4r59ka14n3vwqjdgn40zd8r115ql3rkwqb7j42frmnsj3axr7p2md8ik52nqjn3myyv8ddavdhl4cq3xz4wbbz07y5wn";
+        sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==";
       };
     };
     "forever-agent-0.6.1" = {
@@ -253,7 +253,7 @@ let
       version = "2.3.3";
       src = fetchurl {
         url = "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz";
-        sha512 = "0jj3hgqp9pmxmfavx6rvdfl3r4yf98clpsarqadz3hq0dxhjlh2ppd9x8bvmaq3nwjdqpdvqx25pwyin4ipixhgsn7s3p9fcc3wllnn";
+        sha512 = "1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==";
       };
     };
     "formidable-1.0.11" = {
@@ -292,13 +292,13 @@ let
         sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
       };
     };
-    "har-validator-5.1.3" = {
+    "har-validator-5.1.5" = {
       name = "har-validator";
       packageName = "har-validator";
-      version = "5.1.3";
+      version = "5.1.5";
       src = fetchurl {
-        url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz";
-        sha512 = "3kaldgfsh3lfvgvw31s8b7q345zf7ixjahllncdckcw6qfs3gnbsamdxgs9kfigq7rwmja7v51ghh7y0rsp6q7jmvmbydhh645wxnxh";
+        url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz";
+        sha512 = "nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==";
       };
     };
     "http-signature-1.2.0" = {
@@ -352,7 +352,7 @@ let
       version = "0.4.1";
       src = fetchurl {
         url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
-        sha512 = "1bbgxs4777gn3q3yxi0n792cgz9pimf85pypr0w4wzpb22nr8fl9xi98pkcqd3n4fn7lnzffpq7qwpcl4dqc15py19lwqa2jwgw5dn5";
+        sha512 = "xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==";
       };
     };
     "json-stringify-safe-5.0.1" = {
@@ -391,22 +391,22 @@ let
         sha1 = "b1f86c768c025fa87b48075f1709f28aeaf20365";
       };
     };
-    "mime-db-1.43.0" = {
+    "mime-db-1.45.0" = {
       name = "mime-db";
       packageName = "mime-db";
-      version = "1.43.0";
+      version = "1.45.0";
       src = fetchurl {
-        url = "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz";
-        sha512 = "36x3p6lll5v1g7na92kbba0bpcl36i1argsqn8iy4mgz3zh3llnqhzhfw0l26jqcb0mh9rhhmrx718kvqzchga6y79qdg9884c6r5zv";
+        url = "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz";
+        sha512 = "CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==";
       };
     };
-    "mime-types-2.1.26" = {
+    "mime-types-2.1.28" = {
       name = "mime-types";
       packageName = "mime-types";
-      version = "2.1.26";
+      version = "2.1.28";
       src = fetchurl {
-        url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz";
-        sha512 = "1cxsgrndjg6jyfqzm74hv6cmy9lil52f1kzkq2niknaiqz20p3yiw0fpgsyld2zrbxr9abpdabz1q6nqa50xr9a0cmbjbi0cqymlnnk";
+        url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz";
+        sha512 = "0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==";
       };
     };
     "mkdirp-0.3.3" = {
@@ -424,7 +424,7 @@ let
       version = "2.1.2";
       src = fetchurl {
         url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz";
-        sha512 = "3dqfiiw6nxvvi24fndbzlccnjcas99bsd1kz5m2r78lzgpp6vx57jzbmxq3k1m7bsw88rwra0n4848l720fxxn5x20djck3wp3hysdh";
+        sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==";
       };
     };
     "oauth-sign-0.9.0" = {
@@ -433,7 +433,7 @@ let
       version = "0.9.0";
       src = fetchurl {
         url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz";
-        sha512 = "1jz644r7ybsq688ifahm64ih3ljqjjskm533bgir20pvc350f9cl0z162scih0r1idx8lpw5f8hxa2pkf0lhbdhr5y6ak2ga5863v3x";
+        sha512 = "fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==";
       };
     };
     "pause-0.0.1" = {
@@ -454,13 +454,13 @@ let
         sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
       };
     };
-    "psl-1.7.0" = {
+    "psl-1.8.0" = {
       name = "psl";
       packageName = "psl";
-      version = "1.7.0";
+      version = "1.8.0";
       src = fetchurl {
-        url = "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz";
-        sha512 = "0whj0m29370fn3imrlj2dw0xmr33j2gn30kn96xpxckz7i1b21pj6vlgsn4ggxl79mz2ckng5mdxbkczcwkjry497s8xkgw7c815nz4";
+        url = "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz";
+        sha512 = "RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==";
       };
     };
     "punycode-2.1.1" = {
@@ -469,7 +469,7 @@ let
       version = "2.1.1";
       src = fetchurl {
         url = "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz";
-        sha512 = "381vqgh5xkqzrr6cxbzfykgnnk83m7qgpx3wjwj1hddn3sg2aibjxyr30rajpgv4js0cqknrbzwbfk5ryhiiyigzfjrk3zysy6i26sx";
+        sha512 = "XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==";
       };
     };
     "qs-0.5.1" = {
@@ -487,7 +487,7 @@ let
       version = "6.5.2";
       src = fetchurl {
         url = "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz";
-        sha512 = "0c46ws0x9g3mmkgfmvd78bzvnmv2b8ryg4ah6jvyyqgjv9v994z7xdyvsc4vg9sf98gg7phvy3q1ahgaj5fy3dwzf2rki6bixgl15ip";
+        sha512 = "N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==";
       };
     };
     "range-parser-0.0.4" = {
@@ -499,13 +499,13 @@ let
         sha1 = "c0427ffef51c10acba0782a46c9602e744ff620b";
       };
     };
-    "redis-commands-1.5.0" = {
+    "redis-commands-1.6.0" = {
       name = "redis-commands";
       packageName = "redis-commands";
-      version = "1.5.0";
+      version = "1.6.0";
       src = fetchurl {
-        url = "https://registry.npmjs.org/redis-commands/-/redis-commands-1.5.0.tgz";
-        sha512 = "0kdmbh04hif6g8qr3zcwjkjg1v3rjgss0dq3sy144l5ja5vp4ndb5hdn2acrx57w01swbwpkskmy788lr2nxdq0g46azqsrmad5mb78";
+        url = "https://registry.npmjs.org/redis-commands/-/redis-commands-1.6.0.tgz";
+        sha512 = "2jnZ0IkjZxvguITjFTrGiLyzQZcTvaw8DAaCXxZq/dsHXz7KfMQ3OUJy7Tz9vnRtZRVz6VRCPDvruvU8Ts44wQ==";
       };
     };
     "redis-errors-1.2.0" = {
@@ -526,13 +526,13 @@ let
         sha1 = "b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4";
       };
     };
-    "safe-buffer-5.2.0" = {
+    "safe-buffer-5.2.1" = {
       name = "safe-buffer";
       packageName = "safe-buffer";
-      version = "5.2.0";
+      version = "5.2.1";
       src = fetchurl {
-        url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz";
-        sha512 = "1pb164cfv1ip3s1rp008433rak88mdcch24q84cbfndg0dzky2ij8vjvsiyx2qf3rg4dgs82zk7vnrd9hkqqdcvp4lbk5ymcr8314bx";
+        url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz";
+        sha512 = "rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==";
       };
     };
     "safer-buffer-2.1.2" = {
@@ -541,7 +541,7 @@ let
       version = "2.1.2";
       src = fetchurl {
         url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";
-        sha512 = "2v99f22kh56y72d3s8wrgdvf5n10ry40dh3fwnsxr4d5rfvxdfxfmc3qyqkscnj4f8799jy9bpg6cm21x2d811dr9ib83wjrlmkg6k1";
+        sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==";
       };
     };
     "send-0.1.0" = {
@@ -559,7 +559,7 @@ let
       version = "1.16.1";
       src = fetchurl {
         url = "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz";
-        sha512 = "0i4jnrxh6i17qij2vfki7qxmk435cnacvg363qg0hya5incfj57akgbas8zcx2cl5pds9jfgfyhqm8wlqz6damsg059gymv99aylx8x";
+        sha512 = "HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==";
       };
     };
     "tough-cookie-2.5.0" = {
@@ -568,7 +568,7 @@ let
       version = "2.5.0";
       src = fetchurl {
         url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz";
-        sha512 = "3xgcny117pqhfncr4gbmagzlnjiqqgq0lrvmljdfcdy64nc0xjfcbf1r08dmp1v1m3s51kq0yxc18nl3j9lbpr5bp5lgmi6719yqlly";
+        sha512 = "nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==";
       };
     };
     "tunnel-agent-0.6.0" = {
@@ -589,22 +589,22 @@ let
         sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
       };
     };
-    "underscore-1.9.2" = {
+    "underscore-1.12.0" = {
       name = "underscore";
       packageName = "underscore";
-      version = "1.9.2";
+      version = "1.12.0";
       src = fetchurl {
-        url = "https://registry.npmjs.org/underscore/-/underscore-1.9.2.tgz";
-        sha512 = "0fpcm4n2qlycl50j6k3fv7baybnzf1wbsm2ng0vwfsdi40fyvsvvl0k1i427hgpknhj5hbcwff3swckw6wx96kw4dgwvldi56v6lzqg";
+        url = "https://registry.npmjs.org/underscore/-/underscore-1.12.0.tgz";
+        sha512 = "21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ==";
       };
     };
-    "uri-js-4.2.2" = {
+    "uri-js-4.4.1" = {
       name = "uri-js";
       packageName = "uri-js";
-      version = "4.2.2";
+      version = "4.4.1";
       src = fetchurl {
-        url = "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz";
-        sha512 = "2fz60s71ghl56ddfiiaws81xpiidlbjk69jyjmahz190d2advy9zdbcwh5if4rgg5hxdbfxhkwiipjrnjy8w834bxsmzambd2p4b3r9";
+        url = "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz";
+        sha512 = "7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==";
       };
     };
     "uuid-3.4.0" = {
@@ -613,7 +613,7 @@ let
       version = "3.4.0";
       src = fetchurl {
         url = "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz";
-        sha512 = "3y9pcli1v8nqryqd2c4pxj9kcv92mjc22z4smg08pdjzrbwda19xmjbzms1dwr04995h4carz9s8mldbiqb8708694lwr501r3q6d0y";
+        sha512 = "HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==";
       };
     };
     "verror-1.10.0" = {
@@ -644,7 +644,7 @@ in
       sources."cookie-0.0.5"
       sources."cookie-signature-0.0.1"
       sources."crc-0.2.0"
-      sources."debug-4.1.1"
+      sources."debug-4.3.2"
       sources."formidable-1.0.11"
       sources."fresh-0.1.0"
       sources."methods-0.0.1"
@@ -673,7 +673,7 @@ in
       sha1 = "544bfb3bd837608873eed6a72c672a28cb1f1b3f";
     };
     dependencies = [
-      sources."underscore-1.9.2"
+      sources."underscore-1.12.0"
     ];
     buildInputs = globalBuildInputs;
     meta = {
@@ -706,11 +706,11 @@ in
     version = "3.0.2";
     src = fetchurl {
       url = "https://registry.npmjs.org/redis/-/redis-3.0.2.tgz";
-      sha512 = "26lf40x7al63vywd96j6idqbn8fagv4jp6ar9cc80aili5d59sy14hvb3haw8xhjqxc3481dkmbvza8x3p1dcn3p2az5snlp054pn1w";
+      sha512 = "PNhLCrjU6vKVuMOyFu7oSP296mwBkcE6lrAjruBYG5LgdSqtRBoVQIylrMyVZD/lkF24RSNNatzvYag6HRBHjQ==";
     };
     dependencies = [
-      sources."denque-1.4.1"
-      sources."redis-commands-1.5.0"
+      sources."denque-1.5.0"
+      sources."redis-commands-1.6.0"
       sources."redis-errors-1.2.0"
       sources."redis-parser-3.0.0"
     ];
@@ -727,10 +727,10 @@ in
   connect-redis = nodeEnv.buildNodePackage {
     name = "connect-redis";
     packageName = "connect-redis";
-    version = "4.0.4";
+    version = "5.0.0";
     src = fetchurl {
-      url = "https://registry.npmjs.org/connect-redis/-/connect-redis-4.0.4.tgz";
-      sha512 = "014p1jjd7bzdsd81v0918ac5j4k1qs4qi2nzzndyn50rznd04hx85l23jpicznwc2j3nkz5bj15zbi98ld3akxb5rwl46r5sdp3nyb9";
+      url = "https://registry.npmjs.org/connect-redis/-/connect-redis-5.0.0.tgz";
+      sha512 = "R4nTW5uXeG5s6zr/q4abmtcdloglZrL/A3cpa0JU0RLFJU4mTR553HUY8OZ0ngeySkGDclwQ5xmCcjjKkxdOSg==";
     };
     buildInputs = globalBuildInputs;
     meta = {
@@ -748,7 +748,7 @@ in
     version = "3.2.0";
     src = fetchurl {
       url = "https://registry.npmjs.org/async/-/async-3.2.0.tgz";
-      sha512 = "1kwiqca4ql149ywfzbp1lpmqixnh1y9i5aizcd0fvndrq9sn31j0cr38wdgbr5xqvlxgjfs3jwryg7ddnwc8n1b5nlksfjmj48sc7ad";
+      sha512 = "TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==";
     };
     buildInputs = globalBuildInputs;
     meta = {
@@ -766,15 +766,15 @@ in
     version = "2.88.2";
     src = fetchurl {
       url = "https://registry.npmjs.org/request/-/request-2.88.2.tgz";
-      sha512 = "23hm71jcxrwvp33azx8mx3w6dg21fr4w6lwvkvxyf6ckvhk3hz9dk8lzgkbiyzfl9ylhp4n807xp88ppq4gj5h07cmrgxf6nwxfvjrj";
+      sha512 = "MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==";
     };
     dependencies = [
-      sources."ajv-6.12.0"
+      sources."ajv-6.12.6"
       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.9.1"
+      sources."aws4-1.11.0"
       sources."bcrypt-pbkdf-1.0.2"
       sources."caseless-0.12.0"
       sources."combined-stream-1.0.8"
@@ -784,13 +784,13 @@ in
       sources."ecc-jsbn-0.1.2"
       sources."extend-3.0.2"
       sources."extsprintf-1.3.0"
-      sources."fast-deep-equal-3.1.1"
+      sources."fast-deep-equal-3.1.3"
       sources."fast-json-stable-stringify-2.1.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."har-validator-5.1.5"
       sources."http-signature-1.2.0"
       sources."is-typedarray-1.0.0"
       sources."isstream-0.1.2"
@@ -799,20 +799,20 @@ in
       sources."json-schema-traverse-0.4.1"
       sources."json-stringify-safe-5.0.1"
       sources."jsprim-1.4.1"
-      sources."mime-db-1.43.0"
-      sources."mime-types-2.1.26"
+      sources."mime-db-1.45.0"
+      sources."mime-types-2.1.28"
       sources."oauth-sign-0.9.0"
       sources."performance-now-2.1.0"
-      sources."psl-1.7.0"
+      sources."psl-1.8.0"
       sources."punycode-2.1.1"
       sources."qs-6.5.2"
-      sources."safe-buffer-5.2.0"
+      sources."safe-buffer-5.2.1"
       sources."safer-buffer-2.1.2"
       sources."sshpk-1.16.1"
       sources."tough-cookie-2.5.0"
       sources."tunnel-agent-0.6.0"
       sources."tweetnacl-0.14.5"
-      sources."uri-js-4.2.2"
+      sources."uri-js-4.4.1"
       sources."uuid-3.4.0"
       sources."verror-1.10.0"
     ];
diff --git a/pkgs/tools/networking/airfield/node.nix b/pkgs/tools/networking/airfield/node.nix
index e306e49c849..0bcd0eb4b85 100644
--- a/pkgs/tools/networking/airfield/node.nix
+++ b/pkgs/tools/networking/airfield/node.nix
@@ -1,4 +1,4 @@
-# This file has been generated by node2nix 1.8.0. Do not edit!
+# This file has been generated by node2nix 1.9.0. Do not edit!
 
 {pkgs ? import <nixpkgs> {
     inherit system;
@@ -6,12 +6,12 @@
 
 let
   nodeEnv = import ../../../development/node-packages/node-env.nix {
-    inherit (pkgs) stdenv python2 utillinux runCommand writeTextFile;
-    inherit nodejs;
+    inherit (pkgs) stdenv lib python2 runCommand writeTextFile;
+    inherit pkgs nodejs;
     libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
   };
 in
 import ./node-packages.nix {
-  inherit (pkgs) fetchurl fetchgit;
+  inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit;
   inherit nodeEnv;
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/networking/altermime/default.nix b/pkgs/tools/networking/altermime/default.nix
index b1481b2208c..703af40864a 100644
--- a/pkgs/tools/networking/altermime/default.nix
+++ b/pkgs/tools/networking/altermime/default.nix
@@ -1,12 +1,11 @@
-{ stdenv, fetchurl }:
+{ lib, gccStdenv, fetchurl }:
 
-stdenv.mkDerivation rec {
-  baseName = "altermime";
-  name = "${baseName}-${version}";
+gccStdenv.mkDerivation rec {
+  pname = "altermime";
   version = "0.3.11";
 
   src = fetchurl {
-    url = "https://pldaniels.com/${baseName}/${name}.tar.gz";
+    url = "https://pldaniels.com/${pname}/${pname}-${version}.tar.gz";
     sha256 = "15zxg6spcmd35r6xbidq2fgcg2nzyv1sbbqds08lzll70mqx4pj7";
   };
 
@@ -19,14 +18,14 @@ stdenv.mkDerivation rec {
   ];
 
   postPatch = ''
-    sed -i Makefile -e "s@/usr/local@$out@"
-    mkdir -p "$out/bin"
+    mkdir -p $out/bin
+    substituteInPlace Makefile --replace "/usr/local" "$out"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "MIME alteration tool";
     maintainers = [ maintainers.raskin ];
-    platforms = platforms.linux;
+    platforms = platforms.all;
     license.fullName = "alterMIME LICENSE";
     downloadPage = "https://pldaniels.com/altermime/";
   };
diff --git a/pkgs/tools/networking/amass/default.nix b/pkgs/tools/networking/amass/default.nix
index b690b63ef4b..5d539cc5697 100644
--- a/pkgs/tools/networking/amass/default.nix
+++ b/pkgs/tools/networking/amass/default.nix
@@ -5,27 +5,28 @@
 
 buildGoModule rec {
   pname = "amass";
-  version = "3.8.2";
+  version = "3.13.4";
 
   src = fetchFromGitHub {
     owner = "OWASP";
     repo = "Amass";
     rev = "v${version}";
-    sha256 = "0hm5h8glva0d9mj870j56bc721w4br7dzwhns096rgzyv93m7rx0";
+    sha256 = "0zlkr0r06w3y34nx174wyfwk69i2q0bcq88kfvb0j3d28fdh5p31";
   };
 
-  vendorSha256 = "1g3jbdx7m5m56ifcc1p6hgz2wzmb287cyyaiz03ffdvwd3k73k4j";
-
-  doCheck = false;
+  vendorSha256 = "065n1vhj5003ay4pflp418w32s84jvza52lghj6cpcdzs0rwgc45";
 
   outputs = [ "out" "wordlists" ];
 
   postInstall = ''
     mkdir -p $wordlists
-    cp -R $src/examples/wordlists/*.txt $wordlists
+    cp -R examples/wordlists/*.txt $wordlists
     gzip $wordlists/*.txt
   '';
 
+  # https://github.com/OWASP/Amass/issues/640
+  doCheck = false;
+
   meta = with lib; {
     description = "In-Depth DNS Enumeration and Network Mapping";
     longDescription = ''
@@ -39,8 +40,8 @@ buildGoModule rec {
       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";
+    homepage = "https://owasp.org/www-project-amass/";
     license = licenses.asl20;
-    maintainers = with maintainers; [ kalbasit ];
+    maintainers = with maintainers; [ kalbasit fab ];
   };
 }
diff --git a/pkgs/tools/networking/anevicon/default.nix b/pkgs/tools/networking/anevicon/default.nix
new file mode 100644
index 00000000000..cff22fa71e6
--- /dev/null
+++ b/pkgs/tools/networking/anevicon/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, rustPlatform
+, libiconv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "anevicon";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "rozgo";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1m3ci7g7nn28p6x5m85av3ljgszwlg55f1hmgjnarc6bas5bapl7";
+  };
+
+  cargoSha256 = "1g15v13ysx09fy0b8qddw5fwql2pvwzc2g2h1ndhzpxvfy7fzpr1";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security ];
+
+  cargoPatches = [
+    # Add Cargo.lock file, https://github.com/rozgo/anevicon/pull/1
+    (fetchpatch {
+      name = "cargo-lock-file.patch";
+      url = "https://github.com/rozgo/anevicon/commit/205440a0863aaea34394f30f4255fa0bb1704aed.patch";
+      sha256 = "02syzm7irn4slr3s5dwwhvg1qx8fdplwlhza8gfkc6ajl7vdc7ri";
+    })
+  ];
+
+  # Tries to send large UDP packets that Darwin rejects.
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "UDP-based load generator";
+    homepage = "https://github.com/rozgo/anevicon";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/networking/argus-clients/default.nix b/pkgs/tools/networking/argus-clients/default.nix
index a1ff30faff3..cd935a5f5d7 100644
--- a/pkgs/tools/networking/argus-clients/default.nix
+++ b/pkgs/tools/networking/argus-clients/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libpcap, bison, flex, cyrus_sasl, tcp_wrappers, pkgconfig, perl }:
+{ lib, stdenv, fetchurl, libpcap, bison, flex, cyrus_sasl, tcp_wrappers, pkg-config, perl, libtirpc, libnsl }:
 
 stdenv.mkDerivation rec {
   pname = "argus-clients";
@@ -9,7 +9,9 @@ stdenv.mkDerivation rec {
     sha256 = "1c9vj6ma00gqq9h92fg71sxcsjzz912166sdg90ahvnmvmh3l1rj";
   };
 
-  patchPhase = ''
+  NIX_CFLAGS_COMPILE = [ "-I${libtirpc.dev}/include/tirpc" ];
+
+  postPatch = ''
     for file in ./examples/*/*.pl; do
       substituteInPlace $file \
         --subst-var-by PERLBIN ${perl}/bin/perl
@@ -18,10 +20,10 @@ stdenv.mkDerivation rec {
 
   configureFlags = [ "--with-perl=${perl}/bin/perl" ];
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ libpcap bison cyrus_sasl tcp_wrappers flex ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libpcap bison cyrus_sasl tcp_wrappers flex libnsl ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Clients for ARGUS";
     longDescription = ''Clients for Audit Record Generation and
     Utilization System (ARGUS). The Argus Project is focused on developing all
diff --git a/pkgs/tools/networking/argus/default.nix b/pkgs/tools/networking/argus/default.nix
index 32c6c785fa5..bbb9d220144 100644
--- a/pkgs/tools/networking/argus/default.nix
+++ b/pkgs/tools/networking/argus/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, libpcap, bison, flex, cyrus_sasl, tcp_wrappers,
-  pkgconfig, procps, which, wget, lsof, net-snmp, perl }:
+{ lib, stdenv, fetchurl, libpcap, bison, flex, cyrus_sasl, tcp_wrappers,
+  pkg-config, procps, which, wget, lsof, net-snmp, perl }:
 
 stdenv.mkDerivation rec {
   pname = "argus";
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
     sha256 = "1zzf688dbbcb5z2r9v1p28rddns6znzx35nc05ygza6lp7aknkna";
   };
 
-  nativeBuildInputs = [ pkgconfig bison flex ];
+  nativeBuildInputs = [ pkg-config bison flex ];
   buildInputs = [ libpcap cyrus_sasl tcp_wrappers ];
   propagatedBuildInputs = [ procps which wget lsof net-snmp ];
 
@@ -23,11 +23,11 @@ stdenv.mkDerivation rec {
     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
+      --replace /usr/bin/snmpget ${lib.getBin net-snmp}/bin/snmpget \
+      --replace /usr/bin/snmpwalk ${lib.getBin net-snmp}/bin/snmpwalk
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/networking/aria2/default.nix b/pkgs/tools/networking/aria2/default.nix
index 5ede0db598c..7e4f06302f2 100644
--- a/pkgs/tools/networking/aria2/default.nix
+++ b/pkgs/tools/networking/aria2/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchpatch, fetchFromGitHub, pkgconfig, autoreconfHook
+{ lib, stdenv, fetchpatch, fetchFromGitHub, pkg-config, autoreconfHook
 , openssl, c-ares, libxml2, sqlite, zlib, libssh2
 , cppunit, sphinx
 , Security
@@ -15,10 +15,10 @@ stdenv.mkDerivation rec {
     sha256 = "195r3711ly3drf9jkygwdc2m7q99hiqlfrig3ip1127b837gzsf9";
   };
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook sphinx ];
+  nativeBuildInputs = [ pkg-config autoreconfHook sphinx ];
 
   buildInputs = [ openssl c-ares libxml2 sqlite zlib libssh2 ] ++
-    stdenv.lib.optional stdenv.isDarwin Security;
+    lib.optional stdenv.isDarwin Security;
 
   outputs = [ "bin" "dev" "out" "doc" "man" ];
 
@@ -36,11 +36,11 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = with maintainers; [ Br1ght0ne koral ];
   };
 }
diff --git a/pkgs/tools/networking/arping/default.nix b/pkgs/tools/networking/arping/default.nix
index ad0139b184d..54ea08ceaef 100644
--- a/pkgs/tools/networking/arping/default.nix
+++ b/pkgs/tools/networking/arping/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, libnet, libpcap }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libnet, libpcap }:
 
 stdenv.mkDerivation rec {
-  version = "2.21";
+  version = "2.22";
   pname = "arping";
 
   buildInputs = [ libnet libpcap ];
@@ -10,12 +10,12 @@ stdenv.mkDerivation rec {
     owner = "ThomasHabets";
     repo = pname;
     rev = "${pname}-${version}";
-    sha256 = "1i7rjn863bnq51ahbvypm1bkzhyshlm5b32yzdd9iaqyz7sa7pa7";
+    sha256 = "sha256-yFSLhhyz6i7xyJR8Ax8FnHFGNe/HE40YirkkeefBqC4=";
   };
 
   nativeBuildInputs = [ autoreconfHook ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Broadcasts a who-has ARP packet on the network and prints answers";
     homepage = "https://github.com/ThomasHabets/arping";
     license = with licenses; [ gpl2 ];
diff --git a/pkgs/tools/networking/arpoison/default.nix b/pkgs/tools/networking/arpoison/default.nix
index eac2f380d15..6268d958204 100644
--- a/pkgs/tools/networking/arpoison/default.nix
+++ b/pkgs/tools/networking/arpoison/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchzip, libnet }:
+{ lib, stdenv, fetchzip, libnet }:
 
 stdenv.mkDerivation rec {
   name = "arpoison-0.7";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
     cp arpoison.8.gz $out/share/man/man8
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "UNIX arp cache update utility";
     homepage = "http://www.arpoison.net/";
     license = with licenses; [ gpl2 ];
diff --git a/pkgs/tools/networking/assh/default.nix b/pkgs/tools/networking/assh/default.nix
index caebcb6fe8c..7d3c662b368 100644
--- a/pkgs/tools/networking/assh/default.nix
+++ b/pkgs/tools/networking/assh/default.nix
@@ -1,20 +1,29 @@
-{ stdenv, buildGoModule, fetchFromGitHub, openssh, makeWrapper }:
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, openssh
+, makeWrapper
+}:
 
 buildGoModule rec {
   pname = "assh";
-  version = "2.10.0";
+  version = "2.11.3";
 
   src = fetchFromGitHub {
     repo = "advanced-ssh-config";
     owner = "moul";
     rev = "v${version}";
-    sha256 = "0qsb5p52v961akshgs1yla2d7lhcbwixv2skqaappdmhj18a23q2";
+    sha256 = "sha256-NH7Dmqsu7uRhKWGFHBnh5GGqsNFOijDxsc+ATt28jtY=";
   };
 
-  vendorSha256 = "03ycjhal4g7bs9fhzrq01ijj48czvs272qcqkd9farsha5gf0q0b";
+  vendorSha256 = "sha256-6OAsO7zWAgPfQWD9k+nYH7hnDDUlKIjTB61ivvoubn0=";
 
   doCheck = false;
 
+  preBuild = ''
+    buildFlagsArray+=("-ldflags" "-s -w -X moul.io/assh/v2/pkg/version.Version=${version}")
+  '';
+
   nativeBuildInputs = [ makeWrapper ];
 
   postInstall = ''
@@ -27,7 +36,7 @@ buildGoModule rec {
     $out/bin/assh --help > /dev/null
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Advanced SSH config - Regex, aliases, gateways, includes and dynamic hosts";
     homepage = "https://github.com/moul/assh";
     changelog = "https://github.com/moul/assh/releases/tag/v${version}";
diff --git a/pkgs/tools/networking/atftp/default.nix b/pkgs/tools/networking/atftp/default.nix
index 7fcd677044f..0e76cb94346 100644
--- a/pkgs/tools/networking/atftp/default.nix
+++ b/pkgs/tools/networking/atftp/default.nix
@@ -2,14 +2,15 @@
 
 stdenv.mkDerivation rec {
   pname = "atftp";
-  version = "0.7.2";
+  version = "0.7.4";
 
   src = fetchurl {
     url = "mirror://sourceforge/atftp/${pname}-${version}.tar.gz";
-    sha256 = "0hah3fhzl6vfs381883vbvf4d13cdhsyf0x7ncbl55wz9rkq1l0s";
+    sha256 = "sha256-08nNDZcd/Hhtel9AVcNdTmaq/IECrANHPvIlvfftsmo=";
   };
 
-  buildInputs = [ readline tcp_wrappers pcre makeWrapper gcc ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ readline tcp_wrappers pcre gcc ];
 
   # Expects pre-GCC5 inline semantics
   NIX_CFLAGS_COMPILE = "-std=gnu89";
diff --git a/pkgs/tools/networking/atinout/default.nix b/pkgs/tools/networking/atinout/default.nix
index fcd48564da0..93535531d91 100644
--- a/pkgs/tools/networking/atinout/default.nix
+++ b/pkgs/tools/networking/atinout/default.nix
@@ -1,11 +1,11 @@
-{ stdenv, fetchgit, ronn, mount }:
+{ lib, 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";
+  NIX_CFLAGS_COMPILE = lib.optionalString (!stdenv.cc.isClang) "-Werror=implicit-fallthrough=0";
+  LANG = if stdenv.isDarwin then "en_US.UTF-8" else "C.UTF-8";
   nativeBuildInputs = [ ronn mount ];
 
   src = fetchgit {
@@ -14,11 +14,13 @@ stdenv.mkDerivation rec {
     sha256 = "0bninv2bklz7ly140cxx8iyaqjlq809jjx6xqpimn34ghwsaxbpv";
   };
 
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
   installPhase = ''
     make PREFIX=$out install
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://atinout.sourceforge.net";
     description = "Tool for talking to modems";
     platforms = platforms.unix;
diff --git a/pkgs/tools/networking/autossh/default.nix b/pkgs/tools/networking/autossh/default.nix
index f89302c4295..9b8e7f712fd 100644
--- a/pkgs/tools/networking/autossh/default.nix
+++ b/pkgs/tools/networking/autossh/default.nix
@@ -1,10 +1,11 @@
-{stdenv, fetchurl, openssh}:
+{lib, stdenv, fetchurl, openssh}:
 
 stdenv.mkDerivation rec {
-  name = "autossh-1.4g";
+  pname = "autossh";
+  version = "1.4g";
 
   src = fetchurl {
-    url = "http://www.harding.motd.ca/autossh/${name}.tgz";
+    url = "http://www.harding.motd.ca/autossh/${pname}-${version}.tgz";
     sha256 = "0xqjw8df68f4kzkns5gcah61s5wk0m44qdk2z1d6388w6viwxhsz";
   };
 
@@ -15,8 +16,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ openssh ];
 
-  installPhase =
-    ''
+  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
@@ -25,9 +25,10 @@ stdenv.mkDerivation rec {
       install -D -m644 autossh.1    $out/man/man1/autossh.1                   || return 1
     '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.harding.motd.ca/autossh/";
     description = "Automatically restart SSH sessions and tunnels";
+    license = licenses.bsd1;
     platforms = platforms.unix;
     maintainers = with maintainers; [ pSub ];
   };
diff --git a/pkgs/tools/networking/axel/default.nix b/pkgs/tools/networking/axel/default.nix
index 5cd8e41f70c..f7e761ac0fd 100644
--- a/pkgs/tools/networking/axel/default.nix
+++ b/pkgs/tools/networking/axel/default.nix
@@ -1,24 +1,24 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, autoconf-archive
-, pkgconfig, gettext, libssl, txt2man }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, autoconf-archive
+, pkg-config, gettext, libssl, txt2man }:
 
 stdenv.mkDerivation rec {
   pname = "axel";
-  version = "2.17.9";
+  version = "2.17.10";
 
   src = fetchFromGitHub {
     owner = "axel-download-accelerator";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1bhzgvvqcwa5bd487400hg1nycvw8qqxzbzvq5ywyz5d9j12hdrd";
+    sha256 = "01mpfkz98r2fx4n0gyi3b4zvlyfd5bxydp2wh431lnj0ahrsiikp";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig autoconf-archive txt2man ];
+  nativeBuildInputs = [ autoreconfHook pkg-config autoconf-archive txt2man ];
 
   buildInputs = [ gettext libssl ];
 
   installFlags = [ "ETCDIR=${placeholder "out"}/etc" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/networking/babeld/default.nix b/pkgs/tools/networking/babeld/default.nix
index debd918eb39..47894c1a532 100644
--- a/pkgs/tools/networking/babeld/default.nix
+++ b/pkgs/tools/networking/babeld/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchurl, nixosTests }:
+{ lib, stdenv, fetchurl, nixosTests }:
 
 stdenv.mkDerivation rec {
   pname = "babeld";
-  version = "1.9.2";
+  version = "1.10";
 
   src = fetchurl {
-    url = "http://www.pps.univ-paris-diderot.fr/~jch/software/files/${pname}-${version}.tar.gz";
-    sha256 = "01vzhrspnm4sy9ggaz9n3bfl5hy3qlynr218j3mdcddzm3h00kqm";
+    url = "https://www.irif.fr/~jch/software/files/${pname}-${version}.tar.gz";
+    sha256 = "1sld5bbig2pkcr4zrdpvfzifc6a3lc8i8kdzk5ryjh166844mxd5";
   };
 
   preBuild = ''
@@ -15,11 +15,11 @@ stdenv.mkDerivation rec {
 
   passthru.tests.babeld = nixosTests.babeld;
 
-  meta = {
-    homepage = "http://www.pps.univ-paris-diderot.fr/~jch/software/babel/";
+  meta = with lib; {
+    homepage = "http://www.irif.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;
+    license = licenses.mit;
+    maintainers = with maintainers; [ fpletz hexa ];
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/bacnet-stack/default.nix b/pkgs/tools/networking/bacnet-stack/default.nix
new file mode 100644
index 00000000000..a4f2ef36360
--- /dev/null
+++ b/pkgs/tools/networking/bacnet-stack/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  name = "bacnet-stack";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "bacnet-stack";
+    repo = "bacnet-stack";
+    rev = "bacnet-stack-${version}";
+    sha256 = "078p7qsy9v6fl7pzwgcr72pgjqxfxmfxyqajih2zqlb5g5sf88vh";
+  };
+
+  hardeningDisable = [ "all" ];
+
+  buildPhase = ''
+    make BUILD=debug BACNET_PORT=linux BACDL_DEFINE=-DBACDL_BIP=1 BACNET_DEFINES=" -DPRINT_ENABLED=1 -DBACFILE -DBACAPP_ALL -DBACNET_PROPERTY_LISTS"
+  '';
+
+  installPhase = ''
+    mkdir $out
+    cp -r bin $out/bin
+  '';
+
+  meta = with lib; {
+    description = "BACnet open source protocol stack for embedded systems, Linux, and Windows";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ WhittlesJr ];
+  };
+}
diff --git a/pkgs/tools/networking/badvpn/default.nix b/pkgs/tools/networking/badvpn/default.nix
index c9ebc12b0db..fd7c3b23adf 100644
--- a/pkgs/tools/networking/badvpn/default.nix
+++ b/pkgs/tools/networking/badvpn/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, cmake, openssl, nss, pkgconfig, nspr, bash, debug ? false}:
+{lib, stdenv, fetchurl, cmake, openssl, nss, pkg-config, nspr, bash, debug ? false}:
 let
   s = # Generated upstream information
   rec {
@@ -10,15 +10,15 @@ let
     sha256="02b1fra43l75mljkhrq45vcrrqv0znicjn15g7nbqx3jppzbpm5z";
   };
 
-  buildInputs = [
-    cmake openssl nss nspr
-  ];
-  compileFlags = "-O3 ${stdenv.lib.optionalString (!debug) "-DNDEBUG"}";
+
+  compileFlags = "-O3 ${lib.optionalString (!debug) "-DNDEBUG"}";
 in
 stdenv.mkDerivation {
   inherit (s) name version;
-  nativeBuildInputs = [ pkgconfig ];
-  inherit buildInputs;
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [
+    openssl nss nspr
+  ];
   src = fetchurl {
     inherit (s) url sha256;
   };
@@ -31,9 +31,9 @@ stdenv.mkDerivation {
 
   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;
+    description = "A set of network-related (mostly VPN-related) tools";
+    license = lib.licenses.bsd3 ;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/bandwhich/default.nix b/pkgs/tools/networking/bandwhich/default.nix
index 31efdaddb74..233c57bc635 100644
--- a/pkgs/tools/networking/bandwhich/default.nix
+++ b/pkgs/tools/networking/bandwhich/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security, fetchpatch }:
 
 rustPlatform.buildRustPackage rec {
   pname = "bandwhich";
-  version = "0.16.0";
+  version = "0.20.0";
 
   src = fetchFromGitHub {
     owner = "imsnif";
     repo = pname;
     rev = version;
-    sha256 = "074bgdgv6flg5xjzk7sxgqsy89ygnx7swhaqz75vvrcpx9ldysvz";
+    sha256 = "014blvrv0kk4gzga86mbk7gd5dl1szajfi972da3lrfznck1w24n";
   };
 
-  cargoSha256 = "0aq3k64g04l03h42cnnpljqffkkl1gdg6r5rqi237h0jrhci8c7w";
+  cargoSha256 = "119szaighki565w28la6qg25s3cv8wviqin9f7f9w8x2rif3ipb3";
 
-  buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
+  buildInputs = lib.optional stdenv.isDarwin Security;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A CLI utility for displaying current network utilization";
     longDescription = ''
       bandwhich sniffs a given network interface and records IP packet size, cross
@@ -26,7 +26,7 @@ rustPlatform.buildRustPackage rec {
     '';
     homepage = "https://github.com/imsnif/bandwhich";
     license = licenses.mit;
-    maintainers = with maintainers; [ filalex77 ma27 ];
+    maintainers = with maintainers; [ Br1ght0ne ma27 ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/bgpdump/default.nix b/pkgs/tools/networking/bgpdump/default.nix
index a6f66ea10fc..18d72daa009 100644
--- a/pkgs/tools/networking/bgpdump/default.nix
+++ b/pkgs/tools/networking/bgpdump/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, autoreconfHook, zlib, bzip2 }:
+{ lib, stdenv, fetchurl, autoreconfHook, zlib, bzip2 }:
 
 stdenv.mkDerivation rec {
   pname = "bgpdump";
@@ -14,9 +14,9 @@ stdenv.mkDerivation rec {
 
   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;
+    description = "Analyze dump files produced by Zebra/Quagga or MRT";
+    license = lib.licenses.hpnd;
+    maintainers = with lib.maintainers; [ lewo ];
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/networking/bgpq3/default.nix b/pkgs/tools/networking/bgpq3/default.nix
index e3d2218b0c9..bd0a623a916 100644
--- a/pkgs/tools/networking/bgpq3/default.nix
+++ b/pkgs/tools/networking/bgpq3/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "bgpq3";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
   # Fix binary install location. Remove with next upstream release.
   preInstall = "mkdir -p $out/bin";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "bgp filtering automation tool";
     homepage = "https://github.com/snar/bgpq3";
     license = licenses.bsd2;
diff --git a/pkgs/tools/networking/bgpq4/default.nix b/pkgs/tools/networking/bgpq4/default.nix
new file mode 100644
index 00000000000..40c65b35a03
--- /dev/null
+++ b/pkgs/tools/networking/bgpq4/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "bgpq4";
+  version = "0.0.7";
+
+  src = fetchFromGitHub {
+    owner = "bgp";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-iEm4BYlJi56Y4OBCdEDgRQ162F65PLZyvHSEQzULFww=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  meta = with lib; {
+    description = "BGP filtering automation tool";
+    homepage = "https://github.com/bgp/bgpq4";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ vincentbernat ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/pkgs/tools/networking/biosdevname/default.nix b/pkgs/tools/networking/biosdevname/default.nix
index 7cd7254518a..f44574fb036 100644
--- a/pkgs/tools/networking/biosdevname/default.nix
+++ b/pkgs/tools/networking/biosdevname/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, zlib, pciutils }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, zlib, pciutils }:
 
 stdenv.mkDerivation rec {
   pname = "biosdevname";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
 
   configureFlags = [ "--sbindir=\${out}/bin" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Udev helper for naming devices per BIOS names";
     license = licenses.gpl2;
     platforms = ["x86_64-linux" "i686-linux"];
diff --git a/pkgs/tools/networking/bore/default.nix b/pkgs/tools/networking/bore/default.nix
new file mode 100644
index 00000000000..b22cdb0c2ae
--- /dev/null
+++ b/pkgs/tools/networking/bore/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, rustPlatform, fetchFromBitbucket, llvmPackages, Libsystem, SystemConfiguration, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bore";
+  version = "0.3.3";
+
+  src = fetchFromBitbucket {
+    owner = "delan";
+    repo = "nonymous";
+    rev = version;
+    sha256 = "0gws1f625izrb3armh6bay1k8l9p9csl37jx03yss1r720k4vn2x";
+  };
+
+  cargoSha256 = "1n09gcp1y885lz6g2f73zw3fd0fmv7nwlvaqba2yl0kylzk7naa6";
+  cargoBuildFlags = "-p ${pname}";
+
+  # FIXME can’t test --all-targets and --doc in a single invocation
+  cargoTestFlags = "--features std --all-targets --workspace";
+
+  nativeBuildInputs = [ installShellFiles ]
+    ++ lib.optional stdenv.isDarwin llvmPackages.libclang;
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Libsystem
+    SystemConfiguration
+  ];
+
+  LIBCLANG_PATH="${llvmPackages.libclang.lib}/lib";
+
+  postInstall = ''
+    installManPage $src/bore/doc/bore.1
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    printf '\0\0\0\0\0\0\0\0\0\0\0\0' \
+    | $out/bin/bore --decode \
+    | grep -q ';; NoError #0 Query 0 0 0 0 flags'
+  '';
+
+  meta = with lib; {
+    description = "DNS query tool";
+    homepage = "https://crates.io/crates/bore";
+    license = licenses.isc;
+    maintainers = [ maintainers.delan ];
+  };
+}
diff --git a/pkgs/tools/networking/boringtun/default.nix b/pkgs/tools/networking/boringtun/default.nix
index 7c322638712..a071b5b4a3a 100644
--- a/pkgs/tools/networking/boringtun/default.nix
+++ b/pkgs/tools/networking/boringtun/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform, darwin }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, darwin }:
 
 rustPlatform.buildRustPackage rec {
   pname = "boringtun";
@@ -11,14 +11,14 @@ rustPlatform.buildRustPackage rec {
     sha256 = "0b57c7z87xwrirmq9aa9jswqyj5bavkifmq7a9hgfphcmwcskmdb";
   };
 
-  cargoSha256 = "0bms93xg75b23ls2hb8dv26y4al4nr67pqcm57rp9d4rbsfafg8c";
+  cargoSha256 = "1xn6scc8nrb9xk89hsp9v67jvyww23rjaq5fcagpbqdwf5dvg4ja";
 
-  buildInputs = stdenv.lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Security;
+  buildInputs = 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; {
+  meta = with lib; {
     description = "Userspace WireGuard® implementation in Rust";
     homepage = "https://github.com/cloudflare/boringtun";
     license = licenses.bsd3;
diff --git a/pkgs/tools/networking/boundary/default.nix b/pkgs/tools/networking/boundary/default.nix
new file mode 100644
index 00000000000..5c9abf57892
--- /dev/null
+++ b/pkgs/tools/networking/boundary/default.nix
@@ -0,0 +1,66 @@
+{ stdenv, lib, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "boundary";
+  version = "0.4.0";
+
+  src =
+    let
+      inherit (stdenv.hostPlatform) system;
+      selectSystem = attrs: attrs.${system} or (throw "Unsupported system: ${system}");
+      suffix = selectSystem {
+        x86_64-linux = "linux_amd64";
+        aarch64-linux = "linux_arm64";
+        x86_64-darwin = "darwin_amd64";
+      };
+      sha256 = selectSystem {
+        x86_64-linux = "sha256-xHvg2Kdm7hoJ7Dwh4pLXJE+EPcl9Zta/00IN3wRnOzU=";
+        aarch64-linux = "sha256-Kbr7tZjVcYiejy1CB9r10mqG+0serRx+mjPXds2/TJQ=";
+        x86_64-darwin = "sha256-a8e3gKTTsK5QRAYrB4/DtrFFGM2In73wKEcEMcbeUTI=";
+      };
+    in
+    fetchzip {
+      url = "https://releases.hashicorp.com/boundary/${version}/boundary_${version}_${suffix}.zip";
+      inherit sha256;
+    };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -D boundary $out/bin/boundary
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/boundary --help
+    $out/bin/boundary version
+    runHook postInstallCheck
+  '';
+
+  dontPatchELF = true;
+  dontPatchShebangs = true;
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    homepage = "https://boundaryproject.io/";
+    changelog = "https://github.com/hashicorp/boundary/blob/v${version}/CHANGELOG.md";
+    description = "Enables identity-based access management for dynamic infrastructure";
+    longDescription = ''
+      Boundary provides a secure way to access hosts and critical systems
+      without having to manage credentials or expose your network, and is
+      entirely open source.
+
+      Boundary is designed to be straightforward to understand, highly scalable,
+      and resilient. It can run in clouds, on-prem, secure enclaves and more,
+      and does not require an agent to be installed on every end host.
+    '';
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ jk ];
+    platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" ];
+  };
+}
diff --git a/pkgs/tools/networking/boundary/update.sh b/pkgs/tools/networking/boundary/update.sh
new file mode 100755
index 00000000000..43733930710
--- /dev/null
+++ b/pkgs/tools/networking/boundary/update.sh
@@ -0,0 +1,39 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnused gawk nix-prefetch
+
+set -euo pipefail
+
+ROOT="$(dirname "$(readlink -f "$0")")"
+NIX_DRV="$ROOT/default.nix"
+if [ ! -f "$NIX_DRV" ]; then
+  echo "ERROR: cannot find default.nix in $ROOT"
+  exit 1
+fi
+
+fetch_arch() {
+  VER="$1"; ARCH="$2"
+  URL="https://releases.hashicorp.com/boundary/${VER}/boundary_${VER}_${ARCH}.zip"
+  nix-prefetch "{ stdenv, fetchzip }:
+stdenv.mkDerivation rec {
+  pname = \"boundary\"; version = \"${VER}\";
+  src = fetchzip { url = \"$URL\"; };
+}
+"
+}
+
+replace_sha() {
+  sed -i "s#$1 = \"sha256-.\{44\}\"#$1 = \"$2\"#" "$NIX_DRV"
+}
+
+# https://releases.hashicorp.com/boundary/0.1.4/boundary_0.1.4_linux_amd64.zip
+BOUNDARY_VER=$(curl -Ls -w "%{url_effective}" -o /dev/null https://github.com/hashicorp/boundary/releases/latest | awk -F'/' '{print $NF}' | sed 's/v//')
+
+BOUNDARY_LINUX_X64_SHA256=$(fetch_arch "$BOUNDARY_VER" "linux_amd64")
+BOUNDARY_DARWIN_X64_SHA256=$(fetch_arch "$BOUNDARY_VER" "darwin_amd64")
+BOUNDARY_LINUX_AARCH64_SHA256=$(fetch_arch "$BOUNDARY_VER" "linux_arm64")
+
+sed -i "s/version = \".*\"/version = \"$BOUNDARY_VER\"/" "$NIX_DRV"
+
+replace_sha "x86_64-linux" "$BOUNDARY_LINUX_X64_SHA256"
+replace_sha "x86_64-darwin" "$BOUNDARY_DARWIN_X64_SHA256"
+replace_sha "aarch64-linux" "$BOUNDARY_LINUX_AARCH64_SHA256"
diff --git a/pkgs/tools/networking/brook/default.nix b/pkgs/tools/networking/brook/default.nix
index b70eb080a7a..b6f7cb1869a 100644
--- a/pkgs/tools/networking/brook/default.nix
+++ b/pkgs/tools/networking/brook/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "brook";
@@ -15,7 +15,7 @@ buildGoPackage rec {
 
   goDeps = ./deps.nix;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/txthinking/brook";
     description = "A cross-platform Proxy/VPN software";
     license = with licenses; [ gpl3 ];
diff --git a/pkgs/tools/networking/bsd-finger/default.nix b/pkgs/tools/networking/bsd-finger/default.nix
index d011665a492..189f636cd1f 100644
--- a/pkgs/tools/networking/bsd-finger/default.nix
+++ b/pkgs/tools/networking/bsd-finger/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 # !!! Duplication: this package is almost exactly the same as `bsd-finger'.
 
@@ -16,9 +16,9 @@ stdenv.mkDerivation rec {
 
   preBuild = "cd finger";
 
-  preInstall = '' mkdir -p $out/man/man1 $out/bin '';
+  preInstall = "mkdir -p $out/man/man1 $out/bin ";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     platforms = platforms.linux;
     license = licenses.bsdOriginal;
   };
diff --git a/pkgs/tools/networking/bud/default.nix b/pkgs/tools/networking/bud/default.nix
index a79cbdc8bbd..7a4bd5adcba 100644
--- a/pkgs/tools/networking/bud/default.nix
+++ b/pkgs/tools/networking/bud/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchgit, python, gyp, utillinux }:
+{ stdenv, lib, fetchgit, python2, util-linux }:
 
 stdenv.mkDerivation {
   pname = "bud";
@@ -11,9 +11,11 @@ stdenv.mkDerivation {
     sha256 = "08yr6l4lc2m6rng06253fcaznf6sq0v053wfr8bbym42c32z0xdh";
   };
 
-  buildInputs = [
-    python gyp
-  ] ++ lib.optional stdenv.isLinux utillinux;
+  nativeBuildInputs = [
+    python2 python2.pkgs.gyp
+  ] ++ lib.optional stdenv.isLinux util-linux;
+
+  strictDeps = true;
 
   buildPhase = ''
     python ./gyp_bud -f make
diff --git a/pkgs/tools/networking/bukubrow/default.nix b/pkgs/tools/networking/bukubrow/default.nix
index b8f2d70848d..f9747d4e0a0 100644
--- a/pkgs/tools/networking/bukubrow/default.nix
+++ b/pkgs/tools/networking/bukubrow/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, rustPlatform, fetchFromGitHub, sqlite }: let
+{ lib, rustPlatform, fetchFromGitHub, sqlite }: let
 
 manifest = {
   description = "Bukubrow extension host application";
@@ -18,7 +18,7 @@ in rustPlatform.buildRustPackage rec {
     sha256 = "1a3gqxj6d1shv3w0v9m8x2xr0bvcynchy778yqalxkc3x4vr0nbn";
   };
 
-  cargoSha256 = "1k6mffcs9g0z5lh8hpflyharx6653cs1f2rjpldab0fc5fjmjfza";
+  cargoSha256 = "0z6i9wzz5gy9rs8cxfmwg4mpfajv0xvj4nn6jfl7f1rw6k457jc9";
 
   buildInputs = [ sqlite ];
 
@@ -38,8 +38,8 @@ in rustPlatform.buildRustPackage rec {
     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";
+  meta = with lib; {
+    description = "A WebExtension for Buku, a command-line bookmark manager";
     homepage = "https://github.com/SamHH/bukubrow-host";
     license = licenses.gpl3;
     maintainers = with maintainers; [ infinisil ];
diff --git a/pkgs/tools/networking/bully/default.nix b/pkgs/tools/networking/bully/default.nix
index 4117932550f..b49af33cd9e 100644
--- a/pkgs/tools/networking/bully/default.nix
+++ b/pkgs/tools/networking/bully/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libpcap }:
+{ lib, stdenv, fetchFromGitHub, libpcap }:
 
 stdenv.mkDerivation rec {
   pname = "bully";
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     install -Dm444 -t $out/share/doc/${pname} ../*.md
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Retrieve WPA/WPA2 passphrase from a WPS enabled access point";
     homepage = "https://github.com/kimocoder/bully";
     license = licenses.gpl3;
diff --git a/pkgs/tools/networking/burpsuite/default.nix b/pkgs/tools/networking/burpsuite/default.nix
index e8caddcbe29..53d1a3d4f23 100644
--- a/pkgs/tools/networking/burpsuite/default.nix
+++ b/pkgs/tools/networking/burpsuite/default.nix
@@ -1,28 +1,37 @@
-{ stdenv, fetchurl, jre, runtimeShell }:
+{ lib, stdenv, fetchurl, jdk11, runtimeShell, unzip, chromium }:
 
-let
-  version = "2020.1";
-  jar = fetchurl {
+stdenv.mkDerivation rec {
+  pname = "burpsuite";
+  version = "2021.6";
+
+  src = fetchurl {
     name = "burpsuite.jar";
-    url = "https://portswigger.net/Burp/Releases/Download?productId=100&version=${version}&type=Jar";
-    sha256 = "12awfy0f8fyqjc0kza1gkmdx1g8bniw1xqaps2dhjimi6s0lq5jx";
+    urls = [
+      "https://portswigger.net/Burp/Releases/Download?productId=100&version=${version}&type=Jar"
+      "https://web.archive.org/web/https://portswigger.net/Burp/Releases/Download?productId=100&version=${version}&type=Jar"
+    ];
+    sha256 = "sha256-DPUi/KRnJkwrc7KMq10+LE6+MX9yJLgrgIHKhlfL+vc=";
   };
-  launcher = ''
-    #!${runtimeShell}
-    exec ${jre}/bin/java -jar ${jar} "$@"
-  '';
-in stdenv.mkDerivation {
-  pname = "burpsuite";
-  inherit version;
-  buildCommand = ''
+
+  dontUnpack = true;
+  dontBuild = true;
+  installPhase = ''
+    runHook preInstall
+
     mkdir -p $out/bin
-    echo "${launcher}" > $out/bin/burpsuite
+    echo '#!${runtimeShell}
+    eval "$(${unzip}/bin/unzip -p ${src} chromium.properties)"
+    mkdir -p "$HOME/.BurpSuite/burpbrowser/$linux64"
+    ln -sf "${chromium}/bin/chromium" "$HOME/.BurpSuite/burpbrowser/$linux64/chrome"
+    exec ${jdk11}/bin/java -jar ${src} "$@"' > $out/bin/burpsuite
     chmod +x $out/bin/burpsuite
+
+    runHook postInstall
   '';
 
   preferLocalBuild = true;
 
-  meta = {
+  meta = with lib; {
     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.
@@ -32,9 +41,9 @@ in stdenv.mkDerivation {
     '';
     homepage = "https://portswigger.net/burp/";
     downloadPage = "https://portswigger.net/burp/freedownload";
-    license = [ stdenv.lib.licenses.unfree ];
-    platforms = jre.meta.platforms;
+    license = licenses.unfree;
+    platforms = jdk11.meta.platforms;
     hydraPlatforms = [];
-    maintainers = with stdenv.lib.maintainers; [ bennofs ];
+    maintainers = with maintainers; [ bennofs ];
   };
 }
diff --git a/pkgs/tools/networking/bwm-ng/default.nix b/pkgs/tools/networking/bwm-ng/default.nix
index ae3edf7dcea..26cdfe7c0db 100644
--- a/pkgs/tools/networking/bwm-ng/default.nix
+++ b/pkgs/tools/networking/bwm-ng/default.nix
@@ -1,4 +1,4 @@
-{ writeText, stdenv, fetchurl, ncurses }:
+{ writeText, lib, stdenv, fetchurl, ncurses }:
 
 let
   version = "0.6.1";
@@ -41,9 +41,9 @@ stdenv.mkDerivation rec {
 
 
   # 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";
+  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-std=gnu89";
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/networking/cadaver/configure.patch b/pkgs/tools/networking/cadaver/configure.patch
new file mode 100644
index 00000000000..b618099b371
--- /dev/null
+++ b/pkgs/tools/networking/cadaver/configure.patch
@@ -0,0 +1,20 @@
+--- a/configure.orig
++++ b/configure
+@@ -9595,7 +9595,7 @@ fi
+ $as_echo "$ne_cv_lib_neon" >&6; }
+     if test "$ne_cv_lib_neon" = "yes"; then
+        ne_cv_lib_neonver=no
+-       for v in 27 28 29; do
++       for v in 27 28 29 30 31; do
+           case $ne_libver in
+           0.$v.*) ne_cv_lib_neonver=yes ;;
+           esac
+@@ -10328,7 +10328,7 @@ fi
+ $as_echo "$ne_cv_lib_neon" >&6; }
+     if test "$ne_cv_lib_neon" = "yes"; then
+        ne_cv_lib_neonver=no
+-       for v in 27 28 29; do
++       for v in 27 28 29 30 31; do
+           case $ne_libver in
+           0.$v.*) ne_cv_lib_neonver=yes ;;
+           esac
diff --git a/pkgs/tools/networking/cadaver/default.nix b/pkgs/tools/networking/cadaver/default.nix
index 46ebb234fb1..70c7972bd65 100644
--- a/pkgs/tools/networking/cadaver/default.nix
+++ b/pkgs/tools/networking/cadaver/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, openssl, readline }:
+{ lib, stdenv, fetchurl, fetchpatch, neon, pkg-config, readline, zlib}:
 
 stdenv.mkDerivation rec {
   name = "cadaver-0.23.3";
@@ -14,13 +14,17 @@ stdenv.mkDerivation rec {
       name = "disable-sslv2.patch";
       sha256 = "1qx65hv584wdarks51yhd3y38g54affkphm5wz27xiz4nhmbssrr";
     })
+    # Cadaver also works with newer versions of neon than stated
+    # in the configure script
+    ./configure.patch
   ];
 
   configureFlags = [ "--with-ssl" "--with-readline" ];
 
-  buildInputs = [ openssl readline ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ neon readline zlib ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A command-line WebDAV client";
     homepage    = "http://www.webdav.org/cadaver";
     maintainers = with maintainers; [ ianwookim ];
diff --git a/pkgs/tools/networking/calendar-cli/default.nix b/pkgs/tools/networking/calendar-cli/default.nix
new file mode 100644
index 00000000000..497b77b57ac
--- /dev/null
+++ b/pkgs/tools/networking/calendar-cli/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "calendar-cli";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "tobixen";
+    repo = "calendar-cli";
+    rev = "v${version}";
+    sha256 = "0qjld2m7hl3dx90491pqbjcja82c1f5gwx274kss4lkb8aw0kmlv";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    icalendar
+    caldav
+    pytz
+    tzlocal
+    six
+  ];
+
+  # tests require networking
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Simple command-line CalDav client";
+    homepage = "https://github.com/tobixen/calendar-cli";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/tools/networking/cantoolz/default.nix b/pkgs/tools/networking/cantoolz/default.nix
new file mode 100644
index 00000000000..11a0315184c
--- /dev/null
+++ b/pkgs/tools/networking/cantoolz/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, bitstring
+, buildPythonApplication
+, fetchFromGitHub
+, fetchpatch
+, flask
+, mido
+, numpy
+, pyserial
+, pytestCheckHook
+, pythonOlder
+}:
+
+buildPythonApplication rec {
+  pname = "cantoolz";
+  version = "3.7.0";
+  disabled = pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "CANToolz";
+    repo = "CANToolz";
+    rev = "v${version}";
+    sha256 = "0xkj7zyx6pz866q61c84mdagpgdyd633v85hk7qxhamca33rc4yi";
+  };
+
+  patches = [
+    (fetchpatch {
+      # Replace time.clock() which was removed, https://github.com/CANToolz/CANToolz/pull/30
+      url = "https://github.com/CANToolz/CANToolz/pull/30/commits/d75574523d3b273c40fb714532c4de27f9e6dd3e.patch";
+      sha256 = "0g91hywg5q6f2qk1awgklywigclrbhh6a6mwd0kpbkk1wawiiwbc";
+    })
+  ];
+
+  propagatedBuildInputs = [
+    flask
+    pyserial
+    mido
+    numpy
+    bitstring
+  ];
+
+  checkInputs = [ pytestCheckHook ];
+  disabledTests = [ "test_process" ];
+  pythonImportsCheck = [ "cantoolz" ];
+
+  meta = with lib; {
+    description = "Black-box CAN network analysis framework";
+    longDescription = ''
+      CANToolz is a framework for analysing CAN networks and devices. It
+      provides multiple modules that can be chained using CANToolz's pipe
+      system and used by security researchers, automotive/OEM security
+      testers in black-box analysis.
+
+      CANToolz can be used for ECU discovery, MitM testing, fuzzing, brute
+      forcing, scanning or R&D, testing and validation. More can easily be
+      implemented with a new module.
+    '';
+    homepage = "https://github.com/CANToolz/CANToolz";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/networking/carddav-util/default.nix b/pkgs/tools/networking/carddav-util/default.nix
index c28048a56c0..300e03761a6 100644
--- a/pkgs/tools/networking/carddav-util/default.nix
+++ b/pkgs/tools/networking/carddav-util/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, python, pythonPackages, makeWrapper }:
+{ lib, stdenv, fetchgit, python3Packages, makeWrapper }:
 
 stdenv.mkDerivation {
 
@@ -10,9 +10,11 @@ stdenv.mkDerivation {
     sha256 = "0f0raffdy032wlnxfck6ky60r163nhqfbr311y4ry55l60s4497n";
   };
 
-  buildInputs = [makeWrapper];
+  nativeBuildInputs = [ makeWrapper ];
 
-  propagatedBuildInputs = with pythonPackages; [ requests vobject lxml ];
+  propagatedBuildInputs = with python3Packages; [ requests vobject lxml ];
+
+  strictDeps = true;
 
   doCheck = false; # no test
 
@@ -20,7 +22,7 @@ stdenv.mkDerivation {
     mkdir -p $out/bin
     cp $src/carddav-util.py $out/bin
 
-    pythondir="$out/lib/${python.libPrefix}/site-packages"
+    pythondir="$out/lib/${python3Packages.python.sitePackages}"
     mkdir -p "$pythondir"
     cp $src/carddav.py "$pythondir"
   '';
@@ -31,7 +33,7 @@ stdenv.mkDerivation {
       --prefix PATH : "$prefix/bin:$PATH"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/ljanyst/carddav-util";
     description = "A CardDAV import/export utility";
     platforms = platforms.unix;
diff --git a/pkgs/tools/networking/cassowary/default.nix b/pkgs/tools/networking/cassowary/default.nix
index 962a46cb27f..527ecfbf98d 100644
--- a/pkgs/tools/networking/cassowary/default.nix
+++ b/pkgs/tools/networking/cassowary/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "cassowary";
-  version = "0.11.0";
+  version = "0.14.0";
 
   src = fetchFromGitHub {
     owner = "rogerwelin";
     repo = pname;
     rev = "v${version}";
-    sha256 = "161wzcdq7kpny6fzxsqk2ivnah0xwmh2knv37jn0x18lclga1k9s";
+    sha256 = "sha256-rQNrxAKf2huY9I6iqdf1iYxgXaQI0LG1Lkrnv1OuJsg=";
   };
 
-  vendorSha256 = "1qgilmkai9isbbg4pzqic6i8v5z8cay0ilw1gb69z4a6f2q4zhkp";
+  vendorSha256 = "sha256-hGpiL88x2roFEjJJM4CKyt3k66VK1pEnpOwvhDPDp6M=";
 
   doCheck = false;
 
diff --git a/pkgs/tools/networking/ccnet/default.nix b/pkgs/tools/networking/ccnet/default.nix
deleted file mode 100644
index 48d675ea09b..00000000000
--- a/pkgs/tools/networking/ccnet/default.nix
+++ /dev/null
@@ -1,25 +0,0 @@
-{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/pkgs/tools/networking/cdpr/default.nix b/pkgs/tools/networking/cdpr/default.nix
new file mode 100644
index 00000000000..6ac69b95dba
--- /dev/null
+++ b/pkgs/tools/networking/cdpr/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, libpcap }:
+
+stdenv.mkDerivation rec {
+  pname = "cdpr";
+  version = "2.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}/${version}/${pname}-${version}.tgz";
+    sha256 = "1idyvyafkk0ifcbi7mc65b60qia6hpsdb6s66j4ggqp7if6vblrj";
+  };
+
+  buildInputs = [ libpcap ];
+
+  installPhase = ''
+    install -Dm755 cdpr $out/bin/cdpr
+  '';
+
+  meta = with lib; {
+    description = "Cisco Discovery Protocol Reporter";
+    homepage = "http://cdpr.sourceforge.net/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.sgo ];
+  };
+}
diff --git a/pkgs/tools/networking/chaos/default.nix b/pkgs/tools/networking/chaos/default.nix
new file mode 100644
index 00000000000..dc46032dcde
--- /dev/null
+++ b/pkgs/tools/networking/chaos/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "chaos";
+  version = "0.1.9";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = "chaos-client";
+    rev = "v${version}";
+    sha256 = "13lblrckf65y7kd3lw4s12bi05rv4iv25sr5xbp63l9ly5sbzaz6";
+  };
+
+  vendorSha256 = "1mc60jkf7xmf3zsb2fihsgg3jkb2mfvsw84aby2kqcf14hdsk2gl";
+
+  subPackages = [
+    "cmd/chaos/"
+  ];
+
+  meta = with lib; {
+    description = "Tool to communicate with Chaos DNS API";
+    homepage = "https://github.com/projectdiscovery/chaos-client";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/networking/chisel/default.nix b/pkgs/tools/networking/chisel/default.nix
new file mode 100644
index 00000000000..5d82a549e88
--- /dev/null
+++ b/pkgs/tools/networking/chisel/default.nix
@@ -0,0 +1,36 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "chisel";
+  version = "1.7.6";
+
+  src = fetchFromGitHub {
+    owner = "jpillora";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hUurgwbSUcNZiSi+eVTG/Ija/yxPeWuvEE5pUiG7Dls=";
+  };
+
+  vendorSha256 = "sha256-GzsQ6LXxe9UQc13XbsYFOWPe0EzlyHechchKc6xDkAc=";
+
+  buildFlagsArray = [ "-ldflags=-s -w -X github.com/jpillora/chisel/share.BuildVersion=${version}" ];
+
+  # tests require access to the network
+  doCheck = false;
+
+  meta = with lib; {
+    description = "TCP/UDP tunnel over HTTP";
+    longDescription = ''
+      Chisel is a fast TCP/UDP tunnel, transported over HTTP, secured via
+      SSH. Single executable including both client and server. Chisel is
+      mainly useful for passing through firewalls, though it can also be
+      used to provide a secure endpoint into your network.
+    '';
+    homepage = "https://github.com/jpillora/chisel";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/networking/chrony/allow-clock_adjtime.patch b/pkgs/tools/networking/chrony/allow-clock_adjtime.patch
deleted file mode 100644
index 2fa3baca722..00000000000
--- a/pkgs/tools/networking/chrony/allow-clock_adjtime.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-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/pkgs/tools/networking/chrony/default.nix b/pkgs/tools/networking/chrony/default.nix
index 6c8254c797b..24968c64a09 100644
--- a/pkgs/tools/networking/chrony/default.nix
+++ b/pkgs/tools/networking/chrony/default.nix
@@ -1,36 +1,31 @@
-{ stdenv, fetchurl, pkgconfig, libcap, readline, texinfo, nss, nspr
-, libseccomp, pps-tools }:
+{ lib, stdenv, fetchurl, pkg-config, libcap, readline, texinfo, nss, nspr
+, libseccomp, pps-tools, gnutls }:
 
 assert stdenv.isLinux -> libcap != null;
 
 stdenv.mkDerivation rec {
   pname = "chrony";
-  version = "3.5.1";
+  version = "4.1";
 
   src = fetchurl {
     url = "https://download.tuxfamily.org/chrony/${pname}-${version}.tar.gz";
-    sha256 = "19ywl8a3lb2id7lcna5hp2g4pjnfwdc9ihr0fk6i9m45vdq2za0v";
+    sha256 = "sha256-7Xby0/k0esYiGpGtS9VT3QVlrBiM10kNCAHQj3FxFkw=";
   };
 
-  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 ];
+  buildInputs = [ readline texinfo nss nspr gnutls ]
+    ++ lib.optionals stdenv.isLinux [ libcap libseccomp pps-tools ];
+  nativeBuildInputs = [ pkg-config ];
 
   hardeningEnable = [ "pie" ];
 
   configureFlags = [ "--chronyvardir=$(out)/var/lib/chrony" ]
-    ++ stdenv.lib.optional stdenv.isLinux "--enable-scfilter";
+    ++ lib.optional stdenv.isLinux "--enable-scfilter";
 
-  meta = with stdenv.lib; {
+  meta = with 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";
diff --git a/pkgs/tools/networking/chrony/fix-seccomp-build.patch b/pkgs/tools/networking/chrony/fix-seccomp-build.patch
deleted file mode 100644
index 6888e7efeb7..00000000000
--- a/pkgs/tools/networking/chrony/fix-seccomp-build.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-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/pkgs/tools/networking/circus/default.nix b/pkgs/tools/networking/circus/default.nix
index 82c9db90432..f24c0e629cb 100644
--- a/pkgs/tools/networking/circus/default.nix
+++ b/pkgs/tools/networking/circus/default.nix
@@ -1,7 +1,14 @@
-{ stdenv, python3Packages }:
+{ lib, python3 }:
 
 let
-  inherit (python3Packages) buildPythonApplication fetchPypi iowait psutil pyzmq tornado_4 mock;
+  python = python3.override {
+    self = python;
+    packageOverrides = self: super: {
+      tornado = super.tornado_4;
+    };
+  };
+
+  inherit (python.pkgs) buildPythonApplication fetchPypi iowait psutil pyzmq tornado mock six;
 in
 
 buildPythonApplication rec {
@@ -23,9 +30,9 @@ buildPythonApplication rec {
 
   doCheck = false; # weird error
 
-  propagatedBuildInputs = [ iowait psutil pyzmq tornado_4 ];
+  propagatedBuildInputs = [ iowait psutil pyzmq tornado six ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A process and socket manager";
     homepage = "https://github.circus.com/circus-tent/circus";
     license = licenses.asl20;
diff --git a/pkgs/tools/networking/cjdns/default.nix b/pkgs/tools/networking/cjdns/default.nix
index 13388d33779..474c9d59c9e 100644
--- a/pkgs/tools/networking/cjdns/default.nix
+++ b/pkgs/tools/networking/cjdns/default.nix
@@ -1,23 +1,23 @@
-{ stdenv, fetchFromGitHub, nodejs, which, python27, utillinux, nixosTests }:
+{ lib, stdenv, fetchFromGitHub, nodejs, which, python27, util-linux, nixosTests }:
 
 stdenv.mkDerivation rec {
   pname = "cjdns";
-  version = "20.7";
+  version = "21.1";
 
   src = fetchFromGitHub {
     owner = "cjdelisle";
     repo = "cjdns";
     rev = "cjdns-v${version}";
-    sha256 = "09gpqpzc00pp3cj7lyq9876p7is4bcndpdi5knqbv824vk4bj3k0";
+    sha256 = "NOmk+vMZ8i0E2MjrUzksk+tkJ9XVVNEXlE5OOTNa+Y0=";
   };
 
   buildInputs = [ which python27 nodejs ] ++
     # for flock
-    stdenv.lib.optional stdenv.isLinux utillinux;
+    lib.optional stdenv.isLinux util-linux;
 
   CFLAGS = "-O2 -Wno-error=stringop-truncation";
   buildPhase =
-    stdenv.lib.optionalString stdenv.isAarch32 "Seccomp_NO=1 "
+    lib.optionalString stdenv.isAarch32 "Seccomp_NO=1 "
     + "bash do";
   installPhase = ''
     install -Dt "$out/bin/" cjdroute makekeys privatetopublic publictoip6
@@ -31,10 +31,10 @@ stdenv.mkDerivation rec {
 
   passthru.tests.basic = nixosTests.cjdns;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/cjdelisle/cjdns";
     description = "Encrypted networking for regular people";
-    license = licenses.gpl3;
+    license = licenses.gpl3Plus;
     maintainers = with maintainers; [ ehmry ];
     platforms = platforms.linux;
   };
diff --git a/pkgs/tools/networking/cksfv/default.nix b/pkgs/tools/networking/cksfv/default.nix
index c777f487b3d..581d39636fa 100644
--- a/pkgs/tools/networking/cksfv/default.nix
+++ b/pkgs/tools/networking/cksfv/default.nix
@@ -1,14 +1,14 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation rec {
-  name = "cksfv-1.3.14";
+  name = "cksfv-1.3.15";
 
   src = fetchurl {
     url = "http://zakalwe.fi/~shd/foss/cksfv/files/${name}.tar.bz2";
-    sha256 = "0lnz0z57phl6s52hjvlryn96xrlph9b0h89ahhv027sa79pj8g4g";
+    sha256 = "0k06aq94cn5xp4knjw0p7gz06hzh622ql2xvnrlr3q8rcmdvwwx1";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://zakalwe.fi/~shd/foss/cksfv/";
     description = "A tool for verifying files against a SFV checksum file";
     platforms = platforms.all;
diff --git a/pkgs/tools/networking/clash/default.nix b/pkgs/tools/networking/clash/default.nix
index 4447ab0f048..61e529dc872 100644
--- a/pkgs/tools/networking/clash/default.nix
+++ b/pkgs/tools/networking/clash/default.nix
@@ -1,17 +1,17 @@
-{ stdenv, fetchFromGitHub, buildGoModule }:
+{ lib, fetchFromGitHub, buildGoModule }:
 
 buildGoModule rec {
   pname = "clash";
-  version = "1.1.0";
+  version = "1.6.0";
 
   src = fetchFromGitHub {
     owner = "Dreamacro";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0cbbih035h40hhl7ykmyh9q9nzdqq1p8hmvzd4358cigz1gjc3j2";
+    sha256 = "sha256-XG/nci8Sj0vfa/SFPpJwl1Zmt/23LfKxocejplZtS0E=";
   };
 
-  vendorSha256 = "0s7mhbjfpfmzqf48d7k0d416m39x6fh5ds4q3xnvhcfx5kmdymq6";
+  vendorSha256 = "sha256-WR1CpjEMHRkpd0/iqrOm0oVXvyQO+r6GyeP0L0zx8aA=";
 
   doCheck = false;
 
@@ -20,10 +20,10 @@ buildGoModule rec {
     "-X github.com/Dreamacro/clash/constant.Version=${version}"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A rule-based tunnel in Go";
     homepage = "https://github.com/Dreamacro/clash";
-    license = licenses.gpl3;
-    maintainers = with maintainers; [ contrun filalex77 ];
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ contrun Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/networking/cloud-custodian/default.nix b/pkgs/tools/networking/cloud-custodian/default.nix
index a57d9f13d78..c5e1f7527da 100644
--- a/pkgs/tools/networking/cloud-custodian/default.nix
+++ b/pkgs/tools/networking/cloud-custodian/default.nix
@@ -3,7 +3,7 @@
 , boto3
 , botocore
 , certifi
-, dateutil
+, python-dateutil
 , jsonpatch
 , jsonschema
 , pyyaml
@@ -26,7 +26,7 @@ buildPythonApplication rec {
     boto3
     botocore
     certifi
-    dateutil
+    python-dateutil
     jsonpatch
     jsonschema
     pyyaml
diff --git a/pkgs/tools/networking/cntlm/default.nix b/pkgs/tools/networking/cntlm/default.nix
index d05d8e48dc0..fdfac8fdcbc 100644
--- a/pkgs/tools/networking/cntlm/default.nix
+++ b/pkgs/tools/networking/cntlm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, which}:
+{ lib, stdenv, fetchurl, which}:
 
 stdenv.mkDerivation rec {
   pname = "cntlm";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ which ];
 
-  preConfigure = stdenv.lib.optionalString stdenv.isDarwin ''
+  preConfigure = lib.optionalString stdenv.isDarwin ''
     substituteInPlace configure --replace "xlc_r gcc" "xlc_r gcc $CC"
     substitute Makefile Makefile.$CC --replace "CC=gcc" "CC=$CC"
   '';
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     mkdir -p $out/man/; cp doc/cntlm.1 $out/man/;
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "NTLM/NTLMv2 authenticating HTTP proxy";
     homepage = "http://cntlm.sourceforge.net/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/cocom/default.nix b/pkgs/tools/networking/cocom/default.nix
new file mode 100644
index 00000000000..f4a896af7d1
--- /dev/null
+++ b/pkgs/tools/networking/cocom/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cocom";
+  version = "1.1.3";
+
+  src = fetchFromGitHub {
+    owner = "LamdaLamdaLamda";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0sl4ivn95sr5pgw2z877gmhyfc4mk9xr457i5g2i4wqnf2jmy14j";
+  };
+
+  cargoSha256 = "04kj1yj6hhnis3ss0xs4zq8rl71rzn577g8i0wmapkjqzqwg37yb";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  # Tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "NTP client";
+    homepage = "https://github.com/LamdaLamdaLamda/cocom";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/networking/connect/default.nix b/pkgs/tools/networking/connect/default.nix
index 2fbd8ddf4a3..8b8c0018c66 100644
--- a/pkgs/tools/networking/connect/default.nix
+++ b/pkgs/tools/networking/connect/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "connect";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "00yld6yinc8s4xv3b8kbvzn2f4rja5dmp6ysv3n4847qn4k60dh7";
   };
 
-  makeFlags = [ "CC=cc" ];      # gcc and/or clang compat
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];      # gcc and/or clang compat
 
   installPhase = ''
     install -D -m ugo=rx connect $out/bin/connect
@@ -19,11 +19,11 @@ stdenv.mkDerivation rec {
     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. 
+      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 ];
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.gnu ++ lib.platforms.linux ++ lib.platforms.darwin;
+    maintainers = with lib.maintainers; [ jcumming ];
   };
 }
diff --git a/pkgs/tools/networking/connman/connman-gtk/default.nix b/pkgs/tools/networking/connman/connman-gtk/default.nix
index 5de63098185..c75254a27b1 100644
--- a/pkgs/tools/networking/connman/connman-gtk/default.nix
+++ b/pkgs/tools/networking/connman/connman-gtk/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoconf, automake, intltool, pkgconfig,
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, intltool, pkg-config,
 gtk3, connman, openconnect, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
     autoconf
     automake
     intltool
-    pkgconfig
+    pkg-config
     wrapGAppsHook
   ];
 
@@ -33,7 +33,7 @@ stdenv.mkDerivation rec {
     ./autogen.sh
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "GTK GUI for Connman";
     homepage = "https://github.com/jgke/connman-gtk";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/networking/connman/connman-ncurses/default.nix b/pkgs/tools/networking/connman/connman-ncurses/default.nix
index 1e7f54f9ddb..976708c038c 100644
--- a/pkgs/tools/networking/connman/connman-ncurses/default.nix
+++ b/pkgs/tools/networking/connman/connman-ncurses/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchpatch, fetchFromGitHub, autoreconfHook, pkgconfig, dbus, json_c, ncurses, connman }:
+{ lib, stdenv, fetchpatch, fetchFromGitHub, autoreconfHook, pkg-config, dbus, json_c, ncurses, connman }:
 
 stdenv.mkDerivation {
   pname = "connman-ncurses";
@@ -20,7 +20,7 @@ stdenv.mkDerivation {
     })
   ];
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
   buildInputs = [ dbus ncurses json_c connman ];
 
@@ -31,7 +31,7 @@ stdenv.mkDerivation {
     cp -va connman_ncurses "$out/bin/"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Simple ncurses UI for connman";
     homepage = "https://github.com/eurogiciel-oss/connman-json-client";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/connman/connman-notify/default.nix b/pkgs/tools/networking/connman/connman-notify/default.nix
index df72a947489..cbf50091303 100644
--- a/pkgs/tools/networking/connman/connman-notify/default.nix
+++ b/pkgs/tools/networking/connman/connman-notify/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitLab, python3Packages, glib, gobject-introspection, wrapGAppsHook }:
+{ lib, fetchFromGitLab, python3Packages, glib, gobject-introspection, wrapGAppsHook }:
 
 python3Packages.buildPythonApplication {
   pname = "connman-notify";
@@ -26,7 +26,7 @@ python3Packages.buildPythonApplication {
     install -D -t $out/share/doc README.rst
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Desktop notification integration for connman";
     homepage = "https://gitlab.com/wavexx/connman-notify";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/connman/connman.nix b/pkgs/tools/networking/connman/connman.nix
index 51219487220..3ec9bce0b4c 100644
--- a/pkgs/tools/networking/connman/connman.nix
+++ b/pkgs/tools/networking/connman/connman.nix
@@ -1,6 +1,6 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
-, pkgconfig
+, pkg-config
 , file
 , glib
 # always required runtime dependencies
@@ -48,17 +48,17 @@
 , enableTist ? false
 }:
 
-assert stdenv.lib.asserts.assertOneOf "firewallType" firewallType [ "iptables" "nftables" ];
-assert stdenv.lib.asserts.assertOneOf "dnsType" dnsType [ "internal" "systemd-resolved" ];
+assert lib.asserts.assertOneOf "firewallType" firewallType [ "iptables" "nftables" ];
+assert lib.asserts.assertOneOf "dnsType" dnsType [ "internal" "systemd-resolved" ];
 
-let inherit (stdenv.lib) optionals; in
+let inherit (lib) optionals; in
 
 stdenv.mkDerivation rec {
   pname = "connman";
-  version = "1.38";
+  version = "1.40";
   src = fetchurl {
     url = "mirror://kernel/linux/network/connman/${pname}-${version}.tar.xz";
-    sha256 = "0awkqigvhwwxiapw0x6yd4whl465ka8a4al0v2pcqy9ggjlsqc6b";
+    sha256 = "sha256-GleufOI0qjoXRKrDvlwhIdmNzpmUQO+KucxO39XtyxI=";
   };
 
   buildInputs = [
@@ -67,10 +67,10 @@ stdenv.mkDerivation rec {
     libmnl
     gnutls
     readline
-  ];
+  ] ++ optionals (enableOpenconnect) [ openconnect ];
 
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     file
   ]
     ++ optionals (enablePolkit) [ polkit ]
@@ -86,7 +86,7 @@ stdenv.mkDerivation rec {
 
   configureFlags = [
     # directories flags
-    "--sysconfdir=${placeholder "out"}/etc"
+    "--sysconfdir=/etc"
     "--localstatedir=/var"
     "--with-dbusconfdir=${placeholder "out"}/share"
     "--with-dbusdatadir=${placeholder "out"}/share"
@@ -161,7 +161,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A daemon for managing internet connections";
     homepage = "https://01.org/connman";
     maintainers = [ maintainers.matejc ];
diff --git a/pkgs/tools/networking/connman/connman_dmenu/default.nix b/pkgs/tools/networking/connman/connman_dmenu/default.nix
index 8bc1b47e198..3ac730f471f 100644
--- a/pkgs/tools/networking/connman/connman_dmenu/default.nix
+++ b/pkgs/tools/networking/connman/connman_dmenu/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, connman, dmenu }:
+{ lib, stdenv, fetchFromGitHub, connman, dmenu }:
 
 stdenv.mkDerivation {
   pname = "connman_dmenu";
@@ -28,8 +28,8 @@ stdenv.mkDerivation {
   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;
+    license      = lib.licenses.free;
+    maintainers  = [ lib.maintainers.magnetophon ];
+    platforms    = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/networking/corerad/default.nix b/pkgs/tools/networking/corerad/default.nix
index 4ab266e5495..8ba8109f266 100644
--- a/pkgs/tools/networking/corerad/default.nix
+++ b/pkgs/tools/networking/corerad/default.nix
@@ -1,17 +1,17 @@
-{ stdenv, buildGoModule, fetchFromGitHub, nixosTests }:
+{ lib, buildGoModule, fetchFromGitHub, nixosTests }:
 
 buildGoModule rec {
   pname = "corerad";
-  version = "0.2.8";
+  version = "0.3.3";
 
   src = fetchFromGitHub {
     owner = "mdlayher";
     repo = "corerad";
     rev = "v${version}";
-    sha256 = "053rihi8lqai3z837ddi441yl41lsg1zj9gl62s9vbjmq5l11fjh";
+    sha256 = "1xfqjxygf6r5wbf3brilx4d4hm0h518zaadmmzvkmbbz6w0fyl0k";
   };
 
-  vendorSha256 = "1ra4yfplmgzxzs1nlbm0izg339fjnkfrw071y8w4m6q6wnzdhljb";
+  vendorSha256 = "0ydyfdx9syrv719knwv64srfx4d1m9pzkivfc3q188bx5qx67pjw";
 
   doCheck = false;
 
@@ -31,9 +31,9 @@ buildGoModule rec {
     inherit (nixosTests) corerad;
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/mdlayher/corerad";
-    description = "CoreRAD extensible and observable IPv6 NDP RA daemon";
+    description = "Extensible and observable IPv6 NDP RA daemon";
     license = licenses.asl20;
     maintainers = with maintainers; [ mdlayher ];
   };
diff --git a/pkgs/tools/networking/corkscrew/default.nix b/pkgs/tools/networking/corkscrew/default.nix
index 9cfe65873ac..3aacb0da6a2 100644
--- a/pkgs/tools/networking/corkscrew/default.nix
+++ b/pkgs/tools/networking/corkscrew/default.nix
@@ -1,10 +1,11 @@
-{ stdenv, fetchurl, automake }:
+{ lib, stdenv, fetchurl, automake }:
 
 stdenv.mkDerivation rec {
-  name = "corkscrew-2.0";
+  pname = "corkscrew";
+  version = "2.0";
 
   src = fetchurl {
-    url = "http://agroman.net/corkscrew/${name}.tar.gz";
+    url = "http://agroman.net/corkscrew/corkscrew-${version}.tar.gz";
     sha256 = "0d0fcbb41cba4a81c4ab494459472086f377f9edb78a2e2238ed19b58956b0be";
   };
 
@@ -13,10 +14,10 @@ stdenv.mkDerivation rec {
     ln -sf ${automake}/share/automake-*/config.guess config.guess
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage    = "http://agroman.net/corkscrew/";
     description = "A tool for tunneling SSH through HTTP proxies";
-    license = stdenv.lib.licenses.gpl2;
+    license = lib.licenses.gpl2;
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/crackle/default.nix b/pkgs/tools/networking/crackle/default.nix
new file mode 100644
index 00000000000..00d0acd2aa9
--- /dev/null
+++ b/pkgs/tools/networking/crackle/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, libpcap, coreutils }:
+
+stdenv.mkDerivation {
+  pname = "crackle";
+  version = "unstable-2020-12-13";
+
+  src = fetchFromGitHub {
+    owner = "mikeryan";
+    repo = "crackle";
+    rev = "d83b4b6f4145ca53c46c36bbd7ccad751af76b75";
+    sha256 = "sha256-Dy4s/hr9ySrogltyk2GVsuAvwNF5+b6CDjaD+2FaPHA=";
+  };
+
+  buildInputs = [ libpcap ];
+
+  installFlags = [ "DESTDIR=$(out)" "PREFIX=" "INSTALL=${coreutils}/bin/install" ];
+
+  meta = with lib; {
+    description = "Crack and decrypt BLE encryption";
+    homepage = "https://github.com/mikeryan/crackle";
+    maintainers = with maintainers; [ fortuneteller2k ];
+    license = licenses.bsd2;
+  };
+}
diff --git a/pkgs/tools/networking/croc/default.nix b/pkgs/tools/networking/croc/default.nix
index ed4f7a5f704..001ee1c725a 100644
--- a/pkgs/tools/networking/croc/default.nix
+++ b/pkgs/tools/networking/croc/default.nix
@@ -1,29 +1,29 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub, callPackage }:
 
 buildGoModule rec {
   pname = "croc";
-  version = "8.0.13";
+  version = "9.2.0";
 
   src = fetchFromGitHub {
     owner = "schollz";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0vinccakinp996kqzry8irk7sf4djajxdfmpy982dl5y45491l4a";
+    sha256 = "sha256-wEgR/4t2NRqdlAtHS41sACSNZpDY+4IEaeftCgRpEEk=";
   };
 
-  vendorSha256 = "1d6gg7c0rb45zy9rilacn2xyr3kcb7acsh389hk6lppipmhpzr5a";
+  vendorSha256 = "sha256-YwMqIbxj6ldYBjLb3Gs96oOHM2Li4Qq8PEMeYtrcSnE=";
 
   doCheck = false;
 
   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 ];
-
+  passthru = {
+    tests = {
+      local-relay = callPackage ./test-local-relay.nix { };
+    };
+  };
+  meta = with lib; {
+    description = "Easily and securely send things from one computer to another";
     longDescription = ''
       Croc is a command line tool written in Go that allows any two computers to
       simply and securely transfer files and folders.
@@ -36,5 +36,8 @@ buildGoModule rec {
       - Allows resuming transfers that are interrupted
       - Does not require a server or port-forwarding
     '';
+    homepage = "https://github.com/schollz/croc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hugoreeves equirosa SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/networking/croc/test-local-relay.nix b/pkgs/tools/networking/croc/test-local-relay.nix
new file mode 100644
index 00000000000..bdcecb6b54c
--- /dev/null
+++ b/pkgs/tools/networking/croc/test-local-relay.nix
@@ -0,0 +1,19 @@
+{ stdenv, croc }:
+
+stdenv.mkDerivation {
+  name = "croc-test-local-relay";
+  meta.timeout = 300;
+  buildCommand = ''
+          HOME=$(mktemp -d)
+          # start a local relay
+          ${croc}/bin/croc relay --ports 11111,11112 &
+          # start sender in background
+          MSG="See you later, alligator!"
+          ${croc}/bin/croc --relay localhost:11111 send --code correct-horse-battery-staple --text "$MSG" &
+          # wait for things to settle
+          sleep 1
+          MSG2=$(${croc}/bin/croc --relay localhost:11111 --yes correct-horse-battery-staple)
+          # compare
+          [ "$MSG" = "$MSG2" ] && touch $out
+  '';
+}
diff --git a/pkgs/tools/networking/curl-unix-socket/default.nix b/pkgs/tools/networking/curl-unix-socket/default.nix
index b25e5dcab0b..ab4c3292ea5 100644
--- a/pkgs/tools/networking/curl-unix-socket/default.nix
+++ b/pkgs/tools/networking/curl-unix-socket/default.nix
@@ -1,4 +1,4 @@
-{ buildGoPackage, stdenv, fetchFromGitHub }:
+{ buildGoPackage, lib, fetchFromGitHub }:
 
 buildGoPackage rec {
   name = "curl-unix-socket-2015-04-10";
@@ -21,7 +21,7 @@ buildGoPackage rec {
     runHook postBuild
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Run HTTP requests over UNIX socket";
     license = licenses.mit;
     homepage = "https://github.com/Soulou/curl-unix-socket";
diff --git a/pkgs/tools/networking/curl/CVE-2021-22897.patch b/pkgs/tools/networking/curl/CVE-2021-22897.patch
new file mode 100644
index 00000000000..a4888879503
--- /dev/null
+++ b/pkgs/tools/networking/curl/CVE-2021-22897.patch
@@ -0,0 +1,64 @@
+From bbb71507b7bab52002f9b1e0880bed6a32834511 Mon Sep 17 00:00:00 2001
+From: Daniel Stenberg <daniel@haxx.se>
+Date: Fri, 23 Apr 2021 10:54:10 +0200
+Subject: [PATCH] schannel: don't use static to store selected ciphers
+
+CVE-2021-22897
+
+Bug: https://curl.se/docs/CVE-2021-22897.html
+---
+ lib/vtls/schannel.c | 9 +++++----
+ lib/vtls/schannel.h | 3 +++
+ 2 files changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/lib/vtls/schannel.c b/lib/vtls/schannel.c
+index 8c25ac5dd5a5..dba7072273a9 100644
+--- a/lib/vtls/schannel.c
++++ b/lib/vtls/schannel.c
+@@ -328,12 +328,12 @@ get_alg_id_by_name(char *name)
+ }
+ 
+ static CURLcode
+-set_ssl_ciphers(SCHANNEL_CRED *schannel_cred, char *ciphers)
++set_ssl_ciphers(SCHANNEL_CRED *schannel_cred, char *ciphers,
++                int *algIds)
+ {
+   char *startCur = ciphers;
+   int algCount = 0;
+-  static ALG_ID algIds[45]; /*There are 45 listed in the MS headers*/
+-  while(startCur && (0 != *startCur) && (algCount < 45)) {
++  while(startCur && (0 != *startCur) && (algCount < NUMOF_CIPHERS)) {
+     long alg = strtol(startCur, 0, 0);
+     if(!alg)
+       alg = get_alg_id_by_name(startCur);
+@@ -593,7 +593,8 @@ schannel_connect_step1(struct Curl_easy *data, struct connectdata *conn,
+     }
+ 
+     if(SSL_CONN_CONFIG(cipher_list)) {
+-      result = set_ssl_ciphers(&schannel_cred, SSL_CONN_CONFIG(cipher_list));
++      result = set_ssl_ciphers(&schannel_cred, SSL_CONN_CONFIG(cipher_list),
++                               BACKEND->algIds);
+       if(CURLE_OK != result) {
+         failf(data, "Unable to set ciphers to passed via SSL_CONN_CONFIG");
+         return result;
+diff --git a/lib/vtls/schannel.h b/lib/vtls/schannel.h
+index 2952caa1a5a1..77853aa30f96 100644
+--- a/lib/vtls/schannel.h
++++ b/lib/vtls/schannel.h
+@@ -71,6 +71,8 @@ CURLcode Curl_verify_certificate(struct Curl_easy *data,
+ #endif
+ #endif
+ 
++#define NUMOF_CIPHERS 45 /* There are 45 listed in the MS headers */
++
+ struct Curl_schannel_cred {
+   CredHandle cred_handle;
+   TimeStamp time_stamp;
+@@ -102,6 +104,7 @@ struct ssl_backend_data {
+ #ifdef HAS_MANUAL_VERIFY_API
+   bool use_manual_cred_validation; /* true if manual cred validation is used */
+ #endif
++  ALG_ID algIds[NUMOF_CIPHERS];
+ };
+ #endif /* EXPOSE_SCHANNEL_INTERNAL_STRUCTS */
+ 
diff --git a/pkgs/tools/networking/curl/CVE-2021-22898.patch b/pkgs/tools/networking/curl/CVE-2021-22898.patch
new file mode 100644
index 00000000000..ea4d2cb37e8
--- /dev/null
+++ b/pkgs/tools/networking/curl/CVE-2021-22898.patch
@@ -0,0 +1,25 @@
+From 39ce47f219b09c380b81f89fe54ac586c8db6bde Mon Sep 17 00:00:00 2001
+From: Harry Sintonen <sintonen@iki.fi>
+Date: Fri, 7 May 2021 13:09:57 +0200
+Subject: [PATCH] telnet: check sscanf() for correct number of matches
+
+CVE-2021-22898
+
+Bug: https://curl.se/docs/CVE-2021-22898.html
+---
+ lib/telnet.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/telnet.c b/lib/telnet.c
+index 26e0658ba9cc..fdd137fb0c04 100644
+--- a/lib/telnet.c
++++ b/lib/telnet.c
+@@ -922,7 +922,7 @@ static void suboption(struct Curl_easy *data)
+         size_t tmplen = (strlen(v->data) + 1);
+         /* Add the variable only if it fits */
+         if(len + tmplen < (int)sizeof(temp)-6) {
+-          if(sscanf(v->data, "%127[^,],%127s", varname, varval)) {
++          if(sscanf(v->data, "%127[^,],%127s", varname, varval) == 2) {
+             msnprintf((char *)&temp[len], sizeof(temp) - len,
+                       "%c%s%c%s", CURL_NEW_ENV_VAR, varname,
+                       CURL_NEW_ENV_VALUE, varval);
diff --git a/pkgs/tools/networking/curl/CVE-2021-22901.patch b/pkgs/tools/networking/curl/CVE-2021-22901.patch
new file mode 100644
index 00000000000..6bd70aa41b1
--- /dev/null
+++ b/pkgs/tools/networking/curl/CVE-2021-22901.patch
@@ -0,0 +1,437 @@
+Based on upstream 7f4a9a9b2a49547eae24d2e19bc5c346e9026479, modified by ris to
+apply without 0c55fbab45bedb761766109d41c3da49c4bc66c6
+
+diff --git a/lib/multi.c b/lib/multi.c
+index 54365f399e9b..1b3e261c682a 100644
+--- a/lib/multi.c
++++ b/lib/multi.c
+@@ -878,8 +878,10 @@ bool Curl_multiplex_wanted(const struct Curl_multi *multi)
+ void Curl_detach_connnection(struct Curl_easy *data)
+ {
+   struct connectdata *conn = data->conn;
+-  if(conn)
++  if(conn) {
+     Curl_llist_remove(&conn->easyq, &data->conn_queue, NULL);
++    Curl_ssl_detach_conn(data, conn);
++  }
+   data->conn = NULL;
+ }
+ 
+@@ -896,6 +898,7 @@ void Curl_attach_connnection(struct Curl_easy *data,
+   data->conn = conn;
+   Curl_llist_insert_next(&conn->easyq, conn->easyq.tail, data,
+                          &data->conn_queue);
++  Curl_ssl_associate_conn(data, conn);
+ }
+ 
+ static int waitconnect_getsock(struct connectdata *conn,
+diff --git a/lib/vtls/gskit.c b/lib/vtls/gskit.c
+index c648f624579b..ca953769d1ba 100644
+--- a/lib/vtls/gskit.c
++++ b/lib/vtls/gskit.c
+@@ -1304,7 +1304,9 @@ const struct Curl_ssl Curl_ssl_gskit = {
+   Curl_none_set_engine_default,   /* set_engine_default */
+   Curl_none_engines_list,         /* engines_list */
+   Curl_none_false_start,          /* false_start */
+-  NULL                            /* sha256sum */
++  NULL,                           /* sha256sum */
++  NULL,                           /* associate_connection */
++  NULL                            /* disassociate_connection */
+ };
+ 
+ #endif /* USE_GSKIT */
+diff --git a/lib/vtls/gtls.c b/lib/vtls/gtls.c
+index a10c0dbcca05..ecde5c44deeb 100644
+--- a/lib/vtls/gtls.c
++++ b/lib/vtls/gtls.c
+@@ -1656,7 +1656,9 @@ const struct Curl_ssl Curl_ssl_gnutls = {
+   Curl_none_set_engine_default,  /* set_engine_default */
+   Curl_none_engines_list,        /* engines_list */
+   Curl_none_false_start,         /* false_start */
+-  gtls_sha256sum                 /* sha256sum */
++  gtls_sha256sum,                /* sha256sum */
++  NULL,                          /* associate_connection */
++  NULL                           /* disassociate_connection */
+ };
+ 
+ #endif /* USE_GNUTLS */
+diff --git a/lib/vtls/mbedtls.c b/lib/vtls/mbedtls.c
+index ca77de58667c..3a0be0f04b4f 100644
+--- a/lib/vtls/mbedtls.c
++++ b/lib/vtls/mbedtls.c
+@@ -1093,7 +1093,9 @@ const struct Curl_ssl Curl_ssl_mbedtls = {
+   Curl_none_set_engine_default,     /* set_engine_default */
+   Curl_none_engines_list,           /* engines_list */
+   Curl_none_false_start,            /* false_start */
+-  mbedtls_sha256sum                 /* sha256sum */
++  mbedtls_sha256sum,                /* sha256sum */
++  NULL,                             /* associate_connection */
++  NULL                              /* disassociate_connection */
+ };
+ 
+ #endif /* USE_MBEDTLS */
+diff --git a/lib/vtls/mesalink.c b/lib/vtls/mesalink.c
+index f16c77c27fe0..bf8600d3230b 100644
+--- a/lib/vtls/mesalink.c
++++ b/lib/vtls/mesalink.c
+@@ -666,7 +666,9 @@ const struct Curl_ssl Curl_ssl_mesalink = {
+   Curl_none_set_engine_default,  /* set_engine_default */
+   Curl_none_engines_list,        /* engines_list */
+   Curl_none_false_start,         /* false_start */
+-  NULL                           /* sha256sum */
++  NULL,                          /* sha256sum */
++  NULL,                          /* associate_connection */
++  NULL                           /* disassociate_connection */
+ };
+ 
+ #endif
+diff --git a/lib/vtls/nss.c b/lib/vtls/nss.c
+index 2aa4bdaa134f..1582b1e580a9 100644
+--- a/lib/vtls/nss.c
++++ b/lib/vtls/nss.c
+@@ -2465,7 +2465,9 @@ const struct Curl_ssl Curl_ssl_nss = {
+   Curl_none_set_engine_default, /* set_engine_default */
+   Curl_none_engines_list,       /* engines_list */
+   nss_false_start,              /* false_start */
+-  nss_sha256sum                 /* sha256sum */
++  nss_sha256sum,                /* sha256sum */
++  NULL,                         /* associate_connection */
++  NULL                          /* disassociate_connection */
+ };
+ 
+ #endif /* USE_NSS */
+diff --git a/lib/vtls/openssl.c b/lib/vtls/openssl.c
+index 1521600dd5f6..ebd7abc3b4ac 100644
+--- a/lib/vtls/openssl.c
++++ b/lib/vtls/openssl.c
+@@ -240,6 +240,10 @@ struct ssl_backend_data {
+ #endif
+ };
+ 
++static void ossl_associate_connection(struct Curl_easy *data,
++                                      struct connectdata *conn,
++                                      int sockindex);
++
+ /*
+  * Number of bytes to read from the random number seed file. This must be
+  * a finite value (because some entropy "files" like /dev/urandom have
+@@ -2581,6 +2585,7 @@ static CURLcode ossl_connect_step1(struct Curl_easy *data,
+   curl_socket_t sockfd = conn->sock[sockindex];
+   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
+   ctx_option_t ctx_options = 0;
++  void *ssl_sessionid = NULL;
+ 
+ #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
+   bool sni;
+@@ -3225,46 +3230,23 @@ static CURLcode ossl_connect_step1(struct Curl_easy *data,
+   }
+ #endif
+ 
+-  /* Check if there's a cached ID we can/should use here! */
+-  if(SSL_SET_OPTION(primary.sessionid)) {
+-    void *ssl_sessionid = NULL;
+-    int data_idx = ossl_get_ssl_data_index();
+-    int connectdata_idx = ossl_get_ssl_conn_index();
+-    int sockindex_idx = ossl_get_ssl_sockindex_index();
+-    int proxy_idx = ossl_get_proxy_index();
+-
+-    if(data_idx >= 0 && connectdata_idx >= 0 && sockindex_idx >= 0 &&
+-       proxy_idx >= 0) {
+-      /* Store the data needed for the "new session" callback.
+-       * The sockindex is stored as a pointer to an array element. */
+-      SSL_set_ex_data(backend->handle, data_idx, data);
+-      SSL_set_ex_data(backend->handle, connectdata_idx, conn);
+-      SSL_set_ex_data(backend->handle, sockindex_idx, conn->sock + sockindex);
+-#ifndef CURL_DISABLE_PROXY
+-      SSL_set_ex_data(backend->handle, proxy_idx, SSL_IS_PROXY() ? (void *) 1:
+-                      NULL);
+-#else
+-      SSL_set_ex_data(backend->handle, proxy_idx, NULL);
+-#endif
+-
+-    }
++  ossl_associate_connection(data, conn, sockindex);
+ 
+-    Curl_ssl_sessionid_lock(data);
+-    if(!Curl_ssl_getsessionid(data, conn, SSL_IS_PROXY() ? TRUE : FALSE,
+-                              &ssl_sessionid, NULL, sockindex)) {
+-      /* we got a session id, use it! */
+-      if(!SSL_set_session(backend->handle, ssl_sessionid)) {
+-        Curl_ssl_sessionid_unlock(data);
+-        failf(data, "SSL: SSL_set_session failed: %s",
+-              ossl_strerror(ERR_get_error(), error_buffer,
+-                            sizeof(error_buffer)));
+-        return CURLE_SSL_CONNECT_ERROR;
+-      }
+-      /* Informational message */
+-      infof(data, "SSL re-using session ID\n");
++  Curl_ssl_sessionid_lock(data);
++  if(!Curl_ssl_getsessionid(data, conn, SSL_IS_PROXY() ? TRUE : FALSE,
++                            &ssl_sessionid, NULL, sockindex)) {
++    /* we got a session id, use it! */
++    if(!SSL_set_session(backend->handle, ssl_sessionid)) {
++      Curl_ssl_sessionid_unlock(data);
++      failf(data, "SSL: SSL_set_session failed: %s",
++            ossl_strerror(ERR_get_error(), error_buffer,
++                          sizeof(error_buffer)));
++      return CURLE_SSL_CONNECT_ERROR;
+     }
+-    Curl_ssl_sessionid_unlock(data);
++    /* Informational message */
++    infof(data, "SSL re-using session ID\n");
+   }
++  Curl_ssl_sessionid_unlock(data);
+ 
+ #ifndef CURL_DISABLE_PROXY
+   if(conn->proxy_ssl[sockindex].use) {
+@@ -4498,6 +4480,90 @@ static void *ossl_get_internals(struct ssl_connect_data *connssl,
+          (void *)backend->ctx : (void *)backend->handle;
+ }
+ 
++static void ossl_associate_connection(struct Curl_easy *data,
++                                      struct connectdata *conn,
++                                      int sockindex)
++{
++  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
++  struct ssl_backend_data *backend = connssl->backend;
++
++  /* If we don't have SSL context, do nothing. */
++  if(!backend->handle)
++    return;
++
++  if(SSL_SET_OPTION(primary.sessionid)) {
++    int data_idx = ossl_get_ssl_data_index();
++    int connectdata_idx = ossl_get_ssl_conn_index();
++    int sockindex_idx = ossl_get_ssl_sockindex_index();
++    int proxy_idx = ossl_get_proxy_index();
++
++    if(data_idx >= 0 && connectdata_idx >= 0 && sockindex_idx >= 0 &&
++       proxy_idx >= 0) {
++      /* Store the data needed for the "new session" callback.
++       * The sockindex is stored as a pointer to an array element. */
++      SSL_set_ex_data(backend->handle, data_idx, data);
++      SSL_set_ex_data(backend->handle, connectdata_idx, conn);
++      SSL_set_ex_data(backend->handle, sockindex_idx, conn->sock + sockindex);
++#ifndef CURL_DISABLE_PROXY
++      SSL_set_ex_data(backend->handle, proxy_idx, SSL_IS_PROXY() ? (void *) 1:
++                      NULL);
++#else
++      SSL_set_ex_data(backend->handle, proxy_idx, NULL);
++#endif
++    }
++  }
++}
++
++/*
++ * Starting with TLS 1.3, the ossl_new_session_cb callback gets called after
++ * the handshake. If the transfer that sets up the callback gets killed before
++ * this callback arrives, we must make sure to properly clear the data to
++ * avoid UAF problems. A future optimization could be to instead store another
++ * transfer that might still be using the same connection.
++ */
++
++static void ossl_disassociate_connection(struct Curl_easy *data,
++                                         int sockindex)
++{
++  struct connectdata *conn = data->conn;
++  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
++  struct ssl_backend_data *backend = connssl->backend;
++
++  /* If we don't have SSL context, do nothing. */
++  if(!backend->handle)
++    return;
++
++  if(SSL_SET_OPTION(primary.sessionid)) {
++    bool isproxy = FALSE;
++    bool incache;
++    void *old_ssl_sessionid = NULL;
++    int data_idx = ossl_get_ssl_data_index();
++    int connectdata_idx = ossl_get_ssl_conn_index();
++    int sockindex_idx = ossl_get_ssl_sockindex_index();
++    int proxy_idx = ossl_get_proxy_index();
++
++    if(data_idx >= 0 && connectdata_idx >= 0 && sockindex_idx >= 0 &&
++       proxy_idx >= 0) {
++      /* Invalidate the session cache entry, if any */
++      isproxy = SSL_get_ex_data(backend->handle, proxy_idx) ? TRUE : FALSE;
++
++      /* Disable references to data in "new session" callback to avoid
++       * accessing a stale pointer. */
++      SSL_set_ex_data(backend->handle, data_idx, NULL);
++      SSL_set_ex_data(backend->handle, connectdata_idx, NULL);
++      SSL_set_ex_data(backend->handle, sockindex_idx, NULL);
++      SSL_set_ex_data(backend->handle, proxy_idx, NULL);
++    }
++
++    Curl_ssl_sessionid_lock(data);
++    incache = !(Curl_ssl_getsessionid(data, conn, isproxy,
++                                      &old_ssl_sessionid, NULL, sockindex));
++    if(incache)
++      Curl_ssl_delsessionid(data, old_ssl_sessionid);
++    Curl_ssl_sessionid_unlock(data);
++  }
++}
++
+ const struct Curl_ssl Curl_ssl_openssl = {
+   { CURLSSLBACKEND_OPENSSL, "openssl" }, /* info */
+ 
+@@ -4533,10 +4599,12 @@ const struct Curl_ssl Curl_ssl_openssl = {
+   ossl_engines_list,        /* engines_list */
+   Curl_none_false_start,    /* false_start */
+ #if (OPENSSL_VERSION_NUMBER >= 0x0090800fL) && !defined(OPENSSL_NO_SHA256)
+-  ossl_sha256sum            /* sha256sum */
++  ossl_sha256sum,           /* sha256sum */
+ #else
+-  NULL                      /* sha256sum */
++  NULL,                     /* sha256sum */
+ #endif
++  ossl_associate_connection, /* associate_connection */
++  ossl_disassociate_connection /* disassociate_connection */
+ };
+ 
+ #endif /* USE_OPENSSL */
+diff --git a/lib/vtls/rustls.c b/lib/vtls/rustls.c
+index 9dfbd2c3c4c2..161f3bf51d75 100644
+--- a/lib/vtls/rustls.c
++++ b/lib/vtls/rustls.c
+@@ -604,7 +604,9 @@ const struct Curl_ssl Curl_ssl_rustls = {
+   Curl_none_set_engine_default,    /* set_engine_default */
+   Curl_none_engines_list,          /* engines_list */
+   Curl_none_false_start,           /* false_start */
+-  NULL                             /* sha256sum */
++  NULL,                            /* sha256sum */
++  NULL,                            /* associate_connection */
++  NULL                             /* disassociate_connection */
+ };
+ 
+ #endif /* USE_RUSTLS */
+diff --git a/lib/vtls/schannel.c b/lib/vtls/schannel.c
+index dba7072273a9..2bcf11db2576 100644
+--- a/lib/vtls/schannel.c
++++ b/lib/vtls/schannel.c
+@@ -329,7 +329,7 @@ get_alg_id_by_name(char *name)
+ 
+ static CURLcode
+ set_ssl_ciphers(SCHANNEL_CRED *schannel_cred, char *ciphers,
+-                int *algIds)
++                ALG_ID *algIds)
+ {
+   char *startCur = ciphers;
+   int algCount = 0;
+@@ -2433,7 +2433,9 @@ const struct Curl_ssl Curl_ssl_schannel = {
+   Curl_none_set_engine_default,      /* set_engine_default */
+   Curl_none_engines_list,            /* engines_list */
+   Curl_none_false_start,             /* false_start */
+-  schannel_sha256sum                 /* sha256sum */
++  schannel_sha256sum,                /* sha256sum */
++  NULL,                              /* associate_connection */
++  NULL                               /* disassociate_connection */
+ };
+ 
+ #endif /* USE_SCHANNEL */
+diff --git a/lib/vtls/sectransp.c b/lib/vtls/sectransp.c
+index 4276b89cfb3a..8b1e84ed7715 100644
+--- a/lib/vtls/sectransp.c
++++ b/lib/vtls/sectransp.c
+@@ -3453,6 +3453,8 @@ const struct Curl_ssl Curl_ssl_sectransp = {
+   Curl_none_engines_list,             /* engines_list */
+   sectransp_false_start,              /* false_start */
+   sectransp_sha256sum                 /* sha256sum */
++  NULL,                               /* associate_connection */
++  NULL                                /* disassociate_connection */
+ };
+ 
+ #ifdef __clang__
+diff --git a/lib/vtls/vtls.c b/lib/vtls/vtls.c
+index d63fd5c76386..65f4f773dd63 100644
+--- a/lib/vtls/vtls.c
++++ b/lib/vtls/vtls.c
+@@ -586,6 +586,25 @@ CURLcode Curl_ssl_addsessionid(struct Curl_easy *data,
+   return CURLE_OK;
+ }
+ 
++void Curl_ssl_associate_conn(struct Curl_easy *data,
++                             struct connectdata *conn)
++{
++  if(Curl_ssl->associate_connection) {
++    Curl_ssl->associate_connection(data, conn, FIRSTSOCKET);
++    if(conn->sock[SECONDARYSOCKET] && conn->bits.sock_accepted)
++      Curl_ssl->associate_connection(data, conn, SECONDARYSOCKET);
++  }
++}
++
++void Curl_ssl_detach_conn(struct Curl_easy *data,
++                          struct connectdata *conn)
++{
++  if(Curl_ssl->disassociate_connection) {
++    Curl_ssl->disassociate_connection(data, FIRSTSOCKET);
++    if(conn->sock[SECONDARYSOCKET] && conn->bits.sock_accepted)
++      Curl_ssl->disassociate_connection(data, SECONDARYSOCKET);
++  }
++}
+ 
+ void Curl_ssl_close_all(struct Curl_easy *data)
+ {
+@@ -1214,7 +1233,9 @@ static const struct Curl_ssl Curl_ssl_multi = {
+   Curl_none_set_engine_default,      /* set_engine_default */
+   Curl_none_engines_list,            /* engines_list */
+   Curl_none_false_start,             /* false_start */
+-  NULL                               /* sha256sum */
++  NULL,                              /* sha256sum */
++  NULL,                              /* associate_connection */
++  NULL                               /* disassociate_connection */
+ };
+ 
+ const struct Curl_ssl *Curl_ssl =
+diff --git a/lib/vtls/vtls.h b/lib/vtls/vtls.h
+index a22d526ca810..7f93e7aedb21 100644
+--- a/lib/vtls/vtls.h
++++ b/lib/vtls/vtls.h
+@@ -84,6 +84,11 @@ struct Curl_ssl {
+   bool (*false_start)(void);
+   CURLcode (*sha256sum)(const unsigned char *input, size_t inputlen,
+                     unsigned char *sha256sum, size_t sha256sumlen);
++
++  void (*associate_connection)(struct Curl_easy *data,
++                               struct connectdata *conn,
++                               int sockindex);
++  void (*disassociate_connection)(struct Curl_easy *data, int sockindex);
+ };
+ 
+ #ifdef USE_SSL
+@@ -283,6 +288,11 @@ bool Curl_ssl_cert_status_request(void);
+ 
+ bool Curl_ssl_false_start(void);
+ 
++void Curl_ssl_associate_conn(struct Curl_easy *data,
++                             struct connectdata *conn);
++void Curl_ssl_detach_conn(struct Curl_easy *data,
++                          struct connectdata *conn);
++
+ #define SSL_SHUTDOWN_TIMEOUT 10000 /* ms */
+ 
+ #else /* if not USE_SSL */
+@@ -309,6 +319,8 @@ bool Curl_ssl_false_start(void);
+ #define Curl_ssl_cert_status_request() FALSE
+ #define Curl_ssl_false_start() FALSE
+ #define Curl_ssl_tls13_ciphersuites() FALSE
++#define Curl_ssl_associate_conn(a,b) Curl_nop_stmt
++#define Curl_ssl_detach_conn(a,b) Curl_nop_stmt
+ #endif
+ 
+ #endif /* HEADER_CURL_VTLS_H */
+diff --git a/lib/vtls/wolfssl.c b/lib/vtls/wolfssl.c
+index 02fcd236697e..60e27e366252 100644
+--- a/lib/vtls/wolfssl.c
++++ b/lib/vtls/wolfssl.c
+@@ -1125,7 +1125,9 @@ const struct Curl_ssl Curl_ssl_wolfssl = {
+   Curl_none_set_engine_default,    /* set_engine_default */
+   Curl_none_engines_list,          /* engines_list */
+   Curl_none_false_start,           /* false_start */
+-  wolfssl_sha256sum                /* sha256sum */
++  wolfssl_sha256sum,               /* sha256sum */
++  NULL,                            /* associate_connection */
++  NULL                             /* disassociate_connection */
+ };
+ 
+ #endif
diff --git a/pkgs/tools/networking/curl/default.nix b/pkgs/tools/networking/curl/default.nix
index 9a8a245a790..984a6ecaaef 100644
--- a/pkgs/tools/networking/curl/default.nix
+++ b/pkgs/tools/networking/curl/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchurl, pkgconfig, perl
+{ stdenv, lib, fetchurl, pkg-config, perl
 , http2Support ? true, nghttp2
 , idnSupport ? false, libidn ? null
 , ldapSupport ? false, openldap ? null
@@ -7,7 +7,15 @@
 , gnutlsSupport ? false, gnutls ? null
 , wolfsslSupport ? false, wolfssl ? null
 , scpSupport ? zlibSupport && !stdenv.isSunOS && !stdenv.isCygwin, libssh2 ? null
-, gssSupport ? !stdenv.hostPlatform.isWindows, libkrb5 ? null
+, gssSupport ? with stdenv.hostPlatform; !(
+    !isWindows &&
+    # a very sad story re static: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=439039
+    !isStatic &&
+    # the "mig" tool does not configure its compiler correctly. This could be
+    # fixed in mig, but losing gss support on cross compilation to darwin is
+    # not worth the effort.
+    !(isDarwin && (stdenv.buildPlatform != stdenv.hostPlatform))
+  ), libkrb5 ? null
 , c-aresSupport ? false, c-ares ? null
 , brotliSupport ? false, brotli ? null
 }:
@@ -34,27 +42,33 @@ assert gssSupport -> libkrb5 != null;
 
 stdenv.mkDerivation rec {
   pname = "curl";
-  version = "7.71.1";
+  version = "7.76.1";
 
   src = fetchurl {
     urls = [
       "https://curl.haxx.se/download/${pname}-${version}.tar.bz2"
       "https://github.com/curl/curl/releases/download/${lib.replaceStrings ["."] ["_"] pname}-${version}/${pname}-${version}.tar.bz2"
     ];
-    sha256 = "097jnkbayscifgzgl7v8kwd7m2crpvbyaazac3ab1yal0pca8llx";
+    sha256 = "1scmfrp0c27pkd7yva9k50miprjpsyfbb33apx72qc9igm6ii3ks";
   };
 
+  patches = [
+    ./CVE-2021-22897.patch
+    ./CVE-2021-22898.patch
+    ./CVE-2021-22901.patch
+  ];
+
   outputs = [ "bin" "dev" "out" "man" "devdoc" ];
   separateDebugInfo = stdenv.isLinux;
 
   enableParallelBuilding = true;
 
-  nativeBuildInputs = [ pkgconfig perl ];
+  nativeBuildInputs = [ pkg-config 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;
+  propagatedBuildInputs = with lib;
     optional http2Support nghttp2 ++
     optional idnSupport libidn ++
     optional ldapSupport openldap ++
@@ -89,13 +103,13 @@ stdenv.mkDerivation rec {
       ( 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}"
+    ++ lib.optional wolfsslSupport "--with-wolfssl=${wolfssl.dev}"
+    ++ lib.optional c-aresSupport "--enable-ares=${c-ares}"
+    ++ 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)
+    ++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform)
        "--with-random=/dev/urandom"
-    ++ stdenv.lib.optionals stdenv.hostPlatform.isWindows [
+    ++ lib.optionals stdenv.hostPlatform.isWindows [
       "--disable-shared"
       "--enable-static"
     ];
@@ -110,9 +124,9 @@ stdenv.mkDerivation rec {
 
     # Install completions
     make -C scripts install
-  '' + stdenv.lib.optionalString scpSupport ''
+  '' + lib.optionalString scpSupport ''
     sed '/^dependency_libs/s|${libssh2.dev}|${libssh2.out}|' -i "$out"/lib/*.la
-  '' + stdenv.lib.optionalString gnutlsSupport ''
+  '' + 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
@@ -122,7 +136,7 @@ stdenv.mkDerivation rec {
     inherit sslSupport openssl;
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A command line tool for transferring files with URL syntax";
     homepage    = "https://curl.haxx.se/";
     license = licenses.curl;
diff --git a/pkgs/tools/networking/curlie/default.nix b/pkgs/tools/networking/curlie/default.nix
index b2c4d46a8ce..9d3e4025a99 100644
--- a/pkgs/tools/networking/curlie/default.nix
+++ b/pkgs/tools/networking/curlie/default.nix
@@ -2,21 +2,21 @@
 
 buildGoModule rec {
   pname = "curlie";
-  version = "1.3.1";
+  version = "1.6.2";
 
   src= fetchFromGitHub {
     owner = "rs";
     repo = pname;
     rev = "v${version}";
-    sha256 = "09v8alrbw6qva3q3bcqxnyjm7svagfxqvhdff7cqf5pbmkxnhln9";
+    sha256 = "sha256-2CZpqc1MnAY6M1UFakKLaqGjaifw+7bN4hxc0jWgSps=";
   };
 
-  vendorSha256 = "1mxgf004czf65a2mv99gfp27g98xhllmfcz4ynfv66nfkbfz6a8n";
+  vendorSha256 = "sha256-tYZtnD7RUurhl8yccXlTIvOxybBJITM+it1ollYJ1OI=";
 
   doCheck = false;
 
   meta = with lib; {
-    description = "Curlie is a frontend to curl that adds the ease of use of httpie, without compromising on features and performance";
+    description = "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/pkgs/tools/networking/darkstat/default.nix b/pkgs/tools/networking/darkstat/default.nix
index af15e70aa86..04cab365578 100644
--- a/pkgs/tools/networking/darkstat/default.nix
+++ b/pkgs/tools/networking/darkstat/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libpcap, zlib }:
+{ lib, stdenv, fetchurl, libpcap, zlib }:
 
 stdenv.mkDerivation rec {
   version = "3.0.719";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Network statistics web interface";
     longDescription = ''
       Captures network traffic, calculates statistics about usage, and serves
diff --git a/pkgs/tools/networking/davix/default.nix b/pkgs/tools/networking/davix/default.nix
index 797791e1c0b..d9f36845559 100644
--- a/pkgs/tools/networking/davix/default.nix
+++ b/pkgs/tools/networking/davix/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchurl, cmake, pkgconfig, openssl, libxml2, boost, python3, libuuid }:
+{ lib, stdenv, fetchurl, cmake, pkg-config, openssl, libxml2, boost, python3, libuuid }:
 
 stdenv.mkDerivation rec {
   version = "0.7.6";
   pname = "davix";
-  nativeBuildInputs = [ cmake pkgconfig python3 ];
+  nativeBuildInputs = [ cmake pkg-config python3 ];
   buildInputs = [ openssl libxml2 boost libuuid ];
 
-  # using the url below since the 0.7.6 release did carry a broken CMake file,
-  # supposedly fixed in the next release
-  # https://github.com/cern-fts/davix/issues/40
+  # using the url below since the github release page states
+  # "please ignore the GitHub-generated tarballs, as they are incomplete"
+  # https://github.com/cern-fts/davix/releases/tag/R_0_7_6
   src = fetchurl {
-    url = "http://grid-deployment.web.cern.ch/grid-deployment/dms/lcgutil/tar/davix/${version}/davix-${version}.tar.gz";
+    url = "https://github.com/cern-fts/${pname}/releases/download/R_${lib.replaceStrings ["."] ["_"] version}/${pname}-${version}.tar.gz";
     sha256 = "0wq66spnr616cns72f9dvr2xfvkdvfqqmc6d7dx29fpp57zzvrx2";
   };
 
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Toolkit for Http-based file management";
 
     longDescription = "Davix is a toolkit designed for file
diff --git a/pkgs/tools/networking/dd-agent/5.nix b/pkgs/tools/networking/dd-agent/5.nix
index dd206eb8c97..744fd482ab1 100644
--- a/pkgs/tools/networking/dd-agent/5.nix
+++ b/pkgs/tools/networking/dd-agent/5.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchFromGitHub, python
+{ lib, stdenv, fetchFromGitHub, python2
 , unzip, makeWrapper }:
 let
-  python' = python.override {
+  python' = python2.override {
     packageOverrides = self: super: {
       docker = self.buildPythonPackage rec {
         name = "docker-${version}";
@@ -17,12 +17,11 @@ let
         propagatedBuildInputs = with self; [
           six
           requests
-          websocket_client
+          websocket-client
           ipaddress
-          backports_ssl_match_hostname
           docker_pycreds
           uptime
-        ];
+        ] ++ lib.optionals (self.pythonOlder "3.7") [ backports_ssl_match_hostname ];
 
         # due to flake8
         doCheck = false;
@@ -51,8 +50,8 @@ in stdenv.mkDerivation rec {
 
   patches = [ ./40103-iostat-fix.patch ];
 
+  nativeBuildInputs = [ unzip ];
   buildInputs = [
-    unzip
     makeWrapper
   ] ++ (with python'.pkgs; [
     requests
@@ -83,7 +82,7 @@ in stdenv.mkDerivation rec {
 
     cat > $out/bin/dd-jmxfetch <<EOF
     #!/usr/bin/env bash
-    exec ${python}/bin/python $out/agent/jmxfetch.py $@
+    exec ${python'.interpreter} $out/agent/jmxfetch.py $@
     EOF
     chmod a+x $out/bin/dd-jmxfetch
 
@@ -105,8 +104,8 @@ in stdenv.mkDerivation rec {
       -- 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 ];
+    license     = lib.licenses.bsd3;
+    platforms   = lib.platforms.all;
+    maintainers = with lib.maintainers; [ thoughtpolice domenkozar ];
   };
 }
diff --git a/pkgs/tools/networking/dd-agent/datadog-agent-deps.nix b/pkgs/tools/networking/dd-agent/datadog-agent-deps.nix
index 1121ec0405c..fb6f66b5a4e 100644
--- a/pkgs/tools/networking/dd-agent/datadog-agent-deps.nix
+++ b/pkgs/tools/networking/dd-agent/datadog-agent-deps.nix
@@ -1350,4 +1350,4 @@
       sha256 = "1wpqijsvf8s4iqjrrzgbxi3gay6vaglscyq14vxma4iacg8fx1jk";
     };
   }
-]
\ No newline at end of file
+]
diff --git a/pkgs/tools/networking/dd-agent/datadog-agent.nix b/pkgs/tools/networking/dd-agent/datadog-agent.nix
index c3d07ddca95..ad37245d57c 100644
--- a/pkgs/tools/networking/dd-agent/datadog-agent.nix
+++ b/pkgs/tools/networking/dd-agent/datadog-agent.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchFromGitHub, buildGoPackage, makeWrapper, pythonPackages, pkgconfig, systemd, hostname, extraTags ? [] }:
+{ lib, fetchFromGitHub, buildGoPackage, makeWrapper, pythonPackages, pkg-config, systemd, hostname, extraTags ? [] }:
 
 let
   # keep this in sync with github.com/DataDog/agent-payload dependency
@@ -28,13 +28,13 @@ in buildGoPackage rec {
   goPackagePath = "github.com/${owner}/${repo}";
 
 
-  nativeBuildInputs = [ pkgconfig makeWrapper ];
+  nativeBuildInputs = [ pkg-config makeWrapper ];
   buildInputs = [ systemd ];
   PKG_CONFIG_PATH = "${python}/lib/pkgconfig";
 
 
   preBuild = let
-    ldFlags = stdenv.lib.concatStringsSep " " [
+    ldFlags = lib.concatStringsSep " " [
       "-X ${goPackagePath}/pkg/version.Commit=${src.rev}"
       "-X ${goPackagePath}/pkg/version.AgentVersion=${version}"
       "-X ${goPackagePath}/pkg/serializer.AgentPayloadVersion=${payloadVersion}"
@@ -65,10 +65,10 @@ in buildGoPackage rec {
 
     wrapProgram "$out/bin/agent" \
       --set PYTHONPATH "$out/${python.sitePackages}" \
-      --prefix LD_LIBRARY_PATH : ${systemd.lib}/lib
+      --prefix LD_LIBRARY_PATH : ${lib.getLib systemd}/lib
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = ''
       Event collector for the DataDog analysis service
       -- v6 new golang implementation.
diff --git a/pkgs/tools/networking/dd-agent/datadog-process-agent-deps.nix b/pkgs/tools/networking/dd-agent/datadog-process-agent-deps.nix
index 2a81702feee..4533b31dd23 100644
--- a/pkgs/tools/networking/dd-agent/datadog-process-agent-deps.nix
+++ b/pkgs/tools/networking/dd-agent/datadog-process-agent-deps.nix
@@ -666,4 +666,4 @@
       sha256 = "0bcsb7s4wlmrja35zvz4s10cf3w7dfn2ckjv6apxd1ykdjxnsk71";
     };
   }
-]
\ No newline at end of file
+]
diff --git a/pkgs/tools/networking/dd-agent/datadog-process-agent.nix b/pkgs/tools/networking/dd-agent/datadog-process-agent.nix
index a59f70f633b..e2c497dad40 100644
--- a/pkgs/tools/networking/dd-agent/datadog-process-agent.nix
+++ b/pkgs/tools/networking/dd-agent/datadog-process-agent.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, buildGoPackage  }:
+{ lib, fetchFromGitHub, buildGoPackage  }:
 
 buildGoPackage rec {
   pname = "datadog-process-agent";
@@ -15,7 +15,7 @@ buildGoPackage rec {
   goDeps = ./datadog-process-agent-deps.nix;
   goPackagePath = "github.com/${owner}/${repo}";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Live process collector for the DataDog Agent v6";
     homepage    = "https://www.datadoghq.com";
     license     = licenses.bsd3;
diff --git a/pkgs/tools/networking/dd-agent/integrations-core.nix b/pkgs/tools/networking/dd-agent/integrations-core.nix
index edf7a8faaf8..e466be816e4 100644
--- a/pkgs/tools/networking/dd-agent/integrations-core.nix
+++ b/pkgs/tools/networking/dd-agent/integrations-core.nix
@@ -75,7 +75,7 @@ let
     mongo    = (ps: [ ps.pymongo ]);
     network  = (ps: [ ps.psutil ]);
     nginx    = (ps: []);
-    postgres = (ps: with ps; [ pg8000_1_12 psycopg2 ]);
+    postgres = (ps: with ps; [ pg8000 psycopg2 ]);
   };
 
   # All integrations (default + extra):
diff --git a/pkgs/tools/networking/ddclient/default.nix b/pkgs/tools/networking/ddclient/default.nix
index 375898913c8..e4bb685b518 100644
--- a/pkgs/tools/networking/ddclient/default.nix
+++ b/pkgs/tools/networking/ddclient/default.nix
@@ -1,26 +1,28 @@
-{ stdenv, fetchurl, perlPackages, iproute, perl }:
+{ lib, fetchFromGitHub, perlPackages, iproute2, perl }:
 
 perlPackages.buildPerlPackage rec {
   pname = "ddclient";
-  version = "3.9.0";
+  version = "3.9.1";
 
-  src = fetchurl {
-    url = "mirror://sourceforge/ddclient/${pname}-${version}.tar.gz";
-    sha256 = "0fwyhab8yga2yi1kdfkbqxa83wxhwpagmj1w1mwkg2iffh1fjjlw";
+  src = fetchFromGitHub {
+    owner = "ddclient";
+    repo = "ddclient";
+    rev = "v${version}";
+    sha256 = "0hf377g4j9r9sac75xp17nk2h58mazswz4vkg4g2gl2yyhvzq91w";
   };
 
   # perl packages by default get devdoc which isn't present
   outputs = [ "out" ];
 
-  buildInputs = with perlPackages; [ IOSocketSSL DigestSHA1 DataValidateIP JSONPP ];
+  buildInputs = with perlPackages; [ IOSocketSSL DigestSHA1 DataValidateIP JSONPP IOSocketInet6 ];
 
   # 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 'ifconfig -a' '${iproute2}/sbin/ip addr show' \
+      --replace 'ifconfig $arg' '${iproute2}/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
   '';
 
@@ -36,11 +38,12 @@ perlPackages.buildPerlPackage rec {
   # there are no tests distributed with ddclient
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Client for updating dynamic DNS service entries";
-    homepage    = "https://sourceforge.net/p/ddclient/wiki/Home/";
-    license     = licenses.gpl2Plus;
+    homepage = "https://ddclient.net/";
+    license = licenses.gpl2Plus;
     # Mostly since `iproute` is Linux only.
-    platforms   = platforms.linux;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/networking/dhcp/default.nix b/pkgs/tools/networking/dhcp/default.nix
index 5222f731efb..2a722d17c01 100644
--- a/pkgs/tools/networking/dhcp/default.nix
+++ b/pkgs/tools/networking/dhcp/default.nix
@@ -1,15 +1,15 @@
-{ stdenv, fetchurl, perl, file, nettools, iputils, iproute, makeWrapper
+{ stdenv, fetchurl, perl, file, nettools, iputils, iproute2, makeWrapper
 , coreutils, gnused, openldap ? null
 , buildPackages, lib
 }:
 
 stdenv.mkDerivation rec {
   pname = "dhcp";
-  version = "4.4.2";
+  version = "4.4.2-P1";
 
   src = fetchurl {
     url = "https://ftp.isc.org/isc/dhcp/${version}/${pname}-${version}.tar.gz";
-    sha256 = "08a5003zdxgl41b29zjkxa92h2i40zyjgxg0npvnhpkfl5jcsz0s";
+    sha256 = "06jsr0cg5rsmyibshrpcb9za0qgwvqccashdma7mlm1rflrh8pmh";
   };
 
   patches =
@@ -20,9 +20,9 @@ stdenv.mkDerivation rec {
       ./set-hostname.patch
     ];
 
-  nativeBuildInputs = [ perl ];
+  nativeBuildInputs = [ perl makeWrapper ];
 
-  buildInputs = [ makeWrapper openldap ];
+  buildInputs = [ openldap ];
 
   depsBuildBuild = [ buildPackages.stdenv.cc ];
 
@@ -37,13 +37,14 @@ stdenv.mkDerivation rec {
     "--sysconfdir=/etc"
     "--localstatedir=/var"
   ] ++ lib.optional stdenv.isLinux "--with-randomdev=/dev/random"
-    ++ stdenv.lib.optionals (openldap != null) [ "--with-ldap" "--with-ldapcrypto" ];
+    ++ 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"
+    "-Wno-error=stringop-overflow=8"
   ];
 
   installFlags = [ "DESTDIR=\${out}" ];
@@ -58,7 +59,7 @@ stdenv.mkDerivation rec {
 
       cp client/scripts/linux $out/sbin/dhclient-script
       substituteInPlace $out/sbin/dhclient-script \
-        --replace /sbin/ip ${iproute}/sbin/ip
+        --replace /sbin/ip ${iproute2}/sbin/ip
       wrapProgram "$out/sbin/dhclient-script" --prefix PATH : \
         "${nettools}/bin:${nettools}/sbin:${iputils}/bin:${coreutils}/bin:${gnused}/bin"
     '';
@@ -67,12 +68,12 @@ stdenv.mkDerivation rec {
     ''
       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"
+          -e "s|^ *#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; {
+  meta = with lib; {
     description = "Dynamic Host Configuration Protocol (DHCP) tools";
 
     longDescription = ''
@@ -83,7 +84,7 @@ stdenv.mkDerivation rec {
    '';
 
     homepage = "https://www.isc.org/dhcp/";
-    license = licenses.isc;
+    license = licenses.mpl20;
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/dhcpcd/default.nix b/pkgs/tools/networking/dhcpcd/default.nix
index 1a16645cc9b..cc1bad106f7 100644
--- a/pkgs/tools/networking/dhcpcd/default.nix
+++ b/pkgs/tools/networking/dhcpcd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, pkgconfig, udev, runtimeShellPackage,
+{ lib, stdenv, fetchurl, fetchpatch, pkg-config, udev, runtimeShellPackage,
 runtimeShell }:
 
 stdenv.mkDerivation rec {
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
     sha256 = "0gf1qif25wy5lffzw39pi4sshmpxz1f4a1m9sglj7am1gaix3817";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [
     udev
     runtimeShellPackage # So patchShebangs finds a bash suitable for the installed scripts
@@ -24,7 +24,8 @@ stdenv.mkDerivation rec {
 
   patches = [
     (fetchpatch {
-      url = "https://roy.marples.name/cgit/dhcpcd.git/patch/?id=114870290a8d3d696bc4049c32eef3eed03d6070";
+      name = "?id=114870290a8d3d696bc4049c32eef3eed03d6070";
+      url = "https://roy.marples.name/git/dhcpcd/commitdiff_plain/114870290a8d3d696bc4049c32eef3eed03d6070";
       sha256 = "0kzpwjh2gzvl5lvlnw6lis610p67nassk3apns68ga2pyxlky8qb";
     })
   ];
@@ -43,9 +44,9 @@ stdenv.mkDerivation rec {
   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 ]";
+  postInstall = lib.optional (udev != null) "[ -e ${placeholder "out"}/lib/dhcpcd/dev/udev.so ]";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A client for the Dynamic Host Configuration Protocol (DHCP)";
     homepage = "https://roy.marples.name/projects/dhcpcd";
     platforms = platforms.linux;
diff --git a/pkgs/tools/networking/dhcpdump/default.nix b/pkgs/tools/networking/dhcpdump/default.nix
index f68d68382dd..dba08fea795 100644
--- a/pkgs/tools/networking/dhcpdump/default.nix
+++ b/pkgs/tools/networking/dhcpdump/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libpcap, perl }:
+{ lib, stdenv, fetchurl, libpcap, perl }:
 
 stdenv.mkDerivation {
   name = "dhcpdump-1.8";
@@ -17,7 +17,7 @@ stdenv.mkDerivation {
     cp dhcpdump $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/networking/dhcping/default.nix b/pkgs/tools/networking/dhcping/default.nix
index 36f81555495..f1f8cd8b5e4 100644
--- a/pkgs/tools/networking/dhcping/default.nix
+++ b/pkgs/tools/networking/dhcping/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "dhcping";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with 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
@@ -27,6 +27,6 @@ stdenv.mkDerivation rec {
     '';
     homepage = "http://www.mavetju.org/unix/general.php";
     license = licenses.bsd2;
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/dibbler/default.nix b/pkgs/tools/networking/dibbler/default.nix
index 1849890d23c..1633505763c 100644
--- a/pkgs/tools/networking/dibbler/default.nix
+++ b/pkgs/tools/networking/dibbler/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "dibbler";
@@ -13,9 +13,9 @@ stdenv.mkDerivation rec {
     "--enable-resolvconf"
   ];
 
-  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.isDarwin "-D__APPLE_USE_RFC_2292=1";
+  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-D__APPLE_USE_RFC_2292=1";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Portable DHCPv6 implementation";
     homepage = "http://www.klub.com.pl/dhcpv6/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/dirb/default.nix b/pkgs/tools/networking/dirb/default.nix
index 1f9516ccacc..09f1fbc2f9f 100644
--- a/pkgs/tools/networking/dirb/default.nix
+++ b/pkgs/tools/networking/dirb/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, autoreconfHook, curl }:
+{ fetchurl, lib, stdenv, autoreconfHook, curl }:
 
 let
   major = "2";
@@ -33,8 +33,8 @@ in stdenv.mkDerivation rec {
   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;
+    maintainers = with lib.maintainers; [ bennofs ];
+    license = with lib.licenses; [ gpl2 ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/djbdns/default.nix b/pkgs/tools/networking/djbdns/default.nix
index ca622a6244f..1b93d64d08f 100644
--- a/pkgs/tools/networking/djbdns/default.nix
+++ b/pkgs/tools/networking/djbdns/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, glibc, dns-root-data } :
+{ lib, stdenv, fetchurl, glibc, dns-root-data } :
 
 let
   version = "1.05";
@@ -41,7 +41,7 @@ stdenv.mkDerivation {
     rm -rv djbdns-man;
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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";
diff --git a/pkgs/tools/networking/dnscrypt-proxy2/default.nix b/pkgs/tools/networking/dnscrypt-proxy2/default.nix
index 64a58bc15a9..8aedb403260 100644
--- a/pkgs/tools/networking/dnscrypt-proxy2/default.nix
+++ b/pkgs/tools/networking/dnscrypt-proxy2/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "dnscrypt-proxy2";
-  version = "2.0.44";
+  version = "2.0.45";
 
   vendorSha256 = null;
 
@@ -12,10 +12,10 @@ buildGoModule rec {
     owner = "DNSCrypt";
     repo = "dnscrypt-proxy";
     rev = version;
-    sha256 = "08bg60j5z349blj5sip1f8f793q12ix3zmqkayym5nf69s1pfm7l";
+    sha256 = "sha256-BvCxrFMRWPVVjK2sDlVbJKC/YK/bi4lBquIsdwOFXkw=";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tool that provides secure DNS resolution";
 
     license = licenses.isc;
diff --git a/pkgs/tools/networking/dnscrypt-wrapper/default.nix b/pkgs/tools/networking/dnscrypt-wrapper/default.nix
index 5c44734665c..88d753baf5b 100644
--- a/pkgs/tools/networking/dnscrypt-wrapper/default.nix
+++ b/pkgs/tools/networking/dnscrypt-wrapper/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, libsodium, libevent }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, libsodium, libevent }:
 
 stdenv.mkDerivation rec {
   pname = "dnscrypt-wrapper";
@@ -13,10 +13,10 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
   buildInputs = [ libsodium libevent ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tool for adding dnscrypt support to any name resolver";
     homepage = "https://dnscrypt.info/";
     license = licenses.isc;
diff --git a/pkgs/tools/networking/dnsmasq/default.nix b/pkgs/tools/networking/dnsmasq/default.nix
index 19dbd00c1ee..131a645d838 100644
--- a/pkgs/tools/networking/dnsmasq/default.nix
+++ b/pkgs/tools/networking/dnsmasq/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchurl, pkgconfig, dbus, nettle, fetchpatch
-, libidn, libnetfilter_conntrack }:
+{ lib, stdenv, fetchurl, pkg-config, dbus, nettle, fetchpatch
+, libidn, libnetfilter_conntrack, buildPackages }:
 
-with stdenv.lib;
+with lib;
 let
   copts = concatStringsSep " " ([
     "-DHAVE_IDN"
@@ -12,14 +12,15 @@ let
   ]);
 in
 stdenv.mkDerivation rec {
-  name = "dnsmasq-2.82";
+  pname = "dnsmasq";
+  version = "2.85";
 
   src = fetchurl {
-    url = "http://www.thekelleys.org.uk/dnsmasq/${name}.tar.xz";
-    sha256 = "0cn1xd1s6xs78jmrmwjnh9m6w3q38pk6dyqy2phvasqiyd33cll4";
+    url = "https://www.thekelleys.org.uk/dnsmasq/${pname}-${version}.tar.xz";
+    sha256 = "sha256-rZjTgD32h+W5OAgPPSXGKP5ByHh1LQP7xhmXh/7jEvo=";
   };
 
-  postPatch = stdenv.lib.optionalString stdenv.hostPlatform.isLinux ''
+  postPatch = lib.optionalString stdenv.hostPlatform.isLinux ''
     sed '1i#include <linux/sockios.h>' -i src/dhcp.c
   '';
 
@@ -32,6 +33,7 @@ stdenv.mkDerivation rec {
     "BINDIR=$(out)/bin"
     "MANDIR=$(out)/man"
     "LOCALEDIR=$(out)/share/locale"
+    "PKG_CONFIG=${buildPackages.pkg-config}/bin/${buildPackages.pkg-config.targetPrefix}pkg-config"
   ];
 
   hardeningEnable = [ "pie" ];
@@ -65,13 +67,13 @@ stdenv.mkDerivation rec {
     END
   '';
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   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";
+    homepage = "https://www.thekelleys.org.uk/dnsmasq/doc.html";
     license = licenses.gpl2;
     platforms = with platforms; linux ++ darwin;
     maintainers = with maintainers; [ eelco fpletz globin ];
diff --git a/pkgs/tools/networking/dnsperf/default.nix b/pkgs/tools/networking/dnsperf/default.nix
index 63e19e924fc..bb63e05c0e1 100644
--- a/pkgs/tools/networking/dnsperf/default.nix
+++ b/pkgs/tools/networking/dnsperf/default.nix
@@ -1,25 +1,30 @@
-{ stdenv, fetchurl, fetchFromGitHub, autoreconfHook, pkgconfig
-, bind, zlib, openssl, libcap
+{ lib, stdenv, fetchurl, fetchFromGitHub, autoreconfHook, pkg-config
+, openssl, ldns, libck
 }:
 
 stdenv.mkDerivation rec {
   pname = "dnsperf";
-  version = "2.3.1";
+  version = "2.5.2";
 
   # 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";
+    sha256 = "0dzi28z7hnyxbibwdsalvd93czf4d5pgmvrbn6hlh52znsn40gbb";
   };
 
   outputs = [ "out" "man" "doc" ];
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
-  buildInputs = [ bind zlib openssl ]
-    ++ stdenv.lib.optionals stdenv.isLinux [ libcap.lib ];
+  buildInputs = [
+    openssl
+    ldns # optional for DDNS (but cheap anyway)
+    libck
+  ];
+
+  doCheck = true;
 
   # For now, keep including the old PDFs as well.
   # https://github.com/DNS-OARC/dnsperf/issues/27
@@ -34,7 +39,7 @@ stdenv.mkDerivation rec {
     cp ./dnsperf-src-*/doc/*.pdf "$doc/share/doc/dnsperf/"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     outputsToInstall = outputs; # The man pages and docs are likely useful to most.
 
     description = "Tools for DNS benchmaring";
diff --git a/pkgs/tools/networking/dnsproxy/default.nix b/pkgs/tools/networking/dnsproxy/default.nix
index 8f231935ee3..ffa2138ffa8 100644
--- a/pkgs/tools/networking/dnsproxy/default.nix
+++ b/pkgs/tools/networking/dnsproxy/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchFromGitHub, buildGoModule }:
+{ lib, fetchFromGitHub, buildGoModule }:
 
 buildGoModule rec {
   pname = "dnsproxy";
-  version = "0.31.0";
+  version = "0.38.3";
 
   src = fetchFromGitHub {
     owner = "AdguardTeam";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1jyik1022iv8nqjfrv3lkvcpr8zsaxfx8hi7yagklbs6vzlg80jg";
+    sha256 = "sha256-VfEfxcewKo8D8kNsMuCvrLOZNl632ZIFyD+RG8qzjQ4=";
   };
 
   vendorSha256 = null;
 
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Simple DNS proxy with DoH, DoT, and DNSCrypt support";
     homepage = "https://github.com/AdguardTeam/dnsproxy";
     license = licenses.gpl3;
diff --git a/pkgs/tools/networking/dnstop/default.nix b/pkgs/tools/networking/dnstop/default.nix
index 705888568d9..cee24f1976f 100644
--- a/pkgs/tools/networking/dnstop/default.nix
+++ b/pkgs/tools/networking/dnstop/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libpcap, ncurses }:
+{ lib, stdenv, fetchurl, libpcap, ncurses }:
 
 stdenv.mkDerivation rec {
   name = "dnstop-20140915";
@@ -14,10 +14,10 @@ stdenv.mkDerivation rec {
     mkdir -p $out/share/man/man8 $out/bin
   '';
 
-  meta = { 
+  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;
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/dnstracer/default.nix b/pkgs/tools/networking/dnstracer/default.nix
index 7109a294543..597592b4d7c 100644
--- a/pkgs/tools/networking/dnstracer/default.nix
+++ b/pkgs/tools/networking/dnstracer/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libresolv, perl }:
+{ lib, stdenv, fetchurl, libresolv, perl }:
 
 stdenv.mkDerivation rec {
   version = "1.10";
@@ -20,12 +20,12 @@ stdenv.mkDerivation rec {
     install -Dm755 -t $man/share/man/man8 dnstracer.8
   '';
 
-  buildInputs = [] ++ stdenv.lib.optionals stdenv.isDarwin [ libresolv ];
+  buildInputs = [] ++ lib.optionals stdenv.isDarwin [ libresolv ];
 
-  NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isDarwin "-lresolv";
+  NIX_LDFLAGS = 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.";
+  meta = with lib; {
+    description = "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 ];
diff --git a/pkgs/tools/networking/dnstwist/default.nix b/pkgs/tools/networking/dnstwist/default.nix
new file mode 100644
index 00000000000..e19b4dabd78
--- /dev/null
+++ b/pkgs/tools/networking/dnstwist/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "dnstwist";
+  version = "20201228";
+  disabled = python3.pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "elceef";
+    repo = pname;
+    rev = version;
+    sha256 = "0bxshi1p0va2f449v6vsm8bav5caa3r3pyknj3zf4n5rvk6say70";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    dnspython
+    GeoIP
+    ppdeep
+    requests
+    tld
+    whois
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "dnstwist" ];
+
+  meta = with lib; {
+    description = "Domain name permutation engine for detecting homograph phishing attacks";
+    homepage = "https://github.com/elceef/dnstwist";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/networking/dnsviz/default.nix b/pkgs/tools/networking/dnsviz/default.nix
new file mode 100644
index 00000000000..ba31aba8d6c
--- /dev/null
+++ b/pkgs/tools/networking/dnsviz/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, dnspython
+, m2crypto
+, pygraphviz
+}:
+
+buildPythonApplication rec {
+  pname = "dnsviz";
+  version = "0.9.3";
+
+  src = fetchFromGitHub {
+    owner = "dnsviz";
+    repo = "dnsviz";
+    rev = "v${version}";
+    sha256 = "sha256-QsTYpNaAJiIRUrr2JYjXWOKFihENhAccvmB/DRhX1PA=";
+  };
+
+  patches = [
+    # override DNSVIZ_INSTALL_PREFIX with $out
+    ./fix-path.patch
+  ];
+
+  propagatedBuildInputs = [
+    dnspython
+    m2crypto
+    pygraphviz
+  ];
+
+  postPatch = ''
+    substituteInPlace dnsviz/config.py.in --replace '@out@' $out
+  '';
+
+  # Tests require network connection and /etc/resolv.conf
+  doCheck = false;
+
+  pythonImportsCheck = [ "dnsviz" ];
+
+  meta = with lib; {
+    description = "Tool suite for analyzing and visualizing DNS and DNSSEC behavior";
+    longDescription = ''
+      DNSViz is a tool suite for analysis and visualization of Domain Name System (DNS) behavior,
+      including its security extensions (DNSSEC).
+
+      This tool suite powers the Web-based analysis available at https://dnsviz.net/
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ jojosch ];
+  };
+}
diff --git a/pkgs/tools/networking/dnsviz/fix-path.patch b/pkgs/tools/networking/dnsviz/fix-path.patch
new file mode 100644
index 00000000000..7906058cd98
--- /dev/null
+++ b/pkgs/tools/networking/dnsviz/fix-path.patch
@@ -0,0 +1,18 @@
+diff --git a/dnsviz/config.py.in b/dnsviz/config.py.in
+index 373fde2..007f0f1 100644
+--- a/dnsviz/config.py.in
++++ b/dnsviz/config.py.in
+@@ -26,12 +26,7 @@ from __future__ import unicode_literals
+ import os
+ import sys
+ 
+-_prefix = '__DNSVIZ_INSTALL_PREFIX__'
+-if (hasattr(sys, 'real_prefix') or hasattr(sys, 'base_prefix')) and \
+-        not _prefix:
+-    DNSVIZ_INSTALL_PREFIX = sys.prefix
+-else:
+-    DNSVIZ_INSTALL_PREFIX = _prefix
++DNSVIZ_INSTALL_PREFIX = "@out@"
+ DNSVIZ_SHARE_PATH = os.path.join(DNSVIZ_INSTALL_PREFIX, 'share', 'dnsviz')
+ JQUERY_PATH = __JQUERY_PATH__
+ JQUERY_UI_PATH = __JQUERY_UI_PATH__
diff --git a/pkgs/tools/networking/dogdns/default.nix b/pkgs/tools/networking/dogdns/default.nix
new file mode 100644
index 00000000000..1374e4473c0
--- /dev/null
+++ b/pkgs/tools/networking/dogdns/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, Security
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dogdns";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "ogham";
+    repo = "dog";
+    rev = "v${version}";
+    sha256 = "088ib0sncv0vrvnqfvxf5zc79v7pnxd2cmgp4378r6pmgax9z9zy";
+  };
+
+  nativeBuildInputs = [ installShellFiles ]
+    ++ lib.optionals stdenv.isLinux [ pkg-config ];
+  buildInputs = lib.optionals stdenv.isLinux [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  cargoSha256 = "0zgzaq303zy8lymhldm6dpm5hwsxi2ph42zw5brvsdjmgm9ga0rb";
+
+  postInstall = ''
+    installShellCompletion completions/dog.{bash,fish,zsh}
+  '';
+
+  meta = with lib; {
+    description = "Command-line DNS client";
+    homepage = "https://dns.lookup.dog";
+    license = licenses.eupl12;
+    maintainers = with maintainers; [ bbigras ];
+  };
+}
diff --git a/pkgs/tools/networking/driftnet/default.nix b/pkgs/tools/networking/driftnet/default.nix
index 44101910371..042f29d3ca3 100644
--- a/pkgs/tools/networking/driftnet/default.nix
+++ b/pkgs/tools/networking/driftnet/default.nix
@@ -1,31 +1,64 @@
-{ stdenv, lib, fetchFromGitHub, libpcap, libjpeg , libungif, libpng
-, giflib, glib, gtk2, cairo, pango, gdk-pixbuf, atk
-, pkgconfig, autoreconfHook }:
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, autoreconfHook
+, cairo
+, giflib
+, glib
+, gtk2-x11
+, libjpeg
+, libpcap
+, libpng
+, libwebsockets
+, pkg-config
+, libuv
+, openssl
+}:
 
-with lib;
-
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "driftnet";
-  version = "1.1.5";
-
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [
-    libpcap libjpeg libungif libpng giflib
-    glib gtk2 glib cairo pango gdk-pixbuf atk autoreconfHook
-  ];
+  version = "1.3.0";
 
   src = fetchFromGitHub {
     owner = "deiv";
     repo = "driftnet";
-    rev = "0ae4a91";
-    sha256 = "1sagpx0mw68ggvqd9c3crjhghqmj7391mf2cb6cjw1cpd2hcddsj";
+    rev = "v${version}";
+    sha256 = "0kd22aqb25kf54jjv3ml8wy8xm7lmbf0xz1wfp31m08cbzsbizib";
   };
 
-  meta = {
-    description = "Driftnet watches network traffic, and picks out and displays JPEG and GIF images for display";
+  # https://github.com/deiv/driftnet/pull/33
+  # remove on version bump from 1.3.0
+  patches = [
+    (fetchpatch {
+      name = "fix-darwin-build";
+      url = "https://github.com/deiv/driftnet/pull/33/commits/bef5f3509ab5710161e9e21ea960a997eada534f.patch";
+      sha256 = "1b7p9fkgp7dxv965l7q7y632s80h3nnrkaqnak2h0hakwv0i4pvm";
+    })
+  ];
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+
+  buildInputs = [
+    cairo
+    giflib
+    glib
+    gtk2-x11
+    libjpeg
+    libpcap
+    libpng
+    libwebsockets
+    openssl
+    libuv
+  ];
+
+  meta = with lib; {
+    description = "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;
+    platforms = platforms.linux ++ platforms.darwin;
     license = licenses.gpl2;
   };
 }
diff --git a/pkgs/tools/networking/driftnet/fix-darwin-build.patch b/pkgs/tools/networking/driftnet/fix-darwin-build.patch
new file mode 100644
index 00000000000..d1bde0f2e60
--- /dev/null
+++ b/pkgs/tools/networking/driftnet/fix-darwin-build.patch
@@ -0,0 +1,61 @@
+diff --git a/src/compat/compat.h b/src/compat/compat.h
+index 6add422..ea80406 100644
+--- a/src/compat/compat.h
++++ b/src/compat/compat.h
+@@ -17,7 +17,7 @@
+     #include <config.h>
+ #endif
+ 
+-#ifdef __FreeBSD__
++#if defined(__FreeBSD__) || defined(__APPLE__)
+     #include <sys/types.h>
+ #endif
+ 
+diff --git a/src/network/layer2.c b/src/network/layer2.c
+index 763f0ac..2497b72 100644
+--- a/src/network/layer2.c
++++ b/src/network/layer2.c
+@@ -14,7 +14,7 @@
+ 
+ #include <string.h>
+ 
+-#ifdef __FreeBSD__
++#if defined(__FreeBSD__) || defined(__APPLE__)
+ #include <netinet/in_systm.h>
+ #include <netinet/in.h>
+ #else
+@@ -29,7 +29,7 @@
+ /*
+  * Freebsd and Cygwin doesn't define 'ethhdr'
+  */
+-#if defined(__FreeBSD__) || defined(__CYGWIN__)
++#if defined(__FreeBSD__) || defined(__CYGWIN__) || defined(__APPLE__)
+ 
+ #define ETH_ALEN	6			/* Octets in one ethernet addr	 */
+ #define ETH_P_IP	0x0800		/* Internet Protocol packet	*/
+diff --git a/src/network/layer3.c b/src/network/layer3.c
+index 7864126..aae2041 100644
+--- a/src/network/layer3.c
++++ b/src/network/layer3.c
+@@ -15,7 +15,7 @@
+ #include <string.h>
+ #include <assert.h>
+ 
+-#ifdef __FreeBSD__
++#if defined(__FreeBSD__) || defined(__APPLE__)
+ #include <netinet/in_systm.h>
+ #include <netinet/in.h>
+ #include <sys/socket.h>
+diff --git a/src/pid.c b/src/pid.c
+index 621834e..94e7dcc 100644
+--- a/src/pid.c
++++ b/src/pid.c
+@@ -14,7 +14,7 @@
+ 
+ #include "compat/compat.h"
+ 
+-#ifdef __FreeBSD__
++#if defined(__FreeBSD__) || defined(__APPLE__)
+ #include <sys/stat.h>
+ #endif
+ #include <fcntl.h>
diff --git a/pkgs/tools/networking/drill/default.nix b/pkgs/tools/networking/drill/default.nix
index 572dc0d8384..f29a7ee705f 100644
--- a/pkgs/tools/networking/drill/default.nix
+++ b/pkgs/tools/networking/drill/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , rustPlatform
 , fetchFromGitHub
 , pkg-config
@@ -8,26 +8,26 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "drill";
-  version = "0.6.0";
+  version = "0.7.0";
 
   src = fetchFromGitHub {
     owner = "fcsonline";
     repo = pname;
     rev = version;
-    sha256 = "0pcc91nk68z7hlhj7xvh6v3rybxpy6bzv3pzjcyaq7l0szjljrpw";
+    sha256 = "07zz0dj0wjwrc1rmayz7s8kpcv03i0ygl4vfwsam72qd4nf6v538";
   };
 
-  cargoSha256 = "1611w8b60d3x16ik8v96za0mkr5p0f9gdpz0awprfgj6c3r6s16m";
+  cargoSha256 = "04gj9gaysjcm2d81ds2raak847hr8w84jgfdwqd51wi8xm32w5jf";
 
-  nativeBuildInputs = stdenv.lib.optionals stdenv.isLinux [ pkg-config ];
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config ];
   buildInputs = [ ]
-    ++ stdenv.lib.optionals stdenv.isLinux [ openssl ]
-    ++ stdenv.lib.optionals stdenv.isDarwin [ Security ];
+    ++ lib.optionals stdenv.isLinux [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "HTTP load testing application inspired by Ansible syntax";
     homepage = "https://github.com/fcsonline/drill";
     license = licenses.gpl3;
-    maintainers = with maintainers; [ filalex77 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/networking/dropbear/default.nix b/pkgs/tools/networking/dropbear/default.nix
index dcb05eb8484..f922a70344c 100644
--- a/pkgs/tools/networking/dropbear/default.nix
+++ b/pkgs/tools/networking/dropbear/default.nix
@@ -1,14 +1,14 @@
 { stdenv, lib, fetchurl, glibc, zlib
-, enableStatic ? false
+, enableStatic ? stdenv.hostPlatform.isStatic
 , sftpPath ? "/run/current-system/sw/libexec/sftp-server"
 }:
 
 stdenv.mkDerivation rec {
-  name = "dropbear-2020.80";
+  name = "dropbear-2020.81";
 
   src = fetchurl {
     url = "https://matt.ucc.asn.au/dropbear/releases/${name}.tar.bz2";
-    sha256 = "0jbrbpdzyv11x5rkljdimzq9p6a7da5siw9k405ibnpjj4dr89yr";
+    sha256 = "0fy5ma4cfc2pk25mcccc67b2mf1rnb2c06ilb7ddnxbpnc85s8s8";
   };
 
   dontDisableStatic = enableStatic;
@@ -30,8 +30,8 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ zlib ] ++ lib.optionals enableStatic [ glibc.static zlib.static ];
 
-  meta = with stdenv.lib; {
-    homepage = "http://matt.ucc.asn.au/dropbear/dropbear.html";
+  meta = with lib; {
+    homepage = "https://matt.ucc.asn.au/dropbear/dropbear.html";
     description = "A small footprint implementation of the SSH 2 protocol";
     license = licenses.mit;
     maintainers = with maintainers; [ abbradar ];
diff --git a/pkgs/tools/networking/dsniff/default.nix b/pkgs/tools/networking/dsniff/default.nix
index 50de41b921c..8e641ec83e7 100644
--- a/pkgs/tools/networking/dsniff/default.nix
+++ b/pkgs/tools/networking/dsniff/default.nix
@@ -1,4 +1,10 @@
-{ stdenv, fetchFromGitLab, autoreconfHook, libpcap, db, glib, libnet, libnids, symlinkJoin, openssl }:
+{ gcc9Stdenv, lib, fetchFromGitLab, autoreconfHook, libpcap, db, glib, libnet, libnids, symlinkJoin, openssl
+, rpcsvc-proto, libtirpc, libnsl
+}:
+
+# We compile with GCC 9 since GCC 10 segfaults on the code
+# (see https://bugzilla.redhat.com/show_bug.cgi?id=1862809).
+
 let
   /*
   dsniff's build system unconditionnaly wants static libraries and does not
@@ -36,7 +42,7 @@ let
     inherit (openssl) name;
     paths = with openssl.override { static = true; }; [ out dev ];
   };
-in stdenv.mkDerivation {
+in gcc9Stdenv.mkDerivation rec {
   pname = "dsniff";
   version = "2.4b1";
   # upstream is so old that nearly every distribution packages the beta version.
@@ -47,14 +53,15 @@ in stdenv.mkDerivation {
     domain = "salsa.debian.org";
     owner = "pkg-security-team";
     repo = "dsniff";
-    rev = "debian%2F2.4b1%2Bdebian-29"; # %2B = urlquote("+"), %2F = urlquote("/")
-    sha256 = "10zz9krf65jsqvlcr72ycp5cd27xwr18jkc38zqp2i4j6x0caj2g";
+    rev = "debian/${version}+debian-30";
+    sha256 = "1fk2k0sfdp5g27i11g0sbzm7al52raz5yr1aibzssnysv7l9xgzh";
     name = "dsniff.tar.gz";
   };
 
-  nativeBuildInputs = [ autoreconfHook ];
-  buildInputs = [ glib pcap ];
-  NIX_CFLAGS_LINK = "-lglib-2.0 -lpthread -ldl";
+  nativeBuildInputs = [ autoreconfHook rpcsvc-proto ];
+  buildInputs = [ glib pcap libtirpc libnsl ];
+  NIX_CFLAGS_LINK = "-lglib-2.0 -lpthread -ldl -ltirpc";
+  NIX_CFLAGS_COMPILE = [ "-I${libtirpc.dev}/include/tirpc" ];
   postPatch = ''
     for patch in debian/patches/*.patch; do
       patch < $patch
@@ -68,7 +75,7 @@ in stdenv.mkDerivation {
     "--with-openssl=${ssl}"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with 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.
diff --git a/pkgs/tools/networking/easyrsa/2.x.nix b/pkgs/tools/networking/easyrsa/2.x.nix
index fef2648de7f..52cf2082d63 100644
--- a/pkgs/tools/networking/easyrsa/2.x.nix
+++ b/pkgs/tools/networking/easyrsa/2.x.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, autoreconfHook, makeWrapper
+{ lib, stdenv, fetchurl, autoreconfHook, makeWrapper
 , gnugrep, openssl }:
 
 stdenv.mkDerivation {
@@ -28,7 +28,7 @@ stdenv.mkDerivation {
     sed -i "/EASY_RSA=\|OPENSSL=\|GREP=/d" $out/share/easy-rsa/vars
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Simple shell based CA utility";
     homepage = "https://openvpn.net/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/easyrsa/default.nix b/pkgs/tools/networking/easyrsa/default.nix
index 90e05e5310b..34e326858fd 100644
--- a/pkgs/tools/networking/easyrsa/default.nix
+++ b/pkgs/tools/networking/easyrsa/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchFromGitHub, openssl, runtimeShell }:
+{ lib, stdenv, fetchFromGitHub, openssl, runtimeShell }:
 
 let
-  version = "3.0.0";
+  version = "3.0.8";
 in stdenv.mkDerivation {
   pname = "easyrsa";
   inherit version;
@@ -10,14 +10,15 @@ in stdenv.mkDerivation {
     owner = "OpenVPN";
     repo = "easy-rsa";
     rev = "v${version}";
-    sha256 = "0wbdv3wmqwm5680rpb971l56xiw49adpicqshk3vhfmpvqzl4dbs";
+    sha256 = "05q60s343ydh9j6hzj0840qdcq8fkyz06q68yw4pqgqg4w68rbgs";
   };
 
   patches = [ ./fix-paths.patch ];
 
   installPhase = ''
     mkdir -p $out/share/easyrsa
-    cp -r easyrsa3/{openssl*.cnf,x509-types,vars.example} $out/share/easyrsa
+    cp -r easyrsa3/{*.cnf,x509-types,vars.example} $out/share/easyrsa
+    cp easyrsa3/openssl-easyrsa.cnf $out/share/easyrsa/safessl-easyrsa.cnf
     install -D -m755 easyrsa3/easyrsa $out/bin/easyrsa
     substituteInPlace $out/bin/easyrsa \
       --subst-var out \
@@ -31,11 +32,11 @@ in stdenv.mkDerivation {
     chmod +x $out/bin/easyrsa-init
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Simple shell based CA utility";
     homepage = "https://openvpn.net/";
     license = licenses.gpl2;
-    maintainers = [ maintainers.offline ];
+    maintainers = [ maintainers.offline maintainers.numinit ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/easyrsa/fix-paths.patch b/pkgs/tools/networking/easyrsa/fix-paths.patch
index 82688fa7946..7891adcb20c 100644
--- a/pkgs/tools/networking/easyrsa/fix-paths.patch
+++ b/pkgs/tools/networking/easyrsa/fix-paths.patch
@@ -1,33 +1,49 @@
 diff --git a/easyrsa3/easyrsa b/easyrsa3/easyrsa
-index 6fec288..210648a 100755
+index 261336f..7b9a79b 100755
 --- a/easyrsa3/easyrsa
 +++ b/easyrsa3/easyrsa
-@@ -1003,7 +1003,7 @@ Note: using Easy-RSA configuration from: $vars"
+@@ -1661,7 +1661,7 @@ Note: using Easy-RSA configuration from: $vars"
  	
  	# Set defaults, preferring existing env-vars if present
- 	set_var EASYRSA		"$PWD"
+ 	set_var EASYRSA		"$prog_dir"
 -	set_var EASYRSA_OPENSSL	openssl
 +	set_var EASYRSA_OPENSSL	"@openssl@"
- 	set_var EASYRSA_PKI	"$EASYRSA/pki"
+ 	set_var EASYRSA_PKI	"$PWD/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
+@@ -1683,16 +1683,31 @@ Note: using Easy-RSA configuration from: $vars"
+ 	set_var EASYRSA_TEMP_DIR	"$EASYRSA_PKI"
+ 	set_var EASYRSA_REQ_CN		ChangeMe
+ 	set_var EASYRSA_DIGEST		sha256
+-	set_var EASYRSA_SSL_CONF	"$EASYRSA_PKI/openssl-easyrsa.cnf"
+-	set_var EASYRSA_SAFE_CONF	"$EASYRSA_PKI/safessl-easyrsa.cnf"
+ 	set_var EASYRSA_KDC_REALM	"CHANGEME.EXAMPLE.COM"
  
++	if [ -f "$EASYRSA_PKI/safessl-easyrsa.conf" ]; then
++		set_var EASYRSA_SAFE_CONF	"$EASYRSA_PKI/safessl-easyrsa.cnf"
++	elif [ -f "$EASYRSA/safessl-easyrsa.conf" ]; then
++		set_var EASYRSA_SAFE_CONF	"$EASYRSA/safessl-easyrsa.cnf"
++	elif [ -f "@out@/share/easyrsa/safessl-easyrsa.cnf" ]; then
++		set_var EASYRSA_SAFE_CONF	"@out@/share/easyrsa/safessl-easyrsa.cnf"
++	fi
++
++	if [ -f "$EASYRSA_PKI/openssl-easyrsa.conf" ]; then
++		set_var EASYRSA_SSL_CONF	"$EASYRSA_PKI/openssl-easyrsa.cnf"
++	elif [ -f "$EASYRSA/openssl-easyrsa.conf" ]; then
++		set_var EASYRSA_SSL_CONF	"$EASYRSA/openssl-easyrsa.cnf"
++	elif [ -f "@out@/share/easyrsa/openssl-easyrsa.cnf" ]; then
++		set_var EASYRSA_SSL_CONF	"@out@/share/easyrsa/openssl-easyrsa.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"
+-	else	
+-		#TODO: This should be removed.  Not really suitable for packaging.
 +	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"
+ 		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/pkgs/tools/networking/eggdrop/default.nix b/pkgs/tools/networking/eggdrop/default.nix
index dc5bf1ef976..2db99bfa828 100644
--- a/pkgs/tools/networking/eggdrop/default.nix
+++ b/pkgs/tools/networking/eggdrop/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, tcl }:
+{ lib, stdenv, fetchFromGitHub, tcl }:
 
 stdenv.mkDerivation rec {
   pname = "eggdrop";
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
     "--with-tclinc=${tcl}/include/tcl.h"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     license = licenses.gpl2;
     platforms = platforms.unix;
     homepage = "http://www.eggheads.org";
diff --git a/pkgs/tools/networking/email/default.nix b/pkgs/tools/networking/email/default.nix
index b61503b1b3f..5c24acb912f 100644
--- a/pkgs/tools/networking/email/default.nix
+++ b/pkgs/tools/networking/email/default.nix
@@ -35,6 +35,6 @@ stdenv.mkDerivation {
     description = "Command line SMTP client";
     license = with lib.licenses; [ gpl2 ];
     homepage = "https://deanproxy.com/code";
-    platforms = stdenv.lib.platforms.unix;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/eternal-terminal/default.nix b/pkgs/tools/networking/eternal-terminal/default.nix
index 452a9873bec..21bd75a3eba 100644
--- a/pkgs/tools/networking/eternal-terminal/default.nix
+++ b/pkgs/tools/networking/eternal-terminal/default.nix
@@ -1,29 +1,40 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , cmake
 , gflags
 , libsodium
+, openssl
 , protobuf
+, zlib
 }:
 
 stdenv.mkDerivation rec {
   pname = "eternal-terminal";
-  version = "6.0.11";
+  version = "6.1.8";
 
   src = fetchFromGitHub {
     owner = "MisterTea";
     repo = "EternalTerminal";
     rev = "et-v${version}";
-    sha256 = "0yjf639ldfaxrw4pbg9avdkhhmcpnx58j3x70zskvgkajny8yqqr";
+    sha256 = "sha256-VSJ6AoVBvlCdKSirSDqsemixF+kAnvPgBQlyJxjoPcs=";
   };
 
+  cmakeFlags= [
+    "-DDISABLE_VCPKG=TRUE"
+    "-DDISABLE_SENTRY=TRUE"
+    "-DDISABLE_CRASH_LOG=TRUE"
+  ];
+
+  CXXFLAGS = lib.optional stdenv.cc.isClang "-std=c++17";
+  LDFLAGS = lib.optional stdenv.cc.isClang "-lc++fs";
+
   nativeBuildInputs = [ cmake ];
-  buildInputs = [ gflags libsodium protobuf ];
+  buildInputs = [ gflags openssl zlib libsodium protobuf ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Remote shell that automatically reconnects without interrupting the session";
     license = licenses.asl20;
-    homepage = "https://mistertea.github.io/EternalTerminal/";
+    homepage = "https://eternalterminal.dev/";
     platforms = platforms.linux ++ platforms.darwin;
     maintainers = with maintainers; [ dezgeg pingiun ];
   };
diff --git a/pkgs/tools/networking/evillimiter/default.nix b/pkgs/tools/networking/evillimiter/default.nix
new file mode 100644
index 00000000000..20cc10728d6
--- /dev/null
+++ b/pkgs/tools/networking/evillimiter/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, colorama
+, iproute2
+, iptables
+, netaddr
+, netifaces
+, scapy
+, terminaltables
+, tqdm
+}:
+
+buildPythonApplication rec {
+  pname = "evillimiter";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "bitbrute";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1l0acd4a36wzz1gyc6mcw3zpagyi2mc425c6d4c6anq3jxwm3847";
+  };
+
+  propagatedBuildInputs = [
+    colorama
+    iproute2
+    iptables
+    netaddr
+    netifaces
+    scapy
+    terminaltables
+    tqdm
+  ];
+
+  # no tests present
+  doCheck = false;
+
+  pythonImportsCheck = [ "evillimiter.evillimiter" ];
+
+  meta = with lib; {
+    description = "Tool that monitors, analyzes and limits the bandwidth";
+    longDescription = ''
+      A tool to monitor, analyze and limit the bandwidth (upload/download) of
+      devices on your local network without physical or administrative access.
+      evillimiter employs ARP spoofing and traffic shaping to throttle the
+      bandwidth of hosts on the network.
+    '';
+    homepage = "https://github.com/bitbrute/evillimiter";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/networking/fakeroute/default.nix b/pkgs/tools/networking/fakeroute/default.nix
index 2bfecc389d5..025eef72332 100644
--- a/pkgs/tools/networking/fakeroute/default.nix
+++ b/pkgs/tools/networking/fakeroute/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "fakeroute";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "1sp342rxgm1gz4mvi5vvz1knz7kn9px9s39ii3jdjp4ks7lr5c8f";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = ''
       Makes your machine appear to be anywhere on the internet
       to any host running a (UDP) unix traceroute
diff --git a/pkgs/tools/networking/fastd/default.nix b/pkgs/tools/networking/fastd/default.nix
index 8c9a877b8f1..8d1594b8187 100644
--- a/pkgs/tools/networking/fastd/default.nix
+++ b/pkgs/tools/networking/fastd/default.nix
@@ -1,32 +1,54 @@
-{ stdenv, fetchFromGitHub, cmake, bison, pkgconfig
-, libuecc, libsodium, libcap, json_c, openssl }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, bison
+, meson
+, ninja
+, pkg-config
+, libmnl
+, libuecc
+, libsodium
+, libcap
+, json_c
+, openssl
+}:
 
 stdenv.mkDerivation rec {
   pname = "fastd";
-  version = "19";
+  version = "22";
 
   src = fetchFromGitHub {
     owner  = "Neoraider";
     repo = "fastd";
     rev = "v${version}";
-    sha256 = "1h3whjvy2n2cyvbkbg4y1z9vlrn790spzbdhj4glwp93xcykhz5i";
+    sha256 = "0qni32j7d3za9f87m68wq8zgalvfxdrx1zxi6l4x7vvmpcw5nhpq";
   };
 
-  postPatch = ''
-    substituteInPlace src/crypto/cipher/CMakeLists.txt \
-      --replace 'add_subdirectory(aes128_ctr)' ""
-  '';
-
-  nativeBuildInputs = [ pkgconfig bison cmake ];
-  buildInputs = [ libuecc libsodium libcap json_c openssl ];
+  nativeBuildInputs = [
+    bison
+    meson
+    ninja
+    pkg-config
+  ];
 
-  cmakeFlags = [
-    "-DENABLE_OPENSSL=true"
+  buildInputs = [
+    json_c
+    libcap
+    libsodium
+    libuecc
+    openssl
+  ] ++ lib.optionals (stdenv.isLinux) [
+    libmnl
   ];
 
-  enableParallelBuilding = true;
+  # some options are only available on x86
+  mesonFlags = lib.optionals (!stdenv.isx86_64 && !stdenv.isi686) [
+    "-Dcipher_salsa20_xmm=disabled"
+    "-Dcipher_salsa2012_xmm=disabled"
+    "-Dmac_ghash_pclmulqdq=disabled"
+  ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Fast and Secure Tunneling Daemon";
     homepage = "https://projects.universe-factory.net/projects/fastd/wiki";
     license = with licenses; [ bsd2 bsd3 ];
diff --git a/pkgs/tools/networking/fdm/default.nix b/pkgs/tools/networking/fdm/default.nix
index fb125b486d7..608b669535d 100644
--- a/pkgs/tools/networking/fdm/default.nix
+++ b/pkgs/tools/networking/fdm/default.nix
@@ -1,29 +1,23 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, openssl, tdb, zlib, flex, bison }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, openssl, tdb, zlib, flex, bison }:
 
-let
-
-  baseName = "fdm";
-  version = "1.9.0.20170124";
-
-in
-
-stdenv.mkDerivation {
-  name = "${baseName}-${version}";
+stdenv.mkDerivation rec {
+  pname = "fdm";
+  version = "2.0";
 
   src = fetchFromGitHub {
     owner = "nicm";
-    repo = baseName;
-    rev = "cae4ea37b6b296d1b2e48f62934ea3a7f6085e33";
-    sha256 = "048191wdv1yprwinipmx2152gvd2iq1ssv7xfb1bzh6zirh1ya3n";
+    repo = pname;
+    rev = version;
+    sha256 = "0j2n271ni5wslgjq1f4zgz1nsvqjf895dxy3ij5c904bbp8ckcwq";
   };
 
   nativeBuildInputs = [ autoreconfHook ];
   buildInputs = [ openssl tdb zlib flex bison ];
 
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Mail fetching and delivery tool - should do the job of getmail and procmail";
-    maintainers = with maintainers; [ raskin ];
+    maintainers = with maintainers; [ ninjin raskin ];
     platforms = with platforms; linux;
     homepage = "https://github.com/nicm/fdm";
     downloadPage = "https://github.com/nicm/fdm/releases";
diff --git a/pkgs/tools/networking/ferm/default.nix b/pkgs/tools/networking/ferm/default.nix
index 855a57b7720..29f9481fe32 100644
--- a/pkgs/tools/networking/ferm/default.nix
+++ b/pkgs/tools/networking/ferm/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchurl, makeWrapper, perl, ebtables, ipset, iptables, nixosTests }:
+{ lib, stdenv, fetchurl, makeWrapper, perl, ebtables, ipset, iptables, nixosTests }:
 
 let
-  inherit (stdenv.lib.versions) majorMinor;
+  inherit (lib.versions) majorMinor;
 in stdenv.mkDerivation rec {
-  version = "2.5.1";
+  version = "2.6";
   pname = "ferm";
 
   src = fetchurl {
     url = "http://ferm.foo-projects.org/download/${majorMinor version}/ferm-${version}.tar.xz";
-    sha256 = "0awl9s243sxgayr2fcmfks8xydhrmb9gy8bd9sfq738dgq7vybjb";
+    sha256 = "sha256-aJVBRl58Bzy9YEyc0Y8RPDHAtBuxJhRyalmxfkQFiIU=";
   };
 
   # perl is used at build time to gather the ferm version.
@@ -23,7 +23,7 @@ in stdenv.mkDerivation rec {
   postInstall = ''
     rm -r $out/lib/systemd
     for i in "$out/sbin/"*; do
-      wrapProgram "$i" --prefix PATH : "${stdenv.lib.makeBinPath [ iptables ipset ebtables ]}"
+      wrapProgram "$i" --prefix PATH : "${lib.makeBinPath [ iptables ipset ebtables ]}"
     done
   '';
 
@@ -39,8 +39,8 @@ in stdenv.mkDerivation rec {
       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;
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [mic92];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/filegive/default.nix b/pkgs/tools/networking/filegive/default.nix
index bedb97200c1..1d7bf884edd 100644
--- a/pkgs/tools/networking/filegive/default.nix
+++ b/pkgs/tools/networking/filegive/default.nix
@@ -1,4 +1,4 @@
-{ buildGoPackage, stdenv, fetchurl }:
+{ buildGoPackage, lib, fetchurl }:
 
 buildGoPackage rec {
   name = "filegive-0.7.4";
@@ -12,7 +12,7 @@ buildGoPackage rec {
 
   goPackagePath = "viric.name/soft/filegive";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://viric.name/cgi-bin/filegive";
     description = "Easy p2p file sending program";
     license = licenses.agpl3Plus;
diff --git a/pkgs/tools/networking/findomain/default.nix b/pkgs/tools/networking/findomain/default.nix
index 07c7dda6446..018a210e4aa 100644
--- a/pkgs/tools/networking/findomain/default.nix
+++ b/pkgs/tools/networking/findomain/default.nix
@@ -4,24 +4,25 @@
 , rustPlatform
 , installShellFiles
 , perl
+, libiconv
 , Security
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "findomain";
-  version = "2.1.1";
+  version = "4.3.0";
 
   src = fetchFromGitHub {
     owner = "Edu4rdSHL";
     repo = pname;
     rev = version;
-    sha256 = "0v6m0c329wmba2fihnqvrmfnrb5b1l4nm6xr0dsjiwsjpclrmy86";
+    sha256 = "sha256-UC70XmhAVf2a2QO9bkIRE5vEsWyIA0DudZfKraNffGY=";
   };
 
-  cargoSha256 = "130kjjig5jsv3kdywj6ag2s55d5hwsslpcnaanrqyl70a6pvgpb2";
+  cargoSha256 = "sha256-Cdfh3smX6UjiG29L9hG22bOQQIjaNrv+okl153mIiso=";
 
   nativeBuildInputs = [ installShellFiles perl ];
-  buildInputs = lib.optional stdenv.isDarwin Security;
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security ];
 
   postInstall = ''
     installManPage ${pname}.1
@@ -30,7 +31,7 @@ rustPlatform.buildRustPackage rec {
   meta = with lib; {
     description = "The fastest and cross-platform subdomain enumerator";
     homepage = "https://github.com/Edu4rdSHL/findomain";
-    license = licenses.gpl3;
-    maintainers = with maintainers; [ filalex77 ];
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/networking/flannel/default.nix b/pkgs/tools/networking/flannel/default.nix
index 7ecfb559dcc..86010f4adb9 100644
--- a/pkgs/tools/networking/flannel/default.nix
+++ b/pkgs/tools/networking/flannel/default.nix
@@ -4,7 +4,7 @@ with lib;
 
 buildGoPackage rec {
   pname = "flannel";
-  version = "0.12.0";
+  version = "0.13.0";
   rev = "v${version}";
 
   goPackagePath = "github.com/coreos/flannel";
@@ -13,7 +13,7 @@ buildGoPackage rec {
     inherit rev;
     owner = "coreos";
     repo = "flannel";
-    sha256 = "04g7rzgyi3xs3sf5p1a9dmd08crdrz6y1b02ziv3444qk40jyswd";
+    sha256 = "0mmswnaybwpf18h832haapcs5b63wn5w2hax0smm3inldiggsbw8";
   };
 
   meta = {
diff --git a/pkgs/tools/networking/flvstreamer/default.nix b/pkgs/tools/networking/flvstreamer/default.nix
index 57f29b275e3..d31751e7d5c 100644
--- a/pkgs/tools/networking/flvstreamer/default.nix
+++ b/pkgs/tools/networking/flvstreamer/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
 
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
   };
 
   buildPhase = ''
-    make CC=cc posix
+    make CC=${stdenv.cc.targetPrefix}cc posix
   '';
 
   installPhase = ''
@@ -25,15 +25,15 @@ stdenv.mkDerivation rec {
     description = "Command-line RTMP client";
 
     longDescription =
-      '' flvstreamer is an open source command-line RTMP client intended to 
+      '' 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;
+    license = lib.licenses.gpl2Plus;
 
     homepage = "https://savannah.nongnu.org/projects/flvstreamer";
 
-    maintainers = [ stdenv.lib.maintainers.thammers ];
-    platforms = with stdenv.lib.platforms; linux ++ darwin;
+    maintainers = [ lib.maintainers.thammers ];
+    platforms = with lib.platforms; linux ++ darwin;
   };
 }
diff --git a/pkgs/tools/networking/fping/default.nix b/pkgs/tools/networking/fping/default.nix
index d170ee4cd0e..7974fdd244b 100644
--- a/pkgs/tools/networking/fping/default.nix
+++ b/pkgs/tools/networking/fping/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "fping-5.0";
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
 
   configureFlags = [ "--enable-ipv6" "--enable-ipv4" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://fping.org/";
     description = "Send ICMP echo probes to network hosts";
     license = licenses.bsd0;
diff --git a/pkgs/tools/networking/freebind/default.nix b/pkgs/tools/networking/freebind/default.nix
index c1dc3d8fd5f..5ba462f15b2 100644
--- a/pkgs/tools/networking/freebind/default.nix
+++ b/pkgs/tools/networking/freebind/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libnetfilter_queue, libnfnetlink }:
+{ lib, stdenv, fetchFromGitHub, libnetfilter_queue, libnfnetlink }:
 
 stdenv.mkDerivation {
   pname = "freebind";
@@ -22,7 +22,7 @@ stdenv.mkDerivation {
     mkdir -p $out/bin $out/lib
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "IPv4 and IPv6 address rate limiting evasion tool";
     homepage = "https://github.com/blechschmidt/freebind";
     license = licenses.gpl3;
diff --git a/pkgs/tools/networking/frp/default.nix b/pkgs/tools/networking/frp/default.nix
index a998b25e3e7..871dd5ee5bd 100644
--- a/pkgs/tools/networking/frp/default.nix
+++ b/pkgs/tools/networking/frp/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "frp";
-  version = "0.33.0";
+  version = "0.36.1";
 
   src = fetchFromGitHub {
     owner = "fatedier";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1z914p20n3i1bf4hx5iq2fylx1s49knb70cbg53ji2n7nrm1q33r";
+    sha256 = "sha256-oOq5Y/6n7VHU9WPjnt+moVWZgo8mQl6Jd8daLJ2/pSQ=";
   };
 
-  vendorSha256 = "0pi661mb5vwj16wwxnyx9b0ic7gzby6qfs3y4w00agn6sn5nahx2";
+  vendorSha256 = "sha256-Q4ZwCH/RTa8cLtSg06s1S790MdZLgfWOvaD+WAt/RBM=";
 
   doCheck = false;
 
@@ -27,6 +27,6 @@ buildGoModule rec {
     '';
     homepage = "https://github.com/fatedier/frp";
     license = licenses.asl20;
-    maintainers = with maintainers; [ filalex77 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/networking/gandi-cli/default.nix b/pkgs/tools/networking/gandi-cli/default.nix
index b323cde28bc..d7394ac94d8 100644
--- a/pkgs/tools/networking/gandi-cli/default.nix
+++ b/pkgs/tools/networking/gandi-cli/default.nix
@@ -1,26 +1,38 @@
-{ stdenv, python3Packages, fetchFromGitHub }:
-
-with python3Packages;
+{ lib
+, buildPythonApplication
+, click
+, fetchFromGitHub
+, ipy
+, pyyaml
+, requests
+}:
 
 buildPythonApplication rec {
   pname = "gandi-cli";
-  version = "1.5";
+  version = "1.6";
 
   src = fetchFromGitHub {
     owner = "Gandi";
     repo = "gandi.cli";
     rev = version;
-    sha256 = "1jcabpphlm6qajw8dz0h4gynm03g1mxi0cn900i3v7wdfww1gfab";
+    sha256 = "sha256-KLeEbbzgqpmBjeTc5RYsFScym8xtMqVjU+H0lyDM0+o=";
   };
 
-  propagatedBuildInputs = [ click ipy pyyaml requests ];
+  propagatedBuildInputs = [
+    click
+    ipy
+    pyyaml
+    requests
+  ];
 
-  doCheck = false;    # Tests try to contact the actual remote API
+  # Tests try to contact the actual remote API
+  doCheck = false;
+  pythonImportsCheck = [ "gandi" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Command-line interface to the public Gandi.net API";
     homepage = "https://cli.gandi.net/";
     license = licenses.gpl3Plus;
-    maintainers = with maintainers; [ kampka ];
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/tools/networking/getmail/default.nix b/pkgs/tools/networking/getmail/default.nix
index 0bf0ebb07b3..fc06ba0363d 100644
--- a/pkgs/tools/networking/getmail/default.nix
+++ b/pkgs/tools/networking/getmail/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, python2Packages }:
+{ lib, fetchurl, python2Packages }:
 
 python2Packages.buildPythonApplication rec {
   pname = "getmail";
@@ -19,12 +19,11 @@ python2Packages.buildPythonApplication rec {
 
   meta = {
     description = "A program for retrieving mail";
-    maintainers = [ stdenv.lib.maintainers.raskin stdenv.lib.maintainers.domenkozar ];
-    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ lib.maintainers.raskin ];
+    platforms = lib.platforms.linux;
 
     homepage = "http://pyropus.ca/software/getmail/";
-    inherit version;
     updateWalker = true;
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
   };
 }
diff --git a/pkgs/tools/networking/getmail6/default.nix b/pkgs/tools/networking/getmail6/default.nix
new file mode 100644
index 00000000000..dc36a7d124a
--- /dev/null
+++ b/pkgs/tools/networking/getmail6/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "getmail6";
+  version = "6.18.3";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-8tBSi9QzWcVL09j6aa2yWFhLlqaI6DREX2PpKvHC3qU=";
+  };
+
+  # needs a Docker setup
+  doCheck = false;
+
+  pythonImportsCheck = [ "getmailcore" ];
+
+  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 = with lib; {
+    description = "A program for retrieving mail";
+    homepage = "https://getmail6.org";
+    updateWalker = true;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ abbe dotlambda ];
+  };
+}
diff --git a/pkgs/tools/networking/gftp/default.nix b/pkgs/tools/networking/gftp/default.nix
index f6aa4c061ce..b228967a73b 100644
--- a/pkgs/tools/networking/gftp/default.nix
+++ b/pkgs/tools/networking/gftp/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, gtk2, readline, ncurses, gettext, openssl, pkgconfig }:
+{ lib, stdenv, fetchurl, gtk2, readline, ncurses, gettext, openssl, pkg-config }:
 
 stdenv.mkDerivation {
   name = "gftp-2.0.19";
@@ -12,13 +12,13 @@ stdenv.mkDerivation {
     sed -i -e '/<stropts.h>/d' lib/pty.c
   '';
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   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;
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/ghostunnel/default.nix b/pkgs/tools/networking/ghostunnel/default.nix
new file mode 100644
index 00000000000..5d00b493bc3
--- /dev/null
+++ b/pkgs/tools/networking/ghostunnel/default.nix
@@ -0,0 +1,29 @@
+{
+  buildGoModule,
+  fetchFromGitHub,
+  lib,
+  nixosTests,
+}:
+
+buildGoModule rec {
+  pname = "ghostunnel";
+  version = "1.5.3";
+
+  src = fetchFromGitHub {
+    owner = "ghostunnel";
+    repo = "ghostunnel";
+    rev = "v${version}";
+    sha256 = "15rmd89j7sfpznzznss899smizbyshprsrvsdmrbhb617myd9fpy";
+  };
+
+  vendorSha256 = "1i95fx4a0fh6id6iy6afbva4pazr7ym6sbwi9r7la6gxzyncd023";
+
+  meta = with lib; {
+    description = "A simple TLS proxy with mutual authentication support for securing non-TLS backend applications";
+    homepage = "https://github.com/ghostunnel/ghostunnel#readme";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ roberth ];
+  };
+
+  passthru.tests.nixos = nixosTests.ghostunnel;
+}
diff --git a/pkgs/tools/networking/globalprotect-openconnect/default.nix b/pkgs/tools/networking/globalprotect-openconnect/default.nix
new file mode 100644
index 00000000000..d61668f7b65
--- /dev/null
+++ b/pkgs/tools/networking/globalprotect-openconnect/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, lib, fetchFromGitHub
+, qmake, qtwebsockets, qtwebengine, wrapQtAppsHook, openconnect
+}:
+
+stdenv.mkDerivation rec {
+  pname = "globalprotect-openconnect";
+  version = "1.2.6";
+
+  src = fetchFromGitHub {
+    owner = "yuezk";
+    repo = "GlobalProtect-openconnect";
+    rev = "c14a6ad1d2b62f8d297bc4cfbcb1dcea4d99112f";
+    fetchSubmodules = true;
+    sha256 = "1zkc3vk1j31n2zs5ammzv23dah7x163gfrzz222ynbkvsccrhzrk";
+  };
+
+  nativeBuildInputs = [ qmake wrapQtAppsHook ];
+
+  buildInputs = [ openconnect qtwebsockets qtwebengine ];
+
+  patchPhase = ''
+    for f in GPClient/GPClient.pro \
+      GPClient/com.yuezk.qt.gpclient.desktop \
+      GPService/GPService.pro \
+      GPService/dbus/com.yuezk.qt.GPService.service \
+      GPService/systemd/gpservice.service; do
+        substituteInPlace $f \
+          --replace /usr $out \
+          --replace /etc $out/lib;
+    done;
+
+    substituteInPlace GPService/gpservice.h \
+      --replace /usr/local/bin/openconnect ${openconnect}/bin/openconnect;
+  '';
+
+  meta = with lib; {
+    description = "GlobalProtect VPN client (GUI) for Linux based on OpenConnect that supports SAML auth mode";
+    homepage = "https://github.com/yuezk/GlobalProtect-openconnect";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.jerith666 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/networking/gmrender-resurrect/default.nix b/pkgs/tools/networking/gmrender-resurrect/default.nix
index fa364dc4eab..d4fc1b22e8f 100644
--- a/pkgs/tools/networking/gmrender-resurrect/default.nix
+++ b/pkgs/tools/networking/gmrender-resurrect/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, makeWrapper, gstreamer
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, makeWrapper, gstreamer
 , gst-plugins-base, gst-plugins-good, gst-plugins-bad, gst-plugins-ugly, gst-libav, libupnp }:
 
 let
-  version = "0.0.8";
+  version = "0.0.9";
 
   makePluginPath = plugins: builtins.concatStringsSep ":" (map (p: p + "/lib/gstreamer-1.0") plugins);
 
@@ -16,11 +16,11 @@ in
       owner = "hzeller";
       repo = "gmrender-resurrect";
       rev = "v${version}";
-      sha256 = "14i5jrry6qiap5l2x2jqj7arymllajl3wgnk29ccvr8d45zp4jn1";
+      sha256 = "0byxd28hnhkhf3lqsad43n6czfajvc1ksg9zikxb95wwk4ljqv1q";
     };
 
     buildInputs = [ gstreamer libupnp ];
-    nativeBuildInputs = [ autoreconfHook pkgconfig makeWrapper ];
+    nativeBuildInputs = [ autoreconfHook pkg-config makeWrapper ];
 
     postInstall = ''
       for prog in "$out/bin/"*; do
@@ -28,11 +28,11 @@ in
       done
     '';
 
-    meta = with stdenv.lib; {
+    meta = with 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;
+      license = licenses.gpl2Plus;
       platforms = platforms.linux;
-      maintainers = with maintainers; [ koral ashkitten ];
+      maintainers = with maintainers; [ koral hzeller ];
     };
   }
diff --git a/pkgs/tools/networking/gmvault/default.nix b/pkgs/tools/networking/gmvault/default.nix
deleted file mode 100644
index 31b91c01c2d..00000000000
--- a/pkgs/tools/networking/gmvault/default.nix
+++ /dev/null
@@ -1,31 +0,0 @@
-{ 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/pkgs/tools/networking/gmvault/gmvault.py b/pkgs/tools/networking/gmvault/gmvault.py
deleted file mode 100644
index 127036577f3..00000000000
--- a/pkgs/tools/networking/gmvault/gmvault.py
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env python
-
-import gmv.gmv_cmd as runner
-runner.bootstrap_run()
diff --git a/pkgs/tools/networking/gnirehtet/default.nix b/pkgs/tools/networking/gnirehtet/default.nix
index f739e80be1f..123ab3d76ee 100644
--- a/pkgs/tools/networking/gnirehtet/default.nix
+++ b/pkgs/tools/networking/gnirehtet/default.nix
@@ -1,12 +1,12 @@
-{stdenv, rustPlatform, fetchFromGitHub, fetchzip, androidenv, substituteAll}:
+{ lib, stdenv, rustPlatform, fetchFromGitHub, fetchzip, androidenv, makeWrapper }:
 let
-version = "2.4";
+version = "2.5";
 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";
+    sha256 = "1db0gkg5z8lighhkyqfsr9jiacrck89zmfnmp74vj865hhxgjzgq";
   };
   installPhase = ''
     mkdir $out
@@ -22,21 +22,20 @@ rustPlatform.buildRustPackage {
       owner = "Genymobile";
       repo = "gnirehtet";
       rev = "v${version}";
-      sha256 = "1c99d6zpjxa8xlrg0n1825am20d2pjiicfcjwv8iay9ylfdnvygl";
+      sha256 = "0wk6n082gnj9xk46n542h1012h8gyhldca23bs7vl73g0534g878";
   };
   sourceRoot = "source/relay-rust";
-  cargoSha256 = "0rb5xcqg5ikgrxpmzrql5n298j50aqgkkp45znbfv2x2n40dywad";
+  cargoSha256 = "03r8ivsvmhi5f32gj4yacbyzanziymszya18dani53bq9zis9z31";
 
-  patchFlags = [ "-p2" ];
-  patches = [
-    (substituteAll {
-      src = ./paths.patch;
-      adb = "${androidenv.androidPkgs_9_0.platform-tools}/bin/adb";
-      inherit apk;
-    })
-  ];
+  nativeBuildInputs = [ makeWrapper ];
 
-  meta = with stdenv.lib; {
+  postInstall = ''
+    wrapProgram $out/bin/gnirehtet \
+    --set GNIREHTET_APK ${apk}/gnirehtet.apk \
+    --set ADB ${androidenv.androidPkgs_9_0.platform-tools}/bin/adb
+  '';
+
+  meta = with 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).
diff --git a/pkgs/tools/networking/gnirehtet/paths.patch b/pkgs/tools/networking/gnirehtet/paths.patch
deleted file mode 100644
index e5df4b8e4fe..00000000000
--- a/pkgs/tools/networking/gnirehtet/paths.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-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/pkgs/tools/networking/go-shadowsocks2/default.nix b/pkgs/tools/networking/go-shadowsocks2/default.nix
index 6b55c21b5b0..0c8505c7001 100644
--- a/pkgs/tools/networking/go-shadowsocks2/default.nix
+++ b/pkgs/tools/networking/go-shadowsocks2/default.nix
@@ -1,21 +1,19 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
-buildGoPackage rec {
+buildGoModule rec {
   pname = "go-shadowsocks2";
-  version = "0.0.11";
-
-  goPackagePath = "github.com/shadowsocks/go-shadowsocks2";
+  version = "0.1.4";
 
   src = fetchFromGitHub {
     owner = "shadowsocks";
     repo = "go-shadowsocks2";
     rev = "v${version}";
-    sha256 = "1dprz84gmcp6xcsk873lhj32wm8b55vnqn0s984ggvwf1rjqw00c";
+    sha256 = "sha256-ouJGrVribymak4SWaLbGhlp41iuw07VdxCypoBr1hWA=";
   };
 
-  goDeps = ./deps.nix;
+  vendorSha256 = "sha256-RrHksWET5kicbdQ5HRDWhNxx4rTi2zaVeaPoLdg4uQw=";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Fresh implementation of Shadowsocks in Go";
     homepage = "https://github.com/shadowsocks/go-shadowsocks2/";
     license = licenses.asl20;
diff --git a/pkgs/tools/networking/go-shadowsocks2/deps.nix b/pkgs/tools/networking/go-shadowsocks2/deps.nix
deleted file mode 100644
index 7fe0c2b6985..00000000000
--- a/pkgs/tools/networking/go-shadowsocks2/deps.nix
+++ /dev/null
@@ -1,30 +0,0 @@
-# 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/pkgs/tools/networking/gobgp/default.nix b/pkgs/tools/networking/gobgp/default.nix
new file mode 100644
index 00000000000..98925489e54
--- /dev/null
+++ b/pkgs/tools/networking/gobgp/default.nix
@@ -0,0 +1,33 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "gobgp";
+  version = "2.29.0";
+
+  src = fetchFromGitHub {
+    owner = "osrg";
+    repo = "gobgp";
+    rev = "v${version}";
+    sha256 = "sha256-DhSIf8fAG2Zf0mwJ/iMgQU5sugHK2jJ6WJPbFbA/mhM=";
+  };
+
+  vendorSha256 = "sha256-PWm7XnO6LPaU8g8ymmqRkQv2KSX9kLv9RVaa000mrTY=";
+
+  postConfigure = ''
+    export CGO_ENABLED=0
+  '';
+
+  buildFlagsArray = ''
+    -ldflags=
+    -s -w -extldflags '-static'
+  '';
+
+  subPackages = [ "cmd/gobgp" ];
+
+  meta = with lib; {
+    description = "A CLI tool for GoBGP";
+    homepage = "https://osrg.github.io/gobgp/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ higebu ];
+  };
+}
diff --git a/pkgs/tools/networking/goimapnotify/default.nix b/pkgs/tools/networking/goimapnotify/default.nix
index fb64ff65cc1..619e364c884 100644
--- a/pkgs/tools/networking/goimapnotify/default.nix
+++ b/pkgs/tools/networking/goimapnotify/default.nix
@@ -1,4 +1,4 @@
-{ buildGoPackage, fetchFromGitLab, lib }:
+{ buildGoPackage, fetchFromGitLab, lib, runtimeShell }:
 
 buildGoPackage rec {
   pname = "goimapnotify";
@@ -9,10 +9,14 @@ buildGoPackage rec {
   src = fetchFromGitLab {
     owner = "shackra";
     repo = "goimapnotify";
-    rev = "${version}";
+    rev = version;
     sha256 = "1d42gd3m2rkvy985d181dbcm5i3f7xsg2z8z6s4bpvw24pfnzs42";
   };
 
+  postPatch = ''
+    substituteInPlace command.go --replace '"sh"' '"${runtimeShell}"'
+  '';
+
   goDeps = ./deps.nix;
 
   meta = with lib; {
diff --git a/pkgs/tools/networking/goklp/default.nix b/pkgs/tools/networking/goklp/default.nix
index 534a809e46a..10c5c8ea64f 100644
--- a/pkgs/tools/networking/goklp/default.nix
+++ b/pkgs/tools/networking/goklp/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "goklp";
@@ -15,7 +15,7 @@ buildGoPackage rec {
 
   goDeps = ./deps.nix;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Golang OpenSSH Keys Ldap Provider for AuthorizedKeysCommand";
     homepage = "https://github.com/AppliedTrust/goklp";
     maintainers = with maintainers; [ disassembler ];
diff --git a/pkgs/tools/networking/goreplay/default.nix b/pkgs/tools/networking/goreplay/default.nix
new file mode 100644
index 00000000000..14d0a16366b
--- /dev/null
+++ b/pkgs/tools/networking/goreplay/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoPackage, fetchFromGitHub, libpcap }:
+
+buildGoPackage rec {
+  pname = "goreplay";
+  version = "1.1.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/buger/goreplay";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner  = "buger";
+    repo   = "goreplay";
+    sha256 = "07nsrx5hwmk6l8bqp48gqk40i9bxf0g4fbmpqbngx6j5f7lpbk2n";
+  };
+
+  buildInputs = [ libpcap ];
+
+  meta = {
+    homepage = "https://github.com/buger/goreplay";
+    license = lib.licenses.lgpl3Only;
+    description = "Open-source tool for capturing and replaying live HTTP traffic";
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ lovek323 ];
+  };
+}
diff --git a/pkgs/tools/networking/gping/default.nix b/pkgs/tools/networking/gping/default.nix
index 092f3611abb..a6ace183df6 100644
--- a/pkgs/tools/networking/gping/default.nix
+++ b/pkgs/tools/networking/gping/default.nix
@@ -1,32 +1,29 @@
 { lib
-, iputils
-, python3
-, python3Packages
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, libiconv
 }:
 
-python3Packages.buildPythonApplication rec {
+rustPlatform.buildRustPackage rec {
   pname = "gping";
-  version = "1.1";
+  version = "1.2.1";
 
-  propagatedBuildInputs = with python3Packages; [ colorama ];
-
-  src = python3Packages.fetchPypi {
-    inherit version;
-    pname  = "pinggraph";
-    sha256 = "0q5ma98457zb6vxsnhmrr3p38j1vg0gl155y0adzfg67wlniac92";
+  src = fetchFromGitHub {
+    owner = "orf";
+    repo = "gping";
+    rev = "v${version}";
+    sha256 = "sha256-lApm1JLXNjDKLj6zj25OaZDVp7lLW3qyrDsvJrudl8I=";
   };
 
-  # 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"]'
-  '';
+  cargoSha256 = "sha256-d1NjPwT3YDp1U9JWeUejpWDbJonFlt5lYbUf7p3jVT0=";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
 
   meta = with lib; {
     description = "Ping, but with a graph";
     homepage = "https://github.com/orf/gping";
-    license = licenses.gpl2;
+    license = licenses.mit;
     maintainers = with maintainers; [ andrew-d ];
   };
 }
diff --git a/pkgs/tools/networking/grpcui/default.nix b/pkgs/tools/networking/grpcui/default.nix
index be3ed2ea2c6..a9fb7c823f9 100644
--- a/pkgs/tools/networking/grpcui/default.nix
+++ b/pkgs/tools/networking/grpcui/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "grpcui";
-  version = "1.0.0";
+  version = "1.1.0";
 
   src = fetchFromGitHub {
     owner = "fullstorydev";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0b6rc294v8jagk79hcjbaldfi7y7idx8bknsbdi3djym5rspdg6s";
+    sha256 = "1l8ldx7nx2pa2ac5znss0j0dhapn3syj02xqys4jz22hr5gvfj6m";
   };
 
-  vendorSha256 = "0wih9xvpgqqd82v1pxy5rslrsd6wsl0ys1bi1mf373dnfq5vh5a9";
+  vendorSha256 = "15qgpbsl41swifw8w1lx0pbniwv3rf35127ald7h1r157vfa0r8b";
 
   doCheck = false;
 
diff --git a/pkgs/tools/networking/grpcurl/default.nix b/pkgs/tools/networking/grpcurl/default.nix
index 6a72be9a1e4..734a751daf0 100644
--- a/pkgs/tools/networking/grpcurl/default.nix
+++ b/pkgs/tools/networking/grpcurl/default.nix
@@ -1,27 +1,26 @@
-# 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 }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
-buildGoPackage rec {
+buildGoModule rec {
   pname = "grpcurl";
-  version = "1.4.0";
-  rev = "v${version}";
-
-  goPackagePath = "github.com/fullstorydev/grpcurl";
+  version = "1.8.2";
 
   src = fetchFromGitHub {
     owner = "fullstorydev";
     repo = "grpcurl";
-    rev = "ccc9007156e7177388c8dd45ec694aebeb2da996";
-    sha256 = "1zgiqg9c6vk45x16n04bpfvj9z838nck7ihdcsbfz89xgq7f1c0b";
+    rev = "v${version}";
+    sha256 = "sha256-/no8bRGoKibtcjaITUuzwAbX+gPHNJROSf79iuuRwe4=";
   };
 
-  goDeps = ./deps.nix;
+  subPackages = [ "cmd/grpcurl" ];
+
+  vendorSha256 = "sha256-nl8vKVhUMSO20qCDyhNkU5cghNy8vIFqSBvLk59nbWg=";
+
+  buildFlagsArray = [ "-ldflags=-s -w -X main.version=${version}" ];
 
-  meta = {
+  meta = with lib; {
     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 ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ knl ];
   };
 }
diff --git a/pkgs/tools/networking/grpcurl/deps.nix b/pkgs/tools/networking/grpcurl/deps.nix
deleted file mode 100644
index 91ec4db79b6..00000000000
--- a/pkgs/tools/networking/grpcurl/deps.nix
+++ /dev/null
@@ -1,183 +0,0 @@
-# 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.26.0";
-      sha256 = "149v3ci17g6wd2pm18mzcncq5qpl9hwdjnz3rlbn5rfidyn46la1";
-    };
-  }
-  {
-    goPackagePath = "github.com/BurntSushi/toml";
-    fetch = {
-      type = "git";
-      url = "https://github.com/BurntSushi/toml";
-      rev = "v0.3.1";
-      sha256 = "1fjdwwfzyzllgiwydknf1pwjvy49qxfsczqx5gz3y0izs7as99j6";
-    };
-  }
-  {
-    goPackagePath = "github.com/client9/misspell";
-    fetch = {
-      type = "git";
-      url = "https://github.com/client9/misspell";
-      rev = "v0.3.4";
-      sha256 = "1vwf33wsc4la25zk9nylpbp9px3svlmldkm0bha4hp56jws4q9cs";
-    };
-  }
-  {
-    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.1.1";
-      sha256 = "0ap8wb6pdl6ccmdb43advjll2ly4sz26wsc3axw0hbrjrybybzgy";
-    };
-  }
-  {
-    goPackagePath = "github.com/golang/protobuf";
-    fetch = {
-      type = "git";
-      url = "https://github.com/golang/protobuf";
-      rev = "v1.3.1";
-      sha256 = "15am4s4646qy6iv0g3kkqq52rzykqjhm4bf08dk0fy2r58knpsyl";
-    };
-  }
-  {
-    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/jhump/protoreflect";
-    fetch = {
-      type = "git";
-      url = "https://github.com/jhump/protoreflect";
-      rev = "v1.5.0";
-      sha256 = "1xwccif809sbgf0xginpd1cm3q1dv7c1rv0qhnvjwbkp9agd0x2a";
-    };
-  }
-  {
-    goPackagePath = "golang.org/x/crypto";
-    fetch = {
-      type = "git";
-      url = "https://go.googlesource.com/crypto";
-      rev = "c2843e01d9a2";
-      sha256 = "01xgxbj5r79nmisdvpq48zfy8pzaaj90bn6ngd4nf33j9ar1dp8r";
-    };
-  }
-  {
-    goPackagePath = "golang.org/x/lint";
-    fetch = {
-      type = "git";
-      url = "https://go.googlesource.com/lint";
-      rev = "d0100b6bd8b3";
-      sha256 = "0b0amr9x4ji66iv9ayfx7zrfx52k1m5g66qfcxkgj80qrb1y2yn7";
-    };
-  }
-  {
-    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 = "d2e6202438be";
-      sha256 = "0wbn75fd10485nb93bm4kqldqifdim5xqy4v7r5sdvimvf3fyhn7";
-    };
-  }
-  {
-    goPackagePath = "golang.org/x/sync";
-    fetch = {
-      type = "git";
-      url = "https://go.googlesource.com/sync";
-      rev = "1d60e4601c6f";
-      sha256 = "046jlanz2lkxq1r57x9bl6s4cvfqaic6p2xybsj8mq1120jv4rs6";
-    };
-  }
-  {
-    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 = "v0.3.0";
-      sha256 = "0r6x6zjzhr8ksqlpiwm5gdd7s209kwk5p4lw54xjvz10cs3qlq19";
-    };
-  }
-  {
-    goPackagePath = "golang.org/x/tools";
-    fetch = {
-      type = "git";
-      url = "https://go.googlesource.com/tools";
-      rev = "11955173bddd";
-      sha256 = "0hlkai67w167wiyivkzd1fgqrnyxkb94l2c6kr51jwcscizfyfn3";
-    };
-  }
-  {
-    goPackagePath = "google.golang.org/appengine";
-    fetch = {
-      type = "git";
-      url = "https://github.com/golang/appengine";
-      rev = "v1.1.0";
-      sha256 = "1pz202zszg8f35dk5pfhwgcdi3r6dx1l4yk6x6ly7nb4j45zi96x";
-    };
-  }
-  {
-    goPackagePath = "google.golang.org/genproto";
-    fetch = {
-      type = "git";
-      url = "https://github.com/google/go-genproto";
-      rev = "c66870c02cf8";
-      sha256 = "0siq7sv68556ygqi2d2zmvx8l1xjqdc0fylqzci5h1mq2i14bayn";
-    };
-  }
-  {
-    goPackagePath = "google.golang.org/grpc";
-    fetch = {
-      type = "git";
-      url = "https://github.com/grpc/grpc-go";
-      rev = "v1.21.0";
-      sha256 = "0zxjlxnvjqfn6zfx7gbmqhadx0j788vxfn95g1ngbmjkgppzsnfp";
-    };
-  }
-  {
-    goPackagePath = "honnef.co/go/tools";
-    fetch = {
-      type = "git";
-      url = "https://github.com/dominikh/go-tools";
-      rev = "c2f93a96b099";
-      sha256 = "07lg29aiap80ca9f201jzng9vjr168cv3qmvjmbd7v5pmww9kmr8";
-    };
-  }
-]
diff --git a/pkgs/tools/networking/guardian-agent/default.nix b/pkgs/tools/networking/guardian-agent/default.nix
index 262234ca67b..57080d223fa 100644
--- a/pkgs/tools/networking/guardian-agent/default.nix
+++ b/pkgs/tools/networking/guardian-agent/default.nix
@@ -20,6 +20,7 @@ buildGoPackage rec {
 
   goPackagePath = "github.com/StanfordSNR/guardian-agent";
 
+  deleteVendor = true;
   goDeps = ./deps.nix;
 
   postInstall = ''
@@ -29,9 +30,9 @@ buildGoPackage rec {
   '';
 
   postFixup = ''
-		wrapProgram $out/bin/sga-guard \
-			--prefix PATH : "$out/bin" \
-			--prefix PATH : "${autossh}/bin"
+    wrapProgram $out/bin/sga-guard \
+      --prefix PATH : "$out/bin" \
+      --prefix PATH : "${autossh}/bin"
   '';
 
   meta = with lib; {
diff --git a/pkgs/tools/networking/gupnp-tools/default.nix b/pkgs/tools/networking/gupnp-tools/default.nix
index c93873caa07..c1861e33c08 100644
--- a/pkgs/tools/networking/gupnp-tools/default.nix
+++ b/pkgs/tools/networking/gupnp-tools/default.nix
@@ -1,16 +1,16 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , meson
 , ninja
 , gupnp
 , gssdp
-, pkgconfig
+, pkg-config
 , gtk3
 , libuuid
 , gettext
 , gupnp-av
 , gtksourceview4
-, gnome3
+, gnome
 , wrapGAppsHook
 }:
 
@@ -19,14 +19,14 @@ stdenv.mkDerivation rec {
   version = "0.10.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
     sha256 = "13d1qr1avz9r76989nvgxhhclmqzr025xjk4rfnja94fpbspznj1";
   };
 
   nativeBuildInputs = [
     meson
     ninja
-    pkgconfig
+    pkg-config
     gettext
     wrapGAppsHook
   ];
@@ -38,16 +38,17 @@ stdenv.mkDerivation rec {
     gtk3
     gupnp-av
     gtksourceview4
-    gnome3.adwaita-icon-theme
+    gnome.adwaita-icon-theme
   ];
 
   passthru = {
-    updateScript = gnome3.updateScript {
+    updateScript = gnome.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Set of utilities and demos to work with UPnP";
     homepage = "https://wiki.gnome.org/Projects/GUPnP";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/networking/gvpe/default.nix b/pkgs/tools/networking/gvpe/default.nix
index 3dea0217b60..59748f6f967 100644
--- a/pkgs/tools/networking/gvpe/default.nix
+++ b/pkgs/tools/networking/gvpe/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, openssl, gmp, zlib, iproute, nettools }:
+{ lib, stdenv, fetchurl, openssl, gmp, zlib, iproute2, nettools }:
 
 stdenv.mkDerivation rec {
   pname = "gvpe";
@@ -20,11 +20,11 @@ stdenv.mkDerivation rec {
     ];
 
   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.*"@"${iproute2}/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; {
+  meta = with lib; {
     description = "A protected multinode virtual network";
     homepage = "http://software.schmorp.de/pkg/gvpe.html";
     maintainers = [ maintainers.raskin ];
diff --git a/pkgs/tools/networking/hans/default.nix b/pkgs/tools/networking/hans/default.nix
index cea13bca24c..04271d6ef71 100644
--- a/pkgs/tools/networking/hans/default.nix
+++ b/pkgs/tools/networking/hans/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, nettools }:
+{ lib, stdenv, fetchFromGitHub, nettools }:
 
 stdenv.mkDerivation rec {
   pname = "hans";
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
     install -D -m0755 hans $out/bin/hans
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tunnel IPv4 over ICMP";
     longDescription = ''
       Hans makes it possible to tunnel IPv4 through ICMP echo packets, so you
diff --git a/pkgs/tools/networking/haproxy/default.nix b/pkgs/tools/networking/haproxy/default.nix
index 91112a2628e..bb79ad956a6 100644
--- a/pkgs/tools/networking/haproxy/default.nix
+++ b/pkgs/tools/networking/haproxy/default.nix
@@ -1,7 +1,7 @@
 { useLua ? !stdenv.isDarwin
 , usePcre ? true
 , withPrometheusExporter ? true
-, stdenv, lib, fetchurl
+, stdenv, lib, fetchurl, nixosTests
 , openssl, zlib
 , lua5_3 ? null, pcre ? null, systemd ? null
 }:
@@ -11,11 +11,11 @@ assert usePcre -> pcre != null;
 
 stdenv.mkDerivation rec {
   pname = "haproxy";
-  version = "2.2.2";
+  version = "2.3.10";
 
   src = fetchurl {
-    url = "https://www.haproxy.org/download/${stdenv.lib.versions.majorMinor version}/src/${pname}-${version}.tar.gz";
-    sha256 = "1mjld865p4f7i465fcc5c4jclih1c3345a3ylriql8668rd7071r";
+    url = "https://www.haproxy.org/download/${lib.versions.majorMinor version}/src/${pname}-${version}.tar.gz";
+    sha256 = "sha256-mUbgz8g/KQcrNDHjckYiHPnUqdKKFYwHVxTTRSZvTzU=";
   };
 
   buildInputs = [ openssl zlib ]
@@ -40,6 +40,7 @@ stdenv.mkDerivation rec {
     "USE_PCRE_JIT=yes"
   ] ++ lib.optionals useLua [
     "USE_LUA=yes"
+    "LUA_LIB_NAME=lua"
     "LUA_LIB=${lua5_3}/lib"
     "LUA_INC=${lua5_3}/include"
   ] ++ lib.optionals stdenv.isLinux [
@@ -47,10 +48,12 @@ stdenv.mkDerivation rec {
     "USE_GETADDRINFO=1"
   ] ++ lib.optionals withPrometheusExporter [
     "EXTRA_OBJS=contrib/prometheus-exporter/service-prometheus.o"
-  ] ++ lib.optional stdenv.isDarwin "CC=cc";
+  ] ++ [ "CC=${stdenv.cc.targetPrefix}cc" ];
 
   enableParallelBuilding = true;
 
+  passthru.tests.haproxy = nixosTests.haproxy;
+
   meta = with lib; {
     description = "Reliable, high performance TCP/HTTP load balancer";
     longDescription = ''
diff --git a/pkgs/tools/networking/hey/default.nix b/pkgs/tools/networking/hey/default.nix
index 22f933a4b65..edf91dd311d 100644
--- a/pkgs/tools/networking/hey/default.nix
+++ b/pkgs/tools/networking/hey/default.nix
@@ -2,13 +2,13 @@
 
 buildGoModule rec {
   pname = "hey";
-  version = "0.1.3";
+  version = "0.1.4";
 
   src = fetchFromGitHub {
     owner = "rakyll";
     repo = pname;
     rev = "v${version}";
-    sha256 = "06w5hf0np0ayvjnfy8zgy605yrs5j326nk2gm0fy7amhwx1fzkwv";
+    sha256 = "0gsdksrzlwpba14a43ayyy41l1hxpw4ayjpvqyd4ycakddlkvgzb";
   };
 
   vendorSha256 = null;
@@ -19,6 +19,6 @@ buildGoModule rec {
     description = "HTTP load generator, ApacheBench (ab) replacement";
     homepage = "https://github.com/rakyll/hey";
     license = licenses.asl20;
-    maintainers = with maintainers; [ filalex77 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/networking/horst/default.nix b/pkgs/tools/networking/horst/default.nix
index 704eaa85cd0..194365130bf 100644
--- a/pkgs/tools/networking/horst/default.nix
+++ b/pkgs/tools/networking/horst/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchFromGitHub, pkgconfig, ncurses, libnl }:
+{lib, stdenv, fetchFromGitHub, pkg-config, ncurses, libnl }:
 
 stdenv.mkDerivation rec {
   pname = "horst";
@@ -11,12 +11,12 @@ stdenv.mkDerivation rec {
     sha256 = "140pyv6rlsh4c745w4b59pz3hrarr39qq3mz9z1lsd3avc12nx1a";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ ncurses libnl ];
 
   installFlags = [ "DESTDIR=${placeholder "out"}" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Small and lightweight IEEE802.11 wireless LAN analyzer with a text interface";
     homepage = "http://br1.einfach.org/tech/horst/";
     maintainers = [ maintainers.fpletz ];
diff --git a/pkgs/tools/networking/hping/default.nix b/pkgs/tools/networking/hping/default.nix
index 1ef02b599e8..97b45c64ee2 100644
--- a/pkgs/tools/networking/hping/default.nix
+++ b/pkgs/tools/networking/hping/default.nix
@@ -1,50 +1,41 @@
-{ stdenv, fetchurl, libpcap, tcl }:
+{ lib, stdenv, fetchFromGitHub, libpcap, withTcl ? true, tcl }:
 
 stdenv.mkDerivation rec {
   pname = "hping";
-  version = "20051105";
+  version = "2014-12-26";
 
-  src = fetchurl {
-    url = "http://www.hping.org/hping3-${version}.tar.gz";
-    sha256 = "1s5f9xd1msx05ibhwaw37jmc7l9fahcxxslqz8a83p0i5ak739pm";
+  src = fetchFromGitHub {
+    owner = "antirez";
+    repo = pname;
+    rev = "3547c7691742c6eaa31f8402e0ccbb81387c1b99"; # there are no tags/releases
+    sha256 = "0y0n1ybij3yg9lfgzcwfmjz1sjg913zcqrv391xx83dm0j80sdpb";
   };
 
-  buildInputs = [ libpcap tcl ];
+  buildInputs = [ libpcap ] ++ lib.optional withTcl 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>|' \
+  postPatch = ''
+    substituteInPlace Makefile.in --replace "gcc" "$CC"
+    substituteInPlace version.c --replace "RELEASE_DATE" "\"$version\""
+  '' + lib.optionalString stdenv.isLinux ''
+    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"
-  '';
+  configureFlags = [ (if withTcl then "TCLSH=${tcl}/bin/tclsh" else "--no-tcl") ];
 
-  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"
+  installPhase = ''
+    install -Dm755 hping3 -t $out/sbin
+    ln -s $out/sbin/hping3 $out/sbin/hping
+    ln -s $out/sbin/hping3 $out/sbin/hping2
+    install -Dm644 docs/hping3.8 -t $out/share/man/man8
+    ln -s hping3.8.gz $out/share/man/man8/hping.8.gz
+    ln -s hping3.8.gz $out/share/man/man8/hping2.8.gz
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    license = licenses.gpl2Only;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/htpdate/default.nix b/pkgs/tools/networking/htpdate/default.nix
index d03b08cf5eb..cd2b3a18d42 100644
--- a/pkgs/tools/networking/htpdate/default.nix
+++ b/pkgs/tools/networking/htpdate/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   version = "1.2.2";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Utility to fetch time and set the system clock over HTTP";
     homepage = "http://www.vervest.org/htp/";
     platforms = platforms.linux;
diff --git a/pkgs/tools/networking/http-prompt/default.nix b/pkgs/tools/networking/http-prompt/default.nix
index 9c524c0cc09..3732fbd879f 100644
--- a/pkgs/tools/networking/http-prompt/default.nix
+++ b/pkgs/tools/networking/http-prompt/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python3Packages, httpie }:
+{ lib, fetchFromGitHub, python3Packages, httpie }:
 
 python3Packages.buildPythonApplication rec {
   pname = "http-prompt";
@@ -24,7 +24,7 @@ python3Packages.buildPythonApplication rec {
     $out/bin/${pname} --version | grep -q "${version}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "An interactive command-line HTTP client featuring autocomplete and syntax highlighting";
     homepage = "https://github.com/eliangcs/http-prompt";
     license = licenses.mit;
diff --git a/pkgs/tools/networking/httperf/default.nix b/pkgs/tools/networking/httperf/default.nix
index 50c35fbb33c..975b050de7e 100644
--- a/pkgs/tools/networking/httperf/default.nix
+++ b/pkgs/tools/networking/httperf/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, openssl }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, openssl }:
 
 stdenv.mkDerivation rec {
   pname = "httperf";
@@ -26,12 +26,12 @@ stdenv.mkDerivation rec {
     mv -v src/httperf $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "The httperf HTTP load generator";
     homepage = "https://github.com/httperf/httperf";
-    maintainers = with maintainers; [ nand0p ];
+    maintainers = with maintainers; [ ];
     license = licenses.gpl2;
-    platforms = platforms.linux;
+    platforms = platforms.all;
   };
 
 }
diff --git a/pkgs/tools/networking/httpie/default.nix b/pkgs/tools/networking/httpie/default.nix
index bf80cd48ffa..a7ecabe8e62 100644
--- a/pkgs/tools/networking/httpie/default.nix
+++ b/pkgs/tools/networking/httpie/default.nix
@@ -1,31 +1,26 @@
-{ stdenv, fetchFromGitHub, python3Packages, docutils, fetchpatch }:
+{ lib, fetchFromGitHub, python3Packages, docutils }:
 
 python3Packages.buildPythonApplication rec {
   pname = "httpie";
-  version = "2.2.0";
+  version = "2.4.0";
 
   src = fetchFromGitHub {
-    owner = "jakubroztocil";
+    owner = "httpie";
     repo = "httpie";
     rev = version;
-    sha256 = "0caazv24jr0844c4mdx77vzwwi5m869n10wa42cydb08ppx1xxj6";
+    sha256 = "00lafjqg9nfnak0nhcr2l2hzzkwn2y6qv0wdkm6r6f69snizy3hf";
   };
 
-  outputs = [ "out" "doc" "man" ];
-
-  propagatedBuildInputs = with python3Packages; [ pygments requests setuptools ];
-  dontUseSetuptoolsCheck = true;
   patches = [
     ./strip-venv.patch
-
-    # Fix `test_ciphers_none_can_be_selected`
-    # TODO: remove on next release
-    (fetchpatch {
-      url = "https://github.com/jakubroztocil/httpie/commit/49e71d252f54871a6bc49cb1cba103d385a543b8.patch";
-      sha256 = "13b2faf50gimj7f17dlx4gmd8ph8ipgihpzfqbvmfjlbf1v95fsj";
-    })
   ];
 
+  outputs = [ "out" "doc" "man" ];
+
+  nativeBuildInputs = [ docutils ];
+
+  propagatedBuildInputs = with python3Packages; [ pygments requests requests-toolbelt setuptools ];
+
   checkInputs = with python3Packages; [
     mock
     pytest
@@ -56,7 +51,7 @@ python3Packages.buildPythonApplication rec {
     sed -e 's/^|build|//g' -i README.rst
 
     toHtml() {
-      ${docutils}/bin/rst2html5 \
+      rst2html5 \
         --strip-elements-with-class=no-web \
         --title=http \
         --no-generator \
@@ -70,16 +65,7 @@ python3Packages.buildPythonApplication rec {
     toHtml CHANGELOG.rst $docdir/html/CHANGELOG.html
     toHtml CONTRIBUTING.rst $docdir/html/CONTRIBUTING.html
 
-    # change a few links to the local files
-    substituteInPlace $docdir/html/index.html \
-      --replace \
-        'https://github.com/jakubroztocil/httpie/blob/master/CHANGELOG.rst' \
-        "CHANGELOG.html" \
-      --replace \
-        'https://github.com/jakubroztocil/httpie/blob/master/CONTRIBUTING.rst' \
-        "CONTRIBUTING.html"
-
-    ${docutils}/bin/rst2man \
+    rst2man \
       --strip-elements-with-class=no-web \
       --title=http \
       --no-generator \
@@ -94,10 +80,14 @@ python3Packages.buildPythonApplication rec {
     export PATH=${docutils}/bin:$PATH
   '';
 
-  meta = {
+  checkPhase = ''
+    py.test ./httpie ./tests --doctest-modules --verbose ./httpie ./tests -k 'not test_chunked and not test_verbose_chunked and not test_multipart_chunked and not test_request_body_from_file_by_path_chunked'
+  '';
+
+  meta = with lib; {
     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 ];
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ antono relrod schneefux SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/networking/httpie/strip-venv.patch b/pkgs/tools/networking/httpie/strip-venv.patch
index 99ea80a3f56..9cfddbfdf78 100644
--- a/pkgs/tools/networking/httpie/strip-venv.patch
+++ b/pkgs/tools/networking/httpie/strip-venv.patch
@@ -1,11 +1,11 @@
 diff --git a/tests/test_docs.py b/tests/test_docs.py
-index 7a41822..720ecf6 100644
+index 340e64d..a6b4dc9 100644
 --- a/tests/test_docs.py
 +++ b/tests/test_docs.py
-@@ -41,12 +41,10 @@ assert filenames
- 
+@@ -42,15 +42,10 @@ assert filenames
  # HACK: hardcoded paths, venv should be irrelevant, etc.
- # TODO: replaces the process with Python code
+ # TODO: simplify by using the Python API instead of a subprocess
+ #       then we wont’t need the paths.
 -VENV_BIN = Path(__file__).parent.parent / 'venv/bin'
 -VENV_PYTHON = VENV_BIN / 'python'
 -VENV_RST2PSEUDOXML = VENV_BIN / 'rst2pseudoxml.py'
@@ -13,7 +13,10 @@ index 7a41822..720ecf6 100644
 +VENV_RST2PSEUDOXML = 'rst2pseudoxml.py'
  
  
--@pytest.mark.skipif(not os.path.exists(VENV_RST2PSEUDOXML), reason='docutils not installed')
+-@pytest.mark.skipif(
+-    not VENV_RST2PSEUDOXML.exists(),
+-    reason='docutils not installed',
+-)
  @pytest.mark.parametrize('filename', filenames)
  def test_rst_file_syntax(filename):
      p = subprocess.Popen(
diff --git a/pkgs/tools/networking/httping/default.nix b/pkgs/tools/networking/httping/default.nix
index 74aff38e1a6..7389c78ef8d 100644
--- a/pkgs/tools/networking/httping/default.nix
+++ b/pkgs/tools/networking/httping/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, gettext, libintl, ncurses, openssl
+{ lib, stdenv, fetchurl, gettext, libintl, ncurses, openssl
 , fftw ? null }:
 
 stdenv.mkDerivation rec {
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     "PREFIX="
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://vanheusden.com/httping";
     description = "ping with HTTP requests";
     longDescription = ''
diff --git a/pkgs/tools/networking/httplab/default.nix b/pkgs/tools/networking/httplab/default.nix
index f4fb4fe9607..40851d370c7 100644
--- a/pkgs/tools/networking/httplab/default.nix
+++ b/pkgs/tools/networking/httplab/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "httplab";
@@ -14,7 +14,7 @@ buildGoPackage rec {
     sha256 = "0442nnpxyfl2gi9pilv7q6cxs2cd98wblg8d4nw6dx98yh4h99zs";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/gchaincl/httplab";
     description = "Interactive WebServer";
     license = licenses.mit;
diff --git a/pkgs/tools/networking/httplz/default.nix b/pkgs/tools/networking/httplz/default.nix
index bf0a5b90388..2424018d885 100644
--- a/pkgs/tools/networking/httplz/default.nix
+++ b/pkgs/tools/networking/httplz/default.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, fetchFromGitHub, makeWrapper, rustPlatform
-, openssl, pkgconfig, darwin, libiconv }:
+, openssl, pkg-config, darwin, libiconv }:
 
 rustPlatform.buildRustPackage rec {
   pname = "httplz";
@@ -12,24 +12,24 @@ rustPlatform.buildRustPackage rec {
     sha256 = "154alxxclz78r29m656c8yahnzq0vd64s4sp19h0ca92dfw4s46y";
   };
 
-  nativeBuildInputs = [ makeWrapper pkgconfig ];
+  nativeBuildInputs = [ makeWrapper pkg-config ];
   buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [
     libiconv darwin.apple_sdk.frameworks.Security
   ];
 
   cargoBuildFlags = [ "--bin httplz" ];
   cargoPatches = [ ./cargo-lock.patch ];
-  cargoSha256 = "1rpwzrr9bvw375vn97y5fqhraqz35d3ani9kfflvn2758x3g8gwf";
+  cargoSha256 = "0r33vg9431jv32r03ryxb3rc4mp6h1kc00d3h1knssfvkwsh31yn";
 
   postInstall = ''
     wrapProgram $out/bin/httplz \
       --prefix PATH : "${openssl}/bin"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/tools/networking/httpstat/default.nix b/pkgs/tools/networking/httpstat/default.nix
index 70bbabc35bb..be4a8f2a168 100644
--- a/pkgs/tools/networking/httpstat/default.nix
+++ b/pkgs/tools/networking/httpstat/default.nix
@@ -1,24 +1,24 @@
-{ stdenv, fetchFromGitHub, curl, pythonPackages, glibcLocales }:
+{ lib, fetchFromGitHub, curl, python3Packages, 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 ];
+python3Packages.buildPythonApplication rec {
+  pname = "httpstat";
+  version = "1.3.1";
+  src = fetchFromGitHub {
+    owner = "reorx";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-zUdis41sQpJ1E3LdNwaCVj6gexi/Rk21IBUgoFISiDM=";
+  };
+  doCheck = false; # No tests
+  buildInputs = [ glibcLocales ];
+  runtimeDeps = [ curl ];
 
-    LC_ALL = "en_US.UTF-8";
+  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 ];
-    };
-  }
+  meta = {
+    description = "curl statistics made simple";
+    homepage = "https://github.com/reorx/httpstat";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ nequissimus ];
+  };
+}
diff --git a/pkgs/tools/networking/httptunnel/default.nix b/pkgs/tools/networking/httptunnel/default.nix
index e8ed86da3da..13ef6417535 100644
--- a/pkgs/tools/networking/httptunnel/default.nix
+++ b/pkgs/tools/networking/httptunnel/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   version = "3.3";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "0mn5s6p68n32xzadz6ds5i6bp44dyxzkq68r1yljlv470jr84bql";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Creates a bidirectional virtual data connection tunnelled in HTTP requests";
     homepage    = "http://www.nocrew.org/software/httptunnel";
     license     = licenses.gpl2;
diff --git a/pkgs/tools/networking/hue-cli/gemset.nix b/pkgs/tools/networking/hue-cli/gemset.nix
index 69d12f25a80..08fd67c3885 100644
--- a/pkgs/tools/networking/hue-cli/gemset.nix
+++ b/pkgs/tools/networking/hue-cli/gemset.nix
@@ -31,4 +31,4 @@
     };
     version = "2.2.0";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/networking/hurl/default.nix b/pkgs/tools/networking/hurl/default.nix
new file mode 100644
index 00000000000..6ecff2e6e38
--- /dev/null
+++ b/pkgs/tools/networking/hurl/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, libxml2
+, openssl
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hurl";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "Orange-OpenSource";
+    repo = pname;
+    rev = version;
+    sha256 = "0hbyqj794pvvfrg6jgz63mih73bnmnvgmwbv705c2238w7wsgk9w";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libxml2
+    openssl
+  ];
+
+  # Tests require network access to a test server
+  doCheck = false;
+
+  cargoSha256 = "09ndgm6kmqwdz7yn2rqxk5xr1qkai87zm1k138cng4wq135c3w6g";
+
+  meta = with lib; {
+    description = "Command line tool that performs HTTP requests defined in a simple plain text format.";
+    homepage = "https://hurl.dev/";
+    maintainers = with maintainers; [ eonpatapon ];
+    license = licenses.asl20;
+  };
+}
diff --git a/pkgs/tools/networking/hyenae/default.nix b/pkgs/tools/networking/hyenae/default.nix
index 2ec22f2bab6..5007a69fb9b 100644
--- a/pkgs/tools/networking/hyenae/default.nix
+++ b/pkgs/tools/networking/hyenae/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, libdnet, pkgconfig, libpcap}:
+{lib, stdenv, fetchurl, libdnet, pkg-config, libpcap}:
 
 stdenv.mkDerivation {
   name = "hyenae-0.36-1";
@@ -10,14 +10,14 @@ stdenv.mkDerivation {
     sha256 = "1f3x4yn9a9p4f4wk4l8pv7hxfjc8q7cv20xzf7ky735sq1hj0xcg";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   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;
+    license = lib.licenses.gpl3;
+    maintainers = [lib.maintainers.marcweber];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/i2p/default.nix b/pkgs/tools/networking/i2p/default.nix
index 681d5d0e7a9..a3b52d19e2d 100644
--- a/pkgs/tools/networking/i2p/default.nix
+++ b/pkgs/tools/networking/i2p/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, ps, coreutils, fetchurl, jdk, jre, ant, gettext, which }:
+{ lib, stdenv, ps, coreutils, fetchurl, jdk, jre, ant, gettext, which }:
 
 let wrapper = stdenv.mkDerivation rec {
   pname = "wrapper";
-  version = "3.5.35";
+  version = "3.5.44";
 
   src = fetchurl {
     url = "https://wrapper.tanukisoftware.com/download/${version}/wrapper_${version}_src.tar.gz";
-    sha256 = "0mjyw9ays9v6lnj21pmfd3qdvd9b6rwxfmw3pg6z0kyf2jadixw2";
+    sha256 = "1iq4j7srzy5p8q3nci9316bnwx4g71jyvzd1i5hp3s8v1k61910g";
   };
 
   buildInputs = [ jdk ];
@@ -32,11 +32,11 @@ in
 
 stdenv.mkDerivation rec {
   pname = "i2p";
-  version = "0.9.42";
+  version = "0.9.48";
 
   src = fetchurl {
     url = "https://download.i2p2.de/releases/${version}/i2psource_${version}.tar.bz2";
-    sha256 = "04y71hzkdpjzbac569rhyg1zfx37j0alggbl9gnkaqfbprb2nj1h";
+    sha256 = "0cnm4bwl1gqcx89i96j2qlq6adphy4l72h5whamqwv86n8bmpig8";
   };
 
   buildInputs = [ jdk ant gettext which ];
@@ -72,11 +72,11 @@ stdenv.mkDerivation rec {
     rm $out/{osid,postinstall.sh,INSTALL-headless.txt}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = with maintainers; [ joelmo ];
   };
 }
diff --git a/pkgs/tools/networking/i2p/i2p.patch b/pkgs/tools/networking/i2p/i2p.patch
index 74031eb7aef..3bb4da72917 100644
--- a/pkgs/tools/networking/i2p/i2p.patch
+++ b/pkgs/tools/networking/i2p/i2p.patch
@@ -19,7 +19,7 @@ index eb4995dfe..0186cede3 100644
  
  # 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=$(which "%JAVA_HOME"/bin/java || which java)
 +JAVA=%JAVA%
  
  if [ -z $JAVA ] || [ ! -x $JAVA ]; then
diff --git a/pkgs/tools/networking/i2pd/default.nix b/pkgs/tools/networking/i2pd/default.nix
index b686ea4d04f..48ebf33c41b 100644
--- a/pkgs/tools/networking/i2pd/default.nix
+++ b/pkgs/tools/networking/i2pd/default.nix
@@ -1,25 +1,26 @@
-{ stdenv, fetchFromGitHub
+{ lib, stdenv, fetchFromGitHub
 , boost, zlib, openssl
 , upnpSupport ? true, miniupnpc ? null
-, aesniSupport ? false
-, avxSupport ? false
+, aesniSupport ? stdenv.hostPlatform.aesSupport
+, avxSupport   ? stdenv.hostPlatform.avxSupport
 }:
 
 assert upnpSupport -> miniupnpc != null;
 
 stdenv.mkDerivation rec {
   pname = "i2pd";
-  version = "2.32.1";
+  version = "2.38.0";
 
   src = fetchFromGitHub {
     owner = "PurpleI2P";
     repo = pname;
     rev = version;
-    sha256 = "15ng2c7i3jxmhpc2q0dl8arc72qbsq9y9paz5hgln907yy7dqx7c";
+    sha256 = "sha256-8wy6Zdnw0JgnHFLa1U3qlzjpDIqi2gykbkkV7lh+Zag=";
   };
 
-  buildInputs = with stdenv.lib; [ boost zlib openssl ]
+  buildInputs = with lib; [ boost zlib openssl ]
     ++ optional upnpSupport miniupnpc;
+
   makeFlags =
     let ynf = a: b: a + "=" + (if b then "yes" else "no"); in
     [ (ynf "USE_AESNI" aesniSupport)
@@ -27,15 +28,17 @@ stdenv.mkDerivation rec {
       (ynf "USE_UPNP"  upnpSupport)
     ];
 
+  enableParallelBuilding = true;
+
   installPhase = ''
     install -D i2pd $out/bin/i2pd
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://i2pd.website";
     description = "Minimal I2P router written in C++";
     license = licenses.bsd3;
     maintainers = with maintainers; [ edwtjo ];
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/ifstat-legacy/default.nix b/pkgs/tools/networking/ifstat-legacy/default.nix
index 25b6af5e92f..014cce5ea4f 100644
--- a/pkgs/tools/networking/ifstat-legacy/default.nix
+++ b/pkgs/tools/networking/ifstat-legacy/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, autoreconfHook, net-snmp }:
+{ lib, stdenv, fetchurl, autoreconfHook, net-snmp }:
 
 stdenv.mkDerivation rec {
   pname = "ifstat-legacy";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "01zmv6vk5kh5xmd563xws8a1qnxjb6b6kv59yzz9r3rrghxhd6c5";
   };
 
-  buildInputs = [ net-snmp ];
+  buildInputs = lib.optional stdenv.isLinux net-snmp;
 
   nativeBuildInputs = [ autoreconfHook ];
 
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
     mv $out/share/man/man1/ifstat.1 $out/share/man/man1/ifstat-legacy.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/networking/iftop/default.nix b/pkgs/tools/networking/iftop/default.nix
index 70c1f0b6c96..c3e71e6132d 100644
--- a/pkgs/tools/networking/iftop/default.nix
+++ b/pkgs/tools/networking/iftop/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, ncurses, libpcap, automake, nixosTests }:
+{ lib, stdenv, fetchurl, ncurses, libpcap, automake, nixosTests }:
 
 stdenv.mkDerivation {
   name = "iftop-1.0pre4";
@@ -10,7 +10,7 @@ stdenv.mkDerivation {
 
   # 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";
+  LDFLAGS = lib.optionalString stdenv.isLinux "-lgcc_s";
 
   preConfigure = ''
     cp ${automake}/share/automake*/config.{sub,guess} config
@@ -20,7 +20,7 @@ stdenv.mkDerivation {
 
   passthru.tests = { inherit (nixosTests) iftop; };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Display bandwidth usage on a network interface";
     longDescription = ''
       iftop does for network usage what top(1) does for CPU usage. It listens
diff --git a/pkgs/tools/networking/igmpproxy/default.nix b/pkgs/tools/networking/igmpproxy/default.nix
new file mode 100644
index 00000000000..9f924964907
--- /dev/null
+++ b/pkgs/tools/networking/igmpproxy/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "igmpproxy";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "pali";
+    repo = "igmpproxy";
+    rev = version;
+    sha256 = "sha256-B7mq+5pKWMO4dJeFPB7tiyjDQjj90g/kmYB2ApBE3Ic=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "A daemon that routes multicast using IGMP forwarding";
+    homepage = "https://github.com/pali/igmpproxy/";
+    changelog = "https://github.com/pali/igmpproxy/releases/tag/${version}";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.sdier ];
+    # The maintainer is using this on linux, but if you test it on other platforms
+    # please add them here!
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/networking/imapproxy/default.nix b/pkgs/tools/networking/imapproxy/default.nix
index 01480056a2a..dd149f57432 100644
--- a/pkgs/tools/networking/imapproxy/default.nix
+++ b/pkgs/tools/networking/imapproxy/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, openssl, ncurses}:
+{lib, stdenv, fetchurl, openssl, ncurses}:
 
 stdenv.mkDerivation {
   name = "imapproxy-1.2.7";
@@ -16,7 +16,7 @@ stdenv.mkDerivation {
   meta = {
     homepage = "http://imapproxy.org/";
     description = "It proxies IMAP transactions caching server connections";
-    license = stdenv.lib.licenses.gpl2Plus;
-    platforms = stdenv.lib.platforms.unix;
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/imapsync/default.nix b/pkgs/tools/networking/imapsync/default.nix
index aa0980a2514..bec0b197c18 100644
--- a/pkgs/tools/networking/imapsync/default.nix
+++ b/pkgs/tools/networking/imapsync/default.nix
@@ -1,4 +1,4 @@
-{stdenv, makeWrapper, fetchurl, perl, openssl, perlPackages }:
+{lib, stdenv, makeWrapper, fetchurl, perl, openssl, perlPackages }:
 
 stdenv.mkDerivation rec {
   name = "imapsync-1.727";
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
     IOSocketInet6 NTLM
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.linux-france.org/prj/imapsync/";
     description = "Mail folder synchronizer between IMAP servers";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/networking/inadyn/default.nix b/pkgs/tools/networking/inadyn/default.nix
index 2a551c56768..47d86615026 100644
--- a/pkgs/tools/networking/inadyn/default.nix
+++ b/pkgs/tools/networking/inadyn/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
 , gnutls, libite, libconfuse }:
 
 stdenv.mkDerivation rec {
@@ -12,14 +12,14 @@ stdenv.mkDerivation rec {
     sha256 = "00jhayx0hfl9dw78d58bdxa5390bvxq73lz26q9h1gg1xw76adan";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
   buildInputs = [ gnutls libite libconfuse ];
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
-    homepage = "http://troglobit.com/project/inadyn/";
+  meta = with lib; {
+    homepage = "https://troglobit.com/project/inadyn/";
     description = "Free dynamic DNS client";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ ];
diff --git a/pkgs/tools/networking/inetutils/default.nix b/pkgs/tools/networking/inetutils/default.nix
index 1290ec2bdb1..285031aaca5 100644
--- a/pkgs/tools/networking/inetutils/default.nix
+++ b/pkgs/tools/networking/inetutils/default.nix
@@ -1,4 +1,6 @@
-{ stdenv, lib, fetchurl, ncurses, perl, help2man }:
+{ stdenv, lib, fetchurl, ncurses, perl, help2man
+, apparmorRulesFromClosure
+}:
 
 stdenv.mkDerivation rec {
   name = "inetutils-1.9.4";
@@ -8,6 +10,8 @@ stdenv.mkDerivation rec {
     sha256 = "05n65k4ixl85dc6rxc51b1b732gnmm8xnqi424dy9f1nz7ppb3xy";
   };
 
+  outputs = ["out" "apparmor"];
+
   patches = [
     ./whois-Update-Canadian-TLD-server.patch
     ./service-name.patch
@@ -41,6 +45,23 @@ stdenv.mkDerivation rec {
 
   installFlags = [ "SUIDMODE=" ];
 
+  postInstall = ''
+    mkdir $apparmor
+    cat >$apparmor/bin.ping <<EOF
+    $out/bin/ping {
+      include <abstractions/base>
+      include <abstractions/consoles>
+      include <abstractions/nameservice>
+      include "${apparmorRulesFromClosure { name = "ping"; } [stdenv.cc.libc]}"
+      include <local/bin.ping>
+      capability net_raw,
+      network inet raw,
+      network inet6 raw,
+      mr $out/bin/ping,
+    }
+    EOF
+  '';
+
   meta = with lib; {
     description = "Collection of common network programs";
 
diff --git a/pkgs/tools/networking/innernet/default.nix b/pkgs/tools/networking/innernet/default.nix
new file mode 100644
index 00000000000..f643702d625
--- /dev/null
+++ b/pkgs/tools/networking/innernet/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, llvmPackages, sqlite, installShellFiles, Security, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "innernet";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "tonarino";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-n+xNWhOkRCIcoBHR8u+xZK81fU0usIfFhYg3BO9yXik=";
+  };
+  cargoSha256 = "sha256-cTqQtJpuwVlUKfAK8ASf6vq6PU2NE8PT/el/Hz4HgtA=";
+
+  nativeBuildInputs = with llvmPackages; [
+    llvm
+    clang
+    installShellFiles
+  ];
+  buildInputs = [ sqlite ] ++ lib.optionals stdenv.isDarwin [ Security libiconv ];
+
+  LIBCLANG_PATH = "${llvmPackages.libclang.lib}/lib";
+
+  postInstall = ''
+    installManPage doc/innernet-server.8.gz
+    installManPage doc/innernet.8.gz
+    installShellCompletion doc/innernet.completions.{bash,fish,zsh}
+    installShellCompletion doc/innernet-server.completions.{bash,fish,zsh}
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    if [[ "$("$out/bin/${pname}"-server --version)" == "${pname}-server ${version}" ]]; then
+      echo '${pname}-server smoke check passed'
+    else
+      echo '${pname}-server smoke check failed'
+      return 1
+    fi
+    if [[ "$("$out/bin/${pname}" --version)" == "${pname} ${version}" ]]; then
+      echo '${pname} smoke check passed'
+    else
+      echo '${pname} smoke check failed'
+      return 1
+    fi
+  '';
+
+  meta = with lib; {
+    description = "A private network system that uses WireGuard under the hood";
+    homepage = "https://github.com/tonarino/innernet";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tomberek _0x4A6F ];
+  };
+}
diff --git a/pkgs/tools/networking/iodine/default.nix b/pkgs/tools/networking/iodine/default.nix
index 2703ca0fc64..226cfb9ce8e 100644
--- a/pkgs/tools/networking/iodine/default.nix
+++ b/pkgs/tools/networking/iodine/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, zlib, nettools, nixosTests }:
+{ lib, stdenv, fetchFromGitHub, zlib, nettools, nixosTests }:
 
 stdenv.mkDerivation rec {
   pname = "iodine";
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.isc;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/iouyap/default.nix b/pkgs/tools/networking/iouyap/default.nix
index b49b34d6dc7..2367261b522 100644
--- a/pkgs/tools/networking/iouyap/default.nix
+++ b/pkgs/tools/networking/iouyap/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, bison, flex }:
+{ lib, stdenv, fetchFromGitHub, bison, flex }:
 
 stdenv.mkDerivation rec {
   pname = "iouyap";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
     install -D -m555 iouyap $out/bin/iouyap;
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Bridge IOU to UDP, TAP and Ethernet";
     inherit (src.meta) homepage;
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/networking/ip2location/default.nix b/pkgs/tools/networking/ip2location/default.nix
index 205a4e6e701..df5d26b4f5d 100644
--- a/pkgs/tools/networking/ip2location/default.nix
+++ b/pkgs/tools/networking/ip2location/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "ip2location";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Look up locations of host names and IP addresses";
     longDescription = ''
       A command-line tool to find the country, region, city,coordinates,
diff --git a/pkgs/tools/networking/ip2unix/default.nix b/pkgs/tools/networking/ip2unix/default.nix
index 269dd0f1f34..7e2eef70b8a 100644
--- a/pkgs/tools/networking/ip2unix/default.nix
+++ b/pkgs/tools/networking/ip2unix/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig, libyamlcpp, systemd
+{ lib, stdenv, fetchFromGitHub, meson, ninja, pkg-config, libyamlcpp, systemd
 , python3Packages, asciidoc, libxslt, docbook_xml_dtd_45, docbook_xsl
 , libxml2, docbook5
 }:
 
 stdenv.mkDerivation rec {
   pname = "ip2unix";
-  version = "2.1.3";
+  version = "2.1.4";
 
   src = fetchFromGitHub {
     owner = "nixcloud";
     repo = "ip2unix";
     rev = "v${version}";
-    sha256 = "19c449h60b2m1d8kawnhpi4y9y4ddm24jmlh8kilqmx8m5l2khr6";
+    sha256 = "1pl8ayadxb0zzh5s26yschkjhr1xffbzzv347m88f9y0jv34d24r";
   };
 
   nativeBuildInputs = [
-    meson ninja pkgconfig asciidoc libxslt.bin docbook_xml_dtd_45 docbook_xsl
+    meson ninja pkg-config asciidoc libxslt.bin docbook_xml_dtd_45 docbook_xsl
     libxml2.bin docbook5 python3Packages.pytest python3Packages.pytest-timeout
     systemd
   ];
@@ -39,8 +39,8 @@ stdenv.mkDerivation rec {
   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 ];
+    platforms = lib.platforms.linux;
+    license = lib.licenses.lgpl3;
+    maintainers = [ lib.maintainers.aszlig ];
   };
 }
diff --git a/pkgs/tools/networking/ipcalc/default.nix b/pkgs/tools/networking/ipcalc/default.nix
index 7f118193a3a..5fec55899e4 100644
--- a/pkgs/tools/networking/ipcalc/default.nix
+++ b/pkgs/tools/networking/ipcalc/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, perl}:
+{lib, stdenv, fetchurl, perl}:
 stdenv.mkDerivation rec {
   pname = "ipcalc";
   version = "0.41";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
   meta = {
     description = "Simple IP network calculator";
     homepage = "http://jodies.de/ipcalc";
-    license = stdenv.lib.licenses.gpl2Plus;
-    platforms = stdenv.lib.platforms.all;
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/networking/iperf/2.nix b/pkgs/tools/networking/iperf/2.nix
index f90b74313e5..3270a25e67b 100644
--- a/pkgs/tools/networking/iperf/2.nix
+++ b/pkgs/tools/networking/iperf/2.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "iperf-2.0.13";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
     ln -s $out/bin/iperf2 $out/bin/iperf
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://sourceforge.net/projects/iperf/";
     description = "Tool to measure IP bandwidth using UDP or TCP";
     platforms = platforms.unix;
diff --git a/pkgs/tools/networking/iperf/3.nix b/pkgs/tools/networking/iperf/3.nix
index 4910ff21da6..5ab3f7f30fb 100644
--- a/pkgs/tools/networking/iperf/3.nix
+++ b/pkgs/tools/networking/iperf/3.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchurl, openssl, fetchpatch }:
+{ lib, stdenv, fetchurl, openssl, fetchpatch }:
 
 stdenv.mkDerivation rec {
   pname = "iperf";
-  version = "3.8.1";
+  version = "3.9";
 
   src = fetchurl {
     url = "https://downloads.es.net/pub/iperf/iperf-${version}.tar.gz";
-    sha256 = "15pdgnan9krf3dijan9in73ir8rcmhk3iw8085d732is4zrq1c75";
+    sha256 = "0f601avdmzpwsa3lbi0ppjhkrdipm5wifhhxy5czf99370k3mdi4";
   };
 
   buildInputs = [ openssl ];
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
 
   outputs = [ "out" "man" ];
 
-  patches = stdenv.lib.optionals stdenv.hostPlatform.isMusl [
+  patches = 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";
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
     ln -s $man/share/man/man1/iperf3.1 $man/share/man/man1/iperf.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://software.es.net/iperf/";
     description = "Tool to measure IP bandwidth using UDP or TCP";
     platforms = platforms.unix;
diff --git a/pkgs/tools/networking/ipgrep/default.nix b/pkgs/tools/networking/ipgrep/default.nix
index 6ea930fccaa..d1f5316c27b 100644
--- a/pkgs/tools/networking/ipgrep/default.nix
+++ b/pkgs/tools/networking/ipgrep/default.nix
@@ -1,29 +1,31 @@
-{ stdenv, fetchFromGitHub, pythonPackages }:
+{ lib, fetchFromGitHub, python3Packages }:
 
-pythonPackages.buildPythonApplication rec {
-  version = "1.0";
+python3Packages.buildPythonApplication rec {
+  version = "1.0.1";
   pname = "ipgrep";
 
+  disabled = python3Packages.isPy27;
+
   src = fetchFromGitHub {
     owner = "jedisct1";
     repo = pname;
     rev = version;
-    sha256 = "1qaxvbqdalvz05aplhhrg7s4h7yx4clbfd50k46bgavhgcqqv8n3";
+    hash = "sha256-NrhcUFQM+L66KaDRRpAoC+z5s54a+1fqEepTRXVZ5Qs=";
   };
 
   patchPhase = ''
-    mkdir -p ${pname} 
+    mkdir -p ${pname}
     substituteInPlace setup.py \
       --replace "'scripts': []" "'scripts': { '${pname}.py' }"
   '';
 
-  propagatedBuildInputs = with pythonPackages; [
+  propagatedBuildInputs = with python3Packages; [
     pycares
     urllib3
     requests
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Extract, defang, resolve names and IPs from text";
     longDescription = ''
       ipgrep extracts possibly obfuscated host names and IP addresses
diff --git a/pkgs/tools/networking/ipinfo/default.nix b/pkgs/tools/networking/ipinfo/default.nix
new file mode 100644
index 00000000000..91bc654c83a
--- /dev/null
+++ b/pkgs/tools/networking/ipinfo/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "ipinfo";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = "cli";
+    rev = "${pname}-${version}";
+    sha256 = "00rqqkybvzxcpa6fy799fxmn95xqx7s3z3mqfryzi35dlmjdfzqy";
+  };
+
+  vendorSha256 = null;
+
+  # Tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command Line Interface for the IPinfo API";
+    homepage = "https://github.com/ipinfo/cli";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/networking/ipv6calc/default.nix b/pkgs/tools/networking/ipv6calc/default.nix
index 35aeb23a9a8..158a979fb40 100644
--- a/pkgs/tools/networking/ipv6calc/default.nix
+++ b/pkgs/tools/networking/ipv6calc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, getopt, ip2location-c, openssl, perl
+{ lib, stdenv, fetchurl, getopt, ip2location-c, openssl, perl
 , libmaxminddb ? null, geolite-legacy ? null }:
 
 stdenv.mkDerivation rec {
@@ -30,13 +30,13 @@ stdenv.mkDerivation rec {
     "--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";
+  ] ++ lib.optional (libmaxminddb != null) "--enable-mmdb"
+    ++ lib.optional (geolite-legacy != null) "--with-geoip-db=${geolite-legacy}/share/GeoIP"
+    ++ lib.optional (ip2location-c != null) "--enable-ip2location";
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Calculate/manipulate (not only) IPv6 addresses";
     longDescription = ''
       ipv6calc is a small utility to manipulate (not only) IPv6 addresses and
diff --git a/pkgs/tools/networking/isync/default.nix b/pkgs/tools/networking/isync/default.nix
index 44eb5c50ba8..666e19ca81a 100644
--- a/pkgs/tools/networking/isync/default.nix
+++ b/pkgs/tools/networking/isync/default.nix
@@ -1,20 +1,22 @@
-{ stdenv, fetchurl, pkg-config, perl
-, openssl, db, zlib, cyrus_sasl
+{ lib, stdenv, fetchurl, pkg-config, perl
+, openssl, db, cyrus_sasl, zlib
+, Security
 }:
 
 stdenv.mkDerivation rec {
   pname = "isync";
-  version = "1.3.3";
+  version = "1.4.2";
 
   src = fetchurl {
     url = "mirror://sourceforge/isync/${pname}-${version}.tar.gz";
-    sha256 = "10n8ykag0q3ws6fc15xqyg3v980v5nq3kzpablly2rh2z7vkn8gj";
+    sha256 = "0hskfpj4r4q3959k3npyqli353daj3r5d9mfia9bbmig87nyfd8r";
   };
 
   nativeBuildInputs = [ pkg-config perl ];
-  buildInputs = [ openssl db cyrus_sasl zlib ];
+  buildInputs = [ openssl db cyrus_sasl zlib ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://isync.sourceforge.net/";
     # https://sourceforge.net/projects/isync/
     changelog = "https://sourceforge.net/p/isync/isync/ci/v${version}/tree/NEWS";
diff --git a/pkgs/tools/networking/iwgtk/default.nix b/pkgs/tools/networking/iwgtk/default.nix
new file mode 100644
index 00000000000..5c89facd3fa
--- /dev/null
+++ b/pkgs/tools/networking/iwgtk/default.nix
@@ -0,0 +1,28 @@
+{ fetchFromGitHub, gtk3, lib, pkg-config, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "iwgtk";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner = "j-lentz";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "129h7vq9b1r9a5c79hk8d06bj8lgzrnhq55x54hqri9c471jjh0s";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ gtk3 ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    description = "Lightweight, graphical wifi management utility for Linux";
+    homepage = "https://github.com/j-lentz/iwgtk";
+    changelog = "https://github.com/j-lentz/iwgtk/blob/v${version}/CHANGELOG";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/pkgs/tools/networking/jnettop/default.nix b/pkgs/tools/networking/jnettop/default.nix
index 2d23ff1f1fd..bd31235b6f9 100644
--- a/pkgs/tools/networking/jnettop/default.nix
+++ b/pkgs/tools/networking/jnettop/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, fetchpatch, stdenv, autoconf, libpcap, ncurses, pkgconfig, glib }:
+{ fetchurl, fetchpatch, lib, stdenv, autoconf, libpcap, ncurses, pkg-config, glib }:
 
 stdenv.mkDerivation {
   name = "jnettop-0.13.0";
@@ -8,7 +8,7 @@ stdenv.mkDerivation {
     sha256 = "1855np7c4b0bqzhf1l1dyzxb90fpnvrirdisajhci5am6als31z9";
   };
 
-  nativeBuildInputs = [ pkgconfig autoconf ];
+  nativeBuildInputs = [ pkg-config autoconf ];
   buildInputs = [ libpcap ncurses glib ];
 
   patches = [
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
     })
   ];
 
-  preConfigure = '' autoconf '';
+  preConfigure = "autoconf ";
 
   meta = {
     description = "Network traffic visualizer";
@@ -31,7 +31,7 @@ stdenv.mkDerivation {
     '';
 
     homepage = "http://jnettop.kubs.info/";
-    license = stdenv.lib.licenses.gpl2Plus;
-    platforms = stdenv.lib.platforms.unix;
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/junkie/default.nix b/pkgs/tools/networking/junkie/default.nix
index 29fe71c9365..58b35f2f53f 100644
--- a/pkgs/tools/networking/junkie/default.nix
+++ b/pkgs/tools/networking/junkie/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, libpcap, guile, openssl }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, libpcap, guile, openssl }:
 
 stdenv.mkDerivation rec {
   pname = "junkie";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
     sha256 = "0kfdjgch667gfb3qpiadd2dj3fxc7r19nr620gffb1ahca02wq31";
   };
   buildInputs = [ libpcap guile openssl ];
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   configureFlags = [
     "GUILELIBDIR=\${out}/share/guile/site"
     "GUILECACHEDIR=\${out}/lib/guile/ccache"
@@ -20,9 +20,9 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.agpl3Plus;
+    maintainers = [ lib.maintainers.rixed ];
+    platforms = lib.platforms.unix;
     longDescription = ''
       Junkie is a network sniffer like Tcpdump or Wireshark, but designed to
       be easy to program and extend.
diff --git a/pkgs/tools/networking/jwhois/default.nix b/pkgs/tools/networking/jwhois/default.nix
index 0a9ac99e236..6eb26de82fc 100644
--- a/pkgs/tools/networking/jwhois/default.nix
+++ b/pkgs/tools/networking/jwhois/default.nix
@@ -1,4 +1,4 @@
-{stdenv, lynx, fetchurl}:
+{lib, stdenv, lynx, fetchurl}:
 
 stdenv.mkDerivation {
   name = "jwhois-4.0";
@@ -20,7 +20,7 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/kail/default.nix b/pkgs/tools/networking/kail/default.nix
index e7c9b499675..ae431b329ea 100644
--- a/pkgs/tools/networking/kail/default.nix
+++ b/pkgs/tools/networking/kail/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "kail";
@@ -20,9 +20,10 @@ buildGoPackage rec {
   # git checkout <version>
   # dep init
   # dep2nix
+  deleteVendor = true;
   goDeps = ./deps.nix;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Kubernetes log viewer";
     homepage = "https://github.com/boz/kail";
     license = licenses.mit;
diff --git a/pkgs/tools/networking/kail/deps.nix b/pkgs/tools/networking/kail/deps.nix
index ee5d2fb8271..b6d9c3e9cf3 100644
--- a/pkgs/tools/networking/kail/deps.nix
+++ b/pkgs/tools/networking/kail/deps.nix
@@ -405,4 +405,4 @@
       sha256 = "1vkcjg80l49hxiadqmkkd031kj6kc10m8mwcnla3k1ml8fv4qna9";
     };
   }
-]
\ No newline at end of file
+]
diff --git a/pkgs/tools/networking/kapp/default.nix b/pkgs/tools/networking/kapp/default.nix
new file mode 100644
index 00000000000..181a9d9b85e
--- /dev/null
+++ b/pkgs/tools/networking/kapp/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+buildGoModule rec {
+  pname = "kapp";
+  version = "0.37.0";
+
+  src = fetchFromGitHub {
+    owner = "vmware-tanzu";
+    repo = "carvel-kapp";
+    rev = "v${version}";
+    sha256 = "sha256-SxS6KBiKc68PcRycdVDWWfXBKOJvo7GuG/0dUQGcHsg=";
+  };
+
+  vendorSha256 = null;
+
+  subPackages = [ "cmd/kapp" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    for shell in bash fish zsh; do
+      $out/bin/kapp completion $shell > kapp.$shell
+      installShellCompletion kapp.$shell
+    done
+  '';
+
+  meta = with lib; {
+    description = "CLI tool that encourages Kubernetes users to manage bulk resources with an application abstraction for grouping";
+    homepage = "https://get-kapp.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ brodes ];
+  };
+}
diff --git a/pkgs/tools/networking/kea/default.nix b/pkgs/tools/networking/kea/default.nix
index 386a3ae280a..e3e4a67c131 100644
--- a/pkgs/tools/networking/kea/default.nix
+++ b/pkgs/tools/networking/kea/default.nix
@@ -1,41 +1,64 @@
-{ stdenv, fetchurl, autoreconfHook, pkgconfig, openssl, botan2, log4cplus
-, boost, python3, postgresql, libmysqlclient, gmp, bzip2 }:
+{ stdenv
+, lib
+, fetchurl
+, autoreconfHook
+, pkg-config
+, boost
+, botan2
+, libmysqlclient
+, log4cplus
+, postgresql
+, python3
+, nixosTests
+}:
 
 stdenv.mkDerivation rec {
   pname = "kea";
-  version = "1.5.0-P1";
+  version = "1.9.9";
 
   src = fetchurl {
     url = "https://ftp.isc.org/isc/${pname}/${version}/${pname}-${version}.tar.gz";
-    sha256 = "0bqxzp3f7cmraa5davj2az1hx1gbbchqzlz3ai26c802agzafyhz";
+    sha256 = "sha256-iVSWBR1+SkXlkwMii2PXpcxFSXYigz4lfNnMZBvS2kM=";
   };
 
   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 = [
+    "--enable-perfdhcp"
+    "--enable-shell"
     "--localstatedir=/var"
+    "--with-mysql=${lib.getDev libmysqlclient}/bin/mysql_config"
     "--with-pgsql=${postgresql}/bin/pg_config"
-    "--with-mysql=${libmysqlclient}/bin/mysql_config"
   ];
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
   buildInputs = [
-    openssl log4cplus boost python3 libmysqlclient
-    botan2 gmp bzip2
+    boost
+    botan2
+    libmysqlclient
+    log4cplus
+    python3
   ];
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  passthru.tests = {
+    inherit (nixosTests) kea;
+  };
+
+  meta = with 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
+      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
@@ -43,6 +66,6 @@ stdenv.mkDerivation rec {
     '';
     license = licenses.mpl20;
     platforms = platforms.unix;
-    maintainers = with maintainers; [ fpletz ];
+    maintainers = with maintainers; [ fpletz hexa ];
   };
 }
diff --git a/pkgs/tools/networking/kea/dont-create-var.patch b/pkgs/tools/networking/kea/dont-create-var.patch
index 385113d160f..53e05b5b62b 100644
--- a/pkgs/tools/networking/kea/dont-create-var.patch
+++ b/pkgs/tools/networking/kea/dont-create-var.patch
@@ -1,26 +1,28 @@
 diff --git a/Makefile.am b/Makefile.am
-index 2c0733c..974bb5e 100644
+index 10708e7..d4efd73 100644
 --- a/Makefile.am
 +++ b/Makefile.am
-@@ -135,11 +135,6 @@ cppcheck:
- 		--template '{file}:{line}: check_fail: {message} ({severity},{id})' \
- 		src
+@@ -150,13 +150,6 @@ cppcheck:
+ docs:
+ 	$(MAKE) -C doc/sphinx
  
+-
 -# These steps are necessary during installation
 -install-exec-hook:
 -	mkdir -p $(DESTDIR)${localstatedir}/log/
--	mkdir -p $(DESTDIR)${localstatedir}/run/${PACKAGE_NAME}
+-	mkdir -p $(DESTDIR)${localstatedir}/lib/${PACKAGE_NAME}
+-	mkdir -p $(DESTDIR)${runstatedir}/${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
+index a0a0289..ba42f8a 100644
 --- a/src/lib/dhcpsrv/Makefile.am
 +++ b/src/lib/dhcpsrv/Makefile.am
-@@ -352,5 +352,3 @@ libkea_dhcpsrv_parsers_include_HEADERS = \
+@@ -408,5 +408,3 @@ libkea_dhcpsrv_parsers_include_HEADERS = \
+ 	parsers/simple_parser4.h \
  	parsers/simple_parser6.h
  
- 
 -install-data-local:
 -	$(mkinstalldirs) $(DESTDIR)$(dhcp_data_dir)
diff --git a/pkgs/tools/networking/keepalived/default.nix b/pkgs/tools/networking/keepalived/default.nix
index 076953161a3..48fe72d4296 100644
--- a/pkgs/tools/networking/keepalived/default.nix
+++ b/pkgs/tools/networking/keepalived/default.nix
@@ -1,16 +1,16 @@
-{ stdenv, fetchFromGitHub, nixosTests
+{ lib, stdenv, fetchFromGitHub, nixosTests
 , libnfnetlink, libnl, net-snmp, openssl
-, pkgconfig, autoreconfHook }:
+, pkg-config, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   pname = "keepalived";
-  version = "2.0.20";
+  version = "2.2.2";
 
   src = fetchFromGitHub {
     owner = "acassen";
     repo = "keepalived";
     rev = "v${version}";
-    sha256 = "0ijzw56hbac24dhrgjd0hjgf45072imyzq3mcgsirdl3xqjc6x12";
+    sha256 = "sha256-qugEEbOQ4bemzelIOaNFvo3piMZpKUZGjR+4XF8aLHw=";
   };
 
   buildInputs = [
@@ -22,14 +22,14 @@ stdenv.mkDerivation rec {
 
   passthru.tests.keepalived = nixosTests.keepalived;
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
 
   configureFlags = [
     "--enable-sha1"
     "--enable-snmp"
  ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://keepalived.org";
     description = "Routing software written in C";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/lftp/default.nix b/pkgs/tools/networking/lftp/default.nix
index 3bd61a0bd49..f51c6f034dd 100644
--- a/pkgs/tools/networking/lftp/default.nix
+++ b/pkgs/tools/networking/lftp/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, gnutls, pkgconfig, readline, zlib, libidn2, gmp, libiconv, libunistring, gettext }:
+{ lib, stdenv, fetchurl, gnutls, pkg-config, readline, zlib, libidn2, gmp, libiconv, libunistring, gettext }:
 
 stdenv.mkDerivation rec {
   pname = "lftp";
-  version = "4.9.1";
+  version = "4.9.2";
 
   src = fetchurl {
     urls = [
@@ -10,14 +10,14 @@ stdenv.mkDerivation rec {
       "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";
+    sha256 = "03b7y0h3mf4jfq5y8zw6hv9v44z3n6i8hc1iswax96y3z7sc85y5";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   buildInputs = [ gnutls readline zlib libidn2 gmp libiconv libunistring gettext ];
 
-  hardeningDisable = stdenv.lib.optional stdenv.isDarwin "format";
+  hardeningDisable = lib.optional stdenv.isDarwin "format";
 
   configureFlags = [
     "--with-readline=${readline.dev}"
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A file transfer program supporting a number of network protocols";
     homepage = "https://lftp.tech/";
     license = licenses.gpl3;
diff --git a/pkgs/tools/networking/libnids/default.nix b/pkgs/tools/networking/libnids/default.nix
index 2a93d3c8a59..a2cf239b56b 100644
--- a/pkgs/tools/networking/libnids/default.nix
+++ b/pkgs/tools/networking/libnids/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchzip, libpcap, glib, pkgconfig, libnet }:
+{ lib, stdenv, fetchzip, libpcap, glib, pkg-config, libnet }:
 stdenv.mkDerivation {
   pname = "libnids";
   version = "1.24";
@@ -6,7 +6,7 @@ stdenv.mkDerivation {
     url = "mirror://sourceforge/libnids/libnids-1.24.tar.gz";
     sha256 = "1cblklfdfxcmy0an6xyyzx4l877xdawhjd28daqfsvrh81mb07k1";
   };
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libpcap glib libnet ];
 
   /*
@@ -20,7 +20,7 @@ stdenv.mkDerivation {
   */
   NIX_CFLAGS_COMPILE="-Dg_thread_init= ";
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/networking/libreswan/default.nix b/pkgs/tools/networking/libreswan/default.nix
index 3e7719c40d4..24b7176e82b 100644
--- a/pkgs/tools/networking/libreswan/default.nix
+++ b/pkgs/tools/networking/libreswan/default.nix
@@ -1,59 +1,114 @@
-{ 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
-  }:
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, nixosTests
+, pkg-config
+, systemd
+, gmp
+, unbound
+, bison
+, flex
+, pam
+, libevent
+, libcap_ng
+, curl
+, nspr
+, bash
+, iproute2
+, iptables
+, procps
+, coreutils
+, gnused
+, gawk
+, nss
+, which
+, python3
+, libselinux
+, ldns
+, xmlto
+, docbook_xml_dtd_412
+, docbook_xsl
+, findXMLCatalogs
+}:
 
 let
-  binPath = stdenv.lib.makeBinPath [
-    bash iproute iptables procps coreutils gnused gawk nss.tools which python
+  # Tools needed by ipsec scripts
+  binPath = lib.makeBinPath [
+    iproute2 iptables procps
+    coreutils gnused gawk
+    nss.tools which
   ];
 in
 
-assert docs -> xmlto != null;
-assert stdenv.isLinux -> libselinux != null;
-
 stdenv.mkDerivation rec {
   pname = "libreswan";
-  version = "3.32";
+  version = "4.4";
 
   src = fetchurl {
     url = "https://download.libreswan.org/${pname}-${version}.tar.gz";
-    sha256 = "0bj3g6qwd3ir3gk6hdl9npy3k44shf56vcgjahn30qpmx3z5fsr3";
+    sha256 = "0xj974yc0y1r7235zl4jhvxqz3bpb8js2fy9ic820zq9swh0lgsz";
   };
 
-  # 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"
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    bison
+    flex
+    pkg-config
+    xmlto
+    docbook_xml_dtd_412
+    docbook_xsl
+    findXMLCatalogs
   ];
 
-  nativeBuildInputs = [ makeWrapper pkgconfig ];
-  buildInputs = [ bash iproute iptables systemd coreutils gnused gawk gmp unbound bison flex pam libevent
-                  libcap_ng curl nspr nss python ldns ]
-                ++ stdenv.lib.optional docs xmlto
-                ++ stdenv.lib.optional stdenv.isLinux libselinux;
+  buildInputs = [
+    systemd coreutils
+    gnused gawk gmp unbound pam libevent
+    libcap_ng curl nspr nss ldns
+    # needed to patch shebangs
+    python3 bash
+  ] ++ lib.optional stdenv.isLinux libselinux;
+
+  patches = [
+    # Fix compilation on aarch64, remove on next update
+    (fetchpatch {
+      url = "https://github.com/libreswan/libreswan/commit/ea50d36d2886e44317ba5ba841de1d1bf91aee6c.patch";
+      sha256 = "1jp89rm9jp55zmiyimyhg7yadj0fwwxaw7i5gyclrs38w3y1aacj";
+    })
+  ];
 
   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
+    # Correct iproute2 path
+    sed -e 's|"/sbin/ip"|"${iproute2}/bin/ip"|' \
+        -e 's|"/sbin/iptables"|"${iptables}/bin/iptables"|' \
+        -i initsystems/systemd/ipsec.service.in \
+           programs/verify/verify.in
+
+    # Prevent the makefile from trying to
+    # reload the systemd daemon or create tmpfiles
+    sed -e 's|systemctl|true|g' \
+        -e 's|systemd-tmpfiles|true|g' \
+        -i initsystems/systemd/Makefile
 
     # Fix the ipsec program from crushing the PATH
-    sed -i -e 's|\(PATH=".*"\):.*$|\1:$PATH|' programs/ipsec/ipsec.in
+    sed -e 's|\(PATH=".*"\):.*$|\1:$PATH|' -i 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
+    sed -e 's/^\(\W*\)installstartcheck()/\1sscmd = "ss"\n\0/' \
+        -i programs/verify/verify.in
+
+    # Replace wget with curl to save a dependency
+    curlArgs='-s --remote-name-all --output-dir'
+    sed -e "s|wget -q -P|${curl}/bin/curl $curlArgs|g" \
+        -i programs/letsencrypt/letsencrypt.in
+
+    # Patch the Makefile:
+    # 1. correct the pam.d directory install path
+    # 2. do not create the /var/lib/ directory
+    sed -e 's|$(DESTDIR)/etc/pam.d|$(out)/etc/pam.d|' \
+        -e '/test ! -d $(NSSDIR)/,+3d' \
+        -i configs/Makefile
   '';
 
   # Set appropriate paths for build
@@ -61,10 +116,10 @@ stdenv.mkDerivation rec {
 
   makeFlags = [
     "INITSYSTEM=systemd"
-    (if docs then "all" else "base")
+    "UNITDIR=$(out)/etc/systemd/system/"
+    "TMPFILESDIR=$(out)/lib/tmpfiles.d/"
   ];
 
-  installTargets = [ (if docs then "install" else "install-base") ];
   # Hack to make install work
   installFlags = [
     "FINALVARDIR=\${out}/var"
@@ -72,18 +127,23 @@ stdenv.mkDerivation rec {
   ];
 
   postInstall = ''
-    for i in $out/bin/* $out/libexec/ipsec/*; do
-      wrapProgram "$i" --prefix PATH ':' "$out/bin:${binPath}"
-    done
+    # Install examples directory (needed for letsencrypt)
+    cp -r docs/examples $out/share/doc/libreswan/examples
+  '';
+
+  postFixup = ''
+    # Add a PATH to the main "ipsec" script
+    sed -e '0,/^$/{s||export PATH=${binPath}:$PATH|}' \
+        -i $out/bin/ipsec
   '';
 
-  enableParallelBuilding = true;
+  passthru.tests.libreswan = nixosTests.libreswan;
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    platforms = platforms.linux ++ platforms.freebsd;
+    license = with licenses; [ gpl2Plus mpl20 ] ;
+    maintainers = with maintainers; [ afranchuk rnhmjoj ];
   };
 }
diff --git a/pkgs/tools/networking/linkchecker/default.nix b/pkgs/tools/networking/linkchecker/default.nix
index 6f94e0c63c5..480321ad15f 100644
--- a/pkgs/tools/networking/linkchecker/default.nix
+++ b/pkgs/tools/networking/linkchecker/default.nix
@@ -1,27 +1,31 @@
-{ stdenv, lib, fetchFromGitHub, python2Packages, gettext }:
+{ stdenv, lib, fetchFromGitHub, python3Packages, gettext }:
 
-python2Packages.buildPythonApplication rec {
+with python3Packages;
+
+buildPythonApplication rec {
   pname = "linkchecker";
-  version = "9.4.0";
+  version = "10.0.0";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
-    rev = "v${version}";
-    sha256 = "1vbwl2vb8dyzki27z3sl5yf9dhdd2cpkg10vbgaz868dhpqlshgs";
+    rev = "v" + version;
+    sha256 = "sha256-gcaamRxGn124LZ8rU+WzjRookU3akDO0ZyzI7/S6kFA=";
   };
 
   nativeBuildInputs = [ gettext ];
 
-  propagatedBuildInputs = with python2Packages; [
-    ConfigArgParse
+  propagatedBuildInputs = [
+    configargparse
     argcomplete
+    beautifulsoup4
+    pyopenssl
     dnspython
     pyxdg
     requests
   ];
 
-  checkInputs = with python2Packages; [
+  checkInputs = [
     parameterized
     pytest
   ];
@@ -29,21 +33,16 @@ python2Packages.buildPythonApplication rec {
   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
   '';
 
+  # test_timeit2 is flakey, and depends sleep being precise to the milisecond
   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
+      rm tests/test_network.py tests/checker/test_http*.py tests/checker/test_content_allows_robots.py tests/checker/test_noproxy.py
     ''}
-    make test PYTESTOPTS="--tb=short" TESTS="tests/test_*.py tests/logger/test_*.py"
-
-    runHook postCheck
+      pytest --ignore=tests/checker/{test_telnet,telnetserver}.py \
+        -k 'not TestLoginUrl and not test_timeit2'
   '';
 
   meta = {
diff --git a/pkgs/tools/networking/lldpd/default.nix b/pkgs/tools/networking/lldpd/default.nix
index 8462d907a1f..a4e5d565756 100644
--- a/pkgs/tools/networking/lldpd/default.nix
+++ b/pkgs/tools/networking/lldpd/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, lib, fetchurl, pkgconfig, removeReferencesTo
+{ stdenv, lib, fetchurl, pkg-config, removeReferencesTo
 , libevent, readline, net-snmp, openssl
 }:
 
 stdenv.mkDerivation rec {
   pname = "lldpd";
-  version = "1.0.5";
+  version = "1.0.11";
 
   src = fetchurl {
     url = "https://media.luffy.cx/files/lldpd/${pname}-${version}.tar.gz";
-    sha256 = "16fbqrs3l976gdslx647nds8x7sz4h5h3h4l4yxzrayvyh9b5lrd";
+    sha256 = "sha256-tR0VcA+678t/uFw1BrSdMxc6DxXXAPkz7wRAZ7QtRuQ=";
   };
 
   configureFlags = [
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     "--with-systemdsystemunitdir=\${out}/lib/systemd/system"
   ];
 
-  nativeBuildInputs = [ pkgconfig removeReferencesTo ];
+  nativeBuildInputs = [ pkg-config removeReferencesTo ];
   buildInputs = [ libevent readline net-snmp openssl ];
 
   enableParallelBuilding = true;
diff --git a/pkgs/tools/networking/logmein-hamachi/default.nix b/pkgs/tools/networking/logmein-hamachi/default.nix
index 4abe083a0b9..4512e1dc625 100644
--- a/pkgs/tools/networking/logmein-hamachi/default.nix
+++ b/pkgs/tools/networking/logmein-hamachi/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
-with stdenv.lib;
+with lib;
 
 let
   arch =
@@ -12,7 +12,7 @@ let
     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 ];
+  libraries = lib.makeLibraryPath [ stdenv.cc.cc ];
 
 in stdenv.mkDerivation rec {
   pname = "logmein-hamachi";
@@ -35,7 +35,7 @@ in stdenv.mkDerivation rec {
   dontStrip = true;
   dontPatchELF = true;
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/networking/lsh/default.nix b/pkgs/tools/networking/lsh/default.nix
index 56ed33ea36a..b03098d540a 100644
--- a/pkgs/tools/networking/lsh/default.nix
+++ b/pkgs/tools/networking/lsh/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, gperf, guile, gmp, zlib, liboop, readline, gnum4, pam
+{ lib, stdenv, fetchurl, gperf, guile, gmp, zlib, liboop, readline, gnum4, pam
 , nettools, lsof, procps }:
 
 stdenv.mkDerivation rec {
@@ -43,7 +43,7 @@ stdenv.mkDerivation rec {
     '';
 
     homepage = "http://www.lysator.liu.se/~nisse/lsh/";
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
 
     maintainers = [ ];
     platforms = [ "x86_64-linux" ];
diff --git a/pkgs/tools/networking/lxi-tools/default.nix b/pkgs/tools/networking/lxi-tools/default.nix
new file mode 100644
index 00000000000..92ef7f688a5
--- /dev/null
+++ b/pkgs/tools/networking/lxi-tools/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub
+, autoreconfHook, pkg-config
+, liblxi, readline, lua
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lxi-tools";
+  version = "1.21";
+
+  src = fetchFromGitHub {
+    owner = "lxi-tools";
+    repo = "lxi-tools";
+    rev = "v${version}";
+    sha256 = "0rkp6ywsw2zv7hpbr12kba79wkcwqin7xagxxhd968rbfkfdxlwc";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ liblxi readline lua ];
+
+  meta = with lib; {
+    description = "Tool for communicating with LXI compatible instruments";
+    longDescription = ''
+      lxi-tools is a collection of open source software tools
+      that enables control of LXI compatible instruments such
+      as modern oscilloscopes, power supplies,
+      spectrum analyzers etc.
+    '';
+    homepage = "https://lxi-tools.github.io/";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.vq ];
+  };
+}
diff --git a/pkgs/tools/networking/lychee/default.nix b/pkgs/tools/networking/lychee/default.nix
new file mode 100644
index 00000000000..72f5b6f57fd
--- /dev/null
+++ b/pkgs/tools/networking/lychee/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lychee";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "lycheeverse";
+    repo = pname;
+    rev = version;
+    sha256 = "0kpwpbv0dqb0p4bxjlcjas6x1n91rdsvy2psrc1nyr1sh6gb1q5j";
+  };
+
+  cargoSha256 = "1b915zkg41n3azk4hhg6fgc83n7iq8p7drvdyil2m2a4qdjvp9r3";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ];
+
+  # Disabled because they currently fail
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A fast, async, resource-friendly link checker written in Rust.";
+    homepage = "https://github.com/lycheeverse/lychee";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ tuxinaut ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/networking/maildrop/default.nix b/pkgs/tools/networking/maildrop/default.nix
index d0a74fe4b5b..b258c638df5 100644
--- a/pkgs/tools/networking/maildrop/default.nix
+++ b/pkgs/tools/networking/maildrop/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, pkgconfig, pcre, perl }:
+{ fetchurl, lib, stdenv, pkg-config, pcre, perl }:
 
 stdenv.mkDerivation {
   name = "maildrop-2.6.0";
@@ -8,14 +8,14 @@ stdenv.mkDerivation {
     sha256 = "1a94p2b41iy334cwfwmzi19557dn5j61abh0cp2rfc9dkc8ibhdg";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   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; {
+  meta = with 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;
diff --git a/pkgs/tools/networking/mailsend/default.nix b/pkgs/tools/networking/mailsend/default.nix
index 6b9a0caacb9..9856634116e 100644
--- a/pkgs/tools/networking/mailsend/default.nix
+++ b/pkgs/tools/networking/mailsend/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, openssl}:
+{lib, stdenv, fetchurl, openssl}:
 let
   s = # Generated upstream information
   rec {
@@ -31,10 +31,10 @@ stdenv.mkDerivation {
   ];
   meta = {
     inherit (s) version;
-    description = ''CLI email sending tool'';
-    license = stdenv.lib.licenses.bsd3 ;
-    maintainers = [stdenv.lib.maintainers.raskin];
-    platforms = stdenv.lib.platforms.linux;
+    description = "CLI email sending tool";
+    license = lib.licenses.bsd3 ;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
     homepage = "https://github.com/muquit/mailsend";
     downloadPage = "https://github.com/muquit/mailsend/releases";
   };
diff --git a/pkgs/tools/networking/mailutils/default.nix b/pkgs/tools/networking/mailutils/default.nix
index 9cf5f91cd6d..74d4b61064b 100644
--- a/pkgs/tools/networking/mailutils/default.nix
+++ b/pkgs/tools/networking/mailutils/default.nix
@@ -1,15 +1,14 @@
-{ stdenv, fetchurl, fetchpatch, autoreconfHook, dejagnu, gettext, pkgconfig
+{ lib, stdenv, fetchurl, fetchpatch, autoreconfHook, dejagnu, gettext, pkg-config
 , 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.9";
+  pname = "mailutils";
+  version = "3.12";
 
   src = fetchurl {
-    url = "mirror://gnu/${project}/${name}.tar.xz";
-    sha256 = "1g1xf2lal04nsnf1iym9n9n0wxjpqbcr9nysxpm98v4pniinqwsz";
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "0n51ng1f8yf5zfsnh8s0pj9bnw6icb2r0y78gl2kzijaghhzlhvd";
   };
 
   postPatch = ''
@@ -18,23 +17,26 @@ stdenv.mkDerivation rec {
       */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
+    autoreconfHook gettext pkg-config
   ];
 
   buildInputs = [
-    gdbm pam readline ncurses gnutls guile texinfo gnum4 sasl fribidi nettools
+    gdbm pam readline ncurses gnutls guile texinfo gnum4 sasl fribidi
     gss libmysqlclient python3
-  ];
+  ] ++ lib.optionals stdenv.isLinux [ nettools ];
 
   patches = [
     ./fix-build-mb-len-max.patch
     ./path-to-cat.patch
+    # Fix cross-compilation
+    # https://lists.gnu.org/archive/html/bug-mailutils/2020-11/msg00038.html
+    (fetchpatch {
+      url = "https://lists.gnu.org/archive/html/bug-mailutils/2020-11/txtiNjqcNpqOk.txt";
+      sha256 = "0ghzqb8qx2q8cffbvqzw19mivv7r5f16whplzhm7hdj0j2i6xf6s";
+    })
   ];
 
   enableParallelBuilding = false;
@@ -56,8 +58,6 @@ stdenv.mkDerivation rec {
     (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
@@ -82,7 +82,7 @@ stdenv.mkDerivation rec {
     unset LD_LIBRARY_PATH
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Rich and powerful protocol-independent mail framework";
 
     longDescription = ''
diff --git a/pkgs/tools/networking/maphosts/default.nix b/pkgs/tools/networking/maphosts/default.nix
index 8e3d0cf9160..6632485b709 100644
--- a/pkgs/tools/networking/maphosts/default.nix
+++ b/pkgs/tools/networking/maphosts/default.nix
@@ -7,9 +7,10 @@ let
     gemdir = ./.;
   };
 in stdenv.mkDerivation {
-  name = "maphosts-${env.gems.maphosts.version}";
+  pname = "maphosts";
+  version = env.gems.maphosts.version;
 
-  phases = ["installPhase"];
+  dontUnpack = true;
 
   installPhase = ''
     mkdir -p "$out/bin"
diff --git a/pkgs/tools/networking/maphosts/gemset.nix b/pkgs/tools/networking/maphosts/gemset.nix
index 3469d76ea65..b50653bc96d 100644
--- a/pkgs/tools/networking/maphosts/gemset.nix
+++ b/pkgs/tools/networking/maphosts/gemset.nix
@@ -31,4 +31,4 @@
     };
     version = "1.1.1";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/networking/maxscale/default.nix b/pkgs/tools/networking/maxscale/default.nix
index 48590a9e305..bef421a7ab4 100644
--- a/pkgs/tools/networking/maxscale/default.nix
+++ b/pkgs/tools/networking/maxscale/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig, glibc
-, bison, curl, flex, gperftools, jansson, jemalloc, kerberos, lua, libmysqlclient
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, glibc
+, bison, curl, flex, gperftools, jansson, jemalloc, libkrb5, lua, libmysqlclient
 , ncurses, openssl, pcre, pcre2, perl, rabbitmq-c, sqlite, tcl
 , libaio, libedit, libtool, libui, libuuid, zlib
 }:
@@ -15,10 +15,10 @@ stdenv.mkDerivation rec {
     sha256 = "161kc6aqqj3z509q4qwvsd86h06hlyzdask4gawn2ij0h3ca58q6";
   };
 
-  nativeBuildInputs = [ cmake pkgconfig ];
+  nativeBuildInputs = [ cmake pkg-config ];
 
   buildInputs = [
-    bison curl flex gperftools jansson jemalloc kerberos lua libmysqlclient
+    bison curl flex gperftools jansson jemalloc libkrb5 lua libmysqlclient
     ncurses openssl pcre pcre2 perl rabbitmq-c sqlite tcl
     libaio libedit libtool libui libuuid zlib
   ];
@@ -77,8 +77,8 @@ stdenv.mkDerivation rec {
     rm -rf $out/{etc,var}
   '';
 
-  meta = with stdenv.lib; {
-     description = ''MaxScale database proxy extends MariaDB Server's high availability'';
+  meta = with lib; {
+     description = "MaxScale database proxy extends MariaDB Server's high availability";
      homepage = "https://mariadb.com/products/technology/maxscale";
      license = licenses.bsl11;
      platforms = platforms.linux;
diff --git a/pkgs/tools/networking/mcrcon/default.nix b/pkgs/tools/networking/mcrcon/default.nix
index 4f943f2cec6..ed2596bc88b 100644
--- a/pkgs/tools/networking/mcrcon/default.nix
+++ b/pkgs/tools/networking/mcrcon/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "mcrcon";
@@ -21,13 +21,13 @@ stdenv.mkDerivation rec {
 
   meta = {
     homepage = "https://bukkit.org/threads/admin-rcon-mcrcon-remote-connection-client-for-minecraft-servers.70910/";
-    description = "Minecraft console client with Bukkit coloring support.";
+    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 ];
+    maintainers = with lib.maintainers; [ dermetfan ];
+    license = with lib.licenses; [ zlib libpng ];
   };
 }
diff --git a/pkgs/tools/networking/mdk4/default.nix b/pkgs/tools/networking/mdk4/default.nix
new file mode 100644
index 00000000000..903504633ac
--- /dev/null
+++ b/pkgs/tools/networking/mdk4/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, libnl, libpcap, pkg-config }:
+
+stdenv.mkDerivation {
+  pname = "mdk4";
+  version = "unstable-2021-04-27";
+
+  src = fetchFromGitHub {
+    owner = "aircrack-ng";
+    repo = "mdk4";
+    rev = "e94422ce8e4b8dcd132d658345814df7e63bfa41";
+    sha256 = "sha256-pZS7HQBKlSZJGqoZlSyBUzXC3osswcB56cBzgm+Sbwg=";
+  };
+
+  preBuild = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man
+
+    substituteInPlace src/Makefile --replace '/usr/local/src/mdk4' '$out'
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libnl libpcap ];
+
+  makeFlags = [ "PREFIX=$(out)" "SBINDIR=$(PREFIX)/bin" ];
+
+  meta = with lib; {
+    description = "A tool that injects data into wireless networks";
+    homepage = "https://github.com/aircrack-ng/mdk4";
+    maintainers = with maintainers; [ fortuneteller2k ];
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/pkgs/tools/networking/megatools/default.nix b/pkgs/tools/networking/megatools/default.nix
index 43bbc62be95..ac37e93c736 100644
--- a/pkgs/tools/networking/megatools/default.nix
+++ b/pkgs/tools/networking/megatools/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchgit, autoreconfHook, pkg-config, glib, fuse, curl, glib-networking
-, asciidoc, libxml2, docbook_xsl, docbook_xml_dtd_45, libxslt, wrapGAppsHook }:
+{ lib, stdenv, fetchgit, autoreconfHook, pkg-config, glib, fuse, curl, glib-networking
+, asciidoc, libxml2, docbook_xsl, docbook_xml_dtd_45, libxslt, wrapGAppsNoGuiHook }:
 
 stdenv.mkDerivation rec {
   pname = "megatools";
@@ -12,15 +12,15 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [
-    autoreconfHook pkg-config wrapGAppsHook asciidoc libxml2
+    autoreconfHook pkg-config wrapGAppsNoGuiHook asciidoc libxml2
     docbook_xsl docbook_xml_dtd_45 libxslt
   ];
   buildInputs = [ glib glib-networking curl ]
-  ++ stdenv.lib.optionals stdenv.isLinux [ fuse ];
+  ++ lib.optionals stdenv.isLinux [ fuse ];
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Command line client for Mega.co.nz";
     homepage = "https://megatools.megous.com/";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/networking/memtier-benchmark/default.nix b/pkgs/tools/networking/memtier-benchmark/default.nix
index a45c3a2e33a..0fe128ad13c 100644
--- a/pkgs/tools/networking/memtier-benchmark/default.nix
+++ b/pkgs/tools/networking/memtier-benchmark/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub, autoreconfHook
-, pkgconfig, libevent, pcre, zlib, openssl
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
+, pkg-config, libevent, pcre, zlib, openssl
 }:
 
 stdenv.mkDerivation rec {
@@ -18,14 +18,14 @@ stdenv.mkDerivation rec {
       --replace '1.2.8' '${version}'
   '';
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   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 ];
+    license     = lib.licenses.gpl2;
+    platforms   = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ thoughtpolice ];
   };
 }
diff --git a/pkgs/tools/networking/minidlna/default.nix b/pkgs/tools/networking/minidlna/default.nix
index 6a14b5f1c82..c14b8c68479 100644
--- a/pkgs/tools/networking/minidlna/default.nix
+++ b/pkgs/tools/networking/minidlna/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchurl, ffmpeg_3, flac, libvorbis, libogg, libid3tag, libexif, libjpeg, sqlite, gettext }:
+{ lib, stdenv, fetchurl, ffmpeg, flac, libvorbis, libogg, libid3tag, libexif, libjpeg, sqlite, gettext }:
 
-let version = "1.2.1"; in
+let version = "1.3.0"; in
 
 stdenv.mkDerivation {
   pname = "minidlna";
@@ -8,14 +8,14 @@ stdenv.mkDerivation {
 
   src = fetchurl {
     url = "mirror://sourceforge/project/minidlna/minidlna/${version}/minidlna-${version}.tar.gz";
-    sha256 = "1v1ffhmaqxpvf2vv4yyvjsks4skr9y088853awsh7ixh7ai8nf37";
+    sha256 = "0qrw5ny82p5ybccw4pp9jma8nwl28z927v0j2561m0289imv1na7";
   };
 
   preConfigure = ''
     export makeFlags="INSTALLPREFIX=$out"
   '';
 
-  buildInputs = [ ffmpeg_3 flac libvorbis libogg libid3tag libexif libjpeg sqlite gettext ];
+  buildInputs = [ ffmpeg flac libvorbis libogg libid3tag libexif libjpeg sqlite gettext ];
 
   postInstall = ''
     mkdir -p $out/share/man/man{5,8}
@@ -23,7 +23,7 @@ stdenv.mkDerivation {
     cp minidlnad.8 $out/share/man/man8
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Media server software";
     longDescription = ''
       MiniDLNA (aka ReadyDLNA) is server software with the aim of being fully
diff --git a/pkgs/tools/networking/minio-client/default.nix b/pkgs/tools/networking/minio-client/default.nix
index 505ecc4c222..06ec1b5a83f 100644
--- a/pkgs/tools/networking/minio-client/default.nix
+++ b/pkgs/tools/networking/minio-client/default.nix
@@ -1,19 +1,17 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "minio-client";
-  version = "2020-08-08T02-33-58Z";
+  version = "2021-06-13T17-48-22Z";
 
   src = fetchFromGitHub {
     owner = "minio";
     repo = "mc";
     rev = "RELEASE.${version}";
-    sha256 = "15bkl3q0jidrwy04l0cdmha43r9wlxmlqkhmwz98b57rjrq6grql";
+    sha256 = "sha256-u0WO7KSalDqlRwbN3b74FOb632fIGPZ2F0T8qLrvt+U=";
   };
 
-  vendorSha256 = "1fsx8zl2qkyf1gx3s6giccd86xawx9d1h4jdnyn1m36clsq9jkpc";
-
-  doCheck = false;
+  vendorSha256 = "sha256-BadW8AKHcrkCS3sXR7bqdgNhRYkfXIQOteMxIbiLvwg=";
 
   subPackages = [ "." ];
 
@@ -23,10 +21,15 @@ buildGoModule rec {
     sed -i "s/CommitID.*/CommitID = \"${src.rev}\"/g" cmd/build-constants.go
   '';
 
-  meta = with stdenv.lib; {
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/mc --version | grep ${version} > /dev/null
+  '';
+
+  meta = with 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 ];
+    maintainers = with maintainers; [ bachp eelco superherointj ];
     platforms = platforms.unix;
     license = licenses.asl20;
   };
diff --git a/pkgs/tools/networking/minissdpd/default.nix b/pkgs/tools/networking/minissdpd/default.nix
index b5702b9bfad..869abe92e5c 100644
--- a/pkgs/tools/networking/minissdpd/default.nix
+++ b/pkgs/tools/networking/minissdpd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libnfnetlink }:
+{ lib, stdenv, fetchurl, libnfnetlink }:
 
 stdenv.mkDerivation rec {
   pname = "minissdpd";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Small daemon to speed up UPnP device discoveries";
     longDescription = ''
       MiniSSDPd receives NOTIFY packets and stores (caches) that information
diff --git a/pkgs/tools/networking/miniupnpc/default.nix b/pkgs/tools/networking/miniupnpc/default.nix
index 41927278ac8..9fe476906bc 100644
--- a/pkgs/tools/networking/miniupnpc/default.nix
+++ b/pkgs/tools/networking/miniupnpc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, which, cctools }:
+{ lib, stdenv, fetchurl, which, cctools }:
 
 let
   generic = { version, sha256 }:
@@ -11,15 +11,15 @@ let
         inherit sha256;
       };
 
-      nativeBuildInputs = stdenv.lib.optionals stdenv.isDarwin [ which cctools ];
+      nativeBuildInputs = lib.optionals stdenv.isDarwin [ which cctools ];
 
-      patches = stdenv.lib.optional stdenv.isFreeBSD ./freebsd.patch;
+      patches = lib.optional stdenv.isFreeBSD ./freebsd.patch;
 
       doCheck = !stdenv.isFreeBSD;
 
       makeFlags = [ "PREFIX=$(out)" "INSTALLPREFIX=$(out)" ];
 
-      meta = with stdenv.lib; {
+      meta = with lib; {
         homepage = "http://miniupnp.free.fr/";
         description = "A client that implements the UPnP Internet Gateway Device (IGD) specification";
         platforms = with platforms; linux ++ freebsd ++ darwin;
diff --git a/pkgs/tools/networking/miniupnpd/default.nix b/pkgs/tools/networking/miniupnpd/default.nix
index 23f02dde1f4..aea0faddf5d 100644
--- a/pkgs/tools/networking/miniupnpd/default.nix
+++ b/pkgs/tools/networking/miniupnpd/default.nix
@@ -1,9 +1,10 @@
-{ stdenv, lib, fetchurl, iptables, libuuid, pkgconfig
-, which, iproute, gnused, coreutils, gawk, makeWrapper
+{ stdenv, lib, fetchurl, iptables, libuuid, pkg-config
+, which, iproute2, gnused, coreutils, gawk, makeWrapper
+, nixosTests
 }:
 
 let
-  scriptBinEnv = lib.makeBinPath [ which iproute iptables gnused coreutils gawk ];
+  scriptBinEnv = lib.makeBinPath [ which iproute2 iptables gnused coreutils gawk ];
 in
 stdenv.mkDerivation rec {
   name = "miniupnpd-2.1.20190502";
@@ -15,7 +16,7 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ iptables libuuid ];
-  nativeBuildInputs= [ pkgconfig makeWrapper ];
+  nativeBuildInputs= [ pkg-config makeWrapper ];
 
   makefile = "Makefile.linux";
 
@@ -30,7 +31,11 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
+  passthru.tests = {
+    bittorrent-integration = nixosTests.bittorrent;
+  };
+
+  meta = with lib; {
     homepage = "http://miniupnp.free.fr/";
     description = "A daemon that implements the UPnP Internet Gateway Device (IGD) specification";
     platforms = platforms.linux;
diff --git a/pkgs/tools/networking/miredo/default.nix b/pkgs/tools/networking/miredo/default.nix
index 1982cab6b39..94565db2076 100644
--- a/pkgs/tools/networking/miredo/default.nix
+++ b/pkgs/tools/networking/miredo/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, nettools, iproute, judy }:
+{ lib, stdenv, fetchurl, nettools, iproute2, judy }:
 
 stdenv.mkDerivation rec {
   version = "1.2.6";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
     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'
+    substituteInPlace misc/client-hook.iproute --replace '/sbin/ip' '${iproute2}/bin/ip'
   '';
 
   configureFlags = [ "--with-Judy" ];
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
     rm -rf $out/lib/systemd $out/var $out/etc/miredo/miredo.conf
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Teredo IPv6 Tunneling Daemon";
     homepage = "https://www.remlab.net/miredo/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/mitmproxy/default.nix b/pkgs/tools/networking/mitmproxy/default.nix
deleted file mode 100644
index b9d873fad6a..00000000000
--- a/pkgs/tools/networking/mitmproxy/default.nix
+++ /dev/null
@@ -1,55 +0,0 @@
-{ stdenv, fetchFromGitHub, python3Packages, glibcLocales, fetchpatch }:
-
-with python3Packages;
-
-buildPythonPackage rec {
-  pname = "mitmproxy";
-  version = "5.1.1";
-
-  src = fetchFromGitHub {
-    owner  = pname;
-    repo   = pname;
-    rev    = "v${version}";
-    sha256 = "1lirlckpvd3c6s6q3p32w4k4yfna5mlgr1x9g39lhzzq0sdiz3lk";
-  };
-
-  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 brotli certifi cffi
-    click cryptography flask h11
-    h2 hpack hyperframe itsdangerous
-    jinja2 kaitaistruct ldap3 markupsafe
-    passlib protobuf publicsuffix2 pyasn1
-    pycparser pyopenssl pyparsing pyperclip
-    ruamel_yaml setuptools six sortedcontainers
-    tornado urwid werkzeug wsproto zstandard
-  ];
-
-  checkInputs = [
-    beautifulsoup4 flask pytest
-    requests glibcLocales
-    asynctest parver pytest-asyncio
-    hypothesis
-  ];
-
-  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/pkgs/tools/networking/mmsd/default.nix b/pkgs/tools/networking/mmsd/default.nix
index fee347dd201..f102995a3cc 100644
--- a/pkgs/tools/networking/mmsd/default.nix
+++ b/pkgs/tools/networking/mmsd/default.nix
@@ -1,7 +1,7 @@
-{ stdenv
+{ lib, stdenv
 , fetchgit
 , autoreconfHook
-, pkgconfig
+, pkg-config
 , glib
 , dbus
 }:
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [
     autoreconfHook
-    pkgconfig
+    pkg-config
   ];
 
   buildInputs = [
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Multimedia Messaging Service Daemon";
     homepage = "https://01.org/ofono";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/modem-manager/default.nix b/pkgs/tools/networking/modem-manager/default.nix
index c3981b902f2..2a99c127acb 100644
--- a/pkgs/tools/networking/modem-manager/default.nix
+++ b/pkgs/tools/networking/modem-manager/default.nix
@@ -1,20 +1,34 @@
-{ stdenv, fetchurl, glib, udev, libgudev, polkit, ppp, gettext, pkgconfig
-, libmbim, libqmi, systemd, vala, gobject-introspection, dbus }:
+{ lib, stdenv, fetchurl, fetchpatch
+, glib, udev, libgudev, polkit, ppp, gettext, pkg-config, python3
+, libmbim, libqmi, systemd, vala, gobject-introspection, dbus
+}:
 
 stdenv.mkDerivation rec {
   pname = "modem-manager";
-  version = "1.12.10";
+  version = "1.16.6";
 
-  package = "ModemManager";
   src = fetchurl {
-    url = "https://www.freedesktop.org/software/${package}/${package}-${version}.tar.xz";
-    sha256 = "1apq9camys2gaw6y6ic1ld20cncfwpmxnzvh4j5zkbbjpf5hbcxj";
+    url = "https://www.freedesktop.org/software/ModemManager/ModemManager-${version}.tar.xz";
+    sha256 = "05wn94x71qr36avxjzvyf56nj5illynnf9nn15b17lv61wkbd41a";
   };
 
-  nativeBuildInputs = [ vala gobject-introspection gettext pkgconfig ];
+  patches = [
+    # Fix a broken test.
+    # https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/merge_requests/556
+    (fetchpatch {
+      url = "https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/commit/a324667386f35df0c3b3bbf615fa0560d215485d.patch";
+      sha256 = "1xj9gfl6spbp4xdp6gn76k8zvzam5m6lgmbiwdn6ixffzhlfwi5l";
+    })
+  ];
+
+  nativeBuildInputs = [ vala gobject-introspection gettext pkg-config ];
 
   buildInputs = [ glib udev libgudev polkit ppp libmbim libqmi systemd ];
 
+  installCheckInputs = [
+    python3 python3.pkgs.dbus-python python3.pkgs.pygobject3
+  ];
+
   configureFlags = [
     "--with-polkit"
     "--with-udev-base-dir=${placeholder "out"}/lib/udev"
@@ -26,19 +40,29 @@ stdenv.mkDerivation rec {
     "--with-systemd-journal"
   ];
 
-  preCheck = ''
+  postPatch = ''
+    patchShebangs tools/test-modemmanager-service.py
+  '';
+
+  # In Nixpkgs g-ir-scanner is patched to produce absolute paths, and
+  # that interferes with ModemManager's tests, causing them to try to
+  # load libraries from the install path, which doesn't usually exist
+  # when `make check' is run.  So to work around that, we run it as an
+  # install check instead, when those paths will have been created.
+  doInstallCheck = true;
+  preInstallCheck = ''
     export G_TEST_DBUS_DAEMON="${dbus.daemon}/bin/dbus-daemon"
+    patchShebangs tools/tests/test-wrapper.sh
   '';
+  installCheckTarget = "check";
 
   enableParallelBuilding = true;
 
-  doCheck = true;
-
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "WWAN modem manager, part of NetworkManager";
     homepage = "https://www.freedesktop.org/wiki/Software/ModemManager/";
     license = licenses.gpl2Plus;
-    maintainers = [ ];
+    maintainers = teams.freedesktop.members;
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/moodle-dl/default.nix b/pkgs/tools/networking/moodle-dl/default.nix
new file mode 100644
index 00000000000..95140467f7a
--- /dev/null
+++ b/pkgs/tools/networking/moodle-dl/default.nix
@@ -0,0 +1,34 @@
+{ lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "moodle-dl";
+  version = "2.1.2.5";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "1gc4037dwyi48h4vi0bam23rr7pfyn6jrz334radz0r6rk94y8lz";
+  };
+
+  # nixpkgs (and the GitHub upstream for readchar) are missing 2.0.1
+  postPatch = ''
+    substituteInPlace setup.py --replace 'readchar>=2.0.1' 'readchar>=2.0.0'
+  '';
+
+  propagatedBuildInputs = with python3Packages; [
+    sentry-sdk
+    colorama
+    readchar
+    youtube-dl
+    certifi
+    html2text
+    requests
+    slixmpp
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/C0D3D3V/Moodle-Downloader-2";
+    maintainers = [ maintainers.kmein ];
+    description = "A Moodle downloader that downloads course content fast from Moodle";
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/pkgs/tools/networking/mosh/default.nix b/pkgs/tools/networking/mosh/default.nix
index 26c9035cd79..92c241967ae 100644
--- a/pkgs/tools/networking/mosh/default.nix
+++ b/pkgs/tools/networking/mosh/default.nix
@@ -1,17 +1,18 @@
-{ lib, stdenv, fetchurl, fetchpatch, zlib, protobuf, ncurses, pkgconfig
+{ lib, stdenv, fetchurl, fetchpatch, zlib, protobuf, ncurses, pkg-config
 , makeWrapper, perlPackages, openssl, autoreconfHook, openssh, bash-completion
-, libutempter ? null, withUtempter ? stdenv.isLinux }:
+, withUtempter ? stdenv.isLinux, libutempter }:
 
 stdenv.mkDerivation rec {
-  name = "mosh-1.3.2";
+  pname = "mosh";
+  version = "1.3.2";
 
   src = fetchurl {
-    url = "https://mosh.org/${name}.tar.gz";
+    url = "https://mosh.org/mosh-${version}.tar.gz";
     sha256 = "05hjhlp6lk8yjcy59zywpf0r6s0h0b9zxq0lw66dh9x8vxrhaq6s";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
-  buildInputs = [ protobuf ncurses zlib makeWrapper openssl bash-completion ]
+  nativeBuildInputs = [ autoreconfHook pkg-config makeWrapper ];
+  buildInputs = [ protobuf ncurses zlib openssl bash-completion ]
     ++ (with perlPackages; [ perl IOTty ])
     ++ lib.optional withUtempter libutempter;
 
@@ -19,6 +20,7 @@ stdenv.mkDerivation rec {
 
   patches = [
     ./ssh_path.patch
+    ./mosh-client_path.patch
     ./utempter_path.patch
     # Fix w/c++17, ::bind vs std::bind
     (fetchpatch {
@@ -31,6 +33,8 @@ stdenv.mkDerivation rec {
   postPatch = ''
     substituteInPlace scripts/mosh.pl \
         --subst-var-by ssh "${openssh}/bin/ssh"
+    substituteInPlace scripts/mosh.pl \
+        --subst-var-by mosh-client "$out/bin/mosh-client"
   '';
 
   configureFlags = [ "--enable-completion" ] ++ lib.optional withUtempter "--with-utempter";
@@ -39,9 +43,9 @@ stdenv.mkDerivation rec {
       wrapProgram $out/bin/mosh --prefix PERL5LIB : $PERL5LIB
   '';
 
-  CXXFLAGS = stdenv.lib.optionalString stdenv.cc.isClang "-std=c++11";
+  CXXFLAGS = lib.optionalString stdenv.cc.isClang "-std=c++11";
 
-  meta = {
+  meta = with lib; {
     homepage = "https://mosh.org/";
     description = "Mobile shell (ssh replacement)";
     longDescription = ''
@@ -52,8 +56,8 @@ stdenv.mkDerivation rec {
       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;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ viric ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/mosh/mosh-client_path.patch b/pkgs/tools/networking/mosh/mosh-client_path.patch
new file mode 100644
index 00000000000..327fb7af926
--- /dev/null
+++ b/pkgs/tools/networking/mosh/mosh-client_path.patch
@@ -0,0 +1,22 @@
+diff --git a/scripts/mosh.pl b/scripts/mosh.pl
+index 56e96d7..2a2177e 100755
+--- a/scripts/mosh.pl
++++ b/scripts/mosh.pl
+@@ -61,7 +61,7 @@ my $have_ipv6 = eval {
+ 
+ $|=1;
+ 
+-my $client = 'mosh-client';
++my $client = '@mosh-client@';
+ my $server = 'mosh-server';
+ 
+ my $predict = undef;
+@@ -91,7 +91,7 @@ my @cmdline = @ARGV;
+ my $usage =
+ qq{Usage: $0 [options] [--] [user@]host [command...]
+         --client=PATH        mosh client on local machine
+-                                (default: "mosh-client")
++                                (default: "@mosh-client@")
+         --server=COMMAND     mosh server on remote machine
+                                 (default: "mosh-server")
+ 
diff --git a/pkgs/tools/networking/mozwire/default.nix b/pkgs/tools/networking/mozwire/default.nix
index 6264672cfaa..afccd8376d8 100644
--- a/pkgs/tools/networking/mozwire/default.nix
+++ b/pkgs/tools/networking/mozwire/default.nix
@@ -1,21 +1,21 @@
-{ rustPlatform, stdenv, fetchFromGitHub, Security }:
+{ rustPlatform, lib, stdenv, fetchFromGitHub, Security }:
 
 rustPlatform.buildRustPackage rec {
   pname = "MozWire";
-  version = "0.5.1";
+  version = "0.7.0";
 
   src = fetchFromGitHub {
     owner = "NilsIrl";
     repo = pname;
     rev = "v${version}";
-    sha256 = "07icgswmfvrvlm3mkm78pbbk6m2hb73j7ffj7r77whzb11v027v1";
+    sha256 = "01bj3c34x9ywxygsz4rdyw5gc9cz8x6zzl5fd7db8qy8bx2lhlr9";
   };
 
-  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ Security ];
-  
-  cargoSha256 = "10lhz7bdlfqj7wgsqnsxdfskms33pvj176fhf4kwci7nb8vgai4b";
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
 
-  meta = with stdenv.lib; {
+  cargoSha256 = "0q27p2hyw6c1fh5x8kwsrw8a1hk6z90z0z3w86ga8ryz53xg4vdi";
+
+  meta = with lib; {
     description = "MozillaVPN configuration manager giving Linux, macOS users (among others), access to MozillaVPN";
     homepage = "https://github.com/NilsIrl/MozWire";
     license = licenses.gpl3;
diff --git a/pkgs/tools/networking/mpack/default.nix b/pkgs/tools/networking/mpack/default.nix
index 5a8af7de36a..3aca81596e0 100644
--- a/pkgs/tools/networking/mpack/default.nix
+++ b/pkgs/tools/networking/mpack/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "mpack-1.6";
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Utilities for encoding and decoding binary files in MIME";
     license = licenses.free;
     platforms = platforms.linux;
diff --git a/pkgs/tools/networking/mtr/default.nix b/pkgs/tools/networking/mtr/default.nix
index ae5695537af..1257c167e76 100644
--- a/pkgs/tools/networking/mtr/default.nix
+++ b/pkgs/tools/networking/mtr/default.nix
@@ -1,27 +1,17 @@
-{ stdenv, lib, fetchFromGitHub, fetchpatch, autoreconfHook, pkgconfig
+{ stdenv, lib, fetchFromGitHub, autoreconfHook, pkg-config
 , libcap, ncurses
-, withGtk ? false, gtk2 ? null }:
-
-assert withGtk -> gtk2 != null;
+, withGtk ? false, gtk3 }:
 
 stdenv.mkDerivation rec {
   pname = "mtr${lib.optionalString withGtk "-gui"}";
-  version = "0.93";
+  version = "0.94";
 
   src = fetchFromGitHub {
-    owner  = "traviscross";
-    repo   = "mtr";
-    rev    = "v${version}";
-    sha256 = "0n0zr9k61w7a9psnzgp7xnc7ll1ic2xzcvqsbbbyndg3v9rff6bw";
+    owner = "traviscross";
+    repo = "mtr";
+    rev = "v${version}";
+    sha256 = "0wnz87cr2lcl74bj8qxq9xgai40az3pk9k0z893scyc8svd61xz6";
   };
-  
-  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 = ''
@@ -34,21 +24,21 @@ stdenv.mkDerivation rec {
       --replace ' install-exec-hook' ""
   '';
 
-  configureFlags = stdenv.lib.optional (!withGtk) "--without-gtk";
+  configureFlags = lib.optional (!withGtk) "--without-gtk";
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
   buildInputs = [ ncurses ]
-    ++ stdenv.lib.optional withGtk gtk2
-    ++ stdenv.lib.optional stdenv.isLinux libcap;
+    ++ lib.optional withGtk gtk3
+    ++ lib.optional stdenv.isLinux libcap;
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A network diagnostics tool";
-    homepage    = "https://www.bitwizard.nl/mtr/";
-    license     = licenses.gpl2;
+    homepage = "https://www.bitwizard.nl/mtr/";
+    license = licenses.gpl2;
     maintainers = with maintainers; [ koral orivej raskin globin ];
-    platforms   = platforms.unix;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/mu/default.nix b/pkgs/tools/networking/mu/default.nix
index 82a22dd947d..4553063929f 100644
--- a/pkgs/tools/networking/mu/default.nix
+++ b/pkgs/tools/networking/mu/default.nix
@@ -1,21 +1,22 @@
-{ stdenv, fetchFromGitHub, sqlite, pkgconfig, autoreconfHook, pmccabe
-, xapian, glib, gmime3, texinfo , emacs, guile
+{ lib, stdenv, fetchFromGitHub, sqlite, pkg-config, autoreconfHook, pmccabe
+, xapian, glib, gmime3, texinfo, emacs, guile
 , gtk3, webkitgtk, libsoup, icu
+, makeWrapper
 , withMug ? false
 , batchSize ? null }:
 
 stdenv.mkDerivation rec {
   pname = "mu";
-  version = "1.4.13";
+  version = "1.4.15";
 
   src = fetchFromGitHub {
     owner  = "djcb";
     repo   = "mu";
     rev    = version;
-    sha256 = "03cp2ppj07xpb0c43d3cr8m9jps07mfm8clmlk03sjbxg1widsh0";
+    sha256 = "sha256-VIUA0W+AmEbvGWatv4maBGILvUTGhBgO3iQtjIc3vG8=";
   };
 
-  postPatch = stdenv.lib.optionalString (batchSize != null) ''
+  postPatch = lib.optionalString (batchSize != null) ''
     sed -i lib/mu-store.cc --regexp-extended \
       -e 's@(constexpr auto BatchSize).*@\1 = ${toString batchSize};@'
   '';
@@ -24,10 +25,10 @@ stdenv.mkDerivation rec {
     sqlite xapian glib gmime3 texinfo emacs libsoup icu
   ]
     # Workaround for https://github.com/djcb/mu/issues/1641
-    ++ stdenv.lib.optional (!stdenv.isDarwin) guile
-    ++ stdenv.lib.optionals withMug [ gtk3 webkitgtk ];
+    ++ lib.optional (!stdenv.isDarwin) guile
+    ++ lib.optionals withMug [ gtk3 webkitgtk ];
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook pmccabe ];
+  nativeBuildInputs = [ pkg-config autoreconfHook pmccabe makeWrapper ];
 
   enableParallelBuilding = true;
 
@@ -37,8 +38,12 @@ stdenv.mkDerivation rec {
       --replace "@abs_top_builddir@" "$out"
   '';
 
-  # Install mug
-  postInstall = stdenv.lib.optionalString withMug ''
+  # Make sure included scripts can find their dependencies & optionally install mug
+  postInstall = ''
+    wrapProgram "$out/bin/mu" \
+      --prefix LD_LIBRARY_PATH : "$out/lib" \
+      --prefix GUILE_LOAD_PATH : "$out/share/guile/site/2.2"
+  '' + lib.optionalString withMug ''
     for f in mug ; do
       install -m755 toys/$f/$f $out/bin/$f
     done
@@ -46,7 +51,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A collection of utilties for indexing and searching Maildirs";
     license = licenses.gpl3Plus;
     homepage = "https://www.djcbsoftware.nl/code/mu/";
diff --git a/pkgs/tools/networking/mubeng/default.nix b/pkgs/tools/networking/mubeng/default.nix
new file mode 100644
index 00000000000..11ebe338c90
--- /dev/null
+++ b/pkgs/tools/networking/mubeng/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "mubeng";
+  version = "0.4.5";
+
+  src = fetchFromGitHub {
+    owner = "kitabisa";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "03hm4wqlvsbi06g0ijrhvbk9i2ahmd1m8l80wbcijznhbdl5msl8";
+  };
+
+  vendorSha256 = "1qcxix6724ly0klsr8bw3nv6pxn0wixqiqcgqkcp6sia4dxbbg14";
+
+  meta = with lib; {
+    description = "Proxy checker and IP rotator";
+    homepage = "https://github.com/kitabisa/mubeng";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/networking/n2n/default.nix b/pkgs/tools/networking/n2n/default.nix
new file mode 100644
index 00000000000..aec4a1c5f53
--- /dev/null
+++ b/pkgs/tools/networking/n2n/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "n2n";
+  version = "2.8";
+
+  src = fetchFromGitHub {
+    owner = "ntop";
+    repo = "n2n";
+    rev = version;
+    hash = "sha256-2xJ8gYVZJZoKs6PZ/9GacgxQ+/3tmnRntT1AbPe1At4=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  postPatch = ''
+    patchShebangs autogen.sh
+  '';
+
+  preAutoreconf = ''
+    ./autogen.sh
+  '';
+
+  PREFIX = placeholder "out";
+
+  meta = with lib; {
+    description = "Peer-to-peer VPN";
+    homepage = "https://www.ntop.org/products/n2n/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ malvo ];
+  };
+}
diff --git a/pkgs/tools/networking/nat-traverse/default.nix b/pkgs/tools/networking/nat-traverse/default.nix
index e3bf3391f21..a1c1337a216 100644
--- a/pkgs/tools/networking/nat-traverse/default.nix
+++ b/pkgs/tools/networking/nat-traverse/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl }:
+{ lib, stdenv, fetchurl, perl }:
 
 stdenv.mkDerivation rec {
   pname = "nat-traverse";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
     gzip -c nat-traverse.1 > $out/share/man/man1/nat-traverse.1.gz
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "NAT gateway traversal utility";
     longDescription = ''
       nat-traverse establishes direct connections between nodes which are
diff --git a/pkgs/tools/networking/nbd/default.nix b/pkgs/tools/networking/nbd/default.nix
index d634c37b123..6478a15aa1a 100644
--- a/pkgs/tools/networking/nbd/default.nix
+++ b/pkgs/tools/networking/nbd/default.nix
@@ -1,17 +1,17 @@
-{ stdenv, fetchurl, pkgconfig, glib, which }:
+{ lib, stdenv, fetchurl, pkg-config, glib, which }:
 
 stdenv.mkDerivation rec {
-  name = "nbd-3.20";
+  name = "nbd-3.21";
 
   src = fetchurl {
     url = "mirror://sourceforge/nbd/${name}.tar.xz";
-    sha256 = "1kfnyx52nna2mnw264njk1dl2zc8m78sz031yp65mbmpi99v7qg0";
+    sha256 = "sha256-52iK852Rczu80tsIBixE/lA9AE5RUodAE5xEr/amvvk=";
   };
 
   buildInputs = [ glib ]
-    ++ stdenv.lib.optional (stdenv ? glibc) stdenv.glibc.linuxHeaders;
+    ++ lib.optional (stdenv ? glibc) stdenv.glibc.linuxHeaders;
 
-  nativeBuildInputs = [ pkgconfig which ];
+  nativeBuildInputs = [ pkg-config which ];
 
   postInstall = ''
     mkdir -p "$out/share/doc/${name}"
@@ -23,13 +23,13 @@ stdenv.mkDerivation rec {
   # 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";
+  NIX_LDFLAGS = 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;
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.peti ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/ncftp/default.nix b/pkgs/tools/networking/ncftp/default.nix
index 98fa6cc29f1..a43d5f4a88c 100644
--- a/pkgs/tools/networking/ncftp/default.nix
+++ b/pkgs/tools/networking/ncftp/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, ncurses, coreutils }:
+{ lib, stdenv, fetchurl, ncurses, coreutils }:
 
 stdenv.mkDerivation rec {
   pname = "ncftp";
@@ -14,6 +14,8 @@ stdenv.mkDerivation rec {
   enableParallelBuilding = true;
 
   preConfigure = ''
+    find -name Makefile.in | xargs sed -i '/^TMPDIR=/d'
+
     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'
@@ -30,7 +32,7 @@ stdenv.mkDerivation rec {
     "--mandir=$(out)/share/man/"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Command line FTP (File Transfer Protocol) client";
     homepage = "https://www.ncftp.com/ncftp/";
     maintainers = with maintainers; [ bjornfor ];
diff --git a/pkgs/tools/networking/ndisc6/default.nix b/pkgs/tools/networking/ndisc6/default.nix
index 03304df5f79..6612315c6f2 100644
--- a/pkgs/tools/networking/ndisc6/default.nix
+++ b/pkgs/tools/networking/ndisc6/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl }:
+{ lib, stdenv, fetchurl, perl }:
 
 stdenv.mkDerivation rec {
   name = "ndisc6-1.0.4";
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
     "localstatedir=$(TMPDIR)"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.remlab.net/ndisc6/";
     description = "A small collection of useful tools for IPv6 networking";
     maintainers = with maintainers; [ eelco ];
diff --git a/pkgs/tools/networking/ndjbdns/default.nix b/pkgs/tools/networking/ndjbdns/default.nix
index 3edfe9b7e5d..651cbab86d9 100644
--- a/pkgs/tools/networking/ndjbdns/default.nix
+++ b/pkgs/tools/networking/ndjbdns/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, systemd, pkgconfig }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, systemd, pkg-config }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation {
   version = "1.06";
@@ -13,7 +13,7 @@ stdenv.mkDerivation {
     sha256 = "0gjyvn8r66kp49gasd6sqfvg2pj0c6v67hnq7cqwl04kj69rfy86";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ ]
     ++ optional stdenv.isLinux systemd;
 
diff --git a/pkgs/tools/networking/nebula/default.nix b/pkgs/tools/networking/nebula/default.nix
index 178979b2caf..06615ae25fa 100644
--- a/pkgs/tools/networking/nebula/default.nix
+++ b/pkgs/tools/networking/nebula/default.nix
@@ -2,22 +2,22 @@
 
 buildGoModule rec {
   pname = "nebula";
-  version = "1.2.0";
+  version = "1.4.0";
 
   src = fetchFromGitHub {
     owner = "slackhq";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0xrki9w83b4b3l5adq1rxz374f124wf388sdyvy7ngc3b04k7qlb";
+    sha256 = "lu2/rSB9cFD7VUiK+niuqCX9CI2x+k4Pi+U5yksETSU=";
   };
 
-  vendorSha256 = "094mn1r69c40w7k3lsggjh0dpws9l0j7mgiyjy1lpblkvkyk2azm";
+  vendorSha256 = "p1inJ9+NAb2d81cn+y+ofhxFz9ObUiLgj+9cACa6Jqg=";
 
   doCheck = false;
 
   subPackages = [ "cmd/nebula" "cmd/nebula-cert" ];
 
-  buildFlagsArray = [ "-ldflags='-X main.Build=${version}'" ];
+  buildFlagsArray = [ "-ldflags=" "-X main.Build=${version}" ];
 
   meta = with lib; {
     description = "A scalable overlay networking tool with a focus on performance, simplicity and security";
@@ -38,7 +38,7 @@ buildGoModule rec {
     '';
     homepage = "https://github.com/slackhq/nebula";
     license = licenses.mit;
-    maintainers = with maintainers; [ filalex77 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
   };
 
 }
diff --git a/pkgs/tools/networking/netboot/default.nix b/pkgs/tools/networking/netboot/default.nix
index 7a1eac59eea..e7d984a798b 100644
--- a/pkgs/tools/networking/netboot/default.nix
+++ b/pkgs/tools/networking/netboot/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, yacc, lzo, db4 }:
+{ lib, stdenv, fetchurl, bison, lzo, db4 }:
 
 stdenv.mkDerivation rec {
   name = "netboot-0.10.2";
@@ -7,14 +7,14 @@ stdenv.mkDerivation rec {
     sha256 = "09w09bvwgb0xzn8hjz5rhi3aibysdadbg693ahn8rylnqfq4hwg0";
   };
 
-  buildInputs = [ yacc lzo db4 ];
+  buildInputs = [ bison lzo db4 ];
 
   hardeningDisable = [ "format" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Mini PXE server";
     maintainers = [ maintainers.raskin ];
     platforms = ["x86_64-linux"];
-    license = stdenv.lib.licenses.free;
+    license = lib.licenses.free;
   };
 }
diff --git a/pkgs/tools/networking/netcat/default.nix b/pkgs/tools/networking/netcat/default.nix
index 5c275ee6ab4..7b325b2f484 100644
--- a/pkgs/tools/networking/netcat/default.nix
+++ b/pkgs/tools/networking/netcat/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation {
   name = "netcat-gnu-0.7.1";
@@ -8,7 +8,7 @@ stdenv.mkDerivation {
     sha256 = "1frjcdkhkpzk0f84hx6hmw5l0ynpmji8vcbaxg8h5k2svyxz0nmm";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Utility which reads and writes data across network connections";
     homepage = "http://netcat.sourceforge.net/";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/networking/nethogs/default.nix b/pkgs/tools/networking/nethogs/default.nix
index 7bc6d0e2be7..c6a8f3b7f4e 100644
--- a/pkgs/tools/networking/nethogs/default.nix
+++ b/pkgs/tools/networking/nethogs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, ncurses, libpcap }:
+{ lib, stdenv, fetchFromGitHub, ncurses, libpcap }:
 
 stdenv.mkDerivation rec {
   pname = "nethogs";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
 
   installFlags = [ "PREFIX=$(out)" "sbin=$(out)/bin" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/networking/netifd/default.nix b/pkgs/tools/networking/netifd/default.nix
index 36d1ec7a423..dc343e563a7 100644
--- a/pkgs/tools/networking/netifd/default.nix
+++ b/pkgs/tools/networking/netifd/default.nix
@@ -1,27 +1,22 @@
-{ runCommand, stdenv, cmake, fetchgit, libnl, libubox, uci, ubus, json_c }:
+{ lib, stdenv, cmake, fetchgit, libnl, libubox, uci, ubus, json_c, pkg-config }:
 
 stdenv.mkDerivation {
   pname = "netifd";
-  version = "unstable-2020-07-11";
+  version = "unstable-2021-04-03";
 
   src = fetchgit {
     url = "https://git.openwrt.org/project/netifd.git";
-    rev = "3d9bd73e8c2d8a1f78effbe92dd2495bbd2552c4";
-    sha256 = "085sx1gsigbi1jr19l387rc5p6ja1np6q2gb84khjd4pyiqwk840";
+    rev = "327da9895327bc56b23413ee91a6e6b6e0e4329d";
+    sha256 = "0jvk2hx8kbkc6d72gh9rwap8ds6qgnmny6306vvzxy68v03xikwv";
   };
 
   buildInputs = [ libnl libubox uci ubus json_c ];
-  nativeBuildInputs = [ cmake ];
+  nativeBuildInputs = [ cmake pkg-config ];
 
-  preBuild = ''
-    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE \
-      -I$(echo "${stdenv.lib.getDev libnl}"/include/libnl*/)"
-  '';
-
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "OpenWrt Network interface configuration daemon";
     homepage = "https://git.openwrt.org/?p=project/netifd.git;a=summary";
-    license = licenses.lgpl21;
+    license = licenses.lgpl21Only;
     platforms = platforms.linux;
     maintainers = with maintainers; [ petabyteboy ];
   };
diff --git a/pkgs/tools/networking/netkit/tftp/default.nix b/pkgs/tools/networking/netkit/tftp/default.nix
index 847d8cbcf89..3a7a3a1deb4 100644
--- a/pkgs/tools/networking/netkit/tftp/default.nix
+++ b/pkgs/tools/networking/netkit/tftp/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation rec {
   name = "netkit-tftp-0.17";
@@ -19,8 +19,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.bsdOriginal;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/networking/netmask/default.nix b/pkgs/tools/networking/netmask/default.nix
index fa36ee5d802..c1613fcf920 100644
--- a/pkgs/tools/networking/netmask/default.nix
+++ b/pkgs/tools/networking/netmask/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, texinfo }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, texinfo }:
 
 stdenv.mkDerivation rec {
   pname = "netmask";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
   buildInputs = [ texinfo ];
   nativeBuildInputs = [ autoreconfHook ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/tlby/netmask";
     description = "An IP address formatting tool ";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/netrw/default.nix b/pkgs/tools/networking/netrw/default.nix
index f7d73283d48..c5e54ab8f43 100644
--- a/pkgs/tools/networking/netrw/default.nix
+++ b/pkgs/tools/networking/netrw/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl
+{ lib, stdenv, fetchurl
 , checksumType ? "built-in"
 , libmhash ? null
 , openssl ? null
@@ -15,8 +15,8 @@ stdenv.mkDerivation rec {
     "--with-checksum=${checksumType}"
   ];
 
-  buildInputs = stdenv.lib.optional (checksumType == "mhash") libmhash
-             ++ stdenv.lib.optional (checksumType == "openssl") openssl;
+  buildInputs = lib.optional (checksumType == "mhash") libmhash
+             ++ lib.optional (checksumType == "openssl") openssl;
 
   src = fetchurl {
     urls = [
@@ -28,8 +28,8 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Simple tool for transporting data over the network";
-    license = stdenv.lib.licenses.gpl2;
+    license = lib.licenses.gpl2;
     homepage = "https://mamuti.net/netrw/index.en.html";
-    platforms = stdenv.lib.platforms.unix;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/netselect/default.nix b/pkgs/tools/networking/netselect/default.nix
index dfca4c9058e..be68e3e2c60 100644
--- a/pkgs/tools/networking/netselect/default.nix
+++ b/pkgs/tools/networking/netselect/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "netselect";
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/apenwarr/netselect";
     description = "An ultrafast intelligent parallelizing binary-search implementation of \"ping\"";
     license = licenses.bsd3;
diff --git a/pkgs/tools/networking/netsniff-ng/default.nix b/pkgs/tools/networking/netsniff-ng/default.nix
index 9eb9afcb0e7..36028208f56 100644
--- a/pkgs/tools/networking/netsniff-ng/default.nix
+++ b/pkgs/tools/networking/netsniff-ng/default.nix
@@ -1,23 +1,53 @@
-{ stdenv, fetchFromGitHub, makeWrapper, bison, flex, geoip, geolite-legacy
-, libcli, libnet, libnetfilter_conntrack, libnl, libpcap, libsodium
-, liburcu, ncurses, pkgconfig, zlib }:
+{ stdenv
+, lib
+, fetchFromGitHub
+, makeWrapper
+, bison
+, flex
+, geoip
+, geolite-legacy
+, libcli
+, libnet
+, libnetfilter_conntrack
+, libnl
+, libpcap
+, libsodium
+, liburcu
+, ncurses
+, pkg-config
+, zlib
+}:
 
 stdenv.mkDerivation rec {
   pname = "netsniff-ng";
-  version = "0.6.7";
+  version = "0.6.8";
 
-  # Upstream recommends and supports git
   src = fetchFromGitHub {
     repo = pname;
     owner = pname;
     rev = "v${version}";
-    sha256 = "1jvihq30cwlpjqwny0lcrciysn40wscq6xik3s9b81nw2s7wiyqr";
+    sha256 = "10ih8amaqspy0zwg7hqvypa1v7ixpjl0n608cyfgyfzffp73lbqf";
   };
 
-  nativeBuildInputs = [ pkgconfig makeWrapper bison flex ];
+  nativeBuildInputs = [
+    bison
+    flex
+    makeWrapper
+    pkg-config
+  ];
+
   buildInputs = [
-    geoip geolite-legacy libcli libnet libnl
-    libnetfilter_conntrack libpcap libsodium liburcu ncurses zlib
+    geoip
+    geolite-legacy
+    libcli
+    libnet
+    libnl
+    libnetfilter_conntrack
+    libpcap
+    libsodium
+    liburcu
+    ncurses
+    zlib
   ];
 
   # ./configure is not autoGNU but some home-brewn magic
@@ -37,16 +67,16 @@ stdenv.mkDerivation rec {
     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
+    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; {
+  meta = with lib; {
     description = "Swiss army knife for daily Linux network plumbing";
     longDescription = ''
       netsniff-ng is a free Linux networking toolkit. Its gain of performance
@@ -56,7 +86,7 @@ stdenv.mkDerivation rec {
       development and analysis, debugging, auditing or network reconnaissance.
     '';
     homepage = "http://netsniff-ng.org/";
-    license = licenses.gpl2;
+    license = with licenses; [ gpl2Only ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/nettee/default.nix b/pkgs/tools/networking/nettee/default.nix
index d95171807df..c5cbcb19a97 100644
--- a/pkgs/tools/networking/nettee/default.nix
+++ b/pkgs/tools/networking/nettee/default.nix
@@ -16,7 +16,7 @@ in stdenv.mkDerivation {
   meta = {
     homepage = "http://saf.bio.caltech.edu/nettee.html";
     description = ''Network "tee" program'';
-    license = stdenv.lib.licenses.gpl2;
+    license = lib.licenses.gpl2;
     maintainers = with lib.maintainers; [ Profpatsch ];
     platforms = lib.platforms.linux;
   };
diff --git a/pkgs/tools/networking/network-manager/fix-paths.patch b/pkgs/tools/networking/network-manager/fix-paths.patch
deleted file mode 100644
index 60ee437f6f4..00000000000
--- a/pkgs/tools/networking/network-manager/fix-paths.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-diff --git a/clients/common/nm-polkit-listener.c b/clients/common/nm-polkit-listener.c
-index ace205e80..f19c1dea0 100644
---- a/clients/common/nm-polkit-listener.c
-+++ b/clients/common/nm-polkit-listener.c
-@@ -552,7 +552,7 @@ begin_authentication (AuthRequest *request)
- {
- 	int fd_flags;
- 	const char *helper_argv[] = {
--		POLKIT_PACKAGE_PREFIX "/lib/polkit-1/polkit-agent-helper-1",
-+		"/run/wrappers/bin/polkit-agent-helper-1",
- 		request->username,
- 		NULL,
- 	};
-diff --git a/clients/common/nm-vpn-helpers.c b/clients/common/nm-vpn-helpers.c
-index 74ff52bb2..638857df4 100644
---- a/clients/common/nm-vpn-helpers.c
-+++ b/clients/common/nm-vpn-helpers.c
-@@ -213,10 +213,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..a43d61864 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="@runtimeShell@ -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 91ebd9a36..5201a56c3 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/busctl call org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager Reload u 0
-+ExecReload=@systemd@/bin/busctl call org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager Reload u 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 d3991ab19..58f01c666 100644
---- a/libnm/meson.build
-+++ b/libnm/meson.build
-@@ -283,7 +283,6 @@ if enable_introspection
-     output: 'nm-settings-docs-gir.xml',
-     command: [
-       generate_setting_docs_env,
--      python.path(),
-       join_paths(meson.source_root(), 'tools', 'generate-docs-nm-settings-docs-gir.py'),
-       '--lib-path', meson.current_build_dir(),
-       '--gir', '@INPUT@',
-diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
-index de09e4807..2755db165 100644
---- a/src/devices/nm-device.c
-+++ b/src/devices/nm-device.c
-@@ -13705,14 +13705,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 3950c3c3a..a9436d75a 100644
---- a/src/nm-core-utils.c
-+++ b/src/nm-core-utils.c
-@@ -336,7 +336,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/pkgs/tools/networking/network-manager/0.9.8/default.nix b/pkgs/tools/networking/networkmanager/0.9.8/default.nix
index 6035e35f634..757c886fdf3 100644
--- a/pkgs/tools/networking/network-manager/0.9.8/default.nix
+++ b/pkgs/tools/networking/networkmanager/0.9.8/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchurl, intltool, pkgconfig, dbus-glib
+{ lib, stdenv, fetchurl, intltool, pkg-config, dbus-glib
 , udev, libnl, libuuid, gnutls, dhcp
 , libgcrypt, perl, libgudev, avahi, ppp, kmod }:
 
 stdenv.mkDerivation rec {
-  pname = "network-manager";
+  pname = "networkmanager";
   version = "0.9.8.10";
 
   src = fetchurl {
@@ -43,7 +43,7 @@ stdenv.mkDerivation rec {
 
   propagatedBuildInputs = [ dbus-glib ];
 
-  nativeBuildInputs = [ intltool pkgconfig ];
+  nativeBuildInputs = [ intltool pkg-config ];
 
   patches =
     [ ./libnl-3.2.25.patch
@@ -55,7 +55,7 @@ stdenv.mkDerivation rec {
       installFlagsArray=( "sysconfdir=$out/etc" "localstatedir=$out/var" )
     '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://projects.gnome.org/NetworkManager/";
     description = "Network configuration and management tool";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/networking/network-manager/0.9.8/libnl-3.2.25.patch b/pkgs/tools/networking/networkmanager/0.9.8/libnl-3.2.25.patch
index 17c2966b706..17c2966b706 100644
--- a/pkgs/tools/networking/network-manager/0.9.8/libnl-3.2.25.patch
+++ b/pkgs/tools/networking/networkmanager/0.9.8/libnl-3.2.25.patch
diff --git a/pkgs/tools/networking/network-manager/0.9.8/nixos-purity.patch b/pkgs/tools/networking/networkmanager/0.9.8/nixos-purity.patch
index 9ebc080ba96..9ebc080ba96 100644
--- a/pkgs/tools/networking/network-manager/0.9.8/nixos-purity.patch
+++ b/pkgs/tools/networking/networkmanager/0.9.8/nixos-purity.patch
diff --git a/pkgs/tools/networking/network-manager/applet/default.nix b/pkgs/tools/networking/networkmanager/applet/default.nix
index 9f92fcfa1ab..5f83ffae055 100644
--- a/pkgs/tools/networking/network-manager/applet/default.nix
+++ b/pkgs/tools/networking/networkmanager/applet/default.nix
@@ -1,17 +1,16 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , meson
 , ninja
 , gettext
 , pkg-config
 , networkmanager
-, gnome3
+, gnome
 , libnotify
 , libsecret
 , polkit
 , modemmanager
 , libnma
-, mobile-broadband-provider-info
 , glib-networking
 , gsettings-desktop-schemas
 , libgudev
@@ -26,11 +25,11 @@
 
 stdenv.mkDerivation rec {
   pname = "network-manager-applet";
-  version = "1.18.0";
+  version = "1.22.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "12xiy8g8qk18jvxvn78mvq03zvzp06bww49na765jjw0rq541fyx";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-xw2AtI1AqcuZ7JZ8xDifZ+fwMBUopp1IFXIEEzGmRr4=";
   };
 
   mesonFlags = [
@@ -51,9 +50,10 @@ stdenv.mkDerivation rec {
     libgudev
     modemmanager
     jansson
+    glib
     glib-networking
     libappindicator-gtk3
-    gnome3.adwaita-icon-theme
+    gnome.adwaita-icon-theme
   ];
 
   nativeBuildInputs = [
@@ -72,16 +72,17 @@ stdenv.mkDerivation rec {
   '';
 
   passthru = {
-    updateScript = gnome3.updateScript {
+    updateScript = gnome.updateScript {
       packageName = pname;
       attrPath = "networkmanagerapplet";
+      versionPolicy = "odd-unstable";
     };
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://gitlab.gnome.org/GNOME/network-manager-applet/";
     description = "NetworkManager control applet for GNOME";
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
     maintainers = with maintainers; [ phreedom ];
     platforms = platforms.linux;
   };
diff --git a/pkgs/tools/networking/network-manager/default.nix b/pkgs/tools/networking/networkmanager/default.nix
index f5b12a6cf37..4f3b7a3204d 100644
--- a/pkgs/tools/networking/network-manager/default.nix
+++ b/pkgs/tools/networking/networkmanager/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, substituteAll, intltool, pkgconfig, fetchpatch, dbus
-, gnome3, systemd, libuuid, polkit, gnutls, ppp, dhcp, iptables, python3, vala
+{ lib, stdenv, fetchurl, substituteAll, intltool, pkg-config, fetchpatch, dbus
+, gnome, 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
@@ -9,12 +9,12 @@
 let
   pythonForDocs = python3.withPackages (pkgs: with pkgs; [ pygobject3 ]);
 in stdenv.mkDerivation rec {
-  pname = "network-manager";
-  version = "1.26.0";
+  pname = "networkmanager";
+  version = "1.30.4";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/NetworkManager/${stdenv.lib.versions.majorMinor version}/NetworkManager-${version}.tar.xz";
-    sha256 = "0isdqwp58d7r92sqsk7l2vlqwy518n8b7c7z94jk9gc1bdmjf8sj";
+    url = "mirror://gnome/sources/NetworkManager/${lib.versions.majorMinor version}/NetworkManager-${version}.tar.xz";
+    sha256 = "sha256-YFC3JCEuo85zhhEzWb6pr6H2eaVPYNmZpZmYkuZywZA=";
   };
 
   outputs = [ "out" "dev" "devdoc" "man" "doc" ];
@@ -45,6 +45,7 @@ in stdenv.mkDerivation rec {
     "-Ddocs=true"
     "-Dtests=no"
     "-Dqt=false"
+    "-Dpolkit_agent_helper_1=/run/wrappers/bin/polkit-agent-helper-1"
     # Allow using iwd when configured to do so
     "-Diwd=true"
     "-Dlibaudit=yes-disabled-by-default"
@@ -55,7 +56,7 @@ in stdenv.mkDerivation rec {
   patches = [
     (substituteAll {
       src = ./fix-paths.patch;
-      inherit iputils kmod openconnect ethtool gnused systemd polkit;
+      inherit iputils kmod openconnect ethtool gnused systemd;
       inherit runtimeShell;
     })
 
@@ -72,7 +73,7 @@ in stdenv.mkDerivation rec {
   propagatedBuildInputs = [ gnutls libgcrypt ];
 
   nativeBuildInputs = [
-    meson ninja intltool pkgconfig
+    meson ninja intltool pkg-config
     vala gobject-introspection dbus
     # Docs
     gtk-doc libxslt docbook_xsl docbook_xml_dtd_412 docbook_xml_dtd_42 docbook_xml_dtd_43 pythonForDocs
@@ -95,17 +96,18 @@ in stdenv.mkDerivation rec {
   '';
 
   passthru = {
-    updateScript = gnome3.updateScript {
-      packageName = pname;
+    updateScript = gnome.updateScript {
+      packageName = "NetworkManager";
       attrPath = "networkmanager";
+      versionPolicy = "odd-unstable";
     };
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://wiki.gnome.org/Projects/NetworkManager";
     description = "Network configuration and management tool";
     license = licenses.gpl2Plus;
-    maintainers = with maintainers; [ phreedom domenkozar obadz worldofpeace ];
+    maintainers = teams.freedesktop.members ++ (with maintainers; [ phreedom domenkozar obadz ]);
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/network-manager/dmenu/default.nix b/pkgs/tools/networking/networkmanager/dmenu/default.nix
index 4204ba1fcdb..9ea3dde19ab 100644
--- a/pkgs/tools/networking/network-manager/dmenu/default.nix
+++ b/pkgs/tools/networking/networkmanager/dmenu/default.nix
@@ -1,16 +1,16 @@
-{ stdenv, glib, fetchFromGitHub, networkmanager, python3Packages
+{ lib, stdenv, glib, fetchFromGitHub, networkmanager, python3Packages
 , gobject-introspection }:
 
 let inherit (python3Packages) python pygobject3;
 in stdenv.mkDerivation rec {
   pname = "networkmanager_dmenu";
-  version = "1.5.0";
+  version = "1.6.0";
 
   src = fetchFromGitHub {
     owner = "firecat53";
     repo = "networkmanager-dmenu";
-    rev = "${version}";
-    sha256 = "1msk4zkm4042av61rgbwc62i62vnv9py93fm1bczmw0b1f54qpmk";
+    rev = version;
+    sha256 = "1liidqh8c33pxyb07qyj0jkd0fdak73g9r2iwiq62vfzrpik09k0";
   };
 
   buildInputs = [ glib python pygobject3 gobject-introspection networkmanager python3Packages.wrapPython ];
@@ -30,11 +30,11 @@ in stdenv.mkDerivation rec {
   '';
 
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    license      = lib.licenses.mit;
+    maintainers  = [ lib.maintainers.jensbin ];
+    platforms    = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/networking/network-manager/fix-install-paths.patch b/pkgs/tools/networking/networkmanager/fix-install-paths.patch
index 4e80247cf14..4e80247cf14 100644
--- a/pkgs/tools/networking/network-manager/fix-install-paths.patch
+++ b/pkgs/tools/networking/networkmanager/fix-install-paths.patch
diff --git a/pkgs/tools/networking/networkmanager/fix-paths.patch b/pkgs/tools/networking/networkmanager/fix-paths.patch
new file mode 100644
index 00000000000..cb9d3c3a0d2
--- /dev/null
+++ b/pkgs/tools/networking/networkmanager/fix-paths.patch
@@ -0,0 +1,92 @@
+diff --git a/clients/common/nm-vpn-helpers.c b/clients/common/nm-vpn-helpers.c
+index 15c47c3ec..4d1913aa6 100644
+--- a/clients/common/nm-vpn-helpers.c
++++ b/clients/common/nm-vpn-helpers.c
+@@ -208,15 +208,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..a43d61864 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="@runtimeShell@ -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 91ebd9a36..5201a56c3 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/busctl call org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager Reload u 0
++ExecReload=@systemd@/bin/busctl call org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager Reload u 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 d0846419c..a7adb2cc6 100644
+--- a/libnm/meson.build
++++ b/libnm/meson.build
+@@ -280,7 +280,6 @@ if enable_introspection
+     output: 'nm-settings-docs-gir.xml',
+     command: [
+       generate_setting_docs_env,
+-      python.path(),
+       join_paths(meson.source_root(), 'tools', 'generate-docs-nm-settings-docs-gir.py'),
+       '--lib-path', meson.current_build_dir(),
+       '--gir', '@INPUT@',
+diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c
+index 040dd0b4d..98aea3aa9 100644
+--- a/src/core/devices/nm-device.c
++++ b/src/core/devices/nm-device.c
+@@ -13957,14 +13957,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/core/nm-core-utils.c b/src/core/nm-core-utils.c
+index 9075c30dd..4b140e92b 100644
+--- a/src/core/nm-core-utils.c
++++ b/src/core/nm-core-utils.c
+@@ -333,7 +333,7 @@ nm_utils_modprobe(GError **error, gboolean suppress_error_logging, const char *a
+ 
+     /* 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/pkgs/tools/networking/network-manager/fortisslvpn/default.nix b/pkgs/tools/networking/networkmanager/fortisslvpn/default.nix
index 3cc4133b41c..f97bac13cf7 100644
--- a/pkgs/tools/networking/network-manager/fortisslvpn/default.nix
+++ b/pkgs/tools/networking/networkmanager/fortisslvpn/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , substituteAll
 , openfortivpn
@@ -11,7 +11,7 @@
 , ppp
 , libsecret
 , withGnome ? true
-, gnome3
+, gnome
 , fetchpatch
 , libnma
 }:
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
   name = "${pname}${if withGnome then "-gnome" else ""}-${version}";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
     sha256 = "1sw66cxgs4in4cjp1cm95c5ijsk8xbbmq4ykg2jwqwgz6cf2lr3s";
   };
 
@@ -50,7 +50,7 @@ stdenv.mkDerivation rec {
     networkmanager
     ppp
     glib
-  ] ++ stdenv.lib.optionals withGnome [
+  ] ++ lib.optionals withGnome [
     gtk3
     libsecret
     libnma
@@ -69,13 +69,14 @@ stdenv.mkDerivation rec {
   ];
 
   passthru = {
-    updateScript = gnome3.updateScript {
+    updateScript = gnome.updateScript {
       packageName = pname;
       attrPath = "networkmanager-fortisslvpn";
+      versionPolicy = "odd-unstable";
     };
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "NetworkManager’s FortiSSL plugin";
     inherit (networkmanager.meta) maintainers platforms;
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/network-manager/fortisslvpn/fix-paths.patch b/pkgs/tools/networking/networkmanager/fortisslvpn/fix-paths.patch
index a1241b6738c..a1241b6738c 100644
--- a/pkgs/tools/networking/network-manager/fortisslvpn/fix-paths.patch
+++ b/pkgs/tools/networking/networkmanager/fortisslvpn/fix-paths.patch
diff --git a/pkgs/tools/networking/network-manager/iodine/default.nix b/pkgs/tools/networking/networkmanager/iodine/default.nix
index 95d015f6964..e56d9411b39 100644
--- a/pkgs/tools/networking/network-manager/iodine/default.nix
+++ b/pkgs/tools/networking/networkmanager/iodine/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitLab, substituteAll, autoreconfHook, iodine, intltool, pkgconfig, networkmanager, libsecret, gtk3
-, withGnome ? true, gnome3, fetchpatch, libnma, glib }:
+{ lib, stdenv, fetchFromGitLab, substituteAll, autoreconfHook, iodine, intltool, pkg-config, networkmanager, libsecret, gtk3
+, withGnome ? true, gnome, fetchpatch, libnma, glib }:
 
 let
   pname = "NetworkManager-iodine";
@@ -28,9 +28,9 @@ in stdenv.mkDerivation {
   ];
 
   buildInputs = [ iodine networkmanager glib ]
-    ++ stdenv.lib.optionals withGnome [ gtk3 libsecret libnma ];
+    ++ lib.optionals withGnome [ gtk3 libsecret libnma ];
 
-  nativeBuildInputs = [ intltool autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ intltool autoreconfHook pkg-config ];
 
   # glib-2.62 deprecations
   NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
@@ -44,13 +44,13 @@ in stdenv.mkDerivation {
   ];
 
   passthru = {
-    updateScript = gnome3.updateScript {
+    updateScript = gnome.updateScript {
       packageName = pname;
       attrPath = "networkmanager-iodine";
     };
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "NetworkManager's iodine plugin";
     inherit (networkmanager.meta) maintainers platforms;
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/networking/network-manager/iodine/fix-paths.patch b/pkgs/tools/networking/networkmanager/iodine/fix-paths.patch
index d32dbfadbaf..d32dbfadbaf 100644
--- a/pkgs/tools/networking/network-manager/iodine/fix-paths.patch
+++ b/pkgs/tools/networking/networkmanager/iodine/fix-paths.patch
diff --git a/pkgs/tools/networking/network-manager/l2tp/default.nix b/pkgs/tools/networking/networkmanager/l2tp/default.nix
index 430462f9199..bfcc2d8ae86 100644
--- a/pkgs/tools/networking/network-manager/l2tp/default.nix
+++ b/pkgs/tools/networking/networkmanager/l2tp/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, substituteAll, fetchFromGitHub, autoreconfHook, libtool, intltool, pkgconfig
+{ lib, stdenv, substituteAll, fetchFromGitHub, autoreconfHook, libtool, intltool, pkg-config
 , file, findutils
 , gtk3, networkmanager, ppp, xl2tpd, strongswan, libsecret
 , withGnome ? true, libnma }:
@@ -23,9 +23,9 @@ stdenv.mkDerivation rec {
   ];
 
   buildInputs = [ networkmanager ppp ]
-    ++ stdenv.lib.optionals withGnome [ gtk3 libsecret libnma ];
+    ++ lib.optionals withGnome [ gtk3 libsecret libnma ];
 
-  nativeBuildInputs = [ autoreconfHook libtool intltool pkgconfig file findutils ];
+  nativeBuildInputs = [ autoreconfHook libtool intltool pkg-config file findutils ];
 
   preConfigure = ''
     intltoolize -f
@@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "L2TP plugin for NetworkManager";
     inherit (networkmanager.meta) platforms;
     homepage = "https://github.com/nm-l2tp/network-manager-l2tp";
diff --git a/pkgs/tools/networking/network-manager/l2tp/fix-paths.patch b/pkgs/tools/networking/networkmanager/l2tp/fix-paths.patch
index 531672c3936..531672c3936 100644
--- a/pkgs/tools/networking/network-manager/l2tp/fix-paths.patch
+++ b/pkgs/tools/networking/networkmanager/l2tp/fix-paths.patch
diff --git a/pkgs/tools/networking/network-manager/libnma/default.nix b/pkgs/tools/networking/networkmanager/libnma/default.nix
index 7d7889f9a5b..50fc66a8d68 100644
--- a/pkgs/tools/networking/network-manager/libnma/default.nix
+++ b/pkgs/tools/networking/networkmanager/libnma/default.nix
@@ -7,7 +7,7 @@
 , pkg-config
 , vala
 , networkmanager
-, gnome3
+, gnome
 , isocodes
 , libxml2
 , docbook_xsl
@@ -19,6 +19,7 @@
 , gcr
 , glib
 , substituteAll
+, lib
 }:
 
 stdenv.mkDerivation rec {
@@ -28,7 +29,7 @@ stdenv.mkDerivation rec {
   outputs = [ "out" "dev" "devdoc" ];
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
     sha256 = "1d5gzn7ss5vi0bhc8s4i5gsrck1ajslajam5jxfqazg094mffcys";
   };
 
@@ -55,13 +56,13 @@ stdenv.mkDerivation rec {
     networkmanager
     isocodes
     mobile-broadband-provider-info
-  ] ++ stdenv.lib.optionals withGnome [
+  ] ++ lib.optionals withGnome [
     # advanced certificate chooser
     gcr
   ];
 
   mesonFlags = [
-    "-Dgcr=${if withGnome then "true" else "false"}"
+    "-Dgcr=${lib.boolToString withGnome}"
   ];
 
   postPatch = ''
@@ -74,12 +75,13 @@ stdenv.mkDerivation rec {
   '';
 
   passthru = {
-    updateScript = gnome3.updateScript {
+    updateScript = gnome.updateScript {
       packageName = pname;
+      versionPolicy = "odd-unstable";
     };
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://gitlab.gnome.org/GNOME/libnma";
     description = "NetworkManager UI utilities (libnm version)";
     license = licenses.gpl2Plus; # Mix of GPL and LPGL 2+
diff --git a/pkgs/tools/networking/network-manager/libnma/hardcode-gsettings.patch b/pkgs/tools/networking/networkmanager/libnma/hardcode-gsettings.patch
index 9b2f5366950..9b2f5366950 100644
--- a/pkgs/tools/networking/network-manager/libnma/hardcode-gsettings.patch
+++ b/pkgs/tools/networking/networkmanager/libnma/hardcode-gsettings.patch
diff --git a/pkgs/tools/networking/network-manager/openconnect/default.nix b/pkgs/tools/networking/networkmanager/openconnect/default.nix
index 3c1a8d11042..c03a698514a 100644
--- a/pkgs/tools/networking/network-manager/openconnect/default.nix
+++ b/pkgs/tools/networking/networkmanager/openconnect/default.nix
@@ -1,11 +1,11 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , substituteAll
 , glib
 , libxml2
 , openconnect
 , intltool
-, pkgconfig
+, pkg-config
 , autoreconfHook
 , networkmanager
 , gcr
@@ -13,7 +13,7 @@
 , file
 , gtk3
 , withGnome ? true
-, gnome3
+, gnome
 , kmod
 , fetchpatch
 }:
@@ -25,7 +25,7 @@ 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";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
     sha256 = "0nlp290nkawc4wqm978n4vhzg3xdqi8kpjjx19l855vab41rh44m";
   };
 
@@ -47,7 +47,7 @@ in stdenv.mkDerivation {
     libxml2
     openconnect
     networkmanager
-  ] ++ stdenv.lib.optionals withGnome [
+  ] ++ lib.optionals withGnome [
     gtk3
     gcr
     libsecret
@@ -55,7 +55,7 @@ in stdenv.mkDerivation {
 
   nativeBuildInputs = [
     intltool
-    pkgconfig
+    pkg-config
     file
   ];
 
@@ -66,13 +66,14 @@ in stdenv.mkDerivation {
   ];
 
   passthru = {
-    updateScript = gnome3.updateScript {
+    updateScript = gnome.updateScript {
       packageName = pname;
       attrPath = "networkmanager-openconnect";
+      versionPolicy = "odd-unstable";
     };
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "NetworkManager’s OpenConnect plugin";
     inherit (networkmanager.meta) maintainers platforms;
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/networking/network-manager/openconnect/fix-paths.patch b/pkgs/tools/networking/networkmanager/openconnect/fix-paths.patch
index 9b342f5bd08..9b342f5bd08 100644
--- a/pkgs/tools/networking/network-manager/openconnect/fix-paths.patch
+++ b/pkgs/tools/networking/networkmanager/openconnect/fix-paths.patch
diff --git a/pkgs/tools/networking/network-manager/openvpn/default.nix b/pkgs/tools/networking/networkmanager/openvpn/default.nix
index 79435a9e5e8..06df79e4705 100644
--- a/pkgs/tools/networking/network-manager/openvpn/default.nix
+++ b/pkgs/tools/networking/networkmanager/openvpn/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, substituteAll, openvpn, intltool, libxml2, pkgconfig, file, networkmanager, libsecret
-, gtk3, withGnome ? true, gnome3, kmod, libnma }:
+{ lib, stdenv, fetchurl, substituteAll, openvpn, intltool, libxml2, pkg-config, file, networkmanager, libsecret
+, gtk3, withGnome ? true, gnome, kmod, libnma }:
 
 let
   pname = "NetworkManager-openvpn";
@@ -8,7 +8,7 @@ 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";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
     sha256 = "062kh4zj7jfbwy4zzcwpq2m457bzbpm3l18s0ysnw3mgia3siz8f";
   };
 
@@ -20,9 +20,9 @@ in stdenv.mkDerivation {
   ];
 
   buildInputs = [ openvpn networkmanager ]
-    ++ stdenv.lib.optionals withGnome [ gtk3 libsecret libnma ];
+    ++ lib.optionals withGnome [ gtk3 libsecret libnma ];
 
-  nativeBuildInputs = [ intltool pkgconfig file libxml2 ];
+  nativeBuildInputs = [ intltool pkg-config file libxml2 ];
 
   configureFlags = [
     "--with-gnome=${if withGnome then "yes" else "no"}"
@@ -31,13 +31,14 @@ in stdenv.mkDerivation {
   ];
 
   passthru = {
-    updateScript = gnome3.updateScript {
+    updateScript = gnome.updateScript {
       packageName = pname;
       attrPath = "networkmanager-openvpn";
+      versionPolicy = "odd-unstable";
     };
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "NetworkManager's OpenVPN plugin";
     inherit (networkmanager.meta) maintainers platforms;
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/networking/network-manager/openvpn/fix-paths.patch b/pkgs/tools/networking/networkmanager/openvpn/fix-paths.patch
index b735da28dca..b735da28dca 100644
--- a/pkgs/tools/networking/network-manager/openvpn/fix-paths.patch
+++ b/pkgs/tools/networking/networkmanager/openvpn/fix-paths.patch
diff --git a/pkgs/tools/networking/networkmanager/sstp/default.nix b/pkgs/tools/networking/networkmanager/sstp/default.nix
new file mode 100644
index 00000000000..f4866234438
--- /dev/null
+++ b/pkgs/tools/networking/networkmanager/sstp/default.nix
@@ -0,0 +1,64 @@
+{ lib, stdenv
+, autoreconfHook
+, fetchFromGitHub
+, fetchpatch
+, file
+, glib
+, gnome
+, gtk3
+, intltool
+, libnma
+, libsecret
+, networkmanager
+, pkg-config
+, ppp
+, sstp
+, substituteAll
+, withGnome ? true }:
+
+let
+  pname = "NetworkManager-sstp";
+  version = "unstable-2020-04-20";
+in stdenv.mkDerivation {
+  name = "${pname}${if withGnome then "-gnome" else ""}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "enaess";
+    repo = "network-manager-sstp";
+    rev = "735d8ca078f933e085029f60a737e3cf1d8c29a8";
+    sha256 = "0aahfhy2ch951kzj6gnd8p8hv2s5yd5y10wrmj68djhnx2ml8cd3";
+  };
+
+  buildInputs = [ sstp networkmanager glib ppp ]
+    ++ lib.optionals withGnome [ gtk3 libsecret libnma ];
+
+  nativeBuildInputs = [ file intltool autoreconfHook pkg-config ];
+
+  postPatch = ''
+    sed -i 's#/sbin/pppd#${ppp}/bin/pppd#' src/nm-sstp-service.c
+    sed -i 's#/sbin/sstpc#${sstp}/bin/sstpc#' src/nm-sstp-service.c
+  '';
+
+  # glib-2.62 deprecations
+  NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
+
+  preConfigure = "intltoolize";
+  configureFlags = [
+    "--without-libnm-glib"
+    "--with-gnome=${if withGnome then "yes" else "no"}"
+    "--enable-absolute-paths"
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      attrPath = "networkmanager-sstp";
+    };
+  };
+
+  meta = with lib; {
+    description = "NetworkManager's sstp plugin";
+    inherit (networkmanager.meta) maintainers platforms;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/pkgs/tools/networking/network-manager/strongswan/default.nix b/pkgs/tools/networking/networkmanager/strongswan/default.nix
index 028d852f139..cebcec35a31 100644
--- a/pkgs/tools/networking/network-manager/strongswan/default.nix
+++ b/pkgs/tools/networking/networkmanager/strongswan/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, intltool, pkgconfig, networkmanager, strongswanNM
-, gtk3, gnome3, libsecret, libnma }:
+{ lib, stdenv, fetchurl, intltool, pkg-config, networkmanager, strongswanNM
+, gtk3, gnome, libsecret, libnma }:
 
 stdenv.mkDerivation rec {
   pname = "NetworkManager-strongswan";
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ networkmanager strongswanNM libsecret gtk3 libnma ];
 
-  nativeBuildInputs = [ intltool pkgconfig ];
+  nativeBuildInputs = [ intltool pkg-config ];
 
   # glib-2.62 deprecations
   NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
 
   PKG_CONFIG_LIBNM_VPNSERVICEDIR = "$(out)/lib/NetworkManager/VPN";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "NetworkManager's strongswan plugin";
     inherit (networkmanager.meta) platforms;
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/networking/network-manager/tray.nix b/pkgs/tools/networking/networkmanager/tray.nix
index e8ce8ad342f..e8ce8ad342f 100644
--- a/pkgs/tools/networking/network-manager/tray.nix
+++ b/pkgs/tools/networking/networkmanager/tray.nix
diff --git a/pkgs/tools/networking/network-manager/vpnc/default.nix b/pkgs/tools/networking/networkmanager/vpnc/default.nix
index 6cd0d2e75f5..70e7104696e 100644
--- a/pkgs/tools/networking/network-manager/vpnc/default.nix
+++ b/pkgs/tools/networking/networkmanager/vpnc/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, substituteAll, vpnc, intltool, pkgconfig, networkmanager, libsecret
-, gtk3, withGnome ? true, gnome3, glib, kmod, file, fetchpatch, libnma }:
+{ lib, stdenv, fetchurl, substituteAll, vpnc, intltool, pkg-config, networkmanager, libsecret
+, gtk3, withGnome ? true, gnome, glib, kmod, file, fetchpatch, libnma }:
 let
   pname = "NetworkManager-vpnc";
   version = "1.2.6";
@@ -7,7 +7,7 @@ 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";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
     sha256 = "1js5lwcsqws4klgypfxl4ikmakv7v7xgddij1fj6b0y0qicx0kyy";
   };
 
@@ -24,9 +24,9 @@ in stdenv.mkDerivation {
   ];
 
   buildInputs = [ vpnc networkmanager glib ]
-    ++ stdenv.lib.optionals withGnome [ gtk3 libsecret libnma ];
+    ++ lib.optionals withGnome [ gtk3 libsecret libnma ];
 
-  nativeBuildInputs = [ intltool pkgconfig file ];
+  nativeBuildInputs = [ intltool pkg-config file ];
 
   configureFlags = [
     "--without-libnm-glib"
@@ -35,13 +35,14 @@ in stdenv.mkDerivation {
   ];
 
   passthru = {
-    updateScript = gnome3.updateScript {
+    updateScript = gnome.updateScript {
       packageName = pname;
       attrPath = "networkmanager-vpnc";
+      versionPolicy = "odd-unstable";
     };
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "NetworkManager's VPNC plugin";
     inherit (networkmanager.meta) maintainers platforms;
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/networking/network-manager/vpnc/fix-paths.patch b/pkgs/tools/networking/networkmanager/vpnc/fix-paths.patch
index 98238ac01f7..98238ac01f7 100644
--- a/pkgs/tools/networking/network-manager/vpnc/fix-paths.patch
+++ b/pkgs/tools/networking/networkmanager/vpnc/fix-paths.patch
diff --git a/pkgs/tools/networking/nfdump/default.nix b/pkgs/tools/networking/nfdump/default.nix
index 11ba442393d..1319e7997dd 100644
--- a/pkgs/tools/networking/nfdump/default.nix
+++ b/pkgs/tools/networking/nfdump/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchFromGitHub
+{ lib, stdenv, fetchFromGitHub
 , autoconf, automake, libtool, pkg-config
-, bzip2, libpcap, flex, yacc }:
+, bzip2, libpcap, flex, bison }:
 
-let version = "1.6.21"; in
+let version = "1.6.22"; in
 
 stdenv.mkDerivation {
   pname = "nfdump";
@@ -12,10 +12,10 @@ stdenv.mkDerivation {
     owner = "phaag";
     repo = "nfdump";
     rev = "v${version}";
-    sha256 = "1ifxnpyzyn8nd6n44pjcw0rwck392nzj1gwa4zzqvvgzj477m6ha";
+    sha256 = "14x2k85ard1kp99hhd90zsmvyw24g03m84rn13gb4grm9gjggzrj";
   };
 
-  nativeBuildInputs = [ autoconf automake flex libtool pkg-config yacc ];
+  nativeBuildInputs = [ autoconf automake flex libtool pkg-config bison ];
   buildInputs = [ bzip2 libpcap ];
 
   preConfigure = ''
@@ -31,7 +31,7 @@ stdenv.mkDerivation {
     "--enable-nfpcapd"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tools for working with netflow data";
     longDescription = ''
       nfdump is a set of tools for working with netflow data.
diff --git a/pkgs/tools/networking/nfstrace/default.nix b/pkgs/tools/networking/nfstrace/default.nix
index 88510b9b887..ca75e50fa52 100644
--- a/pkgs/tools/networking/nfstrace/default.nix
+++ b/pkgs/tools/networking/nfstrace/default.nix
@@ -1,4 +1,4 @@
-{ cmake, fetchFromGitHub, fetchpatch, json_c, libpcap, ncurses, stdenv }:
+{ cmake, fetchFromGitHub, fetchpatch, json_c, libpcap, ncurses, lib, stdenv, libtirpc }:
 
 stdenv.mkDerivation rec {
   pname = "nfstrace";
@@ -7,7 +7,7 @@ stdenv.mkDerivation rec {
   src = fetchFromGitHub {
     owner = "epam";
     repo = "nfstrace";
-    rev = "${version}";
+    rev = version;
     sha256 = "1djsyn7i3xp969rnmsdaf5vwjiik9wylxxrc5nm7by00i76c1vsg";
   };
 
@@ -16,6 +16,12 @@ stdenv.mkDerivation rec {
       url = "https://salsa.debian.org/debian/nfstrace/raw/debian/0.4.3.1-3/debian/patches/reproducible_build.patch";
       sha256 = "0fd96r8xi142kjwibqkd46s6jwsg5kfc5v28bqsj9rdlc2aqmay5";
     })
+    # Fixes build failure with gcc-10
+    # Related PR https://github.com/epam/nfstrace/pull/42/commits/4562a895ed3ac0e811bdd489068ad3ebe4d7b501
+    (fetchpatch {
+      url = "https://github.com/epam/nfstrace/commit/4562a895ed3ac0e811bdd489068ad3ebe4d7b501.patch";
+      sha256 = "1fbicbllyykjknik7asa81x0ixxmbwqwkiz74cnznagv10jlkj3p";
+    })
   ];
 
   postPatch = ''
@@ -23,17 +29,18 @@ stdenv.mkDerivation rec {
       --replace "-Wno-braced-scalar-init" ""
   '';
 
-  buildInputs = [ json_c libpcap ncurses ];
+  buildInputs = [ json_c libpcap ncurses libtirpc ];
   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" ];
+  NIX_CFLAGS_COMPILE = [ "-I${json_c.dev}/include/json-c" "-Wno-error=address-of-packed-member" "-I${libtirpc.dev}/include/tirpc" ];
+  NIX_LDFLAGS = [ "-ltirpc" ];
 
   doCheck = false; # requires network access
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://epam.github.io/nfstrace/";
     description = "NFS and CIFS tracing/monitoring/capturing/analyzing tool";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/ngrep/default.nix b/pkgs/tools/networking/ngrep/default.nix
index 60125b515d6..1e57ac75843 100644
--- a/pkgs/tools/networking/ngrep/default.nix
+++ b/pkgs/tools/networking/ngrep/default.nix
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
     sed -i "s|BPF=.*|BPF=${libpcap}/include/pcap/bpf.h|" configure
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Network packet analyzer";
     longDescription = ''
       ngrep strives to provide most of GNU grep's common features, applying
diff --git a/pkgs/tools/networking/ngrok-2/default.nix b/pkgs/tools/networking/ngrok-2/default.nix
index d9c1acc374c..2840b9d8400 100644
--- a/pkgs/tools/networking/ngrok-2/default.nix
+++ b/pkgs/tools/networking/ngrok-2/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
-with stdenv.lib;
+with lib;
 
 let versions = builtins.fromJSON (builtins.readFile ./versions.json);
     arch = if stdenv.isi686 then "386"
@@ -35,13 +35,10 @@ stdenv.mkDerivation {
   passthru.updateScript = ./update.sh;
 
   meta = {
-    description = "ngrok";
-    longDescription = ''
-      Allows you to expose a web server running on your local machine to the internet.
-    '';
+    description = "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" ];
+    platforms = [ "i686-linux" "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
     maintainers = [ maintainers.bobvanderlinden ];
   };
 }
diff --git a/pkgs/tools/networking/ngrok-2/update.sh b/pkgs/tools/networking/ngrok-2/update.sh
index 7908a1524e5..4e2aaf4e559 100755
--- a/pkgs/tools/networking/ngrok-2/update.sh
+++ b/pkgs/tools/networking/ngrok-2/update.sh
@@ -29,5 +29,6 @@ get_download_info() {
     get_download_info linux arm
     get_download_info linux arm64
     get_download_info darwin amd64
+    get_download_info darwin arm64
 ) | jq --slurp 'map ({ (.sys): . }) | add' \
     > pkgs/tools/networking/ngrok-2/versions.json
diff --git a/pkgs/tools/networking/ngrok-2/versions.json b/pkgs/tools/networking/ngrok-2/versions.json
index 656e6a640e5..85b0e47168a 100644
--- a/pkgs/tools/networking/ngrok-2/versions.json
+++ b/pkgs/tools/networking/ngrok-2/versions.json
@@ -1,32 +1,38 @@
 {
   "linux-386": {
     "sys": "linux-386",
-    "url": "https://bin.equinox.io/a/bjFaKy3TSAg/ngrok-2.3.35-linux-386",
-    "sha256": "1fdd1c057c3c31044400ef6ade20ad3f10bce415ad33ccfb4bc2fd83bb36f62f",
-    "version": "2.3.35"
+    "url": "https://bin.equinox.io/a/c4ZY6f7svn7/ngrok-2.3.40-linux-386",
+    "sha256": "1b645ff0abbb28ca7c0f6a2109653be2dc281860b582b4de6927fde12c99da26",
+    "version": "2.3.40"
   },
   "linux-amd64": {
     "sys": "linux-amd64",
-    "url": "https://bin.equinox.io/a/52fZaxjGg9n/ngrok-2.3.35-linux-amd64",
-    "sha256": "b456608239cdf4b5119916c62a87640667d1cb1900c53faed89e3dacc1fe4679",
-    "version": "2.3.35"
+    "url": "https://bin.equinox.io/a/b5PAmc6L9z2/ngrok-2.3.40-linux-amd64",
+    "sha256": "218d267cd1195334718bafac14bfdf1c19dc95dcf8a24aaa6a1383c21dc86e76",
+    "version": "2.3.40"
   },
   "linux-arm": {
     "sys": "linux-arm",
-    "url": "https://bin.equinox.io/a/2cUd5mRRjoF/ngrok-2.3.35-linux-arm",
-    "sha256": "94d88311e9b2baea615d9fe7c6921ac0167040ec66aa0d0cbb856c027d617f1f",
-    "version": "2.3.35"
+    "url": "https://bin.equinox.io/a/aRh9rdUAJyf/ngrok-2.3.40-linux-arm",
+    "sha256": "538a7431df141a929a250eaf6ed7afdcce817bcd8cfe60b61f4c6d7a289b1d1c",
+    "version": "2.3.40"
   },
   "linux-arm64": {
     "sys": "linux-arm64",
-    "url": "https://bin.equinox.io/a/k2qx6ipHqpb/ngrok-2.3.35-linux-arm64",
-    "sha256": "fd07f5c449f1c1444606bbc9d06fa6b649325ddf0b3e6dac6f32d785a886f170",
-    "version": "2.3.35"
+    "url": "https://bin.equinox.io/a/2gpRjDRBpJv/ngrok-2.3.40-linux-arm64",
+    "sha256": "dc7b4465ef95f6d04d1b1996111b3a2631e5f464d7dca7f4994f59ea4edbe21f",
+    "version": "2.3.40"
   },
   "darwin-amd64": {
     "sys": "darwin-amd64",
-    "url": "https://bin.equinox.io/a/jKkD2Wcds2L/ngrok-2.3.35-darwin-amd64",
-    "sha256": "dd74a6be1a155c41ff06aadad910196cae13e06ab997bc0b144288b2da568f2a",
-    "version": "2.3.35"
+    "url": "https://bin.equinox.io/a/fcZQXtHSDgM/ngrok-2.3.40-darwin-amd64",
+    "sha256": "80c8fb121d6c93350d84351d9516674f4e20a3e003cdd7dcb4c3e7c48b9c5b07",
+    "version": "2.3.40"
+  },
+  "darwin-arm64": {
+    "sys": "darwin-arm64",
+    "url": "https://bin.equinox.io/a/3TEKdZeyAnt/ngrok-2.3.40-darwin-arm64",
+    "sha256": "c9e6dfec454f9faec92a13dfd3f3857de982007e3b85987bb875aa0d74ca8101",
+    "version": "2.3.40"
   }
 }
diff --git a/pkgs/tools/networking/nikto/NIKTODIR-nix-wrapper-fix.patch b/pkgs/tools/networking/nikto/NIKTODIR-nix-wrapper-fix.patch
new file mode 100644
index 00000000000..d3caea1b26f
--- /dev/null
+++ b/pkgs/tools/networking/nikto/NIKTODIR-nix-wrapper-fix.patch
@@ -0,0 +1,26 @@
+diff --color -ur a/program/nikto.pl b/program/nikto.pl
+--- a/program/nikto.pl	2021-01-30 12:05:54.915072538 +0100
++++ b/program/nikto.pl	2021-01-30 12:36:42.877729231 +0100
+@@ -223,7 +223,8 @@
+     # Guess Nikto current directory
+     my $NIKTODIR = abs_path($0);
+     chomp($NIKTODIR);
+-    $NIKTODIR =~ s#[\\/]nikto.pl$##;
++    $NIKTODIR =~ s#[\\/]bin[\\/]\.nikto-wrapped$##;
++
+ 
+     # Guess user's home directory -- to support Windows
+     foreach my $var (split(/ /, "HOME USERPROFILE")) {
+@@ -231,10 +232,10 @@
+     }
+ 
+     # Read the conf files in order (previous values are over-written with each, if multiple found)
+-    push(@CF,"$NIKTODIR/nikto.conf.default");
++    push(@CF,"$NIKTODIR/etc/nikto.conf.default");
+     push(@CF,"/etc/nikto.conf");
+     push(@CF,"$home/nikto.conf");
+-    push(@CF,"$NIKTODIR/nikto.conf");
++    push(@CF,"$NIKTODIR/etc/nikto.conf");
+     push(@CF,"nikto.conf");
+     push(@CF,"$VARIABLES{'configfile'}");
+ 
diff --git a/pkgs/tools/networking/nikto/default.nix b/pkgs/tools/networking/nikto/default.nix
new file mode 100644
index 00000000000..e1abcb6c140
--- /dev/null
+++ b/pkgs/tools/networking/nikto/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, perlPackages
+, makeWrapper
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nikto";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "sullo";
+    repo = "nikto";
+    rev = "c83d0461edd75c02677dea53da2896644f35ecab";
+    sha256 = "0vwq2zdxir67cn78ls11qf1smd54nppy266v7ajm5rqdc47q7fy2";
+  };
+
+  # Nikto searches its configuration file based on its current path
+  # This fixes the current path regex for the wrapped executable.
+  patches = [ ./NIKTODIR-nix-wrapper-fix.patch ];
+
+  postPatch = ''
+    # EXECDIR needs to be changed to the path where we copy the programs stuff
+    # Forcing SSLeay is needed for SSL support (the auto mode doesn't seem to work otherwise)
+    substituteInPlace program/nikto.conf.default \
+      --replace "# EXECDIR=/opt/nikto" "EXECDIR=$out/share" \
+      --replace "LW_SSL_ENGINE=auto" "LW_SSL_ENGINE=SSLeay"
+  '';
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  propagatedBuildInputs = [ perlPackages.NetSSLeay ];
+
+  buildInputs = [
+    perlPackages.perl
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -d "$out/share"
+    cp -a program/* "$out/share"
+    install -Dm 755 "program/nikto.pl" "$out/bin/nikto"
+    install -Dm 644 program/nikto.conf.default "$out/etc/nikto.conf"
+    installManPage documentation/nikto.1
+    install -Dm 644 program/docs/nikto_manual.html "$out/share/doc/${pname}/manual.html"
+    install -Dm 644 README.md "$out/share/doc/${pname}/README"
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/nikto \
+      --prefix PERL5LIB : $PERL5LIB
+  '';
+
+  meta = with lib; {
+    description = "Web server scanner";
+    license = licenses.gpl2Plus;
+    homepage = "https://cirt.net/Nikto2";
+    maintainers = with maintainers; [ shamilton ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/networking/noip/default.nix b/pkgs/tools/networking/noip/default.nix
index 6503e701377..3425d1e3a82 100644
--- a/pkgs/tools/networking/noip/default.nix
+++ b/pkgs/tools/networking/noip/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation {
   name = "noip-2.1.9-1";
@@ -17,11 +17,11 @@ stdenv.mkDerivation {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.iand675 ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/notemap/default.nix b/pkgs/tools/networking/notemap/default.nix
new file mode 100644
index 00000000000..040f26752b5
--- /dev/null
+++ b/pkgs/tools/networking/notemap/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchzip
+, pkg-config
+, libressl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "notemap";
+  version = "1.3";
+
+  src = fetchzip {
+    url = "https://git.causal.agency/notemap/snapshot/notemap-${version}.tar.gz";
+    sha256 = "0s9c1xx0iggyzclqw3294bjv7qgvd5l5zgbryks4hvfibr73r6ps";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libressl
+  ];
+
+  meta = {
+    description = "Mirror notes to IMAP";
+    longDescription = ''
+      notemap(1) mirrors text files to an IMAP mailbox in a format compatible with the iOS
+      Notes app. It's intended to make notes managed in git(1) easily accessible
+      from the phone.
+    '';
+    license = lib.licenses.gpl3Plus;
+    maintainers = [ lib.maintainers.sternenseemann ];
+    homepage = "https://git.causal.agency/notemap/about/";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/pkgs/tools/networking/nss-mdns/default.nix b/pkgs/tools/networking/nss-mdns/default.nix
index 1aaead46f6a..212f7bfc287 100644
--- a/pkgs/tools/networking/nss-mdns/default.nix
+++ b/pkgs/tools/networking/nss-mdns/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, fetchpatch }:
+{ fetchurl, lib, stdenv, fetchpatch }:
 
 stdenv.mkDerivation rec {
   name = "nss-mdns-0.10";
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
       "--localstatedir=/var"
     ];
 
-  patches = stdenv.lib.optional stdenv.hostPlatform.isMusl
+  patches = lib.optional stdenv.hostPlatform.isMusl
     (
       fetchpatch
       {
@@ -41,10 +41,10 @@ stdenv.mkDerivation rec {
     '';
 
     homepage = "http://0pointer.de/lennart/projects/nss-mdns/";
-    license = stdenv.lib.licenses.lgpl2Plus;
+    license = lib.licenses.lgpl2Plus;
 
     # Supports both the GNU and FreeBSD NSS.
-    platforms = stdenv.lib.platforms.gnu ++ stdenv.lib.platforms.linux ++ stdenv.lib.platforms.freebsd;
+    platforms = lib.platforms.gnu ++ lib.platforms.linux ++ lib.platforms.freebsd;
 
     maintainers = [ ];
   };
diff --git a/pkgs/tools/networking/nss-pam-ldapd/default.nix b/pkgs/tools/networking/nss-pam-ldapd/default.nix
index 3ce7638923c..e112b8c1df1 100644
--- a/pkgs/tools/networking/nss-pam-ldapd/default.nix
+++ b/pkgs/tools/networking/nss-pam-ldapd/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl
-, pkgconfig, makeWrapper, autoreconfHook
+{ lib, stdenv, fetchurl
+, pkg-config, makeWrapper, autoreconfHook
 , openldap, python, pam
 }:
 
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
     sha256 = "1dna3r0q6sjhhlkhcp8x2zkslrd4y7701kk6fl5r940sdph1pmyh";
   };
 
-  nativeBuildInputs = [ pkgconfig makeWrapper autoreconfHook ];
+  nativeBuildInputs = [ pkg-config makeWrapper autoreconfHook ];
   buildInputs = [ openldap pam python ];
 
   preConfigure = ''
@@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
     wrapProgram $out/sbin/nslcd --prefix LD_LIBRARY_PATH ":" $out/lib
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "LDAP identity and authentication for NSS/PAM";
     homepage = "https://arthurdejong.org/nss-pam-ldapd/";
     license = licenses.lgpl21;
diff --git a/pkgs/tools/networking/ntopng/default.nix b/pkgs/tools/networking/ntopng/default.nix
index 3db5a28f161..2ba373a2c61 100644
--- a/pkgs/tools/networking/ntopng/default.nix
+++ b/pkgs/tools/networking/ntopng/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchurl, libpcap,/* gnutls, libgcrypt,*/ libxml2, glib
+{ lib, stdenv, fetchurl, libpcap,/* gnutls, libgcrypt,*/ libxml2, glib
 , geoip, geolite-legacy, sqlite, which, autoreconfHook, git
-, pkgconfig, groff, curl, json_c, luajit, zeromq, rrdtool
+, pkg-config, groff, curl, json_c, luajit, zeromq, rrdtool
 }:
 
 # ntopng includes LuaJIT, mongoose, rrdtool and zeromq in its third-party/
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
   ];
 
   buildInputs = [ libpcap/* gnutls libgcrypt*/ libxml2 glib geoip geolite-legacy
-    sqlite which autoreconfHook git pkgconfig groff curl json_c luajit zeromq
+    sqlite which autoreconfHook git pkg-config groff curl json_c luajit zeromq
     rrdtool ];
 
 
@@ -50,14 +50,14 @@ stdenv.mkDerivation rec {
 
     rm -rf httpdocs/geoip
     ln -s ${geolite-legacy}/share/GeoIP httpdocs/geoip
-  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+  '' + 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";
+    + lib.optionalString stdenv.cc.isClang " -Wno-error=reserved-user-defined-literal";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "High-speed web-based traffic analysis and flow collection tool";
     homepage = "http://www.ntop.org/products/ntop/";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/networking/ntp/default.nix b/pkgs/tools/networking/ntp/default.nix
index a7deaf7b694..8c62e3b0d64 100644
--- a/pkgs/tools/networking/ntp/default.nix
+++ b/pkgs/tools/networking/ntp/default.nix
@@ -26,8 +26,8 @@ stdenv.mkDerivation rec {
     "--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";
+  ] ++ lib.optional stdenv.isLinux "--enable-linuxcaps"
+    ++ lib.optional withSeccomp "--enable-libseccomp";
 
   buildInputs = [ libcap openssl perl ]
     ++ lib.optional withSeccomp libseccomp
@@ -39,7 +39,7 @@ stdenv.mkDerivation rec {
     rm -rf $out/share/doc
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.ntp.org/";
     description = "An implementation of the Network Time Protocol";
     license = {
@@ -47,6 +47,6 @@ stdenv.mkDerivation rec {
       url = "https://www.eecis.udel.edu/~mills/ntp/html/copyright.html";
     };
     maintainers = with maintainers; [ eelco thoughtpolice ];
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/nuttcp/default.nix b/pkgs/tools/networking/nuttcp/default.nix
index fe3cde5f91a..1b9e9fe04e4 100644
--- a/pkgs/tools/networking/nuttcp/default.nix
+++ b/pkgs/tools/networking/nuttcp/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "nuttcp";
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
     cp nuttcp $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Network performance measurement tool";
     longDescription = ''
       nuttcp is a network performance measurement tool intended for use by
diff --git a/pkgs/tools/networking/nxdomain/default.nix b/pkgs/tools/networking/nxdomain/default.nix
new file mode 100644
index 00000000000..4e7a708125a
--- /dev/null
+++ b/pkgs/tools/networking/nxdomain/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildPythonApplication, fetchPypi, dnspython, pytestCheckHook }:
+
+buildPythonApplication rec {
+  pname = "nxdomain";
+  version = "1.0.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0va7nkbdjgzrf7fnbxkh1140pbc62wyj86rdrrh5wmg3phiziqkb";
+  };
+
+  propagatedBuildInputs = [ dnspython ];
+
+  checkInputs = [ pytestCheckHook ];
+
+  postCheck = ''
+    echo example.org > simple.list
+    python -m nxdomain --format dnsmasq --out dnsmasq.conf --simple ./simple.list
+    grep -q 'address=/example.org/' dnsmasq.conf
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/zopieux/nxdomain";
+    description = "A domain (ad) block list creator";
+    platforms = platforms.all;
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ zopieux ];
+  };
+}
diff --git a/pkgs/tools/networking/nylon/default.nix b/pkgs/tools/networking/nylon/default.nix
index d6f8cb21e0b..840b714fc9f 100644
--- a/pkgs/tools/networking/nylon/default.nix
+++ b/pkgs/tools/networking/nylon/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libevent, buildEnv }:
+{ lib, stdenv, fetchurl, libevent, buildEnv }:
 let
   # failed to find a better way to make it work
   libevent-comb = buildEnv {
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
 
   buildInputs = [ libevent ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://monkey.org/~marius/nylon";
     description = "Proxy server, supporting SOCKS 4 and 5, as well as a mirror mode";
     license = licenses.bsdOriginal;
diff --git a/pkgs/tools/networking/nzbget/default.nix b/pkgs/tools/networking/nzbget/default.nix
index c25f19c0350..375896258bc 100644
--- a/pkgs/tools/networking/nzbget/default.nix
+++ b/pkgs/tools/networking/nzbget/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, libxml2, ncurses, libsigcxx, libpar2
+{ lib, stdenv, fetchurl, pkg-config, libxml2, ncurses, libsigcxx, libpar2
 , gnutls, libgcrypt, zlib, openssl }:
 
 stdenv.mkDerivation rec {
@@ -10,14 +10,14 @@ stdenv.mkDerivation rec {
     sha256 = "0lwd0pfrs4a5ms193hgz2qiyf7grrc925dw6y0nfc0gkp27db9b5";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   buildInputs = [ libxml2 ncurses libsigcxx libpar2 gnutls
                   libgcrypt zlib openssl ];
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://nzbget.net";
     license = licenses.gpl2Plus;
     description = "A command line tool for downloading files from news servers";
diff --git a/pkgs/tools/networking/oapi-codegen/default.nix b/pkgs/tools/networking/oapi-codegen/default.nix
new file mode 100644
index 00000000000..ce490cafef6
--- /dev/null
+++ b/pkgs/tools/networking/oapi-codegen/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "oapi-codegen";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "deepmap";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-doJ1ceuJ/gL9vlGgV/hKIJeAErAseH0dtHKJX2z7pV0=";
+  };
+
+  vendorSha256 = "sha256-Y4WM+o+5jiwj8/99UyNHLpBNbtJkKteIGW2P1Jd9L6M=";
+
+  # Tests use network
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Go client and server OpenAPI 3 generator";
+    homepage    = "https://github.com/deepmap/oapi-codegen";
+    license     = licenses.asl20;
+    maintainers = [ maintainers.j4m3s ];
+  };
+}
diff --git a/pkgs/tools/networking/ocproxy/default.nix b/pkgs/tools/networking/ocproxy/default.nix
index 877f15865ac..bc21884e6ac 100644
--- a/pkgs/tools/networking/ocproxy/default.nix
+++ b/pkgs/tools/networking/ocproxy/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoconf, automake, libevent }:
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libevent }:
 
 stdenv.mkDerivation rec {
   version = "1.60";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
     ./autogen.sh
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "OpenConnect proxy";
     longDescription = ''
       ocproxy is a user-level SOCKS and port forwarding proxy for OpenConnect
diff --git a/pkgs/tools/networking/ocserv/default.nix b/pkgs/tools/networking/ocserv/default.nix
index dea0d10a277..2f5dd14757b 100644
--- a/pkgs/tools/networking/ocserv/default.nix
+++ b/pkgs/tools/networking/ocserv/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitLab, autoreconfHook, pkgconfig, nettle, gnutls
+{ lib, stdenv, fetchFromGitLab, autoreconfHook, pkg-config, nettle, gnutls
 , libev, protobufc, guile, geoip, libseccomp, gperf, readline
 , lz4, libgssglue, ronn, pam
 }:
@@ -10,17 +10,17 @@ stdenv.mkDerivation rec {
   src = fetchFromGitLab {
     owner = "openconnect";
     repo = "ocserv";
-    rev = "ocserv_${stdenv.lib.replaceStrings [ "." ] [ "_" ] version}";
+    rev = "ocserv_${lib.replaceStrings [ "." ] [ "_" ] version}";
     sha256 = "0k7sx9sg8akxwfdl51cvdqkdrx9qganqddgri2yhcgznc3f3pz5b";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ nettle gnutls libev protobufc guile geoip libseccomp gperf readline lz4 libgssglue ronn pam ];
 
-  meta = with stdenv.lib; {
+  meta = with 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.";
+    description = "This program is openconnect VPN server (ocserv), a server for the openconnect VPN client";
     maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/tools/networking/offlineimap/default.nix b/pkgs/tools/networking/offlineimap/default.nix
index 73e2e6b60f5..0de96169769 100644
--- a/pkgs/tools/networking/offlineimap/default.nix
+++ b/pkgs/tools/networking/offlineimap/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python2Packages,
+{ lib, fetchFromGitHub, python2Packages,
   asciidoc, cacert, libxml2, libxslt, docbook_xsl }:
 
 python2Packages.buildPythonApplication rec {
@@ -34,7 +34,7 @@ python2Packages.buildPythonApplication rec {
   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 ];
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ endocrimes ];
   };
 }
diff --git a/pkgs/tools/networking/ofono/default.nix b/pkgs/tools/networking/ofono/default.nix
index c6b2ffe9e83..93e1415b91c 100644
--- a/pkgs/tools/networking/ofono/default.nix
+++ b/pkgs/tools/networking/ofono/default.nix
@@ -1,7 +1,7 @@
-{ stdenv
+{ lib, stdenv
 , fetchgit
 , autoreconfHook
-, pkgconfig
+, pkg-config
 , glib
 , dbus
 , ell
@@ -12,14 +12,14 @@
 
 stdenv.mkDerivation rec {
   pname = "ofono";
-  version = "1.31";
+  version = "1.32";
 
   outputs = [ "out" "dev" ];
 
   src = fetchgit {
     url = "git://git.kernel.org/pub/scm/network/ofono/ofono.git";
     rev = version;
-    sha256 = "033y3vggjxn1c7mw75j452idp7arrdv51axs727f7l3c5lnxqdjy";
+    sha256 = "sha256-bJ7Qgau5soPiptrhcMZ8rWxfprRCTeR7OjQ5HZQ9hbc=";
   };
 
   patches = [
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [
     autoreconfHook
-    pkgconfig
+    pkg-config
   ];
 
   buildInputs = [
@@ -46,9 +46,17 @@ stdenv.mkDerivation rec {
     "--enable-external-ell"
   ];
 
+  postInstall = ''
+    rm -r $out/etc/ofono
+    ln -s /etc/ofono $out/etc/ofono
+  '';
+
+  enableParallelBuilding = true;
+  enableParallelChecking = false;
+
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Infrastructure for building mobile telephony (GSM/UMTS) applications";
     homepage = "https://01.org/ofono";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/olsrd/default.nix b/pkgs/tools/networking/olsrd/default.nix
index bc5a0358019..4fb8892ec02 100644
--- a/pkgs/tools/networking/olsrd/default.nix
+++ b/pkgs/tools/networking/olsrd/default.nix
@@ -1,14 +1,25 @@
-{ stdenv, fetchurl, bison, flex }:
+{ lib, stdenv, fetchFromGitHub, fetchpatch, bison, flex }:
 
 stdenv.mkDerivation rec {
   pname = "olsrd";
-  version = "0.9.6.1";
+  version = "0.9.8";
 
-  src = fetchurl {
-    url = "http://www.olsr.org/releases/0.9/${pname}-${version}.tar.bz2";
-    sha256 = "9cac290e9bff5fc7422110b9ccd972853f10962c962d2f31a63de9c6d1520612";
+  src = fetchFromGitHub {
+    owner = "OLSR";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1xk355dm5pfjil1j4m724vkdnc178lv6hi6s1g0xgpd59avbx90j";
   };
 
+  patches = [
+    # remove if there's ever an upstream release that incorporates
+    # https://github.com/OLSR/olsrd/pull/87
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/openwrt-routing/packages/b3897386771890ba1b15f672c2fed58630beedef/olsrd/patches/011-bison.patch";
+      sha256 = "04cl4b8dpr1yjs7wa94jcszmkdzpnrn719a5m9nhm7lvfrn1rzd0";
+    })
+  ];
+
   buildInputs = [ bison flex ];
 
   preConfigure = ''
@@ -17,9 +28,9 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "An adhoc wireless mesh routing daemon";
-    license = stdenv.lib.licenses.bsd3;
+    license = lib.licenses.bsd3;
     homepage = "http://olsr.org/";
-    maintainers = with stdenv.lib.maintainers; [viric];
-    platforms = with stdenv.lib.platforms; linux;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/networking/oneshot/default.nix b/pkgs/tools/networking/oneshot/default.nix
index f02370ab69d..48c20643580 100644
--- a/pkgs/tools/networking/oneshot/default.nix
+++ b/pkgs/tools/networking/oneshot/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "oneshot";
-  version = "1.2.0";
+  version = "1.4.1";
 
   src = fetchFromGitHub {
     owner = "raphaelreyna";
     repo = "oneshot";
     rev = "v${version}";
-    sha256 = "11xmvqj7md970rjhkg1zj2w6yqpw6cj83aw37a82sfdn90kyhg9d";
+    sha256 = "sha256-UD67xYBb1rvGMSPurte5z2Hcd7+JtXDPbgp3BVBdLuk=";
   };
 
-  vendorSha256 = "1cxr96yrrmz37r542mc5376jll9lqjqm18k8761h9jqfbzmh9rkp";
+  vendorSha256 = "sha256-d+YE618OywSDOWiiULHENFEqzRmFVUFKPuPXnL1JubM=";
 
   doCheck = false;
 
diff --git a/pkgs/tools/networking/ookla-speedtest/default.nix b/pkgs/tools/networking/ookla-speedtest/default.nix
new file mode 100644
index 00000000000..200b488cf71
--- /dev/null
+++ b/pkgs/tools/networking/ookla-speedtest/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl }:
+
+let
+  pname = "ookla-speedtest";
+  version = "1.0.0";
+
+  srcs = {
+    x86_64-linux = fetchurl {
+      url = "https://install.speedtest.net/app/cli/${pname}-${version}-x86_64-linux.tgz";
+      sha256 = "sha256-X+ICjw1EJ+T0Ix2fnPcOZpG7iQpwY211Iy/k2XBjMWg=";
+    };
+    aarch64-linux = fetchurl {
+      url = "https://install.speedtest.net/app/cli/${pname}-${version}-aarch64-linux.tgz";
+      sha256 = "sha256-BzaE3DSQUIygGwTFhV4Ez9eX/tM/bqam7cJt+8b2qp4=";
+    };
+  };
+in
+
+stdenv.mkDerivation rec {
+  inherit pname version;
+
+  src = srcs.${stdenv.hostPlatform.system};
+
+  setSourceRoot = ''
+    sourceRoot=$PWD
+  '';
+
+  dontBuild = true;
+  dontConfigure = true;
+
+  installPhase = ''
+    install -D speedtest $out/bin/speedtest
+    install -D speedtest.5 $out/share/man/man5/speedtest.5
+  '';
+
+  meta = with lib; {
+    description = "Command line internet speedtest tool by Ookla";
+    homepage = "https://www.speedtest.net/apps/cli";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ kranzes ];
+    platforms = lib.attrNames srcs;
+  };
+}
diff --git a/pkgs/tools/networking/openapi-generator-cli/default.nix b/pkgs/tools/networking/openapi-generator-cli/default.nix
index 2b09fe901d0..34d2c22fb24 100644
--- a/pkgs/tools/networking/openapi-generator-cli/default.nix
+++ b/pkgs/tools/networking/openapi-generator-cli/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchurl, jre, makeWrapper }:
+{ callPackage, lib, stdenv, fetchurl, jre, makeWrapper }:
 
-stdenv.mkDerivation rec {
-  version = "4.2.2";
+let this = stdenv.mkDerivation rec {
+  version = "5.1.0";
   pname = "openapi-generator-cli";
 
   jarfilename = "${pname}-${version}.jar";
@@ -12,23 +12,31 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "mirror://maven/org/openapitools/${pname}/${version}/${jarfilename}";
-    sha256 = "1pafv432ll3pp52580pbnk0gnrm6byl5fkrf1rarhxfkpkr82yif";
+    sha256 = "06dvy4pwgpyf209n0b27qwkjj7zlgadg2czwxapy94fd1wpq9yb2";
   };
 
-  phases = [ "installPhase" ];
+  dontUnpack = true;
 
   installPhase = ''
+    runHook preInstall
+
     install -D "$src" "$out/share/java/${jarfilename}"
 
     makeWrapper ${jre}/bin/java $out/bin/${pname} \
       --add-flags "-jar $out/share/java/${jarfilename}"
+
+    runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
   };
-}
 
+  passthru.tests.example = callPackage ./example.nix {
+    openapi-generator-cli = this;
+  };
+};
+in this
diff --git a/pkgs/tools/networking/openapi-generator-cli/example.nix b/pkgs/tools/networking/openapi-generator-cli/example.nix
new file mode 100644
index 00000000000..f59173b9744
--- /dev/null
+++ b/pkgs/tools/networking/openapi-generator-cli/example.nix
@@ -0,0 +1,31 @@
+{ openapi-generator-cli, fetchurl, runCommand }:
+
+runCommand "openapi-generator-cli-test" {
+  nativeBuildInputs = [ openapi-generator-cli ];
+  petstore = fetchurl {
+    url = "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/14c0908becbccd78252be49bd92be8c53cd2b9e3/examples/v3.0/petstore.yaml";
+    sha256 = "sha256:1mgdbzv42alv0b1a18dqbabqyvyhrg3brynr5hqsrm3qljfzaq5b";
+  };
+  config = builtins.toJSON {
+    elmVersion = "0.19";
+    elmPrefixCustomTypeVariants = false;
+  };
+  passAsFile = [ "config" ];
+} ''
+  openapi-generator-cli generate \
+    --input-spec $petstore \
+    --enable-post-process-file \
+    --generator-name elm \
+    --config "$config" \
+    --additional-properties elmEnableCustomBasePaths=true \
+    --output "$out" \
+    ;
+  find $out
+  echo >&2 'Looking for some keywords'
+  set -x
+  grep 'module Api.Request.Pets' $out/src/Api/Request/Pets.elm
+  grep 'createPets' $out/src/Api/Request/Pets.elm
+  grep '"limit"' $out/src/Api/Request/Pets.elm
+  set +x
+  echo "Looks OK!"
+''
diff --git a/pkgs/tools/networking/openapi-generator-cli/unstable.nix b/pkgs/tools/networking/openapi-generator-cli/unstable.nix
index f5d71fb8e85..33eb33e10b0 100644
--- a/pkgs/tools/networking/openapi-generator-cli/unstable.nix
+++ b/pkgs/tools/networking/openapi-generator-cli/unstable.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchurl, jre, makeWrapper }:
+{ callPackage, lib, stdenv, fetchurl, jre, makeWrapper }:
 
-stdenv.mkDerivation rec {
-  version = "5.0.0-2020-02-04";
+let this = stdenv.mkDerivation rec {
+  version = "6.0.0-2021-01-18";  # Also update the fetchurl link
   pname = "openapi-generator-cli";
 
   jarfilename = "${pname}-${version}.jar";
@@ -11,24 +11,32 @@ stdenv.mkDerivation rec {
   ];
 
   src = fetchurl {
-    url = "https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-cli/5.0.0-SNAPSHOT/openapi-generator-cli-5.0.0-20200204.091421-37.jar";
-    sha256 = "0swv976fcr2z8g53avr0r706c31xacb2dlnl8b4c8mzmi49byy7k";
+    url = "https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-cli/6.0.0-SNAPSHOT/openapi-generator-cli-6.0.0-20210118.082537-4.jar";
+    sha256 = "1ji3yw9dp4srlgqxvb21vrcp2bzj4himxsmp8l8zid9nxsc1m71x";
   };
 
-  phases = [ "installPhase" ];
+  dontUnpack = true;
 
   installPhase = ''
+    runHook preInstall
+
     install -D "$src" "$out/share/java/${jarfilename}"
 
     makeWrapper ${jre}/bin/java $out/bin/${pname} \
       --add-flags "-jar $out/share/java/${jarfilename}"
+
+    runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
   };
-}
 
+  passthru.tests.example = callPackage ./example.nix {
+    openapi-generator-cli = this;
+  };
+};
+in this
diff --git a/pkgs/tools/networking/openconnect/default.nix b/pkgs/tools/networking/openconnect/default.nix
index 11f9fdc0fd8..0e1da29320f 100644
--- a/pkgs/tools/networking/openconnect/default.nix
+++ b/pkgs/tools/networking/openconnect/default.nix
@@ -1,41 +1,56 @@
-{ stdenv, fetchurl, pkgconfig, openssl ? null, gnutls ? null, gmp, libxml2, stoken, zlib, fetchgit, darwin } :
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, openssl ? null
+, gnutls ? null
+, gmp
+, libxml2
+, stoken
+, zlib
+, vpnc-scripts
+, PCSC
+, head ? false
+  , fetchFromGitLab
+  , autoreconfHook
+}:
 
 assert (openssl != null) == (gnutls == null);
 
-let vpnc = fetchgit {
-  url = "git://git.infradead.org/users/dwmw2/vpnc-scripts.git";
-  rev = "c0122e891f7e033f35f047dad963702199d5cb9e";
-  sha256 = "11b1ls012mb704jphqxjmqrfbbhkdjb64j2q4k8wb5jmja8jnd14";
-};
+stdenv.mkDerivation rec {
+  pname = "openconnect${lib.optionalString head "-head"}";
+  version = if head then "2021-05-05" else "8.10";
 
-in stdenv.mkDerivation rec {
-  pname = "openconnect";
-  version = "8.10";
-
-  src = fetchurl {
-    urls = [
-      "ftp://ftp.infradead.org/pub/openconnect/${pname}-${version}.tar.gz"
-    ];
-    sha256 = "1cdsx4nsrwawbsisfkldfc9i4qn60g03vxb13nzppr2br9p4rrih";
-  };
+  src =
+    if head then fetchFromGitLab {
+      owner = "openconnect";
+      repo = "openconnect";
+      rev = "684f6db1aef78e61e01f511c728bf658c30b9114";
+      sha256 = "0waclawcymgd8sq9xbkn2q8mnqp4pd0gpyv5wrnb7i0nsv860wz8";
+    }
+    else fetchurl {
+      url = "ftp://ftp.infradead.org/pub/openconnect/${pname}-${version}.tar.gz";
+      sha256 = "1cdsx4nsrwawbsisfkldfc9i4qn60g03vxb13nzppr2br9p4rrih";
+    };
 
   outputs = [ "out" "dev" ];
-  
+
   configureFlags = [
-    "--with-vpnc-script=${vpnc}/vpnc-script"
+    "--with-vpnc-script=${vpnc-scripts}/bin/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 ];
+    ++ lib.optional stdenv.isDarwin PCSC;
+  nativeBuildInputs = [ pkg-config ]
+    ++ lib.optional head autoreconfHook;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "VPN Client for Cisco's AnyConnect SSL VPN";
-    homepage = "http://www.infradead.org/openconnect/";
-    license = licenses.lgpl21;
+    homepage = "https://www.infradead.org/openconnect/";
+    license = licenses.lgpl21Only;
     maintainers = with maintainers; [ pradeepchhetri tricktron ];
-    platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
+    platforms = lib.platforms.linux ++ lib.platforms.darwin;
   };
 }
diff --git a/pkgs/tools/networking/openconnect_pa/default.nix b/pkgs/tools/networking/openconnect_pa/default.nix
deleted file mode 100644
index 4b108dc303e..00000000000
--- a/pkgs/tools/networking/openconnect_pa/default.nix
+++ /dev/null
@@ -1,40 +0,0 @@
-{ 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/${pkgconfig.targetPrefix}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/pkgs/tools/networking/openfortivpn/default.nix b/pkgs/tools/networking/openfortivpn/default.nix
index a5e46c6bc57..e02782cccbf 100644
--- a/pkgs/tools/networking/openfortivpn/default.nix
+++ b/pkgs/tools/networking/openfortivpn/default.nix
@@ -1,34 +1,48 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, openssl, ppp, pkgconfig }:
+{ stdenv, lib, fetchFromGitHub, autoreconfHook, pkg-config
+, openssl, ppp
+, systemd ? null }:
 
-with stdenv.lib;
+let
+  withSystemd = stdenv.isLinux && !(systemd == null);
 
-let repo = "openfortivpn";
-    version = "1.14.1";
-
-in stdenv.mkDerivation {
-  name = "${repo}-${version}";
+in
+stdenv.mkDerivation rec {
+  pname = "openfortivpn";
+  version = "1.16.0";
 
   src = fetchFromGitHub {
     owner = "adrienverge";
-    inherit repo;
+    repo = pname;
     rev = "v${version}";
-    sha256 = "1r9lp19fmqx9dw33j5967ydijbnacmr80mqnhbbxyqiw4k5c10ds";
+    sha256 = "sha256-wijP9VGKXlxCAU3xN6+cv9+NGwBS55ql8WsZZ592b/k=";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
-  buildInputs = [ openssl ppp ];
+  # we cannot write the config file to /etc and as we don't need the file, so drop it
+  postPatch = ''
+    substituteInPlace Makefile.am \
+      --replace '$(DESTDIR)$(confdir)' /tmp
+  '';
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
-  NIX_CFLAGS_COMPILE = "-Wno-error=unused-function";
+  buildInputs = [
+    openssl ppp
+  ]
+  ++ lib.optional withSystemd systemd;
 
-  configureFlags = [ "--with-pppd=${ppp}/bin/pppd" ];
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--with-pppd=${ppp}/bin/pppd"
+  ]
+  ++ lib.optional withSystemd "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system";
 
   enableParallelBuilding = true;
 
-  meta = {
+  meta = with lib; {
     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;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ madjar ];
+    platforms = with platforms; linux ++ darwin;
   };
 }
diff --git a/pkgs/tools/networking/openntpd/default.nix b/pkgs/tools/networking/openntpd/default.nix
index 7cbba9bfbf6..e6703c748fc 100644
--- a/pkgs/tools/networking/openntpd/default.nix
+++ b/pkgs/tools/networking/openntpd/default.nix
@@ -1,15 +1,15 @@
-{ stdenv, fetchurl, libressl
+{ lib, stdenv, fetchurl, libressl
 , privsepPath ? "/var/empty"
 , privsepUser ? "ntp"
 }:
 
 stdenv.mkDerivation rec {
   pname = "openntpd";
-  version = "6.2p3";
+  version = "6.8p1";
 
   src = fetchurl {
     url = "mirror://openbsd/OpenNTPD/${pname}-${version}.tar.gz";
-    sha256 = "0fn12i4kzsi0zkr4qp3dp9bycmirnfapajqvdfx02zhr4hanj0kv";
+    sha256 = "0ijsylc7a4jlpxsqa0jq1w1c7333id8pcakzl7a5749ria1xp0l5";
   };
 
   prePatch = ''
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
     "localstatedir=\${TMPDIR}"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.openntpd.org/";
     license = licenses.bsd3;
     description = "OpenBSD NTP daemon (Debian port)";
diff --git a/pkgs/tools/networking/openresolv/default.nix b/pkgs/tools/networking/openresolv/default.nix
index 58985f73f30..f486c903c5d 100644
--- a/pkgs/tools/networking/openresolv/default.nix
+++ b/pkgs/tools/networking/openresolv/default.nix
@@ -1,15 +1,15 @@
-{ stdenv, fetchurl, makeWrapper, coreutils }:
+{ lib, stdenv, fetchurl, makeWrapper, coreutils }:
 
 stdenv.mkDerivation rec {
   pname = "openresolv";
-  version = "3.11.0";
+  version = "3.12.0";
 
   src = fetchurl {
     url = "mirror://roy/openresolv/${pname}-${version}.tar.xz";
-    sha256 = "0g7wb2880hbr0x99n73m7fgjm7lcdbpxfy2i620zxcq73qfrvspa";
+    sha256 = "sha256-QrMFCOhXoihTXGMeqsk2hi2G7KaMFLXAvzh7oXa5G5c=";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
   configurePhase =
     ''
@@ -33,8 +33,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.bsd2;
+    maintainers = [ lib.maintainers.eelco ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/opensm/default.nix b/pkgs/tools/networking/opensm/default.nix
index 3fe9f87d658..a21fe68e816 100644
--- a/pkgs/tools/networking/opensm/default.nix
+++ b/pkgs/tools/networking/opensm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoconf, automake, libtool, bison, flex, rdma-core }:
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, bison, flex, rdma-core }:
 
 stdenv.mkDerivation rec {
   pname = "opensm";
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Infiniband subnet manager";
     homepage = "https://www.openfabrics.org/";
     license = licenses.gpl2; # dual licensed as 2-clause BSD
diff --git a/pkgs/tools/networking/opensnitch/daemon.nix b/pkgs/tools/networking/opensnitch/daemon.nix
new file mode 100644
index 00000000000..d7359ea0e70
--- /dev/null
+++ b/pkgs/tools/networking/opensnitch/daemon.nix
@@ -0,0 +1,50 @@
+{ buildGoModule
+, fetchFromGitHub
+, fetchpatch
+, pkg-config
+, libnetfilter_queue
+, libnfnetlink
+, lib
+}:
+
+buildGoModule rec {
+  pname = "opensnitch";
+  version = "1.3.6";
+
+  src = fetchFromGitHub {
+    owner = "evilsocket";
+    repo = "opensnitch";
+    rev = "v${version}";
+    sha256 = "sha256-Cgo+bVQQeUZuYYhA1WSqlLyQQGAeXbbNno9LS7oNvhI=";
+  };
+
+  patches = [
+    # https://github.com/evilsocket/opensnitch/pull/384 don't require
+    # a configuration file in /etc
+    (fetchpatch {
+      name = "dont-require-config-in-etc.patch";
+      url = "https://github.com/evilsocket/opensnitch/commit/8a3f63f36aa92658217bbbf46d39e6d20b2c0791.patch";
+      sha256 = "sha256-WkwjKTQZppR0nqvRO4xiQoKZ307NvuUwoRx+boIpuTg=";
+    })
+  ];
+
+  modRoot = "daemon";
+
+  postBuild = ''
+    mv $GOPATH/bin/daemon $GOPATH/bin/opensnitchd
+  '';
+
+  vendorSha256 = "sha256-LMwQBFkHg1sWIUITLOX2FZi5QUfOivvrkcl9ELO3Trk=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libnetfilter_queue libnfnetlink ];
+
+  meta = with lib; {
+    description = "An application firewall";
+    homepage = "https://github.com/evilsocket/opensnitch/wiki";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.raboof ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/networking/opensnitch/ui.nix b/pkgs/tools/networking/opensnitch/ui.nix
new file mode 100644
index 00000000000..69b26492282
--- /dev/null
+++ b/pkgs/tools/networking/opensnitch/ui.nix
@@ -0,0 +1,46 @@
+{ python3Packages
+, fetchFromGitHub
+, wrapQtAppsHook
+, lib
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "opensnitch-ui";
+  version = "1.3.6";
+
+  src = fetchFromGitHub {
+    owner = "evilsocket";
+    repo = "opensnitch";
+    rev = "v${version}";
+    sha256 = "sha256-Cgo+bVQQeUZuYYhA1WSqlLyQQGAeXbbNno9LS7oNvhI=";
+  };
+
+  nativeBuildInputs = [ wrapQtAppsHook ];
+
+  propagatedBuildInputs = with python3Packages; [
+    grpcio-tools
+    pyqt5
+    unidecode
+    unicode-slugify
+    pyinotify
+  ];
+
+  preConfigure = ''
+    cd ui
+  '';
+
+  preCheck = ''
+    export PYTHONPATH=opensnitch:$PYTHONPATH
+  '';
+
+  dontWrapQtApps = true;
+  makeWrapperArgs = [ "\${qtWrapperArgs[@]}" ];
+
+  meta = with lib; {
+    description = "An application firewall";
+    homepage = "https://github.com/evilsocket/opensnitch/wiki";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.raboof ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/networking/openssh/common.nix b/pkgs/tools/networking/openssh/common.nix
new file mode 100644
index 00000000000..40011a14c89
--- /dev/null
+++ b/pkgs/tools/networking/openssh/common.nix
@@ -0,0 +1,127 @@
+{ pname
+, version
+, extraDesc ? ""
+, src
+, extraPatches ? []
+, extraNativeBuildInputs ? []
+, extraMeta ? {}
+}:
+
+{ lib, stdenv
+# This *is* correct, though unusual. as a way of getting krb5-config from the
+# package without splicing See: https://github.com/NixOS/nixpkgs/pull/107606
+, pkgs
+, fetchurl
+, fetchpatch
+, zlib
+, openssl
+, libedit
+, pkg-config
+, pam
+, etcDir ? null
+, withKerberos ? !(stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64)
+, libkrb5
+, libfido2
+, nixosTests
+, withFIDO ? stdenv.hostPlatform.isUnix && !stdenv.hostPlatform.isMusl
+, linkOpenssl ? true
+}:
+
+with lib;
+stdenv.mkDerivation rec {
+  inherit pname version src;
+
+  patches = [
+    ./locale_archive.patch
+
+    # See discussion in https://github.com/NixOS/nixpkgs/pull/16966
+    ./dont_create_privsep_path.patch
+  ] ++ extraPatches;
+
+  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 = [ pkg-config ]
+    # This is not the same as the libkrb5 from the inputs! pkgs.libkrb5 is
+    # needed here to access krb5-config in order to cross compile. See:
+    # https://github.com/NixOS/nixpkgs/pull/107606
+    ++ optional withKerberos pkgs.libkrb5
+    ++ extraNativeBuildInputs;
+  buildInputs = [ zlib openssl libedit ]
+    ++ optional withFIDO libfido2
+    ++ optional withKerberos libkrb5
+    ++ optional stdenv.isLinux pam;
+
+  preConfigure = ''
+    # Setting LD causes `configure' and `make' to disagree about which linker
+    # to use: `configure' wants `gcc', but `make' wants `ld'.
+    unset LD
+  ''
+  # Upstream build system does not support static build, so we fall back
+  # on fragile patching of configure script.
+  #
+  # libedit is found by pkg-config, but without --static flag, required
+  # to get also transitive dependencies for static linkage, hence sed
+  # expression.
+  #
+  # Kerberos can be found either by krb5-config or by fall-back shell
+  # code in openssh's configure.ac. Neither of them support static
+  # build, but patching code for krb5-config is simpler, so to get it
+  # into PATH, libkrb5.dev is added into buildInputs.
+  + optionalString stdenv.hostPlatform.isStatic ''
+    sed -i "s,PKGCONFIG --libs,PKGCONFIG --libs --static,g" configure
+    sed -i 's#KRB5CONF --libs`#KRB5CONF --libs` -lkrb5support -lkeyutils#g' configure
+    sed -i 's#KRB5CONF --libs gssapi`#KRB5CONF --libs gssapi` -lkrb5support -lkeyutils#g' configure
+  '';
+
+  # 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 stdenv.isLinux then "--with-pam" else "--without-pam")
+  ] ++ optional (etcDir != null) "--sysconfdir=${etcDir}"
+    ++ optional withFIDO "--with-security-key-builtin=yes"
+    ++ optional withKerberos (assert libkrb5 != null; "--with-kerberos5=${libkrb5}")
+    ++ 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"
+  ];
+
+  passthru.tests = {
+    borgbackup-integration = nixosTests.borgbackup;
+  };
+
+  meta = {
+    description = "An implementation of the SSH protocol${extraDesc}";
+    homepage = "https://www.openssh.com/";
+    changelog = "https://www.openssh.com/releasenotes.html";
+    license = licenses.bsd2;
+    platforms = platforms.unix ++ platforms.windows;
+    maintainers = with maintainers; [ eelco aneeshusa ];
+  } // extraMeta;
+}
diff --git a/pkgs/tools/networking/openssh/copyid.nix b/pkgs/tools/networking/openssh/copyid.nix
new file mode 100644
index 00000000000..71baa6a23f1
--- /dev/null
+++ b/pkgs/tools/networking/openssh/copyid.nix
@@ -0,0 +1,11 @@
+{ runCommandNoCC, openssh }:
+
+runCommandNoCC "ssh-copy-id-${openssh.version}" {
+  meta = openssh.meta // {
+    description = "A tool to copy SSH public keys to a remote machine";
+    priority = (openssh.meta.priority or 0) - 1;
+  };
+} ''
+  install -Dm 755 {${openssh},$out}/bin/ssh-copy-id
+  install -Dm 644 {${openssh},$out}/share/man/man1/ssh-copy-id.1.gz
+''
diff --git a/pkgs/tools/networking/openssh/default.nix b/pkgs/tools/networking/openssh/default.nix
index 1748a2d21d0..4cc943fc75f 100644
--- a/pkgs/tools/networking/openssh/default.nix
+++ b/pkgs/tools/networking/openssh/default.nix
@@ -1,119 +1,71 @@
-{ stdenv
-, fetchurl
-, fetchpatch
-, zlib
-, openssl
-, libedit
-, pkgconfig
-, pam
-, autoreconfHook
-, etcDir ? null
-, hpnSupport ? false
-, withKerberos ? true
-, withGssapiPatches ? false
-, kerberos
-, libfido2
-, withFIDO ? stdenv.hostPlatform.isUnix && !stdenv.hostPlatform.isMusl
-, linkOpenssl ? true
-}:
-
+{ callPackage, fetchurl, fetchpatch, autoreconfHook }:
 let
+  common = opts: callPackage (import ./common.nix opts) {};
+in {
+
+  openssh = common rec {
+    pname = "openssh";
+    version = "8.6p1";
 
-  version = "8.3p1";
+    src = fetchurl {
+      url = "mirror://openbsd/OpenSSH/portable/openssh-${version}.tar.gz";
+      sha256 = "1bnpivgk98h2f9afpp88jv6g9ps83vnpxd031n2jqxi12vdf9rn3";
+    };
 
-  # **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%25${version}-1/debian/patches/gssapi.patch";
-    sha256 = "0j22ccg6msyi88mpsb6x0il5cg8v2b7qdah57ninbwx5isyld80l";
+    extraPatches = [ ./ssh-keysign-8.5.patch ];
   };
 
-in
-with stdenv.lib;
-stdenv.mkDerivation rec {
-  pname = "openssh";
-  inherit version;
-
-  src = if hpnSupport then
-      fetchurl {
-        url = "https://github.com/rapier1/openssh-portable/archive/hpn-KitchenSink-${replaceStrings [ "." "p" ] [ "_" "_P" ] version}.tar.gz";
-        sha256 = "0lwr7xzhy8m4y0vzi1a78ddhag3qp6cba0c37mnhivbhb67dkywp";
-      }
-    else
-      fetchurl {
-        url = "mirror://openbsd/OpenSSH/portable/${pname}-${version}.tar.gz";
-        sha256 = "1cl74ghi9y21dc3f4xa0qamb7dhwacbynh1ks9syprrg8zhgpgpj";
-      };
-
-  patches =
-    [
-      ./locale_archive.patch
-
-      # See discussion in https://github.com/NixOS/nixpkgs/pull/16966
-      ./dont_create_privsep_path.patch
-
-      ./ssh-keysign.patch
-    ]
-    ++ 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 withFIDO libfido2
-    ++ 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 withFIDO "--with-security-key-builtin=yes"
-    ++ 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 = {
-    description = "An implementation of the SSH protocol";
-    homepage = "https://www.openssh.com/";
-    changelog = "https://www.openssh.com/releasenotes.html";
-    license = stdenv.lib.licenses.bsd2;
-    platforms = platforms.unix ++ platforms.windows;
-    maintainers = with maintainers; [ eelco aneeshusa ];
+  openssh_hpn = common rec {
+    pname = "openssh-with-hpn";
+    version = "8.4p1";
+    extraDesc = " with high performance networking patches";
+
+    src = fetchurl {
+      url = "https://github.com/rapier1/openssh-portable/archive/hpn-KitchenSink-${builtins.replaceStrings [ "." "p" ] [ "_" "_P" ] version}.tar.gz";
+      sha256 = "1x2afjy1isslbg7qlvhhs4zhj2c8q2h1ljz0fc5b4h9pqcm9j540";
+    };
+
+    extraPatches = [
+      ./ssh-keysign-8.4.patch
+
+      # See https://github.com/openssh/openssh-portable/pull/206
+      ./ssh-copy-id-fix-eof.patch
+    ];
+
+    extraNativeBuildInputs = [ autoreconfHook ];
+
+    extraMeta.knownVulnerabilities = [
+      "CVE-2021-28041"
+    ];
+  };
+
+  openssh_gssapi = common rec {
+    pname = "openssh-with-gssapi";
+    version = "8.4p1";
+    extraDesc = " with GSSAPI support";
+
+    src = fetchurl {
+      url = "mirror://openbsd/OpenSSH/portable/openssh-${version}.tar.gz";
+      sha256 = "091b3pxdlj47scxx6kkf4agkx8c8sdacdxx8m1dw1cby80pd40as";
+    };
+
+    extraPatches = [
+      ./ssh-keysign-8.4.patch
+
+      # See https://github.com/openssh/openssh-portable/pull/206
+      ./ssh-copy-id-fix-eof.patch
+
+      (fetchpatch {
+        name = "openssh-gssapi.patch";
+        url = "https://salsa.debian.org/ssh-team/openssh/raw/debian/1%25${version}-2/debian/patches/gssapi.patch";
+        sha256 = "1z1ckzimlkm1dmr9f5fqjnjg28gsqcwx6xka0klak857548d2lp2";
+      })
+    ];
+
+    extraNativeBuildInputs = [ autoreconfHook ];
+
+    extraMeta.knownVulnerabilities = [
+      "CVE-2021-28041"
+    ];
   };
 }
diff --git a/pkgs/tools/networking/openssh/ssh-copy-id-fix-eof.patch b/pkgs/tools/networking/openssh/ssh-copy-id-fix-eof.patch
new file mode 100644
index 00000000000..4ba2b562f55
--- /dev/null
+++ b/pkgs/tools/networking/openssh/ssh-copy-id-fix-eof.patch
@@ -0,0 +1,21 @@
+diff --git a/contrib/ssh-copy-id b/contrib/ssh-copy-id
+index 392f64f..a769077 100644
+--- a/contrib/ssh-copy-id
++++ b/contrib/ssh-copy-id
+@@ -247,7 +247,7 @@ installkeys_sh() {
+   #    the -z `tail ...` checks for a trailing newline. The echo adds one if was missing
+   #    the cat adds the keys we're getting via STDIN
+   #    and if available restorecon is used to restore the SELinux context
+-  INSTALLKEYS_SH=$(tr '\t\n' ' ' <<-EOF)
++  INSTALLKEYS_SH=$(tr '\t\n' ' ' <<-EOF
+ 	cd;
+ 	umask 077;
+ 	mkdir -p $(dirname "${AUTH_KEY_FILE}") &&
+@@ -258,6 +258,7 @@ installkeys_sh() {
+ 	  restorecon -F .ssh ${AUTH_KEY_FILE};
+ 	fi
+ EOF
++  )
+ 
+   # to defend against quirky remote shells: use 'exec sh -c' to get POSIX;
+   printf "exec sh -c '%s'" "${INSTALLKEYS_SH}"
diff --git a/pkgs/tools/networking/openssh/ssh-keysign.patch b/pkgs/tools/networking/openssh/ssh-keysign-8.4.patch
index 7258f4a4db1..7258f4a4db1 100644
--- a/pkgs/tools/networking/openssh/ssh-keysign.patch
+++ b/pkgs/tools/networking/openssh/ssh-keysign-8.4.patch
diff --git a/pkgs/tools/networking/openssh/ssh-keysign-8.5.patch b/pkgs/tools/networking/openssh/ssh-keysign-8.5.patch
new file mode 100644
index 00000000000..67c45b6b7d8
--- /dev/null
+++ b/pkgs/tools/networking/openssh/ssh-keysign-8.5.patch
@@ -0,0 +1,24 @@
+diff --git a/pathnames.h b/pathnames.h
+index cb44caa4..354fdf05 100644
+--- a/pathnames.h
++++ b/pathnames.h
+@@ -124,7 +124,7 @@
+ 
+ /* Location of ssh-keysign for hostbased authentication */
+ #ifndef _PATH_SSH_KEY_SIGN
+-#define _PATH_SSH_KEY_SIGN		"/usr/libexec/ssh-keysign"
++#define _PATH_SSH_KEY_SIGN		"ssh-keysign"
+ #endif
+ 
+ /* Location of ssh-pkcs11-helper to support keys in tokens */
+--- a/sshconnect2.c
++++ b/sshconnect2.c
+@@ -2021,7 +2021,7 @@
+ 
+ 		debug3_f("[child] pid=%ld, exec %s",
+ 		    (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_f("exec(%s): %s", _PATH_SSH_KEY_SIGN,
+ 		    strerror(errno));
+ 	}
diff --git a/pkgs/tools/networking/openvpn/default.nix b/pkgs/tools/networking/openvpn/default.nix
index c5a15c2f87a..46375b60fe4 100644
--- a/pkgs/tools/networking/openvpn/default.nix
+++ b/pkgs/tools/networking/openvpn/default.nix
@@ -1,14 +1,20 @@
-{ stdenv, fetchurl, fetchpatch, pkgconfig, makeWrapper
-, iproute, lzo, openssl, pam
-, useSystemd ? stdenv.isLinux, systemd ? null, utillinux ? null
-, pkcs11Support ? false, pkcs11helper ? null,
+{ lib, stdenv
+, fetchurl
+, pkg-config
+, makeWrapper
+, runtimeShell
+, iproute2
+, lzo
+, openssl
+, pam
+, useSystemd ? stdenv.isLinux
+, systemd
+, util-linux
+, pkcs11Support ? false
+, pkcs11helper
 }:
 
-assert useSystemd -> (systemd != null);
-assert pkcs11Support -> (pkcs11helper != null);
-
-with stdenv.lib;
-
+with lib;
 let
   # Check if the script needs to have other binaries wrapped when changing this.
   update-resolved = fetchurl {
@@ -16,49 +22,68 @@ let
     sha256 = "021qzv1k0zxgv1rmyfpqj3zlzqr28xa7zff1n7vrbjk36ijylpsc";
   };
 
-in stdenv.mkDerivation rec {
-  pname = "openvpn";
-  version = "2.4.9";
+  generic = { version, sha256 }:
+    let
+      withIpRoute = stdenv.isLinux && (versionOlder version "2.5");
+    in
+    stdenv.mkDerivation
+      rec {
+        pname = "openvpn";
+        inherit version;
 
-  src = fetchurl {
-    url = "https://swupdate.openvpn.net/community/releases/${pname}-${version}.tar.xz";
-    sha256 = "1qpbllwlha7cffsd5dlddb8rl22g9rar5zflkz1wrcllhvfkl7v4";
-  };
+        src = fetchurl {
+          url = "https://swupdate.openvpn.net/community/releases/${pname}-${version}.tar.xz";
+          inherit sha256;
+        };
 
-  nativeBuildInputs = [ makeWrapper pkgconfig ];
+        nativeBuildInputs = [ makeWrapper pkg-config ];
 
-  buildInputs = [ lzo openssl ]
-                  ++ optionals stdenv.isLinux [ pam iproute ]
-                  ++ optional useSystemd systemd
-                  ++ optional pkcs11Support pkcs11helper;
+        buildInputs = [ lzo openssl ]
+          ++ optional stdenv.isLinux pam
+          ++ optional withIpRoute iproute2
+          ++ optional useSystemd systemd
+          ++ optional pkcs11Support pkcs11helper;
 
-  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";
+        configureFlags = optionals withIpRoute [
+          "--enable-iproute2"
+          "IPROUTE=${iproute2}/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 -Dm555 ${update-resolved} $out/libexec/update-systemd-resolved
-    wrapProgram $out/libexec/update-systemd-resolved \
-      --prefix PATH : ${makeBinPath [ stdenv.shell iproute systemd utillinux ]}
-  '';
+        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 -Dm555 ${update-resolved} $out/libexec/update-systemd-resolved
+          wrapProgram $out/libexec/update-systemd-resolved \
+            --prefix PATH : ${makeBinPath [ runtimeShell iproute2 systemd util-linux ]}
+        '';
 
-  enableParallelBuilding = true;
+        enableParallelBuilding = true;
+
+        meta = with lib; {
+          description = "A robust and highly flexible tunneling application";
+          downloadPage = "https://openvpn.net/community-downloads/";
+          homepage = "https://openvpn.net/";
+          license = licenses.gpl2;
+          maintainers = with maintainers; [ viric peterhoeg ];
+          platforms = platforms.unix;
+        };
+      };
+
+in
+{
+  openvpn_24 = generic {
+    version = "2.4.11";
+    sha256 = "06s4m0xvixjhd3azrzbsf4j86kah4xwr2jp6cmcpc7db33rfyyg5";
+  };
 
-  meta = with stdenv.lib; {
-    description = "A robust and highly flexible tunneling application";
-    downloadPage = "https://openvpn.net/community-downloads/";
-    homepage = "https://openvpn.net/";
-    license = licenses.gpl2;
-    maintainers = with maintainers; [ viric ];
-    platforms = platforms.unix;
-    updateWalker = true;
+  openvpn = generic {
+    version = "2.5.2";
+    sha256 = "sha256-sSdDg2kB82Xvr4KrJJOWfhshwh60POmo2hACoXycHcg=";
   };
 }
diff --git a/pkgs/tools/networking/openvpn/openvpn-auth-ldap.nix b/pkgs/tools/networking/openvpn/openvpn-auth-ldap.nix
index bb06479be30..70dacddafc3 100644
--- a/pkgs/tools/networking/openvpn/openvpn-auth-ldap.nix
+++ b/pkgs/tools/networking/openvpn/openvpn-auth-ldap.nix
@@ -1,65 +1,50 @@
-{ stdenv, lib, fetchFromGitHub, fetchpatch,
-  autoreconfHook, re2c, openldap, openvpn, gnustep, check
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, gnustep
+, re2c
+, openldap
+, openssl
+, openvpn
 }:
 
-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}";
+  pname = "openvpn-auth-ldap";
+  version = "2.0.4";
 
   src = fetchFromGitHub {
     owner = "threerings";
-    repo = srcName;
-    rev = "auth-ldap-${srcVersion}";
-    sha256 = "1v635ylzf5x3l3lirf3n6173q1w8g0ssjjkf27qqw98c3iqp63sq";
+    repo = "openvpn-auth-ldap";
+    rev = "auth-ldap-${version}";
+    sha256 = "1j30sygj8nm8wjqxzpb7pfzr3dxqxggswzxd7z5yk7y04c0yp1hb";
   };
 
-  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
+    re2c
+  ];
+
+  buildInputs = [
     openldap
+    openssl
     openvpn
-    re2c
   ];
 
   configureFlags = [
-    "--with-objc-runtime=modern"
+    "--with-objc-runtime=GNU"
     "--with-openvpn=${openvpn}/include"
     "--libdir=$(out)/lib/openvpn"
   ];
 
+  doCheck = true;
+
   preInstall = ''
     mkdir -p $out/lib/openvpn $out/share/doc/openvpn/examples
-    cp README $out/share/doc/openvpn/
+    cp README.md $out/share/doc/openvpn/
     cp auth-ldap.conf $out/share/doc/openvpn/examples/
   '';
 
diff --git a/pkgs/tools/networking/openvpn/openvpn_learnaddress.nix b/pkgs/tools/networking/openvpn/openvpn_learnaddress.nix
index d73b8e911b9..2120679fef3 100644
--- a/pkgs/tools/networking/openvpn/openvpn_learnaddress.nix
+++ b/pkgs/tools/networking/openvpn/openvpn_learnaddress.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, makeWrapper,  coreutils, gawk, utillinux }:
+{ lib, stdenv, fetchgit, makeWrapper,  coreutils, gawk, util-linux }:
 
 stdenv.mkDerivation {
   name = "openvpn-learnaddress-19b03c3";
@@ -9,19 +9,20 @@ stdenv.mkDerivation {
     sha256 = "16pcyvyhwsx34i0cjkkx906lmrwdd9gvznvqdwlad4ha8l8f8z42";
   };
 
-  buildInputs = [ makeWrapper coreutils gawk utillinux ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ coreutils gawk util-linux ];
 
   installPhase = ''
     install -Dm555 ovpn-learnaddress $out/libexec/openvpn/openvpn-learnaddress
 
     wrapProgram $out/libexec/openvpn/openvpn-learnaddress \
-        --prefix PATH : ${stdenv.lib.makeBinPath [ coreutils gawk utillinux ]}
+        --prefix PATH : ${lib.makeBinPath [ coreutils gawk util-linux ]}
   '';
 
   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;
+    maintainers = [ lib.maintainers.offline ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/openvpn/update-resolv-conf.nix b/pkgs/tools/networking/openvpn/update-resolv-conf.nix
index 76d04e6b685..d71ab72901b 100644
--- a/pkgs/tools/networking/openvpn/update-resolv-conf.nix
+++ b/pkgs/tools/networking/openvpn/update-resolv-conf.nix
@@ -24,7 +24,7 @@ in stdenv.mkDerivation {
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/networking/openvpn/update-systemd-resolved.nix b/pkgs/tools/networking/openvpn/update-systemd-resolved.nix
index 4d18372363b..5a34d5a7ffe 100644
--- a/pkgs/tools/networking/openvpn/update-systemd-resolved.nix
+++ b/pkgs/tools/networking/openvpn/update-systemd-resolved.nix
@@ -1,6 +1,6 @@
 { lib, stdenv, fetchFromGitHub
 , makeWrapper
-, iproute, systemd, coreutils, utillinux }:
+, iproute2, systemd, coreutils, util-linux }:
 
 stdenv.mkDerivation rec {
   pname = "update-systemd-resolved";
@@ -21,10 +21,10 @@ stdenv.mkDerivation rec {
 
   installPhase = ''
     wrapProgram $out/libexec/openvpn/update-systemd-resolved \
-      --prefix PATH : ${lib.makeBinPath [ iproute systemd coreutils utillinux ]}
+      --prefix PATH : ${lib.makeBinPath [ iproute2 systemd coreutils util-linux ]}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/networking/p2p/amule/default.nix b/pkgs/tools/networking/p2p/amule/default.nix
index 264c6fd4e16..96bf7656e8a 100644
--- a/pkgs/tools/networking/p2p/amule/default.nix
+++ b/pkgs/tools/networking/p2p/amule/default.nix
@@ -2,69 +2,46 @@
 , 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;
+, fetchFromGitHub
+, stdenv
+, lib
+, cmake
+, zlib
+, wxGTK
+, perl
+, cryptopp
+, libupnp
+, gettext
+, libpng
+, autoreconfHook
+, pkg-config
+, makeWrapper
+, libX11
+}:
 
 stdenv.mkDerivation rec {
   pname = "amule";
-  version = "2.3.2";
+  version = "2.3.3";
 
   src = fetchFromGitHub {
     owner = "amule-project";
     repo = "amule";
     rev = version;
-    sha256 = "010wxm6g9f92x6fympj501zbnjka32rzbx0sk3a2y4zpih5d2nsn";
+    sha256 = "1nm4vxgmisn1b6l3drmz0q04x067j2i8lw5rnf0acaapwlp8qwvi";
   };
 
-  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 ];
+  nativeBuildInputs = [ cmake gettext makeWrapper pkg-config ];
 
   buildInputs = [
-    zlib wxGTK perl cryptopp libupnp
+    zlib wxGTK perl cryptopp.dev 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")
+  cmakeFlags = [
+    "-DBUILD_MONOLITHIC=${if monolithic then "ON" else "OFF"}"
+    "-DBUILD_DAEMON=${if enableDaemon then "ON" else "OFF"}"
+    "-DBUILD_REMOTEGUI=${if client then "ON" else "OFF"}"
+    "-DBUILD_WEBSERVER=${if httpServer then "ON" else "OFF"}"
   ];
 
   # aMule will try to `dlopen' libupnp and libixml, so help it
@@ -91,5 +68,7 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ phreedom ];
     platforms = platforms.unix;
+    # cmake fails: Cannot specify link libraries for target "wxWidgets::ADV" which is not built by this project.
+    broken = enableDaemon;
   };
 }
diff --git a/pkgs/tools/networking/p2p/azureus/default.nix b/pkgs/tools/networking/p2p/azureus/default.nix
index 03737f9af27..1c72be0c510 100644
--- a/pkgs/tools/networking/p2p/azureus/default.nix
+++ b/pkgs/tools/networking/p2p/azureus/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, jdk, swt}:
+{lib, stdenv, fetchurl, jdk, swt}:
 
 stdenv.mkDerivation {
   name = "azureus-2.3.0.6";
@@ -7,10 +7,10 @@ stdenv.mkDerivation {
     url = "http://tarballs.nixos.org/Azureus2.3.0.6.jar";
     sha256 = "1hwrh3n0b0jbpsdk15zrs7pw175418phhmg6pn4xi1bvilxq1wrd";
   };
-#  buildInputs = [unzip];
+
   inherit jdk swt;
 
   meta = {
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/p2p/gtk-gnutella/default.nix b/pkgs/tools/networking/p2p/gtk-gnutella/default.nix
index 710f7dedb99..8d8069bec29 100644
--- a/pkgs/tools/networking/p2p/gtk-gnutella/default.nix
+++ b/pkgs/tools/networking/p2p/gtk-gnutella/default.nix
@@ -1,8 +1,8 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , fetchpatch
 , bison
-, pkgconfig
+, pkg-config
 , gettext
 , desktop-file-utils
 , glib
@@ -17,22 +17,20 @@
 
 stdenv.mkDerivation rec {
   pname = "gtk-gnutella";
-  # NOTE: Please remove hardeningDisable on the next release, see:
-  # https://sourceforge.net/p/gtk-gnutella/bugs/555/#5c19
-  version = "1.2.0";
+  version = "1.2.1";
 
   src = fetchFromGitHub {
     owner = "gtk-gnutella";
     repo = "gtk-gnutella";
     rev = "v${version}";
-    sha256 = "0j596dpajk68bkry0gmpqawsi61rphfciy4vji1dh890jyhkhdgy";
+    sha256 = "sha256-Hk5KPXSJ2s0J/stW3Qgvu6p6RG5VCvuWx1UlMR+3JO4=";
   };
 
   nativeBuildInputs = [
     bison
     desktop-file-utils
     gettext
-    pkgconfig
+    pkg-config
   ];
   buildInputs = [
     glib
@@ -42,7 +40,7 @@ stdenv.mkDerivation rec {
     zlib
   ]
   ++
-    stdenv.lib.optionals (enableGui) [ gtk2 ]
+    lib.optionals (enableGui) [ gtk2 ]
   ;
 
   configureScript = "./build.sh";
@@ -51,18 +49,16 @@ stdenv.mkDerivation rec {
     # See https://sourceforge.net/p/gtk-gnutella/bugs/555/
     "--disable-malloc"
   ]
-    ++ stdenv.lib.optionals (!enableGui) [ "--topless" ]
+    ++ lib.optionals (!enableGui) [ "--topless" ]
   ;
 
-  hardeningDisable = [ "bindnow" "fortify" "pic" "relro" ];
-
   enableParallelBuilding = true;
 
   postInstall = ''
     install -Dm0444 src/${pname}.man $out/share/man/man1/${pname}.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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";
diff --git a/pkgs/tools/networking/p2p/libtorrent-jesec/default.nix b/pkgs/tools/networking/p2p/libtorrent-jesec/default.nix
new file mode 100644
index 00000000000..0fd16f4799d
--- /dev/null
+++ b/pkgs/tools/networking/p2p/libtorrent-jesec/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, cmake, gtest, openssl, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "libtorrent-jesec";
+  version = "0.13.8-r2";
+
+  src = fetchFromGitHub {
+    owner = "jesec";
+    repo = "libtorrent";
+    rev = "v${version}";
+    sha256 = "sha256-eIXVTbVOCRHcxSsLPvIm9F60t2upk5ORpDSOOYqTCJ4=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "test-fallback";
+      url = "https://github.com/jesec/libtorrent/commit/a38205ce06aadc9908478ec3a9c8aefd9be06344.patch";
+      sha256 = "sha256-2TyQ9zYWZw6bzAfVZzTOQSkfIZnDU8ykgpRAFXscEH0=";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ openssl zlib ];
+
+  doCheck = true;
+  preCheck = ''
+    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}$PWD
+  '';
+  checkInputs = [ gtest ];
+
+  meta = with lib; {
+    description = "A BitTorrent library written in C++ for *nix, with focus on high performance and good code (jesec's fork)";
+    homepage = "https://github.com/jesec/libtorrent";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ winterqt ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/networking/p2p/libtorrent/default.nix b/pkgs/tools/networking/p2p/libtorrent/default.nix
index f750e3b1bfe..4d3ccf5fc15 100644
--- a/pkgs/tools/networking/p2p/libtorrent/default.nix
+++ b/pkgs/tools/networking/p2p/libtorrent/default.nix
@@ -1,6 +1,6 @@
 # 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
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook
 , cppunit, openssl, libsigcxx, zlib
 }:
 
@@ -15,10 +15,10 @@ stdenv.mkDerivation rec {
     sha256 = "1h5y6ab3gs20yyprdfwcw8fh1c6czs4yrdj0kf54d2vp9qwz685r";
   };
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
   buildInputs = [ cppunit openssl libsigcxx zlib ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/rakshasa/libtorrent";
     description = "A BitTorrent library written in C++ for *nix, with focus on high performance and good code";
 
diff --git a/pkgs/tools/networking/p2p/rtorrent-jesec/default.nix b/pkgs/tools/networking/p2p/rtorrent-jesec/default.nix
new file mode 100644
index 00000000000..eeff6e91399
--- /dev/null
+++ b/pkgs/tools/networking/p2p/rtorrent-jesec/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, gtest
+, libtorrent-jesec
+, curl
+, ncurses
+, xmlrpc_c
+, nlohmann_json
+, xmlRpcSupport ? true
+, jsonRpcSupport ? true
+}:
+let
+  inherit (lib) optional;
+in
+stdenv.mkDerivation rec {
+  pname = "rtorrent-jesec";
+  version = "0.9.8-r14";
+
+  src = fetchFromGitHub {
+    owner = "jesec";
+    repo = "rtorrent";
+    rev = "v${version}";
+    sha256 = "sha256-AbjzNIha3MkCZi6MuyUfPx9r3zeXeTUzkbD7uHB85lo=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libtorrent-jesec curl ncurses ]
+    ++ optional xmlRpcSupport xmlrpc_c
+    ++ optional jsonRpcSupport nlohmann_json;
+
+  cmakeFlags = [ "-DUSE_RUNTIME_CA_DETECTION=NO" ]
+    ++ optional (!xmlRpcSupport) "-DUSE_XMLRPC=NO"
+    ++ optional (!jsonRpcSupport) "-DUSE_JSONRPC=NO";
+
+  doCheck = true;
+  checkInputs = [ gtest ];
+
+  prePatch = ''
+    substituteInPlace src/main.cc \
+      --replace "/etc/rtorrent/rtorrent.rc" "${placeholder "out"}/etc/rtorrent/rtorrent.rc"
+  '';
+
+  postFixup = ''
+    mkdir -p $out/etc/rtorrent
+    cp $src/doc/rtorrent.rc $out/etc/rtorrent/rtorrent.rc
+  '';
+
+  meta = with lib; {
+    description = "An ncurses client for libtorrent, ideal for use with screen, tmux, or dtach (jesec's fork)";
+    homepage = "https://github.com/jesec/rtorrent";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ winterqt ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/networking/p2p/rtorrent/default.nix b/pkgs/tools/networking/p2p/rtorrent/default.nix
index b55c673c058..20f9cec6f5f 100644
--- a/pkgs/tools/networking/p2p/rtorrent/default.nix
+++ b/pkgs/tools/networking/p2p/rtorrent/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchFromGitHub, pkgconfig
+{ lib, stdenv, fetchurl, fetchFromGitHub, pkg-config
 , libtool, autoconf, automake, cppunit
 , libtorrent, ncurses, libsigcxx, curl
 , zlib, openssl, xmlrpc_c
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     sha256 = "0hcaf1brk402caa7hhlb2r1c93mjzxkm8gb19xfl33gkp3jpf372";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [
     libtool autoconf automake cppunit
     libtorrent ncurses libsigcxx curl zlib openssl xmlrpc_c
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
 
   # 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 {
+  patches = lib.optional colorSupport (fetchurl {
     url = "https://gist.githubusercontent.com/codyopel/a816c2993f8013b5f4d6/raw/b952b32da1dcf14c61820dfcf7df00bc8918fec4/rtorrent-color.patch";
     sha256 = "00gcl7yq6261rrfzpz2k8bd7mffwya0ifji1xqcvhfw50syk8965";
   });
@@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
     mv doc/rtorrent.rc $out/share/doc/rtorrent/rtorrent.rc
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://rakshasa.github.io/rtorrent/";
     description = "An ncurses client for libtorrent, ideal for use with screen, tmux, or dtach";
 
diff --git a/pkgs/tools/networking/p2p/seeks/default.nix b/pkgs/tools/networking/p2p/seeks/default.nix
deleted file mode 100644
index eccf38f39fd..00000000000
--- a/pkgs/tools/networking/p2p/seeks/default.nix
+++ /dev/null
@@ -1,69 +0,0 @@
-{ 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/pkgs/tools/networking/packetdrill/default.nix b/pkgs/tools/networking/packetdrill/default.nix
index e4322242e0b..861e9c0383b 100644
--- a/pkgs/tools/networking/packetdrill/default.nix
+++ b/pkgs/tools/networking/packetdrill/default.nix
@@ -1,29 +1,41 @@
-{ stdenv, fetchFromGitHub, bison, flex }:
-stdenv.mkDerivation {
-  version = "1.0";
+{ lib, stdenv, fetchFromGitHub, bison, flex, cmake, libpcap }:
+stdenv.mkDerivation rec {
   pname = "packetdrill";
+  version = "unstable-2020-08-22";
+
   src = fetchFromGitHub {
     owner = "google";
     repo = "packetdrill";
-    rev = "58a7865c47e3a71e92ca0e4cc478c320e1c35f82";
-    sha256 = "09sqiakmn63idfjhy2ddf1456sfhi8yhsbp8lxvc1yfjikjxwwbc";
+    rev = "68a34fa73cf221e5f52d6fa4f203bcd93062be1b";
+    sha256 = "0djkwb6l2959f44d98vwb092rghf0qmii8391vrpxqb99j6pv4h6";
   };
   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;
+  nativeBuildInputs = [ bison flex cmake libpcap ];
+  buildInputs = [ libpcap ];
+
+  installPhase = ''
+    install -m 0755 -t $out/bin -D \
+      packetdrill \
+      packet_parser_test \
+      packet_to_string_test \
+      checksum_test
+    mkdir -p $out/share
+    cp -r ../tests $out/share/packetdrill-tests
+  '';
+
   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 ];
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ dmjio cleverca22 ];
   };
 }
diff --git a/pkgs/tools/networking/packetdrill/nix.patch b/pkgs/tools/networking/packetdrill/nix.patch
deleted file mode 100644
index 6bad14421b9..00000000000
--- a/pkgs/tools/networking/packetdrill/nix.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-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/pkgs/tools/networking/pacparser/default.nix b/pkgs/tools/networking/pacparser/default.nix
index 2d703730785..ce639a4cbc7 100644
--- a/pkgs/tools/networking/pacparser/default.nix
+++ b/pkgs/tools/networking/pacparser/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "pacparser";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
 
   hardeningDisable = [ "format" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A library to parse proxy auto-config (PAC) files";
     homepage = "http://pacparser.manugarg.com/";
     license = licenses.lgpl3;
diff --git a/pkgs/tools/networking/par2cmdline/default.nix b/pkgs/tools/networking/par2cmdline/default.nix
index ecfe5fa0357..73e12e12856 100644
--- a/pkgs/tools/networking/par2cmdline/default.nix
+++ b/pkgs/tools/networking/par2cmdline/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   pname = "par2cmdline";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ autoreconfHook ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/Parchive/par2cmdline";
     description = "PAR 2.0 compatible file verification and repair tool";
     longDescription = ''
diff --git a/pkgs/tools/networking/pcapc/default.nix b/pkgs/tools/networking/pcapc/default.nix
index 94a181eb5ae..48dc96bb3f7 100644
--- a/pkgs/tools/networking/pcapc/default.nix
+++ b/pkgs/tools/networking/pcapc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libpcap, cmake }:
+{ lib, stdenv, fetchFromGitHub, libpcap, cmake }:
 
 stdenv.mkDerivation rec {
   pname = "pcapc";
@@ -16,11 +16,9 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  enableParallelBuilding = true;
-
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/pfactum/pcapc";
     description = "Compile libpcap filter expressions into BPF opcodes";
     license = licenses.gpl3;
diff --git a/pkgs/tools/networking/pcapfix/default.nix b/pkgs/tools/networking/pcapfix/default.nix
index a700bd54e7a..ee5212b9750 100644
--- a/pkgs/tools/networking/pcapfix/default.nix
+++ b/pkgs/tools/networking/pcapfix/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "pcapfix-1.1.4";
@@ -10,11 +10,11 @@ stdenv.mkDerivation rec {
 
   postPatch = ''sed -i "s|/usr|$out|" Makefile'';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://f00l.de/pcapfix/";
     description = "Repair your broken pcap and pcapng files";
     license = licenses.gpl3;
     maintainers = [ maintainers.ehmry ];
-    platforms = platforms.linux;
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/networking/pdnsd/default.nix b/pkgs/tools/networking/pdnsd/default.nix
index d2894271301..a08182394b1 100644
--- a/pkgs/tools/networking/pdnsd/default.nix
+++ b/pkgs/tools/networking/pdnsd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation {
   name = "pdnsd-1.2.9a-par";
@@ -17,7 +17,7 @@ stdenv.mkDerivation {
   # fix ipv6 on darwin
   CPPFLAGS = "-D__APPLE_USE_RFC_3542";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Permanent DNS caching";
     homepage = "http://members.home.nl/p.a.rombouts/pdnsd";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/networking/pdsh/default.nix b/pkgs/tools/networking/pdsh/default.nix
index 9dd1a5581c5..87601b0ddf3 100644
--- a/pkgs/tools/networking/pdsh/default.nix
+++ b/pkgs/tools/networking/pdsh/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl, readline, rsh, ssh }:
+{ lib, stdenv, fetchurl, perl, readline, rsh, ssh, slurm, slurmSupport ? false }:
 
 stdenv.mkDerivation rec {
   name = "pdsh-2.34";
@@ -8,7 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "1s91hmhrz7rfb6h3l5k97s393rcm1ww3svp8dx5z8vkkc933wyxl";
   };
 
-  buildInputs = [ perl readline ssh ];
+  buildInputs = [ perl readline ssh ]
+    ++ (lib.optional slurmSupport slurm);
 
   preConfigure = ''
     configureFlagsArray=(
@@ -18,6 +19,7 @@ stdenv.mkDerivation rec {
       ${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"}
+      ${if slurmSupport then "--with-slurm" else "--without-slurm"}
       "--with-dshgroups"
       "--with-xcpu"
       "--disable-debug"
@@ -28,7 +30,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://github.com/chaos/pdsh";
     description = "High-performance, parallel remote shell utility";
-    license = stdenv.lib.licenses.gpl2;
+    license = lib.licenses.gpl2;
 
     longDescription = ''
       Pdsh is a high-performance, parallel remote shell utility. It has
@@ -39,7 +41,7 @@ stdenv.mkDerivation rec {
       while timeouts occur on some connections.
     '';
 
-    platforms = stdenv.lib.platforms.unix;
-    maintainers = [ stdenv.lib.maintainers.peti ];
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.peti ];
   };
 }
diff --git a/pkgs/tools/networking/persepolis/default.nix b/pkgs/tools/networking/persepolis/default.nix
index ecceed21660..5e4f0542d36 100644
--- a/pkgs/tools/networking/persepolis/default.nix
+++ b/pkgs/tools/networking/persepolis/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, buildPythonApplication, fetchFromGitHub, makeWrapper
+{ lib, buildPythonApplication, fetchFromGitHub, makeWrapper
 , aria
 , libnotify
 , pulseaudio
@@ -47,7 +47,7 @@ buildPythonApplication rec {
   # feed args to wrapPythonApp
   makeWrapperArgs = [
     "--prefix PATH : ${lib.makeBinPath [aria libnotify ]}"
-    ''''${qtWrapperArgs[@]}''
+    "\${qtWrapperArgs[@]}"
   ];
 
   propagatedBuildInputs = [
@@ -61,8 +61,8 @@ buildPythonApplication rec {
     youtube-dl
   ];
 
-  meta = with stdenv.lib; {
-    description = "Persepolis Download Manager is a GUI for aria2.";
+  meta = with lib; {
+    description = "Persepolis Download Manager is a GUI for aria2";
     homepage = "https://persepolisdm.github.io/";
     license = licenses.gpl3;
     maintainers = [ maintainers.linarcx ];
diff --git a/pkgs/tools/networking/philter/default.nix b/pkgs/tools/networking/philter/default.nix
index ee079fe9fdf..60bd2f8cc7e 100644
--- a/pkgs/tools/networking/philter/default.nix
+++ b/pkgs/tools/networking/philter/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, python }:
+{ lib, stdenv, fetchurl, python }:
 
 stdenv.mkDerivation rec {
   pname = "philter";
@@ -16,11 +16,11 @@ stdenv.mkDerivation rec {
     chmod +x "$out"/bin/philter
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Mail sorter for Maildirs";
     homepage = "http://philter.sourceforge.net";
     maintainers = with maintainers; [ raskin ];
-    platforms = platforms.linux;
+    platforms = platforms.all;
     license = licenses.gpl2;
   };
 
diff --git a/pkgs/tools/networking/phodav/default.nix b/pkgs/tools/networking/phodav/default.nix
index c6b479dd250..9b1c3d005b9 100644
--- a/pkgs/tools/networking/phodav/default.nix
+++ b/pkgs/tools/networking/phodav/default.nix
@@ -1,15 +1,15 @@
-{ stdenv, fetchurl
-, pkgconfig, libsoup, meson, ninja }:
+{ lib, stdenv, fetchurl
+, pkg-config, libsoup, meson, ninja }:
 
 let
-  version = "2.4";
+  version = "2.5";
 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 = "1hxq8c5qfah3w7mxcyy3yhzdgswplll31a69p5mqdl04bsvw5pbx";
+    sha256 = "045rdzf8isqmzix12lkz6z073b5qvcqq6ad028advm5gf36skw3i";
   };
 
   mesonFlags = [
@@ -19,15 +19,15 @@ in stdenv.mkDerivation rec {
     "-Dudev=disabled"
   ];
 
-  nativeBuildInputs = [ libsoup pkgconfig meson ninja ];
+  nativeBuildInputs = [ libsoup pkg-config meson ninja ];
 
   outputs = [ "out" "dev" "lib" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "WebDav server implementation and library using libsoup";
     homepage = "https://wiki.gnome.org/phodav";
     license = licenses.lgpl21;
-    maintainers = with maintainers; [ gnidorah ];
+    maintainers = with maintainers; [ ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/photon/default.nix b/pkgs/tools/networking/photon/default.nix
index 22da1320803..d3f153e44ae 100644
--- a/pkgs/tools/networking/photon/default.nix
+++ b/pkgs/tools/networking/photon/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3Packages, fetchFromGitHub }:
+{ lib, python3Packages, fetchFromGitHub }:
 
 python3Packages.buildPythonApplication rec {
   pname = "photon";
@@ -19,16 +19,16 @@ python3Packages.buildPythonApplication rec {
   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; {
+  meta = with 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 ];
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/tools/networking/pingtcp/default.nix b/pkgs/tools/networking/pingtcp/default.nix
index d3fb37705bd..5b4cbf10321 100644
--- a/pkgs/tools/networking/pingtcp/default.nix
+++ b/pkgs/tools/networking/pingtcp/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake }:
+{ lib, stdenv, fetchFromGitHub, cmake }:
 
 stdenv.mkDerivation rec {
   pname = "pingtcp";
@@ -14,15 +14,13 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ cmake ];
 
-  enableParallelBuilding = true;
-
   doCheck = false;
 
   postInstall = ''
     install -Dm644 {..,$out/share/doc/pingtcp}/README.md
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Measure TCP handshake time";
     homepage = "https://github.com/LanetNetwork/pingtcp";
     license = licenses.gpl3;
diff --git a/pkgs/tools/networking/pirate-get/default.nix b/pkgs/tools/networking/pirate-get/default.nix
index b89ab8164cc..dc9133229af 100644
--- a/pkgs/tools/networking/pirate-get/default.nix
+++ b/pkgs/tools/networking/pirate-get/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3Packages }:
+{ lib, python3Packages }:
 
 with python3Packages;
 
@@ -13,7 +13,7 @@ buildPythonApplication rec {
 
   propagatedBuildInputs = [ colorama veryprettytable pyperclip ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A command line interface for The Pirate Bay";
     homepage = "https://github.com/vikstrous/pirate-get";
     license = licenses.gpl1;
diff --git a/pkgs/tools/networking/pixiecore/default.nix b/pkgs/tools/networking/pixiecore/default.nix
index d0e76832ea9..c8c5ca118dd 100644
--- a/pkgs/tools/networking/pixiecore/default.nix
+++ b/pkgs/tools/networking/pixiecore/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "pixiecore";
@@ -21,8 +21,8 @@ buildGoModule rec {
   meta = {
     description = "A tool to manage network booting of machines";
     homepage = "https://github.com/danderson/netboot/tree/master/pixiecore";
-    license =  stdenv.lib.licenses.asl20;
-    maintainers = with stdenv.lib.maintainers; [ bbigras danderson ];
-    platforms = stdenv.lib.platforms.linux;
+    license =  lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ bbigras danderson ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/pixiewps/default.nix b/pkgs/tools/networking/pixiewps/default.nix
index 98a780a1704..561daacfd53 100644
--- a/pkgs/tools/networking/pixiewps/default.nix
+++ b/pkgs/tools/networking/pixiewps/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "pixiewps";
@@ -15,12 +15,12 @@ stdenv.mkDerivation rec {
     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;
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.nico202 ];
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/networking/pmacct/default.nix b/pkgs/tools/networking/pmacct/default.nix
index ffecbfcaf42..9cb8c0b88f7 100644
--- a/pkgs/tools/networking/pmacct/default.nix
+++ b/pkgs/tools/networking/pmacct/default.nix
@@ -1,6 +1,6 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
-, pkgconfig
+, pkg-config
 , autoreconfHook
 , libtool
 , libpcap
@@ -19,7 +19,7 @@ assert withSQLite -> sqlite != null;
 assert withPgSQL -> postgresql != null;
 assert withMysql -> libmysqlclient != null;
 
-let inherit (stdenv.lib) optional; in
+let inherit (lib) getDev optional optionalString; in
 
 stdenv.mkDerivation rec {
   version = "1.7.5";
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
     sha256 = "17p5isrq5w58hvmzhc6akbd37ins3c95g0rvhhdm0v33khzxmran";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig libtool ];
+  nativeBuildInputs = [ autoreconfHook pkg-config libtool ];
   buildInputs = [ libpcap ]
     ++ optional withJansson jansson
     ++ optional withNflog libnetfilter_log
@@ -40,6 +40,9 @@ stdenv.mkDerivation rec {
     ++ optional withPgSQL postgresql
     ++ optional withMysql [ libmysqlclient zlib ];
 
+  MYSQL_CONFIG =
+    optionalString withMysql "${getDev libmysqlclient}/bin/mysql_config";
+
   configureFlags = [
     "--with-pcap-includes=${libpcap}/include"
   ] ++ optional withJansson "--enable-jansson"
@@ -48,8 +51,8 @@ stdenv.mkDerivation rec {
     ++ 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";
+  meta = with lib; {
+    description = "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]
diff --git a/pkgs/tools/networking/polygraph/default.nix b/pkgs/tools/networking/polygraph/default.nix
index 05053b37349..74347ff8395 100644
--- a/pkgs/tools/networking/polygraph/default.nix
+++ b/pkgs/tools/networking/polygraph/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, openssl, zlib, ncurses }:
+{ lib, stdenv, fetchurl, openssl, zlib, ncurses }:
 
 stdenv.mkDerivation rec {
   name = "polygraph-4.13.0";
@@ -10,11 +10,11 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ openssl zlib ncurses ];
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = [ ];
   };
 }
diff --git a/pkgs/tools/networking/polysh/default.nix b/pkgs/tools/networking/polysh/default.nix
index 34bc908060a..69e5d0427e5 100644
--- a/pkgs/tools/networking/polysh/default.nix
+++ b/pkgs/tools/networking/polysh/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, python2Packages }:
+{ lib, fetchurl, python2Packages }:
 
 let
   inherit (python2Packages) buildPythonApplication;
@@ -11,7 +11,7 @@ buildPythonApplication rec {
           sha256 = "0kxhp38c8a8hc8l86y53l2z5zpzxc4b8lx5zyzmq1badcrfc4mh4";
         };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tool to aggregate several remote shells into one";
     longDescription = ''
       Polysh is a tool to aggregate several remote shells into one. It
diff --git a/pkgs/tools/networking/ppp/default.nix b/pkgs/tools/networking/ppp/default.nix
index f507b582f64..708932ac1c9 100644
--- a/pkgs/tools/networking/ppp/default.nix
+++ b/pkgs/tools/networking/ppp/default.nix
@@ -1,45 +1,37 @@
-{ stdenv, fetchurl, fetchpatch, fetchFromGitHub, substituteAll, libpcap, openssl }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, substituteAll
+, libpcap
+, openssl
+}:
 
 stdenv.mkDerivation rec {
-  version = "2.4.8";
+  version = "2.4.9";
   pname = "ppp";
 
   src = fetchFromGitHub {
-    owner = "paulusmack";
-    repo = "ppp";
-    rev = "ppp-${version}";
-    sha256 = "1i88m79h6g3fzsb4yw3k8bq1grsx3hsyawm7id2vcaab0gfqzjjv";
+    owner = "ppp-project";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "sha256-8+nbqRNfKPLDx+wmuKSkv+BSeG72hKJI4dNqypqeEK4=";
   };
 
-  patches =
-    [
-      ( substituteAll {
-        src = ./nix-purity.patch;
-        inherit libpcap;
-        glibc = stdenv.cc.libc.dev or stdenv.cc.libc;
-        openssl = openssl.dev;
-      })
-      # Without nonpriv.patch, pppd --version doesn't work when not run as
-      # root.
-      ./nonpriv.patch
-      (fetchpatch {
-        name = "CVE-2015-3310.patch";
-        url = "https://github.com/paulusmack/ppp/commit/858976b1fc3107f1261aae337831959b511b83c2.patch";
-        sha256 = "0wirmcis67xjwllqhz9lsz1b7dcvl8shvz78lxgybc70j2sv7ih4";
-      })
-      (fetchurl {
-        url = "https://www.nikhef.nl/~janjust/ppp/ppp-2.4.7-eaptls-mppe-1.102.patch";
-        sha256 = "04war8l5szql53l36043hvzgfwqp3v76kj8brbz7wlf7vs2mlkia";
-      })
-      (fetchpatch {
-        name = "CVE-2020-8597.patch";
-        url = "https://github.com/paulusmack/ppp/commit/8d7970b8f3db727fe798b65f3377fe6787575426.patch";
-        sha256 = "129wnhwxmzvr3y9gzxv82jnb5y8m4yg8vkpa0xl2rwkl8anbzgkh";
-      })
-      ./musl-fix-headers.patch
-    ];
+  patches = [
+    (substituteAll {
+      src = ./nix-purity.patch;
+      glibc = stdenv.cc.libc.dev or stdenv.cc.libc;
+      openssl_dev = openssl.dev;
+      openssl_out = openssl.out;
+    })
+    # Without nonpriv.patch, pppd --version doesn't work when not run as root.
+    ./nonpriv.patch
+  ];
 
-  buildInputs = [ libpcap openssl ];
+  buildInputs = [
+    libpcap
+    openssl
+  ];
 
   postPatch = ''
     # strip is not found when cross compiling with seemingly no way to point
@@ -65,10 +57,15 @@ stdenv.mkDerivation rec {
     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 ];
+  meta = with lib; {
+    homepage = "https://ppp.samba.org";
+    description = "Point-to-point implementation to provide Internet connections over serial lines";
+    license = with licenses; [
+      bsdOriginal
+      publicDomain
+      gpl2
+      lgpl2
+    ];
     platforms = platforms.linux;
     maintainers = [ ];
   };
diff --git a/pkgs/tools/networking/ppp/musl-fix-headers.patch b/pkgs/tools/networking/ppp/musl-fix-headers.patch
deleted file mode 100644
index d6252a52675..00000000000
--- a/pkgs/tools/networking/ppp/musl-fix-headers.patch
+++ /dev/null
@@ -1,137 +0,0 @@
-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 (void);	/* Initialize the magic number generator */
- u_int32_t magic (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 !defined(__GLIBC__) || __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/pkgs/tools/networking/ppp/nix-purity.patch b/pkgs/tools/networking/ppp/nix-purity.patch
index 975ea9db609..c3363e0ccb6 100644
--- a/pkgs/tools/networking/ppp/nix-purity.patch
+++ b/pkgs/tools/networking/ppp/nix-purity.patch
@@ -1,31 +1,33 @@
 diff --git a/pppd/Makefile.linux b/pppd/Makefile.linux
-index 9664f70..d07e01e 100644
+index 22837c5..6f6fff5 100644
 --- a/pppd/Makefile.linux
 +++ b/pppd/Makefile.linux
-@@ -125,7 +125,7 @@ CFLAGS   += -DHAS_SHADOW
+@@ -111,8 +111,8 @@ endif
+ 
+ # EAP SRP-SHA1
+ ifdef USE_SRP
+-CFLAGS	+= -DUSE_SRP -DOPENSSL -I/usr/local/ssl/include
+-LIBS	+= -lsrp -L/usr/local/ssl/lib
++CFLAGS	+= -DUSE_SRP -DOPENSSL -I@openssl_dev@/include/openssl
++LIBS	+= -lsrp -L@openssl_out@/lib
+ NEEDCRYPTOLIB = y
+ TARGETS	+= srp-entry
+ EXTRAINSTALL = $(INSTALL) -c -m 555 srp-entry $(BINDIR)/srp-entry
+@@ -143,7 +143,7 @@ CFLAGS   += -DHAS_SHADOW
  #LIBS     += -lshadow $(LIBS)
  endif
  
--ifneq ($(wildcard $(shell $(CC) --print-sysroot)/usr/include/crypt.h),)
+-ifeq ($(shell echo '\#include <crypt.h>' | $(CC) -E - >/dev/null 2>&1 && echo yes),yes)
 +ifneq ($(wildcard @glibc@/include/crypt.h),)
  CFLAGS  += -DHAVE_CRYPT_H=1
- LIBS   += -lcrypt
+ LIBS	+= -lcrypt
  endif
-@@ -137,7 +137,7 @@ endif
+@@ -155,7 +155,7 @@ endif
  
  ifdef NEEDDES
  ifndef USE_CRYPT
 -CFLAGS   += -I$(shell $(CC) --print-sysroot)/usr/include/openssl
-+CFLAGS   += -I@openssl@/include/openssl
- LIBS     += -lcrypto
++CFLAGS   += -I@openssl_dev@/include/openssl
+ NEEDCRYPTOLIB = y
  else
  CFLAGS   += -DUSE_CRYPT=1
-@@ -188,7 +188,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/pkgs/tools/networking/pptp/default.nix b/pkgs/tools/networking/pptp/default.nix
index dfc61d8197c..7af9e324f2e 100644
--- a/pkgs/tools/networking/pptp/default.nix
+++ b/pkgs/tools/networking/pptp/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl, ppp, iproute }:
+{ lib, stdenv, fetchurl, perl, ppp, iproute2 }:
 
 stdenv.mkDerivation rec {
   pname = "pptp";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
   '';
 
   preConfigure = ''
-    makeFlagsArray=( IP=${iproute}/bin/ip PPPD=${ppp}/sbin/pppd \
+    makeFlagsArray=( IP=${iproute2}/bin/ip PPPD=${ppp}/sbin/pppd \
                      BINDIR=$out/sbin MANDIR=$out/share/man/man8 \
                      PPPDIR=$out/etc/ppp )
   '';
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
     patchShebangs $out
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "PPTP client for Linux";
     homepage = "http://pptpclient.sourceforge.net/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/pptpd/default.nix b/pkgs/tools/networking/pptpd/default.nix
index e6f5f9503d8..8a802281192 100644
--- a/pkgs/tools/networking/pptpd/default.nix
+++ b/pkgs/tools/networking/pptpd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, ppp }:
+{ lib, stdenv, fetchurl, ppp }:
 
 stdenv.mkDerivation rec {
   pname   = "pptpd";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
     substituteInPlace plugins/Makefile --replace "install -o root" "install"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage    = "http://poptop.sourceforge.net/dox/";
     description = "The PPTP Server for Linux";
     platforms   = platforms.linux;
diff --git a/pkgs/tools/networking/pritunl-ssh/default.nix b/pkgs/tools/networking/pritunl-ssh/default.nix
new file mode 100644
index 00000000000..586fc780699
--- /dev/null
+++ b/pkgs/tools/networking/pritunl-ssh/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, python3 }:
+
+stdenv.mkDerivation rec {
+  pname   = "pritunl-ssh";
+  version = "1.0.1674.4";
+
+  src = fetchFromGitHub {
+    owner = "pritunl";
+    repo = "pritunl-zero-client";
+    rev = version;
+    sha256 = "07z60lipbwm0p7s2bxcij21jid8w4nyh6xk2qq5qdm4acq4k1i88";
+  };
+
+  buildInputs = [ python3 ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install ssh_client.py $out/bin/pritunl-ssh
+    install ssh_host_client.py $out/bin/pritunl-ssh-host
+  '';
+
+  meta = with lib; {
+    description = "Pritunl Zero SSH client";
+    homepage = "https://github.com/pritunl/pritunl-zero-client";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ Thunderbottom ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/networking/privoxy/default.nix b/pkgs/tools/networking/privoxy/default.nix
index 10a25d5bf8b..9fce8d7a5f4 100644
--- a/pkgs/tools/networking/privoxy/default.nix
+++ b/pkgs/tools/networking/privoxy/default.nix
@@ -1,30 +1,45 @@
-{ stdenv, fetchurl, autoreconfHook, zlib, pcre, w3m, man }:
+{ lib, stdenv
+, nixosTests
+, fetchurl, autoreconfHook
+, zlib, pcre, w3m, man
+, mbedtls, brotli
+}:
 
 stdenv.mkDerivation rec {
 
   pname = "privoxy";
-  version = "3.0.28";
+  version = "3.0.32";
 
   src = fetchurl {
     url = "mirror://sourceforge/ijbswa/Sources/${version}%20%28stable%29/${pname}-${version}-stable-src.tar.gz";
-    sha256 = "0jl2yav1qzqnaqnnx8i6i53ayckkimcrs3l6ryvv7bda6v08rmxm";
+    sha256 = "sha256-xh3kAIxiRF7Bjx8nBAfL8jcuq6k76szcnjI4uy3v7tc=";
   };
 
   hardeningEnable = [ "pie" ];
 
   nativeBuildInputs = [ autoreconfHook w3m man ];
-  buildInputs = [ zlib pcre ];
+  buildInputs = [ zlib pcre mbedtls brotli ];
 
-  makeFlags = [ "STRIP="];
+  makeFlags = [ "STRIP=" ];
+  configureFlags = [
+    "--with-mbedtls"
+    "--with-brotli"
+    "--enable-external-filters"
+    "--enable-compression"
+  ];
 
   postInstall = ''
-    rm -rf $out/var
+    rm -r $out/var
   '';
 
-  meta = with stdenv.lib; {
+  passthru.tests.privoxy = nixosTests.privoxy;
+
+  meta = with lib; {
     homepage = "https://www.privoxy.org/";
     description = "Non-caching web proxy with advanced filtering capabilities";
-    license = licenses.gpl2;
+    # When linked with mbedtls, the license becomes GPLv3 (or later), otherwise
+    # GPLv2 (or later). See https://www.privoxy.org/user-manual/copyright.html
+    license = licenses.gpl3Plus;
     platforms = platforms.all;
     maintainers = [ maintainers.phreedom ];
   };
diff --git a/pkgs/tools/networking/proxify/default.nix b/pkgs/tools/networking/proxify/default.nix
new file mode 100644
index 00000000000..6a0bfcc6ee2
--- /dev/null
+++ b/pkgs/tools/networking/proxify/default.nix
@@ -0,0 +1,31 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "proxify";
+  version = "0.0.3";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = "proxify";
+    rev = "v${version}";
+    sha256 = "15j2q9zrs8bdf72jgldkai3xbi4irk69wyjzv48r74rdgf2k49gn";
+  };
+
+  vendorSha256 = "1x78n88ri8kph827k03x1q06zpbbbp7793xsvc376ljda5n6bqig";
+
+  meta = with lib; {
+    description = "Proxy tool for HTTP/HTTPS traffic capture";
+    longDescription = ''
+      This tool supports multiple operations such as request/response dump, filtering
+      and manipulation via DSL language, upstream HTTP/Socks5 proxy. Additionally a
+      replay utility allows to import the dumped traffic (request/responses with correct
+      domain name) into other tools by simply setting the upstream proxy to proxify.
+    '';
+    homepage = "https://github.com/projectdiscovery/proxify";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/networking/proxychains/default.nix b/pkgs/tools/networking/proxychains/default.nix
index 6f00c7fc8b7..56a553c0c80 100644
--- a/pkgs/tools/networking/proxychains/default.nix
+++ b/pkgs/tools/networking/proxychains/default.nix
@@ -1,24 +1,33 @@
-{ stdenv, fetchFromGitHub } :
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
 stdenv.mkDerivation rec {
   pname = "proxychains";
-  version = "4.2.0";
+  version = "4.4.0";
 
   src = fetchFromGitHub {
     owner = "haad";
-    repo = "proxychains";
+    repo = pname;
     rev = "${pname}-${version}";
-    sha256 = "015skh3z1jmm8kxbm3nkqv1w56kcvabdmcbmpwzywxr4xnh3x3pc";
+    sha256 = "083xdg6fsn8c2ns93lvy794rixxq8va6jdf99w1z0xi4j7f1nyjw";
   };
 
   postPatch = ''
-    # Temporary work-around; most likely fixed by next upstream release
-    sed -i Makefile -e '/-lpthread/a LDFLAGS+=-ldl'
+    # Suppress compiler warning. Remove it when upstream fix arrives
+    substituteInPlace Makefile --replace "-Werror" "-Werror -Wno-stringop-truncation"
+  '';
+
+  postInstall = ''
+    cp src/proxychains.conf $out/etc
   '';
 
-  meta = {
+  meta = with lib; {
     description = "Proxifier for SOCKS proxies";
     homepage = "http://proxychains.sourceforge.net";
-    license = stdenv.lib.licenses.gpl2Plus;
-    platforms = stdenv.lib.platforms.linux;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ fab ];
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/pssh/default.nix b/pkgs/tools/networking/pssh/default.nix
index 43e465e05b6..a17701644c8 100644
--- a/pkgs/tools/networking/pssh/default.nix
+++ b/pkgs/tools/networking/pssh/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pythonPackages, openssh, rsync }:
+{ lib, fetchFromGitHub, pythonPackages, openssh, rsync }:
 
 pythonPackages.buildPythonApplication rec {
   pname = "pssh";
@@ -20,7 +20,7 @@ pythonPackages.buildPythonApplication rec {
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Parallel SSH Tools";
     longDescription = ''
       PSSH provides parallel versions of OpenSSH and related tools,
diff --git a/pkgs/tools/networking/pwnat/default.nix b/pkgs/tools/networking/pwnat/default.nix
index 55965173e0e..780477af2fc 100644
--- a/pkgs/tools/networking/pwnat/default.nix
+++ b/pkgs/tools/networking/pwnat/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   name  = "${pname}-${date}";
@@ -18,10 +18,10 @@ stdenv.mkDerivation rec {
     cp README* COPYING* $out/share/pwnat
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage    = "http://samy.pl/pwnat/";
     description = "ICMP NAT to NAT client-server communication";
-    license     = stdenv.lib.licenses.gpl3Plus;
+    license     = lib.licenses.gpl3Plus;
     maintainers = with maintainers; [viric];
     platforms   = with platforms; linux;
   };
diff --git a/pkgs/tools/networking/pykms/default.nix b/pkgs/tools/networking/pykms/default.nix
index 345999c00bc..d648ff3ec1e 100644
--- a/pkgs/tools/networking/pykms/default.nix
+++ b/pkgs/tools/networking/pykms/default.nix
@@ -1,9 +1,13 @@
-{ stdenv, runtimeShell, fetchFromGitHub, python3, writeText, writeScript
-, coreutils, sqlite }:
-
-with python3.pkgs;
-
+{ lib
+, fetchFromGitHub
+, python3
+, writeText
+, writeShellScript
+, sqlite
+}:
 let
+  pypkgs = python3.pkgs;
+
   dbSql = writeText "create_pykms_db.sql" ''
     CREATE TABLE clients(
       clientMachineId TEXT,
@@ -17,35 +21,31 @@ let
     );
   '';
 
-  dbScript = writeScript "create_pykms_db.sh" (with stdenv.lib; ''
-    #!${runtimeShell}
-
+  dbScript = writeShellScript "create_pykms_db.sh" ''
     set -eEuo pipefail
 
-    db=$1
+    db=''${1:-/var/lib/pykms/clients.db}
 
     if [ ! -e $db ] ; then
-      ${getBin sqlite}/bin/sqlite3 $db < ${dbSql}
+      ${lib.getBin sqlite}/bin/sqlite3 $db < ${dbSql}
     fi
-  '');
+  '';
 
-in buildPythonApplication rec {
+in
+pypkgs.buildPythonApplication rec {
   pname = "pykms";
-  version = "20190611";
+  version = "unstable-2021-01-25";
 
   src = fetchFromGitHub {
-    owner  = "SystemRage";
-    repo   = "py-kms";
-    rev    = "dead208b1593655377fe8bc0d74cc4bead617103";
-    sha256 = "065qpkfqrahsam1rb43vnasmzrangan5z1pr3p6s0sqjz5l2jydp";
+    owner = "SystemRage";
+    repo = "py-kms";
+    rev = "a3b0c85b5b90f63b33dfa5ae6085fcd52c6da2ff";
+    sha256 = "sha256-u0R0uJMQxHnJUDenxglhQkZza3/1DcyXCILcZVceygA=";
   };
 
   sourceRoot = "source/py-kms";
 
-  propagatedBuildInputs = [ systemd pytz tzlocal ];
-
-  # Fix https://github.com/SystemRage/py-kms/issues/64 :
-  patches = [ ./log-to-current-directory-by-default.patch ];
+  propagatedBuildInputs = with pypkgs; [ systemd pytz tzlocal ];
 
   postPatch = ''
     siteDir=$out/${python3.sitePackages}
@@ -66,25 +66,24 @@ in buildPythonApplication rec {
 
     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})"
+      makeWrapper ${python3.interpreter} $out/bin/''${b,,} \
+        --argv0 pykms-''${b,,} \
+        --add-flags $siteDir/pykms_$b.py
     done
 
     install -Dm755 ${dbScript} $out/libexec/create_pykms_db.sh
 
     install -Dm644 ../README.md -t $out/share/doc/pykms
 
-    ${python.interpreter} -m compileall $siteDir
+    ${python3.interpreter} -m compileall $siteDir
 
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Windows KMS (Key Management Service) server written in Python";
-    homepage    = "https://github.com/SystemRage/py-kms";
-    license     = licenses.mit;
+    homepage = "https://github.com/SystemRage/py-kms";
+    license = licenses.unlicense;
     maintainers = with maintainers; [ peterhoeg ];
   };
 }
diff --git a/pkgs/tools/networking/pykms/log-to-current-directory-by-default.patch b/pkgs/tools/networking/pykms/log-to-current-directory-by-default.patch
deleted file mode 100644
index 7c8c65b63a2..00000000000
--- a/pkgs/tools/networking/pykms/log-to-current-directory-by-default.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-# By default, create log files in current directory, instead of the script directory.
---- ../original/py-kms/pykms_Client.py
-+++ py-kms/pykms_Client.py
-@@ -48,5 +48,5 @@
-                     'choi' : ["CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG", "MINI"]},
-         'lfile' : {'help' : 'Use this option to set an output log file. The default is \"pykms_logclient.log\" or type \"STDOUT\" to view log info on stdout.',
--                   'def' : os.path.dirname(os.path.abspath( __file__ )) + "/pykms_logclient.log", 'des' : "logfile"},
-+                   'def' : "pykms_logclient.log", 'des' : "logfile"},
-         'lsize' : {'help' : 'Use this flag to set a maximum size (in MB) to the output log file. Desactivated by default.', 'def' : 0, 'des': "logsize"},
-         }
---- ../original/py-kms/pykms_Server.py
-+++ py-kms/pykms_Server.py
-@@ -85,5 +85,5 @@
-                     'choi' : ["CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG", "MINI"]},
-         'lfile' : {'help' : 'Use this option to set or not an output log file. The default is \"pykms_logserver.log\" or type \"STDOUT\" to view log info on stdout.',
--                   'def' : os.path.dirname(os.path.abspath( __file__ )) + "/pykms_logserver.log", 'des' : "logfile"},
-+                   'def' : "pykms_logserver.log", 'des' : "logfile"},
-         'lsize' : {'help' : 'Use this flag to set a maximum size (in MB) to the output log file. Desactivated by default.', 'def' : 0, 'des': "logsize"},
-         }
-    '');
diff --git a/pkgs/tools/networking/qr-filetransfer/default.nix b/pkgs/tools/networking/qr-filetransfer/default.nix
deleted file mode 100644
index bb62be6d3e2..00000000000
--- a/pkgs/tools/networking/qr-filetransfer/default.nix
+++ /dev/null
@@ -1,30 +0,0 @@
-{ 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/pkgs/tools/networking/qr-filetransfer/deps.nix b/pkgs/tools/networking/qr-filetransfer/deps.nix
deleted file mode 100644
index a15dd968943..00000000000
--- a/pkgs/tools/networking/qr-filetransfer/deps.nix
+++ /dev/null
@@ -1,66 +0,0 @@
-# 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/pkgs/tools/networking/qrcp/default.nix b/pkgs/tools/networking/qrcp/default.nix
new file mode 100644
index 00000000000..f417bb496f4
--- /dev/null
+++ b/pkgs/tools/networking/qrcp/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "qrcp";
+  version = "0.8.4";
+
+  src = fetchFromGitHub {
+    owner = "claudiodangelis";
+    repo = "qrcp";
+    rev = version;
+    sha256 = "1m1xbb3x526j2v8m5m46km9zzj3dk9fvm5wckyqb8kxm4md12y50";
+  };
+
+  vendorSha256 = "1hn8c72fvih6ws1y2c4963pww3ld64m0yh3pmx62hwcy83bhb0v4";
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installShellCompletion --bash --cmd qrcp <($out/bin/qrcp completion bash)
+    installShellCompletion --fish --cmd qrcp <($out/bin/qrcp completion fish)
+    installShellCompletion --zsh  --cmd qrcp <($out/bin/qrcp completion zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://claudiodangelis.com/qrcp/";
+    description = "Transfer files over wifi by scanning a QR code from your terminal";
+    longDescription = ''
+      qrcp 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/pkgs/tools/networking/quickserve/default.nix b/pkgs/tools/networking/quickserve/default.nix
index 8f4876b6ee2..f23bbcd2537 100644
--- a/pkgs/tools/networking/quickserve/default.nix
+++ b/pkgs/tools/networking/quickserve/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, makeWrapper, fetchzip, python3, python3Packages }:
+{ lib, stdenv, makeWrapper, fetchzip, python3, python3Packages }:
 let
   threaded_servers = python3Packages.buildPythonPackage {
     name = "threaded_servers";
@@ -26,8 +26,8 @@ in stdenv.mkDerivation {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
-    description = "A simple HTTP server for quickly sharing files.";
+  meta = with 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/pkgs/tools/networking/quicktun/default.nix b/pkgs/tools/networking/quicktun/default.nix
index 0f7a16caa82..8d227e1fbba 100644
--- a/pkgs/tools/networking/quicktun/default.nix
+++ b/pkgs/tools/networking/quicktun/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libsodium }:
+{ lib, stdenv, fetchFromGitHub, libsodium }:
 
 stdenv.mkDerivation {
   pname = "quicktun";
@@ -22,7 +22,7 @@ stdenv.mkDerivation {
     install -vD out/quicktun* -t $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Very simple, yet secure VPN software";
     homepage = "http://wiki.ucis.nl/QuickTun";
     maintainers = [ maintainers.fpletz ];
diff --git a/pkgs/tools/networking/radsecproxy/default.nix b/pkgs/tools/networking/radsecproxy/default.nix
index e2a0c900c52..1c56d520b90 100644
--- a/pkgs/tools/networking/radsecproxy/default.nix
+++ b/pkgs/tools/networking/radsecproxy/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchFromGitHub, openssl, autoreconfHook, nettle }:
+{ lib, stdenv, fetchFromGitHub, openssl, autoreconfHook, nettle }:
 
 stdenv.mkDerivation rec {
   pname = "radsecproxy";
-  version = "1.8.2";
+  version = "1.9.0";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = version;
-    sha256 = "1g7q128cip1dac9jad58rd96afx4xz7x7vsiv0af8iyq2ivqvs2m";
+    sha256 = "0ppgnvmzk5j42zvz74mwaz6767lzf9vpl8y57w612fvqpg65g4bv";
   };
 
   nativeBuildInputs = [ autoreconfHook ];
@@ -20,9 +20,9 @@ stdenv.mkDerivation rec {
      "--localstatedir=/var"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://software.nordu.net/radsecproxy/";
-    description = "A generic RADIUS proxy that supports both UDP and TLS (RadSec) RADIUS transports.";
+    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/pkgs/tools/networking/radvd/default.nix b/pkgs/tools/networking/radvd/default.nix
index aef67022f78..de8b9a0a4f1 100644
--- a/pkgs/tools/networking/radvd/default.nix
+++ b/pkgs/tools/networking/radvd/default.nix
@@ -1,18 +1,23 @@
-{ stdenv, fetchurl, pkgconfig, libdaemon, bison, flex, check }:
+{ lib, stdenv, fetchurl, pkg-config, libdaemon, bison, flex, check }:
 
 stdenv.mkDerivation rec {
   pname = "radvd";
-  version = "2.18";
+  version = "2.19";
 
   src = fetchurl {
     url = "http://www.litech.org/radvd/dist/${pname}-${version}.tar.xz";
-    sha256 = "1p2wlv3djvla0r84hdncc3wfa530xigs7z9ssc2v5r1pcpzgxgz1";
+    sha256 = "0h722f17h7cra1sjgrxhrrvx54mm47fs039909yhbabigxch8kjn";
   };
 
-  nativeBuildInputs = [ pkgconfig bison flex check ];
+  nativeBuildInputs = [ pkg-config bison flex check ];
   buildInputs = [ libdaemon ];
 
-  meta = with stdenv.lib; {
+  # Needed for cross-compilation
+  makeFlags = [
+    "AR=${stdenv.cc.targetPrefix}ar"
+  ];
+
+  meta = with lib; {
     homepage = "http://www.litech.org/radvd/";
     description = "IPv6 Router Advertisement Daemon";
     platforms = platforms.linux;
diff --git a/pkgs/tools/networking/ratools/default.nix b/pkgs/tools/networking/ratools/default.nix
index 23d0dae086e..0eea11bb3f5 100644
--- a/pkgs/tools/networking/ratools/default.nix
+++ b/pkgs/tools/networking/ratools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "ratools";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     install -vD man/* -t $out/share/man/man8
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A fast, dynamic, multi-threading framework for IPv6 Router Advertisements";
     homepage = "https://github.com/danrl/ratools";
     license = licenses.asl20;
diff --git a/pkgs/tools/networking/rcon/default.nix b/pkgs/tools/networking/rcon/default.nix
new file mode 100644
index 00000000000..03c2a1ae1a3
--- /dev/null
+++ b/pkgs/tools/networking/rcon/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, glib, libbsd, check, pcre }:
+
+stdenv.mkDerivation rec {
+  pname = "rcon";
+  version = "0.6";
+
+  src = fetchFromGitHub {
+    owner = "n0la";
+    repo = "rcon";
+    rev = version;
+    sha256 = "sha256-bHm6JeWmpg42VZQXikHl+BMx9zimRLBQWemTqOxyLhw=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [
+    glib
+    libbsd
+    check
+    pcre
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/n0la/rcon";
+    description = "Source RCON client for command line";
+    maintainers = with maintainers; [ f4814n ];
+    platforms = with platforms; linux ++ darwin;
+    license = licenses.bsd2;
+  };
+}
diff --git a/pkgs/tools/networking/rdrview/default.nix b/pkgs/tools/networking/rdrview/default.nix
new file mode 100644
index 00000000000..8f510395705
--- /dev/null
+++ b/pkgs/tools/networking/rdrview/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, libxml2, curl, libseccomp }:
+
+stdenv.mkDerivation {
+  name = "rdrview";
+  version = "unstable-2020-12-22";
+
+  src = fetchFromGitHub {
+    owner = "eafer";
+    repo = "rdrview";
+    rev = "7be01fb36a6ab3311a9ad1c8c2c75bf5c1345d93";
+    sha256 = "00hnvrrrkyp5429rzcvabq2z00lp1l8wsqxw4h7qsdms707mjnxs";
+  };
+
+  buildInputs = [ libxml2 curl libseccomp ];
+
+  installPhase = ''
+    install -Dm755 rdrview -t $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Command line tool to extract main content from a webpage";
+    homepage = "https://github.com/eafer/rdrview";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ djanatyn ];
+  };
+}
diff --git a/pkgs/tools/networking/reaver-wps-t6x/default.nix b/pkgs/tools/networking/reaver-wps-t6x/default.nix
index d347273f50e..147eb2c3bf2 100644
--- a/pkgs/tools/networking/reaver-wps-t6x/default.nix
+++ b/pkgs/tools/networking/reaver-wps-t6x/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libpcap, pixiewps, makeWrapper }:
+{ lib, stdenv, fetchFromGitHub, libpcap, pixiewps, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "reaver-wps-t6x";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
 
   sourceRoot = "source/src";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Online and offline brute force attack against WPS";
     homepage = "https://github.com/t6x/reaver-wps-fork-t6x";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/networking/reaver-wps/default.nix b/pkgs/tools/networking/reaver-wps/default.nix
index 9f4f2d5bea4..ec226f50668 100644
--- a/pkgs/tools/networking/reaver-wps/default.nix
+++ b/pkgs/tools/networking/reaver-wps/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libpcap, sqlite, makeWrapper }:
+{ lib, stdenv, fetchurl, libpcap, sqlite, makeWrapper }:
 
 stdenv.mkDerivation rec {
   version = "1.4";
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
     wrapProgram $out/bin/wash   --run "[ -s ${confdir}/reaver/reaver.db ] || install -D $out/etc/reaver.db ${confdir}/reaver/reaver.db"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Brute force attack against Wifi Protected Setup";
     homepage = "https://code.google.com/archive/p/reaver-wps/";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/networking/redfang/default.nix b/pkgs/tools/networking/redfang/default.nix
new file mode 100644
index 00000000000..9e18d687dc0
--- /dev/null
+++ b/pkgs/tools/networking/redfang/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitLab, fetchpatch, bluez }:
+
+stdenv.mkDerivation rec {
+  pname = "redfang";
+  version = "2.5";
+
+  src = fetchFromGitLab {
+    group = "kalilinux";
+    owner = "packages";
+    repo = pname;
+    rev = "upstream/${version}";
+    sha256 = "sha256-dF9QmBckyHAZ+JbLr0jTmp0eMu947unJqjrTMsJAfIE=";
+  };
+
+  patches = [
+    # make install rule
+    (fetchpatch {
+      url = "https://gitlab.com/kalilinux/packages/redfang/-/merge_requests/1.diff";
+      sha256 = "sha256-oxIrUAucxsBL4+u9zNNe2XXoAd088AEAHcRB/AN7B1M=";
+    })
+  ];
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-format-security";
+
+  buildInputs = [ bluez ];
+
+  meta = with lib; {
+    description = "A small proof-of-concept application to find non discoverable bluetooth devices";
+    homepage = "https://gitlab.com/kalilinux/packages/redfang";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ fortuneteller2k ];
+  };
+}
diff --git a/pkgs/tools/networking/redir/default.nix b/pkgs/tools/networking/redir/default.nix
index 7f69dacedf3..83d52fdf10d 100644
--- a/pkgs/tools/networking/redir/default.nix
+++ b/pkgs/tools/networking/redir/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   pname = "redir";
@@ -16,8 +16,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/redsocks/default.nix b/pkgs/tools/networking/redsocks/default.nix
index d389221eabb..b609cce90bc 100644
--- a/pkgs/tools/networking/redsocks/default.nix
+++ b/pkgs/tools/networking/redsocks/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libevent }:
+{ lib, stdenv, fetchFromGitHub, libevent }:
 
 let
   pkg = "redsocks";
@@ -26,8 +26,8 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.ekleog ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/ripmime/default.nix b/pkgs/tools/networking/ripmime/default.nix
index 0c3c32270b1..0dfeb900c9a 100644
--- a/pkgs/tools/networking/ripmime/default.nix
+++ b/pkgs/tools/networking/ripmime/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl, libiconv }:
 
 stdenv.mkDerivation rec {
   pname = "ripmime";
@@ -8,6 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "0sj06ibmlzy34n8v0mnlq2gwidy7n2aqcwgjh0xssz3vi941aqc9";
   };
 
+  buildInputs = [ libiconv ];
   preInstall = ''
     sed -i Makefile -e "s@LOCATION=.*@LOCATION=$out@" -e "s@man/man1@share/&@"
     mkdir -p "$out/bin" "$out/share/man/man1"
@@ -15,11 +16,11 @@ stdenv.mkDerivation rec {
 
   NIX_CFLAGS_COMPILE=" -Wno-error ";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Attachment extractor for MIME messages";
     maintainers = with maintainers; [ raskin ];
     homepage = "http://www.pldaniels.com/ripmime/";
-    platforms = platforms.linux;
+    platforms = platforms.all;
   };
 
   passthru = {
diff --git a/pkgs/tools/networking/rp-pppoe/default.nix b/pkgs/tools/networking/rp-pppoe/default.nix
index d8476d1d159..fd3a563c209 100644
--- a/pkgs/tools/networking/rp-pppoe/default.nix
+++ b/pkgs/tools/networking/rp-pppoe/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, ppp } :
+{ lib, stdenv, fetchurl, ppp } :
 let
   version = "3.12";
 in
@@ -21,7 +21,7 @@ stdenv.mkDerivation {
     sed -i Makefile -e 's@PPPOESERVER_PPPD_OPTIONS=@&$(out)@'
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Roaring Penguin Point-to-Point over Ethernet tool";
     platforms = platforms.linux;
     homepage = "https://www.roaringpenguin.com/products/pppoe";
diff --git a/pkgs/tools/networking/rshijack/default.nix b/pkgs/tools/networking/rshijack/default.nix
index 59558028c01..39f4004eaee 100644
--- a/pkgs/tools/networking/rshijack/default.nix
+++ b/pkgs/tools/networking/rshijack/default.nix
@@ -2,22 +2,22 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "rshijack";
-  version = "0.3.0";
+  version = "0.4.0";
 
   src = fetchFromGitHub {
     owner = "kpcyrd";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0y01hi3jpfawqlqs8ka0vwfhjw5j5gkhk2nz5m13ns2h27bw20v7";
+    sha256 = "sha256-jpiwbjsYsb5scFbjtv2eTv6oo0HWWTYLpnpTZ8DEqb0=";
   };
 
-  cargoSha256 = "0l1kavacnjvi22l6pawgkqqxnjaizi3pddqkhwjshw4pzzixzvli";
+  cargoSha256 = "sha256-biHDnLu7OiYpnwtmayk2m6QYvX51YUVJH2FGP4qo14Q=";
 
   meta = with lib; {
     description = "TCP connection hijacker";
     homepage = "https://github.com/kpcyrd/rshijack";
     license = licenses.gpl3;
     maintainers = with maintainers; [ xrelkd ];
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/s3cmd/default.nix b/pkgs/tools/networking/s3cmd/default.nix
index 53f24ddb752..888d6a05c67 100644
--- a/pkgs/tools/networking/s3cmd/default.nix
+++ b/pkgs/tools/networking/s3cmd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildPythonApplication, fetchFromGitHub, python_magic, dateutil }:
+{ lib, buildPythonApplication, fetchFromGitHub, python_magic, python-dateutil }:
 
 buildPythonApplication rec {
   pname = "s3cmd";
@@ -11,11 +11,11 @@ buildPythonApplication rec {
     sha256 = "0p6mbgai7f0c12pkw4s7d649gj1f8hywj60pscxvj9jsna3iifhs";
   };
 
-  propagatedBuildInputs = [ python_magic dateutil ];
+  propagatedBuildInputs = [ python_magic python-dateutil ];
 
   dontUseSetuptoolsCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://s3tools.org/s3cmd";
     description = "Command line tool for managing Amazon S3 and CloudFront services";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/s3gof3r/default.nix b/pkgs/tools/networking/s3gof3r/default.nix
index 0930be914cf..4623b68ad4c 100644
--- a/pkgs/tools/networking/s3gof3r/default.nix
+++ b/pkgs/tools/networking/s3gof3r/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, buildGoPackage, fetchgit }:
+{ lib, buildGoPackage, fetchgit }:
 
 buildGoPackage rec {
   pname = "s3gof3r";
-  version = "20151109-${stdenv.lib.strings.substring 0 7 rev}";
+  version = "20151109-${lib.strings.substring 0 7 rev}";
   rev = "31603a0dc94aefb822bfe2ceea75a6be6013b445";
 
   goPackagePath = "github.com/rlmcpherson/s3gof3r";
diff --git a/pkgs/tools/networking/s3rs/default.nix b/pkgs/tools/networking/s3rs/default.nix
new file mode 100644
index 00000000000..2e707ed9916
--- /dev/null
+++ b/pkgs/tools/networking/s3rs/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, rustPlatform, python3, perl, openssl, Security, fetchFromGitHub, pkg-config }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "s3rs";
+  version = "0.4.8";
+
+  src = fetchFromGitHub {
+    owner = "yanganto";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-lYIE5yR7UNUjpqfwT6R0C0ninNvVZdatYd/n+yyGsms=";
+  };
+
+  cargoSha256 = "sha256-vCTJ7TClvuIP9IoqXwNFH7/u9jXt/Ue/Dhefx5rCgmA=";
+
+  nativeBuildInputs = [ python3 perl pkg-config ];
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "A s3 cli client with multi configs with diffent provider";
+    homepage = "https://github.com/yanganto/s3rs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ yanganto ];
+  };
+}
diff --git a/pkgs/tools/networking/s4cmd/default.nix b/pkgs/tools/networking/s4cmd/default.nix
index dedbc751179..95dc02cb5cd 100644
--- a/pkgs/tools/networking/s4cmd/default.nix
+++ b/pkgs/tools/networking/s4cmd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3Packages }:
+{ lib, python3Packages }:
 
 python3Packages.buildPythonApplication rec {
   pname = "s4cmd";
@@ -26,7 +26,7 @@ python3Packages.buildPythonApplication rec {
   # Test suite requires an S3 bucket
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/bloomreach/s4cmd";
     description = "Super S3 command line tool";
     license = licenses.asl20;
diff --git a/pkgs/tools/networking/s5cmd/default.nix b/pkgs/tools/networking/s5cmd/default.nix
new file mode 100644
index 00000000000..f4a6c2915be
--- /dev/null
+++ b/pkgs/tools/networking/s5cmd/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "s5cmd";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "peak";
+    repo = "s5cmd";
+    rev = "v${version}";
+    sha256 = "sha256-09vBYwnTfLIuu2SPP7DYB+U6sUkQffglIOHNn4+47qQ=";
+  };
+
+  vendorSha256 = null;
+
+  meta = with lib; {
+    homepage = "https://github.com/peak/s5cmd";
+    description = "Parallel S3 and local filesystem execution tool";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tomberek ];
+  };
+}
diff --git a/pkgs/tools/networking/s6-dns/default.nix b/pkgs/tools/networking/s6-dns/default.nix
index 739fdc2e2fc..a4ebf5beef9 100644
--- a/pkgs/tools/networking/s6-dns/default.nix
+++ b/pkgs/tools/networking/s6-dns/default.nix
@@ -4,8 +4,8 @@ with skawarePackages;
 
 buildPackage {
   pname = "s6-dns";
-  version = "2.3.2.0";
-  sha256 = "09hyb1xv9glqq0yy7wy8hiwvlr78kwv552pags8ancgamag15di7";
+  version = "2.3.5.1";
+  sha256 = "0qsgqwdr5ms337fc9f2b4aa5cr7myvbzndvgkgswnrdwszjm078c";
 
   description = "A suite of DNS client programs and libraries for Unix systems";
 
diff --git a/pkgs/tools/networking/s6-networking/default.nix b/pkgs/tools/networking/s6-networking/default.nix
index f8c479d5ce2..e0c8eda9c74 100644
--- a/pkgs/tools/networking/s6-networking/default.nix
+++ b/pkgs/tools/networking/s6-networking/default.nix
@@ -1,17 +1,16 @@
-{ stdenv, skawarePackages
+{ lib, skawarePackages
 
 # Whether to build the TLS/SSL tools and what library to use
-# acceptable values: "libressl", false
-# TODO: add bearssl
-, sslSupport ? "libressl" , libressl
+# acceptable values: "bearssl", "libressl", false
+, sslSupport ? "bearssl" , libressl, bearssl
 }:
 
 with skawarePackages;
 let
-  inherit (stdenv) lib;
   sslSupportEnabled = sslSupport != false;
   sslLibs = {
     libressl = libressl;
+    bearssl = bearssl;
   };
 
 in
@@ -20,8 +19,8 @@ assert sslSupportEnabled -> sslLibs ? ${sslSupport};
 
 buildPackage {
   pname = "s6-networking";
-  version = "2.3.1.2";
-  sha256 = "1029bgwfmv903y5ji93j75m7p2jgchdxya1khxzb42q2z7yxnlyr";
+  version = "2.4.1.1";
+  sha256 = "0m55ibx7k2wgrqbpci1n667ij0h925ajzggxalq2pj65kmwcmyx3";
 
   description = "A suite of small networking utilities for Unix systems";
 
@@ -59,7 +58,7 @@ buildPackage {
     # remove all s6 executables from build directory
     rm $(find -name "s6-*" -type f -mindepth 1 -maxdepth 1 -executable)
     rm minidentd
-    rm libs6net.* libstls.*
+    rm libs6net.* libstls.* libs6tls.* libsbearssl.*
 
     mv doc $doc/share/doc/s6-networking/html
   '';
diff --git a/pkgs/tools/networking/saldl/default.nix b/pkgs/tools/networking/saldl/default.nix
index d51e5515bd6..d02acb3100a 100644
--- a/pkgs/tools/networking/saldl/default.nix
+++ b/pkgs/tools/networking/saldl/default.nix
@@ -1,7 +1,8 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
-, pkgconfig
+, pkg-config
 , wafHook
+, python3
 , asciidoc
 , docbook_xml_dtd_45
 , docbook_xsl
@@ -13,18 +14,19 @@
 
 stdenv.mkDerivation rec {
   pname = "saldl";
-  version = "40";
+  version = "41";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "v${version}";
-    sha256 = "19ajci5h5gdnrvwf0l7xy5s58z2di68rrvcmqpsmpp4lfr37rk2l";
+    sha256 = "sha256-PAX2MUyBWWU8kGkaeoCJteidgszh7ipwDJbrLXzVsn0=";
   };
 
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     wafHook
+    python3
     asciidoc
     docbook_xml_dtd_45
     docbook_xsl
@@ -38,7 +40,7 @@ stdenv.mkDerivation rec {
 
   outputs = [ "out" "man" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "CLI downloader optimized for speed and early preview";
     homepage = "https://saldl.github.io";
     license = licenses.agpl3;
diff --git a/pkgs/tools/networking/samplicator/default.nix b/pkgs/tools/networking/samplicator/default.nix
index 0cc446edd9c..44546465d9e 100644
--- a/pkgs/tools/networking/samplicator/default.nix
+++ b/pkgs/tools/networking/samplicator/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   pname = "samplicator";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/shadowfox/default.nix b/pkgs/tools/networking/shadowfox/default.nix
index 5f7247248e7..e6b1c823eb8 100644
--- a/pkgs/tools/networking/shadowfox/default.nix
+++ b/pkgs/tools/networking/shadowfox/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, buildGoModule }:
+{ lib, fetchFromGitHub, buildGoModule }:
 
 buildGoModule rec {
   pname = "shadowfox";
@@ -15,9 +15,11 @@ buildGoModule rec {
 
   doCheck = false;
 
-  buildFlags = [ "--tags" "release" ];
+  buildFlagsArray = [
+    "-ldflags=-X main.tag=v${version}"
+  ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = ''
       This project aims at creating a universal dark theme for Firefox while
       adhering to the modern design principles set by Mozilla.
diff --git a/pkgs/tools/networking/shadowsocks-libev/default.nix b/pkgs/tools/networking/shadowsocks-libev/default.nix
index 7ad0f1e862d..b0a24b539c2 100644
--- a/pkgs/tools/networking/shadowsocks-libev/default.nix
+++ b/pkgs/tools/networking/shadowsocks-libev/default.nix
@@ -1,18 +1,18 @@
-{ stdenv, fetchFromGitHub, cmake
+{ lib, 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";
+  version = "3.3.5";
 
   # Git tag includes CMake build files which are much more convenient.
   src = fetchFromGitHub {
     owner = "shadowsocks";
     repo = pname;
     rev = "refs/tags/v${version}";
-    sha256 = "05f1vvd0r0wanbb61rf4p6y991jp7625l0i223v23r2ji43y3i5a";
+    sha256 = "1iqpmhxk354db1x08axg6wrdy9p9a4mz0h9351i3mf3pqd1v6fdw";
     fetchSubmodules = true;
   };
 
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
     cp lib/* $out/lib
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A lightweight secured SOCKS5 proxy";
     longDescription = ''
       Shadowsocks-libev is a lightweight secured SOCKS5 proxy for embedded devices and low-end boxes.
diff --git a/pkgs/tools/networking/shadowsocks-rust/default.nix b/pkgs/tools/networking/shadowsocks-rust/default.nix
index 3fb34697da1..97157071733 100644
--- a/pkgs/tools/networking/shadowsocks-rust/default.nix
+++ b/pkgs/tools/networking/shadowsocks-rust/default.nix
@@ -1,28 +1,29 @@
-{ stdenv, fetchFromGitHub, rustPlatform, pkgconfig, openssl, libsodium, Security }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, CoreServices, libiconv }:
 
 rustPlatform.buildRustPackage rec {
   pname = "shadowsocks-rust";
-  version = "1.8.16";
+  version = "1.10.7";
 
   src = fetchFromGitHub {
     rev = "v${version}";
     owner = "shadowsocks";
     repo = pname;
-    sha256 = "09wncvy1cn8038xf8srz8y955xw9h59zh7avrh060wm50azrhlg5";
+    sha256 = "08k5j469750bhlq49qc5nwc2jjgmy9qsm58nf2jfwhxlpflv12sc";
   };
 
-  cargoSha256 = "0n03dg1rrhlryap0dqqmmzhp49lxvhh3478z123x23fm04ygln44";
+  cargoSha256 = "1r8w5cdygd26m95q9qpqa85aixx25jr510hpjlllbpfvm7zjpbqk";
 
-  SODIUM_USE_PKG_CONFIG = 1;
+  RUSTC_BOOTSTRAP = 1;
 
-  buildInputs = [ openssl libsodium ]
-    ++ stdenv.lib.optionals stdenv.isDarwin [ Security ];
-  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices libiconv ];
 
-  meta = with stdenv.lib; {
+  checkFlags = [ "--skip=http_proxy" "--skip=udp_tunnel" ];
+
+  meta = with lib; {
     homepage = "https://github.com/shadowsocks/shadowsocks-rust";
     description = "A Rust port of shadowsocks";
     license = licenses.mit;
     maintainers = [ maintainers.marsam ];
+    broken = stdenv.isAarch64;  # crypto2 crate doesn't build on aarch64
   };
 }
diff --git a/pkgs/tools/networking/shncpd/default.nix b/pkgs/tools/networking/shncpd/default.nix
index 46c9b22248a..8cfd1f94252 100644
--- a/pkgs/tools/networking/shncpd/default.nix
+++ b/pkgs/tools/networking/shncpd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation {
   pname = "shncpd";
@@ -17,7 +17,7 @@ stdenv.mkDerivation {
     makeFlags=( "PREFIX=$out" )
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Simple, stupid and slow HNCP daemon";
     homepage = "https://www.irif.univ-paris-diderot.fr/~jch/software/homenet/shncpd.html";
     license = licenses.mit;
diff --git a/pkgs/tools/networking/shorewall/default.nix b/pkgs/tools/networking/shorewall/default.nix
index 67f81b82105..f95fc9d92b1 100644
--- a/pkgs/tools/networking/shorewall/default.nix
+++ b/pkgs/tools/networking/shorewall/default.nix
@@ -3,23 +3,23 @@
 , fetchurl
 , gnugrep
 , gnused
-, iproute
+, iproute2
 , ipset
 , iptables
 , perl
 , perlPackages
-, stdenv
+, lib, stdenv
 , tree
-, utillinux
+, util-linux
 }:
 let
-  PATH = stdenv.lib.concatStringsSep ":"
+  PATH = lib.concatStringsSep ":"
            [ "${coreutils}/bin"
-             "${iproute}/bin"
+             "${iproute2}/bin"
              "${iptables}/bin"
              "${ipset}/bin"
              "${ebtables}/bin"
-             "${utillinux}/bin"
+             "${util-linux}/bin"
              "${gnugrep}/bin"
              "${gnused}/bin"
            ];
@@ -46,11 +46,11 @@ stdenv.mkDerivation rec {
 
   buildInputs = [
     coreutils
-    iproute
+    iproute2
     ipset
     iptables
     ebtables
-    utillinux
+    util-linux
     gnugrep
     gnused
     perl
@@ -124,7 +124,7 @@ stdenv.mkDerivation rec {
       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;
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/siege/default.nix b/pkgs/tools/networking/siege/default.nix
index 21b6bd346fd..175595edafb 100644
--- a/pkgs/tools/networking/siege/default.nix
+++ b/pkgs/tools/networking/siege/default.nix
@@ -1,16 +1,25 @@
-{ stdenv, fetchurl, openssl, zlib }:
+{ lib
+, stdenv
+, fetchurl
+, openssl
+, zlib
+}:
 
 stdenv.mkDerivation rec {
-  name = "siege-4.0.6";
+  pname = "siege";
+  version = "4.1.1";
 
   src = fetchurl {
-    url = "http://download.joedog.org/siege/${name}.tar.gz";
-    sha256 = "03w0iska74nb6r8wnljn7inasbq7qflf55vjmxnb9jrc4pi7mpnw";
+    url = "http://download.joedog.org/siege/${pname}-${version}.tar.gz";
+    sha256 = "1a74py0ib1gr3znv9ah5acw67ngl08b14dbc90ww9clvgdr2ag0l";
   };
 
-  NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isLinux "-lgcc_s";
+  NIX_LDFLAGS = lib.optionalString stdenv.isLinux "-lgcc_s";
 
-  buildInputs = [ openssl zlib ];
+  buildInputs = [
+    openssl
+    zlib
+  ];
 
   prePatch = ''
     sed -i -e 's/u_int32_t/uint32_t/g' -e '1i#include <stdint.h>' src/hash.c
@@ -21,10 +30,11 @@ stdenv.mkDerivation rec {
     "--with-zlib=${zlib.dev}"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "HTTP load tester";
-    maintainers = with maintainers; [ ocharles raskin ];
-    platforms = platforms.unix;
+    homepage = "https://www.joedog.org/siege-home/";
     license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/simpleproxy/default.nix b/pkgs/tools/networking/simpleproxy/default.nix
index 7a5bc713fae..6c110be05da 100644
--- a/pkgs/tools/networking/simpleproxy/default.nix
+++ b/pkgs/tools/networking/simpleproxy/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "simpleproxy";
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
     sha256 = "1my9g4vp19dikx3fsbii4ichid1bs9b9in46bkg05gbljhj340f6";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/vzaliva/simpleproxy";
     description = "A simple TCP proxy";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/sipcalc/default.nix b/pkgs/tools/networking/sipcalc/default.nix
index 081f2005330..c9470cd5b8b 100644
--- a/pkgs/tools/networking/sipcalc/default.nix
+++ b/pkgs/tools/networking/sipcalc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "sipcalc";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "cfd476c667f7a119e49eb5fe8adcfb9d2339bc2e0d4d01a1d64b7c229be56357";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Advanced console ip subnet calculator";
     homepage = "http://www.routemeister.net/projects/sipcalc/";
     license = licenses.bsd3;
diff --git a/pkgs/tools/networking/sipsak/default.nix b/pkgs/tools/networking/sipsak/default.nix
index 09de1c2e594..55620497286 100644
--- a/pkgs/tools/networking/sipsak/default.nix
+++ b/pkgs/tools/networking/sipsak/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, autoreconfHook, c-ares, openssl ? null }:
+{ lib, stdenv, fetchurl, autoreconfHook, c-ares, openssl ? null }:
 
 stdenv.mkDerivation rec {
   pname = "sipsak";
@@ -17,10 +17,10 @@ stdenv.mkDerivation rec {
     sha256 = "769fe59966b1962b67aa35aad7beb9a2110ebdface36558072a05c6405fb5374";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/sipwise/sipsak";
     description = "SIP Swiss army knife";
-    license = stdenv.lib.licenses.gpl2;
+    license = lib.licenses.gpl2;
     maintainers = with maintainers; [ sheenobu ];
     platforms = with platforms; unix;
   };
diff --git a/pkgs/tools/networking/sish/default.nix b/pkgs/tools/networking/sish/default.nix
new file mode 100644
index 00000000000..181582f5452
--- /dev/null
+++ b/pkgs/tools/networking/sish/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "sish";
+  version = "1.1.5";
+
+  src = fetchFromGitHub {
+    owner = "antoniomika";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "06ckgxhnijs7yrj0hhwh1vk2fvapwn6wb44w3g6qs6n6fmqh92mb";
+  };
+
+  vendorSha256 = "0vfazbaiaqka5nd7imh5ls7k3asf1c17y081nzkban98svg3l3sj";
+
+  meta = with lib; {
+    description = "HTTP(S)/WS(S)/TCP Tunnels to localhost";
+    homepage = "https://github.com/antoniomika/sish";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/networking/slirp4netns/default.nix b/pkgs/tools/networking/slirp4netns/default.nix
index 60cb3413253..c08f234ab5b 100644
--- a/pkgs/tools/networking/slirp4netns/default.nix
+++ b/pkgs/tools/networking/slirp4netns/default.nix
@@ -1,4 +1,5 @@
-{ stdenv
+{ lib
+, stdenv
 , fetchFromGitHub
 , autoreconfHook
 , pkg-config
@@ -11,13 +12,13 @@
 
 stdenv.mkDerivation rec {
   pname = "slirp4netns";
-  version = "1.1.4";
+  version = "1.1.11";
 
   src = fetchFromGitHub {
     owner = "rootless-containers";
     repo = "slirp4netns";
     rev = "v${version}";
-    sha256 = "13hlljkqss9abjpwaa5gcn6qnax0ws03zzh45c4rv1if7rwk6nbl";
+    sha256 = "sha256-Gxcu9XlLPLcFUoCDrMeWJ6SGUSHU9ZKPHq1oBvmNoJ8=";
   };
 
   nativeBuildInputs = [ autoreconfHook pkg-config ];
@@ -28,7 +29,7 @@ stdenv.mkDerivation rec {
 
   passthru.tests = { inherit (nixosTests) podman; };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/rootless-containers/slirp4netns";
     description = "User-mode networking for unprivileged network namespaces";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/smartdns/default.nix b/pkgs/tools/networking/smartdns/default.nix
index 62a9aaf216c..91fcc0e982e 100644
--- a/pkgs/tools/networking/smartdns/default.nix
+++ b/pkgs/tools/networking/smartdns/default.nix
@@ -1,15 +1,14 @@
-{ stdenv, fetchFromGitHub, openssl }:
+{ lib, stdenv, fetchFromGitHub, openssl }:
 
 stdenv.mkDerivation rec {
   pname = "smartdns";
-  version =
-    "30"; # This would be used later in the next release as the FHS commit integrated into realse 31.
+  version = "33";
 
   src = fetchFromGitHub {
     owner = "pymumu";
     repo = pname;
-    rev = "3ad7cd7f454eec2fbdf338c0eb0541da301f1e73";
-    sha256 = "1y9p8gxpj2k4a10maggkxg8l55jvr7x1wyxi69waxf56ggh2dvv0";
+    rev = "Release${version}";
+    sha256 = "0cmzpm4y1yi96mg2cz2byqw6vl62dgnikldy08q43vi7jl3y0749";
   };
 
   buildInputs = [ openssl ];
@@ -22,7 +21,7 @@ stdenv.mkDerivation rec {
 
   installFlags = [ "SYSCONFDIR=${placeholder "out"}/etc" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description =
       "A local DNS server to obtain the fastest website IP for the best Internet experience";
     longDescription = ''
diff --git a/pkgs/tools/networking/smokeping/default.nix b/pkgs/tools/networking/smokeping/default.nix
index 80f8b49a0cc..6d0d5227111 100644
--- a/pkgs/tools/networking/smokeping/default.nix
+++ b/pkgs/tools/networking/smokeping/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fping, rrdtool, perlPackages }:
+{ lib, stdenv, fetchurl, fping, rrdtool, perlPackages }:
 
 stdenv.mkDerivation rec {
   pname = "smokeping";
@@ -17,8 +17,8 @@ stdenv.mkDerivation rec {
   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 ];
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.all;
+    maintainers = [ lib.maintainers.erictapen ];
   };
 }
diff --git a/pkgs/tools/networking/snabb/default.nix b/pkgs/tools/networking/snabb/default.nix
index 52ad14c1d11..affe6577eb8 100644
--- a/pkgs/tools/networking/snabb/default.nix
+++ b/pkgs/tools/networking/snabb/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchFromGitHub, bash, makeWrapper, git, mysql, diffutils, which, coreutils, procps, nettools
+{ lib, stdenv, fetchFromGitHub, bash, makeWrapper, git, mariadb, diffutils, which, coreutils, procps, nettools
 ,supportOpenstack ? true
 }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   pname = "snabb";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
     sha256 = "1sas9d9kk92mc2wrwgmm0xxz7ycmh388dwvyxf1hy183yvin1nac";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
   NIX_CFLAGS_COMPILE = [ "-Wno-error=stringop-truncation" ];
 
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
     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:${mariadb}/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
   '';
 
@@ -58,6 +58,6 @@ stdenv.mkDerivation rec {
     '';
     platforms = [ "x86_64-linux" ];
     license = licenses.asl20;
-    maintainers = [ maintainers.lukego maintainers.domenkozar ];
+    maintainers = [ maintainers.lukego ];
   };
 }
diff --git a/pkgs/tools/networking/sniffglue/default.nix b/pkgs/tools/networking/sniffglue/default.nix
index ec57e851f4b..13efa6e999c 100644
--- a/pkgs/tools/networking/sniffglue/default.nix
+++ b/pkgs/tools/networking/sniffglue/default.nix
@@ -1,26 +1,26 @@
-{ lib, fetchFromGitHub, rustPlatform, libpcap, libseccomp, pkgconfig }:
+{ lib, fetchFromGitHub, rustPlatform, libpcap, libseccomp, pkg-config }:
 
 rustPlatform.buildRustPackage rec {
   pname = "sniffglue";
-  version = "0.11.1";
+  version = "0.12.1";
 
   src = fetchFromGitHub {
     owner = "kpcyrd";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0lkz25z0qy1giss4rnhkx9fvsdd8ckf4z1gqw46zl664x96bb705";
+    sha256 = "sha256-2LyCiW1MrAahpbzyxot0INPMzo0Vl/JToMZTinCQdgs=";
   };
 
-  cargoSha256 = "01ya9535whi2kviw57f25n8h05ckpb4bq1h7qav6srai97rm937s";
+  cargoSha256 = "sha256-AGwiyC7Zf8KHQIHfHByL06sdbS4vEXUyj1wGw7Q1N9I=";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   buildInputs = [ libpcap libseccomp ];
 
   meta = with lib; {
     description = "Secure multithreaded packet sniffer";
     homepage = "https://github.com/kpcyrd/sniffglue";
-    license = licenses.gpl3;
+    license = licenses.gpl3Plus;
     maintainers = with maintainers; [ xrelkd ];
     platforms = platforms.linux;
   };
diff --git a/pkgs/tools/networking/socat/2.x.nix b/pkgs/tools/networking/socat/2.x.nix
index 97775a00604..0105fa322c1 100644
--- a/pkgs/tools/networking/socat/2.x.nix
+++ b/pkgs/tools/networking/socat/2.x.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, openssl }:
+{ lib, stdenv, fetchurl, openssl }:
 
 stdenv.mkDerivation rec {
   name = "socat-2.0.0-b9";
@@ -10,9 +10,9 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ openssl ];
 
-  patches = stdenv.lib.singleton ./libressl-fixes.patch ;
+  patches = lib.singleton ./libressl-fixes.patch ;
 
-  meta = with stdenv.lib; {
+  meta = with 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";
diff --git a/pkgs/tools/networking/socat/default.nix b/pkgs/tools/networking/socat/default.nix
index c50b2236c9e..7a24ccf33b7 100644
--- a/pkgs/tools/networking/socat/default.nix
+++ b/pkgs/tools/networking/socat/default.nix
@@ -1,11 +1,19 @@
-{ stdenv, fetchurl, openssl, readline, which, nettools }:
+{ lib
+, fetchurl
+, nettools
+, openssl
+, readline
+, stdenv
+, which
+}:
 
 stdenv.mkDerivation rec {
-  name = "socat-1.7.3.4";
+  pname = "socat";
+  version = "1.7.4.1";
 
   src = fetchurl {
-    url = "http://www.dest-unreach.org/socat/download/${name}.tar.bz2";
-    sha256 = "1z7xgnwiqpcv1j6aghhj9nqbx7cg3gpc4n9j7vi9hm7nhv5788wp";
+    url = "http://www.dest-unreach.org/socat/download/${pname}-${version}.tar.bz2";
+    sha256 = "1sbmqqvni3ss9wyay6ik5v81kxffkra80mh4ypgj74g82iba5b1z";
   };
 
   postPatch = ''
@@ -22,12 +30,12 @@ stdenv.mkDerivation rec {
   checkInputs = [ which nettools ];
   doCheck = false; # fails a bunch, hangs
 
-  meta = {
-    description = "A utility for bidirectional data transfer between two independent data channels";
+  meta = with lib; {
+    description = "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 ];
+    platforms = platforms.unix;
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ eelco ];
   };
 }
diff --git a/pkgs/tools/networking/spiped/default.nix b/pkgs/tools/networking/spiped/default.nix
index 9cc3370c0a1..8b9d4c9e7b8 100644
--- a/pkgs/tools/networking/spiped/default.nix
+++ b/pkgs/tools/networking/spiped/default.nix
@@ -1,41 +1,38 @@
-{ stdenv, fetchurl, openssl, coreutils }:
+{ lib, stdenv, fetchurl, openssl, coreutils }:
 
 stdenv.mkDerivation rec {
   pname = "spiped";
-  version = "1.5.0";
+  version = "1.6.1";
 
   src = fetchurl {
     url    = "https://www.tarsnap.com/spiped/${pname}-${version}.tgz";
-    sha256 = "1mxcbxifr3bnj6ga8lz88y4bhff016i6kjdzwbb3gzb2zcs4pxxj";
+    sha256 = "8d7089979db79a531a0ecc507b113ac6f2cf5f19305571eff1d3413e0ab33713";
   };
 
   buildInputs = [ openssl ];
 
-  patchPhase = ''
+  postPatch = ''
     substituteInPlace libcperciva/cpusupport/Build/cpusupport.sh \
+      --replace "dirname" "${coreutils}/bin/dirname" \
       --replace "2>/dev/null" "2>stderr.log"
 
-    substituteInPlace POSIX/posix-l.sh       \
+    substituteInPlace libcperciva/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 = ''
+    runHook preInstall
     mkdir -p $out/bin $out/share/man/man1
     make install BINDIR=$out/bin MAN1DIR=$out/share/man/man1
+    runHook postInstall
   '';
 
   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 ];
+    license     = lib.licenses.bsd2;
+    platforms   = lib.platforms.unix;
+    maintainers = [ lib.maintainers.thoughtpolice ];
   };
 }
diff --git a/pkgs/tools/networking/spoofer/default.nix b/pkgs/tools/networking/spoofer/default.nix
index cadaf021cda..f5c8317d89b 100644
--- a/pkgs/tools/networking/spoofer/default.nix
+++ b/pkgs/tools/networking/spoofer/default.nix
@@ -1,23 +1,25 @@
-{ stdenv, fetchurl, pkgconfig, protobuf, openssl, libpcap, traceroute
+{ lib, stdenv, fetchurl, pkg-config, protobuf, openssl, libpcap, traceroute
 , withGUI ? false, qt5 }:
 
-let inherit (stdenv.lib) optional;
+let inherit (lib) optional;
 in
 
 stdenv.mkDerivation rec {
   pname = "spoofer";
-  version = "1.4.5";
+  version = "1.4.6";
 
   src = fetchurl {
     url = "https://www.caida.org/projects/spoofer/downloads/${pname}-${version}.tar.gz";
-    sha256 = "0pnim3xyfsmv6alsvhwjs4v9lp39wwiyj63rxsqyz4wx4vkmn12z";
+    sha256 = "sha256-+4FNC+rMxIoVXlW7HnBXUg0P4FhNvMTAqJ9c7lXQ6vE=";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ openssl protobuf libpcap traceroute ]
                 ++ optional withGUI qt5.qtbase ;
 
-  meta = with stdenv.lib; {
+  dontWrapQtApps = true;
+
+  meta = with lib; {
     homepage = "https://www.caida.org/projects/spoofer";
     description = "Assess and report on deployment of source address validation";
     longDescription = ''
@@ -34,6 +36,6 @@ stdenv.mkDerivation rec {
     '';
     platforms = platforms.all;
     license = licenses.gpl3Plus;
-    maintainers = with stdenv.lib.maintainers; [ leenaars];
+    maintainers = with lib.maintainers; [ leenaars];
   };
 }
diff --git a/pkgs/tools/networking/srelay/default.nix b/pkgs/tools/networking/srelay/default.nix
index 1e7486dd305..9ff25d6a17c 100644
--- a/pkgs/tools/networking/srelay/default.nix
+++ b/pkgs/tools/networking/srelay/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation {
   name = "srelay-0.4.8";
@@ -15,7 +15,7 @@ stdenv.mkDerivation {
   meta = {
     description = "A SOCKS proxy and relay";
     homepage = "http://socks-relay.sourceforge.net/";
-    platforms = stdenv.lib.platforms.unix;
-    license = stdenv.lib.licenses.bsd3;
+    platforms = lib.platforms.unix;
+    license = lib.licenses.bsd3;
   };
 }
diff --git a/pkgs/tools/networking/ssh-askpass-fullscreen/default.nix b/pkgs/tools/networking/ssh-askpass-fullscreen/default.nix
new file mode 100644
index 00000000000..05e51837126
--- /dev/null
+++ b/pkgs/tools/networking/ssh-askpass-fullscreen/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, gtk2, openssh }:
+
+stdenv.mkDerivation rec {
+  pname = "ssh-askpass-fullscreen";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "atj";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1zldhylln412974cnxyqcrrc6b4ry3m9s5ijq3dnwz2g7nz1bx9d";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    gtk2
+    openssh
+  ];
+
+  meta = with lib; {
+    description = "A small SSH askpass GUI using GTK+2";
+    homepage = "https://github.com/atj/ssh-askpass-fullscreen";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ caadar ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/networking/ssh-ident/default.nix b/pkgs/tools/networking/ssh-ident/default.nix
index 33211fb0723..1822eda2627 100644
--- a/pkgs/tools/networking/ssh-ident/default.nix
+++ b/pkgs/tools/networking/ssh-ident/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, lib, fetchFromGitHub, python3, makeWrapper, openssh }:
+{ stdenvNoCC, lib, fetchFromGitHub, python3, openssh}:
 
-stdenv.mkDerivation {
+stdenvNoCC.mkDerivation {
   pname = "ssh-ident";
   version = "2016-04-21";
   src = fetchFromGitHub  {
@@ -10,19 +10,22 @@ stdenv.mkDerivation {
     sha256 = "1jf19lz1gwn7cyp57j8d4zs5bq13iw3kw31m8nvr8h6sib2pf815";
   };
 
-  buildInputs = [ python3 makeWrapper ];
+  postPatch = ''
+    substituteInPlace ssh-ident \
+      --replace 'ssh-agent >' '${openssh}/bin/ssh-agent >'
+  '';
+  buildInputs = [ python3 ];
+
   installPhase = ''
     mkdir -p $out/bin
     install -m 755 ssh-ident $out/bin/ssh-ident
-    wrapProgram $out/bin/ssh-ident \
-      --prefix PATH : ${lib.makeBinPath [ openssh  ]}
   '';
 
-  meta = {
+  meta = with lib; {
     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;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ telotortium ];
+    platforms = with platforms; unix;
   };
 }
diff --git a/pkgs/tools/networking/sshoogr/default.nix b/pkgs/tools/networking/sshoogr/default.nix
index 764b34fc5a5..f3c9c1a31fb 100644
--- a/pkgs/tools/networking/sshoogr/default.nix
+++ b/pkgs/tools/networking/sshoogr/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchzip, jdk, makeWrapper }:
+{ lib, stdenv, fetchzip, jdk, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "sshoogr";
@@ -18,14 +18,14 @@ stdenv.mkDerivation rec {
       --prefix JAVA_HOME : ${jdk}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 
+      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";
@@ -33,4 +33,4 @@ stdenv.mkDerivation rec {
     platforms = platforms.all;
     maintainers = with maintainers; [ moaxcp ];
   };
-} 
+}
diff --git a/pkgs/tools/networking/sshpass/default.nix b/pkgs/tools/networking/sshpass/default.nix
index 7f5644edb52..60c9ab97a8b 100644
--- a/pkgs/tools/networking/sshpass/default.nix
+++ b/pkgs/tools/networking/sshpass/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation rec {
   pname = "sshpass";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "0q7fblaczb7kwbsz0gdy9267z0sllzgmf0c7z5c9mf88wv74ycn6";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://sourceforge.net/projects/sshpass/";
     description = "Non-interactive ssh password auth";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/sshping/default.nix b/pkgs/tools/networking/sshping/default.nix
index 20f0eaa7e47..13abba539ac 100644
--- a/pkgs/tools/networking/sshping/default.nix
+++ b/pkgs/tools/networking/sshping/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchFromGitHub, libssh}:
+{lib, stdenv, fetchFromGitHub, libssh}:
 
 stdenv.mkDerivation rec {
   pname = "sshping";
@@ -14,14 +14,14 @@ stdenv.mkDerivation rec {
   buildInputs = [ libssh ];
 
   buildPhase = ''
-      g++ -Wall -I ext/ -o bin/sshping src/sshping.cxx -lssh
+      $CXX -Wall -I ext/ -o bin/sshping src/sshping.cxx -lssh
     '';
 
   installPhase = ''
       install -Dm755 bin/sshping $out/bin/sshping
     '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/spook/sshping";
     description = "Measure character-echo latency and bandwidth for an interactive ssh session";
     license = licenses.mit;
diff --git a/pkgs/tools/networking/ssldump/default.nix b/pkgs/tools/networking/ssldump/default.nix
index b492b5a226b..fc92f43981b 100644
--- a/pkgs/tools/networking/ssldump/default.nix
+++ b/pkgs/tools/networking/ssldump/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, openssl, libpcap }:
+{ lib, stdenv, fetchFromGitHub, openssl, libpcap }:
 
 stdenv.mkDerivation {
   pname = "ssldump";
@@ -21,10 +21,10 @@ stdenv.mkDerivation {
                      "--with-openssl-lib=${openssl}/lib"
                      "--with-openssl-inc=${openssl}/include" ];
   meta = {
-    description = "ssldump is an SSLv3/TLS network protocol analyzer";
+    description = "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;
+    maintainers = with lib.maintainers; [ aycanirican ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/sslsplit/default.nix b/pkgs/tools/networking/sslsplit/default.nix
index bf23d06551d..c3a343d7fa1 100644
--- a/pkgs/tools/networking/sslsplit/default.nix
+++ b/pkgs/tools/networking/sslsplit/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, openssl, libevent, libpcap, libnet, zlib }:
+{ lib, stdenv, fetchFromGitHub, openssl, libevent, libpcap, libnet, zlib }:
 
 stdenv.mkDerivation rec {
   pname = "sslsplit";
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
     "LIBNET_BASE=${libnet}"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Transparent SSL/TLS interception";
     homepage = "https://www.roe.ch/SSLsplit";
     platforms = platforms.all;
diff --git a/pkgs/tools/networking/ssmtp/default.nix b/pkgs/tools/networking/ssmtp/default.nix
index 90547eb1364..6957d43e791 100644
--- a/pkgs/tools/networking/ssmtp/default.nix
+++ b/pkgs/tools/networking/ssmtp/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, tlsSupport ? true, openssl ? null}:
+{lib, stdenv, fetchurl, tlsSupport ? true, openssl ? null}:
 
 assert tlsSupport -> openssl != null;
 
@@ -16,7 +16,7 @@ stdenv.mkDerivation {
 
   configureFlags = [
     "--sysconfdir=/etc"
-    (stdenv.lib.enableFeature tlsSupport "ssl")
+    (lib.enableFeature tlsSupport "ssl")
   ];
 
   postConfigure =
@@ -34,11 +34,11 @@ stdenv.mkDerivation {
 
   installTargets = [ "install" "install-sendmail" ];
 
-  buildInputs = stdenv.lib.optional tlsSupport openssl;
+  buildInputs = lib.optional tlsSupport openssl;
 
-  NIX_LDFLAGS = stdenv.lib.optionalString tlsSupport "-lcrypto";
+  NIX_LDFLAGS = lib.optionalString tlsSupport "-lcrypto";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     platforms = platforms.linux;
     license = licenses.gpl2;
     maintainers = with maintainers; [ basvandijk ];
diff --git a/pkgs/tools/networking/sstp/default.nix b/pkgs/tools/networking/sstp/default.nix
index 4d05b478ab4..97e35949b15 100644
--- a/pkgs/tools/networking/sstp/default.nix
+++ b/pkgs/tools/networking/sstp/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchurl, pkgconfig, ppp, libevent, openssl }:
+{ lib, stdenv, fetchurl, pkg-config, ppp, libevent, openssl }:
 
 stdenv.mkDerivation rec {
   pname = "sstp-client";
-  version = "1.0.12";
+  version = "1.0.13";
 
   src = fetchurl {
-    url = "mirror://sourceforge/sstp-client/sstp-client/${version}/sstp-client-${version}.tar.gz";
-    sha256 = "1zv7rx6wh9rhbyg9pg6759by8hc6n4162zrrw0y812cnaw3b8zj8";
+    url = "mirror://sourceforge/sstp-client/sstp-client/sstp-client-${version}.tar.gz";
+    sha256 = "06rjyncmgdy212xf9l9z6mfh4gdmgk7l4y841gb8lpbrl3y5h4ln";
   };
 
   patchPhase =
@@ -21,14 +21,14 @@ stdenv.mkDerivation rec {
     "--with-pppd-plugin-dir=$(out)/lib/pppd"
   ];
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   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;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.ktosiek ];
+    license = lib.licenses.gpl2;
   };
 }
diff --git a/pkgs/tools/networking/stevenblack-blocklist/default.nix b/pkgs/tools/networking/stevenblack-blocklist/default.nix
new file mode 100644
index 00000000000..ddccc9ac635
--- /dev/null
+++ b/pkgs/tools/networking/stevenblack-blocklist/default.nix
@@ -0,0 +1,20 @@
+{ lib, fetchFromGitHub }:
+
+let
+  version = "3.8.2";
+in
+fetchFromGitHub {
+  name = "stevenblack-blocklist-${version}";
+
+  owner = "StevenBlack";
+  repo = "hosts";
+  rev = version;
+  sha256 = "sha256-rkyAF1/kPI34nZ57Hqg8QivK0YERZ54jZ1HQ5oXYgxc=";
+
+  meta = with lib; {
+    description = "Unified hosts file with base extensions";
+    homepage = "https://github.com/StevenBlack/hosts";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fortuneteller2k ];
+  };
+}
diff --git a/pkgs/tools/networking/strongswan/default.nix b/pkgs/tools/networking/strongswan/default.nix
index 6ff141e099c..67df00b8e69 100644
--- a/pkgs/tools/networking/strongswan/default.nix
+++ b/pkgs/tools/networking/strongswan/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, fetchpatch
-, pkgconfig, autoreconfHook
+{ lib, stdenv, fetchurl, fetchpatch
+, pkg-config, autoreconfHook
 , gmp, python3, iptables, ldns, unbound, openssl, pcsclite, glib
 , openresolv
 , systemd, pam
@@ -13,7 +13,7 @@
 # strongswan curl plugin may break.
 # See https://wiki.strongswan.org/projects/strongswan/wiki/Curl for more info.
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   pname = "strongswan";
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
 
   dontPatchELF = true;
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
   buildInputs =
     [ curl gmp python3 ldns unbound openssl pcsclite ]
     ++ optionals enableTNC [ trousers sqlite libxml2 ]
diff --git a/pkgs/tools/networking/stubby/default.nix b/pkgs/tools/networking/stubby/default.nix
index 2a10eb13e32..abe11b7bcb9 100644
--- a/pkgs/tools/networking/stubby/default.nix
+++ b/pkgs/tools/networking/stubby/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, getdns, doxygen, libyaml, darwin, cmake, systemd }:
+{ lib, stdenv, fetchFromGitHub, getdns, doxygen, libyaml, darwin, cmake, systemd }:
 
 stdenv.mkDerivation rec {
   pname = "stubby";
@@ -14,9 +14,9 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ cmake libyaml ];
 
   buildInputs = [ doxygen getdns systemd ]
-    ++ stdenv.lib.optionals stdenv.isDarwin [ darwin.Security ];
+    ++ lib.optionals stdenv.isDarwin [ darwin.Security ];
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/networking/stun/default.nix b/pkgs/tools/networking/stun/default.nix
index 306b1899f76..c74c73ec6a0 100644
--- a/pkgs/tools/networking/stun/default.nix
+++ b/pkgs/tools/networking/stun/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname   = "stun";
@@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
     cp -v debian/manpages/stund.8.gz $server/man/man8
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Stun server and test client";
     homepage    = "https://sourceforge.net/projects/stun/";
     license     = licenses.vsl10;
diff --git a/pkgs/tools/networking/stunnel/default.nix b/pkgs/tools/networking/stunnel/default.nix
index eaa05bfdbad..befc1c3c3ee 100644
--- a/pkgs/tools/networking/stunnel/default.nix
+++ b/pkgs/tools/networking/stunnel/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchurl, openssl }:
+{ lib, stdenv, fetchurl, openssl }:
 
 stdenv.mkDerivation rec {
   pname = "stunnel";
-  version = "5.56";
+  version = "5.59";
 
   src = fetchurl {
     url    = "https://www.stunnel.org/downloads/${pname}-${version}.tar.gz";
-    sha256 = "08kb4gi9fzqngrczykvba6xhaxhq9m4wmdbhxvgrva5rasrvz13k";
+    sha256 = "sha256-E3d232vo8XAfHNWQt3eZMuEjR5+5HlGSFxwWeYgVzp8=";
     # please use the contents of "https://www.stunnel.org/downloads/${name}.tar.gz.sha256",
     # not the output of `nix-prefetch-url`
   };
@@ -31,8 +31,8 @@ stdenv.mkDerivation rec {
   meta = {
     description = "Universal tls/ssl wrapper";
     homepage    = "https://www.stunnel.org/";
-    license     = stdenv.lib.licenses.gpl2Plus;
-    platforms   = stdenv.lib.platforms.unix;
-    maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
+    license     = lib.licenses.gpl2Plus;
+    platforms   = lib.platforms.unix;
+    maintainers = [ lib.maintainers.thoughtpolice ];
   };
 }
diff --git a/pkgs/tools/networking/subfinder/default.nix b/pkgs/tools/networking/subfinder/default.nix
index 70820ea0320..ae87d02fe23 100644
--- a/pkgs/tools/networking/subfinder/default.nix
+++ b/pkgs/tools/networking/subfinder/default.nix
@@ -1,21 +1,28 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
 
-buildGoPackage rec {
+buildGoModule rec {
   pname = "subfinder";
-  version = "2.3.0";
-
-  goPackagePath = "github.com/projectdiscovery/subfinder";
+  version = "2.4.8";
 
   src = fetchFromGitHub {
     owner = "projectdiscovery";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1vjxi2h4njakyqkfzwwaacy37kqx66j2y3k5l752z9va73gv7xv1";
+    sha256 = "1g1j3il1a595g7z8blhvyd5l03h6kccl7mzrx51c33jz74cms5kn";
   };
 
-  goDeps = ./deps.nix;
+  vendorSha256 = "1jmik0zmfy1n3g4yjkskiqzd28dpywf0hw6adgz2jshlhka58iw0";
+
+  modRoot = "./v2";
+
+  subPackages = [
+    "cmd/subfinder/"
+  ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Subdomain discovery tool";
     longDescription = ''
       SubFinder is a subdomain discovery tool that discovers valid
@@ -24,6 +31,6 @@ buildGoPackage rec {
     '';
     homepage = "https://github.com/projectdiscovery/subfinder";
     license = licenses.mit;
-    maintainers = with maintainers; [ fpletz filalex77 ];
+    maintainers = with maintainers; [ fpletz Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/networking/subfinder/deps.nix b/pkgs/tools/networking/subfinder/deps.nix
deleted file mode 100644
index 16427eddcf6..00000000000
--- a/pkgs/tools/networking/subfinder/deps.nix
+++ /dev/null
@@ -1,165 +0,0 @@
-# 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/pkgs/tools/networking/surfraw/default.nix b/pkgs/tools/networking/surfraw/default.nix
index d26bdbbb771..70bb5453518 100644
--- a/pkgs/tools/networking/surfraw/default.nix
+++ b/pkgs/tools/networking/surfraw/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, perl}:
+{lib, stdenv, fetchurl, perl}:
 
 stdenv.mkDerivation {
   name = "surfraw-2.3.0";
@@ -18,7 +18,7 @@ stdenv.mkDerivation {
     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;
+    platforms = lib.platforms.all;
+    license = lib.licenses.publicDomain;
   };
 }
diff --git a/pkgs/tools/networking/swagger-codegen/default.nix b/pkgs/tools/networking/swagger-codegen/default.nix
index ac4c1e24e3b..f2847703bdb 100644
--- a/pkgs/tools/networking/swagger-codegen/default.nix
+++ b/pkgs/tools/networking/swagger-codegen/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchurl, jre, makeWrapper }:
+{ lib, stdenv, fetchurl, jre, makeWrapper }:
 
 stdenv.mkDerivation rec {
-  version = "2.3.1";
+  version = "2.4.19";
   pname = "swagger-codegen";
 
   jarfilename = "${pname}-cli-${version}.jar";
@@ -11,20 +11,20 @@ stdenv.mkDerivation rec {
   ];
 
   src = fetchurl {
-    url = "https://oss.sonatype.org/content/repositories/releases/io/swagger/${pname}-cli/${version}/${jarfilename}";
-    sha256 = "171qr0zx7i6cykv54vqjf3mplrf7w4a1fpq47wsj861lbf8xm322";
+    url = "https://repo1.maven.org/maven2/io/swagger/${pname}-cli/${version}/${jarfilename}";
+    sha256 = "04wl5k8k1ziqz7k5w0g7i6zdfn41pbh3k0m8vq434k1886inf8yn";
   };
 
-  phases = [ "installPhase" ];
+  dontUnpack = true;
 
   installPhase = ''
-    install -D "$src" "$out/share/java/${jarfilename}"
+    install -D $src $out/share/java/${jarfilename}
 
-    makeWrapper ${jre}/bin/java $out/bin/swagger-codegen \
+    makeWrapper ${jre}/bin/java $out/bin/${pname} \
       --add-flags "-jar $out/share/java/${jarfilename}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/networking/swagger-codegen3/default.nix b/pkgs/tools/networking/swagger-codegen3/default.nix
new file mode 100644
index 00000000000..8fc908a1f2c
--- /dev/null
+++ b/pkgs/tools/networking/swagger-codegen3/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  version = "3.0.25";
+  pname = "swagger-codegen";
+
+  jarfilename = "${pname}-cli-${version}.jar";
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  src = fetchurl {
+    url = "https://repo1.maven.org/maven2/io/swagger/codegen/v3/${pname}-cli/${version}/${jarfilename}";
+    sha256 = "1rdz45kmmg60fs7ddnla1xq30nah6s6rd18fqbjbjxng8r92brnd";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    install -D $src $out/share/java/${jarfilename}
+
+    makeWrapper ${jre}/bin/java $out/bin/${pname}3 \
+      --add-flags "-jar $out/share/java/${jarfilename}"
+  '';
+
+  meta = with 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/tree/3.0.0";
+    license = licenses.asl20;
+    maintainers = [ maintainers._1000101 ];
+  };
+}
diff --git a/pkgs/tools/networking/swaks/default.nix b/pkgs/tools/networking/swaks/default.nix
index 81d0935f0b0..49ef0afc060 100644
--- a/pkgs/tools/networking/swaks/default.nix
+++ b/pkgs/tools/networking/swaks/default.nix
@@ -1,15 +1,16 @@
-{ stdenv, fetchurl, perl, perlPackages, makeWrapper }:
+{ lib, stdenv, fetchurl, perl, perlPackages, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "swaks";
-  version = "20190914.0";
+  version = "20201014.0";
 
   src = fetchurl {
     url = "https://www.jetmore.org/john/code/swaks/files/${pname}-${version}.tar.gz";
-    sha256 = "12awq5z4sdd54cxprj834zajxhkpy4jwhzf1fhigcx1zbhdaacsp";
+    sha256 = "0c2sx4nrh4whsqzj6m5ay8d7yqan3aqgg436p8jb25bs91ykn2pv";
   };
 
-  buildInputs = [ perl makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
 
   installPhase = ''
     mkdir -p $out/bin
@@ -21,10 +22,10 @@ stdenv.mkDerivation rec {
       ]}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.jetmore.org/john/code/swaks/";
     description = "A featureful, flexible, scriptable, transaction-oriented SMTP test tool";
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
     maintainers = with maintainers; [];
     platforms = platforms.all;
   };
diff --git a/pkgs/tools/networking/swec/default.nix b/pkgs/tools/networking/swec/default.nix
index e65bc5e208f..c98a3417d1c 100644
--- a/pkgs/tools/networking/swec/default.nix
+++ b/pkgs/tools/networking/swec/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, makeWrapper, perlPackages }:
+{ fetchurl, lib, stdenv, makeWrapper, perlPackages }:
 
 stdenv.mkDerivation rec {
   name = "swec-0.4";
@@ -8,7 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "1m3971z4z1wr0paggprfz0n8ng8vsnkc9m6s3bdplgyz7qjk6jwx";
   };
 
-  buildInputs = [ makeWrapper perlPackages.perl perlPackages.LWP perlPackages.URI perlPackages.HTMLParser ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perlPackages.perl perlPackages.LWP perlPackages.URI perlPackages.HTMLParser ];
   checkInputs = [ perlPackages.HTTPServerSimple perlPackages.Parent ];
 
   configurePhase = ''
@@ -64,9 +65,9 @@ stdenv.mkDerivation rec {
          (well, not exactly true, SWEC will ignore robots.txt).
       '';
 
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
 
     maintainers = [ ];
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/tayga/default.nix b/pkgs/tools/networking/tayga/default.nix
index 1cecf2d634d..8d0de6a6c18 100644
--- a/pkgs/tools/networking/tayga/default.nix
+++ b/pkgs/tools/networking/tayga/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   version = "0.9.2";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "1700y121lhvpna49bjpssb7jq1abj9qw5wxgjn8gzp6jm4kpj7rb";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Userland stateless NAT64 daemon";
     longDescription = ''
       TAYGA is an out-of-kernel stateless NAT64 implementation
diff --git a/pkgs/tools/networking/cutter/default.nix b/pkgs/tools/networking/tcp-cutter/default.nix
index 2430e75430b..ade825dbe10 100644
--- a/pkgs/tools/networking/cutter/default.nix
+++ b/pkgs/tools/networking/tcp-cutter/default.nix
@@ -1,10 +1,11 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
-  name = "cutter-1.04";
+  pname = "tcp-cutter";
+  version = "1.04";
 
   src = fetchurl {
-    url = "http://www.digitage.co.uk/digitage/files/cutter/${name}.tgz";
+    url = "http://www.digitage.co.uk/digitage/files/cutter/${pname}-${version}.tgz";
     sha256 = "100iy31a3njif6vh9gfsqrm14hac05rrflla275gd4rkxdlnqcqv";
   };
 
@@ -12,7 +13,7 @@ stdenv.mkDerivation rec {
     install -D -m 0755 cutter $out/bin/tcp-cutter
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/networking/tcpdump/default.nix b/pkgs/tools/networking/tcpdump/default.nix
index fd7b203fbbf..6726e5b751a 100644
--- a/pkgs/tools/networking/tcpdump/default.nix
+++ b/pkgs/tools/networking/tcpdump/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchurl, libpcap, perl }:
+{ lib, stdenv, fetchurl, libpcap, perl }:
 
 stdenv.mkDerivation rec {
   pname = "tcpdump";
-  version = "4.9.3";
+  version = "4.99.1";
 
   src = fetchurl {
     url = "http://www.tcpdump.org/release/${pname}-${version}.tar.gz";
-    sha256 = "0434vdcnbqaia672rggjzdn4bb8p8dchz559yiszzdk0sjrprm1c";
+    sha256 = "sha256-ebNphfsnAxRmGNh8Ss3j4Gi5HFU/uT8CGjN/F1/RDr4=";
   };
 
   postPatch = ''
@@ -17,15 +17,15 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ libpcap ];
 
-  configureFlags = stdenv.lib.optional
+  configureFlags = lib.optional
     (stdenv.hostPlatform != stdenv.buildPlatform)
     "ac_cv_linux_vers=2";
 
-  meta = {
+  meta = with lib; {
     description = "Network sniffer";
-    homepage = "http://www.tcpdump.org/";
-    license = "BSD-style";
-    maintainers = with stdenv.lib.maintainers; [ globin ];
-    platforms = stdenv.lib.platforms.unix;
+    homepage = "https://www.tcpdump.org/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ globin ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/tcpflow/default.nix b/pkgs/tools/networking/tcpflow/default.nix
index 8f502c5ef3f..cc923c0daf6 100644
--- a/pkgs/tools/networking/tcpflow/default.nix
+++ b/pkgs/tools/networking/tcpflow/default.nix
@@ -5,13 +5,13 @@
 
 stdenv.mkDerivation rec {
   pname   = "tcpflow";
-  version = "1.5.2";
+  version = "1.6.1";
 
   src = fetchFromGitHub {
     owner  = "simsong";
     repo   = pname;
     rev    = "${pname}-${version}";
-    sha256 = "063n3pfqa0lgzcwk4c0h01g2y5c3sli615j6a17dxpg95aw1zryy";
+    sha256 = "0vbm097jhi5n8pg08ia1yhzc225zv9948blb76f4br739l9l22vq";
     fetchSubmodules = true;
   };
 
@@ -23,13 +23,15 @@ stdenv.mkDerivation rec {
     substituteInPlace bootstrap.sh \
       --replace ".git" "" \
       --replace "/bin/rm" "rm"
-    substituteInPlace configure.ac \
-      --replace "1.5.1" "1.5.2"
+    # Temporary fix for a build error:
+    # https://src.fedoraproject.org/rpms/tcpflow/blob/979e250032b90de2d6b9e5b94b5203d98cccedad/f/tcpflow-1.6.1-format.patch
+    substituteInPlace src/datalink.cpp \
+      --replace 'DEBUG(6)(s.c_str());' 'DEBUG(6) ("%s", s.c_str());'
   '';
 
   preConfigure = "bash ./bootstrap.sh";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "TCP stream extractor";
     longDescription = ''
       tcpflow is a program that captures data transmitted as part of TCP
@@ -38,7 +40,7 @@ stdenv.mkDerivation rec {
     '';
     inherit (src.meta) homepage;
     license     = licenses.gpl3;
-    maintainers = with maintainers; [ primeos raskin obadz ];
+    maintainers = with maintainers; [ raskin obadz ];
     platforms   = platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/tcpreplay/default.nix b/pkgs/tools/networking/tcpreplay/default.nix
index b40df721c83..ed83e4d4554 100644
--- a/pkgs/tools/networking/tcpreplay/default.nix
+++ b/pkgs/tools/networking/tcpreplay/default.nix
@@ -1,15 +1,19 @@
-{ stdenv, fetchurl, libpcap, tcpdump }:
+{ lib, stdenv, fetchurl, libpcap, tcpdump, Carbon, CoreServices }:
 
 stdenv.mkDerivation rec {
   pname = "tcpreplay";
-  version = "4.3.3";
+  version = "4.3.4";
 
   src = fetchurl {
     url = "https://github.com/appneta/tcpreplay/releases/download/v${version}/tcpreplay-${version}.tar.gz";
-    sha256 = "1plgjm3dr9rr5q71s7paqk2wgrvkihbk2yrf9g3zaks3m750497d";
+    sha256 = "sha256-7gZTEIBsIuL9NvAU4euzMbmKfsTblY6Rw9nL2gZA2Sw=";
   };
 
-  buildInputs = [ libpcap ];
+  buildInputs = [ libpcap ]
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [
+      Carbon CoreServices
+    ];
+
 
   configureFlags = [
     "--disable-local-libopts"
@@ -21,11 +25,11 @@ stdenv.mkDerivation rec {
     "--with-tcpdump=${tcpdump}/bin"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A suite of utilities for editing and replaying network traffic";
-    homepage = "http://tcpreplay.appneta.com/";
-    license = with licenses; [ bsd3 gpl3 ];
+    homepage = "https://tcpreplay.appneta.com/";
+    license = with licenses; [ bsdOriginalUC gpl3Only ];
     maintainers = with maintainers; [ eleanor ];
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/tcptraceroute/default.nix b/pkgs/tools/networking/tcptraceroute/default.nix
index 6901166e38f..1eacd685463 100644
--- a/pkgs/tools/networking/tcptraceroute/default.nix
+++ b/pkgs/tools/networking/tcptraceroute/default.nix
@@ -1,4 +1,4 @@
-{ stdenv  , fetchurl, libpcap, libnet
+{ lib, stdenv  , fetchurl, libpcap, libnet
 }:
 
 stdenv.mkDerivation rec {
@@ -20,9 +20,9 @@ stdenv.mkDerivation rec {
    buildInputs = [ libpcap libnet ];
 
    meta = {
-     description = "A traceroute implementation using TCP packets.";
+     description = "A traceroute implementation using TCP packets";
      homepage = "https://github.com/mct/tcptraceroute";
-     license = stdenv.lib.licenses.gpl2;
+     license = lib.licenses.gpl2;
      maintainers = [ ];
    };
 }
diff --git a/pkgs/tools/networking/tdns-cli/default.nix b/pkgs/tools/networking/tdns-cli/default.nix
index 681109712ab..9f1ac89ce8e 100644
--- a/pkgs/tools/networking/tdns-cli/default.nix
+++ b/pkgs/tools/networking/tdns-cli/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform }:
+{ lib, fetchFromGitHub, rustPlatform }:
 
 rustPlatform.buildRustPackage rec {
   name = "tdns-cli";
@@ -11,9 +11,9 @@ rustPlatform.buildRustPackage rec {
     sha256 = "0nn036in5j1h0vxkwif0lf7fn900zy4f4kxlzy6qdx3jakgmxvwh";
   };
 
-  cargoSha256 = "0v1hx6kjsmydx6ckjqj31y2gcpvax4mshwrniicplkka3q6hx9ra";
+  cargoSha256 = "14mmfj5my8gbsdhlhz17w8wjcc085c6dkj78kwr2hhsbcxp1vjgg";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "DNS tool that aims to replace dig and nsupdate";
     homepage = "https://github.com/rotty/tdns-cli";
     license = licenses.gpl3;
diff --git a/pkgs/tools/networking/telepresence/default.nix b/pkgs/tools/networking/telepresence/default.nix
index 285a3764e03..5d1966114b7 100644
--- a/pkgs/tools/networking/telepresence/default.nix
+++ b/pkgs/tools/networking/telepresence/default.nix
@@ -3,7 +3,7 @@
 , iptables, bash }:
 
 let
-  sshuttle-telepresence = 
+  sshuttle-telepresence =
     let
       sshuttleTelepresenceRev = "32226ff14d98d58ccad2a699e10cdfa5d86d6269";
     in
@@ -22,16 +22,16 @@ let
       });
 in pythonPackages.buildPythonPackage rec {
   pname = "telepresence";
-  version = "0.105";
+  version = "0.108";
 
   src = fetchFromGitHub {
     owner = "telepresenceio";
     repo = "telepresence";
     rev = version;
-    sha256 = "0fccbd54ryd9rcbhfh5lx8qcc3kx3k9jads918rwnzwllqzjf7sg";
+    sha256 = "6V0sM0Z+2xNDgL0wIzJOdaUp2Ol4ejNTk9K/pllVa7g=";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
   postInstall = ''
     wrapProgram $out/bin/telepresence \
diff --git a/pkgs/tools/networking/telepresence2/default.nix b/pkgs/tools/networking/telepresence2/default.nix
new file mode 100644
index 00000000000..54de621763c
--- /dev/null
+++ b/pkgs/tools/networking/telepresence2/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "telepresence2";
+  version = "2.3.6";
+
+  src = fetchFromGitHub {
+    owner = "telepresenceio";
+    repo = "telepresence";
+    rev = "v${version}";
+    sha256 = "1bs4h450109vhy18kpyy6y4p5l9kvz4w09m56fxh5z547m5ax6k3";
+  };
+
+  vendorSha256 = "0xmw9mc0iy64kb12lsii4nn63ynh6gab9ls8z6mrizjjqz845sa5";
+
+  buildFlagsArray = ''
+    -ldflags=-s -w -X=github.com/telepresenceio/telepresence/v2/pkg/version.Version=${src.rev}
+  '';
+
+  subPackages = [ "cmd/telepresence" ];
+
+  meta = with lib; {
+    description = "Local development against a remote Kubernetes or OpenShift cluster";
+    homepage = "https://www.getambassador.io/docs/telepresence/2.1/quick-start/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mausch ];
+  };
+}
diff --git a/pkgs/tools/networking/tendermint/default.nix b/pkgs/tools/networking/tendermint/default.nix
index 081819458f0..b97c49dd9c9 100644
--- a/pkgs/tools/networking/tendermint/default.nix
+++ b/pkgs/tools/networking/tendermint/default.nix
@@ -1,26 +1,28 @@
-{ stdenv, fetchFromGitHub, buildGoModule }:
+{ lib, fetchFromGitHub, buildGoModule }:
 
 buildGoModule rec {
   pname = "tendermint";
-  version = "0.33.8";
+  version = "0.34.8";
 
   src = fetchFromGitHub {
     owner = "tendermint";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1dcr60gmbkb6833n49mjmlr082ahlv7alaqycl8g3d4f93kdm5c3";
+    sha256 = "sha256:03k44w23167az2kk6ccp3139kykzkhack4w2vy0wvs2lb67xiqd9";
   };
 
-  vendorSha256 = "0i0n89lal99fqnzva51kp9f7wzqsfmncpshwxhq26kvykp7ji7sw";
-
-  doCheck = false;
+  vendorSha256 = "sha256-0Y9QDBVNYE2x3nY3loRKTCtYWXRnK7v+drRVvTMY4Dg=";
 
   subPackages = [ "cmd/tendermint" ];
 
-  buildFlagsArray = [ "-ldflags=-s -w -X github.com/tendermint/tendermint/version.GitCommit=${src.rev}" ];
+  preBuild = ''
+    makeFlagsArray+=(
+      "-ldflags=-s -w -X github.com/tendermint/tendermint/version.GitCommit=${src.rev}"
+    )
+  '';
 
-  meta = with stdenv.lib; {
-    description = "Byzantine-Fault Tolerant State Machines. Or Blockchain, for short.";
+  meta = with lib; {
+    description = "Byzantine-Fault Tolerant State Machines. Or Blockchain, for short";
     homepage = "https://tendermint.com/";
     license = licenses.asl20;
     maintainers = with maintainers; [ alexfmpe ];
diff --git a/pkgs/tools/networking/termshark/default.nix b/pkgs/tools/networking/termshark/default.nix
index 51168f01f44..7b9a3c42d60 100644
--- a/pkgs/tools/networking/termshark/default.nix
+++ b/pkgs/tools/networking/termshark/default.nix
@@ -1,25 +1,25 @@
-{ stdenv, fetchFromGitHub, makeWrapper, buildGoModule, wireshark-cli }:
+{ lib, fetchFromGitHub, makeWrapper, buildGoModule, wireshark-cli }:
 
 buildGoModule rec {
   pname = "termshark";
-  version = "2.1.1";
+  version = "2.2.0";
 
   src = fetchFromGitHub {
     owner = "gcla";
     repo = "termshark";
     rev = "v${version}";
-    sha256 = "14h548apg3zvjvq6yy22hpw2ziy5vmwyr04vv59ls1mjg4qf2v8b";
+    sha256 = "sha256-vS6j8Mcri3SI/6HqtFX/EzVl8S0lx8fWU+0ddjzJz8g=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
   buildInputs = [ wireshark-cli ];
 
-  vendorSha256 = "14apff3vcbndr30765lzi4qswakavb4396bjixxvpxv6i5c04dq7";
+  vendorSha256 = "sha256-md9HHiYOsBimCBjD1FyjTqnskCZksQiEggWd5UW0RPM=";
 
   doCheck = false;
 
   postFixup = ''
-    wrapProgram $out/bin/termshark --prefix PATH : ${stdenv.lib.makeBinPath [ wireshark-cli ]}
+    wrapProgram $out/bin/termshark --prefix PATH : ${lib.makeBinPath [ wireshark-cli ]}
   '';
 
   buildFlagsArray = ''
@@ -27,7 +27,7 @@ buildGoModule rec {
     -X github.com/gcla/termshark.Version=${version}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://termshark.io/";
     description = "A terminal UI for wireshark-cli, inspired by Wireshark";
     license = licenses.mit;
diff --git a/pkgs/tools/networking/tftp-hpa/default.nix b/pkgs/tools/networking/tftp-hpa/default.nix
index 2d88c9bf07e..f8e028dc616 100644
--- a/pkgs/tools/networking/tftp-hpa/default.nix
+++ b/pkgs/tools/networking/tftp-hpa/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "tftp-hpa";
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "12vidchglhyc20znq5wdsbhi9mqg90jnl7qr9qs8hbvaz4fkdvmg";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "TFTP tools - a lot of fixes on top of BSD TFTP";
     maintainers = with maintainers; [ raskin ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/networking/tgt/default.nix b/pkgs/tools/networking/tgt/default.nix
index 478c1ed35f2..ba1f89af433 100644
--- a/pkgs/tools/networking/tgt/default.nix
+++ b/pkgs/tools/networking/tgt/default.nix
@@ -1,16 +1,16 @@
-{ stdenv, lib, fetchFromGitHub, libxslt, libaio, systemd, perl, perlPackages
-, docbook_xsl, coreutils, lsof, rdma-core, makeWrapper, sg3_utils, utillinux
+{ stdenv, lib, fetchFromGitHub, libxslt, libaio, systemd, perl
+, docbook_xsl, coreutils, lsof, rdma-core, makeWrapper, sg3_utils, util-linux
 }:
 
 stdenv.mkDerivation rec {
   pname = "tgt";
-  version = "1.0.79";
+  version = "1.0.80";
 
   src = fetchFromGitHub {
     owner = "fujita";
     repo = pname;
     rev = "v${version}";
-    sha256 = "18bp7fcpv7879q3ppdxlqj7ayqmlh5zwrkz8gch6rq9lkmmrklrf";
+    sha256 = "sha256-5qBqCHbkL6yw/iT2AtSumw8V0bV74TEyYMRgcPHW2lg=";
   };
 
   nativeBuildInputs = [ libxslt docbook_xsl makeWrapper ];
@@ -35,7 +35,7 @@ stdenv.mkDerivation rec {
 
   postInstall = ''
     substituteInPlace $out/sbin/tgt-admin \
-      --replace "#!/usr/bin/perl" "#! ${perl}/bin/perl -I${perlPackages.ConfigGeneral}/${perl.libPrefix}"
+      --replace "#!/usr/bin/perl" "#! ${perl.withPackages (p: [ p.ConfigGeneral ])}/bin/perl"
     wrapProgram $out/sbin/tgt-admin --prefix PATH : \
       ${lib.makeBinPath [ lsof sg3_utils (placeholder "out") ]}
 
@@ -49,7 +49,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "iSCSI Target daemon with RDMA support";
     homepage = "http://stgt.sourceforge.net/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/tinc/default.nix b/pkgs/tools/networking/tinc/default.nix
index e331916626e..2387c903a9b 100644
--- a/pkgs/tools/networking/tinc/default.nix
+++ b/pkgs/tools/networking/tinc/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, lzo, openssl, zlib}:
+{lib, stdenv, fetchurl, lzo, openssl, zlib}:
 
 stdenv.mkDerivation rec {
   version = "1.0.36";
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
       authentication, compression and ethernet bridging.
     '';
     homepage="http://www.tinc-vpn.org/";
-    license = stdenv.lib.licenses.gpl2Plus;
-    platforms = stdenv.lib.platforms.unix;
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/tinc/pre.nix b/pkgs/tools/networking/tinc/pre.nix
index 85cdd19702f..5bd1858c195 100644
--- a/pkgs/tools/networking/tinc/pre.nix
+++ b/pkgs/tools/networking/tinc/pre.nix
@@ -1,25 +1,17 @@
-{ stdenv, fetchgit, fetchpatch, autoreconfHook, texinfo, ncurses, readline, zlib, lzo, openssl }:
+{ lib, stdenv, fetchgit, fetchpatch, autoreconfHook, texinfo, ncurses, readline, zlib, lzo, openssl }:
 
 stdenv.mkDerivation rec {
   pname = "tinc";
-  version = "1.1pre17";
+  version = "1.1pre18";
 
   src = fetchgit {
-    rev = "refs/tags/release-${version}";
+    rev = "release-${version}";
     url = "git://tinc-vpn.org/tinc";
-    sha256 = "12abmx9qglchgn94a1qwgzldf2kaz77p8705ylpggzyncxv6bw2q";
+    sha256 = "0a7d1xg34p54sv66lckn8rz2bpg7bl01najm2rxiwbsm956y7afm";
   };
 
   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 ];
 
@@ -36,7 +28,7 @@ stdenv.mkDerivation rec {
     "--localstatedir=/var"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "VPN daemon with full mesh routing";
     longDescription = ''
       tinc is a Virtual Private Network (VPN) daemon that uses tunnelling and
@@ -47,6 +39,6 @@ stdenv.mkDerivation rec {
     homepage="http://www.tinc-vpn.org/";
     license = licenses.gpl2Plus;
     platforms = platforms.unix;
-    maintainers = with maintainers; [ fpletz lassulus ];
+    maintainers = with maintainers; [ fpletz lassulus mic92 ];
   };
 }
diff --git a/pkgs/tools/networking/tinyfecvpn/default.nix b/pkgs/tools/networking/tinyfecvpn/default.nix
index aab937c994e..190950e37ec 100644
--- a/pkgs/tools/networking/tinyfecvpn/default.nix
+++ b/pkgs/tools/networking/tinyfecvpn/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig }:
+{ lib, stdenv, fetchFromGitHub, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "tinyfecvpn";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
   };
 
   enableParallelBuilding = true;
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   patchPhase = ''
     runHook prePatch
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/networking/tinyproxy/default.nix b/pkgs/tools/networking/tinyproxy/default.nix
index 7d3c49db7b7..6aa05738498 100644
--- a/pkgs/tools/networking/tinyproxy/default.nix
+++ b/pkgs/tools/networking/tinyproxy/default.nix
@@ -1,55 +1,25 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, asciidoc, libxml2,
-  libxslt, docbook_xsl }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, perl, withDebug ? false }:
 
 stdenv.mkDerivation rec {
   pname = "tinyproxy";
-  version = "1.10.0";
+  version = "1.11.0";
 
   src = fetchFromGitHub {
-    sha256 = "0gzapnllzyc005l3rs6iarjk1p5fc8mf9ysbck1mbzbd8xg6w35s";
+    sha256 = "13fhkmmrwzl657dq04x2wagkpjwdrzhkl141qvzr7y7sli8j0w1n";
     rev = version;
     repo = "tinyproxy";
     owner = "tinyproxy";
   };
 
-  nativeBuildInputs = [ autoreconfHook asciidoc libxml2 libxslt docbook_xsl ];
+  # perl is needed for man page generation.
+  nativeBuildInputs = [ autoreconfHook perl ];
 
-  # -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"'
-  '';
+  configureFlags = lib.optionals withDebug [ "--enable-debug" ]; # Enable debugging support code and methods.
 
-  # 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; {
+  meta = with lib; {
     homepage = "https://tinyproxy.github.io/";
     description = "A light-weight HTTP/HTTPS proxy daemon for POSIX operating systems";
-    license = licenses.gpl2;
+    license = licenses.gpl2Only;
     platforms = platforms.all;
     maintainers = [ maintainers.carlosdagos ];
   };
diff --git a/pkgs/tools/networking/tlspool/default.nix b/pkgs/tools/networking/tlspool/default.nix
index c91c703f28f..01eced9a566 100644
--- a/pkgs/tools/networking/tlspool/default.nix
+++ b/pkgs/tools/networking/tlspool/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub
-, cmake, pkgconfig, arpa2cm
+{ lib, stdenv, fetchFromGitHub
+, cmake, pkg-config, arpa2cm
 , openldap, p11-kit, unbound, libtasn1, db, openssl, quickder, libkrb5, ldns, gnutls-kdh
 , softhsm
 }:
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
   };
 
   nativeBuildInputs = [
-    cmake pkgconfig arpa2cm
+    cmake pkg-config arpa2cm
   ];
 
   buildInputs = [
@@ -43,7 +43,7 @@ stdenv.mkDerivation {
     cp $src/src/*.h $out/include/${pname}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A supercharged TLS daemon that allows for easy, strong and consistent deployment";
     license = licenses.gpl3;
     homepage = "http://www.tlspool.org";
diff --git a/pkgs/tools/networking/tnat64/default.nix b/pkgs/tools/networking/tnat64/default.nix
new file mode 100644
index 00000000000..9b1c2c3aec1
--- /dev/null
+++ b/pkgs/tools/networking/tnat64/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "tnat64";
+  version = "0.05";
+
+  src = fetchFromGitHub {
+    owner = "andrewshadura";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "07lmzidbrd3aahk2jvv93cic9gf36pwmgfd63gmy6hjkxf9a6fw9";
+  };
+
+  postPatch = ''
+    # Fix usage of deprecated sys_errlist
+    substituteInPlace tnat64.c --replace 'sys_errlist[errno]' 'strerror(errno)'
+  '';
+
+  configureFlags = [ "--libdir=$(out)/lib" ];
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "IPv4 to IPv6 interceptor";
+    homepage = "https://github.com/andrewshadura/tnat64";
+    license = licenses.gpl2Plus;
+    longDescription = ''
+      TNAT64 is an interceptor which redirects outgoing TCPv4 connections
+      through NAT64, thus enabling an application running on an IPv6-only host
+      to communicate with the IPv4 world, even if that application does not
+      support IPv6 at all.
+    '';
+    platforms = platforms.unix;
+    badPlatforms = platforms.darwin;
+    maintainers = [ maintainers.rnhmjoj ];
+  };
+
+}
diff --git a/pkgs/tools/networking/toss/default.nix b/pkgs/tools/networking/toss/default.nix
new file mode 100644
index 00000000000..3c8f7296181
--- /dev/null
+++ b/pkgs/tools/networking/toss/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "toss";
+  version = "1.1";
+  src = fetchFromGitHub {
+    owner = "zerotier";
+    repo = pname;
+    rev = version;
+    sha256 = "05ql0d8wbdhnmh3dw8ch5bi6clfb9h8v21lq2a74iy02slya2y0r";
+  };
+  preInstall = "export DESTDIR=$out/bin";
+  meta = with lib;
+    src.meta // {
+      description = "Dead simple LAN file transfers from the command line";
+      license = with licenses; [ mit ];
+      maintainers = with maintainers; [ ehmry ];
+      platforms = platforms.unix;
+    };
+}
diff --git a/pkgs/tools/networking/tox-node/default.nix b/pkgs/tools/networking/tox-node/default.nix
index feeceef81f4..5ed6aa632d3 100644
--- a/pkgs/tools/networking/tox-node/default.nix
+++ b/pkgs/tools/networking/tox-node/default.nix
@@ -1,42 +1,34 @@
-{ stdenv, rustPlatform, fetchFromGitHub
+{ lib, rustPlatform, fetchFromGitHub
 , libsodium, openssl
-, pkgconfig
+, pkg-config
 }:
 
 with rustPlatform;
 
 buildRustPackage rec {
   pname = "tox-node";
-  version = "0.0.8";
+  version = "0.1.1";
 
   src = fetchFromGitHub {
     owner = "tox-rs";
     repo = "tox-node";
     rev = "v${version}";
-    sha256 = "0vnjbhz74d4s6701xsd46ygx0kq8wd8xwpajvkhdivc042mw9078";
+    sha256 = "sha256-tB6v2NEBdTNHf89USdQOr/pV0mbxxb8ftOYPPJMvz5Y=";
   };
 
   buildInputs = [ libsodium openssl ];
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   SODIUM_USE_PKG_CONFIG = "yes";
 
-  installPhase = ''
-    runHook preInstall
-
-    install -D $releaseDir/tox-node $out/bin/tox-node
-
-    runHook postInstall
-  '';
-
   doCheck = false;
 
-  cargoSha256 = "1ka22krw8s05vpamg9naqqf7vv5h8dkpfdik0wy8nispkrxzgb92";
+  cargoSha256 = "sha256-J/0KO33vZmOvm6V7qCXInuAJTbRqyy5/qj6p6dEmoas=";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A server application to run tox node written in pure Rust";
     homepage = "https://github.com/tox-rs/tox-node";
-    license = [ licenses.mit ];
+    license = [ licenses.gpl3Plus ];
     platforms = platforms.linux;
     maintainers = with maintainers; [ suhr ];
   };
diff --git a/pkgs/tools/networking/toxvpn/default.nix b/pkgs/tools/networking/toxvpn/default.nix
index 10e4dc2f1b1..c433d7d0a66 100644
--- a/pkgs/tools/networking/toxvpn/default.nix
+++ b/pkgs/tools/networking/toxvpn/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchFromGitHub, cmake, nlohmann_json,
+{ lib, stdenv, fetchFromGitHub, cmake, nlohmann_json,
   libtoxcore, libsodium, libcap, zeromq,
   systemd ? null }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation {
   name = "toxvpn-2019-09-09";
@@ -23,7 +23,7 @@ stdenv.mkDerivation {
 
   postInstall = "$out/bin/toxvpn -h";
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/networking/tracebox/default.nix b/pkgs/tools/networking/tracebox/default.nix
index 1fe2d25e35d..3d50b11f8e1 100644
--- a/pkgs/tools/networking/tracebox/default.nix
+++ b/pkgs/tools/networking/tracebox/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchzip, autoreconfHook, libcrafter, libpcap, lua }:
+{ lib, stdenv, fetchzip, autoreconfHook, libcrafter, libpcap, lua }:
 
 stdenv.mkDerivation rec {
   pname = "tracebox";
@@ -22,11 +22,11 @@ stdenv.mkDerivation rec {
     sed '/libcrafter/d' -i src/tracebox/Makefile.am
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.tracebox.org/";
     description = "A middlebox detection tool";
-    license = stdenv.lib.licenses.gpl2;
-    maintainers = [ maintainers.lethalman ];
+    license = lib.licenses.gpl2;
+    maintainers = [ ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/traceroute/default.nix b/pkgs/tools/networking/traceroute/default.nix
index 2948a571a38..c941aad258c 100644
--- a/pkgs/tools/networking/traceroute/default.nix
+++ b/pkgs/tools/networking/traceroute/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "traceroute";
@@ -15,10 +15,10 @@ stdenv.mkDerivation rec {
     sed -i 's@LIBS := \(.*\) -lm \(.*\)@LIBS := \1 \2@' Make.rules
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://traceroute.sourceforge.net/";
     description = "Tracks the route taken by packets over an IP network";
-    license = stdenv.lib.licenses.gpl2;
+    license = lib.licenses.gpl2;
     maintainers = [ maintainers.koral ];
     platforms = platforms.linux;
   };
diff --git a/pkgs/tools/networking/trickle/default.nix b/pkgs/tools/networking/trickle/default.nix
index f97d3c85762..8a5143d1e3b 100644
--- a/pkgs/tools/networking/trickle/default.nix
+++ b/pkgs/tools/networking/trickle/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libevent }:
+{ lib, stdenv, fetchurl, libevent, libtirpc }:
 
 stdenv.mkDerivation rec {
   name = "trickle-1.07";
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "0s1qq3k5mpcs9i7ng0l9fvr1f75abpbzfi1jaf3zpzbs1dz50dlx";
   };
 
-  buildInputs = [ libevent ];
+  buildInputs = [ libevent libtirpc ];
 
   preConfigure = ''
     sed -i 's|libevent.a|libevent.so|' configure
@@ -18,7 +18,8 @@ stdenv.mkDerivation rec {
     sed -i '/#define in_addr_t/ s:^://:' config.h
   '';
 
-  LDFLAGS = "-levent";
+  NIX_LDFLAGS = [ "-levent" "-ltirpc" ];
+  NIX_CFLAGS_COMPILE = [ "-I${libtirpc.dev}/include/tirpc" ];
 
   configureFlags = [ "--with-libevent" ];
 
@@ -26,8 +27,8 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Lightweight userspace bandwidth shaper";
-    license = stdenv.lib.licenses.bsd3;
+    license = lib.licenses.bsd3;
     homepage = "https://monkey.org/~marius/pages/?page=trickle";
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/tridactyl-native/default.nix b/pkgs/tools/networking/tridactyl-native/default.nix
index 5dd5f3c153f..ce7325975fb 100644
--- a/pkgs/tools/networking/tridactyl-native/default.nix
+++ b/pkgs/tools/networking/tridactyl-native/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , python3
 }:
@@ -7,13 +7,13 @@ 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.20.0";
+  version = "1.20.4";
 
   src = fetchFromGitHub {
     owner = "tridactyl";
     repo = "tridactyl";
     rev = version;
-    sha256 = "14p6jadw4yij45rrwjbyf1lq3zpsni4sph88c6mlwlf8w830s3q8";
+    sha256 = "sha256-BjjRB9VadQ/MSwNK2QLbcTDoRs6Ua+5MONHtmfq4xz0=";
   };
   sourceRoot = "source/native";
 
@@ -34,7 +34,7 @@ stdenv.mkDerivation rec {
     wrapPythonProgramsIn "$out/share/tridactyl"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tridactyl native messaging host application";
     homepage = "https://github.com/tridactyl/tridactyl";
     license = licenses.asl20;
diff --git a/pkgs/tools/networking/tunnelto/default.nix b/pkgs/tools/networking/tunnelto/default.nix
index c0dce98c444..e750327e4ba 100644
--- a/pkgs/tools/networking/tunnelto/default.nix
+++ b/pkgs/tools/networking/tunnelto/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , rustPlatform
 , fetchFromGitHub
 , openssl
@@ -17,17 +17,17 @@ rustPlatform.buildRustPackage rec {
     sha256 = "1vvb619cq3n88y2s8lncwcyrhb5s4gpjfiyia91pilcpnfdb04y2";
   };
 
-  cargoSha256 = "0k0ig3dynj46kh8g7d6bljcaalmp40pvdbhbjmlxrmwnjq6bhzcq";
+  cargoSha256 = "1pjd62yz7pavcinc96g2x0f5giadl9aqvz1i5vhfanh6mj6mrbl1";
 
-  nativeBuildInputs = stdenv.lib.optionals stdenv.isLinux [ pkg-config ];
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config ];
   buildInputs = [ ]
-    ++ stdenv.lib.optionals stdenv.isLinux [ openssl ]
-    ++ stdenv.lib.optionals stdenv.isDarwin [ Security ];
+    ++ lib.optionals stdenv.isLinux [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Expose your local web server to the internet with a public URL";
     homepage = "https://tunnelto.dev";
     license = licenses.mit;
-    maintainers = with maintainers; [ filalex77 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/networking/twa/default.nix b/pkgs/tools/networking/twa/default.nix
index 21cbd2dfefb..b6038aa5435 100644
--- a/pkgs/tools/networking/twa/default.nix
+++ b/pkgs/tools/networking/twa/default.nix
@@ -40,7 +40,7 @@ stdenv.mkDerivation rec {
     install -Dm 0644 README.md "$out/share/doc/twa/README.md"
 
     wrapProgram "$out/bin/twa" \
-      --prefix PATH : ${stdenv.lib.makeBinPath [ curl
+      --prefix PATH : ${lib.makeBinPath [ curl
                                                  host.dnsutils
                                                  jq
                                                  ncurses
diff --git a/pkgs/tools/networking/ua/default.nix b/pkgs/tools/networking/ua/default.nix
index 9ce7f5df247..feb17b283de 100644
--- a/pkgs/tools/networking/ua/default.nix
+++ b/pkgs/tools/networking/ua/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, buildGoPackage, fetchgit
-, pkgconfig
+{ lib, buildGoPackage, fetchgit
+, pkg-config
 , glib, libxml2
 }:
 
@@ -18,14 +18,14 @@ buildGoPackage rec {
 
   goDeps = ./deps.nix;
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ glib libxml2 ];
 
   meta = {
     homepage = "https://github.com/sloonz/ua";
-    license = stdenv.lib.licenses.isc;
+    license = lib.licenses.isc;
     description = "Universal Aggregator";
-    platforms = stdenv.lib.platforms.unix;
-    maintainers = with stdenv.lib.maintainers; [ ttuegel ];
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ ttuegel ];
   };
 }
diff --git a/pkgs/tools/networking/ubridge/default.nix b/pkgs/tools/networking/ubridge/default.nix
index c628a2c8a8c..ac475e6e8a5 100644
--- a/pkgs/tools/networking/ubridge/default.nix
+++ b/pkgs/tools/networking/ubridge/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub
+{ lib, stdenv, fetchFromGitHub
 , libpcap
 }:
 
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
     mkdir -p $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Bridge for UDP tunnels, Ethernet, TAP, and VMnet interfaces";
     longDescription = ''
       uBridge is a simple application to create user-land bridges between
diff --git a/pkgs/tools/networking/ucspi-tcp/default.nix b/pkgs/tools/networking/ucspi-tcp/default.nix
index 72325df8be7..0d6e0a2f8d9 100644
--- a/pkgs/tools/networking/ucspi-tcp/default.nix
+++ b/pkgs/tools/networking/ucspi-tcp/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "ucspi-tcp-0.88";
@@ -49,7 +49,7 @@ stdenv.mkDerivation rec {
     cp debian/ucspi-tcp-man/*.1 "$out/share/man/man1"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Command-line tools for building TCP client-server applications";
     longDescription = ''
       tcpserver waits for incoming connections and, for each connection, runs a
diff --git a/pkgs/tools/networking/udptunnel/default.nix b/pkgs/tools/networking/udptunnel/default.nix
index 08fb7cd62e0..6063cb38b56 100644
--- a/pkgs/tools/networking/udptunnel/default.nix
+++ b/pkgs/tools/networking/udptunnel/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation {
   name = "udptunnel-19";
@@ -17,8 +17,8 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/networking/uget-integrator/default.nix b/pkgs/tools/networking/uget-integrator/default.nix
index a600d6c5341..2d069ea07f0 100644
--- a/pkgs/tools/networking/uget-integrator/default.nix
+++ b/pkgs/tools/networking/uget-integrator/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, uget, python3Packages }:
+{ lib, stdenv, fetchFromGitHub, uget, python3Packages }:
 
 stdenv.mkDerivation rec {
   pname = "uget-integrator";
@@ -20,16 +20,16 @@ stdenv.mkDerivation rec {
       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
+    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; {
+  meta = with lib; {
     description = "Native messaging host to integrate uGet Download Manager with web browsers";
     homepage = "https://github.com/ugetdm/uget-integrator";
     license = licenses.gpl3;
diff --git a/pkgs/tools/networking/uget/default.nix b/pkgs/tools/networking/uget/default.nix
index f8c585c3b25..2bece5e30dd 100644
--- a/pkgs/tools/networking/uget/default.nix
+++ b/pkgs/tools/networking/uget/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, intltool, openssl, curl, libnotify,
+{ lib, stdenv, fetchurl, pkg-config, intltool, openssl, curl, libnotify,
   libappindicator-gtk3, gst_all_1, gtk3, dconf, wrapGAppsHook, aria2 ? null
 }:
 
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     intltool
     wrapGAppsHook
   ];
@@ -23,17 +23,17 @@ stdenv.mkDerivation rec {
     libnotify
     libappindicator-gtk3
     gtk3
-    (stdenv.lib.getLib dconf)
+    (lib.getLib dconf)
   ]
   ++ (with gst_all_1; [ gstreamer gst-plugins-base gst-plugins-good ])
-  ++ (stdenv.lib.optional (aria2 != null) aria2);
+  ++ (lib.optional (aria2 != null) aria2);
 
   enableParallelBuilding = true;
 
-  preFixup = stdenv.lib.optionalString (aria2 != null)
+  preFixup = lib.optionalString (aria2 != null)
                ''gappsWrapperArgs+=(--suffix PATH : "${aria2}/bin")'';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Download manager using GTK and libcurl";
     longDescription = ''
       uGet is a VERY Powerful download manager application with a large
diff --git a/pkgs/tools/networking/unbound/default.nix b/pkgs/tools/networking/unbound/default.nix
index 39a7b11f09f..a0c774fb734 100644
--- a/pkgs/tools/networking/unbound/default.nix
+++ b/pkgs/tools/networking/unbound/default.nix
@@ -1,24 +1,45 @@
-{ stdenv, fetchurl, openssl, nettle, expat, libevent, dns-root-data }:
+{ stdenv
+, lib
+, fetchurl
+, openssl
+, nettle
+, expat
+, libevent
+, dns-root-data
+, pkg-config
+, makeWrapper
+  #
+  # By default unbound will not be built with systemd support. Unbound is a very
+  # commmon dependency. The transitive dependency closure of systemd also
+  # contains unbound.
+  # Since most (all?) (lib)unbound users outside of the unbound daemon usage do
+  # not need the systemd integration it is likely best to just default to no
+  # systemd integration.
+  # For the daemon use-case, that needs to notify systemd, use `unbound-with-systemd`.
+  #
+, withSystemd ? false
+, systemd ? null
+  # optionally support DNS-over-HTTPS as a server
+, withDoH ? false
+, libnghttp2
+}:
 
 stdenv.mkDerivation rec {
   pname = "unbound";
-  version = "1.11.0";
+  version = "1.13.1";
 
   src = fetchurl {
     url = "https://unbound.net/downloads/${pname}-${version}.tar.gz";
-    sha256 = "1xqywn2qdmjjq0csrqxh9p2rnizdrr1f99zdx87z7f3fyyc0fbwz";
+    sha256 = "sha256-hQTZe4/FvYlzRcldEW4O4N34yP+ZWQqytL0TJ4yfULg=";
   };
 
-  # 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 ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ openssl nettle expat libevent ]
+    ++ lib.optionals withSystemd [ pkg-config systemd ]
+    ++ lib.optionals withDoH [ libnghttp2 ];
 
   configureFlags = [
     "--with-ssl=${openssl.dev}"
@@ -30,15 +51,23 @@ stdenv.mkDerivation rec {
     "--with-rootkey-file=${dns-root-data}/root.key"
     "--enable-pie"
     "--enable-relro-now"
+  ] ++ lib.optional stdenv.hostPlatform.isStatic [
+    "--disable-flto"
+  ] ++ lib.optionals withSystemd [
+    "--enable-systemd"
+  ] ++ lib.optionals withDoH [
+    "--with-libnghttp2=${libnghttp2.dev}"
   ];
 
   installFlags = [ "configfile=\${out}/etc/unbound/unbound.conf" ];
 
   postInstall = ''
     make unbound-event-install
+    wrapProgram $out/bin/unbound-control-setup \
+      --prefix PATH : ${lib.makeBinPath [ openssl ]}
   '';
 
-  preFixup = stdenv.lib.optionalString (stdenv.isLinux && !stdenv.hostPlatform.isMusl) # XXX: revisit
+  preFixup = 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.
@@ -48,17 +77,17 @@ stdenv.mkDerivation rec {
       buildPhase
       installPhase
     ''
-    # get rid of runtime dependencies on $dev outputs
+  # 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;
+  + lib.concatMapStrings
+    (pkg: lib.optionalString (pkg ? dev) " --replace '-L${pkg.dev}/lib' '-L${pkg.out}/lib' --replace '-R${pkg.dev}/lib' '-R${pkg.out}/lib'")
+    (builtins.filter (p: p != null) buildInputs);
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/unbound/python.nix b/pkgs/tools/networking/unbound/python.nix
index 939c2299e32..fcfd93be4d6 100644
--- a/pkgs/tools/networking/unbound/python.nix
+++ b/pkgs/tools/networking/unbound/python.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, openssl, expat, libevent, swig, pythonPackages }:
+{ lib, stdenv, fetchurl, openssl, expat, libevent, swig, pythonPackages }:
 
 let
   inherit (pythonPackages) python;
@@ -54,12 +54,12 @@ in stdenv.mkDerivation rec {
     patchelf --replace-needed libunbound.so.2 $out/${python.sitePackages}/libunbound.so.2 $out/${python.sitePackages}/_unbound.so
     '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms = lib.platforms.unix;
     broken = true;
   };
 }
diff --git a/pkgs/tools/networking/updog/default.nix b/pkgs/tools/networking/updog/default.nix
new file mode 100644
index 00000000000..22942891d6a
--- /dev/null
+++ b/pkgs/tools/networking/updog/default.nix
@@ -0,0 +1,26 @@
+{ lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "updog";
+  version = "1.4";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "7n/ddjF6eJklo+T79+/zBxSHryebc2W9gxwxsb2BbF4=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    colorama flask flask-httpauth werkzeug pyopenssl
+  ];
+
+  checkPhase = ''
+    $out/bin/updog --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Updog is a replacement for Python's SimpleHTTPServer";
+    homepage = "https://github.com/sc0tfree/updog";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ethancedwards8 ];
+  };
+}
diff --git a/pkgs/tools/networking/urlwatch/default.nix b/pkgs/tools/networking/urlwatch/default.nix
index f23aed3707b..b1a374f0349 100644
--- a/pkgs/tools/networking/urlwatch/default.nix
+++ b/pkgs/tools/networking/urlwatch/default.nix
@@ -1,14 +1,17 @@
-{ stdenv, fetchFromGitHub, python3Packages }:
+{ lib
+, fetchFromGitHub
+, python3Packages
+}:
 
 python3Packages.buildPythonApplication rec {
-  name = "urlwatch-${version}";
-  version = "2.19";
+  pname = "urlwatch";
+  version = "2.23";
 
   src = fetchFromGitHub {
-    owner  = "thp";
-    repo   = "urlwatch";
-    rev    = version;
-    sha256 = "05vxs0x8gnsv2r9cy0brqny1y5jnj2mw11lqc8lqahx84xcs2m00";
+    owner = "thp";
+    repo = "urlwatch";
+    rev = version;
+    sha256 = "1ryygy7lalmwnv9kc8q4920gkdx878izy33a5dgxb780sy2qq8pg";
   };
 
   propagatedBuildInputs = with python3Packages; [
@@ -16,16 +19,23 @@ python3Packages.buildPythonApplication rec {
     cssselect
     keyring
     lxml
+    markdown2
+    matrix-client
     minidb
+    pushbullet
     pycodestyle
+    pyppeteer
     pyyaml
     requests
   ];
 
-  meta = with stdenv.lib; {
+  # no tests
+  doCheck = false;
+
+  meta = with lib; {
     description = "A tool for monitoring webpages for updates";
     homepage = "https://thp.io/2008/urlwatch/";
     license = licenses.bsd3;
-    maintainers = with maintainers; [ tv ];
+    maintainers = with maintainers; [ kmein tv ];
   };
 }
diff --git a/pkgs/tools/networking/userhosts/default.nix b/pkgs/tools/networking/userhosts/default.nix
new file mode 100644
index 00000000000..6cec402638a
--- /dev/null
+++ b/pkgs/tools/networking/userhosts/default.nix
@@ -0,0 +1,23 @@
+{lib, stdenv, fetchFromGitHub, pkg-config, ncurses, libnl }:
+
+stdenv.mkDerivation rec {
+  pname = "userhosts";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "figiel";
+    repo = "hosts";
+    rev = "v${version}";
+    hash = "sha256-9uF0fYl4Zz/Ia2UKx7CBi8ZU8jfWoBfy2QSgTSwXo5A";
+  };
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A libc wrapper providing per-user hosts file";
+    homepage = "https://github.com/figiel/hosts";
+    maintainers = [ maintainers.bobvanderlinden ];
+    license = licenses.cc0;
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/networking/uwimap/default.nix b/pkgs/tools/networking/uwimap/default.nix
index bd38a1cfa2f..e675268163a 100644
--- a/pkgs/tools/networking/uwimap/default.nix
+++ b/pkgs/tools/networking/uwimap/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, pam, openssl }:
+{ lib, stdenv, fetchurl, fetchpatch, pam, openssl }:
 
 stdenv.mkDerivation ({
   name = "uw-imap-2007f";
@@ -12,13 +12,13 @@ stdenv.mkDerivation ({
     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" ];
+    ++ lib.optional stdenv.isx86_64 "EXTRACFLAGS=-fPIC"
+    ++ 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;
+    ++ lib.optional (!stdenv.isDarwin) pam;
 
   patches = [ (fetchpatch {
     url = "https://salsa.debian.org/holmgren/uw-imap/raw/dcb42981201ea14c2d71c01ebb4a61691b6f68b3/debian/patches/1006_openssl1.1_autoverify.patch";
@@ -31,7 +31,7 @@ stdenv.mkDerivation ({
     sed -i src/osdep/unix/Makefile -e 's,^SSLLIB=.*,SSLLIB=${openssl.out}/lib,'
   '';
 
-  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.isDarwin
+  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin
     "-I${openssl.dev}/include/openssl";
 
   installPhase = ''
@@ -45,14 +45,14 @@ stdenv.mkDerivation ({
   meta = {
     homepage = "https://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;
+    license = lib.licenses.asl20;
+    platforms = with lib.platforms; linux;
   };
 
   passthru = {
     withSSL = true;
   };
-} // stdenv.lib.optionalAttrs (stdenv.buildPlatform != stdenv.hostPlatform) {
+} // 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 = ''
diff --git a/pkgs/tools/networking/v2ray/default.nix b/pkgs/tools/networking/v2ray/default.nix
index ab3f5eb3ef4..8c82c379c38 100644
--- a/pkgs/tools/networking/v2ray/default.nix
+++ b/pkgs/tools/networking/v2ray/default.nix
@@ -1,38 +1,89 @@
-{ callPackage, fetchFromGitHub, fetchurl
+{ lib, fetchFromGitHub, fetchurl, linkFarm, buildGoModule, runCommand, makeWrapper, nixosTests
 , assetOverrides ? {}
-, ... } @ args:
+}:
 
-callPackage ./generic.nix (rec {
-  version = "4.26.0";
+let
+  version = "4.41.0";
 
   src = fetchFromGitHub {
-    owner = "v2ray";
+    owner = "v2fly";
     repo = "v2ray-core";
     rev = "v${version}";
-    sha256 = "069wm0n44i4l9pnrhwf60ssld65p6gfj4wfc68hrhj4zi4jvlyds";
+    sha256 = "1300gl6y94i1488ja6kic0m5fa2qxakbdc06qd0lgkg6inzbm6gz";
   };
 
-  vendorSha256 = "1520h69z0inbsrw5505cxbinqakvwcrdx3pisrwnp9lv4jsrzzsr";
+  vendorSha256 = "sha256-oHKXDzufvTzOzBqFjBzu3vCwTF/FJMomopY3cUktwiM=";
 
   assets = {
     # MIT licensed
     "geoip.dat" = let
-      geoipRev = "202007080004";
-      geoipSha256 = "1j4qg831dhxdy7brgxn4ca69cvwr3zsgizidlzasbkdn2rwai17y";
+      geoipRev = "202106240309";
+      geoipSha256 = "0ypydpgvizf9pfdxna3f6fqn1svsrkac0p3j9s63y55gbqpglacq";
     in fetchurl {
-      url = "https://github.com/v2ray/geoip/releases/download/${geoipRev}/geoip.dat";
+      url = "https://github.com/v2fly/geoip/releases/download/${geoipRev}/geoip.dat";
       sha256 = geoipSha256;
     };
 
     # MIT licensed
     "geosite.dat" = let
-      geositeRev = "20200708125309";
-      geositeSha256 = "1pr4137ri3v3r880yx5sqf2p7qfn8g7s555q51x3smkjzkyrskcy";
+      geositeRev = "20210626145509";
+      geositeSha256 = "0skhwwlzlyh8rvzyblg1l2xw1bawqs12i6zw5sv3d55pnw7wmf2z";
     in fetchurl {
-      url = "https://github.com/v2ray/domain-list-community/releases/download/${geositeRev}/dlc.dat";
+      url = "https://github.com/v2fly/domain-list-community/releases/download/${geositeRev}/dlc.dat";
       sha256 = geositeSha256;
     };
 
   } // assetOverrides;
 
-} // args)
+  assetsDrv = linkFarm "v2ray-assets" (lib.mapAttrsToList (name: path: {
+    inherit name path;
+  }) assets);
+
+  core = buildGoModule rec {
+    pname = "v2ray-core";
+    inherit version src;
+
+    inherit vendorSha256;
+
+    doCheck = false;
+
+    buildPhase = ''
+      buildFlagsArray=(-v -p $NIX_BUILD_CORES -ldflags="-s -w")
+      runHook preBuild
+      go build "''${buildFlagsArray[@]}" -o v2ray ./main
+      go build "''${buildFlagsArray[@]}" -o v2ctl -tags confonly ./infra/control/main
+      runHook postBuild
+    '';
+
+    installPhase = ''
+      install -Dm755 v2ray v2ctl -t $out/bin
+    '';
+
+    meta = {
+      homepage = "https://www.v2fly.org/en_US/";
+      description = "A platform for building proxies to bypass network restrictions";
+      license = with lib.licenses; [ mit ];
+      maintainers = with lib.maintainers; [ servalcatty ];
+    };
+  };
+
+in runCommand "v2ray-${version}" {
+  inherit src version;
+  inherit (core) meta;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  passthru = {
+    inherit core;
+    updateScript = ./update.sh;
+    tests = {
+      simple-vmess-proxy-test = nixosTests.v2ray;
+    };
+  };
+
+} ''
+  for file in ${core}/bin/*; do
+    makeWrapper "$file" "$out/bin/$(basename "$file")" \
+      --set-default V2RAY_LOCATION_ASSET ${assetsDrv}
+  done
+''
diff --git a/pkgs/tools/networking/v2ray/generic.nix b/pkgs/tools/networking/v2ray/generic.nix
deleted file mode 100644
index 4499e91425f..00000000000
--- a/pkgs/tools/networking/v2ray/generic.nix
+++ /dev/null
@@ -1,52 +0,0 @@
-{ lib, linkFarm, buildGoModule, runCommand, makeWrapper
-
-# Version specific args
-, version, src, assets, vendorSha256
-, ... }:
-
-let
-  assetsDrv = linkFarm "v2ray-assets" (lib.mapAttrsToList (name: path: {
-    inherit name path;
-  }) assets);
-
-  core = buildGoModule rec {
-    pname = "v2ray-core";
-    inherit version src;
-
-    inherit vendorSha256;
-
-    doCheck = false;
-
-    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/pkgs/tools/networking/v2ray/update.sh b/pkgs/tools/networking/v2ray/update.sh
index 56a148444c7..f645b8ea093 100755
--- a/pkgs/tools/networking/v2ray/update.sh
+++ b/pkgs/tools/networking/v2ray/update.sh
@@ -14,7 +14,7 @@ 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" |
+    curl "https://api.github.com/repos/v2fly/$1/releases" |
         jq '.[0].tag_name' --raw-output
 }
 
@@ -28,7 +28,7 @@ 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/v$core_rev.zip"
+        nix-prefetch-url --unpack --print-path "https://github.com/v2fly/v2ray-core/archive/v$core_rev.zip"
     )
 
     sed --in-place \
@@ -40,7 +40,7 @@ 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")
+    hash=$(nix-prefetch-url "https://github.com/v2fly/geoip/releases/download/$geoip_rev/geoip.dat")
     sed --in-place \
         -e "s/\bgeoipRev = \".*\"/geoipRev = \"$geoip_rev\"/" \
         -e "s/\bgeoipSha256 = \".*\"/geoipSha256 = \"$hash\"/" \
@@ -49,7 +49,7 @@ 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")
+    hash=$(nix-prefetch-url "https://github.com/v2fly/domain-list-community/releases/download/$geosite_rev/dlc.dat")
     sed --in-place \
         -e "s/\bgeositeRev = \".*\"/geositeRev = \"$geosite_rev\"/" \
         -e "s/\bgeositeSha256 = \".*\"/geositeSha256 = \"$hash\"/" \
@@ -61,11 +61,11 @@ set +o pipefail
 vendorSha256=$(
     nix-build "$nixpkgs" -A v2ray --no-out-link 2>&1 |
     tee /dev/stderr |
-    sed -nE 's/.*got:\s*sha256:(\w+)$/\1/p'
+    sed -nE 's/.*got:\s*(sha256\S+)$/\1/p'
 )
 [[ "$vendorSha256" ]]
 sed --in-place \
-    -e "s/vendorSha256 = \".*\"/vendorSha256 = \"$vendorSha256\"/" \
+    -e "s#vendorSha256 = \".*\"#vendorSha256 = \"$vendorSha256\"#" \
     "$version_nix"
 
 echo "vendorSha256 updated" >&2
diff --git a/pkgs/tools/networking/vde2/default.nix b/pkgs/tools/networking/vde2/default.nix
index b10ec5c1695..58fae3f9f15 100644
--- a/pkgs/tools/networking/vde2/default.nix
+++ b/pkgs/tools/networking/vde2/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, openssl, libpcap, python2, withPython ? false }:
+{ lib, stdenv, fetchurl, fetchpatch, openssl, libpcap, python2, withPython ? false }:
 
 stdenv.mkDerivation rec {
   name = "vde2-2.3.2";
@@ -12,24 +12,28 @@ stdenv.mkDerivation rec {
     # Fix build with openssl 1.1.0
     (fetchpatch {
       name = "vde_cryptcab-compile-against-openssl-1.1.0.patch";
-      url = "https://git.archlinux.org/svntogit/packages.git/plain/trunk/vde_cryptcab-compile-against-openssl-1.1.0.patch?h=packages/vde2&id=15b11be49997fa94b603e366064690b7cc6bce61";
+      url = "https://raw.githubusercontent.com/archlinux/svntogit-packages/15b11be49997fa94b603e366064690b7cc6bce61/trunk/vde_cryptcab-compile-against-openssl-1.1.0.patch";
       sha256 = "07z1yabwigq35mkwzqa934n7vjnjlqz5xfzq8cfj87lgyjjp00qi";
     })
-  ] ++ stdenv.lib.optional stdenv.hostPlatform.isMusl [
+  ] ++ lib.optional stdenv.hostPlatform.isMusl [
     (fetchpatch {
       url = "https://git.alpinelinux.org/aports/plain/main/vde2/musl-build-fix.patch?id=ddee2f86a48e087867d4a2c12849b2e3baccc238";
       sha256 = "0b5382v541bkxhqylilcy34bh83ag96g71f39m070jzvi84kx8af";
     })
   ];
 
-  configureFlags = stdenv.lib.optional (!withPython) "--disable-python";
+  preConfigure = lib.optionalString (lib.versionAtLeast stdenv.hostPlatform.darwinMinVersion "11") ''
+    MACOSX_DEPLOYMENT_TARGET=10.16
+  '';
+
+  configureFlags = lib.optional (!withPython) "--disable-python";
 
   buildInputs = [ openssl libpcap ]
-    ++ stdenv.lib.optional withPython python2;
+    ++ lib.optional withPython python2;
 
   hardeningDisable = [ "format" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/virtualsquare/vde-2";
     description = "Virtual Distributed Ethernet, an Ethernet compliant virtual network";
     platforms = platforms.unix;
diff --git a/pkgs/tools/networking/vegeta/default.nix b/pkgs/tools/networking/vegeta/default.nix
index cb7cbd67743..16abe8c6033 100644
--- a/pkgs/tools/networking/vegeta/default.nix
+++ b/pkgs/tools/networking/vegeta/default.nix
@@ -2,13 +2,13 @@
 
 buildGoPackage rec {
   pname = "vegeta";
-  version = "12.7.0";
+  version = "12.8.4";
 
   src = fetchFromGitHub {
-    owner = "tsenart";
-    repo = pname;
-    rev = "v${version}";
-    sha256 = "1wzx9588hjzxq65fxi1zz9xpsw33qq41hpl0j2f077g4m8yxahv5";
+    owner  = "tsenart";
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "0sw10k4g370c544dgw2c1sqdnxryld8lf6c1wnyknrm3zsfzn1hl";
   };
 
   goPackagePath = "github.com/tsenart/${pname}";
diff --git a/pkgs/tools/networking/vegeta/deps.nix b/pkgs/tools/networking/vegeta/deps.nix
index d0637dbeaef..1a06ad178ec 100644
--- a/pkgs/tools/networking/vegeta/deps.nix
+++ b/pkgs/tools/networking/vegeta/deps.nix
@@ -243,4 +243,13 @@
       sha256 = "00wzr5w8aadipgc3rkk8f11i41znskfj9ix5nhhaxyg7isrslgcj";
     };
   }
+  {
+    goPackagePath = "pgregory.net/rapid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/flyingmutant/rapid";
+      rev = "v0.3.3";
+      sha256 = "04w4dmx753b2xp5z5br5wxalgkkgag8qpbxics2gdcksqgi85vg3";
+    };
+  }
 ]
diff --git a/pkgs/tools/networking/vlan/default.nix b/pkgs/tools/networking/vlan/default.nix
index 331a993f3ac..2d329cb29b0 100644
--- a/pkgs/tools/networking/vlan/default.nix
+++ b/pkgs/tools/networking/vlan/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation {
   name = "vlan-1.9";
@@ -25,7 +25,7 @@ stdenv.mkDerivation {
       cp vconfig.8 $out/share/man/man8/
     '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "User mode programs to enable VLANs on Ethernet devices";
     platforms = platforms.linux;
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/networking/vpnc-scripts/default.nix b/pkgs/tools/networking/vpnc-scripts/default.nix
new file mode 100644
index 00000000000..776e8450d13
--- /dev/null
+++ b/pkgs/tools/networking/vpnc-scripts/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchgit
+, makeWrapper
+, nettools, gawk, systemd, openresolv, coreutils, gnugrep, iproute2
+}:
+
+stdenv.mkDerivation {
+  pname = "vpnc-scripts";
+  version = "unstable-2021-03-21";
+  src = fetchgit {
+    url = "git://git.infradead.org/users/dwmw2/vpnc-scripts.git";
+    rev = "8fff06090ed193c4a7285e9a10b42e6679e8ecf3";
+    sha256 = "14bzzpwz7kdmlbx825h6s4jjdml9q6ziyrq8311lp8caql68qdq1";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp vpnc-script $out/bin
+  '';
+
+  preFixup = ''
+    substituteInPlace $out/bin/vpnc-script \
+      --replace "which" "type -P"
+  '' + lib.optionalString stdenv.isLinux ''
+    substituteInPlace $out/bin/vpnc-script \
+      --replace "/sbin/resolvconf" "${openresolv}/bin/resolvconf" \
+      --replace "/usr/bin/resolvectl" "${systemd}/bin/resolvectl"
+  '' + ''
+    wrapProgram $out/bin/vpnc-script \
+      --prefix PATH : "${lib.makeBinPath ([ nettools gawk coreutils gnugrep ] ++ lib.optionals stdenv.isLinux [ openresolv iproute2 ])}"
+  '';
+
+  meta = with lib; {
+    description = "script for vpnc to configure the network routing and name service";
+    homepage = "https://www.infradead.org/openconnect/";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ jerith666 ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/pkgs/tools/networking/vpnc/default.nix b/pkgs/tools/networking/vpnc/default.nix
index 7a52112e65f..edb50559fc0 100644
--- a/pkgs/tools/networking/vpnc/default.nix
+++ b/pkgs/tools/networking/vpnc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchsvn, nettools, libgcrypt, openssl, openresolv, perl, gawk, makeWrapper }:
+{ lib, stdenv, fetchsvn, nettools, libgcrypt, openssl, openresolv, perl, gawk, makeWrapper }:
 
 stdenv.mkDerivation {
   name = "vpnc-0.5.3-post-r550";
@@ -19,7 +19,8 @@ stdenv.mkDerivation {
   # `ifconfig' as found in net-tools (not GNU Inetutils).
   propagatedBuildInputs = [ nettools ];
 
-  buildInputs = [libgcrypt perl makeWrapper openssl ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [libgcrypt perl openssl ];
 
   preConfigure = ''
     sed -i 's|^#OPENSSL|OPENSSL|g' Makefile
@@ -50,8 +51,8 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.gpl2Plus;
 
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/vtun/default.nix b/pkgs/tools/networking/vtun/default.nix
index 71d9097a150..4d79fdc9bc5 100644
--- a/pkgs/tools/networking/vtun/default.nix
+++ b/pkgs/tools/networking/vtun/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, openssl, lzo, zlib, yacc, flex }:
+{ lib, stdenv, fetchurl, fetchpatch, openssl, lzo, zlib, bison, flex }:
 
 stdenv.mkDerivation rec {
   name = "vtun-3.0.4";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     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 ];
+  buildInputs = [ lzo openssl zlib bison flex ];
 
   configureFlags = [
     "--with-lzo-headers=${lzo}/include/lzo"
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
     "--with-blowfish-headers=${openssl.dev}/include/openssl"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
       description = "Virtual Tunnels over TCP/IP with traffic shaping, compression and encryption";
       homepage = "http://vtun.sourceforge.net/";
       license = licenses.gpl2;
diff --git a/pkgs/tools/networking/waitron/default.nix b/pkgs/tools/networking/waitron/default.nix
new file mode 100644
index 00000000000..8364cd5763d
--- /dev/null
+++ b/pkgs/tools/networking/waitron/default.nix
@@ -0,0 +1,30 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+{ lib, buildGoPackage, fetchgit, fetchhg, fetchbzr, fetchsvn }:
+
+buildGoPackage rec {
+  name = "waitron-unstable-${version}";
+  version = "2020-01-24";
+  rev = "c96833619cbb0cf2bc71b1d7b534101e139cc6e6";
+
+  goPackagePath = "github.com/ns1/waitron";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/ns1/waitron";
+    sha256 = "0lgw37iq1cvg3mqc94nzf0027mvv721ay8x6dw3fc814ww8a2hb6";
+  };
+
+  patches = [
+    ./staticfiles-directory.patch
+  ];
+
+  goDeps = ./deps.nix;
+
+  meta = {
+    description = "A tool to manage network booting of machines";
+    homepage = "https://github.com/ns1/waitron";
+    license =  lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ guibert ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/pkgs/tools/networking/waitron/deps.nix b/pkgs/tools/networking/waitron/deps.nix
new file mode 100644
index 00000000000..46369c78318
--- /dev/null
+++ b/pkgs/tools/networking/waitron/deps.nix
@@ -0,0 +1,57 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/flosch/pongo2";
+    fetch = {
+      type = "git";
+      url = "https://github.com/flosch/pongo2";
+      rev = "bbf5a6c351f4d4e883daa40046a404d7553e0a00";
+      sha256 = "0yqh58phznnxakm64w82gawrpndb0r85vsd1s7h244qqrq7w4avq";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/handlers";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/handlers";
+      rev = "f08afc1876ad882db8074bcb8a4cc96107d3a5f4";
+      sha256 = "1ysm6sw3jqa3h8pb5qpqgh44g91c23n3as277sh0vyp7282290jq";
+    };
+  }
+  {
+    goPackagePath = "github.com/juju/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/juju/errors";
+      rev = "d42613fe1ab9e303fc850e7a19fda2e8eeb6516e";
+      sha256 = "0qggzzvh9lzlfk8ixlyw8bw645rh0lrjrd367505hhl6cg18v8yf";
+    };
+  }
+  {
+    goPackagePath = "github.com/julienschmidt/httprouter";
+    fetch = {
+      type = "git";
+      url = "https://github.com/julienschmidt/httprouter";
+      rev = "8c9f31f047a304abedb5614d4a18a843cd5f4a40";
+      sha256 = "00f5ja1yslrjclx3sf29mzpcsrpfd15kkw5ygv7n4jsyb4v3xgj6";
+    };
+  }
+  {
+    goPackagePath = "github.com/satori/go.uuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/satori/go.uuid";
+      rev = "b2ce2384e17bbe0c6d34077efa39dbab3e09123b";
+      sha256 = "1yz4cx02377ijlf8mnn84j1dcmlwh8ncx7y3kw1zg2qw0z4x119c";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "53403b58ad1b561927d19068c655246f2db79d48";
+      sha256 = "1inf7svydzscwv9fcjd2rm61a4xjk6jkswknybmns2n58shimapw";
+    };
+  }
+]
diff --git a/pkgs/tools/networking/waitron/staticfiles-directory.patch b/pkgs/tools/networking/waitron/staticfiles-directory.patch
new file mode 100644
index 00000000000..b1096487fac
--- /dev/null
+++ b/pkgs/tools/networking/waitron/staticfiles-directory.patch
@@ -0,0 +1,13 @@
+diff --git a/main.go b/main.go
+index 4046911..a126bae 100644
+--- a/main.go
++++ b/main.go
+@@ -411,7 +411,7 @@ func main() {
+ 
+ 	if configuration.StaticFilesPath != "" {
+ 		fs := http.FileServer(http.Dir(configuration.StaticFilesPath))
+-		r.Handler("GET", "/files/:filename", http.StripPrefix("/files/", fs))
++		r.Handler("GET", "/files/*filepath", http.StripPrefix("/files/", fs))
+ 		log.Println("Serving static files from " + configuration.StaticFilesPath)
+ 	}
+ 
diff --git a/pkgs/tools/networking/wakelan/default.nix b/pkgs/tools/networking/wakelan/default.nix
index ff96509e15c..96e01141c18 100644
--- a/pkgs/tools/networking/wakelan/default.nix
+++ b/pkgs/tools/networking/wakelan/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "wakelan-1.1";
@@ -21,9 +21,9 @@ stdenv.mkDerivation rec {
          power on.
       '';
 
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
 
-    maintainers = [ stdenv.lib.maintainers.viric ];
-    platforms = stdenv.lib.platforms.unix;
+    maintainers = [ lib.maintainers.viric ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/wakeonlan/default.nix b/pkgs/tools/networking/wakeonlan/default.nix
new file mode 100644
index 00000000000..48b99cadf2b
--- /dev/null
+++ b/pkgs/tools/networking/wakeonlan/default.nix
@@ -0,0 +1,29 @@
+{ lib, perlPackages, fetchFromGitHub, installShellFiles }:
+
+perlPackages.buildPerlPackage rec {
+  pname = "wakeonlan";
+  version = "0.41";
+
+  src = fetchFromGitHub {
+    owner = "jpoliv";
+    repo = pname;
+    rev = "wakeonlan-${version}";
+    sha256 = "0m48b39lz0yc5ckx2jx8y2p4c8npjngxl9wy86k43xgsd8mq1g3c";
+  };
+
+  outputs = [ "out" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  installPhase = ''
+    install -Dt $out/bin wakeonlan
+    installManPage blib/man1/wakeonlan.1
+  '';
+
+  meta = with lib; {
+    description = "Perl script for waking up computers via Wake-On-LAN magic packets";
+    homepage = "https://github.com/jpoliv/wakeonlan";
+    license = licenses.artistic1;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/pkgs/tools/networking/wavemon/default.nix b/pkgs/tools/networking/wavemon/default.nix
index dab52720a02..c54c4f8691a 100644
--- a/pkgs/tools/networking/wavemon/default.nix
+++ b/pkgs/tools/networking/wavemon/default.nix
@@ -1,26 +1,24 @@
-{ stdenv, fetchFromGitHub, ncurses, libnl, pkgconfig }:
+{ lib, stdenv, fetchFromGitHub, ncurses, libnl, pkg-config }:
 
 stdenv.mkDerivation rec {
-  version = "0.9.1";
-  baseName = "wavemon";
-  name = "${baseName}-${version}";
+  pname = "wavemon";
+  version = "0.9.3";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ ncurses libnl ];
 
   src = fetchFromGitHub {
     owner = "uoaerg";
     repo = "wavemon";
     rev = "v${version}";
-    sha256 = "109ycwnjjqc2vpnd8b86njfifczlxglnyv4rh2qmbn2i5nw2wryg";
+    sha256 = "0m9n5asjxs1ir5rqprigqcrm976mgjvh4yql1jhfnbszwbf95193";
   };
 
-  meta = with stdenv.lib; {
-    inherit version;
+  meta = with lib; {
     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;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/wbox/default.nix b/pkgs/tools/networking/wbox/default.nix
index 8b10bb599c4..3a5fce6808f 100644
--- a/pkgs/tools/networking/wbox/default.nix
+++ b/pkgs/tools/networking/wbox/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "wbox";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
   meta = {
     description = "A simple HTTP benchmarking tool";
     homepage = "http://www.hping.org/wbox/";
-    license = stdenv.lib.licenses.bsd3;
-    platforms = stdenv.lib.platforms.unix;
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/webalizer/default.nix b/pkgs/tools/networking/webalizer/default.nix
index 133aac67bdb..332d1cf2867 100644
--- a/pkgs/tools/networking/webalizer/default.nix
+++ b/pkgs/tools/networking/webalizer/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, zlib, libpng, gd, geoip, db }:
+{ lib, stdenv, fetchurl, zlib, libpng, gd, geoip, db }:
 
 stdenv.mkDerivation {
   name = "webalizer-2.23-05";
@@ -22,7 +22,7 @@ stdenv.mkDerivation {
     "--enable-shared"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Web server log file analysis program";
     homepage = "http://www.webalizer.org";
     platforms = platforms.unix;
diff --git a/pkgs/tools/networking/webwormhole/default.nix b/pkgs/tools/networking/webwormhole/default.nix
new file mode 100644
index 00000000000..8fbaf3159a2
--- /dev/null
+++ b/pkgs/tools/networking/webwormhole/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "webwormhole";
+  version = "unstable-2021-01-16";
+
+  src = fetchFromGitHub {
+    owner = "saljam";
+    repo = pname;
+    rev = "c85e196c8a8a885815136aa8aee1958ad80a3bb5";
+    sha256 = "D10xmBwmEbeR3nU4CmppFBzdeE4Pm2+o/Vb5Yd+pPtM=";
+  };
+
+  vendorSha256 = "sha256-yK04gjDO6JSDcJULcbJBBuPBhx792JNn+B227lDUrWk=";
+
+  meta = with lib; {
+    description = "Send files using peer authenticated WebRTC";
+    homepage = "https://github.com/saljam/webwormhole";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ bbigras ];
+  };
+}
diff --git a/pkgs/tools/networking/weighttp/default.nix b/pkgs/tools/networking/weighttp/default.nix
index efcb8d8cf42..7c3d23c0d17 100644
--- a/pkgs/tools/networking/weighttp/default.nix
+++ b/pkgs/tools/networking/weighttp/default.nix
@@ -1,4 +1,5 @@
-{ stdenv, fetchgit, python, libev, wafHook }:
+{ lib, stdenv, fetchgit, python, libev, wafHook }:
+
 stdenv.mkDerivation rec {
   pname = "weighttp";
   version = "0.4";
@@ -10,11 +11,13 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [ wafHook ];
+
   buildInputs = [ python libev ];
 
-  meta = {
-    platforms = stdenv.lib.platforms.unix;
+  meta = with lib; {
+    description = "Lightweight and simple webserver benchmarking tool";
     homepage = "https://redmine.lighttpd.net/projects/weighttp/wiki";
-    description = "A lightweight and simple webserver benchmarking tool";
+    platforms = platforms.unix;
+    license = licenses.mit;
   };
 }
diff --git a/pkgs/tools/networking/wget/default.nix b/pkgs/tools/networking/wget/default.nix
index 77913c4f32a..efdd16e630b 100644
--- a/pkgs/tools/networking/wget/default.nix
+++ b/pkgs/tools/networking/wget/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, gettext, pkgconfig, perlPackages
+{ lib, stdenv, fetchurl, gettext, pkg-config, perlPackages
 , libidn2, zlib, pcre, libuuid, libiconv, libintl
 , python3, lzip
 , libpsl ? null
@@ -6,11 +6,11 @@
 
 stdenv.mkDerivation rec {
   pname = "wget";
-  version = "1.20.3";
+  version = "1.21.1";
 
   src = fetchurl {
     url = "mirror://gnu/wget/${pname}-${version}.tar.lz";
-    sha256 = "1frajd86ds8vz2hprq30wq8ya89z9dcxnwm8nwk12bbc47l7qq39";
+    sha256 = "sha256-25u+U0fm+qBvx4gF7rgIsmiXlFXq2QA6YIVpydT8kK0=";
   };
 
   patches = [
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
   preConfigure = ''
     patchShebangs doc
 
-  '' + stdenv.lib.optionalString doCheck ''
+  '' + lib.optionalString doCheck ''
     # Work around lack of DNS resolution in chroots.
     for i in "tests/"*.pm "tests/"*.px
     do
@@ -28,20 +28,23 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  nativeBuildInputs = [ gettext pkgconfig perlPackages.perl lzip libiconv libintl ];
+  nativeBuildInputs = [ gettext pkg-config 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;
+    ++ lib.optionals doCheck [ perlPackages.IOSocketSSL perlPackages.LWP python3 ]
+    ++ lib.optional (openssl != null) openssl
+    ++ lib.optional (libpsl != null) libpsl
+    ++ lib.optional stdenv.isDarwin perlPackages.perl;
 
   configureFlags = [
-    (stdenv.lib.withFeatureAs (openssl != null) "ssl" "openssl")
+    (lib.withFeatureAs (openssl != null) "ssl" "openssl")
+  ] ++ lib.optionals stdenv.isDarwin [
+    # https://lists.gnu.org/archive/html/bug-wget/2021-01/msg00076.html
+    "--without-included-regex"
   ];
 
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tool for retrieving files using HTTP, HTTPS, and FTP";
 
     longDescription =
diff --git a/pkgs/tools/networking/wget2/default.nix b/pkgs/tools/networking/wget2/default.nix
new file mode 100644
index 00000000000..3fd40f8a7ba
--- /dev/null
+++ b/pkgs/tools/networking/wget2/default.nix
@@ -0,0 +1,100 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, fetchpatch
+  # build support
+, autoreconfHook
+, flex
+, gnulib
+, lzip
+, pkg-config
+, python3
+, texinfo
+  # libraries
+, brotli
+, bzip2
+, gpgme
+, libhsts
+, libidn2
+, libpsl
+, xz
+, nghttp2
+, sslSupport ? true
+, openssl
+, pcre2
+, zlib
+, zstd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wget2";
+  version = "1.99.2";
+
+  src = fetchFromGitLab {
+    owner = "gnuwget";
+    repo = pname;
+    rev = version;
+    sha256 = "1gws8y3z8xzi46c48n7jb162mr3ar4c34s7yy8kjcs14yzq951qz";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix-autotools-2.70.patch";
+      url = "https://gitlab.com/gnuwget/wget2/-/commit/580af869093cfda6bc8a9d5901850354a16b3666.patch";
+      sha256 = "1x6wq4wxvvy6174d52qrhxkcgmv366f8smxyki49zb6rs4gqhskd";
+    })
+    (fetchpatch {
+      name = "update-potfiles-for-gnulib-2020-11-28.patch";
+      url = "https://gitlab.com/gnuwget/wget2/-/commit/368deb9fcca0c281f9c76333607cc878c3945ad0.patch";
+      sha256 = "1qsz8hbzbgg14wikxsbjjlq0cp3jw4pajbaz9wdn6ny617hdvi8y";
+    })
+  ];
+
+  # wget2_noinstall contains forbidden reference to /build/
+  postPatch = ''
+    substituteInPlace src/Makefile.am \
+      --replace 'bin_PROGRAMS = wget2 wget2_noinstall' 'bin_PROGRAMS = wget2'
+  '';
+
+  nativeBuildInputs = [ autoreconfHook flex lzip pkg-config python3 texinfo ];
+
+  buildInputs = [ brotli bzip2 gpgme libhsts libidn2 libpsl xz nghttp2 pcre2 zlib zstd ]
+    ++ lib.optional sslSupport openssl;
+
+  # TODO: include translation files
+  autoreconfPhase = ''
+    # copy gnulib into build dir and make writable.
+    # Otherwise ./bootstrap copies the non-writable files from nix store and fails to modify them
+    rmdir gnulib
+    cp -r ${gnulib} gnulib
+    chmod -R u+w gnulib/{build-aux,lib}
+
+    # fix bashisms can be removed when https://gitlab.com/gnuwget/wget2/-/commit/c9499dcf2f58983d03e659e2a1a7f21225141edf is in the release
+    sed 's|==|=|g' -i configure.ac
+
+    ./bootstrap --no-git --gnulib-srcdir=gnulib --skip-po
+  '';
+
+  configureFlags = [
+    "--disable-static"
+    # TODO: https://gitlab.com/gnuwget/wget2/-/issues/537
+    (lib.withFeatureAs sslSupport "ssl" "openssl")
+  ];
+
+  outputs = [ "out" "lib" "dev" ];
+
+  meta = with lib; {
+    description = "successor of GNU Wget, a file and recursive website downloader.";
+    longDescription = ''
+      Designed and written from scratch it wraps around libwget, that provides the basic
+      functions needed by a web client.
+      Wget2 works multi-threaded and uses many features to allow fast operation.
+      In many cases Wget2 downloads much faster than Wget1.x due to HTTP2, HTTP compression,
+      parallel connections and use of If-Modified-Since HTTP header.
+    '';
+    homepage = "https://gitlab.com/gnuwget/wget2";
+    # wget2 GPLv3+; libwget LGPLv3+
+    license = with licenses; [ gpl3Plus lgpl3Plus ];
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/pkgs/tools/networking/whois/default.nix b/pkgs/tools/networking/whois/default.nix
index 35124ef6719..55a356e3298 100644
--- a/pkgs/tools/networking/whois/default.nix
+++ b/pkgs/tools/networking/whois/default.nix
@@ -1,17 +1,17 @@
-{ stdenv, fetchFromGitHub, perl, gettext, pkgconfig, libidn2, libiconv }:
+{ lib, stdenv, fetchFromGitHub, perl, gettext, pkg-config, libidn2, libiconv }:
 
 stdenv.mkDerivation rec {
-  version = "5.5.6";
+  version = "5.5.8";
   pname = "whois";
 
   src = fetchFromGitHub {
     owner = "rfc1036";
     repo = "whois";
     rev = "v${version}";
-    sha256 = "0iqbn2ky9j7qdpv5hycy56knnfhl8nz4l4905rnr0p703lvxxx8d";
+    sha256 = "sha256-WSAqJMVeHkcqzcgwvFKKBXJiIfKXBQr2mjioG7CgkIo=";
   };
 
-  nativeBuildInputs = [ perl gettext pkgconfig ];
+  nativeBuildInputs = [ perl gettext pkg-config ];
   buildInputs = [ libidn2 libiconv ];
 
   preConfigure = ''
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
 
   installTargets = [ "install-whois" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Intelligent WHOIS client from Debian";
     longDescription = ''
       This package provides a commandline client for the WHOIS (RFC 3912)
diff --git a/pkgs/tools/networking/wicd/default.nix b/pkgs/tools/networking/wicd/default.nix
index 8cd0b7c55f7..e4eb0a2cdc8 100644
--- a/pkgs/tools/networking/wicd/default.nix
+++ b/pkgs/tools/networking/wicd/default.nix
@@ -1,13 +1,13 @@
-{ stdenv, fetchurl, python2Packages
+{ lib, stdenv, fetchurl, python2Packages
 , wpa_supplicant, dhcp, dhcpcd, wirelesstools
-, nettools, openresolv, iproute, iputils }:
+, nettools, openresolv, iproute2, 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";
@@ -21,7 +21,7 @@ in stdenv.mkDerivation rec {
     ./no-var-install.patch
     ./pygtk.patch
     ./no-optimization.patch
-    ./dhclient.patch 
+    ./dhclient.patch
     ./fix-app-icon.patch
     ./fix-gtk-issues.patch
     ./urwid-api-update.patch
@@ -33,10 +33,10 @@ in stdenv.mkDerivation rec {
   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 "2iexport PATH=${lib.makeBinPath [ python wpa_supplicant dhcpcd dhcp wirelesstools nettools nettools iputils openresolv iproute2 ]}\$\{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
@@ -102,7 +102,7 @@ in stdenv.mkDerivation rec {
     echo "wpa2-ttls" >> "$out/etc/encryption/templates/active"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://wicd.net/";
     description = "A wiredless and wired network manager";
     longDescription=''
diff --git a/pkgs/tools/networking/wifish/default.nix b/pkgs/tools/networking/wifish/default.nix
new file mode 100644
index 00000000000..a9e30710c1a
--- /dev/null
+++ b/pkgs/tools/networking/wifish/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub
+, dialog
+, gawk
+, wpa_supplicant
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wifish";
+  version = "1.1.4";
+
+  src = fetchFromGitHub{
+    owner = "bougyman";
+    repo = "wifish";
+    rev = version;
+    sha256 = "sha256-eTErN6CfKDey/wV+9o9cBVaG5FzCRBiA9UicrMz3KBc=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postPatch = ''
+    sed -ie 's|/var/lib/wifish|${placeholder "out"}/var/lib/wifish|' wifish
+  '';
+
+  dontConfigure = true;
+
+  installPhase = ''
+    install -D -m0644 awk/wscanparse.awk ${placeholder "out"}/var/lib/wifish/wscanparse.awk
+    install -D -m0644 awk/wlistparse.awk ${placeholder "out"}/var/lib/wifish/wlistparse.awk
+    install -D -m0644 awk/wscan2menu.awk ${placeholder "out"}/var/lib/wifish/wscan2menu.awk
+    install -D -m0644 awk/iwparse.awk ${placeholder "out"}/var/lib/wifish/iwparse.awk
+    install -D -m0755 wifish ${placeholder "out"}/bin/wifish
+  '';
+
+  postFixup = ''
+    wrapProgram ${placeholder "out"}/bin/wifish \
+      --prefix PATH ":" ${lib.makeBinPath [ dialog gawk wpa_supplicant ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/bougyman/wifish";
+    description = "Simple wifi shell script for linux";
+    license = licenses.wtfpl;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/pkgs/tools/networking/wifite2/default.nix b/pkgs/tools/networking/wifite2/default.nix
index 101c4643a77..054b77f8c9b 100644
--- a/pkgs/tools/networking/wifite2/default.nix
+++ b/pkgs/tools/networking/wifite2/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchFromGitHub, fetchpatch, python3, wirelesstools
+{ lib, fetchFromGitHub, fetchpatch, python3, wirelesstools
 , aircrack-ng, wireshark-cli, reaverwps-t6x, cowpatty, hashcat, hcxtools
 , hcxdumptool, pyrit, which }:
 
@@ -46,7 +46,7 @@ python3.pkgs.buildPythonApplication rec {
   checkInputs = propagatedBuildInputs;
   checkPhase = "python -m unittest discover tests -v";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/derv82/wifite2";
     description = "Rewrite of the popular wireless network auditor, wifite";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/wireguard-go/default.nix b/pkgs/tools/networking/wireguard-go/default.nix
index 2913a31e16a..35c5371113c 100644
--- a/pkgs/tools/networking/wireguard-go/default.nix
+++ b/pkgs/tools/networking/wireguard-go/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchzip }:
+{ lib, buildGoPackage, fetchzip }:
 
 buildGoPackage rec {
   pname = "wireguard-go";
@@ -21,7 +21,7 @@ buildGoPackage rec {
     mv $out/bin/wireguard $out/bin/wireguard-go
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Userspace Go implementation of WireGuard";
     homepage = "https://git.zx2c4.com/wireguard-go/about/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/wireguard-tools/default.nix b/pkgs/tools/networking/wireguard-tools/default.nix
index c3e4c637109..5972d781bd1 100644
--- a/pkgs/tools/networking/wireguard-tools/default.nix
+++ b/pkgs/tools/networking/wireguard-tools/default.nix
@@ -1,23 +1,22 @@
-{ stdenv
+{ lib
+, stdenv
 , fetchzip
 , nixosTests
-, iptables ? null
-, iproute ? null
-, makeWrapper ? null
-, openresolv ? null
-, procps ? null
-, wireguard-go ? null
+, iptables
+, iproute2
+, makeWrapper
+, openresolv
+, procps
+, wireguard-go
 }:
 
-with stdenv.lib;
-
 stdenv.mkDerivation rec {
   pname = "wireguard-tools";
-  version = "1.0.20200820";
+  version = "1.0.20210424";
 
   src = fetchzip {
     url = "https://git.zx2c4.com/wireguard-tools/snapshot/wireguard-tools-${version}.tar.xz";
-    sha256 = "138pf23x39xm68pa4ks3g76axphl8pz5jw4fyi54wi7rvxclybc7";
+    sha256 = "sha256-0aGaE4EBb4wb5g32Wugakt7w41sb97Hqqkac7qE641M=";
   };
 
   outputs = [ "out" "man" ];
@@ -37,11 +36,11 @@ stdenv.mkDerivation rec {
   postFixup = ''
     substituteInPlace $out/lib/systemd/system/wg-quick@.service \
       --replace /usr/bin $out/bin
-  '' + optionalString stdenv.isLinux ''
+  '' + lib.optionalString stdenv.isLinux ''
     for f in $out/bin/*; do
-      wrapProgram $f --prefix PATH : ${makeBinPath [procps iproute iptables openresolv]}
+      wrapProgram $f --prefix PATH : ${lib.makeBinPath [ procps iproute2 iptables openresolv ]}
     done
-  '' + optionalString stdenv.isDarwin ''
+  '' + lib.optionalString stdenv.isDarwin ''
     for f in $out/bin/*; do
       wrapProgram $f --prefix PATH : ${wireguard-go}/bin
     done
@@ -52,7 +51,7 @@ stdenv.mkDerivation rec {
     tests = nixosTests.wireguard;
   };
 
-  meta = {
+  meta = with lib; {
     description = "Tools for the WireGuard secure network tunnel";
     downloadPage = "https://git.zx2c4.com/wireguard-tools/refs/";
     homepage = "https://www.wireguard.com/";
diff --git a/pkgs/tools/networking/wol/default.nix b/pkgs/tools/networking/wol/default.nix
index 3ca10e2ecbc..114a8457d5b 100644
--- a/pkgs/tools/networking/wol/default.nix
+++ b/pkgs/tools/networking/wol/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl }:
+{ lib, stdenv, fetchurl, perl }:
 
 stdenv.mkDerivation rec {
   pname = "wol";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Implements Wake On LAN functionality in a small program";
     homepage = "https://sourceforge.net/projects/wake-on-lan/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/networking/wolfebin/default.nix b/pkgs/tools/networking/wolfebin/default.nix
index 52874e89bbe..2a07ada114d 100644
--- a/pkgs/tools/networking/wolfebin/default.nix
+++ b/pkgs/tools/networking/wolfebin/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchFromGitHub, python }:
+{ lib, stdenv, fetchFromGitHub, python }:
 
 stdenv.mkDerivation rec {
   version = "5.4";
   pname = "wolfebin";
-  
+
   src = fetchFromGitHub {
     owner = "thejoshwolfe";
     repo = "wolfebin";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
     install -m 755 wolfebin_server.py $out/bin/wolfebin_server
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/thejoshwolfe/wolfebin";
     description = "Quick and easy file sharing";
     license = licenses.mit;
diff --git a/pkgs/tools/networking/wormhole-william/default.nix b/pkgs/tools/networking/wormhole-william/default.nix
index 261db4590c1..4379aa89ceb 100644
--- a/pkgs/tools/networking/wormhole-william/default.nix
+++ b/pkgs/tools/networking/wormhole-william/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "wormhole-william";
-  version = "1.0.4";
+  version = "1.0.5";
 
   src = fetchFromGitHub {
     owner = "psanford";
     repo = "wormhole-william";
     rev = "v${version}";
-    sha256 = "1v6kw10gqhyd1adj0wwrr5bmpjqbshdnywsrjpqgg9bl61m5j3wr";
+    sha256 = "sha256-75pSFMzaZW+rtikO0khuxXIgb3Wj8ieSE4sB6quKgo4=";
   };
 
-  vendorSha256 = "1niky252gcxai6vz0cx7pvflg530bc1lmcd2wm2hqg6446r1yxsq";
+  vendorSha256 = "sha256-8GZ4h+DFQaCizOCxsMzAllXyaQgzQQBsbCnVi5MWbFg=";
 
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/psanford/wormhole-william";
     description = "End-to-end encrypted file transfers";
     changelog = "https://github.com/psanford/wormhole-william/releases/tag/v${version}";
diff --git a/pkgs/tools/networking/wrk/default.nix b/pkgs/tools/networking/wrk/default.nix
index 40daeb86194..4298bd70d60 100644
--- a/pkgs/tools/networking/wrk/default.nix
+++ b/pkgs/tools/networking/wrk/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, luajit, openssl, perl }:
+{ lib, stdenv, fetchFromGitHub, luajit, openssl, perl }:
 
 stdenv.mkDerivation rec {
   pname = "wrk";
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
     cp wrk $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "HTTP benchmarking tool";
     homepage = "https://github.com/wg/wrk";
     longDescription = ''
diff --git a/pkgs/tools/networking/wrk2/default.nix b/pkgs/tools/networking/wrk2/default.nix
index 2a5e8e3a5dc..0cf40b87f5a 100644
--- a/pkgs/tools/networking/wrk2/default.nix
+++ b/pkgs/tools/networking/wrk2/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, luajit, openssl, zlib }:
+{ lib, stdenv, fetchFromGitHub, luajit, openssl, zlib }:
 
 stdenv.mkDerivation rec {
   pname = "wrk2";
@@ -35,8 +35,8 @@ stdenv.mkDerivation rec {
   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 ];
+    license     = lib.licenses.bsd3;
+    platforms   = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ thoughtpolice ];
   };
 }
diff --git a/pkgs/tools/networking/wstunnel/default.nix b/pkgs/tools/networking/wstunnel/default.nix
deleted file mode 100644
index 161b08a7d39..00000000000
--- a/pkgs/tools/networking/wstunnel/default.nix
+++ /dev/null
@@ -1,41 +0,0 @@
-{ mkDerivation, async, base, base64-bytestring, binary, bytestring
-, classy-prelude, cmdargs, connection, hslogger, mtl, network
-, network-conduit-tls, stdenv, streaming-commons, text
-, unordered-containers, websockets
-, hspec, iproute
-, lib, fetchFromGitHub, fetchpatch
-}:
-
-mkDerivation rec {
-  pname = "wstunnel";
-  version = "unstable-2020-07-12";
-
-  src = fetchFromGitHub {
-    owner = "erebe";
-    repo = pname;
-    rev = "093a01fa3a34eee5efd8f827900e64eab9d16c05";
-    sha256 = "17p9kq0ssz05qzl6fyi5a5fjbpn4bxkkwibb9si3fhzrxc508b59";
-  };
-
-  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
-    iproute
-  ];
-
-  executableHaskellDepends = [
-    base bytestring classy-prelude cmdargs hslogger text
-  ];
-
-  testHaskellDepends = [ base text hspec ];
-
-  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/pkgs/tools/networking/wuzz/default.nix b/pkgs/tools/networking/wuzz/default.nix
index 8db9c07ffc5..156841be334 100644
--- a/pkgs/tools/networking/wuzz/default.nix
+++ b/pkgs/tools/networking/wuzz/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "wuzz";
@@ -16,7 +16,7 @@ buildGoPackage rec {
 
   goDeps = ./deps.nix;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/asciimoo/wuzz";
     description = "Interactive cli tool for HTTP inspection";
     license = licenses.agpl3;
diff --git a/pkgs/tools/networking/x11-ssh-askpass/default.nix b/pkgs/tools/networking/x11-ssh-askpass/default.nix
index 7e1597451b1..d33dd3df12e 100644
--- a/pkgs/tools/networking/x11-ssh-askpass/default.nix
+++ b/pkgs/tools/networking/x11-ssh-askpass/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, xlibsWrapper, imake, gccmakedep }:
+{ lib, stdenv, fetchurl, xlibsWrapper, imake, gccmakedep }:
 
 stdenv.mkDerivation {
   name = "x11-ssh-askpass-1.2.4.1";
@@ -24,7 +24,7 @@ stdenv.mkDerivation {
 
   installTargets = [ "install" "install.man" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/sigmavirus24/x11-ssh-askpass";
     description = "Lightweight passphrase dialog for OpenSSH or other open variants of SSH";
     license = licenses.mit;
diff --git a/pkgs/tools/networking/xh/default.nix b/pkgs/tools/networking/xh/default.nix
new file mode 100644
index 00000000000..0a62fee4bd7
--- /dev/null
+++ b/pkgs/tools/networking/xh/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, lib, openssl, pkg-config, rustPlatform, fetchFromGitHub, Security
+, libiconv, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "xh";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "ducaale";
+    repo = "xh";
+    rev = "v${version}";
+    sha256 = "0b9cgjgzf1vxd9j6cz44g68xbaii8gb3973pvjf0p6barnqzvqvq";
+  };
+
+  cargoSha256 = "0lwxmqp0ww9wf9p3nd42q89j0g7ichpkcm0mb1p5hhagwqgb0z15";
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+
+  buildInputs = if stdenv.isDarwin then [ Security libiconv ] else [ openssl ];
+
+  # Get openssl-sys to use pkg-config
+  OPENSSL_NO_VENDOR = 1;
+
+  postInstall = ''
+    installShellCompletion --cmd xh \
+      --bash completions/xh.bash \
+      --fish completions/xh.fish \
+      --zsh completions/_xh
+
+    # https://github.com/ducaale/xh#xh-and-xhs
+    ln -s $out/bin/xh $out/bin/xhs
+  '';
+
+  # Nix build happens in sandbox without internet connectivity
+  # disable tests as some of them require internet due to nature of application
+  doCheck = false;
+  doInstallCheck = true;
+  postInstallCheck = ''
+    $out/bin/xh --help > /dev/null
+    $out/bin/xhs --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Friendly and fast tool for sending HTTP requests";
+    homepage = "https://github.com/ducaale/xh";
+    changelog = "https://github.com/ducaale/xh/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ payas SuperSandro2000 ];
+  };
+}
diff --git a/pkgs/tools/networking/xl2tpd/default.nix b/pkgs/tools/networking/xl2tpd/default.nix
index 38a45fd3e6f..26731817c80 100644
--- a/pkgs/tools/networking/xl2tpd/default.nix
+++ b/pkgs/tools/networking/xl2tpd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libpcap, ppp }:
+{ lib, stdenv, fetchFromGitHub, libpcap, ppp }:
 
 stdenv.mkDerivation rec {
   pname = "xl2tpd";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.xelerance.com/software/xl2tpd/";
     description = "Layer 2 Tunnelling Protocol Daemon (RFC 2661)";
     platforms = platforms.linux;
diff --git a/pkgs/tools/networking/xnbd/default.nix b/pkgs/tools/networking/xnbd/default.nix
index 79a968f806e..0488fb9fa18 100644
--- a/pkgs/tools/networking/xnbd/default.nix
+++ b/pkgs/tools/networking/xnbd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, autoreconfHook, glib, jansson }:
+{ lib, stdenv, fetchurl, pkg-config, autoreconfHook, glib, jansson }:
 
 stdenv.mkDerivation rec {
   name = "xnbd-0.4.0";
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
 
   patches = [ ./0001-Fix-build-for-glibc-2.28.patch ];
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
   buildInputs = [ glib jansson ];
 
@@ -26,8 +26,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.volth ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/networking/yggdrasil/default.nix b/pkgs/tools/networking/yggdrasil/default.nix
index 90cd64b83ad..506869238e5 100644
--- a/pkgs/tools/networking/yggdrasil/default.nix
+++ b/pkgs/tools/networking/yggdrasil/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "yggdrasil";
-  version = "0.3.14";
+  version = "0.4.0";
 
   src = fetchFromGitHub {
     owner = "yggdrasil-network";
     repo = "yggdrasil-go";
     rev = "v${version}";
-    sha256 = "147kl2kvv1rn3yk0mlvd998a2yayjl07csxxkjvs6264j6csb860";
+    sha256 = "sha256-sMcbOTLdmAXp3U2XeNM0hrwOTjzr+9B6IvAaVbjhuFY=";
   };
 
-  vendorSha256 = "09xv2p9rydnsb185x61fxhyjqx41wz285c1gdd47ad3s08ay1qc7";
+  vendorSha256 = "sha256-QQN8ePOQ7DT9KeuY4ohFuPtocuinh3Y3us6QMnCQ4gc=";
 
   doCheck = false;
 
diff --git a/pkgs/tools/networking/yrd/default.nix b/pkgs/tools/networking/yrd/default.nix
index 9b76d033829..75a89b859fe 100644
--- a/pkgs/tools/networking/yrd/default.nix
+++ b/pkgs/tools/networking/yrd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pythonPackages }:
+{ lib, fetchFromGitHub, pythonPackages }:
 
 let
   pname = "yrd";
@@ -17,7 +17,7 @@ in pythonPackages.buildPythonApplication {
 
   propagatedBuildInputs = with pythonPackages; [ argh ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Cjdns swiss army knife";
     maintainers = with maintainers; [ akru ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/networking/ytcc/default.nix b/pkgs/tools/networking/ytcc/default.nix
index dc38648c369..6bd12963b7e 100644
--- a/pkgs/tools/networking/ytcc/default.nix
+++ b/pkgs/tools/networking/ytcc/default.nix
@@ -2,34 +2,46 @@
 
 python3Packages.buildPythonApplication rec {
   pname = "ytcc";
-  version = "1.8.4";
+  version = "2.2.0";
 
   src = fetchFromGitHub {
     owner = "woefe";
     repo = "ytcc";
     rev = "v${version}";
-    sha256 = "11gwpqmq611j07pjscch28jsrfgyzy69ph2w1miz3arqmxz7dqjp";
+    sha256 = "1rhnrmanad10zy2as9q5wjfjlk18f51vf801syyfgxvk0pdcsk6w";
   };
 
   nativeBuildInputs = [ gettext ];
 
-  propagatedBuildInputs = with python3Packages; [ feedparser lxml sqlalchemy youtube-dl ];
+  propagatedBuildInputs = with python3Packages; [
+    click
+    feedparser
+    lxml
+    sqlalchemy
+    youtube-dl
+    wcwidth
+  ];
 
-  checkInputs = with python3Packages; [ nose pytest ];
+  checkInputs = with python3Packages; [ nose pytestCheckHook ];
 
   # 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'
-  '';
+  disabledTests = [
+    "get_channels"
+    "play_video"
+    "download_videos"
+    "update_all"
+    "add_channel_duplicate"
+    "test_subscribe"
+    "test_import"
+    "test_import_duplicate"
+    "test_update"
+    "test_download"
+  ];
 
   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;
+    license = lib.licenses.gpl3Plus;
     maintainers = with lib.maintainers; [ marius851000 ];
   };
 }
diff --git a/pkgs/tools/networking/zap/default.nix b/pkgs/tools/networking/zap/default.nix
index 2d8902f6909..bccc840a27a 100644
--- a/pkgs/tools/networking/zap/default.nix
+++ b/pkgs/tools/networking/zap/default.nix
@@ -1,33 +1,41 @@
-{ stdenv, fetchFromGitHub, jdk, ant, runtimeShell }:
+{ lib, stdenv, fetchurl, jre, runtimeShell }:
 
 stdenv.mkDerivation rec {
   pname = "zap";
-  version = "2.7.0";
-  src = fetchFromGitHub {
-    owner = "zaproxy";
-    repo = "zaproxy";
-    rev =version;
-    sha256 = "1bz4pgq66v6kxmgj99llacm1d85vj8z78jlgc2z9hv0ha5i57y32";
+  version = "2.10.0";
+  src = fetchurl {
+    url = "https://github.com/zaproxy/zaproxy/releases/download/v${version}/ZAP_${version}_Linux.tar.gz";
+    sha256 = "1mz9s56pbs62g4pnd1ml8y6jpf9ilisdwwvjv5kn6yxrcdi2zzqh";
   };
 
-  buildInputs = [ jdk ant ];
+  buildInputs = [ jre ];
 
-  buildPhase = ''
-    cd build
-    echo -n "${version}" > version.txt
-    ant -f build.xml setup init  compile dist copy-source-to-build package-linux
-  '';
+  # From https://github.com/zaproxy/zaproxy/blob/master/zap/src/main/java/org/parosproxy/paros/Constant.java
+  version_tag = "2010000";
 
+  # Copying config and adding version tag before first use to avoid permission
+  # issues if zap tries to copy config on it's own.
   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"
+    mkdir -p "$out/bin" "$out/share"
+    cp -pR . "$out/share/${pname}/"
+
+    cat >> "$out/bin/${pname}" << EOF
+    #!${runtimeShell}
+    export PATH="${lib.makeBinPath [ jre ]}:\$PATH"
+    export JAVA_HOME='${jre}'
+    if ! [ -f "~/.ZAP/config.xml" ];then
+      mkdir -p "\$HOME/.ZAP"
+      head -n 2 $out/share/${pname}/xml/config.xml > "\$HOME/.ZAP/config.xml"
+      echo "<version>${version_tag}</version>" >> "\$HOME/.ZAP/config.xml"
+      tail -n +3 $out/share/${pname}/xml/config.xml >> "\$HOME/.ZAP/config.xml"
+    fi
+    exec "$out/share/${pname}/zap.sh"  "\$@"
+    EOF
+
+    chmod u+x  "$out/bin/${pname}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.owasp.org/index.php/ZAP";
     description = "Java application for web penetration testing";
     maintainers = with maintainers; [ mog ];
diff --git a/pkgs/tools/networking/zerotierone/default.nix b/pkgs/tools/networking/zerotierone/default.nix
index 666b30d2c8e..4a44843e947 100644
--- a/pkgs/tools/networking/zerotierone/default.nix
+++ b/pkgs/tools/networking/zerotierone/default.nix
@@ -1,34 +1,28 @@
-{ stdenv, buildPackages, fetchFromGitHub, openssl, lzo, zlib, iproute, ronn }:
+{ lib, stdenv, buildPackages, fetchFromGitHub, openssl, lzo, zlib, iproute2, ronn }:
 
 stdenv.mkDerivation rec {
   pname = "zerotierone";
-  version = "1.4.6";
+  version = "1.6.5";
 
   src = fetchFromGitHub {
     owner = "zerotier";
     repo = "ZeroTierOne";
     rev = version;
-    sha256 = "1f8hh05wx59dc0fbzdzwq05x0gmrdfl4v103wbcyjmzsbazaw6p3";
+    sha256 = "0dlnrb59vnxa3pjkgfqd5jil9kl6axh23v0bffi4kx8jwzpdwas8";
   };
 
   preConfigure = ''
-      substituteInPlace ./osdep/ManagedRoute.cpp \
-        --replace '/usr/sbin/ip' '${iproute}/bin/ip'
+    patchShebangs ./doc/build.sh
+    substituteInPlace ./doc/build.sh \
+      --replace '/usr/bin/ronn' '${buildPackages.ronn}/bin/ronn' \
 
-      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' \
-
-      substituteInPlace ./make-linux.mk \
-        --replace 'armv5' 'armv6'
+    substituteInPlace ./make-linux.mk \
+      --replace 'armv5' 'armv6'
   '';
 
 
   nativeBuildInputs = [ ronn ];
-  buildInputs = [ openssl lzo zlib iproute ];
+  buildInputs = [ openssl lzo zlib iproute2 ];
 
   enableParallelBuilding = true;
 
@@ -52,7 +46,7 @@ stdenv.mkDerivation rec {
 
   outputs = [ "out" "man" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Create flat virtual Ethernet networks of almost unlimited size";
     homepage = "https://www.zerotier.com";
     license = licenses.bsl11;
diff --git a/pkgs/tools/networking/zs-apc-spdu-ctl/default.nix b/pkgs/tools/networking/zs-apc-spdu-ctl/default.nix
new file mode 100644
index 00000000000..1a3d3ed7a35
--- /dev/null
+++ b/pkgs/tools/networking/zs-apc-spdu-ctl/default.nix
@@ -0,0 +1,36 @@
+{ cmake
+, fetchFromGitHub
+, fping
+, lib
+, libowlevelzs
+, net-snmp
+, stdenv
+}:
+
+# TODO: add a services entry for the /etc/zs-apc-spdu.conf file
+stdenv.mkDerivation rec {
+  pname = "zs-apc-spdu-ctl";
+  version = "0.0.2";
+
+  src = fetchFromGitHub {
+    owner = "zseri";
+    repo = "zs-apc-spdu-ctl";
+    rev = "v${version}";
+    sha256 = "TMV9ETWBVeXq6tZ2e0CrvHBXoyKfOLCQurjBdf/iw/M=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libowlevelzs net-snmp ];
+
+  postPatch = ''
+    substituteInPlace src/confent.cxx \
+      --replace /usr/sbin/fping "${fping}/bin/fping"
+  '';
+
+  meta = with lib; {
+    description = "APC SPDU control utility";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zseri ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/networking/zs-wait4host/default.nix b/pkgs/tools/networking/zs-wait4host/default.nix
new file mode 100644
index 00000000000..b6b4c985dfe
--- /dev/null
+++ b/pkgs/tools/networking/zs-wait4host/default.nix
@@ -0,0 +1,34 @@
+{ coreutils, fetchurl, fping, lib, stdenvNoCC }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "zs-wait4host";
+  version = "0.3.2";
+
+  src = fetchurl {
+    url = "https://ytrizja.de/distfiles/${pname}-${version}.tar.gz";
+    sha256 = "9F1264BDoGlRR7bWlRXhfyvxWio4ydShKmabUQEIz9I=";
+  };
+
+  postPatch = ''
+    for i in zs-wait4host zs-wait4host-inf; do
+      substituteInPlace "$i" \
+        --replace '$(zs-guess-fping)' '${fping}/bin/fping' \
+        --replace ' sleep ' ' ${coreutils}/bin/sleep ' \
+        --replace '[ "$FPING" ] || exit 1' ""
+    done
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D -t $out/bin zs-wait4host zs-wait4host-inf
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Wait for a host to come up/go down";
+    homepage = "https://ytrizja.de/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ zseri ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/networking/zssh/default.nix b/pkgs/tools/networking/zssh/default.nix
index 720c43ccc2d..d512b03dbea 100644
--- a/pkgs/tools/networking/zssh/default.nix
+++ b/pkgs/tools/networking/zssh/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, readline, deepin }:
+{ lib, stdenv, fetchurl, readline }:
 
 let
   version = "1.5c";
@@ -17,7 +17,7 @@ in stdenv.mkDerivation rec {
     # 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";
+      url = "https://raw.githubusercontent.com/archlinux/svntogit-community/0a7c92543f9309856d02e31196f06d7c3eaa8b67/trunk/fix_use_ptmx_on_arch.patch";
       sha256 = "12daw9wpy58ql882zww945wk9cg2adwp8qsr5rvazx0xq0qawgbr";
     })
   ];
@@ -32,8 +32,8 @@ in stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2;
+    maintainers = [ ]; # required by deepin-terminal
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/nix/cached-nix-shell/default.nix b/pkgs/tools/nix/cached-nix-shell/default.nix
index 2db9ee6d9b3..acbb0be3b9c 100644
--- a/pkgs/tools/nix/cached-nix-shell/default.nix
+++ b/pkgs/tools/nix/cached-nix-shell/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, openssl, pkgconfig, ronn, rustPlatform }:
+{ lib, fetchFromGitHub, openssl, pkg-config, ronn, rustPlatform }:
 
 let
   blake3-src = fetchFromGitHub {
@@ -10,16 +10,16 @@ let
 
 in rustPlatform.buildRustPackage rec {
   pname = "cached-nix-shell";
-  version = "0.1.3";
+  version = "0.1.4";
 
   src = fetchFromGitHub {
     owner = "xzfc";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1ni671wr2lrvyz6myaz3v4llrjvq4jc1ygw1m7rvnadzyf3va3lw";
+    sha256 = "0w6khry1ncyqy5h6996xw1f6viw4wdrfji5m8lz9gm487xlq5v0b";
   };
 
-  cargoSha256 = "19i39b1yqdf81ql4psr3nfah6ci2mw3ljkv740clqmz088j2av8g";
+  cargoSha256 = "05lcm5fzsn3h6dl2n2yq52r2vagrgmab08kafinz2kdcvv05wpk5";
 
   # The BLAKE3 C library is intended to be built by the project depending on it
   # rather than as a standalone library.
@@ -29,17 +29,14 @@ in rustPlatform.buildRustPackage rec {
   nativeBuildInputs = [ ronn ];
 
   postBuild = ''
-    ronn -r cached-nix-shell.1.md
+    make -f nix/Makefile post-build
   '';
 
   postInstall = ''
-    mkdir -p $out/lib $out/share/cached-nix-shell $out/share/man/man1 $out/var/empty
-    cp $releaseDir/build/cached-nix-shell-*/out/trace-nix.so $out/lib
-    cp rcfile.sh $out/share/cached-nix-shell/rcfile.sh
-    cp cached-nix-shell.1 $out/share/man/man1
+    make -f nix/Makefile post-install
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Instant startup time for nix-shell";
     homepage = "https://github.com/xzfc/cached-nix-shell";
     license = with licenses; [ unlicense /* or */ mit ];
diff --git a/pkgs/tools/nix/dnadd/default.nix b/pkgs/tools/nix/dnadd/default.nix
new file mode 100644
index 00000000000..3f4d76a9c4d
--- /dev/null
+++ b/pkgs/tools/nix/dnadd/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "dnadd";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "JoeLancaster";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1vzbgz8y9gj4lszsx4iczfbrj373sl4wi43j7rp46zfcbw323d4r";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/joelancaster/dnadd";
+    description = "Adds packages declaratively on the command line";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ joelancaster ];
+  };
+}
diff --git a/pkgs/tools/nix/manix/default.nix b/pkgs/tools/nix/manix/default.nix
new file mode 100644
index 00000000000..768a283ebd2
--- /dev/null
+++ b/pkgs/tools/nix/manix/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, darwin, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "manix";
+  version = "0.6.3";
+
+  src = fetchFromGitHub {
+    owner = "mlvzk";
+    repo  = pname;
+    rev = "v${version}";
+    sha256 = "1b7xi8c2drbwzfz70czddc4j33s7g1alirv12dwl91hbqxifx8qs";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  cargoSha256 = "1yivx9vzk2fvncvlkwq5v11hb9llr1zlcmy69y12q6xnd9rd8x1b";
+
+  meta = with lib; {
+    description = "A Fast Documentation Searcher for Nix";
+    homepage    = "https://github.com/mlvzk/manix";
+    license     = [ licenses.mpl20 ];
+    maintainers = [ maintainers.mlvzk ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/nix/nar-serve/default.nix b/pkgs/tools/nix/nar-serve/default.nix
new file mode 100644
index 00000000000..1d7fd6beb4a
--- /dev/null
+++ b/pkgs/tools/nix/nar-serve/default.nix
@@ -0,0 +1,26 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+buildGoModule rec {
+  pname = "nar-serve";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "numtide";
+    repo = "nar-serve";
+    rev = "v${version}";
+    hash = "sha256-h/pzKRXgcGTpr1YUKppDa+iTLKak/PGhbYa8ZczWj1U=";
+  };
+
+  vendorSha256 = "sha256-eW+cul/5qJocpKV/6azxj7HTmkezDw6dNubPtAOP5HU=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Serve NAR file contents via HTTP";
+    homepage = "https://github.com/numtide/nar-serve";
+    license = licenses.mit;
+    maintainers = with maintainers; [ rizary ];
+  };
+}
diff --git a/pkgs/tools/nix/nix-output-monitor/default.nix b/pkgs/tools/nix/nix-output-monitor/default.nix
new file mode 100644
index 00000000000..a9c83305df3
--- /dev/null
+++ b/pkgs/tools/nix/nix-output-monitor/default.nix
@@ -0,0 +1,41 @@
+{ mkDerivation, ansi-terminal, async, attoparsec, base, containers
+, cassava, directory, HUnit, mtl, nix-derivation, process, relude, lib
+, stm, terminal-size, text, time, unix, wcwidth, fetchFromGitHub
+, lock-file, data-default, expect, runtimeShell
+}:
+mkDerivation rec {
+  pname = "nix-output-monitor";
+  version = "1.0.3.1";
+  src = fetchFromGitHub {
+    owner = "maralorn";
+    repo = "nix-output-monitor";
+    sha256 = "1kkf6cqq8aba8vmfcww30ah9j44bwakanyfdb6595vmaq5hrsq92";
+    rev = "v${version}";
+  };
+  isLibrary = true;
+  isExecutable = true;
+  libraryHaskellDepends = [
+    ansi-terminal async attoparsec base cassava containers directory mtl
+    nix-derivation relude stm terminal-size text time unix wcwidth lock-file
+    data-default
+  ];
+  executableHaskellDepends = [
+    ansi-terminal async attoparsec base containers directory mtl
+    nix-derivation relude stm text time unix
+  ];
+  testHaskellDepends = [
+    ansi-terminal async attoparsec base containers directory HUnit mtl
+    nix-derivation process relude stm text time unix
+  ];
+  postInstall = ''
+    cat > $out/bin/nom-build << EOF
+    #!${runtimeShell}
+    ${expect}/bin/unbuffer nix-build "\$@" 2>&1 | exec $out/bin/nom
+    EOF
+    chmod a+x $out/bin/nom-build
+  '';
+  homepage = "https://github.com/maralorn/nix-output-monitor";
+  description = "Parses output of nix-build to show additional information";
+  license = lib.licenses.agpl3Plus;
+  maintainers = [ lib.maintainers.maralorn ];
+}
diff --git a/pkgs/tools/nix/nix-query-tree-viewer/default.nix b/pkgs/tools/nix/nix-query-tree-viewer/default.nix
index de0b88378a4..b0fba9d047a 100644
--- a/pkgs/tools/nix/nix-query-tree-viewer/default.nix
+++ b/pkgs/tools/nix/nix-query-tree-viewer/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform, glib, gtk3, wrapGAppsHook }:
+{ lib, fetchFromGitHub, rustPlatform, glib, gtk3, wrapGAppsHook }:
 
 rustPlatform.buildRustPackage rec {
   pname = "nix-query-tree-viewer";
@@ -20,9 +20,9 @@ rustPlatform.buildRustPackage rec {
     gtk3
   ];
 
-  cargoSha256 = "1pbyi7knqmqxbpi3jhl492is9zkaxdpdnmbm11nqwc1nvvbjblzc";
+  cargoSha256 = "1i9sjs77v1c3lch93pzjgr1zl0k1mlwkdpf3zfp13hyjn6zpldnj";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "GTK viewer for the output of `nix store --query --tree`";
     homepage    = "https://github.com/cdepillabout/nix-query-tree-viewer";
     license     = with licenses; [ mit ];
diff --git a/pkgs/tools/nix/nix-script/default.nix b/pkgs/tools/nix/nix-script/default.nix
index da8ba3bce8e..f9077ef1387 100644
--- a/pkgs/tools/nix/nix-script/default.nix
+++ b/pkgs/tools/nix/nix-script/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, haskellPackages, fetchFromGitHub }:
+{ lib, stdenv, haskellPackages, fetchFromGitHub }:
 
 stdenv.mkDerivation {
   pname = "nix-script";
@@ -15,17 +15,24 @@ stdenv.mkDerivation {
     (haskellPackages.ghcWithPackages (hs: with hs; [ posix-escape ]))
   ];
 
-  phases = [ "buildPhase" "installPhase" "fixupPhase" ];
   buildPhase = ''
+    runHook preBuild
+
     mkdir -p $out/bin
     ghc -O2 $src/nix-script.hs -o $out/bin/nix-script -odir . -hidir .
+
+    runHook postBuild
   '';
   installPhase = ''
+    runHook preInstall
+
     ln -s $out/bin/nix-script $out/bin/nix-scripti
+
+    runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
-    description = "A shebang for running inside nix-shell.";
+  meta = with lib; {
+    description = "A shebang for running inside nix-shell";
     homepage    = "https://github.com/bennofs/nix-script";
     license     = licenses.bsd3;
     maintainers = with maintainers; [ bennofs rnhmjoj ];
diff --git a/pkgs/tools/nix/nixdoc/default.nix b/pkgs/tools/nix/nixdoc/default.nix
index cdcb274945e..ef5ddc528ab 100644
--- a/pkgs/tools/nix/nixdoc/default.nix
+++ b/pkgs/tools/nix/nixdoc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform, darwin }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, darwin }:
 
 rustPlatform.buildRustPackage rec {
   pname = "nixdoc";
@@ -11,11 +11,11 @@ rustPlatform.buildRustPackage rec {
     sha256 = "14d4dq06jdqazxvv7fq5872zy0capxyb0fdkp8qg06gxl1iw201s";
   };
 
-  buildInputs =  stdenv.lib.optional stdenv.isDarwin [ darwin.Security ];
+  buildInputs =  lib.optional stdenv.isDarwin [ darwin.Security ];
 
-  cargoSha256 = "1vamwynkbnffs8ryr2zb1a41cymjvr8zzh1bifyh9hpkx2k11rs3";
+  cargoSha256 = "1nv6g8rmjjbwqmjkrpqncypqvx5c7xp2zlx5h6rw2j9d1wlys0v5";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Generate documentation for Nix functions";
     homepage    = "https://github.com/tazjin/nixdoc";
     license     = [ licenses.gpl3 ];
diff --git a/pkgs/tools/nix/nixos-generators/default.nix b/pkgs/tools/nix/nixos-generators/default.nix
index c1e84494609..004a7347522 100644
--- a/pkgs/tools/nix/nixos-generators/default.nix
+++ b/pkgs/tools/nix/nixos-generators/default.nix
@@ -2,12 +2,12 @@
 
 stdenv.mkDerivation rec {
   pname = "nixos-generators";
-  version = "1.1.0";
+  version = "1.3.0";
   src = fetchFromGitHub {
     owner = "nix-community";
     repo = "nixos-generators";
     rev = version;
-    sha256 = "04cfhj42c2m7lafir9ksh36n3nhx3x20lhamyk4zc5p3pm1xdbs6";
+    sha256 = "1gbj2jw7zv3mnq1lyj4q53jpfj642jy7lvg0kp060znvhws3370y";
   };
   nativeBuildInputs = [ makeWrapper ];
   installFlags = [ "PREFIX=$(out)" ];
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
       --prefix PATH : ${lib.makeBinPath [ jq coreutils findutils nix ] }
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Collection of image builders";
     homepage    = "https://github.com/nix-community/nixos-generators";
     license     = licenses.mit;
diff --git a/pkgs/tools/nix/nixos-install-tools/default.nix b/pkgs/tools/nix/nixos-install-tools/default.nix
new file mode 100644
index 00000000000..a129fb34521
--- /dev/null
+++ b/pkgs/tools/nix/nixos-install-tools/default.nix
@@ -0,0 +1,67 @@
+{
+  buildEnv,
+  lib,
+  man,
+  nixos,
+  # TODO: replace indirect self-reference by proper self-reference
+  #       https://github.com/NixOS/nixpkgs/pull/119942
+  nixos-install-tools,
+  runCommand,
+}:
+let
+  inherit (nixos {}) config;
+  version = config.system.nixos.version;
+in
+(buildEnv {
+  name = "nixos-install-tools-${version}";
+  paths = lib.attrValues {
+    # See nixos/modules/installer/tools/tools.nix
+    inherit (config.system.build)
+      nixos-install nixos-generate-config nixos-enter;
+
+    # Required for --help.
+    inherit (config.system.build.manual) manpages;
+  };
+
+  extraOutputsToInstall = ["man"];
+
+  meta = {
+    description = "The essential commands from the NixOS installer as a package";
+    longDescription = ''
+      With this package, you get the commands like nixos-generate-config and
+      nixos-install that you would otherwise only find on a NixOS system, such
+      as an installer image.
+
+      This way, you can install NixOS using a machine that only has Nix.
+    '';
+    license = lib.licenses.mit;
+    homepage = "https://nixos.org";
+    platforms = lib.platforms.linux;
+  };
+
+  passthru.tests = {
+    nixos-install-help = runCommand "test-nixos-install-help" {
+      nativeBuildInputs = [
+        man
+        nixos-install-tools
+      ];
+      meta.description = ''
+        Make sure that --help works. It's somewhat non-trivial because it
+        requires man.
+      '';
+    } ''
+      nixos-install --help | grep -F 'NixOS Reference Pages'
+      nixos-install --help | grep -F 'configuration.nix'
+      nixos-generate-config --help | grep -F 'NixOS Reference Pages'
+      nixos-generate-config --help | grep -F 'hardware-configuration.nix'
+
+      # FIXME: Tries to call unshare, which it must not do for --help
+      # nixos-enter --help | grep -F 'NixOS Reference Pages'
+
+      touch $out
+    '';
+  };
+}).overrideAttrs (o: {
+  inherit version;
+  pname = "nixos-install-tools";
+})
diff --git a/pkgs/tools/nix/nixos-option/CMakeLists.txt b/pkgs/tools/nix/nixos-option/CMakeLists.txt
new file mode 100644
index 00000000000..e5834598c4f
--- /dev/null
+++ b/pkgs/tools/nix/nixos-option/CMakeLists.txt
@@ -0,0 +1,8 @@
+cmake_minimum_required (VERSION 2.6)
+project (nixos-option)
+
+add_executable(nixos-option nixos-option.cc libnix-copy-paste.cc)
+target_link_libraries(nixos-option PRIVATE -lnixmain -lnixexpr -lnixstore -lnixutil)
+target_compile_features(nixos-option PRIVATE cxx_std_17)
+
+install (TARGETS nixos-option DESTINATION bin)
diff --git a/pkgs/tools/nix/nixos-option/default.nix b/pkgs/tools/nix/nixos-option/default.nix
new file mode 100644
index 00000000000..216e2678e2e
--- /dev/null
+++ b/pkgs/tools/nix/nixos-option/default.nix
@@ -0,0 +1,12 @@
+{lib, stdenv, boost, cmake, pkg-config, nix, ... }:
+
+stdenv.mkDerivation rec {
+  name = "nixos-option";
+  src = ./.;
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ boost nix ];
+  meta = with lib; {
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ chkno ];
+  };
+}
diff --git a/pkgs/tools/nix/nixos-option/libnix-copy-paste.cc b/pkgs/tools/nix/nixos-option/libnix-copy-paste.cc
new file mode 100644
index 00000000000..875c07da639
--- /dev/null
+++ b/pkgs/tools/nix/nixos-option/libnix-copy-paste.cc
@@ -0,0 +1,83 @@
+// These are useful methods inside the nix library that ought to be exported.
+// Since they are not, copy/paste them here.
+// TODO: Delete these and use the ones in the library as they become available.
+
+#include <nix/config.h> // for nix/globals.hh's reference to SYSTEM
+
+#include "libnix-copy-paste.hh"
+#include <boost/format/alt_sstream.hpp>           // for basic_altstringbuf...
+#include <boost/format/alt_sstream_impl.hpp>      // for basic_altstringbuf...
+#include <boost/format/format_class.hpp>          // for basic_format
+#include <boost/format/format_fwd.hpp>            // for format
+#include <boost/format/format_implementation.hpp> // for basic_format::basi...
+#include <boost/optional/optional.hpp>            // for get_pointer
+#include <iostream>                               // for operator<<, basic_...
+#include <nix/types.hh>                           // for Strings, Error
+#include <string>                                 // for string, basic_string
+
+using boost::format;
+using nix::Error;
+using nix::Strings;
+using std::string;
+
+// From nix/src/libexpr/attr-path.cc
+Strings parseAttrPath(const string & s)
+{
+    Strings res;
+    string cur;
+    string::const_iterator i = s.begin();
+    while (i != s.end()) {
+        if (*i == '.') {
+            res.push_back(cur);
+            cur.clear();
+        } else if (*i == '"') {
+            ++i;
+            while (1) {
+                if (i == s.end())
+                    throw Error(format("missing closing quote in selection path '%1%'") % s);
+                if (*i == '"')
+                    break;
+                cur.push_back(*i++);
+            }
+        } else
+            cur.push_back(*i);
+        ++i;
+    }
+    if (!cur.empty())
+        res.push_back(cur);
+    return res;
+}
+
+// From nix/src/nix/repl.cc
+bool isVarName(const string & s)
+{
+    if (s.size() == 0)
+        return false;
+    char c = s[0];
+    if ((c >= '0' && c <= '9') || c == '-' || c == '\'')
+        return false;
+    for (auto & i : s)
+        if (!((i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') || (i >= '0' && i <= '9') || i == '_' || i == '-' ||
+              i == '\''))
+            return false;
+    return true;
+}
+
+// From nix/src/nix/repl.cc
+std::ostream & printStringValue(std::ostream & str, const char * string)
+{
+    str << "\"";
+    for (const char * i = string; *i; i++)
+        if (*i == '\"' || *i == '\\')
+            str << "\\" << *i;
+        else if (*i == '\n')
+            str << "\\n";
+        else if (*i == '\r')
+            str << "\\r";
+        else if (*i == '\t')
+            str << "\\t";
+        else
+            str << *i;
+    str << "\"";
+    return str;
+}
diff --git a/pkgs/tools/nix/nixos-option/libnix-copy-paste.hh b/pkgs/tools/nix/nixos-option/libnix-copy-paste.hh
new file mode 100644
index 00000000000..2274e9a0f85
--- /dev/null
+++ b/pkgs/tools/nix/nixos-option/libnix-copy-paste.hh
@@ -0,0 +1,9 @@
+#pragma once
+
+#include <iostream>
+#include <nix/types.hh>
+#include <string>
+
+nix::Strings parseAttrPath(const std::string & s);
+bool isVarName(const std::string & s);
+std::ostream & printStringValue(std::ostream & str, const char * string);
diff --git a/pkgs/tools/nix/nixos-option/nixos-option.cc b/pkgs/tools/nix/nixos-option/nixos-option.cc
new file mode 100644
index 00000000000..f779d82edbd
--- /dev/null
+++ b/pkgs/tools/nix/nixos-option/nixos-option.cc
@@ -0,0 +1,643 @@
+#include <nix/config.h> // for nix/globals.hh's reference to SYSTEM
+
+#include <exception>               // for exception_ptr, current_exception
+#include <functional>              // for function
+#include <iostream>                // for operator<<, basic_ostream, ostrin...
+#include <iterator>                // for next
+#include <list>                    // for _List_iterator
+#include <memory>                  // for allocator, unique_ptr, make_unique
+#include <new>                     // for operator new
+#include <nix/args.hh>             // for argvToStrings, UsageError
+#include <nix/attr-path.hh>        // for findAlongAttrPath
+#include <nix/attr-set.hh>         // for Attr, Bindings, Bindings::iterator
+#include <nix/common-eval-args.hh> // for MixEvalArgs
+#include <nix/eval-inline.hh>      // for EvalState::forceValue
+#include <nix/eval.hh>             // for EvalState, initGC, operator<<
+#include <nix/globals.hh>          // for initPlugins, Settings, settings
+#include <nix/nixexpr.hh>          // for Pos
+#include <nix/shared.hh>           // for getArg, LegacyArgs, printVersion
+#include <nix/store-api.hh>        // for openStore
+#include <nix/symbol-table.hh>     // for Symbol, SymbolTable
+#include <nix/types.hh>            // for Error, Path, Strings, PathSet
+#include <nix/util.hh>             // for absPath, baseNameOf
+#include <nix/value.hh>            // for Value, Value::(anonymous), Value:...
+#include <string>                  // for string, operator+, operator==
+#include <utility>                 // for move
+#include <variant>                 // for get, holds_alternative, variant
+#include <vector>                  // for vector<>::iterator, vector
+
+#include "libnix-copy-paste.hh"
+
+using nix::absPath;
+using nix::Bindings;
+using nix::Error;
+using nix::EvalError;
+using nix::EvalState;
+using nix::Path;
+using nix::PathSet;
+using nix::Strings;
+using nix::Symbol;
+using nix::tAttrs;
+using nix::ThrownError;
+using nix::tLambda;
+using nix::tString;
+using nix::UsageError;
+using nix::Value;
+
+// An ostream wrapper to handle nested indentation
+class Out
+{
+  public:
+    class Separator
+    {};
+    const static Separator sep;
+    enum LinePolicy
+    {
+        ONE_LINE,
+        MULTI_LINE
+    };
+    explicit Out(std::ostream & ostream) : ostream(ostream), policy(ONE_LINE), writeSinceSep(true) {}
+    Out(Out & o, const std::string & start, const std::string & end, LinePolicy policy);
+    Out(Out & o, const std::string & start, const std::string & end, int count)
+        : Out(o, start, end, count < 2 ? ONE_LINE : MULTI_LINE)
+    {}
+    Out(const Out &) = delete;
+    Out(Out &&) = default;
+    Out & operator=(const Out &) = delete;
+    Out & operator=(Out &&) = delete;
+    ~Out() { ostream << end; }
+
+  private:
+    std::ostream & ostream;
+    std::string indentation;
+    std::string end;
+    LinePolicy policy;
+    bool writeSinceSep;
+    template <typename T> friend Out & operator<<(Out & o, T thing);
+};
+
+template <typename T> Out & operator<<(Out & o, T thing)
+{
+    if (!o.writeSinceSep && o.policy == Out::MULTI_LINE) {
+        o.ostream << o.indentation;
+    }
+    o.writeSinceSep = true;
+    o.ostream << thing;
+    return o;
+}
+
+template <> Out & operator<<<Out::Separator>(Out & o, Out::Separator /* thing */)
+{
+    o.ostream << (o.policy == Out::ONE_LINE ? " " : "\n");
+    o.writeSinceSep = false;
+    return o;
+}
+
+Out::Out(Out & o, const std::string & start, const std::string & end, LinePolicy policy)
+    : ostream(o.ostream), indentation(policy == ONE_LINE ? o.indentation : o.indentation + "  "),
+      end(policy == ONE_LINE ? end : o.indentation + end), policy(policy), writeSinceSep(true)
+{
+    o << start;
+    *this << Out::sep;
+}
+
+// Stuff needed for evaluation
+struct Context
+{
+    Context(EvalState & state, Bindings & autoArgs, Value optionsRoot, Value configRoot)
+        : state(state), autoArgs(autoArgs), optionsRoot(optionsRoot), configRoot(configRoot),
+          underscoreType(state.symbols.create("_type"))
+    {}
+    EvalState & state;
+    Bindings & autoArgs;
+    Value optionsRoot;
+    Value configRoot;
+    Symbol underscoreType;
+};
+
+Value evaluateValue(Context & ctx, Value & v)
+{
+    ctx.state.forceValue(v);
+    if (ctx.autoArgs.empty()) {
+        return v;
+    }
+    Value called{};
+    ctx.state.autoCallFunction(ctx.autoArgs, v, called);
+    return called;
+}
+
+bool isOption(Context & ctx, const Value & v)
+{
+    if (v.type != tAttrs) {
+        return false;
+    }
+    const auto & actualType = v.attrs->find(ctx.underscoreType);
+    if (actualType == v.attrs->end()) {
+        return false;
+    }
+    try {
+        Value evaluatedType = evaluateValue(ctx, *actualType->value);
+        if (evaluatedType.type != tString) {
+            return false;
+        }
+        return static_cast<std::string>(evaluatedType.string.s) == "option";
+    } catch (Error &) {
+        return false;
+    }
+}
+
+// Add quotes to a component of a path.
+// These are needed for paths like:
+//    fileSystems."/".fsType
+//    systemd.units."dbus.service".text
+std::string quoteAttribute(const std::string & attribute)
+{
+    if (isVarName(attribute)) {
+        return attribute;
+    }
+    std::ostringstream buf;
+    printStringValue(buf, attribute.c_str());
+    return buf.str();
+}
+
+const std::string appendPath(const std::string & prefix, const std::string & suffix)
+{
+    if (prefix.empty()) {
+        return quoteAttribute(suffix);
+    }
+    return prefix + "." + quoteAttribute(suffix);
+}
+
+bool forbiddenRecursionName(std::string name) { return (!name.empty() && name[0] == '_') || name == "haskellPackages"; }
+
+void recurse(const std::function<bool(const std::string & path, std::variant<Value, std::exception_ptr>)> & f,
+             Context & ctx, Value v, const std::string & path)
+{
+    std::variant<Value, std::exception_ptr> evaluated;
+    try {
+        evaluated = evaluateValue(ctx, v);
+    } catch (Error &) {
+        evaluated = std::current_exception();
+    }
+    if (!f(path, evaluated)) {
+        return;
+    }
+    if (std::holds_alternative<std::exception_ptr>(evaluated)) {
+        return;
+    }
+    const Value & evaluated_value = std::get<Value>(evaluated);
+    if (evaluated_value.type != tAttrs) {
+        return;
+    }
+    for (const auto & child : evaluated_value.attrs->lexicographicOrder()) {
+        if (forbiddenRecursionName(child->name)) {
+            continue;
+        }
+        recurse(f, ctx, *child->value, appendPath(path, child->name));
+    }
+}
+
+bool optionTypeIs(Context & ctx, Value & v, const std::string & soughtType)
+{
+    try {
+        const auto & typeLookup = v.attrs->find(ctx.state.sType);
+        if (typeLookup == v.attrs->end()) {
+            return false;
+        }
+        Value type = evaluateValue(ctx, *typeLookup->value);
+        if (type.type != tAttrs) {
+            return false;
+        }
+        const auto & nameLookup = type.attrs->find(ctx.state.sName);
+        if (nameLookup == type.attrs->end()) {
+            return false;
+        }
+        Value name = evaluateValue(ctx, *nameLookup->value);
+        if (name.type != tString) {
+            return false;
+        }
+        return name.string.s == soughtType;
+    } catch (Error &) {
+        return false;
+    }
+}
+
+bool isAggregateOptionType(Context & ctx, Value & v)
+{
+    return optionTypeIs(ctx, v, "attrsOf") || optionTypeIs(ctx, v, "listOf");
+}
+
+MakeError(OptionPathError, EvalError);
+
+Value getSubOptions(Context & ctx, Value & option)
+{
+    Value getSubOptions = evaluateValue(ctx, *findAlongAttrPath(ctx.state, "type.getSubOptions", ctx.autoArgs, option));
+    if (getSubOptions.type != tLambda) {
+        throw OptionPathError("Option's type.getSubOptions isn't a function");
+    }
+    Value emptyString{};
+    nix::mkString(emptyString, "");
+    Value v;
+    ctx.state.callFunction(getSubOptions, emptyString, v, nix::Pos{});
+    return v;
+}
+
+// Carefully walk an option path, looking for sub-options when a path walks past
+// an option value.
+struct FindAlongOptionPathRet
+{
+    Value option;
+    std::string path;
+};
+FindAlongOptionPathRet findAlongOptionPath(Context & ctx, const std::string & path)
+{
+    Strings tokens = parseAttrPath(path);
+    Value v = ctx.optionsRoot;
+    std::string processedPath;
+    for (auto i = tokens.begin(); i != tokens.end(); i++) {
+        const auto & attr = *i;
+        try {
+            bool lastAttribute = std::next(i) == tokens.end();
+            v = evaluateValue(ctx, v);
+            if (attr.empty()) {
+                throw OptionPathError("empty attribute name");
+            }
+            if (isOption(ctx, v) && optionTypeIs(ctx, v, "submodule")) {
+                v = getSubOptions(ctx, v);
+            }
+            if (isOption(ctx, v) && isAggregateOptionType(ctx, v)) {
+                auto subOptions = getSubOptions(ctx, v);
+                if (lastAttribute && subOptions.attrs->empty()) {
+                    break;
+                }
+                v = subOptions;
+                // Note that we've consumed attr, but didn't actually use it.  This is the path component that's looked
+                // up in the list or attribute set that doesn't name an option -- the "root" in "users.users.root.name".
+            } else if (v.type != tAttrs) {
+                throw OptionPathError("Value is %s while a set was expected", showType(v));
+            } else {
+                const auto & next = v.attrs->find(ctx.state.symbols.create(attr));
+                if (next == v.attrs->end()) {
+                    throw OptionPathError("Attribute not found", attr, path);
+                }
+                v = *next->value;
+            }
+            processedPath = appendPath(processedPath, attr);
+        } catch (OptionPathError & e) {
+            throw OptionPathError("At '%s' in path '%s': %s", attr, path, e.msg());
+        }
+    }
+    return {v, processedPath};
+}
+
+// Calls f on all the option names at or below the option described by `path`.
+// Note that "the option described by `path`" is not trivial -- if path describes a value inside an aggregate
+// option (such as users.users.root), the *option* described by that path is one path component shorter
+// (eg: users.users), which results in f being called on sibling-paths (eg: users.users.nixbld1).  If f
+// doesn't want these, it must do its own filtering.
+void mapOptions(const std::function<void(const std::string & path)> & f, Context & ctx, const std::string & path)
+{
+    auto root = findAlongOptionPath(ctx, path);
+    recurse(
+        [f, &ctx](const std::string & path, std::variant<Value, std::exception_ptr> v) {
+            bool isOpt = std::holds_alternative<std::exception_ptr>(v) || isOption(ctx, std::get<Value>(v));
+            if (isOpt) {
+                f(path);
+            }
+            return !isOpt;
+        },
+        ctx, root.option, root.path);
+}
+
+// Calls f on all the config values inside one option.
+// Simple options have one config value inside, like sound.enable = true.
+// Compound options have multiple config values.  For example, the option
+// "users.users" has about 1000 config values inside it:
+//   users.users.avahi.createHome = false;
+//   users.users.avahi.cryptHomeLuks = null;
+//   users.users.avahi.description = "`avahi-daemon' privilege separation user";
+//   ...
+//   users.users.avahi.openssh.authorizedKeys.keyFiles = [ ];
+//   users.users.avahi.openssh.authorizedKeys.keys = [ ];
+//   ...
+//   users.users.avahi.uid = 10;
+//   users.users.avahi.useDefaultShell = false;
+//   users.users.cups.createHome = false;
+//   ...
+//   users.users.cups.useDefaultShell = false;
+//   users.users.gdm = ... ... ...
+//   users.users.messagebus = ... .. ...
+//   users.users.nixbld1 = ... .. ...
+//   ...
+//   users.users.systemd-timesync = ... .. ...
+void mapConfigValuesInOption(
+    const std::function<void(const std::string & path, std::variant<Value, std::exception_ptr> v)> & f,
+    const std::string & path, Context & ctx)
+{
+    Value * option;
+    try {
+        option = findAlongAttrPath(ctx.state, path, ctx.autoArgs, ctx.configRoot);
+    } catch (Error &) {
+        f(path, std::current_exception());
+        return;
+    }
+    recurse(
+        [f, ctx](const std::string & path, std::variant<Value, std::exception_ptr> v) {
+            bool leaf = std::holds_alternative<std::exception_ptr>(v) || std::get<Value>(v).type != tAttrs ||
+                        ctx.state.isDerivation(std::get<Value>(v));
+            if (!leaf) {
+                return true; // Keep digging
+            }
+            f(path, v);
+            return false;
+        },
+        ctx, *option, path);
+}
+
+std::string describeError(const Error & e) { return "«error: " + e.msg() + "»"; }
+
+void describeDerivation(Context & ctx, Out & out, Value v)
+{
+    // Copy-pasted from nix/src/nix/repl.cc  :(
+    Bindings::iterator i = v.attrs->find(ctx.state.sDrvPath);
+    PathSet pathset;
+    try {
+        Path drvPath = i != v.attrs->end() ? ctx.state.coerceToPath(*i->pos, *i->value, pathset) : "???";
+        out << "«derivation " << drvPath << "»";
+    } catch (Error & e) {
+        out << describeError(e);
+    }
+}
+
+Value parseAndEval(EvalState & state, const std::string & expression, const std::string & path)
+{
+    Value v{};
+    state.eval(state.parseExprFromString(expression, absPath(path)), v);
+    return v;
+}
+
+void printValue(Context & ctx, Out & out, std::variant<Value, std::exception_ptr> maybeValue, const std::string & path);
+
+void printList(Context & ctx, Out & out, Value & v)
+{
+    Out listOut(out, "[", "]", v.listSize());
+    for (unsigned int n = 0; n < v.listSize(); ++n) {
+        printValue(ctx, listOut, *v.listElems()[n], "");
+        listOut << Out::sep;
+    }
+}
+
+void printAttrs(Context & ctx, Out & out, Value & v, const std::string & path)
+{
+    Out attrsOut(out, "{", "}", v.attrs->size());
+    for (const auto & a : v.attrs->lexicographicOrder()) {
+        std::string name = a->name;
+        if (!forbiddenRecursionName(name)) {
+            attrsOut << name << " = ";
+            printValue(ctx, attrsOut, *a->value, appendPath(path, name));
+            attrsOut << ";" << Out::sep;
+        }
+    }
+}
+
+void multiLineStringEscape(Out & out, const std::string & s)
+{
+    int i;
+    for (i = 1; i < s.size(); i++) {
+        if (s[i - 1] == '$' && s[i] == '{') {
+            out << "''${";
+            i++;
+        } else if (s[i - 1] == '\'' && s[i] == '\'') {
+            out << "'''";
+            i++;
+        } else {
+            out << s[i - 1];
+        }
+    }
+    if (i == s.size()) {
+        out << s[i - 1];
+    }
+}
+
+void printMultiLineString(Out & out, const Value & v)
+{
+    std::string s = v.string.s;
+    Out strOut(out, "''", "''", Out::MULTI_LINE);
+    std::string::size_type begin = 0;
+    while (begin < s.size()) {
+        std::string::size_type end = s.find('\n', begin);
+        if (end == std::string::npos) {
+            multiLineStringEscape(strOut, s.substr(begin, s.size() - begin));
+            break;
+        }
+        multiLineStringEscape(strOut, s.substr(begin, end - begin));
+        strOut << Out::sep;
+        begin = end + 1;
+    }
+}
+
+void printValue(Context & ctx, Out & out, std::variant<Value, std::exception_ptr> maybeValue, const std::string & path)
+{
+    try {
+        if (auto ex = std::get_if<std::exception_ptr>(&maybeValue)) {
+            std::rethrow_exception(*ex);
+        }
+        Value v = evaluateValue(ctx, std::get<Value>(maybeValue));
+        if (ctx.state.isDerivation(v)) {
+            describeDerivation(ctx, out, v);
+        } else if (v.isList()) {
+            printList(ctx, out, v);
+        } else if (v.type == tAttrs) {
+            printAttrs(ctx, out, v, path);
+        } else if (v.type == tString && std::string(v.string.s).find('\n') != std::string::npos) {
+            printMultiLineString(out, v);
+        } else {
+            ctx.state.forceValueDeep(v);
+            out << v;
+        }
+    } catch (ThrownError & e) {
+        if (e.msg() == "The option `" + path + "' is used but not defined.") {
+            // 93% of errors are this, and just letting this message through would be
+            // misleading.  These values may or may not actually be "used" in the
+            // config.  The thing throwing the error message assumes that if anything
+            // ever looks at this value, it is a "use" of this value.  But here in
+            // nixos-option, we are looking at this value only to print it.
+            // In order to avoid implying that this undefined value is actually
+            // referenced, eat the underlying error message and emit "«not defined»".
+            out << "«not defined»";
+        } else {
+            out << describeError(e);
+        }
+    } catch (Error & e) {
+        out << describeError(e);
+    }
+}
+
+void printConfigValue(Context & ctx, Out & out, const std::string & path, std::variant<Value, std::exception_ptr> v)
+{
+    out << path << " = ";
+    printValue(ctx, out, std::move(v), path);
+    out << ";\n";
+}
+
+// Replace with std::starts_with when C++20 is available
+bool starts_with(const std::string & s, const std::string & prefix)
+{
+    return s.size() >= prefix.size() &&
+           std::equal(s.begin(), std::next(s.begin(), prefix.size()), prefix.begin(), prefix.end());
+}
+
+void printRecursive(Context & ctx, Out & out, const std::string & path)
+{
+    mapOptions(
+        [&ctx, &out, &path](const std::string & optionPath) {
+            mapConfigValuesInOption(
+                [&ctx, &out, &path](const std::string & configPath, std::variant<Value, std::exception_ptr> v) {
+                    if (starts_with(configPath, path)) {
+                        printConfigValue(ctx, out, configPath, v);
+                    }
+                },
+                optionPath, ctx);
+        },
+        ctx, path);
+}
+
+void printAttr(Context & ctx, Out & out, const std::string & path, Value & root)
+{
+    try {
+        printValue(ctx, out, *findAlongAttrPath(ctx.state, path, ctx.autoArgs, root), path);
+    } catch (Error & e) {
+        out << describeError(e);
+    }
+}
+
+bool hasExample(Context & ctx, Value & option)
+{
+    try {
+        findAlongAttrPath(ctx.state, "example", ctx.autoArgs, option);
+        return true;
+    } catch (Error &) {
+        return false;
+    }
+}
+
+void printOption(Context & ctx, Out & out, const std::string & path, Value & option)
+{
+    out << "Value:\n";
+    printAttr(ctx, out, path, ctx.configRoot);
+
+    out << "\n\nDefault:\n";
+    printAttr(ctx, out, "default", option);
+
+    out << "\n\nType:\n";
+    printAttr(ctx, out, "type.description", option);
+
+    if (hasExample(ctx, option)) {
+        out << "\n\nExample:\n";
+        printAttr(ctx, out, "example", option);
+    }
+
+    out << "\n\nDescription:\n";
+    printAttr(ctx, out, "description", option);
+
+    out << "\n\nDeclared by:\n";
+    printAttr(ctx, out, "declarations", option);
+
+    out << "\n\nDefined by:\n";
+    printAttr(ctx, out, "files", option);
+    out << "\n";
+}
+
+void printListing(Out & out, Value & v)
+{
+    out << "This attribute set contains:\n";
+    for (const auto & a : v.attrs->lexicographicOrder()) {
+        std::string name = a->name;
+        if (!name.empty() && name[0] != '_') {
+            out << name << "\n";
+        }
+    }
+}
+
+void printOne(Context & ctx, Out & out, const std::string & path)
+{
+    try {
+        auto result = findAlongOptionPath(ctx, path);
+        Value & option = result.option;
+        option = evaluateValue(ctx, option);
+        if (path != result.path) {
+            out << "Note: showing " << result.path << " instead of " << path << "\n";
+        }
+        if (isOption(ctx, option)) {
+            printOption(ctx, out, result.path, option);
+        } else {
+            printListing(out, option);
+        }
+    } catch (Error & e) {
+        std::cerr << "error: " << e.msg()
+                  << "\nAn error occurred while looking for attribute names. Are "
+                     "you sure that '"
+                  << path << "' exists?\n";
+    }
+}
+
+int main(int argc, char ** argv)
+{
+    bool recursive = false;
+    std::string path = ".";
+    std::string optionsExpr = "(import <nixpkgs/nixos> {}).options";
+    std::string configExpr = "(import <nixpkgs/nixos> {}).config";
+    std::vector<std::string> args;
+
+    struct MyArgs : nix::LegacyArgs, nix::MixEvalArgs
+    {
+        using nix::LegacyArgs::LegacyArgs;
+    };
+
+    MyArgs myArgs(nix::baseNameOf(argv[0]), [&](Strings::iterator & arg, const Strings::iterator & end) {
+        if (*arg == "--help") {
+            nix::showManPage("nixos-option");
+        } else if (*arg == "--version") {
+            nix::printVersion("nixos-option");
+        } else if (*arg == "-r" || *arg == "--recursive") {
+            recursive = true;
+        } else if (*arg == "--path") {
+            path = nix::getArg(*arg, arg, end);
+        } else if (*arg == "--options_expr") {
+            optionsExpr = nix::getArg(*arg, arg, end);
+        } else if (*arg == "--config_expr") {
+            configExpr = nix::getArg(*arg, arg, end);
+        } else if (!arg->empty() && arg->at(0) == '-') {
+            return false;
+        } else {
+            args.push_back(*arg);
+        }
+        return true;
+    });
+
+    myArgs.parseCmdline(nix::argvToStrings(argc, argv));
+
+    nix::initPlugins();
+    nix::initGC();
+    nix::settings.readOnlyMode = true;
+    auto store = nix::openStore();
+    auto state = std::make_unique<EvalState>(myArgs.searchPath, store);
+
+    Value optionsRoot = parseAndEval(*state, optionsExpr, path);
+    Value configRoot = parseAndEval(*state, configExpr, path);
+
+    Context ctx{*state, *myArgs.getAutoArgs(*state), optionsRoot, configRoot};
+    Out out(std::cout);
+
+    auto print = recursive ? printRecursive : printOne;
+    if (args.empty()) {
+        print(ctx, out, "");
+    }
+    for (const auto & arg : args) {
+        print(ctx, out, arg);
+    }
+
+    ctx.state.printStats();
+
+    return 0;
+}
diff --git a/pkgs/tools/nix/nixpkgs-fmt/default.nix b/pkgs/tools/nix/nixpkgs-fmt/default.nix
index 40e74fba8a8..b203d2992fb 100644
--- a/pkgs/tools/nix/nixpkgs-fmt/default.nix
+++ b/pkgs/tools/nix/nixpkgs-fmt/default.nix
@@ -1,16 +1,16 @@
-{ lib, rustPlatform, fetchFromGitHub, fetchpatch }:
+{ lib, rustPlatform, fetchFromGitHub }:
 rustPlatform.buildRustPackage rec {
   pname = "nixpkgs-fmt";
-  version = "1.0.0";
+  version = "1.2.0";
 
   src = fetchFromGitHub {
     owner = "nix-community";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0w1himwix7iv40rixj9afknwmqg2qmkif23z217gc7x63zyg9vdc";
+    sha256 = "0dqirvn8pq6ssxjlf6rkqcsx6ndasws93lz2v9f9s01k9ny8x8mq";
   };
 
-  cargoSha256 = "1qzhii72hjdxmgfncvyk80ybvk6zywd6v73bb1ibhnry734grzvw";
+  cargoSha256 = "0mm79hfh8p1rs02pkpcv25p59b24q1rymwh11yxry4d4f12b6aw0";
 
   meta = with lib; {
     description = "Nix code formatter for nixpkgs";
diff --git a/pkgs/tools/nix/rnix-hashes/default.nix b/pkgs/tools/nix/rnix-hashes/default.nix
index 607884b8ac9..4aebb35bc93 100644
--- a/pkgs/tools/nix/rnix-hashes/default.nix
+++ b/pkgs/tools/nix/rnix-hashes/default.nix
@@ -1,4 +1,5 @@
 { lib, rustPlatform, fetchFromGitHub, fetchpatch }:
+
 rustPlatform.buildRustPackage rec {
   pname = "rnix-hashes";
   version = "0.2.0";
@@ -10,12 +11,20 @@ rustPlatform.buildRustPackage rec {
     sha256 = "SzHyG5cEjaaPjTkn8puht6snjHMl8DtorOGDjxakJfA=";
   };
 
-  cargoSha256 = "vaG+0t+XAckV9F4iIgcTkbIUurxdQsTCfOnRnrOKoRc=";
+  patches = [
+    # fix test failure
+    (fetchpatch {
+      url = "https://github.com/numtide/rnix-hashes/commit/62ab96cfd1efeade7d98efd9829eae8677bac9cc.patch";
+      sha256 = "sha256-oE2fBt20FmO2cEUGivu2mKo3z6rbhVLXSF8SRvhibFs=";
+    })
+  ];
+
+  cargoSha256 = "sha256-p6W9NtOKzVViyFq5SQvnIsik7S3mqUqxI/05OiC+P+Q=";
 
   meta = with lib; {
     description = "Nix Hash Converter";
     homepage = "https://github.com/numtide/rnix-hashes";
     license = licenses.asl20;
-    maintainers = with maintainers; [ rizary ];
+    maintainers = with maintainers; [ rizary SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/package-management/apk-tools/default.nix b/pkgs/tools/package-management/apk-tools/default.nix
index 33c08636e44..b39c74dd57c 100644
--- a/pkgs/tools/package-management/apk-tools/default.nix
+++ b/pkgs/tools/package-management/apk-tools/default.nix
@@ -1,20 +1,29 @@
-{ stdenv, lib, fetchurl, lua, openssl, pkg-config, zlib }:
+{ lib, stdenv, fetchFromGitLab, pkg-config, scdoc, openssl, zlib
+, luaSupport ? stdenv.hostPlatform == stdenv.buildPlatform, lua
+}:
 
 stdenv.mkDerivation rec {
   pname = "apk-tools";
-  version = "2.10.5";
+  version = "2.12.6";
 
-  src = fetchurl {
-    url = "https://dev.alpinelinux.org/archive/apk-tools/apk-tools-${version}.tar.xz";
-    sha256 = "00z3fqnv8vk2czdm4p2q4sldq0n8sxyf2qfwppyk7wj59d2sq8dp";
+  src = fetchFromGitLab {
+    domain = "gitlab.alpinelinux.org";
+    owner = "alpine";
+    repo = "apk-tools";
+    rev = "v${version}";
+    sha256 = "0ki306k2ilwwg8ia302i62qa00f31g9g5q56xfbanyl7b620wd1f";
   };
 
-  nativeBuildInputs = [ pkg-config ];
-  buildInputs = [ lua openssl zlib ];
+  nativeBuildInputs = [ pkg-config scdoc ]
+    ++ lib.optionals luaSupport [ lua lua.pkgs.lua-zlib ];
+  buildInputs = [ openssl zlib ] ++ lib.optional luaSupport lua;
+  strictDeps = true;
 
   makeFlags = [
+    "CROSS_COMPILE=${stdenv.cc.targetPrefix}"
     "SBINDIR=$(out)/bin"
     "LIBDIR=$(out)/lib"
+    "LUA=${if luaSupport then "lua" else "no"}"
     "LUA_LIBDIR=$(out)/lib/lua/${lib.versions.majorMinor lua.version}"
     "MANDIR=$(out)/share/man"
     "DOCDIR=$(out)/share/doc/apk"
@@ -30,7 +39,8 @@ stdenv.mkDerivation rec {
     homepage = "https://gitlab.alpinelinux.org/alpine/apk-tools";
     description = "Alpine Package Keeper";
     maintainers = with maintainers; [ qyliss ];
-    license = licenses.gpl2;
+    license = licenses.gpl2Only;
     platforms = platforms.unix;
+    broken = stdenv.isDarwin;
   };
 }
diff --git a/pkgs/tools/package-management/appimage-run/default.nix b/pkgs/tools/package-management/appimage-run/default.nix
index 3bc59f2ad14..98a04dff8f8 100644
--- a/pkgs/tools/package-management/appimage-run/default.nix
+++ b/pkgs/tools/package-management/appimage-run/default.nix
@@ -1,4 +1,4 @@
-{ appimageTools, buildFHSUserEnv, extraPkgs ? pkgs: [] }:
+{ appimageTools, buildFHSUserEnv, extraPkgs ? pkgs: [], appimage-run-tests ? null }:
 
 let
   fhsArgs = appimageTools.defaultFhsEnvArgs;
@@ -8,4 +8,6 @@ in buildFHSUserEnv (fhsArgs // {
   targetPkgs = pkgs: [ appimageTools.appimage-exec ]
     ++ fhsArgs.targetPkgs pkgs ++ extraPkgs pkgs;
   runScript = "appimage-exec.sh";
+
+  passthru.tests.appimage-run = appimage-run-tests;
 })
diff --git a/pkgs/tools/package-management/appimage-run/test.nix b/pkgs/tools/package-management/appimage-run/test.nix
new file mode 100644
index 00000000000..c9bc63c08a8
--- /dev/null
+++ b/pkgs/tools/package-management/appimage-run/test.nix
@@ -0,0 +1,24 @@
+{ runCommand, fetchurl, appimage-run, glibcLocales, file }:
+let
+  # any AppImage usable on cli, really
+  sample-appImage = fetchurl {
+    url = "https://github.com/AppImage/AppImageKit/releases/download/12/appimagetool-x86_64.AppImage";
+    sha256 =  "04ws94q71bwskmhizhwmaf41ma4wabvfgjgkagr8wf3vakgv866r";
+  };
+in
+  runCommand "appimage-run-tests" {
+    buildInputs = [ appimage-run glibcLocales file ];
+    meta.platforms = [ "x86_64-linux" ];
+  }
+  ''
+    export HOME=$(mktemp -d)
+    set -x
+    # regression test for #101137, must come first
+    LANG=fr_FR appimage-run ${sample-appImage} --list ${sample-appImage}
+    # regression test for #108426
+    cp ${sample-appImage} foo.appImage
+    LANG=fr_FR appimage-run ${sample-appImage} --list foo.appImage
+    set +x
+    touch $out
+  ''
+
diff --git a/pkgs/tools/package-management/appimagekit/default.nix b/pkgs/tools/package-management/appimagekit/default.nix
index 21e869b7b01..620a0b05a95 100644
--- a/pkgs/tools/package-management/appimagekit/default.nix
+++ b/pkgs/tools/package-management/appimagekit/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub
-, pkgconfig, cmake, autoconf, automake, libtool, makeWrapper
+{ lib, stdenv, fetchFromGitHub
+, pkg-config, cmake, autoconf, automake, libtool, makeWrapper
 , wget, xxd, desktop-file-utils, file
 , gnupg, glib, zlib, cairo, openssl, fuse, xz, squashfuse, inotify-tools, libarchive
 , squashfsTools
@@ -11,29 +11,30 @@ let
   appimagekit_src = fetchFromGitHub {
     owner = "AppImage";
     repo = "AppImageKit";
-    rev = "b0859501df61cde198b54a317c03b41dbafc98b1";
-    sha256 = "0qqg79jw9w9rs8c2w3lla4kz62ihafrf7jm370pp1dl8y2i81jzg";
+    rev = "8bbf694455d00f48d835f56afaa1dabcd9178ba6";
+    sha256 = "sha256-pqg+joomC5CI9WdKP/h/XKPsruMgZEaIOjPLOqnNPZw=";
+    fetchSubmodules = true;
   };
 
-  # squashfuse adapted to nix from cmake experession in "${appimagekit_src}/cmake/dependencies.cmake"
+  # squashfuse adapted to nix from cmake experession in "${appimagekit_src}/lib/libappimage/cmake/dependencies.cmake"
   appimagekit_squashfuse = squashfuse.overrideAttrs (attrs: rec {
-    name = "squashfuse-${version}";
-    version = "20161009";
+    pname = "squashfuse";
+    version = "unstable-2016-10-09";
 
     src = fetchFromGitHub {
       owner = "vasi";
-      repo  = "squashfuse";
-      rev   = "1f980303b89c779eabfd0a0fdd36d6a7a311bf92";
-      sha256 = "0lrw9ff8k15l34wjwyllw3i35hl0cms97jj2hpnr2q8ipgxpb5q5";
+      repo  = pname;
+      rev = "1f980303b89c779eabfd0a0fdd36d6a7a311bf92";
+      sha256 = "sha256-BZd1+7sRYZHthULKk3RlgMIy4uCUei45GbSEiZxLPFM=";
     };
 
     patches = [
-      "${appimagekit_src}/squashfuse.patch"
-      "${appimagekit_src}/squashfuse_dlopen.patch"
+      "${appimagekit_src}/lib/libappimage/src/patches/squashfuse.patch"
+      "${appimagekit_src}/lib/libappimage/src/patches/squashfuse_dlopen.patch"
     ];
 
     postPatch = ''
-      cp -v ${appimagekit_src}/squashfuse_dlopen.[hc] .
+      cp -v ${appimagekit_src}/lib/libappimage/src/patches/squashfuse_dlopen.[hc] .
     '';
 
     preConfigure = ''
@@ -58,27 +59,27 @@ let
   });
 
 in stdenv.mkDerivation rec {
-  name = "appimagekit-20180727";
+  pname = "appimagekit";
+  version = "unstable-2020-12-31";
 
   src = appimagekit_src;
 
   patches = [ ./nix.patch ];
 
+  postPatch = ''
+    patchShebangs src/embed-magic-bytes-in-file.sh
+  '';
+
   nativeBuildInputs = [
-    pkgconfig cmake autoconf automake libtool wget xxd
-    desktop-file-utils
+    pkg-config cmake autoconf automake libtool wget xxd
+    desktop-file-utils makeWrapper
   ];
 
   buildInputs = [
-    glib zlib cairo openssl fuse
-    xz inotify-tools libarchive
-    squashfsTools makeWrapper
+    glib zlib cairo openssl fuse xz inotify-tools
+    libarchive squashfsTools appimagekit_squashfuse
   ];
 
-  postPatch = ''
-    substituteInPlace src/appimagetool.c --replace "/usr/bin/file" "${file}/bin/file"
-  '';
-
   preConfigure = ''
     export HOME=$(pwd)
   '';
@@ -87,29 +88,29 @@ in stdenv.mkDerivation rec {
     "-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 = ''
+    mkdir -p $out/lib/appimagekit
     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 ]}"
+      --prefix PATH : "${lib.makeBinPath [ file gnupg ]}" \
+      --unset SOURCE_DATE_EPOCH
   '';
 
   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; {
+  meta = with lib; {
     description = "A tool to package desktop applications as AppImages";
     longDescription = ''
       AppImageKit is an implementation of the AppImage format that
@@ -117,6 +118,7 @@ in stdenv.mkDerivation rec {
       AppImages.
     '';
     license = licenses.mit;
+    maintainers = with maintainers; [ taeer ];
     homepage = src.meta.homepage;
     platforms = platforms.linux;
   };
diff --git a/pkgs/tools/package-management/appimagekit/nix.patch b/pkgs/tools/package-management/appimagekit/nix.patch
index 9725cef5ba7..f03922cb5ca 100644
--- a/pkgs/tools/package-management/appimagekit/nix.patch
+++ b/pkgs/tools/package-management/appimagekit/nix.patch
@@ -1,174 +1,82 @@
-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/"
+Submodule lib/libappimage contains modified content
+diff --git a/lib/libappimage/cmake/dependencies.cmake b/lib/libappimage/cmake/dependencies.cmake
+index 8d96484..c7b17a1 100644
+--- a/lib/libappimage/cmake/dependencies.cmake
++++ b/lib/libappimage/cmake/dependencies.cmake
+@@ -91,9 +91,18 @@ if(NOT USE_SYSTEM_SQUASHFUSE)
+         INCLUDE_DIRS "<SOURCE_DIR>"
      )
  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 squashfuse")
 +    message(STATUS "Using system squashfsfuse from ${SQUASHFUSE}")
-+
-+    add_library(squashfuse INTERFACE IMPORTED GLOBAL)
+
+-    import_pkgconfig_target(TARGET_NAME libsquashfuse PKGCONFIG_TARGET squashfuse)
++    add_library(libsquashfuse 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
++      TARGET libsquashfuse
 +      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 @@
+
+
+diff --git a/src/appimagetool.c b/src/appimagetool.c
+index 6b37419..23425e7 100644
+--- a/src/appimagetool.c
++++ b/src/appimagetool.c
+@@ -38,7 +38,7 @@
+ #include <argp.h>
+
+ #include <fcntl.h>
+-#include "squashfuse.h"
++#include <squashfuse.h>
+
+ #include <sys/types.h>
  #include <sys/stat.h>
+@@ -96,7 +96,7 @@ static void die(const char *msg) {
+ }
+
+ /* Function that prints the contents of a squashfs file
+-* using libsquashfuse (#include "squashfuse.h") */
++* using libsquashfuse (#include <squashfuse.h>) */
+ int sfs_ls(char* image) {
+     sqfs_err err = SQFS_OK;
+     sqfs_traverse trv;
+diff --git a/src/appimagetoolnoglib.c b/src/appimagetoolnoglib.c
+index f900e76..ffa87f8 100644
+--- a/src/appimagetoolnoglib.c
++++ b/src/appimagetoolnoglib.c
+@@ -3,7 +3,7 @@
+
+ #include <stdlib.h>
+ #include <fcntl.h>
+-#include "squashfuse.h"
++#include <squashfuse.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 <sys/stat.h>
+@@ -118,7 +118,7 @@ int is_regular_file(const char *path)
+ }
+
+ /* Function that prints the contents of a squashfs file
+- * using libsquashfuse (#include "squashfuse.h") */
++ * using libsquashfuse (#include <squashfuse.h>) */
+ int sfs_ls(char* image) {
+ 	sqfs_err err = SQFS_OK;
+ 	sqfs_traverse trv;
+diff --git a/src/runtime.c b/src/runtime.c
+index bada3af..70a642b 100644
+--- a/src/runtime.c
++++ b/src/runtime.c
+@@ -29,7 +29,7 @@
+
+ #define _GNU_SOURCE
+
 -#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
+ #include <nonstd.h>
diff --git a/pkgs/tools/package-management/apt-dater/default.nix b/pkgs/tools/package-management/apt-dater/default.nix
index 49669cba40a..a15ec7e9c16 100644
--- a/pkgs/tools/package-management/apt-dater/default.nix
+++ b/pkgs/tools/package-management/apt-dater/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub
-, autoreconfHook, pkgconfig, gettext
+{ lib, stdenv, fetchFromGitHub
+, autoreconfHook, pkg-config, gettext
 , vim, glib, libxml2, ncurses, popt, screen
 }:
 
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [
-    pkgconfig autoreconfHook gettext
+    pkg-config autoreconfHook gettext
   ];
 
   buildInputs = [
@@ -36,7 +36,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/DE-IBH/apt-dater";
     description = "Terminal-based remote package update manager";
     longDescription = ''
diff --git a/pkgs/tools/package-management/apt/default.nix b/pkgs/tools/package-management/apt/default.nix
index b83c49029b3..86982bf7f3a 100644
--- a/pkgs/tools/package-management/apt/default.nix
+++ b/pkgs/tools/package-management/apt/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, lib, fetchurl, pkgconfig, cmake, perlPackages, curl, gtest
-, gnutls, libtasn1, lzma, bzip2, lz4, zstd, libseccomp, udev
+{ stdenv, lib, fetchurl, pkg-config, cmake, perlPackages, curl, gtest
+, gnutls, libtasn1, xz, bzip2, lz4, zstd, libseccomp, udev
 , db, dpkg, libxslt, docbook_xsl, docbook_xml_dtd_45
 
 # used when WITH_DOC=ON
@@ -23,10 +23,10 @@ stdenv.mkDerivation rec {
     sha256 = "0gn4srqaaym85gc8nldqkv01477kdwr136an2nlpbdrsbx3y83zl";
   };
 
-  nativeBuildInputs = [ pkgconfig cmake gtest libxslt.bin ];
+  nativeBuildInputs = [ pkg-config cmake gtest libxslt.bin ];
 
   buildInputs = [
-    perlPackages.perl curl gnutls libtasn1 lzma bzip2 lz4 zstd libseccomp udev db dpkg
+    perlPackages.perl curl gnutls libtasn1 xz bzip2 lz4 zstd libseccomp udev db dpkg
   ] ++ lib.optionals withDocs [
     doxygen perlPackages.Po4a w3m docbook_xml_dtd_45
   ] ++ lib.optionals withNLS [
@@ -42,8 +42,6 @@ stdenv.mkDerivation rec {
     "-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";
diff --git a/pkgs/tools/package-management/auditwheel/default.nix b/pkgs/tools/package-management/auditwheel/default.nix
new file mode 100644
index 00000000000..7c633698e38
--- /dev/null
+++ b/pkgs/tools/package-management/auditwheel/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, bzip2
+, patchelf
+, python3
+, gnutar
+, unzip
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "auditwheel";
+  version = "4.0.0";
+
+  disabled = python3.pkgs.pythonOlder "3.6";
+
+  src = python3.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "03a079fe273f42336acdb5953ff5ce7578f93ca6a832b16c835fe337a1e2bd4a";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    pbr
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pyelftools
+    setuptools
+  ];
+
+  # integration tests require docker and networking
+  disabledTestPaths = [ "tests/integration" ];
+
+  checkInputs = with python3.pkgs; [
+    pretend
+    pytestCheckHook
+  ];
+
+  # ensure that there are no undeclared deps
+  postCheck = ''
+    PATH= PYTHONPATH= $out/bin/auditwheel --version > /dev/null
+  '';
+
+  makeWrapperArgs = [
+    "--prefix" "PATH" ":" (lib.makeBinPath [ bzip2 gnutar patchelf unzip ])
+  ];
+
+  meta = with lib; {
+    description = "Auditing and relabeling cross-distribution Linux wheels";
+    homepage = "https://github.com/pypa/auditwheel";
+    license = with licenses; [
+      mit  # auditwheel and nibabel
+      bsd2  # from https://github.com/matthew-brett/delocate
+      bsd3  # from https://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-projects/pax-utils/lddtree.py
+    ];
+    maintainers = with maintainers; [ davhau ];
+  };
+}
diff --git a/pkgs/tools/package-management/bunny/default.nix b/pkgs/tools/package-management/bunny/default.nix
index 33c6249ebd4..8ef808610db 100644
--- a/pkgs/tools/package-management/bunny/default.nix
+++ b/pkgs/tools/package-management/bunny/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitLab }:
+{ lib, stdenv, fetchFromGitLab }:
 
 stdenv.mkDerivation rec {
   pname = "bunny";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "prefix=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A simple shell script wrapper around multiple package managers";
     homepage = "https://gitlab.com/tim241/bunny";
     license = licenses.gpl3;
diff --git a/pkgs/tools/package-management/cargo-about/default.nix b/pkgs/tools/package-management/cargo-about/default.nix
index c4d9aae267e..d2acffc2009 100644
--- a/pkgs/tools/package-management/cargo-about/default.nix
+++ b/pkgs/tools/package-management/cargo-about/default.nix
@@ -1,16 +1,18 @@
-{ lib, rustPlatform, fetchFromGitHub }:
+{ lib, rustPlatform, fetchFromGitHub, stdenv, libiconv }:
 rustPlatform.buildRustPackage rec {
   pname = "cargo-about";
-  version = "0.2.2";
+  version = "0.3.0";
 
   src = fetchFromGitHub {
     owner = "EmbarkStudios";
     repo = "cargo-about";
-    rev = "${version}";
-    sha256 = "00ing1v6vjqfvirp3mbayn8rwvxf72wnhz9249k2iifw8bl2r2hd";
+    rev = version;
+    sha256 = "sha256-MsXNneKj2xCci1guj1TKcIrX7XByJ5/lWUmjxAsgzPY=";
   };
 
-  cargoSha256 = "1wmw7knkx79fbwizaj9qkcnw0ld1lsfhca8mfpn5f0daxa5v5y97";
+  cargoSha256 = "sha256-ssAmY+o+/2+C9sol+PeFlpNwVuN5JNoofgkr3cUW+S4=";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
 
   meta = with lib; {
     description = "Cargo plugin to generate list of all licenses for a crate";
diff --git a/pkgs/tools/package-management/cargo-audit/default.nix b/pkgs/tools/package-management/cargo-audit/default.nix
index acd08817780..00b3a65be0d 100644
--- a/pkgs/tools/package-management/cargo-audit/default.nix
+++ b/pkgs/tools/package-management/cargo-audit/default.nix
@@ -1,19 +1,39 @@
-{ stdenv, lib, rustPlatform, fetchFromGitHub, openssl, pkg-config, Security, libiconv }:
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, openssl
+, pkg-config
+, Security
+, libiconv
+}:
+
 rustPlatform.buildRustPackage rec {
   pname = "cargo-audit";
-  version = "0.12.0";
+  version = "0.15.0";
 
   src = fetchFromGitHub {
     owner = "RustSec";
-    repo = "cargo-audit";
-    rev = "v${version}";
-    sha256 = "0zby9bd64bmrkb229ic7ckn2ycf9bpwsisx2a7z0id0j4mjaca4k";
+    repo = "rustsec";
+    rev = "cargo-audit%2Fv${version}";
+    sha256 = "0pvb1m9277ysjzydjvx7viybi6bd23ch7sbjyx1wnz45ahrmia1j";
   };
 
-  cargoSha256 = "1w4618w5yj1205d7s2hq273fb35qfcd7cnxdwxn4pq8x3ahgy4kx";
+  cargoSha256 = "0cf8kg8vhfqbrkm227rzyl3394n7fsqhqgq13qks7374h5d04haw";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+    libiconv
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
 
-  buildInputs = [ openssl libiconv ] ++ lib.optionals stdenv.isDarwin [ Security ];
-  nativeBuildInputs = [ pkg-config ];
+  # enables `cargo audit fix`
+  cargoBuildFlags = [ "--features fix" ];
 
   # The tests require network access which is not available in sandboxed Nix builds.
   doCheck = false;
diff --git a/pkgs/tools/package-management/cargo-deb/default.nix b/pkgs/tools/package-management/cargo-deb/default.nix
index 43a2fccd878..5a1e621d12a 100644
--- a/pkgs/tools/package-management/cargo-deb/default.nix
+++ b/pkgs/tools/package-management/cargo-deb/default.nix
@@ -3,35 +3,38 @@
 , fetchFromGitHub
 , rustPlatform
 , rust
+, libiconv
 , Security
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "cargo-deb";
-  version = "1.24.0";
+  version = "1.30.0";
 
   src = fetchFromGitHub {
     owner = "mmstick";
     repo = pname;
-    rev = "b49351f6770aa7aeb053dd1d4a02d6b086caad2a";
-    sha256 = "1hs96yv0awgi7ggpxp7k3n21jpv642sm0529b21hs9ib6kp4vs8s";
+    rev = "v${version}";
+    sha256 = "sha256-rAmG6Aj0D9dHVueh1BN1Chhit+XFhqGib1WTvMDy0LI=";
   };
 
-  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security ];
 
-  cargoSha256 = "1vqnnqn6rzkdi239bh3lk7gaxr7w6v3c4ws4ya1ah04g6v9hkzlw";
-
-  checkType = "debug";
+  cargoSha256 = "sha256-MEpyEdjLWNZvqE7gJLvQ169tgmJRzec4vqQI9fF3xr8=";
 
   preCheck = ''
     substituteInPlace tests/command.rs \
-      --replace 'target/debug' "target/${rust.toRustTarget stdenv.buildPlatform}/debug"
+      --replace 'target/debug' "target/${rust.toRustTarget stdenv.buildPlatform}/release"
+
+    # This is an FHS specific assert depending on glibc location
+    substituteInPlace src/dependencies.rs \
+      --replace 'assert!(deps.iter().any(|d| d.starts_with("libc")));' '// no libc assert here'
   '';
 
   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 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/package-management/cargo-deps/default.nix b/pkgs/tools/package-management/cargo-deps/default.nix
index 682cfde78fa..af0424c5bec 100644
--- a/pkgs/tools/package-management/cargo-deps/default.nix
+++ b/pkgs/tools/package-management/cargo-deps/default.nix
@@ -11,7 +11,7 @@ rustPlatform.buildRustPackage rec {
     sha256 = "1cdmgdag9chjifsp2hxr9j15hb6l6anqq38y8srj1nk047a3kbcw";
   };
 
-  cargoSha256 = "1gjbvgpicy9n311qh9a5n0gdyd2rnc0b9zypnzk2ibn1pgaikafy";
+  cargoSha256 = "15pf4x2aw8sl65g63cz4yv9y78yc2wi25h9khpqx6i7gyd7dxbsc";
 
   meta = with lib; {
     description = "Cargo subcommand for building dependency graphs of Rust projects";
diff --git a/pkgs/tools/package-management/cargo-download/Cargo.nix b/pkgs/tools/package-management/cargo-download/Cargo.nix
index 21740ce2ead..f96a3a207df 100644
--- a/pkgs/tools/package-management/cargo-download/Cargo.nix
+++ b/pkgs/tools/package-management/cargo-download/Cargo.nix
@@ -427,7 +427,7 @@ rec {
     serde_urlencoded = "0.5.1";
     tokio = "0.1.7";
     tokio_io = "0.1.10";
-    url = "1.6.0";
+    url = "1.6.1";
     uuid = "0.7.1";
   };
   deps.rustc_version."0.2.3" = {
@@ -464,7 +464,7 @@ rec {
     dtoa = "0.4.2";
     itoa = "0.3.4";
     serde = "1.0.21";
-    url = "1.6.0";
+    url = "1.6.1";
   };
   deps.siphasher."0.2.2" = {};
   deps.slab."0.4.0" = {};
@@ -639,7 +639,7 @@ rec {
   deps.unreachable."1.0.0" = {
     void = "1.0.2";
   };
-  deps.url."1.6.0" = {
+  deps.url."1.6.1" = {
     idna = "0.1.4";
     matches = "0.1.6";
     percent_encoding = "1.0.1";
diff --git a/pkgs/tools/package-management/cargo-download/crates-io.nix b/pkgs/tools/package-management/cargo-download/crates-io.nix
index e0c0abf4dc6..dde192585e0 100644
--- a/pkgs/tools/package-management/cargo-download/crates-io.nix
+++ b/pkgs/tools/package-management/cargo-download/crates-io.nix
@@ -4926,40 +4926,40 @@ rec {
 
 
 # end
-# url-1.6.0
+# url-1.6.1
 
-  crates.url."1.6.0" = deps: { features?(features_.url."1.6.0" deps {}) }: buildRustCrate {
+  crates.url."1.6.1" = deps: { features?(features_.url."1.6.1" deps {}) }: buildRustCrate {
     crateName = "url";
-    version = "1.6.0";
+    version = "1.6.1";
     description = "URL library for Rust, based on the WHATWG URL Standard";
     authors = [ "The rust-url developers" ];
-    sha256 = "1bvzl4dvjj84h46ai3x23wyafa2wwhchj08vr2brf25dxwc7mg18";
+    sha256 = "1qsnhmxznzaxl068a3ksz69kwcz7ghvl4zflg9qj7lyw4bk9ma38";
     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)
+      (crates."idna"."${deps."url"."1.6.1"."idna"}" deps)
+      (crates."matches"."${deps."url"."1.6.1"."matches"}" deps)
+      (crates."percent_encoding"."${deps."url"."1.6.1"."percent_encoding"}" deps)
     ]);
-    features = mkFeatures (features."url"."1.6.0" or {});
+    features = mkFeatures (features."url"."1.6.1" 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;
+  features_.url."1.6.1" = deps: f: updateFeatures f (rec {
+    idna."${deps.url."1.6.1".idna}".default = true;
+    matches."${deps.url."1.6.1".matches}".default = true;
+    percent_encoding."${deps.url."1.6.1".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); }
+      { "1.6.1"."encoding" =
+        (f.url."1.6.1"."encoding" or false) ||
+        (f.url."1.6.1".query_encoding or false) ||
+        (url."1.6.1"."query_encoding" or false); }
+      { "1.6.1"."heapsize" =
+        (f.url."1.6.1"."heapsize" or false) ||
+        (f.url."1.6.1".heap_size or false) ||
+        (url."1.6.1"."heap_size" or false); }
+      { "1.6.1".default = (f.url."1.6.1".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)
+    (features_.idna."${deps."url"."1.6.1"."idna"}" deps)
+    (features_.matches."${deps."url"."1.6.1"."matches"}" deps)
+    (features_.percent_encoding."${deps."url"."1.6.1"."percent_encoding"}" deps)
   ];
 
 
diff --git a/pkgs/tools/package-management/cargo-edit/default.nix b/pkgs/tools/package-management/cargo-edit/default.nix
index b3449566d45..de5abca29be 100644
--- a/pkgs/tools/package-management/cargo-edit/default.nix
+++ b/pkgs/tools/package-management/cargo-edit/default.nix
@@ -1,22 +1,33 @@
-{ stdenv, lib, darwin
-, rustPlatform, fetchFromGitHub
-, openssl, pkg-config, libiconv }:
+{ stdenv
+, lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, libiconv
+, Security
+, zlib
+}:
 
 rustPlatform.buildRustPackage rec {
   pname = "cargo-edit";
-  version = "0.6.0";
+  version = "0.7.0";
 
   src = fetchFromGitHub {
     owner = "killercup";
     repo = pname;
     rev = "v${version}";
-    sha256 = "19jnvsbddn52ibjv48jyfss25gg9mmvxzfhbr7s7bqyf3bq68jbm";
+    hash = "sha256:0fh1lq793k4ddpqsf2av447hcb74vcq53afkm3g4672k48mjjw1y";
   };
 
-  cargoSha256 = "0b06jsilj87rnr1qlarn29hnz0i9p455fdxg6nf6r2fli2xpv1f0";
+  cargoSha256 = "0ah3zjx36ibax4gi66g13finh4m2k0aidxkg2nxx1c2aqj847mm1";
 
   nativeBuildInputs = [ pkg-config ];
-  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ libiconv darwin.apple_sdk.frameworks.Security ];
+
+  buildInputs = [ openssl zlib ] ++ lib.optionals stdenv.isDarwin [
+    libiconv
+    Security
+  ];
 
   doCheck = false; # integration tests depend on changing cargo config
 
@@ -24,6 +35,6 @@ rustPlatform.buildRustPackage rec {
     description = "A utility for managing cargo dependencies from the command line";
     homepage = "https://github.com/killercup/cargo-edit";
     license = with licenses; [ asl20 /* or */ mit ];
-    maintainers = with maintainers; [ gerschtli jb55 filalex77 killercup ];
+    maintainers = with maintainers; [ gerschtli jb55 Br1ght0ne killercup ];
   };
 }
diff --git a/pkgs/tools/package-management/cargo-graph/default.nix b/pkgs/tools/package-management/cargo-graph/default.nix
index 5bca56d993d..37fd43a1bcf 100644
--- a/pkgs/tools/package-management/cargo-graph/default.nix
+++ b/pkgs/tools/package-management/cargo-graph/default.nix
@@ -12,7 +12,7 @@ rustPlatform.buildRustPackage rec {
     sha256 = "0myg26cssmbakz53dl61lswsbaqnjqlbc30c2571pq8f7gvz2qv5";
   };
 
-  cargoSha256 = "0fzj88iy57c39yi8pf3agfmsf2dck06f0yqmlnsaxvvp4cknkw1n";
+  cargoSha256 = "0wyvly7aq4njlxnmgpfgbh08fxgqh85kw7d938pm6qxmj27zn4p2";
 
   meta = with lib; {
     description = "A cargo subcommand for creating GraphViz DOT files and dependency graphs";
diff --git a/pkgs/tools/package-management/cargo-kcov/default.nix b/pkgs/tools/package-management/cargo-kcov/default.nix
new file mode 100644
index 00000000000..c37a7306368
--- /dev/null
+++ b/pkgs/tools/package-management/cargo-kcov/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cargo-kcov";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "kennytm";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0hqplgj3i8js42v2kj44khk543a93sk3n6wlfpv3c84pdqlm29br";
+  };
+
+  cargoSha256 = "0m5gfyjzzwd8wkbb388vmd785dy334x0migq3ssi7dlah9zx62bj";
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Cargo subcommand to run kcov to get coverage report on Linux";
+    homepage = "https://github.com/kennytm/cargo-kcov";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ saschagrunert ];
+  };
+}
diff --git a/pkgs/tools/package-management/cargo-license/default.nix b/pkgs/tools/package-management/cargo-license/default.nix
index ba461398e66..f5fcf37ac70 100644
--- a/pkgs/tools/package-management/cargo-license/default.nix
+++ b/pkgs/tools/package-management/cargo-license/default.nix
@@ -13,7 +13,7 @@ rustPlatform.buildRustPackage rec {
 
   cargoPatches = [ ./add-Cargo.lock.patch ];
 
-  cargoSha256 = "0bkaj54avvib1kipk8ky7gyxfs00qm80jd415zp53hhvinphzb5v";
+  cargoSha256 = "1gda6m5g545fgx8ash96w408mxi5rb8hrv73c0xs0gx7hfyx5zcj";
 
   meta = with lib; {
     description = "Cargo subcommand to see license of dependencies";
diff --git a/pkgs/tools/package-management/cargo-outdated/default.nix b/pkgs/tools/package-management/cargo-outdated/default.nix
index 5d4eef2fbe5..beb04041861 100644
--- a/pkgs/tools/package-management/cargo-outdated/default.nix
+++ b/pkgs/tools/package-management/cargo-outdated/default.nix
@@ -1,27 +1,27 @@
-{ stdenv, fetchFromGitHub, rustPlatform, pkg-config, openssl, libiconv, curl, darwin }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, pkg-config, openssl, libiconv, curl, darwin }:
 
 rustPlatform.buildRustPackage rec {
   pname = "cargo-outdated";
-  version = "0.9.11";
+  version = "0.9.17";
 
   src = fetchFromGitHub {
     owner = "kbknapp";
     repo = pname;
     rev = "v${version}";
-    sha256 = "11fdh24366czb3vv2szf5bl0mhsilwvpfc1h4qxq18z2dpb0y18m";
+    sha256 = "sha256-Ian/vXGoPHecguQUp2IUgdLW6Ll8OdCA2W0WmoYPDrI=";
   };
 
-  cargoSha256 = "0sr3ijq6vh2269xav03d117kzmg68xiwqsq48xjdrsnn4dx5lizy";
+  cargoSha256 = "sha256-eDu1dAs543AryUEsCY9COHrvuamQocCk0nBXDIdFmYs=";
 
   nativeBuildInputs = [ pkg-config ];
   buildInputs = [ openssl ]
-  ++ stdenv.lib.optionals stdenv.isDarwin [
+  ++ lib.optionals stdenv.isDarwin [
     darwin.apple_sdk.frameworks.Security
     libiconv
     curl
   ];
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/package-management/cargo-release/default.nix b/pkgs/tools/package-management/cargo-release/default.nix
index b68a8208de1..aeb18f2efde 100644
--- a/pkgs/tools/package-management/cargo-release/default.nix
+++ b/pkgs/tools/package-management/cargo-release/default.nix
@@ -1,23 +1,23 @@
-{ stdenv, rustPlatform, fetchFromGitHub, libiconv, Security, openssl, pkg-config }:
+{ lib, stdenv, rustPlatform, fetchFromGitHub, libiconv, Security, openssl, pkg-config }:
 
 rustPlatform.buildRustPackage rec {
   pname = "cargo-release";
-  version = "0.13.5";
+  version = "0.16.0";
 
   src = fetchFromGitHub {
     owner = "sunng87";
     repo = "cargo-release";
     rev = "v${version}";
-    sha256 = "098p6yfq8nlfckr61j3pkimwzrg5xb2i34nxvk2hiv1njl1vrqng";
+    sha256 = "sha256-+vQXaI6v8HXzsfXZFxmBJe+1u9nmW0z3SBjo38orJYA=";
   };
 
-  cargoSha256 = "07rmp4j4jpzd1rz59wsjmzmj2qkc2x4wrs9pafqrym58ypm8i4gx";
+  cargoSha256 = "sha256-Zcg1MAAESD6qrh7domslisT2wG4ZaYyZtPCQ5IQrLVo=";
 
   nativeBuildInputs = [ pkg-config ];
   buildInputs = [ openssl ]
-  ++ stdenv.lib.optionals stdenv.isDarwin [ libiconv Security ];
+  ++ lib.optionals stdenv.isDarwin [ libiconv Security ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = ''Cargo subcommand "release": everything about releasing a rust crate'';
     homepage = "https://github.com/sunng87/cargo-release";
     license = with licenses; [ mit ];
diff --git a/pkgs/tools/package-management/cargo-update/0001-Generate-lockfile-for-cargo-update-v4.1.1.patch b/pkgs/tools/package-management/cargo-update/0001-Generate-lockfile-for-cargo-update-v4.1.2.patch
index 9aa7d8b1cc9..a261045e80c 100644
--- a/pkgs/tools/package-management/cargo-update/0001-Generate-lockfile-for-cargo-update-v4.1.1.patch
+++ b/pkgs/tools/package-management/cargo-update/0001-Generate-lockfile-for-cargo-update-v4.1.2.patch
@@ -1,6 +1,6 @@
 diff --git a/Cargo.lock b/Cargo.lock
 new file mode 100644
-index 000000000..8d77f4824
+index 000000000..ada9574aa
 --- /dev/null
 +++ b/Cargo.lock
 @@ -0,0 +1,641 @@
@@ -8,9 +8,9 @@ index 000000000..8d77f4824
 +# It is not intended for manual editing.
 +[[package]]
 +name = "aho-corasick"
-+version = "0.7.13"
++version = "0.7.14"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "043164d8ba5c4c3035fec9bbee8647c0261d788f3474306f93bb65901cae0e86"
++checksum = "b476ce7103678b0c6d3d395dbbae31d48ff910bd28be979ba5d48c6351131d0d"
 +dependencies = [
 + "memchr",
 +]
@@ -55,15 +55,15 @@ index 000000000..8d77f4824
 +
 +[[package]]
 +name = "autocfg"
-+version = "1.0.0"
++version = "1.0.1"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
++checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
 +
 +[[package]]
 +name = "base64"
-+version = "0.11.0"
++version = "0.12.3"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
++checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff"
 +
 +[[package]]
 +name = "bitflags"
@@ -84,7 +84,7 @@ index 000000000..8d77f4824
 +
 +[[package]]
 +name = "cargo-update"
-+version = "4.1.1"
++version = "4.1.2"
 +dependencies = [
 + "array_tool",
 + "clap",
@@ -107,9 +107,9 @@ index 000000000..8d77f4824
 +
 +[[package]]
 +name = "cc"
-+version = "1.0.59"
++version = "1.0.61"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "66120af515773fb005778dc07c261bd201ec8ce50bd6e7144c927753fe013381"
++checksum = "ed67cbde08356238e75fc4656be4749481eeffb09e19f320a25237d5221c985d"
 +dependencies = [
 + "jobserver",
 +]
@@ -185,9 +185,9 @@ index 000000000..8d77f4824
 +
 +[[package]]
 +name = "getrandom"
-+version = "0.1.14"
++version = "0.1.15"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
++checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6"
 +dependencies = [
 + "cfg-if",
 + "libc",
@@ -211,9 +211,9 @@ index 000000000..8d77f4824
 +
 +[[package]]
 +name = "hermit-abi"
-+version = "0.1.15"
++version = "0.1.17"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "3deed196b6e7f9e44a2ae8d94225d80302d81208b1bb673fd21fe634645c85a9"
++checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8"
 +dependencies = [
 + "libc",
 +]
@@ -264,9 +264,9 @@ index 000000000..8d77f4824
 +
 +[[package]]
 +name = "libc"
-+version = "0.2.75"
++version = "0.2.79"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "55821a41348652c211bf26f6453cb9397af531fc358a33752c864a4f5bccc20e"
++checksum = "2448f6066e80e3bfc792e9c98bf705b4b0fc6e8ef5b43e5889aff0eaa9c58743"
 +
 +[[package]]
 +name = "libgit2-sys"
@@ -298,9 +298,9 @@ index 000000000..8d77f4824
 +
 +[[package]]
 +name = "libz-sys"
-+version = "1.1.0"
++version = "1.1.2"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "af67924b8dd885cccea261866c8ce5b74d239d272e154053ff927dae839f5ae9"
++checksum = "602113192b08db8f38796c4e85c39e960c145965140e918018bcde1952429655"
 +dependencies = [
 + "cc",
 + "libc",
@@ -343,9 +343,9 @@ index 000000000..8d77f4824
 +
 +[[package]]
 +name = "openssl-src"
-+version = "111.10.2+1.1.1g"
++version = "111.12.0+1.1.1h"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "a287fdb22e32b5b60624d4a5a7a02dbe82777f730ec0dbc42a0554326fef5a70"
++checksum = "858a4132194f8570a7ee9eb8629e85b23cbc4565f2d4a162e87556e5956abf61"
 +dependencies = [
 + "cc",
 +]
@@ -372,15 +372,15 @@ index 000000000..8d77f4824
 +
 +[[package]]
 +name = "pkg-config"
-+version = "0.3.18"
++version = "0.3.19"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33"
++checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
 +
 +[[package]]
 +name = "proc-macro2"
-+version = "1.0.19"
++version = "1.0.24"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "04f5f085b5d71e2188cb8271e5da0161ad52c3f227a661a3c135fdf28e258b12"
++checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
 +dependencies = [
 + "unicode-xid",
 +]
@@ -402,9 +402,9 @@ index 000000000..8d77f4824
 +
 +[[package]]
 +name = "redox_users"
-+version = "0.3.4"
++version = "0.3.5"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431"
++checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d"
 +dependencies = [
 + "getrandom",
 + "redox_syscall",
@@ -413,9 +413,9 @@ index 000000000..8d77f4824
 +
 +[[package]]
 +name = "regex"
-+version = "1.3.9"
++version = "1.4.1"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "9c3780fcf44b193bc4d09f36d2a3c87b251da4a046c87795a0d35f4f927ad8e6"
++checksum = "8963b85b8ce3074fecffde43b4b0dded83ce2f367dc8d363afc56679f3ee820b"
 +dependencies = [
 + "aho-corasick",
 + "memchr",
@@ -425,15 +425,15 @@ index 000000000..8d77f4824
 +
 +[[package]]
 +name = "regex-syntax"
-+version = "0.6.18"
++version = "0.6.20"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "26412eb97c6b088a6997e05f69403a802a92d520de2f8e63c2b65f9e0f47c4e8"
++checksum = "8cab7a364d15cde1e505267766a2d3c4e22a843e1a601f0fa7564c0f82ced11c"
 +
 +[[package]]
 +name = "rust-argon2"
-+version = "0.7.0"
++version = "0.8.2"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017"
++checksum = "9dab61250775933275e84053ac235621dfb739556d5c54a2f2e9313b7cf43a19"
 +dependencies = [
 + "base64",
 + "blake2b_simd",
@@ -459,15 +459,15 @@ index 000000000..8d77f4824
 +
 +[[package]]
 +name = "serde"
-+version = "1.0.115"
++version = "1.0.116"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "e54c9a88f2da7238af84b5101443f0c0d0a3bbdc455e34a5c9497b1903ed55d5"
++checksum = "96fe57af81d28386a513cbc6858332abc6117cfdb5999647c6444b8f43a370a5"
 +
 +[[package]]
 +name = "serde_derive"
-+version = "1.0.115"
++version = "1.0.116"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "609feed1d0a73cc36a0182a840a9b37b4a82f0b1150369f0536a9e3f2a31dc48"
++checksum = "f630a6370fd8e457873b4bd2ffdae75408bc291ba72be773772a4c2a065d9ae8"
 +dependencies = [
 + "proc-macro2",
 + "quote",
@@ -491,9 +491,9 @@ index 000000000..8d77f4824
 +
 +[[package]]
 +name = "syn"
-+version = "1.0.38"
++version = "1.0.44"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "e69abc24912995b3038597a7a593be5053eb0fb44f3cc5beec0deb421790c1f4"
++checksum = "e03e57e4fcbfe7749842d53e24ccb9aa12b7252dbe5e91d2acad31834c8b8fdd"
 +dependencies = [
 + "proc-macro2",
 + "quote",
@@ -529,9 +529,9 @@ index 000000000..8d77f4824
 +
 +[[package]]
 +name = "toml"
-+version = "0.5.6"
++version = "0.5.7"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a"
++checksum = "75cf45bb0bef80604d001caaec0d09da99611b3c0fd39d3080468875cdb65645"
 +dependencies = [
 + "serde",
 +]
diff --git a/pkgs/tools/package-management/cargo-update/default.nix b/pkgs/tools/package-management/cargo-update/default.nix
index 62f73565b94..425cef9353d 100644
--- a/pkgs/tools/package-management/cargo-update/default.nix
+++ b/pkgs/tools/package-management/cargo-update/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , rustPlatform
 , fetchFromGitHub
 , cmake
@@ -15,22 +15,22 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "cargo-update";
-  version = "4.1.1";
+  version = "4.1.2";
 
   src = fetchFromGitHub {
     owner = "nabijaczleweli";
     repo = pname;
     rev = "v${version}";
-    sha256 = "03yfn6jq33mykk2cicx54cpddilp62pb5ah75n96k1mwy7c46r6g";
+    sha256 = "0bpl4y5p0acn1clxgwn2sifx6ggpq9jqw5zrmva7asjf8p8dx3v5";
   };
 
-  cargoPatches = [ ./0001-Generate-lockfile-for-cargo-update-v4.1.1.patch ];
-  cargoSha256 = "1yaawp015gdnlfqkdmqsf95gszz0h5j1vpfjh763y7kk0bp7zswl";
+  cargoPatches = [ ./0001-Generate-lockfile-for-cargo-update-v4.1.2.patch ];
+  cargoSha256 = "1viqdl8zncxyyxsd8xhx1jxqh24g03nn6fyi0iwwba5vvmif1rak";
 
   nativeBuildInputs = [ cmake installShellFiles pkg-config ronn ];
 
   buildInputs = [ libgit2 libssh2 openssl zlib ]
-    ++ stdenv.lib.optionals stdenv.isDarwin [ curl Security ];
+    ++ lib.optionals stdenv.isDarwin [ curl Security ];
 
   postBuild = ''
     # Man pages contain non-ASCII, so explicitly set encoding to UTF-8.
@@ -43,10 +43,10 @@ rustPlatform.buildRustPackage rec {
     installManPage man/*.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A cargo subcommand for checking and applying updates to installed executables";
     homepage = "https://github.com/nabijaczleweli/cargo-update";
     license = licenses.mit;
-    maintainers = with maintainers; [ gerschtli filalex77 johntitor ];
+    maintainers = with maintainers; [ gerschtli Br1ght0ne johntitor ];
   };
 }
diff --git a/pkgs/tools/package-management/cde/default.nix b/pkgs/tools/package-management/cde/default.nix
index ec6ad6eb55a..f2c308de5a7 100644
--- a/pkgs/tools/package-management/cde/default.nix
+++ b/pkgs/tools/package-management/cde/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "cde";
   version = "0.1";
 
   src = fetchFromGitHub {
-    owner = "pgbovine";
-    repo = "CDE";
-    sha256 = "0raiz7pczkbnzxpg7g59v7gdp1ipkwgms2vh3431snw1va1gjzmk";
+    owner = "usnistgov";
+    repo = "corr-CDE";
     rev = "v${version}";
+    sha256 = "sha256-s375gtqBWx0GGXALXR+fN4bb3tmpvPNu/3bNz+75UWU=";
   };
 
   # The build is small, so there should be no problem
@@ -18,19 +18,22 @@ stdenv.mkDerivation rec {
   preferLocalBuild = true;
 
   patchBuild = ''
-    sed '/install/d' $src/Makefile > $src/Makefile
+    sed -i -e '/install/d' $src/Makefile
   '';
-  
+
+  preBuild = ''
+    patchShebangs .
+  '';
+
   installPhase = ''
-    mkdir -p $out/bin
-    cp cde $out/bin
-    cp cde-exec $out/bin
+    install -d $out/bin
+    install -t $out/bin cde cde-exec
   '';
 
-  meta = with stdenv.lib; {
-    homepage = "https://github.com/pgbovine/CDE";
+  meta = with lib; {
+    homepage = "https://pg.ucsd.edu/cde/manual/";
     description = "A packaging tool for building portable packages";
-    license = licenses.gpl3;
+    license = licenses.gpl3Plus;
     maintainers = [ maintainers.rlupton20 ];
     platforms = platforms.linux;
     # error: architecture aarch64 is not supported by strace
diff --git a/pkgs/tools/package-management/checkinstall/default.nix b/pkgs/tools/package-management/checkinstall/default.nix
index bd23da8efb5..704c3ad6409 100644
--- a/pkgs/tools/package-management/checkinstall/default.nix
+++ b/pkgs/tools/package-management/checkinstall/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, gettext}:
+{lib, stdenv, fetchurl, gettext}:
 
 assert stdenv.isLinux && stdenv ? glibc;
 
@@ -37,7 +37,7 @@ stdenv.mkDerivation {
     ./set-buildroot.patch
   ]
 
-  ++ stdenv.lib.optional (stdenv.hostPlatform.system == "x86_64-linux") 
+  ++ 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;
@@ -67,8 +67,11 @@ stdenv.mkDerivation {
   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;
+    maintainers = [ lib.maintainers.eelco ];
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl2;
+    knownVulnerabilities = [
+      "CVE-2020-25031"
+    ];
   };
 }
diff --git a/pkgs/tools/package-management/clib/default.nix b/pkgs/tools/package-management/clib/default.nix
index 31558912027..e79c376ab79 100644
--- a/pkgs/tools/package-management/clib/default.nix
+++ b/pkgs/tools/package-management/clib/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, curl  }:
+{ lib, stdenv, fetchFromGitHub, curl  }:
 
 stdenv.mkDerivation rec {
   version = "1.11.4";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ curl ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "C micro-package manager";
     homepage = "https://github.com/clibs/clib";
     license = licenses.mit;
diff --git a/pkgs/tools/package-management/conda/default.nix b/pkgs/tools/package-management/conda/default.nix
index 325a5c4fa5e..57b4d17fdfd 100644
--- a/pkgs/tools/package-management/conda/default.nix
+++ b/pkgs/tools/package-management/conda/default.nix
@@ -62,6 +62,8 @@ in
       export FONTCONFIG_FILE=/etc/fonts/fonts.conf
       export QTCOMPOSE=${xorg.libX11}/share/X11/locale
       export LIBARCHIVE=${libarchive.lib}/lib/libarchive.so
+      # Allows `conda activate` to work properly
+      source ${installationPath}/etc/profile.d/conda.sh
     '';
 
     meta = {
diff --git a/pkgs/tools/package-management/createrepo_c/default.nix b/pkgs/tools/package-management/createrepo_c/default.nix
index 15a64ffd25e..fc0628e0908 100644
--- a/pkgs/tools/package-management/createrepo_c/default.nix
+++ b/pkgs/tools/package-management/createrepo_c/default.nix
@@ -1,18 +1,22 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig, bzip2, expat, glib, curl, libxml2, python3, rpm, openssl, sqlite, file, xz, pcre, bash-completion }:
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, bzip2, expat, glib, curl, libxml2, python3, rpm
+, openssl, sqlite, file, xz, pcre, bash-completion, zstd, zchunk, libmodulemd
+}:
 
 stdenv.mkDerivation rec {
   pname = "createrepo_c";
-  version = "0.11.1";
+  version = "0.17.2";
 
   src = fetchFromGitHub {
     owner  = "rpm-software-management";
     repo   = "createrepo_c";
     rev    = version;
-    sha256 = "0cmysc7gdd2czagl4drfh9gin6aa2847vgi30a3p0cfqvczf9cm6";
+    sha256 = "sha256-rcrJjcWj+cTAE3k11Ynr7CQCOWD+rb60lcar0G2w06A=";
   };
 
   patches = [
+    # Use the output directory to install the bash completions.
     ./fix-bash-completion-path.patch
+    # Use the output directory to install the python modules.
     ./fix-python-install-path.patch
   ];
 
@@ -23,15 +27,15 @@ stdenv.mkDerivation rec {
       --replace "@PYTHON_INSTALL_DIR@" "$out/${python3.sitePackages}"
   '';
 
-  nativeBuildInputs = [ cmake pkgconfig ];
+  nativeBuildInputs = [ cmake pkg-config rpm ];
 
-  buildInputs = [ bzip2 expat glib curl libxml2 python3 rpm openssl sqlite file xz pcre bash-completion ];
+  buildInputs = [ bzip2 expat glib curl libxml2 python3 openssl sqlite file xz pcre bash-completion zstd zchunk libmodulemd ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "C implementation of createrepo";
-    homepage    = "http://rpm-software-management.github.io/createrepo_c/";
-    license     = licenses.gpl2;
-    platforms   = platforms.linux;
+    homepage    = "https://rpm-software-management.github.io/createrepo_c/";
+    license     = licenses.gpl2Plus;
+    platforms   = platforms.unix;
     maintainers = with maintainers; [ copumpkin ];
   };
 }
diff --git a/pkgs/tools/package-management/createrepo_c/fix-bash-completion-path.patch b/pkgs/tools/package-management/createrepo_c/fix-bash-completion-path.patch
index e184cc8facc..2539ec5d338 100644
--- a/pkgs/tools/package-management/createrepo_c/fix-bash-completion-path.patch
+++ b/pkgs/tools/package-management/createrepo_c/fix-bash-completion-path.patch
@@ -1,11 +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 "
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -117,7 +117,7 @@ OPTION(ENABLE_BASHCOMP "Install Bash autocompletions?" ON)
+ IF (ENABLE_BASHCOMP)
+     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/pkgs/tools/package-management/createrepo_c/fix-python-install-path.patch b/pkgs/tools/package-management/createrepo_c/fix-python-install-path.patch
index a247c6d9fe4..b8739622e3c 100644
--- a/pkgs/tools/package-management/createrepo_c/fix-python-install-path.patch
+++ b/pkgs/tools/package-management/createrepo_c/fix-python-install-path.patch
@@ -1,11 +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()
- 
+--- a/src/python/CMakeLists.txt
++++ b/src/python/CMakeLists.txt
+@@ -14,7 +14,7 @@ if (NOT SKBUILD)
+     FIND_PACKAGE(PythonLibs 3 REQUIRED)
+ endif (NOT SKBUILD)
+
 -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/pkgs/tools/package-management/disnix/DisnixWebService/default.nix b/pkgs/tools/package-management/disnix/DisnixWebService/default.nix
index 5ede7af10bf..8a4d5d44b8d 100644
--- a/pkgs/tools/package-management/disnix/DisnixWebService/default.nix
+++ b/pkgs/tools/package-management/disnix/DisnixWebService/default.nix
@@ -1,13 +1,13 @@
-{stdenv, fetchurl, apacheAnt, jdk, axis2, dbus_java }:
+{lib, stdenv, fetchurl, apacheAnt, jdk, axis2, dbus_java }:
 
 stdenv.mkDerivation {
-  name = "DisnixWebService-0.9";
+  name = "DisnixWebService-0.10.1";
   src = fetchurl {
-    url = "https://github.com/svanderburg/DisnixWebService/releases/download/DisnixWebService-0.9/DisnixWebService-0.9.tar.gz";
-    sha256 = "1z7w44bf023c0aqchjfi4mla3qbhsh87mdzx7pqn0sy74cjfgqvl";
+    url = "https://github.com/svanderburg/DisnixWebService/releases/download/DisnixWebService-0.10.1/DisnixWebService-0.10.1.tar.gz";
+    sha256 = "02jxbgn9a0c9cr6knzp78bp9wiywzczy89wav7yxhg79vff8a1gr";
   };
   buildInputs = [ apacheAnt jdk ];
-  PREFIX = ''''${env.out}'';
+  PREFIX = "\${env.out}";
   AXIS2_LIB = "${axis2}/lib";
   AXIS2_WEBAPP = "${axis2}/webapps/axis2";
   DBUS_JAVA_LIB = "${dbus_java}/share/java";
@@ -18,11 +18,11 @@ stdenv.mkDerivation {
   '';
   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;
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.sander ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/package-management/disnix/default.nix b/pkgs/tools/package-management/disnix/default.nix
index cc6072eb6dc..c7b3b72e2ea 100644
--- a/pkgs/tools/package-management/disnix/default.nix
+++ b/pkgs/tools/package-management/disnix/default.nix
@@ -1,24 +1,20 @@
-{ stdenv, fetchurl, pkgconfig, glib, libxml2, libxslt, getopt, nixUnstable, dysnomia, libintl, libiconv }:
+{ lib, stdenv, fetchurl, pkg-config, glib, libxml2, libxslt, getopt, gettext, dysnomia, libintl, libiconv }:
 
 stdenv.mkDerivation {
-  name = "disnix-0.9.1";
+  name = "disnix-0.10.1";
 
   src = fetchurl {
-    url = "https://github.com/svanderburg/disnix/releases/download/disnix-0.9.1/disnix-0.9.1.tar.gz";
-    sha256 = "0bidln5xw3raqkvdks9aipis8aaza8asgyapmilnxkkrxgmw7rdf";
+    url = "https://github.com/svanderburg/disnix/releases/download/disnix-0.10.1/disnix-0.10.1.tar.gz";
+    sha256 = "13rjw1va7l8w7ir73xqxq4zb3ig2iwhiwxhp5dbfv0z3gnqizghq";
   };
 
-  configureFlags = [
-    " --with-dbus-sys=${placeholder "out"}/share/dbus-1/system.d"
-  ];
-
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ glib libxml2 libxslt getopt nixUnstable libintl libiconv dysnomia ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib libxml2 libxslt getopt 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;
+    license = lib.licenses.lgpl21Plus;
+    maintainers = with lib.maintainers; [ sander tomberek ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/package-management/disnix/disnixos/default.nix b/pkgs/tools/package-management/disnix/disnixos/default.nix
index 709c5454e10..f9a8221e5f0 100644
--- a/pkgs/tools/package-management/disnix/disnixos/default.nix
+++ b/pkgs/tools/package-management/disnix/disnixos/default.nix
@@ -1,20 +1,20 @@
-{ stdenv, fetchurl, dysnomia, disnix, socat, pkgconfig, getopt }:
+{ lib, stdenv, fetchurl, dysnomia, disnix, socat, pkg-config, getopt }:
 
 stdenv.mkDerivation {
-  name = "disnixos-0.8";
-  
+  name = "disnixos-0.9.1";
+
   src = fetchurl {
-    url = "https://github.com/svanderburg/disnixos/releases/download/disnixos-0.8/disnixos-0.8.tar.gz";
-    sha256 = "186blirfx89i8hdp4a0djy4q9qr9wcl0ilwr66hlil0wxqj1sr91";
+    url = "https://github.com/svanderburg/disnixos/releases/download/disnixos-0.9.1/disnixos-0.9.1.tar.gz";
+    sha256 = "1n2psq1b8bg340i2i0yf5xy2rf78fwqd3wj342wcmq09cv2v8d1b";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   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;
+    license = lib.licenses.lgpl21Plus;
+    maintainers = [ lib.maintainers.sander ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/package-management/disnix/dydisnix/default.nix b/pkgs/tools/package-management/disnix/dydisnix/default.nix
new file mode 100644
index 00000000000..924ed825281
--- /dev/null
+++ b/pkgs/tools/package-management/disnix/dydisnix/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, pkg-config, glib
+, libxml2, libxslt, getopt, libiconv, gettext, nix, disnix
+}:
+
+stdenv.mkDerivation rec {
+  version = "unstable-2020-11-02";
+  name = "dydisnix-${version}";
+
+  src = fetchFromGitHub {
+    owner = "svanderburg";
+    repo = "dydisnix";
+    rev = "12ca1516bc1e5d161ac68f5d8252a0a2f353c8cf";
+    sha256 = "00f341274hwwil8mlgcgq331vfca9sscvpdbgkxsjvbhcqd8qa52";
+  };
+
+  nativeBuildInputs = [ pkg-config autoconf automake libtool ];
+  buildInputs = [ glib libxml2 libxslt getopt nix disnix libiconv gettext ];
+
+  preConfigure = ''
+    ./bootstrap
+  '';
+
+  meta = {
+    description = "A toolset enabling self-adaptive redeployment on top of Disnix";
+    longDescription = ''
+      Dynamic Disnix is a (very experimental!) prototype extension framework for Disnix supporting dynamic (re)deployment of service-oriented systems.
+    '';
+    license = lib.licenses.lgpl21Plus;
+    maintainers = [ lib.maintainers.tomberek ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/pkgs/tools/package-management/disnix/dysnomia/default.nix b/pkgs/tools/package-management/disnix/dysnomia/default.nix
index 2485becc9e5..d75683a8744 100644
--- a/pkgs/tools/package-management/disnix/dysnomia/default.nix
+++ b/pkgs/tools/package-management/disnix/dysnomia/default.nix
@@ -1,5 +1,11 @@
-{ stdenv, fetchurl
-, ejabberd ? null, mysql ? null, postgresql ? null, subversion ? null, mongodb ? null, mongodb-tools ? null, influxdb ? null
+{ lib, stdenv, fetchurl, netcat
+
+# Optional packages
+, systemd ? null, ejabberd ? null, mysql ? null, postgresql ? null, subversion ? null
+, mongodb ? null, mongodb-tools ? null, influxdb ? null, supervisor ? null, docker ? null
+, nginx ? null, s6-rc ? null, xinetd ? null
+
+# Configuration flags
 , enableApacheWebApplication ? false
 , enableAxis2WebService ? false
 , enableEjabberdDump ? false
@@ -9,6 +15,12 @@
 , enableTomcatWebApplication ? false
 , enableMongoDatabase ? false
 , enableInfluxDatabase ? false
+, enableSupervisordProgram ? false
+, enableDockerContainer ? false
+, enableNginxWebApplication ? false
+, enableXinetdService ? false
+, enableS6RCService ? false
+, enableLegacy ? false
 , catalinaBaseDir ? "/var/tomcat"
 , jobTemplate ? "systemd"
 , getopt
@@ -20,16 +32,19 @@ assert enableSubversionRepository -> subversion != null;
 assert enableEjabberdDump -> ejabberd != null;
 assert enableMongoDatabase -> (mongodb != null && mongodb-tools != null);
 assert enableInfluxDatabase -> influxdb != null;
+assert enableSupervisordProgram -> supervisor != null;
+assert enableDockerContainer -> docker != null;
+assert enableNginxWebApplication -> nginx != null;
+assert enableS6RCService -> s6-rc != null;
+assert enableXinetdService -> xinetd != null;
 
 stdenv.mkDerivation {
-  name = "dysnomia-0.9.1";
+  name = "dysnomia-0.10.1";
   src = fetchurl {
-    url = "https://github.com/svanderburg/dysnomia/releases/download/dysnomia-0.9.1/dysnomia-0.9.1.tar.gz";
-    sha256 = "1rrq9jnmpsjg1rrjbnq7znm4gma2ga5j4nlykvxwkylp72dq12ks";
+    url = "https://github.com/svanderburg/dysnomia/releases/download/dysnomia-0.10.1/dysnomia-0.10.1.tar.gz";
+    sha256 = "0w9601g8zpaxrmynx6mh8zz85ldpb8psp7cc6ls8v3srjpj1l5n3";
   };
 
-  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")
@@ -40,22 +55,33 @@ stdenv.mkDerivation {
      (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")
+     (if enableSupervisordProgram then "--with-supervisord" else "--without-supervisord")
+     (if enableDockerContainer then "--with-docker" else "--without-docker")
+     (if enableNginxWebApplication then "--with-nginx" else "--without-nginx")
+     (if enableXinetdService then "--with-xinetd" else "--without-xinetd")
+     (if enableS6RCService then "--with-s6-rc" else "--without-s6-rc")
+     (if stdenv.isDarwin then "--with-launchd" else "--without-launchd")
      "--with-job-template=${jobTemplate}"
-   ];
+   ] ++ lib.optional enableLegacy "--enable-legacy";
 
-  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;
+  buildInputs = [ getopt netcat ]
+    ++ lib.optional stdenv.isLinux systemd
+    ++ lib.optional enableEjabberdDump ejabberd
+    ++ lib.optional enableMySQLDatabase mysql.out
+    ++ lib.optional enablePostgreSQLDatabase postgresql
+    ++ lib.optional enableSubversionRepository subversion
+    ++ lib.optionals enableMongoDatabase [ mongodb mongodb-tools ]
+    ++ lib.optional enableInfluxDatabase influxdb
+    ++ lib.optional enableSupervisordProgram supervisor
+    ++ lib.optional enableDockerContainer docker
+    ++ lib.optional enableNginxWebApplication nginx
+    ++ lib.optional enableS6RCService s6-rc
+    ++ lib.optional enableXinetdService xinetd;
 
   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;
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.sander ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/package-management/dpkg/default.nix b/pkgs/tools/package-management/dpkg/default.nix
index 8b9d812ee36..a4e9ef41fc9 100644
--- a/pkgs/tools/package-management/dpkg/default.nix
+++ b/pkgs/tools/package-management/dpkg/default.nix
@@ -1,20 +1,20 @@
-{ stdenv, fetchurl, perl, zlib, bzip2, xz, makeWrapper, coreutils }:
+{ lib, stdenv, fetchurl, perl, zlib, bzip2, xz, makeWrapper, coreutils }:
 
 stdenv.mkDerivation rec {
   pname = "dpkg";
-  version = "1.20.5";
+  version = "1.20.9";
 
   src = fetchurl {
     url = "mirror://debian/pool/main/d/dpkg/dpkg_${version}.tar.xz";
-    sha256 = "1pg0yd1q9l5cx7pr0853yds1n3mh5b28zkw79gjqjzcmjwqkzwpj";
+    sha256 = "sha256-XOJCgw8hO1Yg8I5sQYOtse9Nydoo0xmIonyHxx/lNM4=";
   };
 
   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")
+    (lib.optionalString stdenv.isDarwin "--disable-linker-optimisations")
+    (lib.optionalString stdenv.isDarwin "--disable-start-stop-daemon")
   ];
 
   preConfigure = ''
@@ -56,7 +56,8 @@ stdenv.mkDerivation rec {
     ''
       for i in $out/bin/*; do
         if head -n 1 $i | grep -q perl; then
-          wrapProgram $i --prefix PERL5LIB : $out/${perl.libPrefix}
+          substituteInPlace $i --replace \
+            "${perl}/bin/perl" "${perl}/bin/perl -I $out/${perl.libPrefix}"
         fi
       done
 
@@ -64,7 +65,7 @@ stdenv.mkDerivation rec {
       cp -r scripts/t/origins $out/etc/dpkg
     '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "The Debian package manager";
     homepage = "https://wiki.debian.org/Teams/Dpkg";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/package-management/elm-github-install/default.nix b/pkgs/tools/package-management/elm-github-install/default.nix
index 8da05981daf..f86cdc55ecc 100644
--- a/pkgs/tools/package-management/elm-github-install/default.nix
+++ b/pkgs/tools/package-management/elm-github-install/default.nix
@@ -12,7 +12,7 @@ bundlerEnv rec {
   passthru.updateScript = bundlerUpdateScript "elm-github-install";
 
   meta = with lib; {
-    description = "Install Elm packages from git repositories.";
+    description = "Install Elm packages from git repositories";
     homepage    = "https://github.com/gdotdesign/elm-github-install";
     license     = licenses.unfree;
     maintainers = with maintainers; [ roberth nicknovitski ];
diff --git a/pkgs/tools/package-management/elm-github-install/gemset.nix b/pkgs/tools/package-management/elm-github-install/gemset.nix
index d310b41d7aa..de7f8e20b64 100644
--- a/pkgs/tools/package-management/elm-github-install/gemset.nix
+++ b/pkgs/tools/package-management/elm-github-install/gemset.nix
@@ -111,4 +111,4 @@
     };
     version = "2.0.0";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/package-management/emplace/default.nix b/pkgs/tools/package-management/emplace/default.nix
index 5d3d8e15e3e..6b7f51d3ab6 100644
--- a/pkgs/tools/package-management/emplace/default.nix
+++ b/pkgs/tools/package-management/emplace/default.nix
@@ -2,21 +2,21 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "emplace";
-  version = "0.3.6";
+  version = "1.4.1";
 
   src = fetchFromGitHub {
     owner = "tversteeg";
     repo = pname;
     rev = "v${version}";
-    sha256 = "15d21qv8cbzwpz2gsq1cgvxdbqm45zq2wfphhjqq77z1kay43m3f";
+    sha256 = "sha256-lBCGSeEVxlXrn1RHqMEYSXLOehJw/DiL+33nx4+rV2Y=";
   };
 
-  cargoSha256 = "0xd1b0rfrf3a6j0xkyfqz2pd0lkb6dpqyyghli9a8kh0kdfxvndj";
+  cargoSha256 = "sha256-7LpUaOeBTIpi6A3cTRQAc1QostRgJp6bOf+AXy3mjyE=";
 
   meta = with lib; {
     description = "Mirror installed software on multiple machines";
     homepage = "https://github.com/tversteeg/emplace";
-    license = licenses.agpl3;
-    maintainers = with maintainers; [ filalex77 ];
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/package-management/fpm/Gemfile.lock b/pkgs/tools/package-management/fpm/Gemfile.lock
index c8bb7d36413..b3e8b9d221a 100644
--- a/pkgs/tools/package-management/fpm/Gemfile.lock
+++ b/pkgs/tools/package-management/fpm/Gemfile.lock
@@ -1,40 +1,36 @@
 GEM
   remote: https://rubygems.org/
   specs:
-    arr-pm (0.0.10)
+    arr-pm (0.0.11)
       cabin (> 0)
-    backports (3.14.0)
+    backports (3.21.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)
+    dotenv (2.7.6)
+    fpm (1.13.0)
+      arr-pm (~> 0.0.11)
       backports (>= 2.6.2)
       cabin (>= 0.6.0)
-      childprocess (= 0.9.0)
       clamp (~> 1.0.0)
-      ffi
-      json (>= 1.7.7, < 2.0)
+      git (>= 1.3.0, < 2.0)
+      json (>= 1.7.7, < 3.0)
       pleaserun (~> 0.0.29)
-      ruby-xz (~> 0.2.3)
+      rexml
       stud
+    git (1.8.1)
+      rchardet (~> 1.8)
     insist (1.0.0)
-    io-like (0.3.0)
-    json (1.8.6)
+    json (2.5.1)
     mustache (0.99.8)
-    pleaserun (0.0.30)
+    pleaserun (0.0.32)
       cabin (> 0)
       clamp
       dotenv
       insist
       mustache (= 0.99.8)
       stud
-    ruby-xz (0.2.3)
-      ffi (~> 1.9)
-      io-like (~> 0.3)
+    rchardet (1.8.0)
+    rexml (3.2.5)
     stud (0.0.23)
 
 PLATFORMS
diff --git a/pkgs/tools/package-management/fpm/gemset.nix b/pkgs/tools/package-management/fpm/gemset.nix
index 13d1669e540..dca13598e8c 100644
--- a/pkgs/tools/package-management/fpm/gemset.nix
+++ b/pkgs/tools/package-management/fpm/gemset.nix
@@ -5,20 +5,20 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "07yx1g1nh4zdy38i2id1xyp42fvj4vl6i196jn7szvjfm0jx98hg";
+      sha256 = "17qssricshzs2ml1jvn4bs2h85gxvrqm074pl5nl8vr74620iazi";
       type = "gem";
     };
-    version = "0.0.10";
+    version = "0.0.11";
   };
   backports = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "17j5pf0b69bkn043wi4xd530ky53jbbnljr4bsjzlm4k8bzlknfn";
+      sha256 = "0xqvwj3mm28g1z4npya51zjcvxaniyyzn3fwgcdwmm8xrdbl8fgr";
       type = "gem";
     };
-    version = "3.14.0";
+    version = "3.21.0";
   };
   cabin = {
     groups = ["default"];
@@ -30,17 +30,6 @@
     };
     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 = [];
@@ -56,31 +45,32 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "13cis6bf06hmz744xrsl163p6gb78xcm8g8q4pcabsy5ywyv6kag";
+      sha256 = "0iym172c5337sm1x2ykc2i3f961vj3wdclbyg1x6sxs3irgfsl94";
       type = "gem";
     };
-    version = "2.7.2";
+    version = "2.7.6";
   };
-  ffi = {
+  fpm = {
+    dependencies = ["arr-pm" "backports" "cabin" "clamp" "git" "json" "pleaserun" "rexml" "stud"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0j8pzj8raxbir5w5k6s7a042sb5k02pg0f8s4na1r5lan901j00p";
+      sha256 = "03ss7yh628f0m6by23q3sniq660gm07mkz6wqjpvr118gc0h53sa";
       type = "gem";
     };
-    version = "1.10.0";
+    version = "1.13.0";
   };
-  fpm = {
-    dependencies = ["arr-pm" "backports" "cabin" "childprocess" "clamp" "ffi" "json" "pleaserun" "ruby-xz" "stud"];
+  git = {
+    dependencies = ["rchardet"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0khzsiqzswxpql6w2ws9dawb27zgv4nmgrjszydmm0xpv6h21jrm";
+      sha256 = "0vdcv93s33d9914a9nxrn2y2qv15xk7jx94007cmalp159l08cnl";
       type = "gem";
     };
-    version = "1.11.0";
+    version = "1.8.1";
   };
   insist = {
     groups = ["default"];
@@ -92,57 +82,56 @@
     };
     version = "1.0.0";
   };
-  io-like = {
+  json = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "04nn0s2wmgxij3k760h3r8m1dgih5dmd9h4v1nn085yi824i5z6k";
+      sha256 = "0lrirj0gw420kw71bjjlqkqhqbrplla61gbv1jzgsz6bv90qr3ci";
       type = "gem";
     };
-    version = "0.3.0";
+    version = "2.5.1";
   };
-  json = {
+  mustache = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0qmj7fypgb9vag723w1a49qihxrcf5shzars106ynw2zk352gbv5";
+      sha256 = "1g5hplm0k06vwxwqzwn1mq5bd02yp0h3rym4zwzw26aqi7drcsl2";
       type = "gem";
     };
-    version = "1.8.6";
+    version = "0.99.8";
   };
-  mustache = {
+  pleaserun = {
+    dependencies = ["cabin" "clamp" "dotenv" "insist" "mustache" "stud"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1g5hplm0k06vwxwqzwn1mq5bd02yp0h3rym4zwzw26aqi7drcsl2";
+      sha256 = "1aykf0l8327bqkkf5xd9jcglsib973zpy37cfnlf4j0vp0cdpn2d";
       type = "gem";
     };
-    version = "0.99.8";
+    version = "0.0.32";
   };
-  pleaserun = {
-    dependencies = ["cabin" "clamp" "dotenv" "insist" "mustache" "stud"];
+  rchardet = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0hgnrl67zkqaxmfkwbyscawj4wqjm7h8khpbj58s6iw54wp3408p";
+      sha256 = "1isj1b3ywgg2m1vdlnr41lpvpm3dbyarf1lla4dfibfmad9csfk9";
       type = "gem";
     };
-    version = "0.0.30";
+    version = "1.8.0";
   };
-  ruby-xz = {
-    dependencies = ["ffi" "io-like"];
+  rexml = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "11bgpvvk0098ghvlxr4i713jmi2izychalgikwvdwmpb452r3ndw";
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
       type = "gem";
     };
-    version = "0.2.3";
+    version = "3.2.5";
   };
   stud = {
     groups = ["default"];
@@ -154,4 +143,4 @@
     };
     version = "0.0.23";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/package-management/gx/default.nix b/pkgs/tools/package-management/gx/default.nix
index 791dfe755ee..60fbdd4941f 100644
--- a/pkgs/tools/package-management/gx/default.nix
+++ b/pkgs/tools/package-management/gx/default.nix
@@ -1,22 +1,22 @@
 # This file was generated by go2nix.
-{ stdenv, buildGoPackage, fetchgit }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 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";
+  src = fetchFromGitHub {
+    owner = "whyrusleeping";
+    repo = pname;
+    rev = "refs/tags/v${version}";
     sha256 = "0pfx2p59xdbmqzfbgaf8xvlnzh8m05hkg596glq5kvl8ib65i4ha";
   };
 
   goDeps = ./deps.nix;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A packaging tool built around IPFS";
     homepage = "https://github.com/whyrusleeping/gx";
     license = licenses.mit;
diff --git a/pkgs/tools/package-management/gx/go/default.nix b/pkgs/tools/package-management/gx/go/default.nix
index 652edf95e55..ad4435c9e2d 100644
--- a/pkgs/tools/package-management/gx/go/default.nix
+++ b/pkgs/tools/package-management/gx/go/default.nix
@@ -1,18 +1,18 @@
 # This file was generated by go2nix.
-{ stdenv, buildGoPackage, fetchgit
+{ lib, buildGoPackage, fetchFromGitHub
 , 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";
+  src = fetchFromGitHub {
+    owner = "whyrusleeping";
+    repo = pname;
+    rev = "refs/tags/v${version}";
     sha256 = "0fdy4b3ymqw6hzvvjwq37mfrdmizc8lxm53axw93n3x6118na9jc";
   };
 
@@ -25,7 +25,7 @@ buildGoPackage rec {
     }
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tool for importing go packages into gx";
     homepage = "https://github.com/whyrusleeping/gx-go";
     license = licenses.mit;
diff --git a/pkgs/tools/package-management/holo-build/default.nix b/pkgs/tools/package-management/holo-build/default.nix
new file mode 100644
index 00000000000..8f88ae08762
--- /dev/null
+++ b/pkgs/tools/package-management/holo-build/default.nix
@@ -0,0 +1,59 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, perl, file }:
+
+buildGoModule rec {
+  pname = "holo-build";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "holocm";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0lypbgf96bcc4m3968xa4il1zwprsdyc0pw6pl9mqq7djxabikd0";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace 'VERSION :=' 'VERSION ?='
+    substituteInPlace src/holo-build.sh \
+      --replace '/usr/lib/holo/holo-build' '${placeholder "out"}/lib/holo/holo-build'
+  '';
+
+  vendorSha256 = null;
+
+  nativeBuildInputs = [ installShellFiles perl ];
+
+  subPackages = [ "src/holo-build" ];
+
+  buildFlagsArray = [ "-ldflags=-s -w -X github.com/holocm/holo-build/src/holo-build/common.version=${version}" ];
+
+  postBuild = ''
+    make build/man/holo-build.8 VERSION=${version}
+  '';
+
+  checkInputs = [ file ];
+
+  checkPhase = ''
+    ln -s ../../go/bin/holo-build build/holo-build
+    go build -ldflags "-s -w -X github.com/holocm/holo-build/src/holo-build/common.version=${version}" -o build/dump-package ./src/dump-package
+    bash test/compiler/run_tests.sh
+    bash test/interface/run_tests.sh
+  '';
+
+  postInstall = ''
+    installManPage build/man/*
+    installShellCompletion --bash --name holo-build util/autocomplete.bash
+    installShellCompletion --zsh --name _holo-build util/autocomplete.zsh
+
+    # install wrapper script
+    mkdir -p $out/lib/holo
+    mv $out/bin/holo-build $out/lib/holo/holo-build
+    cp src/holo-build.sh $out/bin/holo-build
+  '';
+
+  meta = with lib; {
+    description = "Cross-distribution system package compiler";
+    homepage = "http://holocm.org/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/pkgs/tools/package-management/home-manager/default.nix b/pkgs/tools/package-management/home-manager/default.nix
index e569d5a3de9..db60d5e8429 100644
--- a/pkgs/tools/package-management/home-manager/default.nix
+++ b/pkgs/tools/package-management/home-manager/default.nix
@@ -1,18 +1,18 @@
 #Adapted from
 #https://github.com/rycee/home-manager/blob/2c07829be2bcae55e04997b19719ff902a44016d/home-manager/default.nix
 
-{ bash, coreutils, findutils, gnused, less, stdenv, makeWrapper, fetchFromGitHub }:
+{ bash, coreutils, findutils, gnused, less, lib, stdenv, makeWrapper, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
 
   pname = "home-manager";
-  version = "2020-03-17";
+  version = "2021-03-21";
 
   src = fetchFromGitHub {
-    owner = "rycee";
+    owner = "nix-community";
     repo = "home-manager";
-    rev = "5969551a5cc52f9470b5ff5ca01327bf4bda82c1";
-    sha256 = "0f4kz83a1kp3ci8zi5hvp8fp34wi73arpykl4d9vlywdk6w36bnd";
+    rev = "ddcd476603dfd3388b1dc8234fa9d550156a51f5";
+    sha256 = "sha256-E6ABXtzw6bHmrIirB1sJL6S2MEa3sfcvRLzRa92frCo=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
@@ -33,7 +33,7 @@ stdenv.mkDerivation rec {
       "$out/share/bash-completion/completions/home-manager"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A user environment configurator";
     homepage = "https://rycee.gitlab.io/home-manager/";
     platforms = platforms.unix;
diff --git a/pkgs/tools/package-management/libdnf/default.nix b/pkgs/tools/package-management/libdnf/default.nix
new file mode 100644
index 00000000000..7a421aaeebf
--- /dev/null
+++ b/pkgs/tools/package-management/libdnf/default.nix
@@ -0,0 +1,64 @@
+{ gcc9Stdenv, lib, stdenv, fetchFromGitHub, cmake, gettext, pkg-config, gpgme, libsolv, openssl, check
+, json_c, libmodulemd, libsmartcols, sqlite, librepo, libyaml, rpm }:
+
+gcc9Stdenv.mkDerivation rec {
+  pname = "libdnf";
+  version = "0.63.1";
+
+  src = fetchFromGitHub {
+    owner = "rpm-software-management";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-SwkqFSAl99fQoXT96BPRqKFqJg3HEziiT+jXcugPyxM=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    gettext
+    pkg-config
+  ];
+
+  buildInputs = [
+    check
+    gpgme
+    openssl
+    json_c
+    libsmartcols
+    libyaml
+    libmodulemd
+  ];
+
+  propagatedBuildInputs = [
+    sqlite
+    libsolv
+    librepo
+    rpm
+  ];
+
+  # See https://github.com/NixOS/nixpkgs/issues/107430
+  prePatch = ''
+    cp ${libsolv}/share/cmake/Modules/FindLibSolv.cmake cmake/modules/
+  '';
+
+  # See https://github.com/NixOS/nixpkgs/issues/107428
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+      --replace "enable_testing()" "" \
+      --replace "add_subdirectory(tests)" ""
+  '';
+
+  cmakeFlags = [
+    "-DWITH_GTKDOC=OFF"
+    "-DWITH_HTML=OFF"
+    "-DWITH_BINDINGS=OFF"
+    "-DWITH_ZCHUNK=OFF"
+  ];
+
+  meta = with lib; {
+    description = "Package management library.";
+    homepage = "https://github.com/rpm-software-management/libdnf";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ rb2k ];
+  };
+}
diff --git a/pkgs/tools/package-management/librepo/default.nix b/pkgs/tools/package-management/librepo/default.nix
index 39b34bf153d..4009d111307 100644
--- a/pkgs/tools/package-management/librepo/default.nix
+++ b/pkgs/tools/package-management/librepo/default.nix
@@ -1,8 +1,8 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , cmake
 , python
-, pkgconfig
+, pkg-config
 , libxml2
 , glib
 , openssl
@@ -13,7 +13,7 @@
 }:
 
 stdenv.mkDerivation rec {
-  version = "1.12.0";
+  version = "1.13.0";
   pname = "librepo";
 
   outputs = [ "out" "dev" "py" ];
@@ -22,12 +22,12 @@ stdenv.mkDerivation rec {
     owner = "rpm-software-management";
     repo = "librepo";
     rev = version;
-    sha256 = "070zgay0cbw6jrkcfp4qql9f9ydd41ilwk39xdrp939b23gp112d";
+    sha256 = "sha256-gK1pkcZAJVXx0cYGs8PA4iPSMOwgJZI9Hqrrs1ZITDo=";
   };
 
   nativeBuildInputs = [
     cmake
-    pkgconfig
+    pkg-config
   ];
 
   buildInputs = [
@@ -35,10 +35,10 @@ stdenv.mkDerivation rec {
     libxml2
     glib
     openssl
-    zchunk
     curl
     check
     gpgme
+    zchunk
   ];
 
   # librepo/fastestmirror.h includes curl/curl.h, and pkg-config specfile refers to others in here
@@ -48,19 +48,17 @@ stdenv.mkDerivation rec {
     libxml2
   ];
 
-  cmakeFlags = [
-    "-DPYTHON_DESIRED=${stdenv.lib.substring 0 1 python.pythonVersion}"
-  ];
+  cmakeFlags = [ "-DPYTHON_DESIRED=${lib.substring 0 1 python.pythonVersion}" ];
 
   postFixup = ''
     moveToOutput "lib/${python.libPrefix}" "$py"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms = platforms.linux ++ platforms.darwin;
     maintainers = with maintainers; [ copumpkin ];
   };
 }
diff --git a/pkgs/tools/package-management/licensee/Gemfile.lock b/pkgs/tools/package-management/licensee/Gemfile.lock
index 00d62361e69..e631b63963c 100644
--- a/pkgs/tools/package-management/licensee/Gemfile.lock
+++ b/pkgs/tools/package-management/licensee/Gemfile.lock
@@ -4,29 +4,35 @@ GEM
     addressable (2.7.0)
       public_suffix (>= 2.0.2, < 5.0)
     dotenv (2.7.6)
-    faraday (1.0.1)
+    faraday (1.3.0)
+      faraday-net_http (~> 1.0)
       multipart-post (>= 1.2, < 3)
-    licensee (9.14.0)
+      ruby2_keywords
+    faraday-net_http (1.0.1)
+    licensee (9.15.1)
       dotenv (~> 2.0)
-      octokit (~> 4.17)
+      octokit (~> 4.20)
       reverse_markdown (~> 1.0)
-      rugged (~> 0.24)
+      rugged (>= 0.24, < 2.0)
       thor (>= 0.19, < 2.0)
-    mini_portile2 (2.4.0)
+    mini_portile2 (2.5.0)
     multipart-post (2.1.1)
-    nokogiri (1.10.10)
-      mini_portile2 (~> 2.4.0)
-    octokit (4.18.0)
+    nokogiri (1.11.1)
+      mini_portile2 (~> 2.5.0)
+      racc (~> 1.4)
+    octokit (4.20.0)
       faraday (>= 0.9)
       sawyer (~> 0.8.0, >= 0.5.3)
-    public_suffix (4.0.5)
+    public_suffix (4.0.6)
+    racc (1.5.2)
     reverse_markdown (1.4.0)
       nokogiri
-    rugged (0.99.0)
+    ruby2_keywords (0.0.4)
+    rugged (1.1.0)
     sawyer (0.8.2)
       addressable (>= 2.3.5)
       faraday (> 0.8, < 2.0)
-    thor (1.0.1)
+    thor (1.1.0)
 
 PLATFORMS
   ruby
diff --git a/pkgs/tools/package-management/licensee/gemset.nix b/pkgs/tools/package-management/licensee/gemset.nix
index b3b326f6b31..b9b11b465f6 100644
--- a/pkgs/tools/package-management/licensee/gemset.nix
+++ b/pkgs/tools/package-management/licensee/gemset.nix
@@ -21,12 +21,22 @@
     version = "2.7.6";
   };
   faraday = {
-    dependencies = ["multipart-post"];
+    dependencies = ["faraday-net_http" "multipart-post" "ruby2_keywords"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0wwks9652xwgjm7yszcq5xr960pjypc07ivwzbjzpvy9zh2fw6iq";
+      sha256 = "1hmssd8pj4n7yq4kz834ylkla8ryyvhaap6q9nzymp93m1xq21kz";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fi8sda5hc54v1w3mqfl5yz09nhx35kglyx72w7b8xxvdr0cwi9j";
       type = "gem";
     };
     version = "1.0.1";
@@ -37,20 +47,20 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1mv7khv080p81x6indb5akr2a1x84l2xy96a6bziw207291lxx7p";
+      sha256 = "1pvrz9fjvxzk3aq85zgh8dkw98kz54jmwi10k3shc8dqbrlvragy";
       type = "gem";
     };
-    version = "9.14.0";
+    version = "9.15.1";
   };
   mini_portile2 = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
+      sha256 = "1hdbpmamx8js53yk3h8cqy12kgv6ca06k0c9n3pxh6b6cjfs19x7";
       type = "gem";
     };
-    version = "2.4.0";
+    version = "2.5.0";
   };
   multipart-post = {
     groups = ["default"];
@@ -63,15 +73,15 @@
     version = "2.1.1";
   };
   nokogiri = {
-    dependencies = ["mini_portile2"];
+    dependencies = ["mini_portile2" "racc"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0xmf60nj5kg9vaj5bysy308687sgmkasgx06vbbnf94p52ih7si2";
+      sha256 = "1ajwkqr28hwqbyl1l3czx4a34c88acxywyqp8cjyy0zgsd6sbhj2";
       type = "gem";
     };
-    version = "1.10.10";
+    version = "1.11.1";
   };
   octokit = {
     dependencies = ["faraday" "sawyer"];
@@ -79,20 +89,30 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0zvfr9njmj5svi39fcsi2b0g7pcxb0vamw9dlyas8bg814jlzhi6";
+      sha256 = "1fl517ld5vj0llyshp3f9kb7xyl9iqy28cbz3k999fkbwcxzhlyq";
       type = "gem";
     };
-    version = "4.18.0";
+    version = "4.20.0";
   };
   public_suffix = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0vywld400fzi17cszwrchrzcqys4qm6sshbv73wy5mwcixmrgg7g";
+      sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
+      type = "gem";
+    };
+    version = "4.0.6";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g";
       type = "gem";
     };
-    version = "4.0.5";
+    version = "1.5.2";
   };
   reverse_markdown = {
     dependencies = ["nokogiri"];
@@ -105,15 +125,25 @@
     };
     version = "1.4.0";
   };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15wfcqxyfgka05v2a7kpg64x57gl1y4xzvnc9lh60bqx5sf1iqrs";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
   rugged = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "04rkxwzaa6897da3mnm70g720gpxwyh71krfn6ag1dkk80x8a8yz";
+      sha256 = "04aq913plcxjw71l5r62qgz3bx3466p0wvgyfqahg5n3nybmcwqy";
       type = "gem";
     };
-    version = "0.99.0";
+    version = "1.1.0";
   };
   sawyer = {
     dependencies = ["addressable" "faraday"];
@@ -131,9 +161,9 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1xbhkmyhlxwzshaqa7swy2bx6vd64mm0wrr8g3jywvxy7hg0cwkm";
+      sha256 = "18yhlvmfya23cs3pvhr1qy38y41b6mhr5q9vwv5lrgk16wmf3jna";
       type = "gem";
     };
-    version = "1.0.1";
+    version = "1.1.0";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/package-management/microdnf/default.nix b/pkgs/tools/package-management/microdnf/default.nix
new file mode 100644
index 00000000000..498d6d21f39
--- /dev/null
+++ b/pkgs/tools/package-management/microdnf/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, cmake, gettext, libdnf, pkg-config, glib, libpeas, libsmartcols, help2man }:
+
+stdenv.mkDerivation rec {
+  pname = "microdnf";
+  version = "3.7.1";
+
+  src = fetchFromGitHub {
+    owner = "rpm-software-management";
+    repo = pname;
+    rev = version;
+    sha256 = "1is8hqckjdz1h9w44iq1ljyfs5b0qd2cyivl30ny4dv8m8zba4zv";
+  };
+
+  nativeBuildInputs = [ pkg-config cmake gettext help2man ];
+  buildInputs = [ libdnf glib libpeas libsmartcols ];
+
+  meta = with lib; {
+    description = "Lightweight implementation of dnf in C";
+    homepage = "https://github.com/rpm-software-management/microdnf";
+    license = licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ rb2k ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/pkgs/tools/package-management/micromamba/default.nix b/pkgs/tools/package-management/micromamba/default.nix
new file mode 100644
index 00000000000..a7e563ce67e
--- /dev/null
+++ b/pkgs/tools/package-management/micromamba/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchFromGitHub, cmake
+, cli11, nlohmann_json, curl, libarchive, libyamlcpp, libsolv, reproc
+}:
+
+let
+  libsolv' = libsolv.overrideAttrs (oldAttrs: {
+    cmakeFlags = oldAttrs.cmakeFlags ++ [
+      "-DENABLE_CONDA=true"  # Maybe enable this in the original libsolv package? No idea about the implications.
+    ];
+  });
+in
+stdenv.mkDerivation rec {
+  pname = "micromamba";
+  version = "0.14.1";
+
+  src = fetchFromGitHub {
+    owner = "mamba-org";
+    repo = "mamba";
+    rev = version;
+    sha256 = "0a5kmwk44ll4d8b2akjc0vm6ap9jfxclcw4fclvjxr2in3am9256";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [
+    cli11
+    nlohmann_json
+    curl
+    libarchive
+    libyamlcpp
+    libsolv'
+    reproc
+    # python3Packages.pybind11 # Would be necessary if someone wants to build with bindings I guess.
+  ];
+
+  cmakeFlags = [
+    "-DBUILD_BINDINGS=OFF" # Fails to build, I don't think it's necessary for now.
+    "-DBUILD_EXE=ON"
+  ];
+
+  CXXFLAGS = "-DMAMBA_USE_STD_FS";
+
+  meta = with lib; {
+    description = "Reimplementation of the conda package manager";
+    homepage = "https://github.com/mamba-org/mamba";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ mausch ];
+  };
+}
diff --git a/pkgs/tools/package-management/morph/default.nix b/pkgs/tools/package-management/morph/default.nix
index 5ae4f5731ba..56d824059f5 100644
--- a/pkgs/tools/package-management/morph/default.nix
+++ b/pkgs/tools/package-management/morph/default.nix
@@ -1,18 +1,17 @@
-{ buildGoPackage, fetchFromGitHub, go-bindata, openssh, makeWrapper, lib }:
+{ buildGoModule, fetchFromGitHub, go-bindata, openssh, makeWrapper, lib }:
 
-buildGoPackage rec {
+buildGoModule rec {
   pname = "morph";
-  version = "1.5.0";
+  version = "1.6.0";
 
   src = fetchFromGitHub {
     owner = "dbcdk";
     repo = "morph";
     rev = "v${version}";
-    sha256 = "064ccvvq4yk17jy5jvi1nxfp5ajvnvn2k4zvh9v0n3ragcl3rd20";
+    sha256 = "0aibs4gsb9pl21nd93bf963kdzf0661qn0liaw8v8ak2xbz7nbs8";
   };
 
-  goPackagePath = "github.com/dbcdk/morph";
-  goDeps = ./deps.nix;
+  vendorSha256 = "08zzp0h4c4i5hk4whz06a3da7qjms6lr36596vxz0d8q0n7rspr9";
 
   nativeBuildInputs = [ makeWrapper go-bindata ];
 
@@ -28,14 +27,14 @@ buildGoPackage rec {
 
   postInstall = ''
     mkdir -p $lib
-    cp -v go/src/$goPackagePath/data/*.nix $lib
+    cp -v ./data/*.nix $lib
     wrapProgram $out/bin/morph --prefix PATH : ${lib.makeBinPath [ openssh ]};
   '';
 
   outputs = [ "out" "lib" ];
 
   meta = with lib; {
-    description = "Morph is a NixOS host manager written in Golang.";
+    description = "A NixOS host manager written in Golang";
     license = licenses.mit;
     homepage = "https://github.com/dbcdk/morph";
     maintainers = with maintainers; [adamt johanot];
diff --git a/pkgs/tools/package-management/morph/deps.nix b/pkgs/tools/package-management/morph/deps.nix
index 4da6f0278b7..fdae5ef39ee 100644
--- a/pkgs/tools/package-management/morph/deps.nix
+++ b/pkgs/tools/package-management/morph/deps.nix
@@ -63,4 +63,4 @@
       sha256 = "06xrp05njwam4sn031fkmd4gym5wfsw5q0v24nqhs4883lsx9dwq";
     };
   }
-]
\ No newline at end of file
+]
diff --git a/pkgs/tools/package-management/mynewt-newt/default.nix b/pkgs/tools/package-management/mynewt-newt/default.nix
index d559ca8921c..dd5c36019f2 100644
--- a/pkgs/tools/package-management/mynewt-newt/default.nix
+++ b/pkgs/tools/package-management/mynewt-newt/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoModule, fetchFromGitHub, fetchpatch }:
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
 
 buildGoModule rec {
   pname = "mynewt-newt";
@@ -26,9 +26,9 @@ buildGoModule rec {
 
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://mynewt.apache.org/";
-    description = "Build and package management tool for embedded development.";
+    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
diff --git a/pkgs/tools/package-management/nfpm/default.nix b/pkgs/tools/package-management/nfpm/default.nix
index 41ec0234088..521616a5472 100644
--- a/pkgs/tools/package-management/nfpm/default.nix
+++ b/pkgs/tools/package-management/nfpm/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "nfpm";
-  version = "1.6.0";
+  version = "2.3.1";
 
   src = fetchFromGitHub {
     owner = "goreleaser";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1q4fzjlaiwsm028cwcw7xgcbdkccw18f2mf1vh7lz42l1bxy8bk4";
+    sha256 = "sha256-zS8HXzu0oX66oVmupMU9YZKXGF+IQ/tCrO32PXfHPGY=";
   };
 
-  vendorSha256 = "1bsb05qhr9zm8yar8mdi3mw0i5ak1s5x0i8qkz5fd6wcqnsw2jjw";
+  vendorSha256 = "sha256-1zPrCmC+J9LbD3tRKzdJbyWbyTtD6SiPZ6efc9CSjsg=";
 
   doCheck = false;
 
diff --git a/pkgs/tools/package-management/niff/default.nix b/pkgs/tools/package-management/niff/default.nix
index 9d3736f6faa..93406095df2 100644
--- a/pkgs/tools/package-management/niff/default.nix
+++ b/pkgs/tools/package-management/niff/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , python3
 , fetchFromGitHub
 }:
@@ -28,7 +28,7 @@ in stdenv.mkDerivation {
   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 ];
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.fridh ];
   };
 }
diff --git a/pkgs/tools/package-management/nix-bundle/default.nix b/pkgs/tools/package-management/nix-bundle/default.nix
index 41ce0967b2e..7b52f2585f3 100644
--- a/pkgs/tools/package-management/nix-bundle/default.nix
+++ b/pkgs/tools/package-management/nix-bundle/default.nix
@@ -11,8 +11,10 @@ stdenv.mkDerivation rec {
     sha256 = "0hdvdjm467w37clkhbifn54hbdmnxlbk66cj88lwaz26j4s2ik5g";
   };
 
+  nativeBuildInputs = [ makeWrapper ];
+
   # coreutils, gnutar is actually needed by nix for bootstrap
-  buildInputs = [ nix coreutils makeWrapper gnutar gzip bzip2 ];
+  buildInputs = [ nix coreutils gnutar gzip bzip2 ];
 
   binPath = lib.makeBinPath [ nix coreutils gnutar gzip bzip2 ];
 
diff --git a/pkgs/tools/package-management/nix-doc/default.nix b/pkgs/tools/package-management/nix-doc/default.nix
index 630ac6e94a9..e12bed7d925 100644
--- a/pkgs/tools/package-management/nix-doc/default.nix
+++ b/pkgs/tools/package-management/nix-doc/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, rustPlatform, fetchFromGitHub, boost, nix, pkg-config }:
+{ lib, rustPlatform, fetchFromGitHub, boost, nix, pkg-config }:
 
 rustPlatform.buildRustPackage rec {
   pname = "nix-doc";
-  version = "0.3.3";
+  version = "0.5.1";
 
   src = fetchFromGitHub {
     rev = "v${version}";
     owner = "lf-";
     repo = "nix-doc";
-    sha256 = "0vd7159y5w8jjgaw51kfr3z3r50299gvw7vjchpqx3nwmdink8bh";
+    sha256 = "0yx5y90shdjwihbjrvv2m3bycgpdalafc9q4acfczfaymag8ggad";
   };
 
   doCheck = true;
@@ -16,13 +16,13 @@ rustPlatform.buildRustPackage rec {
 
   nativeBuildInputs = [ pkg-config ];
 
-  cargoSha256 = "1xz3qngs8p0s62dq4d46c01z3k1vvgg856767g56b13c38pzfh28";
+  cargoSha256 = "11bcn111j4iqwqwpp26w7rnycasbhiixaqb1rq4ry2402hvl90j7";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "An interactive Nix documentation tool";
-    longDescription = "An interactive Nix documentation tool providing a CLI for function search and a Nix plugin for docs in the REPL";
+    longDescription = "An interactive Nix documentation tool providing a CLI for function search, a Nix plugin for docs in the REPL, and a ctags implementation for Nix script";
     homepage = "https://github.com/lf-/nix-doc";
-    license = licenses.lgpl3;
+    license = licenses.lgpl3Plus;
     maintainers = [ maintainers.lf- ];
     platforms = platforms.unix;
   };
diff --git a/pkgs/tools/package-management/nix-du/default.nix b/pkgs/tools/package-management/nix-du/default.nix
index 417962733af..75de1caa2db 100644
--- a/pkgs/tools/package-management/nix-du/default.nix
+++ b/pkgs/tools/package-management/nix-du/default.nix
@@ -1,17 +1,17 @@
-{ stdenv, fetchFromGitHub, rustPlatform, nix, boost, graphviz, darwin }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, nix, boost, graphviz, Security, pkg-config }:
 
 rustPlatform.buildRustPackage rec {
   pname = "nix-du";
-  version = "0.3.1";
+  version = "0.3.4";
 
   src = fetchFromGitHub {
     owner = "symphorien";
     repo = "nix-du";
     rev = "v${version}";
-    sha256 = "149d60mid29s5alv5m3d7jrhyzc6cj7b6hpiq399gsdwzgxr00wq";
+    sha256 = "0iwlprjbphwsrxdhgsxa8ja73snsyh0rdxrpsf1ygid2ky5vc83f";
   };
 
-  cargoSha256 = "1a6svl89dcdb5fpvs2i32i6agyhl0sx7kkkw70rqr17fyzl5psai";
+  cargoSha256 = "19fwkw9iswzkhqgfq7pmcabqmq5c7vvirwaxbfjshkwcgn47rgjl";
 
   doCheck = true;
   checkInputs = [ nix graphviz ];
@@ -19,12 +19,14 @@ rustPlatform.buildRustPackage rec {
   buildInputs = [
     boost
     nix
-  ] ++ stdenv.lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Security;
+  ] ++ lib.optionals stdenv.isDarwin [ Security ];
 
-  meta = with stdenv.lib; {
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = with 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;
+    license = licenses.lgpl3Only;
     maintainers = [ maintainers.symphorien ];
     platforms = platforms.unix;
   };
diff --git a/pkgs/tools/package-management/nix-index/default.nix b/pkgs/tools/package-management/nix-index/default.nix
index 37a638c5670..a8a2c2242fd 100644
--- a/pkgs/tools/package-management/nix-index/default.nix
+++ b/pkgs/tools/package-management/nix-index/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, rustPlatform, fetchFromGitHub, pkgconfig, makeWrapper, openssl, curl
+{ lib, stdenv, rustPlatform, fetchFromGitHub, pkg-config, makeWrapper, openssl, curl
 , nix, Security
 }:
 
@@ -13,11 +13,11 @@ rustPlatform.buildRustPackage rec {
     sha256 = "05fqfwz34n4ijw7ydw2n6bh4bv64rhks85cn720sy5r7bmhfmfa8";
   };
 
-  cargoSha256 = "0apdr9z18p6m4lfjv8k9zv2mqc7vssd2d536zfv1pns0pdqsfw50";
+  cargoSha256 = "161lz96a52s53rhhkxxhcg41bsmh8w6rv6nl8gwqmg3biszy7hah";
 
-  nativeBuildInputs = [ pkgconfig makeWrapper ];
+  nativeBuildInputs = [ pkg-config makeWrapper ];
   buildInputs = [ openssl curl ]
-    ++ stdenv.lib.optional stdenv.isDarwin Security;
+    ++ lib.optional stdenv.isDarwin Security;
 
   doCheck = !stdenv.isDarwin;
 
@@ -27,10 +27,10 @@ rustPlatform.buildRustPackage rec {
     substituteInPlace $out/etc/profile.d/command-not-found.sh \
       --replace "@out@" "$out"
     wrapProgram $out/bin/nix-index \
-      --prefix PATH : "${stdenv.lib.makeBinPath [ nix ]}"
+      --prefix PATH : "${lib.makeBinPath [ nix ]}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A files database for nixpkgs";
     homepage = "https://github.com/bennofs/nix-index";
     license = with licenses; [ bsd3 ];
diff --git a/pkgs/tools/package-management/nix-pin/default.nix b/pkgs/tools/package-management/nix-pin/default.nix
index f5dfacf319b..4dc0098316c 100644
--- a/pkgs/tools/package-management/nix-pin/default.nix
+++ b/pkgs/tools/package-management/nix-pin/default.nix
@@ -9,7 +9,8 @@ let self = stdenv.mkDerivation rec {
     rev = "version-${version}";
     sha256 = "1pccvc0iqapms7kidrh09g5fdx44x622r5l9k7bkmssp3v4c68vy";
   };
-  buildInputs = [ python3 mypy makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ python3 mypy ];
   checkPhase = ''
     mypy bin/*
   '';
@@ -42,7 +43,7 @@ let self = stdenv.mkDerivation rec {
           --modify-nix default.nix
       '';
     };
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/timbertson/nix-pin";
     description = "nixpkgs development utility";
     license = licenses.mit;
diff --git a/pkgs/tools/package-management/nix-prefetch-scripts/default.nix b/pkgs/tools/package-management/nix-prefetch-scripts/default.nix
index bab12ca8e8d..a77d0961c84 100644
--- a/pkgs/tools/package-management/nix-prefetch-scripts/default.nix
+++ b/pkgs/tools/package-management/nix-prefetch-scripts/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, makeWrapper, buildEnv,
-  breezy, coreutils, cvs, findutils, gawk, git, gnused, mercurial, nix, subversion
+{ lib, stdenv, makeWrapper, buildEnv
+, breezy, coreutils, cvs, findutils, gawk, git, gnused, mercurial, nix, subversion
 }:
 
 let mkPrefetchScript = tool: src: deps:
@@ -13,16 +13,16 @@ let mkPrefetchScript = tool: src: deps:
     installPhase = ''
       install -vD ${src} $out/bin/$name;
       wrapProgram $out/bin/$name \
-        --prefix PATH : ${stdenv.lib.makeBinPath (deps ++ [ gnused nix ])} \
+        --prefix PATH : ${lib.makeBinPath (deps ++ [ gnused nix ])} \
         --set HOME /homeless-shelter
     '';
 
     preferLocalBuild = true;
 
-    meta = with stdenv.lib; {
+    meta = with lib; {
       description = "Script used to obtain source hashes for fetch${tool}";
       maintainers = with maintainers; [ bennofs ];
-      platforms = stdenv.lib.platforms.unix;
+      platforms = platforms.unix;
     };
   };
 in rec {
@@ -37,10 +37,10 @@ in rec {
 
     paths = [ nix-prefetch-bzr nix-prefetch-cvs nix-prefetch-git nix-prefetch-hg nix-prefetch-svn ];
 
-    meta = with stdenv.lib; {
+    meta = with 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;
+      platforms = platforms.unix;
     };
   };
 }
diff --git a/pkgs/tools/package-management/nix-prefetch/default.nix b/pkgs/tools/package-management/nix-prefetch/default.nix
index edc8e8bf1a1..5936429c7a4 100644
--- a/pkgs/tools/package-management/nix-prefetch/default.nix
+++ b/pkgs/tools/package-management/nix-prefetch/default.nix
@@ -1,33 +1,22 @@
-{ stdenv, fetchFromGitHub, installShellFiles, makeWrapper, asciidoc
+{ lib, stdenv, fetchFromGitHub, installShellFiles, makeWrapper, asciidoc
 , docbook_xml_dtd_45, git, docbook_xsl, libxml2, libxslt, coreutils, gawk
-, gnugrep, gnused, jq, nix, fetchpatch }:
+, gnugrep, gnused, jq, nix }:
 
-let
-  binPath = stdenv.lib.makeBinPath [ coreutils gawk git gnugrep gnused jq nix ];
-
-in stdenv.mkDerivation rec {
+stdenv.mkDerivation rec {
   pname = "nix-prefetch";
-  version = "0.3.1";
+  version = "0.4.1";
 
   src = fetchFromGitHub {
     owner = "msteen";
     repo = "nix-prefetch";
     rev = version;
-    sha256 = "15h6f743nn6sdq8l771sjxh92cyzqznkcs7szrc7nm066xvx8rd4";
+    sha256 = "0bwv6x651gyq703pywrhb7lfby6xwnd1iwnrzzjihipn7x3v2hz9";
     # the stat call has to be in a subshell or we get the current date
     extraPostFetch = ''
       echo $(stat -c %Y $out) > $out/.timestamp
     '';
   };
 
-  patches = [
-    # Fix compatibility with nixUnstable: https://github.com/msteen/nix-prefetch/pull/8
-    (fetchpatch {
-      url = "https://github.com/msteen/nix-prefetch/commit/817a7695d98663386fa27a6c04d1617e0a83e1ab.patch";
-      sha256 = "1zfgvafg30frwrh56k2wj4g76cljyjylm47ll60ms0yfx55spa7x";
-    })
-  ];
-
   postPatch = ''
     lib=$out/lib/${pname}
 
@@ -63,7 +52,7 @@ in stdenv.mkDerivation rec {
     install -Dm555 -t $lib src/*.sh
     install -Dm444 -t $lib lib/*
     makeWrapper $lib/main.sh $out/bin/${pname} \
-      --prefix PATH : ${binPath}
+      --prefix PATH : ${lib.makeBinPath [ coreutils gawk git gnugrep gnused jq nix ]}
 
     installManPage doc/nix-prefetch.?
 
@@ -73,10 +62,11 @@ in stdenv.mkDerivation rec {
     cp -r contrib/hello_rs $out/share/doc/${pname}/contrib
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Prefetch any fetcher function call, e.g. package sources";
     license = licenses.mit;
     maintainers = with maintainers; [ msteen ];
-    inherit (src.meta) homepage;
+    homepage = "https://github.com/msteen/nix-prefetch";
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/package-management/nix-serve/default.nix b/pkgs/tools/package-management/nix-serve/default.nix
index fccfbe98f78..a1edfdd1367 100644
--- a/pkgs/tools/package-management/nix-serve/default.nix
+++ b/pkgs/tools/package-management/nix-serve/default.nix
@@ -1,8 +1,14 @@
-{ stdenv, fetchFromGitHub,
-  bzip2, nix, perl, perlPackages,
+{ lib
+, stdenv
+, fetchFromGitHub
+, bzip2
+, nix
+, perl
+, makeWrapper
+, nixosTests
 }:
 
-with stdenv.lib;
+with lib;
 
 let
   rev = "e4675e38ab54942e351c7686e40fabec822120b9";
@@ -18,23 +24,20 @@ stdenv.mkDerivation {
     inherit rev sha256;
   };
 
-  buildInputs = [ bzip2 perl nix nix.perl-bindings ]
-    ++ (with perlPackages; [ DBI DBDSQLite Plack Starman ]);
+  nativeBuildInputs = [ makeWrapper ];
 
   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
+    install -Dm0755 nix-serve.psgi $out/libexec/nix-serve/nix-serve.psgi
+
+    makeWrapper ${perl.withPackages(p: [ p.DBDSQLite p.Plack p.Starman nix.perl-bindings ])}/bin/starman $out/bin/nix-serve \
+                --prefix PATH : "${makeBinPath [ bzip2 nix ]}" \
+                --add-flags $out/libexec/nix-serve/nix-serve.psgi
   '';
 
+  passthru.tests.nix-serve = nixosTests.nix-serve;
+
   meta = {
     homepage = "https://github.com/edolstra/nix-serve";
     description = "A utility for sharing a Nix store as a binary cache";
diff --git a/pkgs/tools/package-management/nix-simple-deploy/default.nix b/pkgs/tools/package-management/nix-simple-deploy/default.nix
index 5782aa9dc35..75f47d35ce2 100644
--- a/pkgs/tools/package-management/nix-simple-deploy/default.nix
+++ b/pkgs/tools/package-management/nix-simple-deploy/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform }:
+{ lib, fetchFromGitHub, rustPlatform }:
 
 rustPlatform.buildRustPackage rec {
   pname = "nix-simple-deploy";
@@ -11,9 +11,9 @@ rustPlatform.buildRustPackage rec {
     sha256 = "12g0sbgs2dfnk0agp1kagfi1yhk26ga98zygxxrjhjxrqb2n5w80";
   };
 
-  cargoSha256 = "0svnz9r0lrmz333qpbpdddjd46vh9i74qchws8aifa2qwnqy0kmn";
+  cargoSha256 = "1wp8wdv25j8ybq2j04z3nl4yc95wkj5h740lzpyps08yaxj8bncr";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Deploy software or an entire NixOS system configuration to another NixOS system";
     homepage = "https://github.com/misuzu/nix-simple-deploy";
     license = with licenses; [ asl20 /* OR */ mit ];
diff --git a/pkgs/tools/package-management/nix-template/default.nix b/pkgs/tools/package-management/nix-template/default.nix
new file mode 100644
index 00000000000..13c254cbee2
--- /dev/null
+++ b/pkgs/tools/package-management/nix-template/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub
+, installShellFiles
+, makeWrapper
+, nix
+, openssl
+, pkg-config
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nix-template";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    name = "${pname}-${version}-src";
+    owner = "jonringer";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-kNFhSfHUYBUOCXoD6m7thMho4tOIpRHfHGcsW8FTgkc=";
+  };
+
+  cargoSha256 = "sha256-7PthFLCEt+E/Gx5//aulHYYBKZqapNEWKtKfRlDr3Pw=";
+
+  nativeBuildInputs = [
+    installShellFiles
+    makeWrapper
+    pkg-config
+  ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optional stdenv.isDarwin Security;
+
+  # needed for nix-prefetch-url
+  postInstall = ''
+    wrapProgram $out/bin/nix-template \
+      --prefix PATH : ${lib.makeBinPath [ nix ]}
+
+    installShellCompletion --cmd nix-template \
+      --bash <($out/bin/nix-template completions bash) \
+      --fish <($out/bin/nix-template completions fish) \
+      --zsh <($out/bin/nix-template completions zsh)
+  '';
+
+  meta = with lib; {
+    description = "Make creating nix expressions easy";
+    homepage = "https://github.com/jonringer/nix-template/";
+    changelog = "https://github.com/jonringer/nix-template/releases/tag/v${version}";
+    license = licenses.cc0;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/pkgs/tools/package-management/nix-top/default.nix b/pkgs/tools/package-management/nix-top/default.nix
index 0a003ba6b6b..eedd4f97db6 100644
--- a/pkgs/tools/package-management/nix-top/default.nix
+++ b/pkgs/tools/package-management/nix-top/default.nix
@@ -38,7 +38,7 @@ stdenv.mkDerivation rec {
     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 ''
+  '' + lib.optionalString stdenv.isDarwin ''
     ln -s /bin/stty $out/libexec/nix-top
   '';
 
@@ -48,6 +48,5 @@ stdenv.mkDerivation rec {
     license = licenses.mit;
     maintainers = with maintainers; [ samueldr ];
     platforms = platforms.linux ++ platforms.darwin;
-    inherit version;
   };
 }
diff --git a/pkgs/tools/package-management/nix-universal-prefetch/default.nix b/pkgs/tools/package-management/nix-universal-prefetch/default.nix
index 224ccd1cd9e..802fc4047bf 100644
--- a/pkgs/tools/package-management/nix-universal-prefetch/default.nix
+++ b/pkgs/tools/package-management/nix-universal-prefetch/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , ruby
 }:
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
       --replace "/usr/bin/env nix-shell" "${ruby}/bin/ruby"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Uses nixpkgs fetchers to figure out hashes";
     homepage = "https://github.com/samueldr/nix-universal-prefetch";
     license = licenses.mit;
diff --git a/pkgs/tools/package-management/nix-update-source/default.nix b/pkgs/tools/package-management/nix-update-source/default.nix
index a2add8f8a78..ebfd730544e 100644
--- a/pkgs/tools/package-management/nix-update-source/default.nix
+++ b/pkgs/tools/package-management/nix-update-source/default.nix
@@ -1,15 +1,20 @@
-{ lib, pkgs, fetchFromGitHub, python3Packages, nix-prefetch-scripts
-, runtimeShell }:
+{ lib, pkgs, fetchFromGitHub, python3Packages, nix-prefetch-scripts, runtimeShell }:
+
 python3Packages.buildPythonApplication rec {
+  pname = "nix-update-source";
   version = "0.6.3";
-  name = "nix-update-source-${version}";
+
   src = fetchFromGitHub {
     owner = "timbertson";
     repo = "nix-update-source";
-    rev = "version-0.6.3";
+    rev = "version-${version}";
     sha256 = "157wvv9vnaszzwbj68jpdc0imcm1hdab3z760bx2axbsgfpqqilz";
   };
+
   propagatedBuildInputs = [ nix-prefetch-scripts ];
+
+  doCheck = false;
+
   passthru = {
     # NOTE: `fetch` should not be used within nixpkgs because it
     # uses a non-idiomatic structure. It is provided for use by
@@ -28,6 +33,7 @@ python3Packages.buildPythonApplication rec {
         inherit src;
         overrideSrc = drv: lib.overrideDerivation drv (orig: { inherit src; });
       };
+
     updateScript = ''
       #!${runtimeShell}
       set -e
@@ -43,6 +49,7 @@ python3Packages.buildPythonApplication rec {
         --modify-nix default.nix
     '';
   };
+
   meta = {
     description = "Utility to automate updating of nix derivation sources";
     maintainers = with lib.maintainers; [ timbertson ];
diff --git a/pkgs/tools/package-management/nix-update/default.nix b/pkgs/tools/package-management/nix-update/default.nix
index bd4ff86c994..c205550b267 100644
--- a/pkgs/tools/package-management/nix-update/default.nix
+++ b/pkgs/tools/package-management/nix-update/default.nix
@@ -1,27 +1,29 @@
 { lib
 , buildPythonApplication
 , fetchFromGitHub
-, nix
+, nixUnstable
 , nix-prefetch
+, nixpkgs-fmt
+, nixpkgs-review
 }:
 
 buildPythonApplication rec {
   pname = "nix-update";
-  version = "0.1";
+  version = "0.4.0";
 
   src = fetchFromGitHub {
     owner = "Mic92";
     repo = pname;
     rev = version;
-    sha256 = "0mw31n7kqfr7fskkxp58b0wprxj1pj6n1zs6ymvvl548gs5rgn2s";
+    sha256 = "sha256-n3YuNypKFaBtO5Fhf7Z3Wgh0+WH5bQWR0W0uHCYKtuY=";
   };
 
   makeWrapperArgs = [
-    "--prefix" "PATH" ":" (lib.makeBinPath [ nix nix-prefetch ])
+    "--prefix" "PATH" ":" (lib.makeBinPath [ nixUnstable nix-prefetch nixpkgs-fmt nixpkgs-review ])
   ];
 
   checkPhase = ''
-    $out/bin/nix-update --help
+    $out/bin/nix-update --help >/dev/null
   '';
 
   meta = with lib; {
diff --git a/pkgs/tools/package-management/nix/aws-sdk-cpp-TransferManager-ContentEncoding.patch b/pkgs/tools/package-management/nix/aws-sdk-cpp-TransferManager-ContentEncoding.patch
new file mode 100644
index 00000000000..59cc305a60b
--- /dev/null
+++ b/pkgs/tools/package-management/nix/aws-sdk-cpp-TransferManager-ContentEncoding.patch
@@ -0,0 +1,127 @@
+From 7d58e303159b2fb343af9a1ec4512238efa147c7 Mon Sep 17 00:00:00 2001
+From: Eelco Dolstra <edolstra@gmail.com>
+Date: Mon, 6 Aug 2018 17:15:04 +0200
+Subject: [PATCH] TransferManager: Allow setting a content-encoding for S3 uploads
+
+--- a/aws-cpp-sdk-transfer/include/aws/transfer/TransferHandle.h
++++ b/aws-cpp-sdk-transfer/include/aws/transfer/TransferHandle.h
+@@ -297,6 +297,14 @@ namespace Aws
+              * Content type of the object being transferred
+              */
+             inline void SetContentType(const Aws::String& value) { std::lock_guard<std::mutex> locker(m_getterSetterLock); m_contentType = value; }
++            /**
++             * Content encoding of the object being transferred
++             */
++            inline const Aws::String GetContentEncoding() const { std::lock_guard<std::mutex> locker(m_getterSetterLock); return m_contentEncoding; }
++            /**
++             * Content type of the object being transferred
++             */
++            inline void SetContentEncoding(const Aws::String& value) { std::lock_guard<std::mutex> locker(m_getterSetterLock); m_contentEncoding = value; }
+             /**
+              * In case of an upload, this is the metadata that was placed on the object when it was uploaded.
+              * In the case of a download, this is the object metadata from the GetObject operation.
+@@ -383,6 +391,7 @@ namespace Aws
+             Aws::String m_key;
+             Aws::String m_fileName;
+             Aws::String m_contentType;
++            Aws::String m_contentEncoding;
+             Aws::String m_versionId;
+             Aws::Map<Aws::String, Aws::String> m_metadata;
+             TransferStatus m_status;
+--- a/aws-cpp-sdk-transfer/include/aws/transfer/TransferManager.h
++++ b/aws-cpp-sdk-transfer/include/aws/transfer/TransferManager.h
+@@ -154,7 +154,8 @@ namespace Aws
+                                                        const Aws::String& keyName,
+                                                        const Aws::String& contentType, 
+                                                        const Aws::Map<Aws::String, Aws::String>& metadata,
+-                                                       const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr);
++                                                       const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr,
++                                                       const Aws::String& contentEncoding = "");
+ 
+             /**
+              * Downloads the contents of bucketName/keyName in S3 to the file specified by writeToFile. This will perform a GetObject operation.
+@@ -246,7 +247,8 @@ namespace Aws
+                                                                    const Aws::Map<Aws::String,
+                                                                    Aws::String>& metadata,
+                                                                    const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context,
+-                                                                   const Aws::String& fileName = "");
++                                                                   const Aws::String& fileName = "",
++                                                                   const Aws::String& contentEncoding = "");
+ 
+             /**
+              * Submits the actual task to task schecduler
+@@ -262,7 +264,8 @@ namespace Aws
+                                                          const Aws::String& keyName,
+                                                          const Aws::String& contentType,
+                                                          const Aws::Map<Aws::String, Aws::String>& metadata,
+-                                                         const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context);
++                                                         const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context,
++                                                         const Aws::String& contentEncoding);
+ 
+             /**
+              * Uploads the contents of file, to bucketName/keyName in S3. contentType and metadata will be added to the object. If the object is larger than the configured bufferSize,
+--- a/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp
++++ b/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp
+@@ -87,9 +87,10 @@ namespace Aws
+                                                                     const Aws::String& bucketName,
+                                                                     const Aws::String& keyName, const Aws::String& contentType,
+                                                                     const Aws::Map<Aws::String, Aws::String>& metadata,
+-                                                                    const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context)
++                                                                    const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context,
++                                                                    const Aws::String& contentEncoding)
+         {
+-            return this->DoUploadFile(fileStream, bucketName, keyName, contentType, metadata, context);
++            return this->DoUploadFile(fileStream, bucketName, keyName, contentType, metadata, context, contentEncoding);
+         }
+ 
+         std::shared_ptr<TransferHandle> TransferManager::DownloadFile(const Aws::String& bucketName,
+@@ -286,6 +287,9 @@ namespace Aws
+                 createMultipartRequest.WithKey(handle->GetKey());
+                 createMultipartRequest.WithMetadata(handle->GetMetadata());
+ 
++                if (handle->GetContentEncoding() != "")
++                    createMultipartRequest.WithContentEncoding(handle->GetContentEncoding());
++
+                 auto createMultipartResponse = m_transferConfig.s3Client->CreateMultipartUpload(createMultipartRequest);
+                 if (createMultipartResponse.IsSuccess())
+                 {
+@@ -441,6 +445,9 @@ namespace Aws
+ 
+             putObjectRequest.SetContentType(handle->GetContentType());
+ 
++            if (handle->GetContentEncoding() != "")
++                putObjectRequest.SetContentEncoding(handle->GetContentEncoding());
++
+             auto buffer = m_bufferManager.Acquire();
+ 
+             auto lengthToWrite = (std::min)(m_transferConfig.bufferSize, handle->GetBytesTotalSize());
+@@ -1140,12 +1147,15 @@ namespace Aws
+                                                                                 const Aws::String& contentType,
+                                                                                 const Aws::Map<Aws::String, Aws::String>& metadata,
+                                                                                 const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context,
+-                                                                                const Aws::String& fileName)
++                                                                                const Aws::String& fileName,
++                                                                                const Aws::String& contentEncoding)
+         {
+             auto handle = Aws::MakeShared<TransferHandle>(CLASS_TAG, bucketName, keyName, 0, fileName);
+             handle->SetContentType(contentType);
+             handle->SetMetadata(metadata);
+             handle->SetContext(context);
++            if (contentEncoding != "")
++                handle->SetContentEncoding(contentEncoding);
+ 
+             if (!fileStream->good())
+             {
+@@ -1213,9 +1223,10 @@ namespace Aws
+                                                                       const Aws::String& keyName,
+                                                                       const Aws::String& contentType,
+                                                                       const Aws::Map<Aws::String, Aws::String>& metadata,
+-                                                                      const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context)
++                                                                      const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context,
++                                                                      const Aws::String& contentEncoding)
+         {
+-            auto handle = CreateUploadFileHandle(fileStream.get(), bucketName, keyName, contentType, metadata, context);
++            auto handle = CreateUploadFileHandle(fileStream.get(), bucketName, keyName, contentType, metadata, context, "", contentEncoding);
+             return SubmitUpload(handle, fileStream);
+         }
+ 
diff --git a/pkgs/tools/package-management/nix/default.nix b/pkgs/tools/package-management/nix/default.nix
index 05036770316..e60cf580426 100644
--- a/pkgs/tools/package-management/nix/default.nix
+++ b/pkgs/tools/package-management/nix/default.nix
@@ -1,65 +1,76 @@
-{ lib, fetchurl, fetchFromGitHub, callPackage
+{ lib, fetchurl, fetchFromGitHub, fetchpatch, callPackage
 , storeDir ? "/nix/store"
 , stateDir ? "/nix/var"
 , confDir ? "/etc"
 , boehmgc
-, stdenv, llvmPackages_6
+, Security
 }:
 
 let
 
 common =
-  { lib, stdenv, fetchpatch, perl, curl, bzip2, sqlite, openssl ? null, xz
-  , bash, coreutils, gzip, gnutar
-  , pkgconfig, boehmgc, perlPackages, libsodium, brotli, boost, editline, nlohmann_json
-  , autoreconfHook, autoconf-archive, bison, flex, libxml2, libxslt, docbook5, docbook_xsl_ns
-  , jq, libarchive
+  { lib, stdenv, perl, curl, bzip2, sqlite, openssl ? null, xz
+  , bash, coreutils, util-linuxMinimal, gzip, gnutar
+  , pkg-config, boehmgc, libsodium, brotli, boost, editline, nlohmann_json
+  , autoreconfHook, autoconf-archive, bison, flex
+  , jq, libarchive, libcpuid
+  , lowdown, mdbook
   # Used by tests
-  , gmock
+  , gtest
   , busybox-sandbox-shell
   , storeDir
   , stateDir
   , confDir
-  , withLibseccomp ? lib.any (lib.meta.platformMatch stdenv.hostPlatform) libseccomp.meta.platforms, libseccomp
+  , withLibseccomp ? lib.meta.availableOn stdenv.hostPlatform libseccomp, libseccomp
   , withAWS ? !enableStatic && (stdenv.isLinux || stdenv.isDarwin), aws-sdk-cpp
-  , enableStatic ? false
-  , name, suffix ? "", src
-
+  , enableStatic ? stdenv.hostPlatform.isStatic
+  , enableDocumentation ? lib.versionOlder version "2.4pre" ||
+                          stdenv.hostPlatform == stdenv.buildPlatform
+  , pname, version, suffix ? "", src
+  , patches ? [ ]
   }:
   let
      sh = busybox-sandbox-shell;
      nix = stdenv.mkDerivation rec {
-      inherit name src;
-      version = lib.getVersion name;
+      inherit pname version src patches;
 
       is24 = lib.versionAtLeast version "2.4pre";
-      isExactly23 = lib.versionAtLeast version "2.3" && lib.versionOlder version "2.4";
 
       VERSION_SUFFIX = suffix;
 
-      outputs = [ "out" "dev" "man" "doc" ];
+      outputs =
+        [ "out" "dev" ]
+        ++ lib.optionals enableDocumentation [ "man" "doc" ];
 
       nativeBuildInputs =
-        [ pkgconfig ]
-        ++ lib.optionals is24 [ autoreconfHook autoconf-archive bison flex libxml2 libxslt
-                                docbook5 docbook_xsl_ns jq ];
+        [ pkg-config ]
+        ++ lib.optionals stdenv.isLinux [ util-linuxMinimal ]
+        ++ lib.optionals (is24 && enableDocumentation) [
+          (lib.getBin lowdown) mdbook
+        ]
+        ++ lib.optionals is24
+          [ autoreconfHook
+            autoconf-archive
+            bison flex
+            jq
+           ];
 
       buildInputs =
-        [ curl openssl sqlite xz bzip2 nlohmann_json
+        [ curl libsodium openssl sqlite xz bzip2 nlohmann_json
           brotli boost editline
         ]
-        ++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
-        ++ lib.optionals is24 [ libarchive gmock ]
+        ++ lib.optionals stdenv.isDarwin [ Security ]
+        ++ lib.optionals is24 [ libarchive gtest lowdown ]
+        ++ lib.optional (is24 && stdenv.isx86_64) libcpuid
         ++ lib.optional withLibseccomp libseccomp
         ++ lib.optional withAWS
             ((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";
-              })];
+              patches = args.patches or [] ++ [
+                ./aws-sdk-cpp-TransferManager-ContentEncoding.patch
+              ];
             }));
 
       propagatedBuildInputs = [ boehmgc ];
@@ -88,9 +99,13 @@ common =
             patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.*
           ''}
         '' +
-        # For Nix-2.3, patch around an issue where the Nix configure step pulls in the
-        # build system's bash and other utilities when cross-compiling
-        lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform && isExactly23) ''
+        # On all versions before c9f51e87057652db0013289a95deffba495b35e7, which
+        # removes config.nix entirely and is not present in 2.3.x, we need to
+        # patch around an issue where the Nix configure step pulls in the build
+        # system's bash and other utilities when cross-compiling.
+        lib.optionalString (
+          stdenv.buildPlatform != stdenv.hostPlatform && !is24
+        ) ''
           mkdir tmp/
           substitute corepkgs/config.nix.in tmp/config.nix.in \
             --subst-var-by bash ${bash}/bin/bash \
@@ -107,15 +122,19 @@ common =
         [ "--with-store-dir=${storeDir}"
           "--localstatedir=${stateDir}"
           "--sysconfdir=${confDir}"
-          "--disable-init-state"
           "--enable-gc"
         ]
+        ++ lib.optional (!enableDocumentation) "--disable-doc-gen"
+        ++ lib.optionals (!is24) [
+          # option was removed in 2.4
+          "--disable-init-state"
+        ]
         ++ lib.optionals 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}''
+        ) "--with-system=${stdenv.hostPlatform.nix.system}"
            # RISC-V support in progress https://github.com/seccomp/libseccomp/pull/50
         ++ lib.optional (!withLibseccomp) "--disable-seccomp-sandboxing";
 
@@ -127,7 +146,7 @@ common =
       doInstallCheck = true; # not cross
 
       # socket path becomes too long otherwise
-      preInstallCheck = lib.optional stdenv.isDarwin ''
+      preInstallCheck = lib.optionalString stdenv.isDarwin ''
         export TMPDIR=$NIX_BUILD_TOP
       '';
 
@@ -145,14 +164,14 @@ common =
           environments.
         '';
         homepage = "https://nixos.org/";
-        license = stdenv.lib.licenses.lgpl2Plus;
-        maintainers = [ stdenv.lib.maintainers.eelco ];
-        platforms = stdenv.lib.platforms.unix;
-        outputsToInstall = [ "out" "man" ];
+        license = lib.licenses.lgpl2Plus;
+        maintainers = [ lib.maintainers.eelco ];
+        platforms = lib.platforms.unix;
+        outputsToInstall = [ "out" ] ++ lib.optional enableDocumentation "man";
       };
 
       passthru = {
-        perl-bindings = stdenv.mkDerivation {
+        perl-bindings = perl.pkgs.toPerlModule (stdenv.mkDerivation {
           pname = "nix-perl";
           inherit version;
 
@@ -163,51 +182,69 @@ common =
           # 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 boost autoreconfHook autoconf-archive ];
+            [ perl pkg-config curl nix libsodium boost autoreconfHook autoconf-archive nlohmann_json ];
 
           configureFlags =
-            [ "--with-dbi=${perlPackages.DBI}/${perl.libPrefix}"
-              "--with-dbd-sqlite=${perlPackages.DBDSQLite}/${perl.libPrefix}"
+            [ "--with-dbi=${perl.pkgs.DBI}/${perl.libPrefix}"
+              "--with-dbd-sqlite=${perl.pkgs.DBDSQLite}/${perl.libPrefix}"
             ];
 
           preConfigure = "export NIX_STATE_DIR=$TMPDIR";
 
           preBuild = "unset NIX_INDENT_MAKE";
-        };
+        });
+        inherit boehmgc;
       };
     };
   in nix;
 
+  boehmgc_nix = boehmgc.override {
+    enableLargeConfig = true;
+  };
+
+  boehmgc_nixUnstable = boehmgc_nix.overrideAttrs (drv: {
+    patches = (drv.patches or []) ++ [
+      # Part of the GC solution in https://github.com/NixOS/nix/pull/4944
+      (fetchpatch {
+        url = https://github.com/hercules-ci/nix/raw/5c58d84a76d96f269e3ff1e72c9c9ba5f68576af/boehmgc-coroutine-sp-fallback.diff;
+        sha256 = "sha256-JvnWVTlkltmQUs/0qApv/LPZ690UX1/2hEP+LYRwKbI=";
+      })
+    ];
+  });
+
 in rec {
 
   nix = nixStable;
 
   nixStable = callPackage common (rec {
-    name = "nix-2.3.7";
+    pname = "nix";
+    version = "2.3.14";
     src = fetchurl {
-      url = "https://nixos.org/releases/nix/${name}/${name}.tar.xz";
-      sha256 = "dd8f52849414e5a878afe7e797aa4e22bab77c875d9da5a38d5f1bada704e596";
+      url = "https://nixos.org/releases/nix/${pname}-${version}/${pname}-${version}.tar.xz";
+      sha256 = "sha256-cToMnZU3+UpjeiiXnG3clz9zn8Xk+TbB7UbqmLMrlFk=";
     };
 
-    inherit storeDir stateDir confDir boehmgc;
-  } // stdenv.lib.optionalAttrs stdenv.cc.isClang {
-    stdenv = llvmPackages_6.stdenv;
+    boehmgc = boehmgc_nix;
+
+    inherit storeDir stateDir confDir;
   });
 
   nixUnstable = lib.lowPrio (callPackage common rec {
-    name = "nix-2.4${suffix}";
-    suffix = "pre20200721_ff314f1";
+    pname = "nix";
+    version = "2.4${suffix}";
+    suffix = "pre20210707_02dd6bb";
 
     src = fetchFromGitHub {
       owner = "NixOS";
       repo = "nix";
-      rev = "ff314f186e3f91d87af6ad96c0ae3b472494b940";
-      hash = "sha256-QibpLo4/gf2xYGoeQcgjZzH/qy5TBRVH+QCHgqOwur0=";
+      rev = "02dd6bb610e55a009cd7a4c83639698d3a7acaa2";
+      sha256 = "sha256-ARRiLrDOK+JQtvVXsYegspENYimQzilvdTfO7eiBuaA=";
     };
 
-    inherit storeDir stateDir confDir boehmgc;
-  });
+    boehmgc = boehmgc_nixUnstable;
 
-  nixFlakes = nixUnstable;
+    inherit storeDir stateDir confDir;
+
+  });
 
 }
diff --git a/pkgs/tools/package-management/nixops/azure-storage/default.nix b/pkgs/tools/package-management/nixops/azure-storage/default.nix
index 6693a7464d4..c6f3d71e98e 100644
--- a/pkgs/tools/package-management/nixops/azure-storage/default.nix
+++ b/pkgs/tools/package-management/nixops/azure-storage/default.nix
@@ -4,7 +4,7 @@
 , python
 , azure-common
 , futures
-, dateutil
+, python-dateutil
 , requests
 , isPy3k
 }:
@@ -19,7 +19,7 @@ buildPythonPackage rec {
     sha256 = "06bmw6k2000kln5jwk5r9bgcalqbyvqirmdh9gq4s6nb4fv3c0jb";
   };
 
-  propagatedBuildInputs = [ azure-common dateutil requests ]
+  propagatedBuildInputs = [ azure-common python-dateutil requests ]
                             ++ pkgs.lib.optionals (!isPy3k) [ futures ];
 
   postInstall = ''
diff --git a/pkgs/tools/package-management/nixops/default.nix b/pkgs/tools/package-management/nixops/default.nix
index c761a3a4779..5b4729e2abd 100644
--- a/pkgs/tools/package-management/nixops/default.nix
+++ b/pkgs/tools/package-management/nixops/default.nix
@@ -1,9 +1,67 @@
-{ callPackage, fetchurl }:
+{ lib, python2Packages, libxslt, docbook_xsl_ns, openssh, cacert, nixopsAzurePackages ? []
+, fetchurl, fetchpatch
+}:
 
-callPackage ./generic.nix (rec {
+python2Packages.buildPythonApplication rec {
+  pname = "nixops";
   version = "1.7";
+
   src = fetchurl {
     url = "https://nixos.org/releases/nixops/nixops-${version}/nixops-${version}.tar.bz2";
     sha256 = "091c0b5bca57d4aa20be20e826ec161efe3aec9c788fbbcf3806a734a517f0f3";
   };
-})
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/NixOS/nixops/commit/fb6d4665e8efd858a215bbaaf079ec3f5ebc49b8.patch";
+      sha256 = "1hbhykl811zsqlaj3y5m9d8lfsal6ps6n5p16ah6lqy2s18ap9d0";
+    })
+    ./optional-virtd.patch
+  ];
+
+  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
+      typing
+      ]
+      ++ lib.optional (!libvirt.passthru.libvirt.meta.insecure or true) libvirt
+      ++ 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 ];
+    platforms = lib.platforms.unix;
+    license = lib.licenses.lgpl3;
+  };
+}
diff --git a/pkgs/tools/package-management/nixops/generic.nix b/pkgs/tools/package-management/nixops/generic.nix
deleted file mode 100644
index 59d139d2884..00000000000
--- a/pkgs/tools/package-management/nixops/generic.nix
+++ /dev/null
@@ -1,55 +0,0 @@
-{ 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/pkgs/tools/package-management/nixops/nixops-v1_6_1.nix b/pkgs/tools/package-management/nixops/nixops-v1_6_1.nix
deleted file mode 100644
index dc0c733ca7b..00000000000
--- a/pkgs/tools/package-management/nixops/nixops-v1_6_1.nix
+++ /dev/null
@@ -1,32 +0,0 @@
-{ callPackage, newScope, pkgs, fetchurl }:
-
-callPackage ./generic.nix (rec {
-  version = "1.6.1";
-  src = fetchurl {
-    url = "https://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/pkgs/tools/package-management/nixops/optional-virtd.patch b/pkgs/tools/package-management/nixops/optional-virtd.patch
new file mode 100644
index 00000000000..3697fdde8f2
--- /dev/null
+++ b/pkgs/tools/package-management/nixops/optional-virtd.patch
@@ -0,0 +1,24 @@
+diff --git a/nixops/backends/libvirtd.py b/nixops/backends/libvirtd.py
+index bc5f4af7..edd1348b 100644
+--- a/nixops/backends/libvirtd.py
++++ b/nixops/backends/libvirtd.py
+@@ -8,12 +8,18 @@ import shutil
+ import string
+ import subprocess
+ import time
+-import libvirt
+ 
+ from nixops.backends import MachineDefinition, MachineState
+ import nixops.known_hosts
+ import nixops.util
+ 
++try:
++    import libvirt
++except:
++    class libvirt(object):
++        def __getattribute__(self, name):
++            raise ValueError("The libvirt backend has been disabled because of security issues.")
++
+ # to prevent libvirt errors from appearing on screen, see
+ # https://www.redhat.com/archives/libvirt-users/2017-August/msg00011.html
+ 
diff --git a/pkgs/tools/package-management/nixops/unstable.nix b/pkgs/tools/package-management/nixops/unstable.nix
deleted file mode 100644
index 94975807dea..00000000000
--- a/pkgs/tools/package-management/nixops/unstable.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-{ 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/pkgs/tools/package-management/nixpkgs-review/default.nix b/pkgs/tools/package-management/nixpkgs-review/default.nix
index 922546009fc..20b1fe720d3 100644
--- a/pkgs/tools/package-management/nixpkgs-review/default.nix
+++ b/pkgs/tools/package-management/nixpkgs-review/default.nix
@@ -1,27 +1,28 @@
-{ stdenv
+{ lib
 , python3
 , fetchFromGitHub
-, nix
+, nixUnstable
 , git
-, lib
 }:
 
 python3.pkgs.buildPythonApplication rec {
   pname = "nixpkgs-review";
-  version = "2.3.1";
+  version = "2.6.2";
 
   src = fetchFromGitHub {
     owner = "Mic92";
     repo = "nixpkgs-review";
     rev = version;
-    sha256 = "1v988jsxx2r82q6mf3503130cny088hin2as00yi26jzxjkrjcli";
+    sha256 = "0991jz2l834pyzwcrkvjf3wlp122fkkz6avs4j5n9idv549c5xc0";
   };
 
   makeWrapperArgs = [
-    "--prefix" "PATH" ":" (lib.makeBinPath [ nix git ])
+    "--prefix" "PATH" ":" (lib.makeBinPath [ nixUnstable git ])
   ];
 
-  meta = with stdenv.lib; {
+  doCheck = false;
+
+  meta = with lib; {
     description = "Review pull-requests on https://github.com/NixOS/nixpkgs";
     homepage = "https://github.com/Mic92/nixpkgs-review";
     license = licenses.mit;
diff --git a/pkgs/tools/package-management/nixui/default.nix b/pkgs/tools/package-management/nixui/default.nix
index 12bf229580f..0e6ff9ec705 100644
--- a/pkgs/tools/package-management/nixui/default.nix
+++ b/pkgs/tools/package-management/nixui/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, pkgs, fetchgit, nix, node_webkit, makeDesktopItem
+{ lib, stdenv, pkgs, fetchgit, nix, node_webkit, makeDesktopItem
 , writeScript }:
 let
   version = "0.2.1";
@@ -37,8 +37,8 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.matejc ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/package-management/nixui/nixui.nix b/pkgs/tools/package-management/nixui/nixui.nix
index e306e49c849..0bcd0eb4b85 100644
--- a/pkgs/tools/package-management/nixui/nixui.nix
+++ b/pkgs/tools/package-management/nixui/nixui.nix
@@ -1,4 +1,4 @@
-# This file has been generated by node2nix 1.8.0. Do not edit!
+# This file has been generated by node2nix 1.9.0. Do not edit!
 
 {pkgs ? import <nixpkgs> {
     inherit system;
@@ -6,12 +6,12 @@
 
 let
   nodeEnv = import ../../../development/node-packages/node-env.nix {
-    inherit (pkgs) stdenv python2 utillinux runCommand writeTextFile;
-    inherit nodejs;
+    inherit (pkgs) stdenv lib python2 runCommand writeTextFile;
+    inherit pkgs nodejs;
     libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
   };
 in
 import ./node-packages.nix {
-  inherit (pkgs) fetchurl fetchgit;
+  inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit;
   inherit nodeEnv;
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/package-management/nixui/node-packages.nix b/pkgs/tools/package-management/nixui/node-packages.nix
index b5b42e9164a..0b6857cf716 100644
--- a/pkgs/tools/package-management/nixui/node-packages.nix
+++ b/pkgs/tools/package-management/nixui/node-packages.nix
@@ -1,6 +1,6 @@
-# This file has been generated by node2nix 1.8.0. Do not edit!
+# This file has been generated by node2nix 1.9.0. Do not edit!
 
-{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}:
+{nodeEnv, fetchurl, fetchgit, nix-gitignore, stdenv, lib, globalBuildInputs ? []}:
 
 let
   sources = {
@@ -49,22 +49,22 @@ let
         sha1 = "309f10ba29f2002f74a92fb870b8a53ba2131593";
       };
     };
-    "underscore-1.4.4" = {
+    "underscore-1.12.0" = {
       name = "underscore";
       packageName = "underscore";
-      version = "1.4.4";
+      version = "1.12.0";
       src = fetchurl {
-        url = "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz";
-        sha1 = "61a6a32010622afa07963bf325203cf12239d604";
+        url = "https://registry.npmjs.org/underscore/-/underscore-1.12.0.tgz";
+        sha512 = "21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ==";
       };
     };
-    "underscore-1.9.2" = {
+    "underscore-1.4.4" = {
       name = "underscore";
       packageName = "underscore";
-      version = "1.9.2";
+      version = "1.4.4";
       src = fetchurl {
-        url = "https://registry.npmjs.org/underscore/-/underscore-1.9.2.tgz";
-        sha512 = "0fpcm4n2qlycl50j6k3fv7baybnzf1wbsm2ng0vwfsdi40fyvsvvl0k1i427hgpknhj5hbcwff3swckw6wx96kw4dgwvldi56v6lzqg";
+        url = "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz";
+        sha1 = "61a6a32010622afa07963bf325203cf12239d604";
       };
     };
   };
@@ -93,7 +93,7 @@ in
           sources."underscore-1.4.4"
         ];
       })
-      sources."underscore-1.9.2"
+      sources."underscore-1.12.0"
     ];
     buildInputs = globalBuildInputs;
     meta = {
diff --git a/pkgs/tools/package-management/nvd/default.nix b/pkgs/tools/package-management/nvd/default.nix
new file mode 100644
index 00000000000..1218ac01f9a
--- /dev/null
+++ b/pkgs/tools/package-management/nvd/default.nix
@@ -0,0 +1,32 @@
+{ fetchFromGitLab, installShellFiles, lib, python3, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "nvd";
+  version = "0.1.1";
+
+  src = fetchFromGitLab {
+    owner = "khumba";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0accq0cw6qsxin1fb2bp2ijgjf9akb9qlivkykpfsgnk5qjafv2n";
+  };
+
+  buildInputs = [ python3 ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+    install -m555 -Dt $out/bin src/nvd
+    installManPage src/nvd.1
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Nix/NixOS package version diff tool";
+    homepage = "https://gitlab.com/khumba/nvd";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ khumba ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/package-management/opkg-utils/default.nix b/pkgs/tools/package-management/opkg-utils/default.nix
index 373ebbeb02f..2554ae47a41 100644
--- a/pkgs/tools/package-management/opkg-utils/default.nix
+++ b/pkgs/tools/package-management/opkg-utils/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit }:
+{ lib, stdenv, fetchgit }:
 
 stdenv.mkDerivation {
   name = "opkg-utils-20141030";
@@ -14,7 +14,7 @@ stdenv.mkDerivation {
     makeFlagsArray+=(PREFIX="$out")
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Helper scripts for use with the opkg package manager";
     homepage = "http://git.yoctoproject.org/cgit/cgit.cgi/opkg-utils/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/package-management/opkg/default.nix b/pkgs/tools/package-management/opkg/default.nix
index 9195804a43d..631274cb722 100644
--- a/pkgs/tools/package-management/opkg/default.nix
+++ b/pkgs/tools/package-management/opkg/default.nix
@@ -1,18 +1,18 @@
-{ stdenv, fetchurl, pkgconfig, curl, gpgme, libarchive, bzip2, lzma, attr, acl, libxml2
+{ lib, stdenv, fetchurl, pkg-config, curl, gpgme, libarchive, bzip2, xz, attr, acl, libxml2
 , autoreconfHook }:
 
 stdenv.mkDerivation rec {
-  version = "0.4.3";
+  version = "0.4.4";
   pname = "opkg";
   src = fetchurl {
     url = "https://downloads.yoctoproject.org/releases/opkg/opkg-${version}.tar.gz";
-    sha256 = "06278gmb26b9nl8l328cc2c2mhfi0dhac65syws17kf09f2m596x";
+    sha256 = "sha256-IhesxYuOsxMAYx66514iLrxwDJwc9kCAiHBdGaRyyDk=";
   };
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook ];
-  buildInputs = [ curl gpgme libarchive bzip2 lzma attr acl libxml2 ];
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  buildInputs = [ curl gpgme libarchive bzip2 xz attr acl libxml2 ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A lightweight package management system based upon ipkg";
     homepage = "https://git.yoctoproject.org/cgit/cgit.cgi/opkg/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/package-management/packagekit/default.nix b/pkgs/tools/package-management/packagekit/default.nix
index 05877979e9c..b62597e7e50 100644
--- a/pkgs/tools/package-management/packagekit/default.nix
+++ b/pkgs/tools/package-management/packagekit/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchFromGitHub, lib
-, intltool, glib, pkgconfig, polkit, python3, sqlite
+, intltool, glib, pkg-config, polkit, python3, sqlite
 , gobject-introspection, vala, gtk-doc, autoreconfHook, autoconf-archive
 , nix, enableNixBackend ? false, boost
 , enableCommandNotFound ? false
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
   propagatedBuildInputs =
     [ sqlite boost ]
     ++ lib.optional enableNixBackend nix;
-  nativeBuildInputs = [ vala intltool pkgconfig autoreconfHook autoconf-archive gtk-doc ];
+  nativeBuildInputs = [ vala intltool pkg-config autoreconfHook autoconf-archive gtk-doc ];
 
   preAutoreconf = ''
     gtkdocize
diff --git a/pkgs/tools/package-management/packagekit/qt.nix b/pkgs/tools/package-management/packagekit/qt.nix
index 987c834f505..d1d135c1579 100644
--- a/pkgs/tools/package-management/packagekit/qt.nix
+++ b/pkgs/tools/package-management/packagekit/qt.nix
@@ -1,22 +1,22 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig
+{ stdenv, fetchFromGitHub, cmake, pkg-config
 , qttools, packagekit }:
 
 stdenv.mkDerivation rec {
   pname = "packagekit-qt";
-  version = "1.0.1";
+  version = "1.0.2";
 
   src = fetchFromGitHub {
     owner  = "hughsie";
     repo   = "PackageKit-Qt";
     rev    = "v${version}";
-    sha256 = "1ls6mn9abpwzw5wjgmslc5h9happj3516y1q67imppczk8g9h2yk";
+    sha256 = "1d20r503msw1vix3nb6a8bmdqld7fj8k9jk33bkqsc610a2zsms6";
   };
 
   buildInputs = [ packagekit ];
 
-  nativeBuildInputs = [ cmake pkgconfig qttools ];
+  nativeBuildInputs = [ cmake pkg-config qttools ];
 
-  enableParallelBuilding = true;
+  dontWrapQtApps = true;
 
   meta = packagekit.meta // {
     description = "System to facilitate installing and updating packages - Qt";
diff --git a/pkgs/tools/package-management/pacman/default.nix b/pkgs/tools/package-management/pacman/default.nix
index 980f0d1e0c9..48fa91c7966 100644
--- a/pkgs/tools/package-management/pacman/default.nix
+++ b/pkgs/tools/package-management/pacman/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, lib, fetchurl, pkgconfig, m4, perl, libarchive, openssl, zlib, bzip2,
-lzma, curl, runtimeShell }:
+{ stdenv, lib, fetchurl, pkg-config, m4, perl, libarchive, openssl, zlib, bzip2,
+xz, curl, runtimeShell }:
 
 stdenv.mkDerivation rec {
   pname = "pacman";
@@ -23,8 +23,8 @@ stdenv.mkDerivation rec {
 
   installFlags = [ "sysconfdir=${placeholder "out"}/etc" ];
 
-  nativeBuildInputs = [ pkgconfig m4 ];
-  buildInputs = [ curl perl libarchive openssl zlib bzip2 lzma ];
+  nativeBuildInputs = [ pkg-config m4 ];
+  buildInputs = [ curl perl libarchive openssl zlib bzip2 xz ];
 
   postFixup = ''
     substituteInPlace $out/bin/repo-add \
diff --git a/pkgs/tools/package-management/protontricks/default.nix b/pkgs/tools/package-management/protontricks/default.nix
index fe7f41c4d08..cbe10e85f66 100644
--- a/pkgs/tools/package-management/protontricks/default.nix
+++ b/pkgs/tools/package-management/protontricks/default.nix
@@ -1,53 +1,56 @@
-{ stdenv, lib, buildPythonApplication, fetchFromGitHub
-, setuptools_scm, vdf
-, wine, winetricks, zenity
-, pytest
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, setuptools-scm
+, vdf
+, bash
+, steam-run
+, winetricks
+, zenity
+, pytestCheckHook
 }:
 
 buildPythonApplication rec {
   pname = "protontricks";
-  version = "1.4.1";
+  version = "1.5.2";
 
   src = fetchFromGitHub {
     owner = "Matoking";
     repo = pname;
     rev = version;
-    sha256 = "083ncg6yjd7s3dx91zd52w166x709mnxknwwr78ggka8d8vlyi0b";
+    hash = "sha256-Vmxb8SjPhcSqFzykHRPsLtAoSwomN+se+icwHkucbX8=";
   };
 
-  # Fix interpreter in mock run.sh for tests
-  postPatch = ''
-    substituteInPlace tests/conftest.py \
-      --replace '#!/bin/bash' '#!${stdenv.shell}' \
-  '';
-
-  preBuild = ''
-    export SETUPTOOLS_SCM_PRETEND_VERSION="${version}"
-  '';
+  patches = [
+    # Use steam-run to run Proton binaries
+    ./steam-run.patch
+  ];
 
-  nativeBuildInputs = [ setuptools_scm ];
+  SETUPTOOLS_SCM_PRETEND_VERSION = version;
+  nativeBuildInputs = [ setuptools-scm ];
   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 zenity ]}"
+    "--prefix PATH : ${lib.makeBinPath [
+      bash
+      steam-run
+      (winetricks.override {
+        # Remove default build of wine to reduce closure size.
+        # Falls back to wine in PATH when --no-runtime is passed.
+        wine = null;
+      })
+      zenity
+    ]}"
   ];
 
-  checkInputs = [ pytest ];
-  checkPhase = "pytest";
+  checkInputs = [ pytestCheckHook ];
+  pythonImportsCheck = [ "protontricks" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ kira-bruneau ];
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/package-management/protontricks/steam-run.patch b/pkgs/tools/package-management/protontricks/steam-run.patch
new file mode 100644
index 00000000000..82ddec1abb8
--- /dev/null
+++ b/pkgs/tools/package-management/protontricks/steam-run.patch
@@ -0,0 +1,349 @@
+diff --git a/src/protontricks/cli.py b/src/protontricks/cli.py
+index cc65a03..5c3fc7a 100755
+--- a/src/protontricks/cli.py
++++ b/src/protontricks/cli.py
+@@ -15,8 +15,8 @@ import sys
+ 
+ from . import __version__
+ from .gui import select_steam_app_with_gui
+-from .steam import (find_legacy_steam_runtime_path, find_proton_app,
+-                    find_steam_path, get_steam_apps, get_steam_lib_paths)
++from .steam import (find_proton_app, find_steam_path, get_steam_apps,
++                    get_steam_lib_paths)
+ from .util import run_command, is_flatpak_sandbox
+ from .winetricks import get_winetricks_path
+ 
+@@ -77,8 +77,7 @@ def main(args=None):
+             "WINE: path to a custom 'wine' executable\n"
+             "WINESERVER: path to a custom 'wineserver' executable\n"
+             "STEAM_RUNTIME: 1 = enable Steam Runtime, 0 = disable Steam "
+-            "Runtime, valid path = custom Steam Runtime path, "
+-            "empty = enable automatically (default)"
++            "Runtime, empty = enable automatically (default)"
+         ),
+         formatter_class=argparse.RawTextHelpFormatter
+     )
+@@ -148,18 +147,9 @@ def main(args=None):
+         )
+         sys.exit(-1)
+ 
+-    # 2. Find the pre-installed legacy Steam Runtime if enabled
+-    legacy_steam_runtime_path = None
+-    use_steam_runtime = True
+-
++    # 2. Use Steam Runtime if enabled
+     if os.environ.get("STEAM_RUNTIME", "") != "0" and not args.no_runtime:
+-        legacy_steam_runtime_path = find_legacy_steam_runtime_path(
+-            steam_root=steam_root
+-        )
+-
+-        if not legacy_steam_runtime_path:
+-            print("Steam Runtime was enabled but couldn't be found!")
+-            sys.exit(-1)
++        use_steam_runtime = True
+     else:
+         use_steam_runtime = False
+         logger.info("Steam Runtime disabled.")
+@@ -222,7 +212,6 @@ def main(args=None):
+             proton_app=proton_app,
+             steam_app=steam_app,
+             use_steam_runtime=use_steam_runtime,
+-            legacy_steam_runtime_path=legacy_steam_runtime_path,
+             command=[winetricks_path, "--gui"],
+             use_bwrap=use_bwrap
+         )
+@@ -292,7 +281,6 @@ def main(args=None):
+             proton_app=proton_app,
+             steam_app=steam_app,
+             use_steam_runtime=use_steam_runtime,
+-            legacy_steam_runtime_path=legacy_steam_runtime_path,
+             use_bwrap=use_bwrap,
+             command=[winetricks_path] + args.winetricks_command)
+     elif args.command:
+@@ -302,7 +290,6 @@ def main(args=None):
+             steam_app=steam_app,
+             command=args.command,
+             use_steam_runtime=use_steam_runtime,
+-            legacy_steam_runtime_path=legacy_steam_runtime_path,
+             use_bwrap=use_bwrap,
+             # Pass the command directly into the shell *without*
+             # escaping it
+diff --git a/src/protontricks/steam.py b/src/protontricks/steam.py
+index 4ab778b..f3f5f99 100644
+--- a/src/protontricks/steam.py
++++ b/src/protontricks/steam.py
+@@ -12,8 +12,8 @@ from .util import lower_dict
+ 
+ __all__ = (
+     "COMMON_STEAM_DIRS", "SteamApp", "find_steam_path",
+-    "find_legacy_steam_runtime_path", "get_appinfo_sections",
+-    "get_proton_appid", "find_steam_proton_app", "find_appid_proton_prefix",
++    "get_appinfo_sections", "get_proton_appid",
++    "find_steam_proton_app", "find_appid_proton_prefix",
+     "find_proton_app", "get_steam_lib_paths", "get_compat_tool_dirs",
+     "get_custom_proton_installations_in_dir", "get_custom_proton_installations",
+     "find_current_steamid3", "get_appid_from_shortcut",
+@@ -300,37 +300,6 @@ def find_steam_path():
+     return None, None
+ 
+ 
+-def find_legacy_steam_runtime_path(steam_root):
+-    """
+-    Find the legacy Steam Runtime either using the STEAM_RUNTIME env or
+-    steam_root
+-    """
+-    env_steam_runtime = os.environ.get("STEAM_RUNTIME", "")
+-
+-    if env_steam_runtime == "0":
+-        # User has disabled Steam Runtime
+-        logger.info("STEAM_RUNTIME is 0. Disabling Steam Runtime.")
+-        return None
+-    elif env_steam_runtime and Path(env_steam_runtime).is_dir():
+-        # User has a custom Steam Runtime
+-        logger.info(
+-            "Using custom Steam Runtime at %s", env_steam_runtime)
+-        return Path(env_steam_runtime)
+-    elif env_steam_runtime in ["1", ""]:
+-        # User has enabled Steam Runtime or doesn't have STEAM_RUNTIME set;
+-        # default to enabled Steam Runtime in either case
+-        steam_runtime_path = steam_root / "ubuntu12_32" / "steam-runtime"
+-
+-        logger.info(
+-            "Using default Steam Runtime at %s", str(steam_runtime_path))
+-        return steam_runtime_path
+-
+-    logger.error(
+-        "Path in STEAM_RUNTIME doesn't point to a valid Steam Runtime!")
+-
+-    return None
+-
+-
+ APPINFO_STRUCT_HEADER = "<4sL"
+ APPINFO_STRUCT_SECTION = "<LLLLQ20sL"
+ 
+diff --git a/src/protontricks/util.py b/src/protontricks/util.py
+index b6617de..85f8b2d 100644
+--- a/src/protontricks/util.py
++++ b/src/protontricks/util.py
+@@ -4,15 +4,14 @@ import shlex
+ import shutil
+ import stat
+ from pathlib import Path
+-from subprocess import check_output, run, PIPE
++from subprocess import run, PIPE
+ 
+ __all__ = (
+     "SUPPORTED_STEAM_RUNTIMES", "is_flatpak_sandbox", "lower_dict",
+-    "get_legacy_runtime_library_paths", "get_host_library_paths",
+-    "RUNTIME_ROOT_GLOB_PATTERNS", "get_runtime_library_paths",
+-    "WINE_SCRIPT_RUNTIME_V1_TEMPLATE",
+-    "WINE_SCRIPT_RUNTIME_V2_TEMPLATE",
+-    "create_wine_bin_dir", "run_command"
++    "get_host_library_paths", "RUNTIME_ROOT_GLOB_PATTERNS",
++    "get_runtime_library_paths", "WINE_SCRIPT_RUNTIME_V1_TEMPLATE",
++    "WINE_SCRIPT_RUNTIME_V2_TEMPLATE", "create_wine_bin_dir",
++    "run_command"
+ )
+ 
+ logger = logging.getLogger("protontricks")
+@@ -46,24 +45,6 @@ def lower_dict(d):
+     return {k.lower(): _lower_value(v) for k, v in d.items()}
+ 
+ 
+-def get_legacy_runtime_library_paths(legacy_steam_runtime_path, proton_app):
+-    """
+-    Get LD_LIBRARY_PATH value to use when running a command using Steam Runtime
+-    """
+-    steam_runtime_paths = check_output([
+-        str(legacy_steam_runtime_path / "run.sh"),
+-        "--print-steam-runtime-library-paths"
+-    ])
+-    steam_runtime_paths = str(steam_runtime_paths, "utf-8")
+-    # Add Proton installation directory first into LD_LIBRARY_PATH
+-    # so that libwine.so.1 is picked up correctly (see issue #3)
+-    return "".join([
+-        str(proton_app.proton_dist_path / "lib"), os.pathsep,
+-        str(proton_app.proton_dist_path / "lib64"), os.pathsep,
+-        steam_runtime_paths
+-    ])
+-
+-
+ def get_host_library_paths():
+     """
+     Get host library paths to use when creating the LD_LIBRARY_PATH environment
+@@ -75,7 +56,7 @@ def get_host_library_paths():
+     # Since that command is unavailable with newer Steam Runtime releases,
+     # do it ourselves here.
+     result = run(
+-        ["/sbin/ldconfig", "-XNv"],
++        ["steam-run", "ldconfig", "-XNv"],
+         check=True, stdout=PIPE, stderr=PIPE
+     )
+     lines = result.stdout.decode("utf-8").split("\n")
+@@ -93,7 +74,7 @@ RUNTIME_ROOT_GLOB_PATTERNS = (
+ )
+ 
+ 
+-def get_runtime_library_paths(proton_app, use_bwrap=True):
++def get_runtime_library_paths(proton_app, proton_app_only=True):
+     """
+     Get LD_LIBRARY_PATH value to use when running a command using Steam Runtime
+     """
+@@ -116,7 +97,7 @@ def get_runtime_library_paths(proton_app, use_bwrap=True):
+             )
+         )
+ 
+-    if use_bwrap:
++    if proton_app_only:
+         return "".join([
+             str(proton_app.proton_dist_path / "lib"), os.pathsep,
+             str(proton_app.proton_dist_path / "lib64"), os.pathsep
+@@ -132,14 +113,19 @@ def get_runtime_library_paths(proton_app, use_bwrap=True):
+     ])
+ 
+ 
+-WINE_SCRIPT_RUNTIME_V1_TEMPLATE = (
+-    "#!/bin/bash\n"
+-    "# Helper script created by Protontricks to run Wine binaries using Steam Runtime\n"
+-    "export LD_LIBRARY_PATH=\"$PROTON_LD_LIBRARY_PATH\"\n"
+-    "exec \"$PROTON_DIST_PATH\"/bin/{name} \"$@\""
+-)
++# Add Proton installation directory first into LD_LIBRARY_PATH
++# so that libwine.so.1 is picked up correctly (see issue #3)
++WINE_SCRIPT_RUNTIME_V1_TEMPLATE = """#!/usr/bin/env -S steam-run bash
++# Helper script created by Protontricks to run Wine binaries using Steam Runtime
++export LD_LIBRARY_PATH="$PROTON_LD_LIBRARY_PATH":"$LD_LIBRARY_PATH"
++exec "$PROTON_DIST_PATH"/bin/{name} "$@"
++"""
+ 
+-WINE_SCRIPT_RUNTIME_V2_TEMPLATE = """#!/bin/bash
++# The run script calls pressure-vessel-unruntime which will unset
++# LD_LIBRARY_PATH defined by steam-run. This will cause Pressure
++# Vessel to segfault, so just call pressure-vessel-wrap directly
++# instead.
++WINE_SCRIPT_RUNTIME_V2_TEMPLATE = """#!/usr/bin/env bash
+ # Helper script created by Protontricks to run Wine binaries using Steam Runtime
+ set -o errexit
+ 
+@@ -207,7 +193,10 @@ if [[ -n "$PROTONTRICKS_INSIDE_STEAM_RUNTIME" ]]; then
+   export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PROTON_LD_LIBRARY_PATH"
+   "$PROTON_DIST_PATH"/bin/{name} "$@"
+ else
+-  exec "$STEAM_RUNTIME_PATH"/run --share-pid --batch \
++  exec steam-run "$STEAM_RUNTIME_PATH"/pressure-vessel/bin/pressure-vessel-wrap \
++  --runtime-archive=$(echo "$STEAM_RUNTIME_PATH"/*runtime.tar.gz) \
++  --variable-dir="${{PRESSURE_VESSEL_VARIABLE_DIR:-$STEAM_RUNTIME_PATH/var}}" \
++  --share-pid --batch \
+   "${{mount_params[@]}}" -- \
+   env PROTONTRICKS_INSIDE_STEAM_RUNTIME=1 \
+   "$PROTONTRICKS_PROXY_SCRIPT_PATH" "$@"
+@@ -273,7 +262,6 @@ def create_wine_bin_dir(proton_app, use_bwrap=True):
+ def run_command(
+         winetricks_path, proton_app, steam_app, command,
+         use_steam_runtime=False,
+-        legacy_steam_runtime_path=None,
+         use_bwrap=True,
+         **kwargs):
+     """Run an arbitrary command with the correct environment variables
+@@ -350,7 +338,7 @@ def run_command(
+             os.environ["STEAM_RUNTIME_PATH"] = \
+                 str(proton_app.required_tool_app.install_path)
+             os.environ["PROTON_LD_LIBRARY_PATH"] = \
+-                get_runtime_library_paths(proton_app, use_bwrap=use_bwrap)
++                get_runtime_library_paths(proton_app, proton_app_only=use_bwrap)
+ 
+             runtime_name = proton_app.required_tool_app.name
+             logger.info(
+@@ -373,11 +361,8 @@ def run_command(
+                     "Current Steam Runtime not recognized by Protontricks."
+                 )
+         else:
+-            # Legacy Steam Runtime requires a different LD_LIBRARY_PATH
+             os.environ["PROTON_LD_LIBRARY_PATH"] = \
+-                get_legacy_runtime_library_paths(
+-                    legacy_steam_runtime_path, proton_app
+-                )
++                get_runtime_library_paths(proton_app, proton_app_only=True)
+ 
+         # When Steam Runtime is enabled, create a set of helper scripts
+         # that load the underlying Proton Wine executables with Steam Runtime
+@@ -385,8 +370,6 @@ def run_command(
+         wine_bin_dir = create_wine_bin_dir(
+             proton_app=proton_app, use_bwrap=use_bwrap
+         )
+-        os.environ["LEGACY_STEAM_RUNTIME_PATH"] = \
+-            str(legacy_steam_runtime_path)
+ 
+         os.environ["PATH"] = "".join([
+             str(wine_bin_dir), os.pathsep, os.environ["PATH"]
+diff --git a/tests/test_cli.py b/tests/test_cli.py
+index 580bb5b..3a05ad3 100644
+--- a/tests/test_cli.py
++++ b/tests/test_cli.py
+@@ -117,15 +117,10 @@ class TestCLIRun:
+         assert str(command.args[0]).endswith(".local/bin/winetricks")
+         assert command.args[1] == "winecfg"
+         assert command.env["PATH"].startswith(str(wine_bin_dir))
+-        assert (
+-            "fake_steam_runtime/lib64" in command.env["PROTON_LD_LIBRARY_PATH"]
+-        )
+         assert command.env["WINE"] == str(wine_bin_dir / "wine")
+         assert command.env["WINELOADER"] == str(wine_bin_dir / "wine")
+         assert command.env["WINESERVER"] == str(wine_bin_dir / "wineserver")
+ 
+-        assert command.env["LEGACY_STEAM_RUNTIME_PATH"] == \
+-            str(steam_runtime_dir / "steam-runtime")
+         assert "STEAM_RUNTIME_PATH" not in command.env
+ 
+         for name in ("wine", "wineserver"):
+@@ -166,16 +161,14 @@ class TestCLIRun:
+         assert command.env["PATH"].startswith(str(wine_bin_dir))
+ 
+         # Compared to the traditional Steam Runtime, PROTON_LD_LIBRARY_PATH
+-        # will be different
++        # will be the same (it would be different without steam-run.patch)
+         proton_install_path = Path(proton_app.install_path)
+         assert command.env["PROTON_LD_LIBRARY_PATH"] == "".join([
+             str(proton_install_path / "dist" / "lib"), os.pathsep,
+             str(proton_install_path / "dist" / "lib64"), os.pathsep
+         ])
+ 
+-        # Environment variables for both legacy and new Steam Runtime exist
+-        assert command.env["LEGACY_STEAM_RUNTIME_PATH"] == \
+-            str(steam_runtime_dir / "steam-runtime")
++        # Environment variable for new Steam Runtime exists
+         assert command.env["STEAM_RUNTIME_PATH"] == \
+             str(steam_runtime_soldier.install_path)
+ 
+@@ -239,9 +232,7 @@ class TestCLIRun:
+             str(runtime_root / "lib" / "x86_64-linux-gnu")
+         ]))
+ 
+-        # Environment variables for both legacy and new Steam Runtime exist
+-        assert command.env["LEGACY_STEAM_RUNTIME_PATH"] == \
+-            str(steam_runtime_dir / "steam-runtime")
++        # Environment variable for new Steam Runtime exists
+         assert command.env["STEAM_RUNTIME_PATH"] == \
+             str(steam_runtime_soldier.install_path)
+ 
+@@ -324,20 +315,6 @@ class TestCLIRun:
+ 
+         assert "Zenity is not installed" in result
+ 
+-    def test_run_steam_runtime_not_found(
+-            self, cli, steam_dir, steam_app_factory):
+-        """
+-        Try performing a command with Steam Runtime enabled but no
+-        available Steam Runtime installation
+-        """
+-        steam_app_factory(name="Fake game 1", appid=10)
+-        result = cli(
+-            ["10", "winecfg"], env={"STEAM_RUNTIME": "invalid/path"},
+-            expect_exit=True
+-        )
+-
+-        assert "Steam Runtime was enabled but couldn't be found" in result
+-
+     def test_run_proton_not_found(self, cli, steam_dir, steam_app_factory):
+         steam_app_factory(name="Fake game 1", appid=10)
+         result = cli(["10", "winecfg"], expect_exit=True)
diff --git a/pkgs/tools/package-management/python2nix/default.nix b/pkgs/tools/package-management/python2nix/default.nix
deleted file mode 100644
index 675ec61f4db..00000000000
--- a/pkgs/tools/package-management/python2nix/default.nix
+++ /dev/null
@@ -1,19 +0,0 @@
-{ 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/pkgs/tools/package-management/reuse/default.nix b/pkgs/tools/package-management/reuse/default.nix
index 01a1bf4a933..5b49cbf023b 100644
--- a/pkgs/tools/package-management/reuse/default.nix
+++ b/pkgs/tools/package-management/reuse/default.nix
@@ -1,19 +1,17 @@
 { lib, python3Packages, fetchFromGitHub }:
 
-with python3Packages;
-
-buildPythonApplication rec {
+python3Packages.buildPythonApplication rec {
   pname = "reuse";
-  version = "0.11.1";
+  version = "0.13.0";
 
   src = fetchFromGitHub {
     owner = "fsfe";
     repo = "reuse-tool";
     rev = "v${version}";
-    sha256 = "0wkk107s0bpvbknapns0qdzf8csrzc2j6gliy6pa8z208fcfzyy3";
+    sha256 = "0didqsbvrn06aylp71jl3hqb4rd95d8s613xz6jw6mngyjqv0hq2";
   };
 
-  propagatedBuildInputs = [
+  propagatedBuildInputs = with python3Packages; [
     binaryornot
     boolean-py
     debian
@@ -21,10 +19,10 @@ buildPythonApplication rec {
     license-expression
     requests
     setuptools
-    setuptools_scm
+    setuptools-scm
   ];
 
-  checkInputs = [ pytest ];
+  checkInputs = with python3Packages; [ pytestCheckHook ];
 
   meta = with lib; {
     description = "A tool for compliance with the REUSE Initiative recommendations";
diff --git a/pkgs/tools/package-management/rpm/default.nix b/pkgs/tools/package-management/rpm/default.nix
index fee282de52f..f942efe6dd7 100644
--- a/pkgs/tools/package-management/rpm/default.nix
+++ b/pkgs/tools/package-management/rpm/default.nix
@@ -1,25 +1,27 @@
-{ stdenv, lib
-, pkgconfig, autoreconfHook
-, fetchurl, cpio, zlib, bzip2, file, elfutils, libbfd, libarchive, nspr, nss, popt, db, xz, python, lua
+{ stdenv, lib, fetchpatch
+, pkg-config, autoreconfHook
+, fetchurl, cpio, zlib, bzip2, file, elfutils, libbfd, libgcrypt, libarchive, nspr, nss, popt, db, xz, python, lua, llvmPackages
+, sqlite, zstd
 }:
 
 stdenv.mkDerivation rec {
   pname = "rpm";
-  version = "4.15.1";
+  version = "4.16.1.3";
 
   src = fetchurl {
     url = "http://ftp.rpm.org/releases/rpm-${lib.versions.majorMinor version}.x/rpm-${version}.tar.bz2";
-    sha256 = "0c6jwail90fhha3bpx70w4a2i8ycxwvnx6zwxm121l8wc3wlbvyx";
+    sha256 = "07g2g0adgjm29wqy94iqhpp5dk0hacfw1yf7kzycrrxnfbwwfgai";
   };
 
   outputs = [ "out" "dev" "man" ];
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
-  buildInputs = [ cpio zlib bzip2 file libarchive nspr nss db xz python lua ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ cpio zlib zstd bzip2 file libarchive libgcrypt nspr nss db xz python lua sqlite ]
+                ++ lib.optionals stdenv.cc.isClang [ llvmPackages.openmp ];
 
   # 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;
+    ++ lib.optional stdenv.isLinux elfutils;
 
   NIX_CFLAGS_COMPILE = "-I${nspr.dev}/include/nspr -I${nss.dev}/include/nss";
 
@@ -27,14 +29,24 @@ stdenv.mkDerivation rec {
     "--with-external-db"
     "--with-lua"
     "--enable-python"
+    "--enable-ndb"
+    "--enable-sqlite"
+    "--enable-zstd"
     "--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}
+  # Small fixes for ndb on darwin
+  # https://github.com/rpm-software-management/rpm/pull/1465
+  patches = [
+    (fetchpatch {
+      name = "darwin-support.patch";
+      url = "https://github.com/rpm-software-management/rpm/commit/2d20e371d5e38f4171235e5c64068cad30bda557.patch";
+      sha256 = "0p3j5q5a4hl357maf7018k3826jhcpqg6wfrnccrkv30g0ayk171";
+    })
+  ];
 
+  postPatch = ''
     substituteInPlace Makefile.am --replace '@$(MKDIR_P) $(DESTDIR)$(localstatedir)/tmp' ""
   '';
 
@@ -60,9 +72,9 @@ stdenv.mkDerivation rec {
     ln -sf $out/bin/{rpm,rpmverify}
   '';
 
-  meta = with stdenv.lib; {
-    homepage = "http://www.rpm.org/";
-    license = licenses.gpl2;
+  meta = with lib; {
+    homepage = "https://www.rpm.org/";
+    license = with licenses; [ gpl2Plus lgpl21Plus ];
     description = "The RPM Package Manager";
     maintainers = with maintainers; [ copumpkin ];
     platforms = platforms.linux ++ platforms.darwin;
diff --git a/pkgs/tools/package-management/smlpkg/default.nix b/pkgs/tools/package-management/smlpkg/default.nix
new file mode 100644
index 00000000000..f3f7750f1bd
--- /dev/null
+++ b/pkgs/tools/package-management/smlpkg/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, mlton, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "smlpkg";
+  version = "0.1.5";
+
+  src = fetchFromGitHub {
+    owner = "diku-dk";
+    repo = "smlpkg";
+    rev = "v${version}";
+    sha256 = "1xmbdnfc34ia0a78dhkfv5jyadxndinhw8c47l1mjd4l7n8vqnph";
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ mlton ];
+
+  # Set as an environment variable in all the phase scripts.
+  MLCOMP = "mlton";
+
+  buildFlags = ["all"];
+  installFlags = ["prefix=$(out)"];
+
+  doCheck = true;
+
+  checkInputs = [ unzip ];
+
+  # We cannot run the pkgtests, as Nix does not allow network
+  # connections.
+  checkPhase = ''
+    runHook preCheck
+    make -C src test
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "Generic package manager for Standard ML libraries and programs";
+    homepage = "https://github.com/diku-dk/smlpkg";
+    license = licenses.mit;
+    maintainers = with maintainers; [ athas ];
+  };
+}
diff --git a/pkgs/tools/package-management/xbps/default.nix b/pkgs/tools/package-management/xbps/default.nix
index 108b64bd8b2..46aaf4a94d6 100644
--- a/pkgs/tools/package-management/xbps/default.nix
+++ b/pkgs/tools/package-management/xbps/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, which, zlib, openssl, libarchive }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, which, zlib, openssl, libarchive }:
 
 stdenv.mkDerivation rec {
   pname = "xbps";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
     sha256 = "0pab3xf97y4wqlyrb92zxd3cfsrbnlx6pssbw4brgwcxccw9jrhy";
   };
 
-  nativeBuildInputs = [ pkgconfig which ];
+  nativeBuildInputs = [ pkg-config which ];
 
   buildInputs = [ zlib openssl libarchive ];
 
@@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/security/1password-gui/default.nix b/pkgs/tools/security/1password-gui/default.nix
deleted file mode 100644
index 3373ab70b14..00000000000
--- a/pkgs/tools/security/1password-gui/default.nix
+++ /dev/null
@@ -1,68 +0,0 @@
-{ stdenv
-, fetchurl
-, appimageTools
-, makeWrapper
-, electron
-, openssl
-}:
-
-stdenv.mkDerivation rec {
-  pname = "1password";
-  version = "0.8.2-1";
-
-  src = fetchurl {
-    url = "https://onepassword.s3.amazonaws.com/linux/appimage/${pname}-${version}.AppImage";
-    sha256 = "0gxq8xrr20jgp7k0sq5a9k63mz94zb00yvc9jw1zhl2q70ji24sa";
-  };
-
-  nativeBuildInputs = [ makeWrapper ];
-
-  appimageContents = appimageTools.extractType2 {
-    name = "${pname}-${version}";
-    inherit src;
-  };
-
-  dontUnpack = true;
-  dontConfigure = true;
-  dontBuild = true;
-
-  installPhase = let
-    runtimeLibs = [
-      openssl.out
-      stdenv.cc.cc
-    ];
-  in ''
-    mkdir -p $out/bin $out/share/1password
-
-    # Applications files.
-    cp -a ${appimageContents}/{locales,resources} $out/share/${pname}
-
-    # Desktop file.
-    install -Dt $out/share/applications ${appimageContents}/${pname}.desktop
-    substituteInPlace $out/share/applications/${pname}.desktop \
-      --replace 'Exec=AppRun' 'Exec=${pname}'
-
-    # Icons.
-    cp -a ${appimageContents}/usr/share/icons $out/share
-
-    # Wrap the application with Electron.
-    makeWrapper "${electron}/bin/electron" "$out/bin/${pname}" \
-      --add-flags "$out/share/${pname}/resources/app.asar" \
-      --prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath runtimeLibs}"
-  '';
-
-  meta = with stdenv.lib; {
-    description = "Multi-platform password manager";
-    longDescription = ''
-      1Password is a multi-platform package manager.
-
-      The Linux version is currently a development preview and can
-      only be used to search, view, and copy items. However items
-      cannot be created or edited.
-    '';
-    homepage = "https://1password.com/";
-    license = licenses.unfree;
-    maintainers = with maintainers; [ danieldk ];
-    platforms = [ "x86_64-linux" ];
-  };
-}
diff --git a/pkgs/tools/security/2fa/default.nix b/pkgs/tools/security/2fa/default.nix
index 7b6048660c4..b06454e736c 100644
--- a/pkgs/tools/security/2fa/default.nix
+++ b/pkgs/tools/security/2fa/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
-  version = "1.1.0";
+  version = "1.2.0";
   pname = "2fa";
 
   goPackagePath = "rsc.io/2fa";
@@ -10,10 +10,10 @@ buildGoPackage rec {
     owner = "rsc";
     repo = "2fa";
     rev = "v${version}";
-    sha256 = "0827vl2bxd6m2rbj00x7857cs7cic3mlg5nlhqzd0n73dm5vk2za";
+    sha256 = "sha256-cB5iADZwvJQwwK1GockE2uicFlqFMEAY6xyeXF5lnUY=";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://rsc.io/2fa";
     description = "Two-factor authentication on the command line";
     maintainers = with maintainers; [ rvolosatovs ];
diff --git a/pkgs/tools/security/acsccid/default.nix b/pkgs/tools/security/acsccid/default.nix
index 5b79b3db705..da461a96957 100644
--- a/pkgs/tools/security/acsccid/default.nix
+++ b/pkgs/tools/security/acsccid/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , autoconf
 , automake
@@ -6,7 +6,7 @@
 , gettext
 , flex
 , perl
-, pkgconfig
+, pkg-config
 , pcsclite
 , libusb1
 , libiconv
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     autoconf
     automake
     libtool
@@ -36,7 +36,7 @@ stdenv.mkDerivation rec {
   buildInputs = [
     pcsclite
     libusb1
-  ] ++ stdenv.lib.optionals stdenv.isDarwin [
+  ] ++ lib.optionals stdenv.isDarwin [
     libiconv
   ];
 
@@ -60,8 +60,8 @@ stdenv.mkDerivation rec {
     autoconf
   '';
 
-  meta = with stdenv.lib; {
-    description = "acsccid is a PC/SC driver for Linux/Mac OS X and it supports ACS CCID smart card readers.";
+  meta = with lib; {
+    description = "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
diff --git a/pkgs/tools/security/aespipe/default.nix b/pkgs/tools/security/aespipe/default.nix
index e25416e55b8..dcef28f2258 100644
--- a/pkgs/tools/security/aespipe/default.nix
+++ b/pkgs/tools/security/aespipe/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, sharutils, makeWrapper }:
+{ lib, stdenv, fetchurl, sharutils, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "aespipe";
@@ -16,14 +16,14 @@ stdenv.mkDerivation rec {
   postInstall = ''
     cp bz2aespipe $out/bin
     wrapProgram $out/bin/bz2aespipe \
-     --prefix PATH : $out/bin:${stdenv.lib.makeBinPath [ sharutils ]}
+     --prefix PATH : $out/bin:${lib.makeBinPath [ sharutils ]}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "AES encrypting or decrypting pipe";
     homepage = "http://loop-aes.sourceforge.net/aespipe.README";
     license = licenses.gpl2;
     maintainers = [ maintainers.goibhniu ];
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/security/afl/default.nix b/pkgs/tools/security/afl/default.nix
index 091b52bfcf0..ccdbd78716d 100644
--- a/pkgs/tools/security/afl/default.nix
+++ b/pkgs/tools/security/afl/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, callPackage, makeWrapper
+{ lib, stdenv, fetchFromGitHub, callPackage, makeWrapper
 , clang, llvm, which, libcgroup
 }:
 
@@ -21,7 +21,7 @@ let
 
     # Note: libcgroup isn't needed for building, just for the afl-cgroup
     # script.
-    nativeBuildInputs = [ makeWrapper which ];
+    nativeBuildInputs = [ makeWrapper which llvm.dev ];
     buildInputs = [ llvm ];
 
     makeFlags = [ "PREFIX=$(out)" ];
@@ -74,9 +74,9 @@ let
         testing regimes down the road.
       '';
       homepage    = "https://lcamtuf.coredump.cx/afl/";
-      license     = stdenv.lib.licenses.asl20;
+      license     = lib.licenses.asl20;
       platforms   = ["x86_64-linux" "i686-linux"];
-      maintainers = with stdenv.lib.maintainers; [ thoughtpolice ris ];
+      maintainers = with lib.maintainers; [ thoughtpolice ris ];
     };
   };
 in afl
diff --git a/pkgs/tools/security/afl/libdislocator.nix b/pkgs/tools/security/afl/libdislocator.nix
index 103786d1244..400464c0056 100644
--- a/pkgs/tools/security/afl/libdislocator.nix
+++ b/pkgs/tools/security/afl/libdislocator.nix
@@ -1,7 +1,7 @@
-{ stdenv, afl}:
+{ lib, stdenv, afl}:
 
 stdenv.mkDerivation {
-  version = stdenv.lib.getVersion afl;
+  version = lib.getVersion afl;
   pname = "libdislocator";
 
   src = afl.src;
@@ -21,14 +21,14 @@ stdenv.mkDerivation {
     chmod +x $out/bin/get-libdislocator-so
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://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;
+    license = lib.licenses.asl20;
     maintainers = with maintainers; [ ris ];
   };
 }
diff --git a/pkgs/tools/security/afl/qemu.nix b/pkgs/tools/security/afl/qemu.nix
index 3af44763a8a..b88da7599d1 100644
--- a/pkgs/tools/security/afl/qemu.nix
+++ b/pkgs/tools/security/afl/qemu.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, afl, python2, zlib, pkgconfig, glib, perl
+{ lib, stdenv, fetchurl, afl, python2, zlib, pkg-config, glib, perl
 , texinfo, libuuid, flex, bison, pixman, autoconf
 }:
 
-with stdenv.lib;
+with lib;
 
 let
   qemuName = "qemu-2.10.0";
@@ -34,7 +34,7 @@ stdenv.mkDerivation {
   '';
 
   nativeBuildInputs = [
-    python2 perl pkgconfig flex bison autoconf texinfo
+    python2 perl pkg-config flex bison autoconf texinfo
   ];
 
   buildInputs = [
@@ -69,7 +69,7 @@ stdenv.mkDerivation {
       "--localstatedir=/var"
     ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.qemu.org/";
     description = "Fork of QEMU with AFL instrumentation support";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/security/aflplusplus/default.nix b/pkgs/tools/security/aflplusplus/default.nix
index a0ef58ae8b6..79a0779e60a 100644
--- a/pkgs/tools/security/aflplusplus/default.nix
+++ b/pkgs/tools/security/aflplusplus/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, stdenvNoCC, fetchFromGitHub, callPackage, makeWrapper
+{ lib, stdenv, stdenvNoCC, fetchFromGitHub, callPackage, makeWrapper
 , clang, llvm, gcc, which, libcgroup, python, perl, gmp
 , file, wine ? null, fetchpatch
 }:
@@ -31,7 +31,7 @@ let
     # script.
     nativeBuildInputs = [ makeWrapper which clang gcc ];
     buildInputs = [ llvm python gmp ]
-      ++ stdenv.lib.optional (wine != null) python.pkgs.wrapPython;
+      ++ lib.optional (wine != null) python.pkgs.wrapPython;
 
 
     postPatch = ''
@@ -91,7 +91,7 @@ let
 
       patchShebangs $out/bin
 
-    '' + stdenv.lib.optionalString (wine != null) ''
+    '' + lib.optionalString (wine != null) ''
       substitute afl-wine-trace $out/bin/afl-wine-trace \
         --replace "qemu_mode/unsigaction" "$out/lib/afl"
       chmod +x $out/bin/afl-wine-trace
@@ -124,13 +124,13 @@ let
 
     meta = {
       description = ''
-        AFL++ is a heavily enhanced version of AFL, incorporating many features and
-        improvements from the community.
+        A heavily enhanced version of AFL, incorporating many features
+        and improvements from the community
       '';
       homepage    = "https://aflplus.plus";
-      license     = stdenv.lib.licenses.asl20;
+      license     = lib.licenses.asl20;
       platforms   = ["x86_64-linux" "i686-linux"];
-      maintainers = with stdenv.lib.maintainers; [ ris mindavi ];
+      maintainers = with lib.maintainers; [ ris mindavi ];
     };
   };
 in aflplusplus
diff --git a/pkgs/tools/security/aflplusplus/libdislocator.nix b/pkgs/tools/security/aflplusplus/libdislocator.nix
index 6f947a7280a..ed695a7a702 100644
--- a/pkgs/tools/security/aflplusplus/libdislocator.nix
+++ b/pkgs/tools/security/aflplusplus/libdislocator.nix
@@ -1,7 +1,7 @@
-{ stdenv, aflplusplus}:
+{ lib, stdenv, aflplusplus}:
 
 stdenv.mkDerivation {
-  version = stdenv.lib.getVersion aflplusplus;
+  version = lib.getVersion aflplusplus;
   pname = "libdislocator";
 
   src = aflplusplus.src;
@@ -24,14 +24,14 @@ stdenv.mkDerivation {
     chmod +x $out/bin/get-libdislocator-so
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/vanhauser-thc/AFLplusplus";
     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;
+    license = lib.licenses.asl20;
     maintainers = with maintainers; [ ris ];
   };
 }
diff --git a/pkgs/tools/security/aflplusplus/libtokencap.nix b/pkgs/tools/security/aflplusplus/libtokencap.nix
index 9421ee0d1e2..f3ea5d4ec6b 100644
--- a/pkgs/tools/security/aflplusplus/libtokencap.nix
+++ b/pkgs/tools/security/aflplusplus/libtokencap.nix
@@ -1,7 +1,7 @@
-{ stdenv, aflplusplus}:
+{ lib, stdenv, aflplusplus}:
 
 stdenv.mkDerivation {
-  version = stdenv.lib.getVersion aflplusplus;
+  version = lib.getVersion aflplusplus;
   pname = "libtokencap";
 
   src = aflplusplus.src;
@@ -23,10 +23,10 @@ stdenv.mkDerivation {
     chmod +x $out/bin/get-libtokencap-so
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/vanhauser-thc/AFLplusplus";
     description = "strcmp & memcmp token capture library";
-    license = stdenv.lib.licenses.asl20;
+    license = lib.licenses.asl20;
     maintainers = with maintainers; [ ris ];
   };
 }
diff --git a/pkgs/tools/security/aflplusplus/qemu.nix b/pkgs/tools/security/aflplusplus/qemu.nix
index c51c839afe8..0a98f27182b 100644
--- a/pkgs/tools/security/aflplusplus/qemu.nix
+++ b/pkgs/tools/security/aflplusplus/qemu.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, aflplusplus, python2, zlib, pkgconfig, glib, perl
+{ lib, stdenv, fetchurl, aflplusplus, python2, zlib, pkg-config, glib, perl
 , texinfo, libuuid, flex, bison, pixman, autoconf
 }:
 
-with stdenv.lib;
+with lib;
 
 let
   qemuName = "qemu-3.1.0";
@@ -44,7 +44,7 @@ stdenv.mkDerivation {
   '';
 
   nativeBuildInputs = [
-    python2 perl pkgconfig flex bison autoconf texinfo
+    python2 perl pkg-config flex bison autoconf texinfo
   ];
 
   buildInputs = [
@@ -73,7 +73,7 @@ stdenv.mkDerivation {
       "--localstatedir=/var"
     ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.qemu.org/";
     description = "Fork of QEMU with AFL++ instrumentation support";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/security/age/default.nix b/pkgs/tools/security/age/default.nix
index 8a6d008551e..20735c6e578 100644
--- a/pkgs/tools/security/age/default.nix
+++ b/pkgs/tools/security/age/default.nix
@@ -2,21 +2,14 @@
 
 buildGoModule rec {
   pname = "age";
-  version = "1.0.0-beta4";
-  vendorSha256 = "0km7a2826j3fk2nrkmgc990chrkcfz006wfw14yilsa4p2hmfl7m";
-
-  doCheck = false;
-
-  subPackages = [
-    "cmd/age"
-    "cmd/age-keygen"
-  ];
+  version = "1.0.0-rc.3";
+  vendorSha256 = "sha256-sXUbfxhPmJXO+KgV/dmWmsyV49Pb6CoJLbt50yVgEvI=";
 
   src = fetchFromGitHub {
     owner = "FiloSottile";
     repo = "age";
     rev = "v${version}";
-    sha256 = "0pp6zn4rdypyxn1md9ppisiwiapkfkbh08rzfl3qwn0998wx6gnb";
+    sha256 = "sha256-YXdCTK9/eMvcHWg7gQQiPlLWYx2OjbOJDDNdSYO09HU=";
   };
 
   meta = with lib; {
diff --git a/pkgs/tools/security/agebox/default.nix b/pkgs/tools/security/agebox/default.nix
new file mode 100644
index 00000000000..29199870c7f
--- /dev/null
+++ b/pkgs/tools/security/agebox/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "agebox";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "slok";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0zn7jibhw5jd9wp1alx9ahj4szaig4a54ci3676kk5zqxr2hjz0c";
+  };
+  vendorSha256 = "0bc2pwz3yhzwqi0bcwqkkkrglg473qxhmz5s5955fvgajvjk7drn";
+
+  ldflags = [
+    "-s" "-w"
+    "-X main.Version=${version}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/slok/agebox";
+    changelog = "https://github.com/slok/agebox/releases/tag/v${version}";
+    description = "Age based repository file encryption gitops tool";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ lesuisse ];
+  };
+}
diff --git a/pkgs/tools/security/aide/default.nix b/pkgs/tools/security/aide/default.nix
index 116ada633c6..40f43c7b054 100644
--- a/pkgs/tools/security/aide/default.nix
+++ b/pkgs/tools/security/aide/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchurl, flex, bison, libmhash, zlib, acl, attr, libselinux, pcre }:
+{ lib, stdenv, fetchurl, flex, bison, libmhash, zlib, acl, attr, libselinux, pcre }:
 
 stdenv.mkDerivation rec {
   pname = "aide";
-  version = "0.16.2";
+  version = "0.17.3";
 
   src = fetchurl {
     url = "https://github.com/aide/aide/releases/download/v${version}/${pname}-${version}.tar.gz";
-    sha256 = "15xp47sz7kk1ciffw3f5xw2jg2mb2lqrbr3q6p4bkbz5dap9iy8p";
+    sha256 = "sha256-ousYg8r6rQVvvkPuHorgn9NsqjCgvI7f6l1HvWfEZPg=";
   };
 
   buildInputs = [ flex bison libmhash zlib acl attr libselinux pcre ];
@@ -18,10 +18,10 @@ stdenv.mkDerivation rec {
     "--with-xattr"
     ];
 
-  meta = with stdenv.lib; {
-    homepage = "http://aide.sourceforge.net/";
+  meta = with lib; {
+    homepage = "https://aide.github.io/";
     description = "A file and directory integrity checker";
-    license = licenses.free;
+    license = licenses.gpl2Plus;
     maintainers = [ maintainers.tstrobel ];
     platforms = platforms.linux;
   };
diff --git a/pkgs/tools/security/aiodnsbrute/default.nix b/pkgs/tools/security/aiodnsbrute/default.nix
new file mode 100644
index 00000000000..77f03e4174f
--- /dev/null
+++ b/pkgs/tools/security/aiodnsbrute/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, aiodns
+, click
+, tqdm
+, uvloop
+}:
+
+buildPythonApplication rec {
+  pname = "aiodnsbrute";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "blark";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0fs8544kx7vwvc97zpg4rs3lmvnb4vwika5g952rv3bfx4rv3bpg";
+  };
+
+  # https://github.com/blark/aiodnsbrute/pull/8
+  prePatch = ''
+    substituteInPlace setup.py --replace " 'asyncio', " ""
+  '';
+
+  propagatedBuildInputs = [
+     aiodns
+     click
+     tqdm
+     uvloop
+  ];
+
+  # no tests present
+  doCheck = false;
+
+  pythonImportsCheck = [ "aiodnsbrute.cli" ];
+
+  meta = with lib; {
+    description = "DNS brute force utility";
+    homepage = "https://github.com/blark/aiodnsbrute";
+    # https://github.com/blark/aiodnsbrute/issues/5
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/apg/default.nix b/pkgs/tools/security/apg/default.nix
index 1dcdeae832d..a185c09bda6 100644
--- a/pkgs/tools/security/apg/default.nix
+++ b/pkgs/tools/security/apg/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, openssl }:
+{ lib, stdenv, fetchurl, openssl }:
 stdenv.mkDerivation rec {
   name = "apg-2.3.0b";
   src = fetchurl {
@@ -8,14 +8,14 @@ stdenv.mkDerivation rec {
   configurePhase = ''
     substituteInPlace Makefile --replace /usr/local "$out"
   '';
-  makeFlags = stdenv.lib.optionals stdenv.isDarwin ["CC=cc"];
+  makeFlags = ["CC=${stdenv.cc.targetPrefix}cc"];
 
   patches = [
     ./apg.patch
     ./phony-install-target.patch
   ];
 
-  postPatch = stdenv.lib.optionalString stdenv.isDarwin ''
+  postPatch = lib.optionalString stdenv.isDarwin ''
     sed -i -e 's|APG_CLIBS += -lcrypt|APG_CLIBS += -L${openssl.out}/lib -lcrypto|' Makefile
   '';
 
@@ -65,8 +65,8 @@ stdenv.mkDerivation rec {
          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;
+    license = lib.licenses.bsd3;
+    maintainers = with lib.maintainers; [ astsmtl ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/security/asc-key-to-qr-code-gif/default.nix b/pkgs/tools/security/asc-key-to-qr-code-gif/default.nix
index ee5fa924cb6..13327a84fff 100644
--- a/pkgs/tools/security/asc-key-to-qr-code-gif/default.nix
+++ b/pkgs/tools/security/asc-key-to-qr-code-gif/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, imagemagick, qrencode
+{ lib, stdenv, fetchFromGitHub, imagemagick, qrencode
 , testQR ? false, zbar ? null
 }:
 
@@ -23,12 +23,12 @@ stdenv.mkDerivation {
     substitutions = [
       ''--replace "convert" "${imagemagick}/bin/convert"''
       ''--replace "qrencode" "${qrencode.bin}/bin/qrencode"''
-    ] ++ stdenv.lib.optional testQR [
+    ] ++ 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}
+    substituteInPlace asc-to-gif.sh ${lib.concatStringsSep " " substitutions}
   '';
 
   installPhase = ''
@@ -36,10 +36,10 @@ stdenv.mkDerivation {
     cp * $out/bin/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms = platforms.unix;
     maintainers = with maintainers; [ asymmetric ];
   };
 }
diff --git a/pkgs/tools/security/authoscope/default.nix b/pkgs/tools/security/authoscope/default.nix
new file mode 100644
index 00000000000..eafd5ebb7d2
--- /dev/null
+++ b/pkgs/tools/security/authoscope/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+, libcap
+, openssl
+, pkg-config
+, rustPlatform
+, Security
+, zlib
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "authoscope";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "kpcyrd";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "11ci38m6d3lj4f0g7cl3dqf10kfk258k2k92phd2nav1my4i90pf";
+  };
+
+  cargoSha256 = "13x7i52i3k88vkfvk2smy2aqfg3na4317scvw7ali1rv545nbxds";
+
+  nativeBuildInputs = [
+    installShellFiles
+    pkg-config
+  ];
+
+  buildInputs = [
+    libcap
+    zlib
+    openssl
+  ] ++ lib.optional stdenv.isDarwin Security;
+
+  postInstall = ''
+    installManPage docs/${pname}.1
+  '';
+
+  # Tests requires access to httpin.org
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Scriptable network authentication cracker";
+    homepage = "https://github.com/kpcyrd/authoscope";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/aws-iam-authenticator/default.nix b/pkgs/tools/security/aws-iam-authenticator/default.nix
index 44282d5f964..d9f4f4a0173 100644
--- a/pkgs/tools/security/aws-iam-authenticator/default.nix
+++ b/pkgs/tools/security/aws-iam-authenticator/default.nix
@@ -1,19 +1,25 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
-buildGoPackage rec {
+buildGoModule rec {
   pname = "aws-iam-authenticator";
-  version = "0.4.0";
-
-  goPackagePath = "github.com/kubernetes-sigs/aws-iam-authenticator";
+  version = "0.5.3";
 
   src = fetchFromGitHub {
     owner = "kubernetes-sigs";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1ghl2vms9wmvczdl2raqhy0gffxmk24h158gjb5mlw7rggzvb7bg";
+    sha256 = "0ga3vf5gn7533iqnxn7kchb6xg5wvk92livlqzkhi5qvqhl1sbw0";
   };
 
-  meta = with stdenv.lib; {
+  # Upstream has inconsistent vendoring, see https://github.com/kubernetes-sigs/aws-iam-authenticator/issues/377
+  deleteVendor = true;
+  vendorSha256 = "+Z8sENIMWXP29Piwb/W6i7UdNXVq6ZnO7AZbSaUYCME=";
+
+  buildFlagsArray = [ "-ldflags=-s -w -X main.version=v${version}" ];
+
+  subPackages = [ "cmd/aws-iam-authenticator" ];
+
+  meta = with lib; {
     homepage = "https://github.com/kubernetes-sigs/aws-iam-authenticator";
     description = "AWS IAM credentials for Kubernetes authentication";
     license = licenses.asl20;
diff --git a/pkgs/tools/security/aws-okta/default.nix b/pkgs/tools/security/aws-okta/default.nix
index b540be3928a..363abbd3950 100644
--- a/pkgs/tools/security/aws-okta/default.nix
+++ b/pkgs/tools/security/aws-okta/default.nix
@@ -1,8 +1,8 @@
-{ buildGoPackage, fetchFromGitHub, libusb1, pkgconfig, stdenv, libiconv }:
+{ buildGoPackage, fetchFromGitHub, libusb1, pkg-config, lib, libiconv }:
 
 buildGoPackage rec {
   pname = "aws-okta";
-  version = "1.0.4";
+  version = "1.0.11";
 
   goPackagePath = "github.com/segmentio/aws-okta";
 
@@ -10,21 +10,20 @@ buildGoPackage rec {
     owner = "segmentio";
     repo = "aws-okta";
     rev = "v${version}";
-    sha256 = "0a7xccnv0x0a6sydif0rvkdbw4jy9gjijajip1ac6m70l20dhl1v";
+    sha256 = "sha256-1cprKpIFgM3+lUEHNvda34nJTH4Ch3LtTRq/Dp6QBQ8=";
   };
 
   buildFlags = [ "--tags" "release" ];
 
   buildFlagsArray = [ "-ldflags=-X main.Version=${version}" ];
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libusb1  libiconv ];
 
-  meta = with stdenv.lib; {
-    inherit version;
+  meta = with lib; {
     description = "aws-vault like tool for Okta authentication";
     license = licenses.mit;
-    maintainers = [maintainers.imalsogreg];
+    maintainers = with maintainers; [imalsogreg Chili-Man];
     homepage = "https://github.com/segmentio/aws-okta";
     downloadPage = "https://github.com/segmentio/aws-okta";
   };
diff --git a/pkgs/tools/security/b2sum/default.nix b/pkgs/tools/security/b2sum/default.nix
index fdd4f2c73fd..393043df675 100644
--- a/pkgs/tools/security/b2sum/default.nix
+++ b/pkgs/tools/security/b2sum/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchzip, openmp ? null }:
+{ lib, stdenv, fetchzip, openmp ? null }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation {
   pname = "b2sum";
diff --git a/pkgs/tools/security/b3sum/add-cargo-lock.patch b/pkgs/tools/security/b3sum/add-cargo-lock.patch
deleted file mode 100644
index ecbb2b0bab9..00000000000
--- a/pkgs/tools/security/b3sum/add-cargo-lock.patch
+++ /dev/null
@@ -1,501 +0,0 @@
-diff --git a/b3sum/Cargo.lock b/b3sum/Cargo.lock
-new file mode 100644
-index 0000000..1ce7abc
---- /dev/null
-+++ b/Cargo.lock
-@@ -0,0 +1,495 @@
-+# This file is automatically @generated by Cargo.
-+# It is not intended for manual editing.
-+[[package]]
-+name = "ansi_term"
-+version = "0.11.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
-+dependencies = [
-+ "winapi",
-+]
-+
-+[[package]]
-+name = "anyhow"
-+version = "1.0.31"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "85bb70cc08ec97ca5450e6eba421deeea5f172c0fc61f78b5357b2a8e8be195f"
-+
-+[[package]]
-+name = "arrayref"
-+version = "0.3.6"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
-+
-+[[package]]
-+name = "arrayvec"
-+version = "0.5.1"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8"
-+
-+[[package]]
-+name = "atty"
-+version = "0.2.14"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
-+dependencies = [
-+ "hermit-abi",
-+ "libc",
-+ "winapi",
-+]
-+
-+[[package]]
-+name = "autocfg"
-+version = "1.0.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
-+
-+[[package]]
-+name = "b3sum"
-+version = "0.3.4"
-+dependencies = [
-+ "anyhow",
-+ "blake3",
-+ "clap",
-+ "duct",
-+ "hex",
-+ "memmap",
-+ "rayon",
-+ "tempfile",
-+ "wild",
-+]
-+
-+[[package]]
-+name = "bitflags"
-+version = "1.2.1"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
-+
-+[[package]]
-+name = "blake3"
-+version = "0.3.4"
-+dependencies = [
-+ "arrayref",
-+ "arrayvec",
-+ "cc",
-+ "cfg-if",
-+ "constant_time_eq",
-+ "crypto-mac",
-+ "digest",
-+ "rayon",
-+]
-+
-+[[package]]
-+name = "cc"
-+version = "1.0.57"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "0fde55d2a2bfaa4c9668bbc63f531fbdeee3ffe188f4662511ce2c22b3eedebe"
-+
-+[[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.1"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129"
-+dependencies = [
-+ "ansi_term",
-+ "atty",
-+ "bitflags",
-+ "strsim",
-+ "textwrap",
-+ "unicode-width",
-+ "vec_map",
-+]
-+
-+[[package]]
-+name = "constant_time_eq"
-+version = "0.1.5"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
-+
-+[[package]]
-+name = "crossbeam-deque"
-+version = "0.7.3"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285"
-+dependencies = [
-+ "crossbeam-epoch",
-+ "crossbeam-utils",
-+ "maybe-uninit",
-+]
-+
-+[[package]]
-+name = "crossbeam-epoch"
-+version = "0.8.2"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"
-+dependencies = [
-+ "autocfg",
-+ "cfg-if",
-+ "crossbeam-utils",
-+ "lazy_static",
-+ "maybe-uninit",
-+ "memoffset",
-+ "scopeguard",
-+]
-+
-+[[package]]
-+name = "crossbeam-queue"
-+version = "0.2.3"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570"
-+dependencies = [
-+ "cfg-if",
-+ "crossbeam-utils",
-+ "maybe-uninit",
-+]
-+
-+[[package]]
-+name = "crossbeam-utils"
-+version = "0.7.2"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
-+dependencies = [
-+ "autocfg",
-+ "cfg-if",
-+ "lazy_static",
-+]
-+
-+[[package]]
-+name = "crypto-mac"
-+version = "0.7.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5"
-+dependencies = [
-+ "generic-array",
-+ "subtle",
-+]
-+
-+[[package]]
-+name = "digest"
-+version = "0.8.1"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
-+dependencies = [
-+ "generic-array",
-+]
-+
-+[[package]]
-+name = "duct"
-+version = "0.13.4"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "f90a9c3a25aafbd538c7d40a53f83c4487ee8216c12d1c8ef2c01eb2f6ea1553"
-+dependencies = [
-+ "libc",
-+ "once_cell",
-+ "os_pipe",
-+ "shared_child",
-+]
-+
-+[[package]]
-+name = "either"
-+version = "1.5.3"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
-+
-+[[package]]
-+name = "generic-array"
-+version = "0.12.3"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec"
-+dependencies = [
-+ "typenum",
-+]
-+
-+[[package]]
-+name = "getrandom"
-+version = "0.1.14"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
-+dependencies = [
-+ "cfg-if",
-+ "libc",
-+ "wasi",
-+]
-+
-+[[package]]
-+name = "glob"
-+version = "0.3.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
-+
-+[[package]]
-+name = "hermit-abi"
-+version = "0.1.15"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "3deed196b6e7f9e44a2ae8d94225d80302d81208b1bb673fd21fe634645c85a9"
-+dependencies = [
-+ "libc",
-+]
-+
-+[[package]]
-+name = "hex"
-+version = "0.4.2"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35"
-+
-+[[package]]
-+name = "lazy_static"
-+version = "1.4.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-+
-+[[package]]
-+name = "libc"
-+version = "0.2.71"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "9457b06509d27052635f90d6466700c65095fdf75409b3fbdd903e988b886f49"
-+
-+[[package]]
-+name = "maybe-uninit"
-+version = "2.0.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
-+
-+[[package]]
-+name = "memmap"
-+version = "0.7.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b"
-+dependencies = [
-+ "libc",
-+ "winapi",
-+]
-+
-+[[package]]
-+name = "memoffset"
-+version = "0.5.5"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "c198b026e1bbf08a937e94c6c60f9ec4a2267f5b0d2eec9c1b21b061ce2be55f"
-+dependencies = [
-+ "autocfg",
-+]
-+
-+[[package]]
-+name = "num_cpus"
-+version = "1.13.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
-+dependencies = [
-+ "hermit-abi",
-+ "libc",
-+]
-+
-+[[package]]
-+name = "once_cell"
-+version = "1.4.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "0b631f7e854af39a1739f401cf34a8a013dfe09eac4fa4dba91e9768bd28168d"
-+
-+[[package]]
-+name = "os_pipe"
-+version = "0.9.2"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "fb233f06c2307e1f5ce2ecad9f8121cffbbee2c95428f44ea85222e460d0d213"
-+dependencies = [
-+ "libc",
-+ "winapi",
-+]
-+
-+[[package]]
-+name = "ppv-lite86"
-+version = "0.2.8"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "237a5ed80e274dbc66f86bd59c1e25edc039660be53194b5fe0a482e0f2612ea"
-+
-+[[package]]
-+name = "rand"
-+version = "0.7.3"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
-+dependencies = [
-+ "getrandom",
-+ "libc",
-+ "rand_chacha",
-+ "rand_core",
-+ "rand_hc",
-+]
-+
-+[[package]]
-+name = "rand_chacha"
-+version = "0.2.2"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
-+dependencies = [
-+ "ppv-lite86",
-+ "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 = "rayon"
-+version = "1.3.1"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "62f02856753d04e03e26929f820d0a0a337ebe71f849801eea335d464b349080"
-+dependencies = [
-+ "autocfg",
-+ "crossbeam-deque",
-+ "either",
-+ "rayon-core",
-+]
-+
-+[[package]]
-+name = "rayon-core"
-+version = "1.7.1"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "e92e15d89083484e11353891f1af602cc661426deb9564c298b270c726973280"
-+dependencies = [
-+ "crossbeam-deque",
-+ "crossbeam-queue",
-+ "crossbeam-utils",
-+ "lazy_static",
-+ "num_cpus",
-+]
-+
-+[[package]]
-+name = "redox_syscall"
-+version = "0.1.56"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
-+
-+[[package]]
-+name = "remove_dir_all"
-+version = "0.5.3"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
-+dependencies = [
-+ "winapi",
-+]
-+
-+[[package]]
-+name = "scopeguard"
-+version = "1.1.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
-+
-+[[package]]
-+name = "shared_child"
-+version = "0.3.4"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "8cebcf3a403e4deafaf34dc882c4a1b6a648b43e5670aa2e4bb985914eaeb2d2"
-+dependencies = [
-+ "libc",
-+ "winapi",
-+]
-+
-+[[package]]
-+name = "strsim"
-+version = "0.8.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
-+
-+[[package]]
-+name = "subtle"
-+version = "1.0.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee"
-+
-+[[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 = "textwrap"
-+version = "0.11.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
-+dependencies = [
-+ "unicode-width",
-+]
-+
-+[[package]]
-+name = "typenum"
-+version = "1.12.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33"
-+
-+[[package]]
-+name = "unicode-width"
-+version = "0.1.8"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
-+
-+[[package]]
-+name = "vec_map"
-+version = "0.8.2"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
-+
-+[[package]]
-+name = "wasi"
-+version = "0.9.0+wasi-snapshot-preview1"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
-+
-+[[package]]
-+name = "wild"
-+version = "2.0.4"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "035793abb854745033f01a07647a79831eba29ec0be377205f2a25b0aa830020"
-+dependencies = [
-+ "glob",
-+]
-+
-+[[package]]
-+name = "winapi"
-+version = "0.3.9"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
-+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-x86_64-pc-windows-gnu"
-+version = "0.4.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/pkgs/tools/security/b3sum/default.nix b/pkgs/tools/security/b3sum/default.nix
index dd6a538d11d..1d9b2f66deb 100644
--- a/pkgs/tools/security/b3sum/default.nix
+++ b/pkgs/tools/security/b3sum/default.nix
@@ -1,26 +1,20 @@
-{ lib, fetchFromGitHub, rustPlatform }:
+{ lib, fetchCrate, rustPlatform }:
 
 rustPlatform.buildRustPackage rec {
   pname = "b3sum";
-  version = "0.3.4";
+  version = "0.3.8";
 
-  src = fetchFromGitHub {
-    owner = "BLAKE3-team";
-    repo = "BLAKE3";
-    rev = version;
-    sha256 = "02yyv91wvy5w7i05z6f3kzxm5x34a4xgkgmcqxnb0ivsxnnld73h";
+  src = fetchCrate {
+    inherit version pname;
+    sha256 = "1a42kwbl886yymm3v7h6y957x5f4yi9j40jy4szg9k0iy8bsdfmh";
   };
 
-  sourceRoot = "source/b3sum";
-
-  cargoSha256 = "0ycn5788dc925wx28sgfs121w4x7yggm4mnmwij829ka8859bymk";
-
-  cargoPatches = [ ./add-cargo-lock.patch ];
+  cargoSha256 = "0v7ric12agicppg5ax5q0vwbslw7kmxpinafvdjj5sc2ysinw1zm";
 
   meta = {
     description = "BLAKE3 cryptographic hash function";
     homepage = "https://github.com/BLAKE3-team/BLAKE3/";
-    maintainers = with lib.maintainers; [ fpletz ];
+    maintainers = with lib.maintainers; [ fpletz ivan ];
     license = with lib.licenses; [ cc0 asl20 ];
   };
 }
diff --git a/pkgs/tools/security/badchars/default.nix b/pkgs/tools/security/badchars/default.nix
new file mode 100644
index 00000000000..3125ff0c28c
--- /dev/null
+++ b/pkgs/tools/security/badchars/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+}:
+
+buildPythonApplication rec {
+  pname = "badchars";
+  version = "0.4.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1xqki8qnfwl97d60xj69alyzwa1mnfbwki25j0vhvhb05varaxz2";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py --replace "argparse" ""
+  '';
+
+  # no tests are available and it can't be imported (it's only a script, not a module)
+  doCheck = false;
+
+  meta = with lib; {
+    description = "HEX badchar generator for different programming languages";
+    longDescription = ''
+      A HEX bad char generator to instruct encoders such as shikata-ga-nai to
+      transform those to other chars.
+    '';
+    homepage = "https://github.com/cytopia/badchars";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/bash-supergenpass/default.nix b/pkgs/tools/security/bash-supergenpass/default.nix
index f72c916acf9..ba80734e5cf 100644
--- a/pkgs/tools/security/bash-supergenpass/default.nix
+++ b/pkgs/tools/security/bash-supergenpass/default.nix
@@ -1,24 +1,34 @@
-{ stdenv, fetchFromGitHub, makeWrapper, openssl, coreutils, gnugrep }:
+{ lib, stdenv
+, fetchFromGitHub
+, unstableGitUpdater
+, makeWrapper
+, openssl
+, coreutils
+, gnugrep }:
 
 stdenv.mkDerivation {
-  pname = "bash-supergenpass-unstable";
-  version = "2018-04-18";
+  pname = "bash-supergenpass";
+  version = "unstable-2020-02-03";
 
   nativeBuildInputs = [ makeWrapper ];
 
   src = fetchFromGitHub {
     owner = "lanzz";
     repo = "bash-supergenpass";
-    rev = "ece772b9ec095946ac4ea985cda5561b211e56f0";
-    sha256 = "1gkbrycyyl7y3klbfx7xjvvfw5df1h4fj6x1f73gglfy6nk8ffnd";
+    rev = "e5d96599b65d65a37148996f00f9d057e522e4d8";
+    sha256 = "1d8csp94l2p5y5ln53aza5qf246rwmd10043x0x1yrswqrrya40f";
   };
 
   installPhase = ''
     install -m755 -D supergenpass.sh "$out/bin/supergenpass"
-    wrapProgram "$out/bin/supergenpass" --prefix PATH : "${stdenv.lib.makeBinPath [ openssl coreutils gnugrep ]}"
+    wrapProgram "$out/bin/supergenpass" --prefix PATH : "${lib.makeBinPath [ openssl coreutils gnugrep ]}"
   '';
 
-  meta = with stdenv.lib; {
+  passthru.updateScript = unstableGitUpdater {
+    url = "https://github.com/lanzz/bash-supergenpass.git";
+  };
+
+  meta = with lib; {
     description = "Bash shell-script implementation of SuperGenPass password generation";
     longDescription = ''
       Bash shell-script implementation of SuperGenPass password generation
@@ -31,9 +41,8 @@ stdenv.mkDerivation {
       supergenpass will ask for your master password interactively, and it will not be displayed on your terminal.
     '';
     license = licenses.mit;
-    platforms = platforms.linux;
+    platforms = platforms.all;
     maintainers = with maintainers; [ fgaz ];
     homepage = "https://github.com/lanzz/bash-supergenpass";
   };
 }
-
diff --git a/pkgs/tools/security/bettercap/default.nix b/pkgs/tools/security/bettercap/default.nix
index a8ca38e1f1d..9d2adfd9a7d 100644
--- a/pkgs/tools/security/bettercap/default.nix
+++ b/pkgs/tools/security/bettercap/default.nix
@@ -1,4 +1,4 @@
-{ lib
+{ lib, stdenv
 , buildGoModule
 , fetchFromGitHub
 , pkg-config
@@ -10,29 +10,32 @@
 
 buildGoModule rec {
   pname = "bettercap";
-  version = "2.28";
+  version = "2.31.1";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "v${version}";
-    sha256 = "0aihinn3i3jj350l2rqph7nv3wy4nh4f8syidf77zybjcp9nmcys";
+    sha256 = "sha256-vZajnKjuIFoNnjxSsFkkpxyCR27VWqVN4lGf9SadmPU=";
   };
 
-  vendorSha256 = "0yfs1f18d8frbkrshsajzzbj4wh2azd89g2h35wm6wqknvlipwr0";
+  vendorSha256 = "sha256-et6D+M+xJbxIiDP7JRRABZ8UqUCpt9ZVI5DP45tyTGM=";
 
   doCheck = false;
 
   nativeBuildInputs = [ pkg-config ];
-  buildInputs = [ libpcap libnfnetlink libnetfilter_queue libusb1 ];
+  buildInputs = [ libpcap libusb1 ]
+    ++ lib.optionals stdenv.isLinux [ libnfnetlink libnetfilter_queue ];
 
   meta = with 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.
+      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;
+    license = with licenses; [ gpl3Only ];
     maintainers = with maintainers; [ y0no ];
   };
 }
diff --git a/pkgs/tools/security/bitwarden/default.nix b/pkgs/tools/security/bitwarden/default.nix
index 4e087ee631e..e0bbad3486c 100644
--- a/pkgs/tools/security/bitwarden/default.nix
+++ b/pkgs/tools/security/bitwarden/default.nix
@@ -2,6 +2,7 @@
 , autoPatchelfHook
 , dpkg
 , fetchurl
+, lib
 , libsecret
 , makeDesktopItem
 , makeWrapper
@@ -16,14 +17,14 @@ let
   pname = "bitwarden";
 
   version = {
-    x86_64-linux = "1.20.1";
+    x86_64-linux = "1.27.1";
   }.${system} or "";
 
   sha256 = {
-    x86_64-linux = "1lywslkpgg9rxwz7kwfknkgdi0r47j14i420r5yxgkaizb7ww27z";
+    x86_64-linux = "sha256-CqyIARPHri018AOgI1rFJ9Td3K8OamXVgupAINME7BY=";
   }.${system} or "";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A secure and free password manager for all of your devices";
     homepage = "https://bitwarden.com";
     license = licenses.gpl3;
@@ -72,12 +73,12 @@ let
     '';
 
     runtimeDependencies = [
-      udev.lib
+      (lib.getLib udev)
     ];
 
     postFixup = ''
       makeWrapper $out/opt/Bitwarden/bitwarden $out/bin/bitwarden \
-        --prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ libsecret stdenv.cc.cc ] }" \
+        --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libsecret stdenv.cc.cc ] }" \
         "''${gappsWrapperArgs[@]}"
     '';
   };
diff --git a/pkgs/tools/security/bitwarden_rs/vault.nix b/pkgs/tools/security/bitwarden_rs/vault.nix
deleted file mode 100644
index 2ac50912c05..00000000000
--- a/pkgs/tools/security/bitwarden_rs/vault.nix
+++ /dev/null
@@ -1,28 +0,0 @@
-{ stdenv, fetchurl, nixosTests }:
-
-stdenv.mkDerivation rec {
-  pname = "bitwarden_rs-vault";
-  version = "2.15.1";
-
-  src = fetchurl {
-    url = "https://github.com/dani-garcia/bw_web_builds/releases/download/v${version}/bw_web_v${version}.tar.gz";
-    sha256 = "1wvpg2awdbpbzhxhrf1iv1mjjc1ah54kswnznc7w5zbh9512dyx8";
-  };
-
-  buildCommand = ''
-    mkdir -p $out/share/bitwarden_rs/
-    cd $out/share/bitwarden_rs/
-    tar xf $src
-    mv web-vault vault
-  '';
-
-  passthru.tests = nixosTests.bitwarden;
-
-  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/pkgs/tools/security/bmrsa/11.nix b/pkgs/tools/security/bmrsa/11.nix
index c7d4c4d0174..71bdfae4e42 100644
--- a/pkgs/tools/security/bmrsa/11.nix
+++ b/pkgs/tools/security/bmrsa/11.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, unzip }:
+{ lib, stdenv, fetchurl, unzip }:
 
 stdenv.mkDerivation rec {
   pname = "bmrsa";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "0ksd9xkvm9lkvj4yl5sl0zmydp1wn3xhc55b28gj70gi4k75kcl4";
   };
 
-  buildInputs = [ unzip ];
+  nativeBuildInputs = [ unzip ];
 
   unpackPhase = ''
     mkdir bmrsa
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
     echo -e 'install:\n\tcp bmrsa '$out'/bin' >> Makefile
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "RSA utility";
     homepage = "http://bmrsa.sourceforge.net/";
     license = licenses.gpl1;
diff --git a/pkgs/tools/security/bruteforce-luks/default.nix b/pkgs/tools/security/bruteforce-luks/default.nix
index cfa27a5c686..084368c105b 100644
--- a/pkgs/tools/security/bruteforce-luks/default.nix
+++ b/pkgs/tools/security/bruteforce-luks/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, cryptsetup }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, cryptsetup }:
 
 stdenv.mkDerivation rec {
   pname = "bruteforce-luks";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit (src.meta) homepage;
     description = "Cracks passwords of LUKS encrypted volumes";
     longDescription = ''
diff --git a/pkgs/tools/security/brutespray/default.nix b/pkgs/tools/security/brutespray/default.nix
index 78dd789047d..d7f8e30e182 100644
--- a/pkgs/tools/security/brutespray/default.nix
+++ b/pkgs/tools/security/brutespray/default.nix
@@ -1,14 +1,20 @@
-{ stdenv, python3, fetchFromGitHub, makeWrapper, medusa }:
+{ lib
+, stdenv
+, python3
+, fetchFromGitHub
+, makeWrapper
+, medusa
+}:
 
 stdenv.mkDerivation rec {
   pname = "brutespray";
-  version = "1.6.8";
+  version = "1.7.0";
 
   src = fetchFromGitHub {
     owner = "x90skysn3k";
     repo = pname;
-    rev = "brutespray-${version}";
-    sha256 = "1pi4d5vcvvjsby39dq995dlhpxdicmfhqsiw23hr25m38ccfm3rh";
+    rev = "${pname}-${version}";
+    sha256 = "0lkm3fvx35ml5jh4ykjr2srq8qfajkmxwp4qfcn9xi58khk3asq3";
   };
 
   postPatch = ''
@@ -25,15 +31,19 @@ stdenv.mkDerivation rec {
     patchShebangs $out/bin
     patchPythonScript $out/bin/brutespray
     wrapProgram $out/bin/brutespray \
-      --prefix PATH : ${stdenv.lib.makeBinPath [ medusa ]}
+      --prefix PATH : ${lib.makeBinPath [ medusa ]}
 
     mkdir -p $out/share/brutespray
     cp -r wordlist/ $out/share/brutespray/wordlist
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/x90skysn3k/brutespray";
-    description = "Brute-Forcing from Nmap output - Automatically attempts default creds on found services";
+    description = "Tool to do brute-forcing from Nmap output";
+    longDescription = ''
+      This tool automatically attempts default credentials on found services
+      directly from Nmap output.
+    '';
     license = licenses.mit;
     maintainers = with maintainers; [ ma27 ];
   };
diff --git a/pkgs/tools/security/bundler-audit/Gemfile.lock b/pkgs/tools/security/bundler-audit/Gemfile.lock
index f130b57912b..c0610480c72 100644
--- a/pkgs/tools/security/bundler-audit/Gemfile.lock
+++ b/pkgs/tools/security/bundler-audit/Gemfile.lock
@@ -1,10 +1,10 @@
 GEM
   remote: https://rubygems.org/
   specs:
-    bundler-audit (0.7.0.1)
+    bundler-audit (0.8.0)
       bundler (>= 1.2.0, < 3)
-      thor (>= 0.18, < 2)
-    thor (1.0.1)
+      thor (~> 1.0)
+    thor (1.1.0)
 
 PLATFORMS
   ruby
diff --git a/pkgs/tools/security/bundler-audit/gemset.nix b/pkgs/tools/security/bundler-audit/gemset.nix
index 2121a3c08e5..ff4d6da8069 100644
--- a/pkgs/tools/security/bundler-audit/gemset.nix
+++ b/pkgs/tools/security/bundler-audit/gemset.nix
@@ -5,19 +5,19 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "04l9rs56rlvihbr2ybkrigjajgd3swa98lxvmdl8iylj1g5m7n0j";
+      sha256 = "00l8rs7cna0j3yh4s9sza0r88x7kjc7j4gp9yl378422k7i0r73v";
       type = "gem";
     };
-    version = "0.7.0.1";
+    version = "0.8.0";
   };
   thor = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1xbhkmyhlxwzshaqa7swy2bx6vd64mm0wrr8g3jywvxy7hg0cwkm";
+      sha256 = "18yhlvmfya23cs3pvhr1qy38y41b6mhr5q9vwv5lrgk16wmf3jna";
       type = "gem";
     };
-    version = "1.0.1";
+    version = "1.1.0";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/security/bypass403/default.nix b/pkgs/tools/security/bypass403/default.nix
new file mode 100644
index 00000000000..5bf40766883
--- /dev/null
+++ b/pkgs/tools/security/bypass403/default.nix
@@ -0,0 +1,25 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "bypass403";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "drsigned";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1x3a4lnxjxbv80kaydy57809n9r7vzci9ki4f98smf3w04s86rcl";
+  };
+
+  vendorSha256 = "1bp6bf99rxlyg91pn1y228q18lawpykmvkl22cydmclms0q0n238";
+
+  meta = with lib; {
+    description = "Tool to bypass 403 Forbidden responses";
+    homepage = "https://github.com/drsigned/bypass403";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/ccid/default.nix b/pkgs/tools/security/ccid/default.nix
index b7f408e748f..a7312731203 100644
--- a/pkgs/tools/security/ccid/default.nix
+++ b/pkgs/tools/security/ccid/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchurl, pcsclite, pkgconfig, libusb1, perl }:
+{ lib, stdenv, fetchurl, pcsclite, pkg-config, libusb1, perl }:
 
 stdenv.mkDerivation rec {
   pname = "ccid";
-  version = "1.4.33";
+  version = "1.4.35";
 
   src = fetchurl {
     url = "https://ccid.apdu.fr/files/${pname}-${version}.tar.bz2";
-    sha256 = "0974h2v9wq0j0ajw3c7yckaw8wqcppb2npfhfhmv9phijy9xlmjj";
+    sha256 = "sha256-fD4qeSTt2nIhicpXyNHP+lHn+TVKI+ga7NnRro2XEMo=";
   };
 
   postPatch = ''
@@ -18,10 +18,10 @@ stdenv.mkDerivation rec {
     configureFlagsArray+=("--enable-usbdropdir=$out/pcsc/drivers")
   '';
 
-  nativeBuildInputs = [ pkgconfig perl ];
+  nativeBuildInputs = [ pkg-config perl ];
   buildInputs = [ pcsclite libusb1 ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "ccid drivers for pcsclite";
     homepage = "https://ccid.apdu.fr/";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/security/ccrypt/default.nix b/pkgs/tools/security/ccrypt/default.nix
index a3210b2a598..bf5f26f7044 100644
--- a/pkgs/tools/security/ccrypt/default.nix
+++ b/pkgs/tools/security/ccrypt/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, perl}:
+{lib, stdenv, fetchurl, perl}:
 
 stdenv.mkDerivation {
   name = "ccrypt-1.11";
@@ -15,8 +15,8 @@ stdenv.mkDerivation {
   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; 
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; all;
   };
 }
diff --git a/pkgs/tools/security/certmgr/default.nix b/pkgs/tools/security/certmgr/default.nix
index be3f891cc8b..e2318c853f1 100644
--- a/pkgs/tools/security/certmgr/default.nix
+++ b/pkgs/tools/security/certmgr/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub, fetchpatch }:
+{ lib, buildGoPackage, fetchFromGitHub, fetchpatch }:
 
 let
   generic = { patches ? [] }:
@@ -17,7 +17,7 @@ let
 
       inherit patches;
 
-      meta = with stdenv.lib; {
+      meta = with lib; {
         homepage = "https://cfssl.org/";
         description = "Cloudflare's certificate manager";
         platforms = platforms.linux;
diff --git a/pkgs/tools/security/certstrap/default.nix b/pkgs/tools/security/certstrap/default.nix
index 99ba5c9e29b..ff6522f1d35 100644
--- a/pkgs/tools/security/certstrap/default.nix
+++ b/pkgs/tools/security/certstrap/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "certstrap";
@@ -13,7 +13,7 @@ buildGoPackage rec {
     sha256 = "1ymchnn7c9g3pq7rw4lrwsd6z3wfjx90g7qgrw6r5hssl77mnscj";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit (src.meta) homepage;
     description = "Tools to bootstrap CAs, certificate requests, and signed certificates";
     license = licenses.asl20;
diff --git a/pkgs/tools/security/cewl/Gemfile b/pkgs/tools/security/cewl/Gemfile
new file mode 100644
index 00000000000..97d9ae757ac
--- /dev/null
+++ b/pkgs/tools/security/cewl/Gemfile
@@ -0,0 +1,8 @@
+source 'https://rubygems.org'
+gem 'mime'
+gem 'mime-types', ">=3.3.1"
+gem 'mini_exiftool'
+gem 'nokogiri'
+gem 'rexml'
+gem 'rubyzip'
+gem 'spider'
diff --git a/pkgs/tools/security/cewl/Gemfile.lock b/pkgs/tools/security/cewl/Gemfile.lock
new file mode 100644
index 00000000000..85bb2eb4b82
--- /dev/null
+++ b/pkgs/tools/security/cewl/Gemfile.lock
@@ -0,0 +1,31 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    mime (0.4.4)
+    mime-types (3.3.1)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2021.0704)
+    mini_exiftool (2.10.2)
+    mini_portile2 (2.5.3)
+    nokogiri (1.11.7)
+      mini_portile2 (~> 2.5.0)
+      racc (~> 1.4)
+    racc (1.5.2)
+    rexml (3.2.5)
+    rubyzip (2.3.2)
+    spider (0.5.4)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  mime
+  mime-types (>= 3.3.1)
+  mini_exiftool
+  nokogiri
+  rexml
+  rubyzip
+  spider
+
+BUNDLED WITH
+   2.1.4
diff --git a/pkgs/tools/security/cewl/default.nix b/pkgs/tools/security/cewl/default.nix
new file mode 100644
index 00000000000..06d983c14e3
--- /dev/null
+++ b/pkgs/tools/security/cewl/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, fetchFromGitHub, bundlerEnv }:
+
+let
+  rubyEnv = bundlerEnv {
+    name = "cewl-ruby-env";
+    gemdir = ./.;
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "cewl";
+  version = "5.5.2";
+  src = fetchFromGitHub {
+    owner = "digininja";
+    repo = "CeWL";
+    rev = version;
+    sha256 = "sha256-5LTZUr3OMeu1NODhIgBiVqtQnUWYfZTm73q61vT3rXc=";
+  };
+
+  buildInputs = [ rubyEnv.wrappedRuby ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp *.rb $out/bin/
+    mv $out/bin/cewl.rb $out/bin/cewl
+  '';
+
+  meta = with lib; {
+    description = "Custom wordlist generator";
+    homepage = "https://digi.ninja/projects/cewl.php/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ elohmeier ];
+  };
+}
diff --git a/pkgs/tools/security/cewl/gemset.nix b/pkgs/tools/security/cewl/gemset.nix
new file mode 100644
index 00000000000..851a6d2442d
--- /dev/null
+++ b/pkgs/tools/security/cewl/gemset.nix
@@ -0,0 +1,104 @@
+{
+  mime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nskys7brz2bylhxiknl0z9i19w3wb1knf0h93in6mjq70jdw5cr";
+      type = "gem";
+    };
+    version = "0.4.4";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zj12l9qk62anvk9bjvandpa6vy4xslil15wl6wlivyf51z773vh";
+      type = "gem";
+    };
+    version = "3.3.1";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dlxwc75iy0dj23x824cxpvpa7c8aqcpskksrmb32j6m66h5mkcy";
+      type = "gem";
+    };
+    version = "3.2021.0704";
+  };
+  mini_exiftool = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ir4wigpm6nkd3f40wcjdqrhjx3l60w1hwcg143is1a95ypnvqhr";
+      type = "gem";
+    };
+    version = "2.10.2";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ad0mli9rc0f17zw4ibp24dbj1y39zkykijsjmnzl4gwpg5s0j6k";
+      type = "gem";
+    };
+    version = "2.5.3";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vrn31385ix5k9b0yalnlzv360isv6dincbcvi8psllnwz4sjxj9";
+      type = "gem";
+    };
+    version = "1.11.7";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g";
+      type = "gem";
+    };
+    version = "1.5.2";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  spider = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fix7zhnvlfqg66bxwdpbsffbynzdnaifnxpakn07bjh3rdj75cx";
+      type = "gem";
+    };
+    version = "0.5.4";
+  };
+}
diff --git a/pkgs/tools/security/cfssl/default.nix b/pkgs/tools/security/cfssl/default.nix
index 1aef7b5bd56..6ef07c2c355 100644
--- a/pkgs/tools/security/cfssl/default.nix
+++ b/pkgs/tools/security/cfssl/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, buildGoModule, fetchFromGitHub, go-rice }:
+{ lib, buildGoModule, fetchFromGitHub, go-rice }:
 
 buildGoModule rec {
   pname = "cfssl";
-  version = "1.4.1";
+  version = "1.6.0";
 
   src = fetchFromGitHub {
     owner = "cloudflare";
     repo = "cfssl";
     rev = "v${version}";
-    sha256 = "07qacg95mbh94fv64y577zyr4vk986syf8h5l8lbcmpr0zcfk0pd";
+    sha256 = "sha256-29HEaW5LCoHcuJrfVUN2hnsRtaSTrvIBo8ok2UJbfuQ=";
   };
 
   subPackages = [
@@ -40,7 +40,7 @@ buildGoModule rec {
       -X github.com/cloudflare/cfssl/cli/version.version=v${version}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://cfssl.org/";
     description = "Cloudflare's PKI and TLS toolkit";
     license = licenses.bsd2;
diff --git a/pkgs/tools/security/chaps/default.nix b/pkgs/tools/security/chaps/default.nix
index decc9ba3126..2f89c3ea585 100644
--- a/pkgs/tools/security/chaps/default.nix
+++ b/pkgs/tools/security/chaps/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitiles, fetchFromGitHub, fetchurl, trousers, leveldb, unzip
-, scons, pkgconfig, glib, dbus_cplusplus, dbus, protobuf, openssl, snappy, pam
+{ lib, stdenv, fetchFromGitiles, fetchFromGitHub, fetchurl, trousers, leveldb, unzip
+, scons, pkg-config, glib, dbus_cplusplus, dbus, protobuf, openssl, snappy, pam
 }:
 
 let
@@ -49,7 +49,7 @@ stdenv.mkDerivation rec {
     substituteInPlace makefile --replace @@NIXOS_LEVELDB@@ ${leveldb}
     '';
 
-  nativeBuildInputs = [ unzip scons pkgconfig ];
+  nativeBuildInputs = [ unzip scons pkg-config ];
 
   buildInputs = [ trousers glib dbus_cplusplus dbus protobuf openssl snappy leveldb pam ];
 
@@ -80,7 +80,7 @@ stdenv.mkDerivation rec {
     cp ${name}/man/* $out/usr/share/man/man8/.
     '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/security/chipsec/compile-ko.diff b/pkgs/tools/security/chipsec/compile-ko.diff
new file mode 100644
index 00000000000..0ab2c80a625
--- /dev/null
+++ b/pkgs/tools/security/chipsec/compile-ko.diff
@@ -0,0 +1,13 @@
+diff --git i/setup.py w/setup.py
+index cfe2665..5795874 100755
+--- i/setup.py
++++ w/setup.py
+@@ -179,7 +179,7 @@ class build_ext(_build_ext):
+             driver_build_function = self._build_win_driver 
+             self._build_win_compression()
+ 
+-        if not self.skip_driver:
++        if True:
+             driver_build_function()
+ 
+     def get_source_files(self):
diff --git a/pkgs/tools/security/chipsec/default.nix b/pkgs/tools/security/chipsec/default.nix
index 5dccf295065..fbb9c421e35 100644
--- a/pkgs/tools/security/chipsec/default.nix
+++ b/pkgs/tools/security/chipsec/default.nix
@@ -1,29 +1,56 @@
-{ stdenv, lib, fetchFromGitHub, pythonPackages, nasm, libelf
-, kernel ? null, withDriver ? false }:
-pythonPackages.buildPythonApplication rec {
+{ lib
+, stdenv
+, fetchFromGitHub
+, kernel ? null
+, libelf
+, nasm
+, python3
+, withDriver ? false
+}:
+
+python3.pkgs.buildPythonApplication rec {
   pname = "chipsec";
-  version = "1.5.1";
+  version = "1.6.1";
+  disabled = !stdenv.isLinux;
 
   src = fetchFromGitHub {
     owner = "chipsec";
     repo = "chipsec";
     rev = version;
-    sha256 = "1rxr9i08a22m15slvlkrhnki30jixi2ds096kmmc2nqzfr9yibmb";
+    sha256 = "01sp24z63r3nqxx57zc4873b8i5dqipy7yrxzrwjns531vznhiy2";
   };
 
+  patches = lib.optionals withDriver [ ./ko-path.diff ./compile-ko.diff ];
+
+  KSRC = lib.optionalString withDriver "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build";
+
   nativeBuildInputs = [
-    nasm libelf
+    libelf
+    nasm
   ];
 
-  setupPyBuildFlags = lib.optional (!withDriver) "--skip-driver";
+  checkInputs = [
+    python3.pkgs.distro
+    python3.pkgs.pytestCheckHook
+  ];
+
+  preBuild = lib.optionalString withDriver ''
+    export CHIPSEC_BUILD_LIB=$(mktemp -d)
+    mkdir -p $CHIPSEC_BUILD_LIB/chipsec/helper/linux
+  '';
+
+  preInstall = lib.optionalString withDriver ''
+    mkdir -p $out/${python3.pkgs.python.sitePackages}/drivers/linux
+    mv $CHIPSEC_BUILD_LIB/chipsec/helper/linux/chipsec.ko \
+      $out/${python3.pkgs.python.sitePackages}/drivers/linux/chipsec.ko
+  '';
 
-  checkPhase = "python setup.py build "
-             + lib.optionalString (!withDriver) "--skip-driver "
-             + "test";
+  setupPyBuildFlags = [ "--build-lib=$CHIPSEC_BUILD_LIB" ]
+                   ++ lib.optional (!withDriver) "--skip-driver";
 
-  KERNEL_SRC_DIR = lib.optionalString withDriver "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build";
+  pythonImportsCheck = [ "chipsec" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Platform Security Assessment Framework";
     longDescription = ''
       CHIPSEC is a framework for analyzing the security of PC platforms
@@ -32,7 +59,7 @@ pythonPackages.buildPythonApplication rec {
       interfaces, and forensic capabilities. It can be run on Windows, Linux,
       Mac OS X and UEFI shell.
     '';
-    license = licenses.gpl2;
+    license = licenses.gpl2Only;
     homepage = "https://github.com/chipsec/chipsec";
     maintainers = with maintainers; [ johnazoidberg ];
     platforms = if withDriver then [ "x86_64-linux" ] else platforms.all;
diff --git a/pkgs/tools/security/chipsec/ko-path.diff b/pkgs/tools/security/chipsec/ko-path.diff
new file mode 100644
index 00000000000..ad26d232d96
--- /dev/null
+++ b/pkgs/tools/security/chipsec/ko-path.diff
@@ -0,0 +1,13 @@
+diff --git c/chipsec/helper/linux/linuxhelper.py i/chipsec/helper/linux/linuxhelper.py
+index c51b5e6..4be05ea 100644
+--- c/chipsec/helper/linux/linuxhelper.py
++++ i/chipsec/helper/linux/linuxhelper.py
+@@ -152,7 +152,7 @@ class LinuxHelper(Helper):
+             else:
+                 a2 = "a2=0x{}".format(phys_mem_access_prot)
+ 
+-        driver_path = os.path.join(chipsec.file.get_main_dir(), "chipsec", "helper", "linux", "chipsec.ko" )
++        driver_path = os.path.join(chipsec.file.get_main_dir(), "drivers", "linux", "chipsec.ko" )
+         if not os.path.exists(driver_path):
+             driver_path += ".xz"
+             if not os.path.exists(driver_path):
diff --git a/pkgs/tools/security/chkrootkit/default.nix b/pkgs/tools/security/chkrootkit/default.nix
index 864d73aaa97..b365fa62f95 100644
--- a/pkgs/tools/security/chkrootkit/default.nix
+++ b/pkgs/tools/security/chkrootkit/default.nix
@@ -1,27 +1,33 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl, makeWrapper, binutils-unwrapped }:
 
 stdenv.mkDerivation rec {
-  name = "chkrootkit-0.53";
+  pname = "chkrootkit";
+  version = "0.55";
 
   src = fetchurl {
-    url = "ftp://ftp.pangeia.com.br/pub/seg/pac/${name}.tar.gz";
-    sha256 = "1da5ry3p7jb6xs6xlfml1ly09q2rs5q6n5axif17d29k7gixlqkj";
+    url = "ftp://ftp.pangeia.com.br/pub/seg/pac/${pname}-${version}.tar.gz";
+    sha256 = "sha256-qBwChuxEkxP5U3ASAqAOgbIE/Cz0PieFhaEcEqXgJYs=";
   };
 
   # TODO: a lazy work-around for linux build failure ...
   makeFlags = [ "STATIC=" ];
 
-   postPatch = ''
+  nativeBuildInputs = [ makeWrapper ];
+
+  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
+
+    wrapProgram $out/sbin/chkrootkit \
+      --prefix PATH : "${lib.makeBinPath [ binutils-unwrapped ]}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Locally checks for signs of a rootkit";
     homepage = "http://www.chkrootkit.org/";
     license = licenses.bsd2;
diff --git a/pkgs/tools/security/chntpw/default.nix b/pkgs/tools/security/chntpw/default.nix
index 0a44c463eb7..5bda55c418a 100644
--- a/pkgs/tools/security/chntpw/default.nix
+++ b/pkgs/tools/security/chntpw/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, unzip }:
+{ lib, stdenv, fetchurl, unzip }:
 
 stdenv.mkDerivation rec {
   pname = "chntpw";
@@ -10,8 +10,8 @@ stdenv.mkDerivation rec {
     sha256 = "1k1cxsj0221dpsqi5yibq2hr7n8xywnicl8yyaicn91y8h2hkqln";
   };
 
-  buildInputs = [ unzip ]
-    ++ stdenv.lib.optionals stdenv.isLinux [ stdenv.glibc.out stdenv.glibc.static ];
+  nativeBuildInputs = [ unzip ];
+  buildInputs = lib.optionals stdenv.isLinux [ stdenv.glibc.out stdenv.glibc.static ];
 
   patches = [
     ./00-chntpw-build-arch-autodetect.patch
@@ -22,11 +22,11 @@ stdenv.mkDerivation rec {
     make install PREFIX=$out
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = with lib.maintainers; [ deepfire ];
     license = licenses.gpl2;
-    platforms = with stdenv.lib.platforms; linux;
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/security/chrome-token-signing/default.nix b/pkgs/tools/security/chrome-token-signing/default.nix
index 19dd9e9819a..5c2e6b4de15 100644
--- a/pkgs/tools/security/chrome-token-signing/default.nix
+++ b/pkgs/tools/security/chrome-token-signing/default.nix
@@ -1,17 +1,17 @@
-{ stdenv, mkDerivation, fetchFromGitHub, qmake, pcsclite, pkgconfig, opensc }:
+{ lib, mkDerivation, fetchFromGitHub, qmake, pcsclite, pkg-config, opensc }:
 
 mkDerivation rec {
   pname = "chrome-token-signing";
-  version = "1.1.2";
+  version = "1.1.2-1";
 
   src = fetchFromGitHub {
     owner = "open-eid";
     repo = "chrome-token-signing";
     rev = "v${version}";
-    sha256 = "0fqgci4336fbnd944zx9w37d5ky7i27n6wvlp5zv3hj955ldbh7g";
+    sha256 = "1vbghy12fjmq4m5l7hisq1ylnzy0rdnnd920xwamjamlx38jj3ln";
   };
 
-  buildInputs = [ qmake pcsclite pkgconfig ];
+  buildInputs = [ qmake pcsclite pkg-config ];
   dontUseQmakeConfigure = true;
 
   patchPhase = ''
@@ -28,7 +28,7 @@ mkDerivation rec {
     install -D -t $out/lib/mozilla/native-messaging-hosts host-linux/ff/ee.ria.esteid.json
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Chrome and Firefox extension for signing with your eID on the web";
     homepage = "https://github.com/open-eid/chrome-token-signing/wiki";
     license = licenses.lgpl21;
diff --git a/pkgs/tools/security/cipherscan/default.nix b/pkgs/tools/security/cipherscan/default.nix
index eae5a5256df..23022f92b6a 100644
--- a/pkgs/tools/security/cipherscan/default.nix
+++ b/pkgs/tools/security/cipherscan/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchFromGitHub, openssl, makeWrapper, python, coreutils }:
+{ stdenv, lib, fetchFromGitHub, openssl, makeWrapper, python3, coreutils }:
 
 stdenv.mkDerivation rec {
   pname = "cipherscan";
@@ -12,7 +12,9 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [ makeWrapper ];
-  buildInputs = [ python ];
+  buildInputs = [ python3 ];
+
+  strictDeps = true;
 
   buildPhase = ''
     substituteInPlace cipherscan --replace '$0' 'cipherscan'
diff --git a/pkgs/tools/security/clamav/default.nix b/pkgs/tools/security/clamav/default.nix
index fb523c5299c..2019f8ac99d 100644
--- a/pkgs/tools/security/clamav/default.nix
+++ b/pkgs/tools/security/clamav/default.nix
@@ -1,15 +1,15 @@
-{ stdenv, fetchurl, pkgconfig
+{ lib, stdenv, fetchurl, pkg-config
 , zlib, bzip2, libiconv, libxml2, openssl, ncurses, curl, libmilter, pcre2
-, libmspack, systemd, Foundation
+, libmspack, systemd, Foundation, json_c, check
 }:
 
 stdenv.mkDerivation rec {
   pname = "clamav";
-  version = "0.102.4";
+  version = "0.103.3";
 
   src = fetchurl {
     url = "https://www.clamav.net/downloads/production/${pname}-${version}.tar.gz";
-    sha256 = "06rrzyrhnr0rswryijpbbzywr6387rv8qjq8sb8cl3h2d1m45ggf";
+    sha256 = "sha256-n249GESfPRo5kncdaWaFJJ36EnNv4rKSmFjyx9gnauk=";
   };
 
   # don't install sample config files into the absolute sysconfdir folder
@@ -17,11 +17,12 @@ stdenv.mkDerivation rec {
     substituteInPlace Makefile.in --replace ' etc ' ' '
   '';
 
-  nativeBuildInputs = [ pkgconfig ];
+  enableParallelBuilding = true;
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [
-    zlib bzip2 libxml2 openssl ncurses curl libiconv libmilter pcre2 libmspack
-  ] ++ stdenv.lib.optional stdenv.isLinux systemd
-    ++ stdenv.lib.optional stdenv.isDarwin Foundation;
+    zlib bzip2 libxml2 openssl ncurses curl libiconv libmilter pcre2 libmspack json_c check
+  ] ++ lib.optional stdenv.isLinux systemd
+    ++ lib.optional stdenv.isDarwin Foundation;
 
   configureFlags = [
     "--libdir=$(out)/lib"
@@ -31,9 +32,12 @@ stdenv.mkDerivation rec {
     "--with-xml=${libxml2.dev}"
     "--with-openssl=${openssl.dev}"
     "--with-libcurl=${curl.dev}"
+    "--with-libjson=${json_c.dev}"
     "--with-system-libmspack"
     "--enable-milter"
-  ] ++ stdenv.lib.optional stdenv.isLinux
+    "--disable-unrar" # disable unrar because it's non-free and requires some extra patching to work properly
+    "--enable-check"
+  ] ++ lib.optional stdenv.isLinux
     "--with-systemdsystemunitdir=$(out)/lib/systemd";
 
   postInstall = ''
@@ -41,7 +45,11 @@ stdenv.mkDerivation rec {
     cp etc/*.sample $out/etc
   '';
 
-  meta = with stdenv.lib; {
+  # Only required for the unit tests
+  hardeningDisable = [ "format" ];
+  doCheck = true;
+
+  meta = with lib; {
     homepage = "https://www.clamav.net";
     description = "Antivirus engine designed for detecting Trojans, viruses, malware and other malicious threats";
     license = licenses.gpl2;
diff --git a/pkgs/tools/security/clevis/default.nix b/pkgs/tools/security/clevis/default.nix
index daeb5e0d39c..753fd8a6395 100644
--- a/pkgs/tools/security/clevis/default.nix
+++ b/pkgs/tools/security/clevis/default.nix
@@ -1,20 +1,34 @@
-{ lib, stdenv, fetchFromGitHub, meson, ninja, pkgconfig, asciidoc
-, jansson, jose, cryptsetup, curl, libpwquality, luksmeta
+{ lib, stdenv, fetchFromGitHub, meson, ninja, pkg-config, asciidoc
+, makeWrapper, jansson, jose, cryptsetup, curl, libpwquality, luksmeta
+, coreutils, tpm2-tools
 }:
 
 stdenv.mkDerivation rec {
   pname = "clevis";
-  version = "13";
+  version = "18";
 
   src = fetchFromGitHub {
     owner = "latchset";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1p522jjksxmdwjjxa32z2ij1g81ygpkmcx998d07g8pb6rfnknjy";
+    sha256 = "sha256-m1UhyjD5ydSgCTBu6sECLlxFx0rnQxFnBA7frbdUqU8=";
   };
 
-  nativeBuildInputs = [ meson ninja pkgconfig asciidoc ];
-  buildInputs = [ jansson jose cryptsetup curl libpwquality luksmeta ];
+  postPatch = ''
+    for f in $(find src/ -type f); do
+      grep -q "/bin/cat" "$f" && substituteInPlace "$f" \
+        --replace '/bin/cat' '${coreutils}/bin/cat' || true
+    done
+  '';
+
+  postInstall = ''
+    # We wrap the main clevis binary entrypoint but not the sub-binaries.
+    wrapProgram $out/bin/clevis \
+      --prefix PATH ':' "${tpm2-tools}/bin:${jose}/bin:${placeholder "out"}/bin"
+  '';
+
+  nativeBuildInputs = [ meson ninja pkg-config asciidoc makeWrapper ];
+  buildInputs = [ jansson jose cryptsetup curl libpwquality luksmeta tpm2-tools ];
 
   outputs = [ "out" "man" ];
 
diff --git a/pkgs/tools/security/cloudbrute/default.nix b/pkgs/tools/security/cloudbrute/default.nix
new file mode 100644
index 00000000000..84a59ec495f
--- /dev/null
+++ b/pkgs/tools/security/cloudbrute/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "cloudbrute";
+  version = "1.0.7";
+
+  src = fetchFromGitHub {
+    owner = "0xsha";
+    repo = "CloudBrute";
+    rev = "v${version}";
+    sha256 = "05b9klddk8wvi78j47jyg9pix6qpxyr01l1m7k1j7598siazfv9g";
+  };
+
+  vendorSha256 = "0f3n0wrmg9d2qyn8hlnhf9lsfqd9443myzr04p48v68m8n83j6a9";
+
+  meta = with lib; {
+    description = "Cloud enumeration tool";
+    longDescription = ''
+      A tool to find a company (target) infrastructure, files, and apps on
+      the top cloud providers (Amazon, Google, Microsoft, DigitalOcean,
+      Alibaba, Vultr, Linode).
+    '';
+    homepage = "https://github.com/0xsha/CloudBrute";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/corsmisc/default.nix b/pkgs/tools/security/corsmisc/default.nix
new file mode 100644
index 00000000000..4c64677f324
--- /dev/null
+++ b/pkgs/tools/security/corsmisc/default.nix
@@ -0,0 +1,25 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "corsmisc";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "drsigned";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "18a70v093jl85vnih80i50wvac8hsg3f2gmcws9jyhj2brndq2qj";
+  };
+
+  vendorSha256 = "1bp6bf99rxlyg91pn1y228q18lawpykmvkl22cydmclms0q0n238";
+
+  meta = with lib; {
+    description = "Tool to discover CORS misconfigurations vulnerabilities";
+    homepage = "https://github.com/drsigned/corsmisc";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/cosign/default.nix b/pkgs/tools/security/cosign/default.nix
new file mode 100644
index 00000000000..36781679c20
--- /dev/null
+++ b/pkgs/tools/security/cosign/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, lib, buildGoModule, fetchFromGitHub, pcsclite, pkg-config, PCSC, pivKeySupport ? true }:
+
+buildGoModule rec {
+  pname = "cosign";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "sigstore";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1h0lhbcrynaiwpgpkcn10yrn90j03g00w9hr2lvsj3cwmdbz0rcz";
+  };
+
+  buildInputs =
+    lib.optional (stdenv.isLinux && pivKeySupport) (lib.getDev pcsclite)
+    ++ lib.optionals (stdenv.isDarwin && pivKeySupport) [ PCSC ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  vendorSha256 = "0f3al6ds0kqyv2fapgdg9i38rfx6h169pmj6az0sfnkh2psq73ia";
+
+  excludedPackages = "\\(copasetic\\)";
+
+  preBuild = ''
+    buildFlagsArray+=(${lib.optionalString pivKeySupport "-tags=pivkey"})
+  '';
+  ldflags = [ "-s" "-w" "-X github.com/sigstore/cosign/cmd/cosign/cli.gitVersion=v${version}"];
+
+  meta = with lib; {
+    homepage = "https://github.com/sigstore/cosign";
+    changelog = "https://github.com/sigstore/cosign/releases/tag/v${version}";
+    description = "Container Signing CLI with support for ephemeral keys and Sigstore signing";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ lesuisse jk ];
+  };
+}
diff --git a/pkgs/tools/security/cowpatty/default.nix b/pkgs/tools/security/cowpatty/default.nix
index 7d58de8553b..4cd420650f3 100644
--- a/pkgs/tools/security/cowpatty/default.nix
+++ b/pkgs/tools/security/cowpatty/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchurl, openssl, libpcap
+{ lib, stdenv, fetchurl, openssl, libpcap
 }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   pname = "cowpatty";
diff --git a/pkgs/tools/security/crackxls/default.nix b/pkgs/tools/security/crackxls/default.nix
index e861d70f725..748bfdcb2ca 100644
--- a/pkgs/tools/security/crackxls/default.nix
+++ b/pkgs/tools/security/crackxls/default.nix
@@ -1,17 +1,18 @@
-{ stdenv, fetchgit, pkgconfig, autoconf, automake, openssl, libgsf, gmp }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, 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}";
+  src = fetchFromGitHub {
+    owner = "GavinSmith0123";
+    repo = "crackxls2003";
+    rev = "v${version}";
     sha256 = "0q5jl7hcds3f0rhly3iy4fhhbyh9cdrfaw7zdrazzf1wswwhyssz";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ autoconf automake openssl libgsf gmp ];
 
   installPhase =
@@ -20,7 +21,7 @@ stdenv.mkDerivation rec {
     cp crackxls2003 $out/bin/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/GavinSmith0123/crackxls2003/";
     description = "Used to break the encryption on old Microsoft Excel and Microsoft Word files";
     platforms = platforms.linux;
diff --git a/pkgs/tools/security/creddump/default.nix b/pkgs/tools/security/creddump/default.nix
index d37c58a5159..e9e5685acf4 100644
--- a/pkgs/tools/security/creddump/default.nix
+++ b/pkgs/tools/security/creddump/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitLab, python2, python2Packages }:
+{ lib, fetchFromGitLab, python2, python2Packages }:
 
 python2Packages.buildPythonApplication rec {
   pname = "creddump";
@@ -7,8 +7,7 @@ python2Packages.buildPythonApplication rec {
   src = fetchFromGitLab {
     owner = "kalilinux";
     repo = "packages/creddump";
-    # url-encoding workaround: https://github.com/NixOS/nixpkgs/issues/65796#issuecomment-517829019
-    rev = "debian%2F${version}-1kali2"; # %2F = urlquote("/")
+    rev = "debian/${version}-1kali2";
     sha256 = "0r3rs2hggsvv619l3fh3c0jli6d3ryyj30ni3hz0nz670z5smzcf";
   };
 
@@ -25,7 +24,7 @@ python2Packages.buildPythonApplication rec {
     cp lsadump.py ${placeholder "out"}/bin/lsadump
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Python tool to extract various credentials and secrets from Windows registry hives";
     homepage = "https://gitlab.com/kalilinux/packages/creddump";
     license = licenses.gpl3;
diff --git a/pkgs/tools/security/credslayer/default.nix b/pkgs/tools/security/credslayer/default.nix
new file mode 100644
index 00000000000..0de8d37c0db
--- /dev/null
+++ b/pkgs/tools/security/credslayer/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, fetchFromGitHub
+, python3
+, wireshark-cli
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "credslayer";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "ShellCode33";
+    repo = "CredSLayer";
+    rev = "v${version}";
+    sha256 = "1rbfy0h9c2gra1r2b39kngj3m7g177nmzzs5xy9np8lxixrh17pc";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pyshark
+  ];
+
+  checkInputs = with python3.pkgs; [
+    wireshark-cli
+    pytestCheckHook
+  ];
+
+  pytestFlagsArray = [ "tests/tests.py" ];
+
+  disabledTests = [
+    # Requires a telnet setup
+    "test_telnet"
+  ];
+
+  pythonImportsCheck = [ "credslayer" ];
+
+  meta = with lib; {
+    description = "Extract credentials and other useful info from network captures";
+    homepage = "https://github.com/ShellCode33/CredSLayer";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/crlfuzz/default.nix b/pkgs/tools/security/crlfuzz/default.nix
new file mode 100644
index 00000000000..d203d0d7f46
--- /dev/null
+++ b/pkgs/tools/security/crlfuzz/default.nix
@@ -0,0 +1,27 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "crlfuzz";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "dwisiswant0";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-rqhdxOQmZCRtq+IZygKLleb5GoKP2akyEc3rbGcnZmw=";
+  };
+
+  vendorSha256 = "sha256-yLtISEJWIKqCuZtQxReu/Vykw5etqgLpuXqOdtwBkqU=";
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Tool to scan for CRLF vulnerability";
+    homepage = "https://github.com/dwisiswant0/crlfuzz";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/crowbar/default.nix b/pkgs/tools/security/crowbar/default.nix
index cd4e7db8718..e58f77457de 100644
--- a/pkgs/tools/security/crowbar/default.nix
+++ b/pkgs/tools/security/crowbar/default.nix
@@ -3,7 +3,7 @@
 , nmap
 , openvpn
 , python3Packages
-, stdenv
+, lib
 , tigervnc
 }:
 
@@ -33,7 +33,7 @@ python3Packages.buildPythonApplication rec {
     $out/bin/crowbar --help > /dev/null
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/galkan/crowbar";
     description = "A brute forcing tool that can be used during penetration tests";
     license = licenses.mit;
diff --git a/pkgs/tools/security/crunch/default.nix b/pkgs/tools/security/crunch/default.nix
index b53ead1c852..df1d50c60fa 100644
--- a/pkgs/tools/security/crunch/default.nix
+++ b/pkgs/tools/security/crunch/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchurl, which }:
+{ lib, stdenv, fetchurl, which }:
 
-stdenv.mkDerivation  rec {
+stdenv.mkDerivation rec {
   pname = "crunch";
   version = "3.6";
 
@@ -20,10 +20,11 @@ stdenv.mkDerivation  rec {
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Wordlist generator";
     homepage = "https://sourceforge.net/projects/crunch-wordlist/";
     platforms = platforms.unix;
-    maintainers = with maintainers; [ lethalman lnl7 ];
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ lnl7 ];
   };
 }
diff --git a/pkgs/tools/security/cryptomator/default.nix b/pkgs/tools/security/cryptomator/default.nix
new file mode 100644
index 00000000000..ec18a5ed10c
--- /dev/null
+++ b/pkgs/tools/security/cryptomator/default.nix
@@ -0,0 +1,91 @@
+{ lib, stdenv, fetchFromGitHub
+, autoPatchelfHook
+, fuse, packer
+, maven, jdk, jre, makeWrapper, glib, wrapGAppsHook
+}:
+
+let
+  pname = "cryptomator";
+  version = "1.5.15";
+
+  src = fetchFromGitHub {
+    owner = "cryptomator";
+    repo = "cryptomator";
+    rev = version;
+    sha256 = "06n7wda7gfalvsg1rlcm51ss73nlbhh95z6zq18yvn040clkzkij";
+  };
+
+  icons = fetchFromGitHub {
+    owner = "cryptomator";
+    repo = "cryptomator-linux";
+    rev = version;
+    sha256 = "1sqbx858zglv0xkpjya0cpbkxf2hkj1xvxhnir3176y2xyjv6aib";
+  };
+
+  # perform fake build to make a fixed-output derivation out of the files downloaded from maven central (120MB)
+  deps = stdenv.mkDerivation {
+    name = "cryptomator-${version}-deps";
+    inherit src;
+
+    nativeBuildInputs = [ jdk maven ];
+
+    buildPhase = ''
+      cd main
+      while mvn -Prelease package -Dmaven.repo.local=$out/.m2 -Dmaven.wagon.rto=5000; [ $? = 1 ]; do
+        echo "timeout, restart maven to continue downloading"
+      done
+    '';
+
+    # keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside
+    installPhase = ''
+      find $out/.m2 -type f -regex '.+\(\.lastUpdated\|resolver-status\.properties\|_remote\.repositories\)' -delete
+      find $out/.m2 -type f -iname '*.pom' -exec sed -i -e 's/\r\+$//' {} \;
+    '';
+
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = "195ysv9l861y9d1lvmvi7wmk172ynlba9n233blpaigq88cjn208";
+  };
+
+in stdenv.mkDerivation rec {
+  inherit pname version src;
+
+  buildPhase = ''
+    cd main
+    mvn -Prelease package --offline -Dmaven.repo.local=$(cp -dpR ${deps}/.m2 ./ && chmod +w -R .m2 && pwd)/.m2
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin/ $out/usr/share/cryptomator/libs/
+
+    cp buildkit/target/libs/* buildkit/target/linux-libs/* $out/usr/share/cryptomator/libs/
+
+    makeWrapper ${jre}/bin/java $out/bin/cryptomator \
+      --add-flags "-classpath '$out/usr/share/cryptomator/libs/*'" \
+      --add-flags "-Dcryptomator.settingsPath='~/.config/Cryptomator/settings.json'" \
+      --add-flags "-Dcryptomator.ipcPortPath='~/.config/Cryptomator/ipcPort.bin'" \
+      --add-flags "-Dcryptomator.logDir='~/.local/share/Cryptomator/logs'" \
+      --add-flags "-Dcryptomator.mountPointsDir='~/.local/share/Cryptomator/mnt'" \
+      --add-flags "-Djdk.gtk.version=3" \
+      --add-flags "-Xss20m" \
+      --add-flags "-Xmx512m" \
+      --add-flags "org.cryptomator.launcher.Cryptomator" \
+      --prefix PATH : "$out/usr/share/cryptomator/libs/:${lib.makeBinPath [ jre glib ]}" \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ fuse ]}" \
+      --set JAVA_HOME "${jre.home}"
+
+    # install desktop entry and icons
+    cp -r ${icons}/resources/appimage/AppDir/usr/* $out/
+  '';
+
+  nativeBuildInputs = [ autoPatchelfHook maven makeWrapper wrapGAppsHook jdk ];
+  buildInputs = [ fuse packer jre glib ];
+
+  meta = with lib; {
+    description = "Free client-side encryption for your cloud files";
+    homepage = "https://cryptomator.org";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ bachp ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/security/ctmg/default.nix b/pkgs/tools/security/ctmg/default.nix
index a30523c3bbc..b08af06825e 100644
--- a/pkgs/tools/security/ctmg/default.nix
+++ b/pkgs/tools/security/ctmg/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchzip }:
+{ lib, stdenv, fetchzip }:
 
 stdenv.mkDerivation rec {
   pname = "ctmg";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
 
   installPhase = "install -D ctmg.sh $out/bin/ctmg";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "An encrypted container manager for Linux using cryptsetup";
     homepage = "https://git.zx2c4.com/ctmg/about/";
     license = licenses.isc;
diff --git a/pkgs/tools/security/deepsea/default.nix b/pkgs/tools/security/deepsea/default.nix
new file mode 100644
index 00000000000..e351eb7a79d
--- /dev/null
+++ b/pkgs/tools/security/deepsea/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "deepsea";
+  version = "0.9";
+
+  src = fetchFromGitHub {
+    owner = "dsnezhkov";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "02s03sha8vwp7dsaw3z446pskhb6wmy0hyj0mhpbx58sf147rkig";
+  };
+
+  vendorSha256 = "0vpkzykfg1rq4qi1v5lsa0drpil9i6ccfw96k48ppi9hiwzpq94w";
+
+  meta = with lib; {
+    description = "Phishing tool for red teams and pentesters";
+    longDescription = ''
+      DeepSea phishing gear aims to help RTOs and pentesters with the
+      delivery of opsec-tight, flexible email phishing campaigns carried
+      out on the outside as well as on the inside of a perimeter.
+    '';
+    homepage = "https://github.com/dsnezhkov/deepsea";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/dirmngr/default.nix b/pkgs/tools/security/dirmngr/default.nix
index ee97bda1906..cab059ca33e 100644
--- a/pkgs/tools/security/dirmngr/default.nix
+++ b/pkgs/tools/security/dirmngr/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libgpgerror, libgcrypt, libassuan, libksba, pth, openldap
+{ lib, stdenv, fetchurl, libgpgerror, libgcrypt, libassuan, libksba, pth, openldap
 , libiconv}:
 
 stdenv.mkDerivation rec {
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
                   pth openldap libiconv ];
 
   meta = {
-    platforms = stdenv.lib.platforms.unix;
-    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl2Plus;
   };
 }
diff --git a/pkgs/tools/security/dnsenum/default.nix b/pkgs/tools/security/dnsenum/default.nix
index 3374c827d75..a24fc96621f 100644
--- a/pkgs/tools/security/dnsenum/default.nix
+++ b/pkgs/tools/security/dnsenum/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, makeWrapper, perl, perlPackages }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper, perl, perlPackages }:
 
 stdenv.mkDerivation rec {
   pname = "dnsenum";
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
     install -vD dns.txt -t $out/share
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/fwaeytens/dnsenum";
     description = "A tool to enumerate DNS information";
     maintainers = with maintainers; [ c0bw3b ];
diff --git a/pkgs/tools/security/dnsrecon/default.nix b/pkgs/tools/security/dnsrecon/default.nix
index 2575636aeca..163728a37c6 100644
--- a/pkgs/tools/security/dnsrecon/default.nix
+++ b/pkgs/tools/security/dnsrecon/default.nix
@@ -1,8 +1,11 @@
-{ stdenv, fetchFromGitHub, python3 }:
+{ lib
+, fetchFromGitHub
+, python3
+}:
 
 python3.pkgs.buildPythonApplication rec {
   pname = "dnsrecon";
-  version = "0.9.1";
+  version = "0.10.1";
 
   src = fetchFromGitHub {
     owner = "darkoperator";
@@ -19,8 +22,7 @@ python3.pkgs.buildPythonApplication rec {
 
   postPatch = ''
     substituteInPlace dnsrecon.py \
-      --replace "namelist.txt" "../share/namelist.txt" \
-      --replace "0.9.0" "${version}"
+      --replace "namelist.txt" "../share/namelist.txt"
   '';
 
   installPhase = ''
@@ -34,11 +36,11 @@ python3.pkgs.buildPythonApplication rec {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "DNS Enumeration Script";
     homepage = "https://github.com/darkoperator/dnsrecon";
-    license = licenses.gpl2;
+    license = licenses.gpl2Only;
     platforms = platforms.all;
-    maintainers = with maintainers; [ c0bw3b ];
+    maintainers = with maintainers; [ c0bw3b fab ];
   };
 }
diff --git a/pkgs/tools/security/dnsx/default.nix b/pkgs/tools/security/dnsx/default.nix
new file mode 100644
index 00000000000..75c85deb1cc
--- /dev/null
+++ b/pkgs/tools/security/dnsx/default.nix
@@ -0,0 +1,31 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "dnsx";
+  version = "1.0.5";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = "dnsx";
+    rev = "v${version}";
+    sha256 = "sha256-w+FQp5pvySM36UHFxBH5WRZvnGi43NZeI2tLr6HAF3Q=";
+  };
+
+  vendorSha256 = "sha256-gsoeAau3klOFTu+ZEYEMdIuXw/5IVsfFJ2maxPaZKjA=";
+
+  meta = with lib; {
+    description = "Fast and multi-purpose DNS toolkit";
+    longDescription = ''
+      dnsx is a fast and multi-purpose DNS toolkit allow to run multiple
+      probers using retryabledns library, that allows you to perform
+      multiple DNS queries of your choice with a list of user supplied
+      resolvers.
+    '';
+    homepage = "https://github.com/projectdiscovery/dnsx";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/doas/default.nix b/pkgs/tools/security/doas/default.nix
index baa2fc301a8..7da3b8e9f06 100644
--- a/pkgs/tools/security/doas/default.nix
+++ b/pkgs/tools/security/doas/default.nix
@@ -1,21 +1,22 @@
-{ stdenv
-, lib
+{ lib
+, stdenv
 , fetchFromGitHub
 , bison
 , pam
 
+, withPAM ? true
 , withTimestamp ? true
 }:
 
 stdenv.mkDerivation rec {
   pname = "doas";
-  version = "6.6.1";
+  version = "6.8.1";
 
   src = fetchFromGitHub {
     owner = "Duncaen";
     repo = "OpenDoas";
     rev = "v${version}";
-    sha256 = "07kkc5729p654jrgfsc8zyhiwicgmq38yacmwfvay2b3gmy728zn";
+    sha256 = "sha256-F0FVVspGDZmzxy4nsb/wsEoCw4eHscymea7tIKrWzD0=";
   };
 
   # otherwise confuses ./configure
@@ -23,6 +24,7 @@ stdenv.mkDerivation rec {
 
   configureFlags = [
     (lib.optionalString withTimestamp "--with-timestamp") # to allow the "persist" setting
+    (lib.optionalString (!withPAM) "--without-pam")
     "--pamdir=${placeholder "out"}/etc/pam.d"
   ];
 
@@ -33,7 +35,7 @@ stdenv.mkDerivation rec {
   ];
 
   postPatch = ''
-    sed -i '/\(chown\|chmod\)/d' bsd.prog.mk
+    sed -i '/\(chown\|chmod\)/d' GNUmakefile
   '';
 
   buildInputs = [ bison pam ];
diff --git a/pkgs/tools/security/doona/default.nix b/pkgs/tools/security/doona/default.nix
index 5e1233f308c..e0f459ad745 100644
--- a/pkgs/tools/security/doona/default.nix
+++ b/pkgs/tools/security/doona/default.nix
@@ -1,5 +1,5 @@
 { fetchFromGitHub
-, stdenv
+, lib, stdenv
 , perl
 }:
 
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
     chmod +x $out/bin/doona
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/wireghoul/doona";
     description = "A fork of the Bruteforce Exploit Detector Tool (BED)";
     longDescription = ''
diff --git a/pkgs/tools/security/doppler/default.nix b/pkgs/tools/security/doppler/default.nix
index b637eacd3da..df466b0012d 100644
--- a/pkgs/tools/security/doppler/default.nix
+++ b/pkgs/tools/security/doppler/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "doppler";
-  version = "3.10.1";
+  version = "3.26.0";
 
   src = fetchFromGitHub {
     owner = "dopplerhq";
     repo = "cli";
     rev = version;
-    sha256 = "0wzs480dg6q6j8jzhk5lkf5hs53jf7ljmnyw3i9xwqm9sxq7dsfx";
+    sha256 = "sha256-x6LQDQ+DRfP4d87OWEppqk4FV7SHuRMog4m0DOWkvF4=";
   };
 
-  vendorSha256 = "0wqbwk72k4r30a3vnf0gnx3k97y8xgnr2iavk5bc8f8vkjv0bsv6";
+  vendorSha256 = "sha256-UaR/xYGMI+C9aID85aPSfVzmTWXj4KcjfOJ6TTJ8KoY=";
 
   buildFlagsArray = "-ldflags=-X github.com/DopplerHQ/cli/pkg/version.ProgramVersion=v${version}";
 
diff --git a/pkgs/tools/security/duo-unix/default.nix b/pkgs/tools/security/duo-unix/default.nix
index 2c3a7a441af..40645ce089d 100644
--- a/pkgs/tools/security/duo-unix/default.nix
+++ b/pkgs/tools/security/duo-unix/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pam, openssl, zlib }:
+{ lib, stdenv, fetchurl, pam, openssl, zlib }:
 
 stdenv.mkDerivation rec {
   pname = "duo-unix";
@@ -21,8 +21,8 @@ stdenv.mkDerivation rec {
   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 ];
+    license     = lib.licenses.gpl2;
+    platforms   = lib.platforms.unix;
+    maintainers = [ lib.maintainers.thoughtpolice ];
   };
 }
diff --git a/pkgs/tools/security/earlybird/default.nix b/pkgs/tools/security/earlybird/default.nix
new file mode 100644
index 00000000000..30916acda72
--- /dev/null
+++ b/pkgs/tools/security/earlybird/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+buildGoModule {
+  pname = "earlybird";
+  version = "1.25.0";
+
+  src = fetchFromGitHub {
+    owner = "americanexpress";
+    repo = "earlybird";
+    # According to the GitHub repo, the latest version *is* 1.25.0, but they
+    # tagged it as "refs/heads/main-2"
+    rev = "4f365f1c02972dc0a68a196a262912d9c4325b21";
+    sha256 = "UZXHYBwBmb9J1HrE/htPZcKvZ+7mc+oXnUtzgBmBgN4=";
+  };
+
+  vendorSha256 = "oSHBR1EvK/1+cXqGNCE9tWn6Kd/BwNY3m5XrKCAijhA=";
+
+  meta = with lib; {
+    description = "A sensitive data detection tool capable of scanning source code repositories for passwords, key files, and more";
+    homepage = "https://github.com/americanexpress/earlybird";
+    license = licenses.asl20;
+    maintainers = teams.determinatesystems.members;
+  };
+}
diff --git a/pkgs/tools/security/ecdsatool/default.nix b/pkgs/tools/security/ecdsatool/default.nix
index 524f38982cc..0498b758c1d 100644
--- a/pkgs/tools/security/ecdsatool/default.nix
+++ b/pkgs/tools/security/ecdsatool/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, pkgs }:
+{ lib, stdenv, pkgs }:
 
 stdenv.mkDerivation {
   version = "0.0.1";
@@ -19,8 +19,8 @@ stdenv.mkDerivation {
   nativeBuildInputs = with pkgs; [openssl autoconf automake];
   buildInputs = with pkgs; [libuecc];
 
-  meta = with stdenv.lib; {
-    description = "Create and manipulate ECC NISTP256 keypairs.";
+  meta = with lib; {
+    description = "Create and manipulate ECC NISTP256 keypairs";
     homepage = "https://github.com/kaniini/ecdsatool/";
     license = with licenses; [free];
     platforms = platforms.unix;
diff --git a/pkgs/tools/security/ecdsautils/default.nix b/pkgs/tools/security/ecdsautils/default.nix
index f5ead317f4e..6c126673259 100644
--- a/pkgs/tools/security/ecdsautils/default.nix
+++ b/pkgs/tools/security/ecdsautils/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, pkgs }:
+{ lib, stdenv, pkgs }:
 
 stdenv.mkDerivation {
   version = "0.4.0";
@@ -11,10 +11,10 @@ stdenv.mkDerivation {
     sha256 = "18sr8x3qiw8s9l5pfi7r9i3ayplz4jqdml75ga9y933vj7vs0k4d";
   };
 
-  nativeBuildInputs = with pkgs; [ cmake pkgconfig doxygen ];
+  nativeBuildInputs = with pkgs; [ cmake pkg-config doxygen ];
   buildInputs = with pkgs; [ libuecc  ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tiny collection of programs used for ECDSA (keygen, sign, verify)";
     homepage = "https://github.com/tcatm/ecdsautils/";
     license = with licenses; [ mit bsd2 ];
diff --git a/pkgs/tools/security/ecryptfs/default.nix b/pkgs/tools/security/ecryptfs/default.nix
index e4caa9c4e18..cd90342738e 100644
--- a/pkgs/tools/security/ecryptfs/default.nix
+++ b/pkgs/tools/security/ecryptfs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, perl, utillinux, keyutils, nss, nspr, python2, pam, enablePython ? false
+{ lib, stdenv, fetchurl, pkg-config, perl, util-linux, keyutils, nss, nspr, python2, pam, enablePython ? false
 , intltool, makeWrapper, coreutils, bash, gettext, cryptsetup, lvm2, rsync, which, lsof }:
 
 stdenv.mkDerivation rec {
@@ -17,8 +17,8 @@ stdenv.mkDerivation rec {
     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 /bin/mount ${util-linux}/bin/mount \
+        --replace /bin/umount ${util-linux}/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 \
@@ -33,14 +33,14 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  configureFlags = stdenv.lib.optionals (!enablePython) [ "--disable-pywrap" ];
+  configureFlags = lib.optionals (!enablePython) [ "--disable-pywrap" ];
 
-  nativeBuildInputs = [ pkgconfig ]
+  nativeBuildInputs = [ pkg-config makeWrapper ]
   # if python2 support is requested, it is needed at builtime as well as runtime.
-  ++ stdenv.lib.optionals (enablePython) [ python2 ]
+  ++ lib.optionals (enablePython) [ python2 ]
   ;
-  buildInputs = [ perl nss nspr pam intltool makeWrapper ]
-  ++ stdenv.lib.optionals (enablePython) [ python2 ]
+  buildInputs = [ perl nss nspr pam intltool ]
+  ++ lib.optionals (enablePython) [ python2 ]
   ;
   propagatedBuildInputs = [ coreutils gettext cryptsetup lvm2 rsync keyutils which ];
 
@@ -58,7 +58,7 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Enterprise-class stacked cryptographic filesystem";
     license     = licenses.gpl2Plus;
     maintainers = with maintainers; [ obadz ];
diff --git a/pkgs/tools/security/ecryptfs/helper.nix b/pkgs/tools/security/ecryptfs/helper.nix
index fcb8d091d93..e0252dac820 100644
--- a/pkgs/tools/security/ecryptfs/helper.nix
+++ b/pkgs/tools/security/ecryptfs/helper.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , makeWrapper
 , python2
@@ -13,9 +13,9 @@ stdenv.mkDerivation {
     sha256 = "0gp4m22zc80814ng80s38hp930aa8r4zqihr7jr23m0m2iq4pdpg";
   };
 
-  phases = [ "installPhase" ];
+  dontUnpack = true;
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
   # Do not hardcode PATH to ${ecryptfs} as we need the script to invoke executables from /run/wrappers/bin
   installPhase = ''
@@ -24,7 +24,7 @@ stdenv.mkDerivation {
     makeWrapper "${python2.interpreter}" "$out/bin/ecryptfs-helper" --add-flags "$out/libexec/ecryptfs-helper.py"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description    = "Helper script to create/mount/unemount encrypted directories using eCryptfs without needing root permissions";
     license        = licenses.gpl2Plus;
     maintainers    = with maintainers; [ obadz ];
diff --git a/pkgs/tools/security/efitools/default.nix b/pkgs/tools/security/efitools/default.nix
index 33b6c3b672d..60bb3627cc9 100644
--- a/pkgs/tools/security/efitools/default.nix
+++ b/pkgs/tools/security/efitools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, gnu-efi, openssl, sbsigntool, perl, perlPackages,
+{ lib, stdenv, gnu-efi, openssl, sbsigntool, perl, perlPackages,
 help2man, fetchgit }:
 stdenv.mkDerivation rec {
   pname = "efitools";
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
     patchShebangs .
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tools for manipulating UEFI secure boot platforms";
     homepage = "https://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git";
     license = licenses.gpl2;
diff --git a/pkgs/tools/security/eid-mw/default.nix b/pkgs/tools/security/eid-mw/default.nix
index 1fdd5b9a722..a2a6caf2b11 100644
--- a/pkgs/tools/security/eid-mw/default.nix
+++ b/pkgs/tools/security/eid-mw/default.nix
@@ -1,24 +1,37 @@
-{ stdenv, fetchFromGitHub
-, autoreconfHook, pkgconfig
-, gtk3, nssTools, pcsclite
-, libxml2, libproxy 
-, openssl, curl
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, autoconf-archive
+, pkg-config
 , makeWrapper
-, substituteAll }:
+, curl
+, gtk3
+, libassuan
+, libbsd
+, libproxy
+, libxml2
+, openssl
+, p11-kit
+, pcsclite
+, nssTools
+, substituteAll
+}:
 
 stdenv.mkDerivation rec {
   pname = "eid-mw";
-  version = "4.4.27";
+  # NOTE: Don't just blindly update to the latest version/tag. Releases are always for a specific OS.
+  version = "5.0.23";
 
   src = fetchFromGitHub {
     rev = "v${version}";
-    sha256 = "17lw8iwp7h5cs3db80sysr84ffi333cf2vrhncs9l6hy6glfl2v1";
+    sha256 = "0annkm0hqhkpjmfa6ywvzgn1n9619baqdzdbhjfhzfi4hf7mml1d";
     repo = "eid-mw";
     owner = "Fedict";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig makeWrapper ];
-  buildInputs = [ gtk3 pcsclite libxml2 libproxy curl openssl ];
+  nativeBuildInputs = [ autoreconfHook autoconf-archive pkg-config makeWrapper ];
+  buildInputs = [ curl gtk3 libassuan libbsd libproxy libxml2 openssl p11-kit pcsclite ];
   preConfigure = ''
     mkdir openssl
     ln -s ${openssl.out}/lib openssl
@@ -27,42 +40,42 @@ stdenv.mkDerivation rec {
     export SSL_PREFIX=$(realpath openssl)
     substituteInPlace plugins_tools/eid-viewer/Makefile.in \
       --replace "c_rehash" "openssl rehash"
-    '';
+  '';
+  # pinentry uses hardcoded `/usr/bin/pinentry`, so use the built-in (uglier) dialogs for pinentry.
+  configureFlags = [ "--disable-pinentry" ];
 
   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"
+    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" 
-  '';
+      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; {
+  meta = with 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;
+    homepage = "https://eid.belgium.be/en/using_your_eid/installing_the_eid_software/linux/";
+    license = licenses.lgpl3Only;
     longDescription = ''
       Allows user authentication and digital signatures with Belgian ID cards.
-      Also requires a running pcscd service and compatible card reader. 
+      Also requires a running pcscd service and compatible card reader.
 
       eid-viewer is also installed.
 
@@ -83,6 +96,6 @@ stdenv.mkDerivation rec {
           firefox.override { pkcs11Modules = [ pkgs.eid-mw ]; }
     '';
     platforms = platforms.linux;
-    maintainers = with maintainers; [ bfortz ];
+    maintainers = with maintainers; [ bfortz chvp ];
   };
 }
diff --git a/pkgs/tools/security/enchive/default.nix b/pkgs/tools/security/enchive/default.nix
index 3c7d3144d3b..960ef251b1c 100644
--- a/pkgs/tools/security/enchive/default.nix
+++ b/pkgs/tools/security/enchive/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "enchive";
@@ -20,8 +20,8 @@ stdenv.mkDerivation rec {
   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 ];
+    license = lib.licenses.unlicense;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.nico202 ];
   };
 }
diff --git a/pkgs/tools/security/encryptr/default.nix b/pkgs/tools/security/encryptr/default.nix
index b4c2bef2cf4..92d783dd5fd 100644
--- a/pkgs/tools/security/encryptr/default.nix
+++ b/pkgs/tools/security/encryptr/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchurl, glib, nss, nspr, gconf, fontconfig, freetype
+{ stdenv, lib, fetchurl, glib, nss, nspr, gconf, fontconfig, freetype
 , pango , cairo, libX11 , libXi, libXcursor, libXext, libXfixes
-, libXrender, libXcomposite , alsaLib, libXdamage, libXtst, libXrandr
+, libXrender, libXcomposite , alsa-lib, libXdamage, libXtst, libXrandr
 , expat, libcap, systemd , dbus, gtk2 , gdk-pixbuf, libnotify
 }:
 
@@ -24,9 +24,9 @@ in stdenv.mkDerivation rec {
 
   dontBuild = true;
 
-  rpath = stdenv.lib.makeLibraryPath [
+  rpath = lib.makeLibraryPath [
     glib nss nspr gconf fontconfig freetype pango cairo libX11 libXi
-    libXcursor libXext libXfixes libXrender libXcomposite alsaLib
+    libXcursor libXext libXfixes libXrender libXcomposite alsa-lib
     libXdamage libXtst libXrandr expat libcap dbus gtk2 gdk-pixbuf
     libnotify stdenv.cc.cc
   ];
@@ -36,7 +36,7 @@ in stdenv.mkDerivation rec {
     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
+    ln -sv ${lib.getLib systemd}/lib/libudev.so.1 $out/lib/libudev.so.0
 
     patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
              --set-rpath $out/lib:${rpath} \
@@ -47,7 +47,7 @@ in stdenv.mkDerivation rec {
   # its application and shows a generic page
   dontStrip = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://spideroak.com/solutions/encryptr";
     description = "Free, private and secure password management tool and e-wallet";
     license = licenses.unfree;
diff --git a/pkgs/tools/security/enpass/data.json b/pkgs/tools/security/enpass/data.json
index a4a3b919e64..bb74f73fb75 100644
--- a/pkgs/tools/security/enpass/data.json
+++ b/pkgs/tools/security/enpass/data.json
@@ -1,12 +1,12 @@
 {
   "amd64": {
-    "path": "pool/main/e/enpass/enpass_6.0.1.239_amd64.deb", 
-    "sha256": "408a2bb318564307607f13b52fec7667f425c01ac40cbe345ebfa191ab1479ba", 
-    "version": "6.0.1.239"
-  }, 
+    "path": "pool/main/e/enpass/enpass_6.6.1.809_amd64.deb",
+    "sha256": "b1b9bd67653c3163bd80b340150ecf123552cbe4af23c350fbadea8ffd7939ba",
+    "version": "6.6.1.809"
+  },
   "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/pkgs/tools/security/enpass/default.nix b/pkgs/tools/security/enpass/default.nix
index 370282d02d0..63f25bc12ef 100644
--- a/pkgs/tools/security/enpass/default.nix
+++ b/pkgs/tools/security/enpass/default.nix
@@ -2,7 +2,7 @@
 , glib, libGLU, libGL, libpulseaudio, zlib, dbus, fontconfig, freetype
 , gtk3, pango
 , makeWrapper , python2Packages, lib
-, lsof, curl, libuuid, cups, mesa
+, lsof, curl, libuuid, cups, mesa, xz, libxkbcommon
 }:
 
 let
@@ -38,6 +38,8 @@ let
     curl
     libuuid
     cups
+    xz
+    libxkbcommon
   ]);
   package = stdenv.mkDerivation {
 
@@ -49,15 +51,16 @@ let
       url = "${baseUrl}/${data.path}";
     };
 
-    meta = {
-      description = "a well known password manager";
+    meta = with lib; {
+      description = "A well known password manager";
       homepage = "https://www.enpass.io/";
-      license = lib.licenses.unfree;
+      license = licenses.unfree;
       platforms = [ "x86_64-linux" "i686-linux"];
+      maintainers = with maintainers; [ ewok ];
     };
 
-    buildInputs = [makeWrapper dpkg];
-    phases = [ "unpackPhase" "installPhase" ];
+    nativeBuildInputs = [ makeWrapper ];
+    buildInputs = [dpkg];
 
     unpackPhase = "dpkg -X $src .";
     installPhase=''
@@ -76,7 +79,9 @@ let
       # lsof must be in PATH for proper operation
       wrapProgram $out/bin/Enpass \
         --set LD_LIBRARY_PATH "${libPath}" \
-        --prefix PATH : ${lsof}/bin
+        --prefix PATH : ${lsof}/bin \
+        --unset QML2_IMPORT_PATH \
+        --unset QT_PLUGIN_PATH
     '';
   };
   updater = {
diff --git a/pkgs/tools/security/enum4linux-ng/default.nix b/pkgs/tools/security/enum4linux-ng/default.nix
new file mode 100644
index 00000000000..33694ad79ae
--- /dev/null
+++ b/pkgs/tools/security/enum4linux-ng/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, impacket
+, ldap3
+, pyyaml
+, samba
+}:
+
+buildPythonApplication rec {
+  pname = "enum4linux-ng";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "cddmp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0dhg8cwbdn0vlnchhscx31ay4mgj5p6rf73wzgs8nvqg0shsawmy";
+  };
+
+  propagatedBuildInputs = [
+    impacket
+    ldap3
+    pyyaml
+    samba
+  ];
+
+  # It's only a script and not a Python module. Project has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Windows/Samba enumeration tool";
+    longDescription = ''
+      enum4linux-ng.py is a rewrite of Mark Lowe's enum4linux.pl, a tool for
+      enumerating information from Windows and Samba systems.
+    '';
+    homepage = "https://github.com/cddmp/enum4linux-ng";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/enum4linux/default.nix b/pkgs/tools/security/enum4linux/default.nix
index 9a7d1861d9b..9a9f2039ac2 100644
--- a/pkgs/tools/security/enum4linux/default.nix
+++ b/pkgs/tools/security/enum4linux/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, makeWrapper, samba, perl, openldap }:
+{ lib, stdenv, fetchurl, makeWrapper, samba, perl, openldap }:
 
 stdenv.mkDerivation rec {
   pname = "enum4linux";
@@ -17,10 +17,10 @@ stdenv.mkDerivation rec {
     cp enum4linux.pl $out/bin/enum4linux
 
     wrapProgram $out/bin/enum4linux \
-      --prefix PATH : ${stdenv.lib.makeBinPath [ samba openldap ]}
+      --prefix PATH : ${lib.makeBinPath [ samba openldap ]}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tool for enumerating information from Windows and Samba systems";
     homepage = "https://labs.portcullis.co.uk/tools/enum4linux/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/security/eschalot/default.nix b/pkgs/tools/security/eschalot/default.nix
index 28df3a28442..0c984c5d35e 100644
--- a/pkgs/tools/security/eschalot/default.nix
+++ b/pkgs/tools/security/eschalot/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchFromGitHub, openssl }:
+{ lib, stdenv, fetchFromGitHub, openssl }:
 
 stdenv.mkDerivation rec {
   pname = "eschalot";
-  version = "2018-01-19";
+  version = "1.2.0.20191006";
 
   src = fetchFromGitHub {
     owner = "ReclaimYourPrivacy";
     repo = pname;
-    rev = "56a967b62631cfd3c7ef68541263dbd54cbbc2c4";
-    sha256 = "1iw1jrydasm9dmgpcdimd8dy9n281ys9krvf3fd3dlymkgsj604d";
+    rev = "a45bad5b9a3e4939340ddd8a751ceffa3c0db76a";
+    sha256 = "1wbi0azc2b57nmmx6c1wmvng70d9ph1s83yhnl5lxaaqaj85h22g";
   };
 
   buildInputs = [ openssl ];
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
     install -D -t $out/bin eschalot worgen
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tor hidden service name generator";
     homepage = src.meta.homepage;
     license = licenses.isc;
diff --git a/pkgs/tools/security/expliot/default.nix b/pkgs/tools/security/expliot/default.nix
new file mode 100644
index 00000000000..02a9ea5ee74
--- /dev/null
+++ b/pkgs/tools/security/expliot/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, aiocoap
+, awsiotpythonsdk
+, bluepy
+, buildPythonApplication
+, can
+, cmd2
+, cryptography
+, fetchFromGitLab
+, paho-mqtt
+, pyi2cflash
+, pymodbus
+, pynetdicom
+, pyparsing
+, pyserial
+, pyspiflash
+, pythonOlder
+, upnpy
+, xmltodict
+, zeroconf
+}:
+
+buildPythonApplication rec {
+  pname = "expliot";
+  version = "0.9.8";
+  disabled = pythonOlder "3.7";
+
+  src = fetchFromGitLab {
+    owner = "expliot_framework";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-7Cuj3YKKwDxP2KKueJR9ZO5Bduv+lw0Y87Rw4b0jbGY=";
+  };
+
+  propagatedBuildInputs = [
+    aiocoap
+    awsiotpythonsdk
+    bluepy
+    can
+    cmd2
+    cryptography
+    paho-mqtt
+    pyi2cflash
+    pymodbus
+    pynetdicom
+    pyparsing
+    pyserial
+    pyspiflash
+    upnpy
+    xmltodict
+    zeroconf
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "expliot" ];
+
+  meta = with lib; {
+    description = "IoT security testing and exploitation framework";
+    longDescription = ''
+      EXPLIoT is a Framework for security testing and exploiting IoT
+      products and IoT infrastructure. It provides a set of plugins
+      (test cases) which are used to perform the assessment and can
+      be extended easily with new ones. The name EXPLIoT (pronounced
+      expl-aa-yo-tee) is a pun on the word exploit and explains the
+      purpose of the framework i.e. IoT exploitation.
+    '';
+    homepage = "https://expliot.readthedocs.io/";
+    license = with licenses; [ agpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/exploitdb/default.nix b/pkgs/tools/security/exploitdb/default.nix
new file mode 100644
index 00000000000..5cd7f4f63bf
--- /dev/null
+++ b/pkgs/tools/security/exploitdb/default.nix
@@ -0,0 +1,26 @@
+{stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "exploitdb";
+  version = "2021-07-27";
+
+  src = fetchFromGitHub {
+    owner = "offensive-security";
+    repo = pname;
+    rev = version;
+    sha256 = "077y7rzvmv0kzwrhm592fsjd2lv839b5wzf59vq9cd3j313bdaab";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp --recursive ./* $out/bin
+    cp ./.searchsploit_rc $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/offensive-security/exploitdb";
+    description = "Archive of public exploits and corresponding vulnerable software";
+    license = with licenses; [ gpl2Plus gpl3Plus mit ];
+    maintainers = with maintainers; [ applePrincess ];
+  };
+}
diff --git a/pkgs/tools/security/fail2ban/default.nix b/pkgs/tools/security/fail2ban/default.nix
index 6377e829aa6..18128639ff4 100644
--- a/pkgs/tools/security/fail2ban/default.nix
+++ b/pkgs/tools/security/fail2ban/default.nix
@@ -1,20 +1,19 @@
-{ stdenv, fetchFromGitHub, python3, gamin }:
+{ lib, stdenv, fetchFromGitHub, python3 }:
 
-let version = "0.11.1"; in
 
-python3.pkgs.buildPythonApplication {
+python3.pkgs.buildPythonApplication rec {
   pname = "fail2ban";
-  inherit version;
+  version = "0.11.2";
 
   src = fetchFromGitHub {
-    owner  = "fail2ban";
-    repo   = "fail2ban";
-    rev    = version;
-    sha256 = "0kqvkxpb72y3kgmxf6g36w67499c6gcd2a9yyblagwx12y05f1sh";
+    owner = "fail2ban";
+    repo = "fail2ban";
+    rev = version;
+    sha256 = "q4U9iWCa1zg8sA+6pPNejt6v/41WGIKN5wITJCrCqQE=";
   };
 
   pythonPath = with python3.pkgs;
-    stdenv.lib.optionals stdenv.isLinux [
+    lib.optionals stdenv.isLinux [
       systemd
     ];
 
@@ -42,18 +41,20 @@ python3.pkgs.buildPythonApplication {
     ${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    = "https://www.fail2ban.org/";
+  postInstall =
+    let
+      sitePackages = "$out/${python3.sitePackages}";
+    in
+    ''
+      # see https://github.com/NixOS/nixpkgs/issues/4968
+      rm -r ${sitePackages}/etc ${sitePackages}/usr
+    '';
+
+  meta = with lib; {
+    homepage = "https://www.fail2ban.org/";
     description = "A program that scans log files for repeated failing login attempts and bans IP addresses";
-    license     = licenses.gpl2Plus;
+    license = licenses.gpl2Plus;
     maintainers = with maintainers; [ eelco lovek323 fpletz ];
-    platforms   = platforms.linux ++ platforms.darwin;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/security/fcrackzip/default.nix b/pkgs/tools/security/fcrackzip/default.nix
index 15510f7b709..31d0b44fb71 100644
--- a/pkgs/tools/security/fcrackzip/default.nix
+++ b/pkgs/tools/security/fcrackzip/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation rec {
   pname = "fcrackzip";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
   # Do not clash with unizp/zipinfo
   postInstall = "mv $out/bin/zipinfo $out/bin/fcrackzip-zipinfo";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "zip password cracker, similar to fzc, zipcrack and others";
     homepage = "http://oldhome.schmorp.de/marc/fcrackzip.html";
     license = licenses.gpl2;
diff --git a/pkgs/tools/security/ffuf/default.nix b/pkgs/tools/security/ffuf/default.nix
new file mode 100644
index 00000000000..076fd78d713
--- /dev/null
+++ b/pkgs/tools/security/ffuf/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "ffuf";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-NkRf36wFmzqFv13P0DxpzEOGyBGbSXMLjWE7URzRXGY=";
+  };
+
+  vendorSha256 = "sha256-szT08rIozAuliOmge5RFX4NeVrJ2pCVyfotrHuvc0UU=";
+
+  meta = with lib; {
+    description = "Fast web fuzzer written in Go";
+    longDescription = ''
+      FFUF, or “Fuzz Faster you Fool” is an open source web fuzzing tool,
+      intended for discovering elements and content within web applications
+      or web servers.
+    '';
+    homepage = "https://github.com/ffuf/ffuf";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/fido2luks/default.nix b/pkgs/tools/security/fido2luks/default.nix
index 729a3f7297c..1229620c21c 100644
--- a/pkgs/tools/security/fido2luks/default.nix
+++ b/pkgs/tools/security/fido2luks/default.nix
@@ -1,27 +1,33 @@
-{ stdenv
+{ lib
 , rustPlatform
 , fetchFromGitHub
 , cryptsetup
 , pkg-config
+, clang
+, llvmPackages
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "fido2luks";
-  version = "0.2.3";
+  version = "0.2.19";
 
   src = fetchFromGitHub {
     owner = "shimunn";
     repo = pname;
     rev = version;
-    sha256 = "0340xp7q6f0clb7wmqpgllllwsixmsy37k1f5kj3hwvb730rz93x";
+    sha256 = "sha256-o21KdsAE9KznobdMMKfVmVnENsLW3cMZjssnrsoN+KY=";
   };
 
   buildInputs = [ cryptsetup ];
-  nativeBuildInputs = [ pkg-config ];
+  nativeBuildInputs = [ pkg-config clang ];
 
-  cargoSha256 = "0rp4f6xnwmvf3pv6h0qwsg01jrndf77yn67675ac39kxzmrzfy2f";
+  configurePhase = ''
+    export LIBCLANG_PATH="${llvmPackages.libclang.lib}/lib"
+  '';
 
-  meta = with stdenv.lib; {
+  cargoSha256 = "sha256-8JFe3mivf2Ewu1nLMugeeK+9ZXAGPHaqCyKfWfwLOc8=";
+
+  meta = with lib; {
     description = "Decrypt your LUKS partition using a FIDO2 compatible authenticator";
     homepage = "https://github.com/shimunn/fido2luks";
     license = licenses.gpl3;
diff --git a/pkgs/tools/security/fierce/default.nix b/pkgs/tools/security/fierce/default.nix
index 5d12a000815..95be0dcaedd 100644
--- a/pkgs/tools/security/fierce/default.nix
+++ b/pkgs/tools/security/fierce/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python3 }:
+{ lib, fetchFromGitHub, python3 }:
 
 python3.pkgs.buildPythonApplication rec {
   pname = "fierce";
@@ -11,9 +11,17 @@ python3.pkgs.buildPythonApplication rec {
     sha256 = "11yaz8ap9swx95j3wpqh0b6jhw6spqgfnsyn1liw9zqi4jwgiax7";
   };
 
-  propagatedBuildInputs = [ python3.pkgs.dns ];
+  postPatch = ''
+    substituteInPlace requirements.txt --replace 'dnspython==1.16.0' 'dnspython'
+  '';
 
-  meta = with stdenv.lib; {
+  propagatedBuildInputs = [ python3.pkgs.dnspython ];
+
+  # tests require network access
+  doCheck = false;
+  pythonImportsCheck = [ "fierce" ];
+
+  meta = with lib; {
     homepage = "https://github.com/mschwager/fierce";
     description = "DNS reconnaissance tool for locating non-contiguous IP space";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/security/flare-floss/default.nix b/pkgs/tools/security/flare-floss/default.nix
new file mode 100644
index 00000000000..fbf065dc3b1
--- /dev/null
+++ b/pkgs/tools/security/flare-floss/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonPackage rec {
+  pname = "flare-floss";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "fireeye";
+    repo = "flare-floss";
+    rev = "v${version}";
+    sha256 = "GMOA1+qM2A/Qw33kOTIINEvjsfqjWQWBXHNemh3IK8w=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pyyaml
+    simplejson
+    tabulate
+    vivisect
+    plugnplay
+    viv-utils
+  ];
+
+  checkInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # test data is in a submodule
+    "test_main"
+  ];
+
+  pythonImportsCheck = [
+    "floss"
+    "floss.plugins"
+  ];
+
+  meta = with lib; {
+    description = "Automatically extract obfuscated strings from malware";
+    homepage = "https://github.com/fireeye/flare-floss";
+    license = licenses.asl20;
+    maintainers = teams.determinatesystems.members;
+  };
+}
diff --git a/pkgs/tools/security/fpm2/default.nix b/pkgs/tools/security/fpm2/default.nix
index 3d082523f6f..0ca45957d69 100644
--- a/pkgs/tools/security/fpm2/default.nix
+++ b/pkgs/tools/security/fpm2/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, pkgconfig, gnupg, gtk2
+{ lib, stdenv, fetchurl, pkg-config, gnupg, gtk2
 , libxml2, intltool
 }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   pname = "fpm2";
@@ -13,11 +13,11 @@ stdenv.mkDerivation rec {
     sha256 = "d55e9ce6be38a44fc1053d82db2d117cf3991a51898bd86d7913bae769f04da7";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   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.";
+    description = "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;
diff --git a/pkgs/tools/security/fprintd/default.nix b/pkgs/tools/security/fprintd/default.nix
index b14aff386ab..0ae04ddb30f 100644
--- a/pkgs/tools/security/fprintd/default.nix
+++ b/pkgs/tools/security/fprintd/default.nix
@@ -1,7 +1,7 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitLab
-, fetchpatch
-, pkgconfig
+, pkg-config
+, gobject-introspection
 , meson
 , ninja
 , perl
@@ -11,9 +11,10 @@
 , libxslt
 , docbook-xsl-nons
 , docbook_xml_dtd_412
+, fetchurl
 , glib
+, gusb
 , dbus
-, dbus-glib
 , polkit
 , nss
 , pam
@@ -24,52 +25,41 @@
 
 stdenv.mkDerivation rec {
   pname = "fprintd";
-  version = "1.90.1";
+  version = "1.90.9";
   outputs = [ "out" "devdoc" ];
 
   src = fetchFromGitLab {
     domain = "gitlab.freedesktop.org";
     owner = "libfprint";
     repo = pname;
-    rev = version;
-    sha256 = "0mbzk263x7f58i9cxhs44mrngs7zw5wkm62j5r6xlcidhmfn03cg";
+    rev = "v${version}";
+    sha256 = "rOTVThHOY/Q2IIu2RGiv26UE2V/JFfWWnfKZQfKl5Mg=";
   };
 
-  patches = [
-    # Fixes issue with ":" when there is multiple paths (might be the case on NixOS)
-    # https://gitlab.freedesktop.org/libfprint/fprintd/-/merge_requests/50
-    (fetchpatch {
-      url = "https://gitlab.freedesktop.org/libfprint/fprintd/-/commit/d7fec03f24d10f88d34581c72f0eef201f5eafac.patch";
-      sha256 = "0f88dhizai8jz7hpm5lpki1fx4593zcy89iwi4brsqbqc7jp9ls0";
-    })
-
-    # Fix locating libpam_wrapper for tests
-    (fetchpatch {
-      url = "https://gitlab.freedesktop.org/libfprint/fprintd/-/merge_requests/40.patch";
-      sha256 = "0qqy090p93lzabavwjxzxaqidkcb3ifacl0d3yh1q7ms2a58yyz3";
-    })
-    (fetchpatch {
-      url = "https://gitlab.freedesktop.org/libfprint/fprintd/-/commit/f401f399a85dbeb2de165b9b9162eb552ab6eea7.patch";
-      sha256 = "1bc9g6kc95imlcdpvp8qgqjsnsxg6nipr6817c1pz5i407yvw1iy";
-    })
-  ];
-
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     meson
     ninja
-    perl
+    perl # for pod2man
     gettext
     gtk-doc
     libxslt
-    dbus
+    # TODO: apply this to D-Bus so that other packages can benefit.
+    # https://gitlab.freedesktop.org/dbus/dbus/-/merge_requests/202
+    (dbus.overrideAttrs (attrs: {
+      postInstall = attrs.postInstall or "" + ''
+        ln -s ${fetchurl {
+          url = "https://gitlab.freedesktop.org/dbus/dbus/-/raw/b207135dbd8c09cf8da28f7e3b0a18bb11483663/doc/catalog.xml";
+          sha256 = "1/43XwAIcmRXfM4OXOPephyQyUnW8DSveiZbiPvW72I=";
+        }} $out/share/xml/dbus-1/catalog.xml
+      '';
+    }))
     docbook-xsl-nons
     docbook_xml_dtd_412
   ];
 
   buildInputs = [
     glib
-    dbus-glib
     polkit
     nss
     pam
@@ -78,11 +68,13 @@ stdenv.mkDerivation rec {
   ];
 
   checkInputs = with python3.pkgs; [
+    gobject-introspection # for setup hook
     python-dbusmock
     dbus-python
     pygobject3
     pycairo
     pypamtest
+    gusb # Required by libfprint’s typelib
   ];
 
   mesonFlags = [
@@ -98,18 +90,20 @@ stdenv.mkDerivation rec {
   PKG_CONFIG_DBUS_1_DATADIR = "${placeholder "out"}/share";
 
   # FIXME: Ugly hack for tests to find libpam_wrapper.so
-  LIBRARY_PATH = stdenv.lib.makeLibraryPath [ python3.pkgs.pypamtest ];
+  LIBRARY_PATH = lib.makeLibraryPath [ python3.pkgs.pypamtest ];
 
   doCheck = true;
 
   postPatch = ''
-    patchShebangs po/check-translations.sh
+    patchShebangs \
+      po/check-translations.sh \
+      tests/unittest_inspector.py
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://fprint.freedesktop.org/";
     description = "D-Bus daemon that offers libfprint functionality over the D-Bus interprocess communication bus";
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
     platforms = platforms.linux;
     maintainers = with maintainers; [ abbradar elyhaka ];
   };
diff --git a/pkgs/tools/security/fprot/default.nix b/pkgs/tools/security/fprot/default.nix
index 12b47694db3..22779327a9b 100644
--- a/pkgs/tools/security/fprot/default.nix
+++ b/pkgs/tools/security/fprot/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation {
 
@@ -32,7 +32,7 @@ stdenv.mkDerivation {
     cp doc/man/fpupdate.8 $out/share/man/man8
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.f-prot.com";
     description = "A popular proprietary antivirus program";
     license = licenses.unfree;
diff --git a/pkgs/tools/security/fulcio/default.nix b/pkgs/tools/security/fulcio/default.nix
new file mode 100644
index 00000000000..96ef86d18d1
--- /dev/null
+++ b/pkgs/tools/security/fulcio/default.nix
@@ -0,0 +1,42 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "fulcio";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "sigstore";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-MvLQMGPyJYqYUljLqsr+qJeeYnxdH9aNGkWpDRvOeh8=";
+  };
+  vendorSha256 = "sha256-pRL0et+UOi/tzuQz/Q7UmSA+pVhLJYR8lG8NAbPN9PU=";
+
+  ldflags = [ "-s" "-w" ];
+
+  # Install completions post-install
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    mv $out/bin/fulcio $out/bin/fulcio-server
+    installShellCompletion --cmd fulcio-server \
+      --bash <($out/bin/fulcio-server completion bash) \
+      --fish <($out/bin/fulcio-server completion fish) \
+      --zsh <($out/bin/fulcio-server completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/fulcio-server --help
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/sigstore/fulcio";
+    changelog = "https://github.com/sigstore/fulcio/releases/tag/v${version}";
+    description = "A Root-CA for code signing certs - issuing certificates based on an OIDC email address";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ lesuisse jk ];
+  };
+}
diff --git a/pkgs/tools/security/fwknop/default.nix b/pkgs/tools/security/fwknop/default.nix
index 0f1c37aa797..b56ba93dc7b 100644
--- a/pkgs/tools/security/fwknop/default.nix
+++ b/pkgs/tools/security/fwknop/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
 , libpcap, texinfo
 , iptables
 , gnupgSupport ? true, gnupg, gpgme # Increases dependencies!
@@ -19,17 +19,17 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ autoreconfHook ];
   buildInputs = [ libpcap texinfo ]
-    ++ stdenv.lib.optionals gnupgSupport [ gnupg gpgme.dev ]
-    ++ stdenv.lib.optionals wgetSupport [ wget ];
+    ++ lib.optionals gnupgSupport [ gnupg gpgme.dev ]
+    ++ 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 [
+    (lib.enableFeature buildServer "server")
+    (lib.enableFeature buildClient "client")
+    (lib.withFeatureAs wgetSupport "wget" "${wget}/bin/wget")
+  ] ++ lib.optionalString gnupgSupport [
     "--with-gpgme"
     "--with-gpgme-prefix=${gpgme.dev}"
     "--with-gpg=${gnupg}"
@@ -47,7 +47,7 @@ stdenv.mkDerivation rec {
       "wknopddir = $out/etc/fwknop"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description =
       "Single Packet Authorization (and Port Knocking) server/client";
     longDescription = ''
diff --git a/pkgs/tools/security/galer/default.nix b/pkgs/tools/security/galer/default.nix
new file mode 100644
index 00000000000..d64b47bfdaf
--- /dev/null
+++ b/pkgs/tools/security/galer/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "galer";
+  version = "0.0.2";
+
+  src = fetchFromGitHub {
+    owner = "dwisiswant0";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1923071rk078mqk5mig45kcrr58ni02rby3r298myld7j9gfnylb";
+  };
+
+  vendorSha256 = "0p5b6cp4ccvcjiy3g9brcwb08wxjbrpsza525fmx38wyyi0n0wns";
+
+  meta = with lib; {
+    description = "Tool to fetch URLs from HTML attributes";
+    homepage = "https://github.com/dwisiswant0/galer";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/gau/default.nix b/pkgs/tools/security/gau/default.nix
new file mode 100644
index 00000000000..fec4e4e013b
--- /dev/null
+++ b/pkgs/tools/security/gau/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "gau";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "lc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hUIUDDP9NtMmJXj5GCD/ISUUcx5prKCVVFztff9txoU=";
+  };
+
+  vendorSha256 = "sha256-WMoFbqtBMcjTWX51mEMzpgDEAndCElldNqjG27yXd2w=";
+
+  meta = with lib; {
+    description = "Tool to fetch known URLs";
+    longDescription = ''
+      getallurls (gau) fetches known URLs from various sources for any
+      given domain.
+    '';
+    homepage = "https://github.com/lc/gau";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/gen-oath-safe/default.nix b/pkgs/tools/security/gen-oath-safe/default.nix
index 68536a519aa..bb607c1fbd3 100644
--- a/pkgs/tools/security/gen-oath-safe/default.nix
+++ b/pkgs/tools/security/gen-oath-safe/default.nix
@@ -1,4 +1,4 @@
-{ coreutils, fetchFromGitHub, file, libcaca, makeWrapper, python, openssl, qrencode, stdenv, yubikey-manager }:
+{ coreutils, fetchFromGitHub, file, libcaca, makeWrapper, python3, openssl, qrencode, lib, stdenv, yubikey-manager }:
 
 stdenv.mkDerivation rec {
   pname = "gen-oath-safe";
@@ -10,18 +10,18 @@ stdenv.mkDerivation rec {
     sha256 = "1914z0jgj7lni0nf3hslkjgkv87mhxdr92cmhmbzhpjgjgr23ydp";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
-  buildPhase = ":";
+  dontBuild = true;
 
   installPhase =
     let
-      path = stdenv.lib.makeBinPath [
+      path = lib.makeBinPath [
         coreutils
         file
         libcaca.bin
         openssl.bin
-        python
+        python3
         qrencode
         yubikey-manager
       ];
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
       wrapProgram $out/bin/gen-oath-safe \
         --prefix PATH : ${path}
     '';
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/mcepl/gen-oath-safe";
     description = "Script for generating HOTP/TOTP keys (and QR code)";
     platforms =  platforms.unix;
diff --git a/pkgs/tools/security/gencfsm/default.nix b/pkgs/tools/security/gencfsm/default.nix
index e56c9e20fd4..4cf5338ca2e 100644
--- a/pkgs/tools/security/gencfsm/default.nix
+++ b/pkgs/tools/security/gencfsm/default.nix
@@ -1,21 +1,39 @@
-{ stdenv, fetchurl, autoconf, automake, intltool, libtool, pkgconfig, encfs
-, glib , gnome3, gtk3, libgnome-keyring, vala, wrapGAppsHook, xorg, gobject-introspection
+{ lib, stdenv, fetchurl, autoconf, automake, intltool, libtool, pkg-config
+, encfs, libsecret , glib , libgee, gtk3, vala, wrapGAppsHook, xorg
+, gobject-introspection
 }:
 
 stdenv.mkDerivation rec {
-  version = "1.8.19";
+  version = "1.9";
   pname = "gnome-encfs-manager";
 
   src = fetchurl {
-    url = "https://launchpad.net/gencfsm/trunk/1.8/+download/gnome-encfs-manager_${version}.tar.xz";
-    sha256 = "1h6x8dyp1fvxvr8fwki98ppf4sa20qf7g59jc9797b2vrgm60h1i";
+    url = with lib.versions;
+      "https://launchpad.net/gencfsm/trunk/${major version}.${minor version}/+download/gnome-encfs-manager_${version}.tar.xz";
+    sha256 = "RXVwg/xhfAQv3pWp3UylOhMKDh9ZACTuKM4lPrn1dk8=";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ autoconf automake intltool libtool vala glib encfs
-    gtk3 libgnome-keyring gnome3.libgee xorg.libSM xorg.libICE
-    wrapGAppsHook gobject-introspection  ];
-
+  nativeBuildInputs = [
+    autoconf
+    automake
+    intltool
+    libtool
+    pkg-config
+    vala
+    wrapGAppsHook
+  ];
+  buildInputs = [
+    glib
+    encfs
+    gtk3
+    libgee
+    xorg.libSM
+    xorg.libICE
+    gobject-introspection
+    libsecret
+  ];
+
+  # Fix hardcoded paths to /bin/mkdir
   patches = [ ./makefile-mkdir.patch ];
 
   preConfigure = ''
@@ -24,11 +42,11 @@ stdenv.mkDerivation rec {
 
   configureFlags = [ "--disable-appindicator" ];
 
-  preFixup = ''gappsWrapperArgs+=(--prefix PATH : ${encfs}/bin)'';
+  preFixup = "gappsWrapperArgs+=(--prefix PATH : ${encfs}/bin)";
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.libertyzero.com/GEncfsM/";
     downloadPage = "https://launchpad.net/gencfsm/";
     description = "EncFS manager and mounter with GNOME3 integration";
diff --git a/pkgs/tools/security/genpass/default.nix b/pkgs/tools/security/genpass/default.nix
index 39a84112d63..e726da34031 100644
--- a/pkgs/tools/security/genpass/default.nix
+++ b/pkgs/tools/security/genpass/default.nix
@@ -1,5 +1,5 @@
-{ stdenv
-, fetchFromGitHub
+{ lib, stdenv
+, fetchgit
 , rustPlatform
 , CoreFoundation
 , libiconv
@@ -7,23 +7,22 @@
 }:
 rustPlatform.buildRustPackage rec {
   pname = "genpass";
-  version = "0.4.1";
+  version = "0.4.12";
 
-  src = fetchFromGitHub {
-    owner = "cyplo";
-    repo = pname;
+  src = fetchgit {
+    url = "https://git.sr.ht/~cyplo/genpass";
     rev = "v${version}";
-    sha256 = "1b22m7g55k5ry0vwyd8pakh8rmfkhk37qy5r74cn3n5pv3fcwini";
+    sha256 = "154kprbqc59f06ciz60il4ax299zapwa0hz8vjn25rl4gr5gzn4l";
   };
 
-  cargoSha256 = "1p6l64s9smhwka8bh3pamqimamxziad859i62nrmxzqc49nq5s7m";
+  cargoSha256 = "1b9jqkg11d0ih46km063inqqjwfy1nrwb2xb3dagg3hi8hahpqpb";
 
-  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ CoreFoundation libiconv Security ];
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreFoundation libiconv Security ];
 
-  meta = with stdenv.lib; {
-    description = "A simple yet robust commandline random password generator.";
-    homepage = "https://github.com/cyplo/genpass";
-    license = licenses.agpl3;
+  meta = with lib; {
+    description = "A simple yet robust commandline random password generator";
+    homepage = "https://sr.ht/~cyplo/genpass/";
+    license = licenses.agpl3Only;
     maintainers = with maintainers; [ cyplo ];
   };
 }
diff --git a/pkgs/tools/security/gfshare/default.nix b/pkgs/tools/security/gfshare/default.nix
new file mode 100644
index 00000000000..3079c7fb57f
--- /dev/null
+++ b/pkgs/tools/security/gfshare/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchgit, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "gfshare";
+  version = "2.0.0";
+
+  src = fetchgit {
+    url = "git://git.gitano.org.uk/libgfshare.git";
+    rev = version;
+    sha256 = "0s37xn9pr5p820hd40489xwra7kg3gzqrxhc2j9rnxnd489hl0pr";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  doCheck = true;
+
+  outputs = [ "bin" "lib" "dev" "out" ];
+
+  meta = with lib; {
+    # Not the most descriptive homepage but it's what Debian and Ubuntu use
+    # https://packages.debian.org/sid/libgfshare2
+    # https://launchpad.net/ubuntu/impish/+source/libgfshare/+copyright
+    homepage = "https://git.gitano.org.uk/libgfshare.git/";
+    description = "Shamir's secret-sharing method in the Galois Field GF(2**8)";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.rraval ];
+  };
+}
diff --git a/pkgs/tools/security/ghidra/default.nix b/pkgs/tools/security/ghidra/default.nix
index d31e1f2c275..835f607206f 100644
--- a/pkgs/tools/security/ghidra/default.nix
+++ b/pkgs/tools/security/ghidra/default.nix
@@ -1,6 +1,15 @@
-{ stdenv, fetchzip, lib, makeWrapper, autoPatchelfHook
-, openjdk11, pam, makeDesktopItem, icoutils
-}: let
+{ stdenv
+, fetchzip
+, lib
+, makeWrapper
+, autoPatchelfHook
+, openjdk11
+, pam
+, makeDesktopItem
+, icoutils
+}:
+
+let
 
   pkg_path = "$out/lib/ghidra";
 
@@ -13,21 +22,21 @@
     categories = "Development;";
   };
 
-
-in stdenv.mkDerivation {
-
-  name = "ghidra-9.1.2";
+in stdenv.mkDerivation rec {
+  pname = "ghidra";
+  version = "10.0";
+  versiondate = "20210621";
 
   src = fetchzip {
-    url = "https://ghidra-sre.org/ghidra_9.1.2_PUBLIC_20200212.zip";
-    sha256 = "0j48pijypg44bw06azbrgfqjkigb13ljfdxib70sxwyqia3vkbbm";
+    url = "https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_${version}_build/ghidra_${version}_PUBLIC_${versiondate}.zip";
+    sha256 = "0m1ksng2fkmcg7m22lqil10qn95s06gxnxdz7ih9qpbx67pmmq9x";
   };
 
   nativeBuildInputs = [
     makeWrapper
-    autoPatchelfHook
     icoutils
-  ];
+  ]
+  ++ lib.optionals stdenv.isLinux [ autoPatchelfHook ];
 
   buildInputs = [
     stdenv.cc.cc.lib
@@ -60,9 +69,9 @@ in stdenv.mkDerivation {
   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" ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
     license = licenses.asl20;
-    maintainers = [ maintainers.ck3d ];
+    maintainers = with maintainers; [ ck3d govanify mic92 ];
   };
 
 }
diff --git a/pkgs/tools/security/git-hound/default.nix b/pkgs/tools/security/git-hound/default.nix
new file mode 100644
index 00000000000..56fa2ce4763
--- /dev/null
+++ b/pkgs/tools/security/git-hound/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "git-hound";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "tillson";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1l2bif7qpc1yl93ih01g9jci7ba47rsnpq9js88rz216q93dzmsf";
+  };
+
+  vendorSha256 = "055hpfjbqng513c9rscb8jhnlxj7p82sr8cbsvwnzk569n71qwma";
+
+  meta = with lib; {
+    description = "Reconnaissance tool for GitHub code search";
+    longDescription = ''
+      GitHound pinpoints exposed API keys and other sensitive information
+      across all of GitHub using pattern matching, commit history searching,
+      and a unique result scoring system.
+    '';
+    homepage = "https://github.com/tillson/git-hound";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/gitjacker/default.nix b/pkgs/tools/security/gitjacker/default.nix
new file mode 100644
index 00000000000..14d9ab9ccfa
--- /dev/null
+++ b/pkgs/tools/security/gitjacker/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, git
+, stdenv
+}:
+
+buildGoModule rec {
+  pname = "gitjacker";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "liamg";
+    repo = "gitjacker";
+    rev = "v${version}";
+    sha256 = "sha256-rEn9FpcRfEt2yGepIPEAO9m8JeVb+nMhYMBWhC/barc=";
+  };
+
+  vendorSha256 = null;
+
+  propagatedBuildInputs = [ git ];
+
+  checkInputs = [ git ];
+
+  doCheck = !stdenv.isDarwin;
+
+  preCheck = ''
+    export PATH=$TMPDIR/usr/bin:$PATH
+  '';
+
+  meta = with lib; {
+    description = "Leak git repositories from misconfigured websites";
+    longDescription = ''
+      Gitjacker downloads git repositories and extracts their contents
+      from sites where the .git directory has been mistakenly uploaded.
+      It will still manage to recover a significant portion of a repository
+      even where directory listings are disabled.
+    '';
+    homepage = "https://github.com/liamg/gitjacker";
+    license = with licenses; [ unlicense ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/gitleaks/default.nix b/pkgs/tools/security/gitleaks/default.nix
new file mode 100644
index 00000000000..3cd4ae69b9f
--- /dev/null
+++ b/pkgs/tools/security/gitleaks/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gitleaks";
+  version = "7.5.0";
+
+  src = fetchFromGitHub {
+    owner = "zricethezav";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-s7EOCoGciGT5+Fose9BffsHHE/SsSMmNoWGmeAv6Agk=";
+  };
+
+  vendorSha256 = "sha256-Cc4DJPpOMHxDcH22S7znYo7QHNRXv8jOJhznu09kaE4=";
+
+  preBuild = ''
+    buildFlagsArray+=("-ldflags" "-s -w -X github.com/zricethezav/gitleaks/v${lib.versions.major version}/version.Version=${version}")
+  '';
+
+  meta = with lib; {
+    description = "Scan git repos (or files) for secrets";
+    longDescription = ''
+      Gitleaks is a SAST tool for detecting hardcoded secrets like passwords,
+      API keys, and tokens in git repos.
+    '';
+    homepage = "https://github.com/zricethezav/gitleaks";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/gnome-keysign/default.nix b/pkgs/tools/security/gnome-keysign/default.nix
index 4b9a6fb0e32..a94be8295ea 100644
--- a/pkgs/tools/security/gnome-keysign/default.nix
+++ b/pkgs/tools/security/gnome-keysign/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib
 , fetchFromGitLab
 , fetchpatch
 , python3
@@ -73,7 +73,7 @@ python3.pkgs.buildPythonApplication rec {
   # bunch of linting
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "GTK/GNOME application to use GnuPG for signing other peoples’ keys";
     homepage = "https://wiki.gnome.org/Apps/Keysign";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/security/gnu-pw-mgr/default.nix b/pkgs/tools/security/gnu-pw-mgr/default.nix
index de5234961d2..8478c374836 100644
--- a/pkgs/tools/security/gnu-pw-mgr/default.nix
+++ b/pkgs/tools/security/gnu-pw-mgr/default.nix
@@ -2,10 +2,10 @@
 
 stdenv.mkDerivation rec {
   pname = "gnu-pw-mgr";
-  version = "2.4.2";
+  version = "2.7.4";
   src = fetchurl {
     url = "https://ftp.gnu.org/gnu/gnu-pw-mgr/${pname}-${version}.tar.xz";
-    sha256 = "1yvdzc5w37qrjrkby5699ygj9bhkvgi3zk9k9jcjry1j6b7wdl17";
+    sha256 = "0fhwvsmsqpw0vnivarfg63l8pgwqfv7d5wi6l80jpb41dj6qpjz8";
   };
 
   buildInputs = [ gnulib ];
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
     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;
+    platforms = lib.platforms.linux;
     maintainers = with maintainers; [ qoelet ];
   };
 }
diff --git a/pkgs/tools/security/gnupg-pkcs11-scd/default.nix b/pkgs/tools/security/gnupg-pkcs11-scd/default.nix
index e173f66f748..c8accce7d40 100644
--- a/pkgs/tools/security/gnupg-pkcs11-scd/default.nix
+++ b/pkgs/tools/security/gnupg-pkcs11-scd/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, libgpgerror, libassuan, libgcrypt, pkcs11helper,
-  pkgconfig, openssl }:
+{ lib, stdenv, fetchurl, libgpgerror, libassuan, libgcrypt, pkcs11helper,
+  pkg-config, openssl }:
 
 stdenv.mkDerivation rec {
   pname = "gnupg-pkcs11-scd";
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
     sha256 = "1mfh9zjbahjd788rq1mzx009pd7p1sq62sbz586rd7szif7pkpgx";
   };
 
-  buildInputs = [ pkcs11helper pkgconfig openssl ];
+  buildInputs = [ pkcs11helper pkg-config openssl ];
 
   configureFlags = [
     "--with-libgpg-error-prefix=${libgpgerror.dev}"
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     "--with-libgcrypt-prefix=${libgcrypt.dev}"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with 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
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
     '';
     homepage = "http://gnupg-pkcs11.sourceforge.net/";
     license = licenses.bsd3;
-    maintainers = with maintainers; [ lschuermann philandstuff ];
+    maintainers = with maintainers; [ matthiasbeyer philandstuff ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/security/gnupg/1.nix b/pkgs/tools/security/gnupg/1.nix
index 20ecd7c92fb..66b05384c6b 100644
--- a/pkgs/tools/security/gnupg/1.nix
+++ b/pkgs/tools/security/gnupg/1.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, readline, bzip2 }:
+{ lib, stdenv, fetchurl, readline, bzip2 }:
 
 stdenv.mkDerivation rec {
   name = "gnupg-1.4.23";
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://gnupg.org";
     description = "Classic (1.4) release of the GNU Privacy Guard, a GPL OpenPGP implementation";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/security/gnupg/22.nix b/pkgs/tools/security/gnupg/22.nix
index 3a99c8eb3f2..1030ce3e791 100644
--- a/pkgs/tools/security/gnupg/22.nix
+++ b/pkgs/tools/security/gnupg/22.nix
@@ -1,4 +1,4 @@
-{ fetchurl, fetchpatch, stdenv, pkgconfig, libgcrypt, libassuan, libksba
+{ fetchurl, fetchpatch, lib, stdenv, pkg-config, libgcrypt, libassuan, libksba
 , libgpgerror, libiconv, npth, gettext, texinfo, buildPackages
 
 # Each of the dependencies below are optional.
@@ -9,22 +9,22 @@
 null
 }:
 
-with stdenv.lib;
+with lib;
 
 assert guiSupport -> pinentry != null && enableMinimal == false;
 
 stdenv.mkDerivation rec {
   pname = "gnupg";
 
-  version = "2.2.21";
+  version = "2.2.27";
 
   src = fetchurl {
     url = "mirror://gnupg/gnupg/${pname}-${version}.tar.bz2";
-    sha256 = "1v3nirp9m7yxjkkcdixibckl379pdyr3mdx8b1k379szzdw35s31";
+    sha256 = "1693s2rp9sjwvdslj94n03wnb6rxysjy0dli0q1698af044h1ril";
   };
 
   depsBuildBuild = [ buildPackages.stdenv.cc ];
-  nativeBuildInputs = [ pkgconfig texinfo ];
+  nativeBuildInputs = [ pkg-config texinfo ];
   buildInputs = [
     libgcrypt libassuan libksba libiconv npth gettext
     readline libusb1 gnutls adns openldap zlib bzip2 sqlite
@@ -42,9 +42,9 @@ stdenv.mkDerivation rec {
     # Fix broken SOURCE_DATE_EPOCH usage - remove on the next upstream update
     sed -i 's/$SOURCE_DATE_EPOCH/''${SOURCE_DATE_EPOCH}/' doc/Makefile.am
     sed -i 's/$SOURCE_DATE_EPOCH/''${SOURCE_DATE_EPOCH}/' doc/Makefile.in
-  '' + stdenv.lib.optionalString ( stdenv.isLinux && pcsclite != null) ''
-    sed -i 's,"libpcsclite\.so[^"]*","${stdenv.lib.getLib pcsclite}/lib/libpcsclite.so",g' scd/scdaemon.c
-  ''; #" fix Emacs syntax highlighting :-(
+  '' + lib.optionalString ( stdenv.isLinux && pcsclite != null) ''
+    sed -i 's,"libpcsclite\.so[^"]*","${lib.getLib pcsclite}/lib/libpcsclite.so",g' scd/scdaemon.c
+  '';
 
   pinentryBinaryPath = pinentry.binaryPath or "bin/pinentry";
   configureFlags = [
@@ -71,9 +71,12 @@ stdenv.mkDerivation rec {
 
     # add gpg2 symlink to make sure git does not break when signing commits
     ln -s $out/bin/gpg $out/bin/gpg2
+
+    # Make libexec tools available in PATH
+    ln -s -t $out/bin $out/libexec/*
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://gnupg.org";
     description = "Modern (2.1) release of the GNU Privacy Guard, a GPL OpenPGP implementation";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/security/go-cve-search/default.nix b/pkgs/tools/security/go-cve-search/default.nix
new file mode 100644
index 00000000000..e68970b0b26
--- /dev/null
+++ b/pkgs/tools/security/go-cve-search/default.nix
@@ -0,0 +1,32 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "go-cve-search";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "s-index";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0hbv829daviskwsyp9xjcvl52m22986b2cylf2rldnxw5x8zqdvd";
+  };
+
+  vendorSha256 = "0bhxk39ivbkhwjvq6415lax1pzn208b7px1id0d1nry93bk2zynd";
+
+  # Tests requires network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A lightweight CVE search tool";
+    longDescription = ''
+      go-cve-search is a lightweight tool to search CVE (Common Vulnerabilities
+      and Exposures).
+    '';
+    homepage = "https://github.com/s-index/go-cve-search";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/gobuster/default.nix b/pkgs/tools/security/gobuster/default.nix
index 6e049917de2..cc436a16b58 100644
--- a/pkgs/tools/security/gobuster/default.nix
+++ b/pkgs/tools/security/gobuster/default.nix
@@ -5,16 +5,16 @@
 
 buildGoModule rec {
   pname = "gobuster";
-  version = "3.0.1";
+  version = "3.1.0";
 
   src = fetchFromGitHub {
     owner = "OJ";
     repo = "gobuster";
     rev = "v${version}";
-    sha256 = "0q8ighqykh8qyvidnm6az6dc9mp32bbmhkmkqzl1ybbw6paa8pym";
+    sha256 = "0nal2g5c6z46x6337yh0s6mqgnsigp91i7mp1l3sa91p5ihk71wr";
   };
 
-  vendorSha256 = "0kr9i2nm5csf3070hwaiss137pfa3088xbw2zigp7aqb2naky036";
+  vendorSha256 = "1isp2jd6k4ppns5zi9irj09090imnc0xp6vcps135ymgp8qg4163";
 
   doCheck = false;
 
diff --git a/pkgs/tools/security/gopass/default.nix b/pkgs/tools/security/gopass/default.nix
index 4f90bace895..358acf376b4 100644
--- a/pkgs/tools/security/gopass/default.nix
+++ b/pkgs/tools/security/gopass/default.nix
@@ -1,5 +1,9 @@
-{ stdenv, makeWrapper
-, buildGoModule, fetchFromGitHub, installShellFiles
+{ lib
+, stdenv
+, makeWrapper
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
 , git
 , gnupg
 , xclip
@@ -9,7 +13,7 @@
 
 buildGoModule rec {
   pname = "gopass";
-  version = "1.9.2";
+  version = "1.12.7";
 
   nativeBuildInputs = [ installShellFiles makeWrapper ];
 
@@ -17,41 +21,46 @@ buildGoModule rec {
     owner = "gopasspw";
     repo = pname;
     rev = "v${version}";
-    sha256 = "066dphw8xq0g72kj64sdai2yyllnr6ca27bfy5sxhk8x69j97rvz";
+    sha256 = "08mzm03vhc8pqyl17y8dkrcpgy3ckmb84x84b6ap3cja3y8gmj5x";
   };
 
-  vendorSha256 = "1wn20bh7ma4pblsf6qnlbz5bx4p9apig3d1yz7cpsqv4z3w07baw";
+  vendorSha256 = "0ym6f1h51bj3qlzxs936fz3p47l63nad4xckl16m13iy0k7z5flg";
+
+  subPackages = [ "." ];
 
   doCheck = false;
 
   buildFlagsArray = [ "-ldflags=-s -w -X main.version=${version} -X main.commit=${src.rev}" ];
 
-  wrapperPath = stdenv.lib.makeBinPath ([
-    git
-    gnupg
-    xclip
-  ] ++ stdenv.lib.optional stdenv.isLinux wl-clipboard);
+  wrapperPath = lib.makeBinPath (
+    [
+      git
+      gnupg
+      xclip
+    ] ++ lib.optional stdenv.isLinux wl-clipboard
+  );
 
   postInstall = ''
-    for shell in bash fish zsh; do
-      $out/bin/gopass completion $shell > gopass.$shell
-      installShellCompletion gopass.$shell
-    done
-  '' + stdenv.lib.optionalString passAlias ''
+    installManPage gopass.1
+    installShellCompletion --zsh --name _gopass zsh.completion
+    installShellCompletion --bash --name gopass.bash bash.completion
+    installShellCompletion --fish --name gopass.fish fish.completion
+  '' + lib.optionalString passAlias ''
     ln -s $out/bin/gopass $out/bin/pass
   '';
 
   postFixup = ''
     wrapProgram $out/bin/gopass \
-      --prefix PATH : "${wrapperPath}"
+      --prefix PATH : "${wrapperPath}" \
+      --set GOPASS_NO_REMINDER true
   '';
 
-  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 rvolosatovs ];
-    platforms       = platforms.unix;
+  meta = with 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 rvolosatovs ];
+    changelog = "https://github.com/gopasspw/gopass/blob/v${version}/CHANGELOG.md";
 
     longDescription = ''
       gopass is a rewrite of the pass password manager in Go with the aim of
diff --git a/pkgs/tools/security/gopass/git-credential.nix b/pkgs/tools/security/gopass/git-credential.nix
new file mode 100644
index 00000000000..fb0da2c1a09
--- /dev/null
+++ b/pkgs/tools/security/gopass/git-credential.nix
@@ -0,0 +1,41 @@
+{ lib
+, makeWrapper
+, buildGoModule
+, fetchFromGitHub
+, gopass
+}:
+
+buildGoModule rec {
+  pname = "git-credential-gopass";
+  version = "1.12.0";
+
+  src = fetchFromGitHub {
+    owner = "gopasspw";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-IvYxpUMclDAKJ/EkRbNrX8eIFyhtY9Q0B0RipweieZA=";
+  };
+
+  vendorSha256 = "sha256-N6eU6KsnUrYBK90ydwUH8LNkR9KRjgc4ciGOGvy7pw8=";
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  preBuild = ''
+    buildFlagsArray+=(
+      "-ldflags=-s -w -X main.version=${version} -X main.commit=${src.rev}"
+    )
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/git-credential-gopass --prefix PATH : "${lib.makeBinPath [ gopass ]}"
+  '';
+
+  meta = with lib; {
+    description = "Manage git credentials using gopass";
+    homepage = "https://github.com/gopasspw/git-credential-gopass";
+    license = licenses.mit;
+    maintainers = with maintainers; [ benneti ];
+  };
+}
diff --git a/pkgs/tools/security/gopass/jsonapi.nix b/pkgs/tools/security/gopass/jsonapi.nix
new file mode 100644
index 00000000000..e060adbf5bc
--- /dev/null
+++ b/pkgs/tools/security/gopass/jsonapi.nix
@@ -0,0 +1,42 @@
+{ lib
+, makeWrapper
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, gopass
+}:
+
+buildGoModule rec {
+  pname = "gopass-jsonapi";
+  version = "1.11.1";
+
+  src = fetchFromGitHub {
+    owner = "gopasspw";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "03xhza7n92xg12z83as9qdvvc0yx1qy6q0c7i4njvng594f9a8x2";
+  };
+
+  vendorSha256 = "0d4fyppsdfzvmjb0qvpnfnw0vl6z256bly7hfb0whk6rldks60wr";
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  preBuild = ''
+    buildFlagsArray+=(
+      "-ldflags=-s -w -X main.version=${version} -X main.commit=${src.rev}"
+    )
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/gopass-jsonapi --prefix PATH : "${lib.makeBinPath [ gopass ]}"
+  '';
+
+  meta = with lib; {
+    description = "Enables communication with gopass via JSON messages";
+    homepage = "https://www.gopass.pw/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ maxhbr ];
+  };
+}
diff --git a/pkgs/tools/security/gorilla-bin/default.nix b/pkgs/tools/security/gorilla-bin/default.nix
index 975976c6a3c..228271742c6 100644
--- a/pkgs/tools/security/gorilla-bin/default.nix
+++ b/pkgs/tools/security/gorilla-bin/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, makeWrapper, patchelf, stdenv, libXft, libX11, freetype, fontconfig, libXrender, libXScrnSaver, libXext }:
+{ fetchurl, makeWrapper, patchelf, lib, stdenv, libXft, libX11, freetype, fontconfig, libXrender, libXScrnSaver, libXext }:
 
 stdenv.mkDerivation rec {
   pname = "gorilla-bin";
@@ -11,7 +11,6 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [ patchelf makeWrapper ];
-  phases = [ "unpackPhase" "installPhase" ];
 
   unpackCmd = ''
     mkdir gorilla;
@@ -20,7 +19,7 @@ stdenv.mkDerivation rec {
 
   installPhase = let
     interpreter = "$(< \"$NIX_CC/nix-support/dynamic-linker\")";
-    libPath = stdenv.lib.makeLibraryPath [ libXft libX11 freetype fontconfig libXrender libXScrnSaver libXext ];
+    libPath = lib.makeLibraryPath [ libXft libX11 freetype fontconfig libXrender libXScrnSaver libXext ];
   in ''
     mkdir -p $out/opt/password-gorilla
     mkdir -p $out/bin
@@ -34,8 +33,8 @@ stdenv.mkDerivation rec {
   meta = {
     description = "Password Gorilla is a Tk based password manager";
     homepage = "https://github.com/zdia/gorilla/wiki";
-    maintainers = [ stdenv.lib.maintainers.namore ];
+    maintainers = [ lib.maintainers.namore ];
     platforms = [ "x86_64-linux" ];
-    license = stdenv.lib.licenses.gpl2;
+    license = lib.licenses.gpl2;
   };
 }
diff --git a/pkgs/tools/security/gosh/default.nix b/pkgs/tools/security/gosh/default.nix
new file mode 100644
index 00000000000..5c5ad25e6d9
--- /dev/null
+++ b/pkgs/tools/security/gosh/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gosh";
+  # https://github.com/redcode-labs/GoSH/issues/4
+  version = "2020523-${lib.strings.substring 0 7 rev}";
+  rev = "7ccb068279cded1121eacc5a962c14b2064a1859";
+
+  src = fetchFromGitHub {
+    owner = "redcode-labs";
+    repo = "GoSH";
+    inherit rev;
+    sha256 = "143ig0lqnkpnydhl8gnfzhg613x4wc38ibdbikkqwfyijlr6sgzd";
+  };
+
+  vendorSha256 = "06j6cj4m0w6n9vl7sxlxpsgk77k941npq9767rdzzgy2srfqlskq";
+
+  runVend = true;
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Reverse/bind shell generator";
+    homepage = "https://github.com/redcode-labs/GoSH";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/gospider/default.nix b/pkgs/tools/security/gospider/default.nix
new file mode 100644
index 00000000000..f4b750d394a
--- /dev/null
+++ b/pkgs/tools/security/gospider/default.nix
@@ -0,0 +1,33 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "gospider";
+  version = "1.1.5";
+
+  src = fetchFromGitHub {
+    owner = "jaeles-project";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-yfW94sQzT1u6O0s1sqpeANlukC5y8fNvHNL2c77+dxU=";
+  };
+
+  vendorSha256 = "sha256-1aOw0lk+khcX9IETA0+wGx91BFXrJ79zYWhEI2JrhDU=";
+
+  # tests require internet access and API keys
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Fast web spider written in Go";
+    longDescription = ''
+      GoSpider is a fast web crawler that parses sitemap.xml and robots.txt file.
+      It can generate and verify link from JavaScript files, extract URLs from
+      various sources and can detect subdomains from the response source.
+    '';
+    homepage = "https://github.com/jaeles-project/gospider";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/gpg-tui/default.nix b/pkgs/tools/security/gpg-tui/default.nix
new file mode 100644
index 00000000000..b63b12aca08
--- /dev/null
+++ b/pkgs/tools/security/gpg-tui/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, gpgme
+, libgpgerror
+, libxcb
+, python3
+, AppKit
+, Foundation
+, libiconv
+, libobjc
+, libresolv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gpg-tui";
+  version = "0.7.3";
+
+  src = fetchFromGitHub {
+    owner = "orhun";
+    repo = "gpg-tui";
+    rev = "v${version}";
+    sha256 = "sha256-ti49b03Ta/MVDNIzW1WhWxJqHNVW9EALUcbElcZvurQ=";
+  };
+
+  cargoSha256 = "sha256-jF1Ozo5q5cKG9KjR1scbCCofG3FT3Fv98Cj0iOl18+c=";
+
+  nativeBuildInputs = [
+    gpgme # for gpgme-config
+    libgpgerror # for gpg-error-config
+    python3
+  ];
+
+  buildInputs = [
+    gpgme
+    libgpgerror
+    libxcb
+  ] ++ lib.optionals stdenv.isDarwin [
+    AppKit
+    Foundation
+    libiconv
+    libobjc
+    libresolv
+  ];
+
+  meta = with lib; {
+    description = "Terminal user interface for GnuPG";
+    homepage = "https://github.com/orhun/gpg-tui";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/tools/security/gpgstats/default.nix b/pkgs/tools/security/gpgstats/default.nix
index 80153b857c4..f6f6d367810 100644
--- a/pkgs/tools/security/gpgstats/default.nix
+++ b/pkgs/tools/security/gpgstats/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, ncurses, gpgme }:
+{ lib, stdenv, fetchurl, ncurses, gpgme }:
 
 stdenv.mkDerivation rec {
   pname = "gpgstats";
@@ -16,10 +16,10 @@ stdenv.mkDerivation rec {
     cp gpgstats $out/bin
   '';
 
-  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString (!stdenv.is64bit)
+  NIX_CFLAGS_COMPILE = lib.optionalString (!stdenv.is64bit)
     "-D_FILE_OFFSET_BITS=64 -DLARGEFILE_SOURCE=1";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Calculates statistics on the keys in your gpg key-ring";
     longDescription = ''
     GPGstats calculates statistics on the keys in your key-ring.
diff --git a/pkgs/tools/security/grype/default.nix b/pkgs/tools/security/grype/default.nix
new file mode 100644
index 00000000000..c24515dd1bb
--- /dev/null
+++ b/pkgs/tools/security/grype/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, docker
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "grype";
+  version = "0.15.0";
+
+  src = fetchFromGitHub {
+    owner = "anchore";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-xiUDyuVNVkVT+kxOEFOq4RKxMc5nNjsom/ZTKzfkOhU=";
+  };
+
+  vendorSha256 = "sha256-mW3e4WFa9pKSpyTZYmPA2j8nZz+94G2PqdqI0BDo3wc=";
+
+  propagatedBuildInputs = [ docker ];
+
+  preBuild = ''
+    buildFlagsArray+=("-ldflags" "-s -w -X github.com/anchore/grype/internal/version.version=${version}")
+  '';
+
+  # Tests require a running Docker instance
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Vulnerability scanner for container images and filesystems";
+    longDescription = ''
+      As a vulnerability scanner is grype abale to scan the contents of a container
+      image or filesystem to find known vulnerabilities.
+    '';
+    homepage = "https://github.com/anchore/grype";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/haka/default.nix b/pkgs/tools/security/haka/default.nix
index 9468ee2843b..809902e8897 100644
--- a/pkgs/tools/security/haka/default.nix
+++ b/pkgs/tools/security/haka/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, swig, wireshark, check, rsync, libpcap, gawk, libedit, pcre }:
+{ lib, stdenv, fetchurl, cmake, swig, wireshark, check, rsync, libpcap, gawk, libedit, pcre }:
 
 let version = "0.3.0"; in
 
@@ -21,15 +21,14 @@ stdenv.mkDerivation {
     sed -i 's,/etc,'$out'/etc,' doc/user/tool_suite_haka.rst
   '';
 
-  buildInputs = [ cmake swig wireshark check rsync libpcap gawk libedit pcre ];
-
-  enableParallelBuilding = true;
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ swig wireshark check rsync libpcap gawk libedit pcre ];
 
   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 ];
+    license = lib.licenses.mpl20;
+    maintainers = [ lib.maintainers.tvestelind ];
     platforms = [ "x86_64-linux" "i686-linux" ]; # fails on aarch64
   };
 }
diff --git a/pkgs/tools/security/hakrawler/default.nix b/pkgs/tools/security/hakrawler/default.nix
new file mode 100644
index 00000000000..fc5ee32bcba
--- /dev/null
+++ b/pkgs/tools/security/hakrawler/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "hakrawler";
+  version = "20201224-${lib.strings.substring 0 7 rev}";
+  rev = "e39a514d0e179d33362ee244c017fb65cc2c12a5";
+
+  src = fetchFromGitHub {
+    owner = "hakluke";
+    repo = "hakrawler";
+    inherit rev;
+    sha256 = "0wpqfbpgnr94q5n7i4zh806k8n0phyg0ncnz43hqh4bbdh7l1y8a";
+  };
+
+  vendorSha256 = "18zs2l77ds0a3wxfqcd91h269g0agnwhginrx3j6gj30dbfls8a1";
+
+  meta = with lib; {
+    description = "Web crawler for the discovery of endpoints and assets";
+    homepage = "https://github.com/hakluke/hakrawler";
+    longDescription =  ''
+      Simple, fast web crawler designed for easy, quick discovery of endpoints
+      and assets within a web application.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/hash-identifier/default.nix b/pkgs/tools/security/hash-identifier/default.nix
new file mode 100644
index 00000000000..5e9b49dd73d
--- /dev/null
+++ b/pkgs/tools/security/hash-identifier/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitLab, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "hash-identifier";
+  version = "1.2";
+
+  src = fetchFromGitLab {
+    owner = "kalilinux";
+    repo = "packages/hash-identifier";
+    rev = "kali/${version}+git20180314-0kali1";
+    sha256 = "1amz48ijwjjkccg6gmdn3ffnyp2p52ksagy4m9gy8l2v5wj3j32h";
+  };
+
+  format = "other"; # no setup.py
+
+  installPhase = ''
+    install -Dm0775 hash-id.py $out/bin/hash-identifier
+  '';
+
+  meta = with lib; {
+    description = "Software to identify the different types of hashes used to encrypt data and especially passwords.";
+    homepage = "https://github.com/blackploit/hash-identifier";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ethancedwards8 ];
+  };
+}
diff --git a/pkgs/tools/security/hash-slinger/default.nix b/pkgs/tools/security/hash-slinger/default.nix
index 4fa0499f1dd..ee06c112481 100644
--- a/pkgs/tools/security/hash-slinger/default.nix
+++ b/pkgs/tools/security/hash-slinger/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchFromGitHub, pythonPackages, unbound, libreswan }:
+{ lib, stdenv, fetchFromGitHub, python2Packages, unbound, libreswan }:
 
 let
-  inherit (pythonPackages) python;
+  pythonPackages = python2Packages;
 in stdenv.mkDerivation rec {
   pname    = "hash-slinger";
   version = "2.7";
@@ -31,7 +31,7 @@ in stdenv.mkDerivation rec {
     '';
 
   installPhase = ''
-    mkdir -p $out/bin $out/man $out/${python.sitePackages}/
+    mkdir -p $out/bin $out/man $out/${pythonPackages.python.sitePackages}/
     make install
     wrapPythonPrograms
    '';
@@ -39,7 +39,7 @@ in stdenv.mkDerivation rec {
    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 ];
+    license     = lib.licenses.gpl2Plus;
+    maintainers = [ lib.maintainers.leenaars ];
   };
 }
diff --git a/pkgs/tools/security/hash_extender/default.nix b/pkgs/tools/security/hash_extender/default.nix
index dc8ea8b2c9b..5baeb71ce89 100644
--- a/pkgs/tools/security/hash_extender/default.nix
+++ b/pkgs/tools/security/hash_extender/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, openssl }:
+{ lib, stdenv, fetchFromGitHub, openssl }:
 
 stdenv.mkDerivation {
   pname = "hash_extender";
@@ -21,7 +21,7 @@ stdenv.mkDerivation {
     cp hash_extender $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tool to automate hash length extension attacks";
     homepage = "https://github.com/iagox86/hash_extender";
     license = licenses.bsd3;
diff --git a/pkgs/tools/security/hashcash/default.nix b/pkgs/tools/security/hashcash/default.nix
index bb8fba33e1d..f86684178fc 100644
--- a/pkgs/tools/security/hashcash/default.nix
+++ b/pkgs/tools/security/hashcash/default.nix
@@ -1,16 +1,16 @@
-{ stdenv, fetchurl, openssl }:
+{ lib, 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"
@@ -21,8 +21,8 @@ stdenv.mkDerivation rec {
     "MAN_INSTALL_PATH=${placeholder "out"}/share/man/man1"
     "DOC_INSTALL_PATH=${placeholder "out"}/share/doc/hashcash-$(version)"
   ];
-  
-  meta = with stdenv.lib; {
+
+  meta = with lib; {
     description = "Proof-of-work algorithm used as spam and denial-of-service counter measure";
     homepage = "http://hashcash.org";
     license = licenses.gpl2;
diff --git a/pkgs/tools/security/hashcat-utils/default.nix b/pkgs/tools/security/hashcat-utils/default.nix
index 7dcfff038a8..ccd6230b06f 100644
--- a/pkgs/tools/security/hashcat-utils/default.nix
+++ b/pkgs/tools/security/hashcat-utils/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "hashcat-utils";
@@ -20,11 +20,11 @@ stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Small utilities that are useful in advanced password cracking";
     homepage = "https://github.com/hashcat/hashcat-utils";
     license = licenses.mit;
-    platforms = platforms.linux;
+    platforms = platforms.unix;
     maintainers = with maintainers; [ fadenb ];
   };
 }
diff --git a/pkgs/tools/security/hashcat/default.nix b/pkgs/tools/security/hashcat/default.nix
index b156cda99ac..273e2837e06 100644
--- a/pkgs/tools/security/hashcat/default.nix
+++ b/pkgs/tools/security/hashcat/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , makeWrapper
 , opencl-headers
@@ -8,11 +8,11 @@
 
 stdenv.mkDerivation rec {
   pname   = "hashcat";
-  version = "6.1.1";
+  version = "6.2.3";
 
   src = fetchurl {
     url = "https://hashcat.net/files/hashcat-${version}.tar.gz";
-    sha256 = "104z63m7lqbb0sdrxhf9yi15l4a9zwf9m6zs9dbb3gf0nfxl1h9r";
+    sha256 = "sha256-wL4cZpPuHzXHvvH3m/njCpVPcX70LQDjd4eq7/MnHlE=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
@@ -26,11 +26,19 @@ stdenv.mkDerivation rec {
     "USE_SYSTEM_XXHASH=1"
   ];
 
+  preFixup = ''
+    for f in $out/share/hashcat/OpenCL/*.cl; do
+      # Rewrite files to be included for compilation at runtime for opencl offload
+      sed "s|#include \"\(.*\)\"|#include \"$out/share/hashcat/OpenCL/\1\"|g" -i "$f"
+      sed "s|#define COMPARE_\([SM]\) \"\(.*\.cl\)\"|#define COMPARE_\1 \"$out/share/hashcat/OpenCL/\2\"|g" -i "$f"
+    done
+  '';
+
   postFixup = ''
     wrapProgram $out/bin/hashcat --prefix LD_LIBRARY_PATH : ${ocl-icd}/lib
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Fast password cracker";
     homepage    = "https://hashcat.net/hashcat/";
     license     = licenses.mit;
diff --git a/pkgs/tools/security/hashdeep/default.nix b/pkgs/tools/security/hashdeep/default.nix
index 8c8ab5b01a5..0e24e0ec3a3 100644
--- a/pkgs/tools/security/hashdeep/default.nix
+++ b/pkgs/tools/security/hashdeep/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchFromGitHub, autoreconfHook }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
 
-let version = "4.4";
-in stdenv.mkDerivation {
-  name = "hashdeep-${version}";
+stdenv.mkDerivation rec {
+  pname = "hashdeep";
+  version = "4.4";
 
   src = fetchFromGitHub {
     owner = "jessek";
@@ -13,11 +13,15 @@ in stdenv.mkDerivation {
 
   nativeBuildInputs = [ autoreconfHook ];
 
-  meta = with stdenv.lib; {
-    description = "A set of cross-platform tools to compute hashes.";
+  meta = with lib; {
+    description = "A set of cross-platform tools to compute hashes";
     homepage = "https://github.com/jessek/hashdeep";
     license = licenses.gpl2;
-    platforms = with platforms; linux ++ freebsd ++ openbsd;
-    maintainers = [ stdenv.lib.maintainers.karantan ];
+    maintainers = [ maintainers.karantan ];
+    platforms = platforms.all;
+    # Build fails on Darwin:
+    # > ./xml.h:103:82: error: invalid suffix on literal; C++11 requires a space between literal and identifier [-Wreserved-user-defined-literal]
+    # >     void xmlout(const std::string &tag,const int64_t value){ xmlprintf(tag,"","%"PRId64,value); }
+    broken = stdenv.isDarwin;
   };
 }
diff --git a/pkgs/tools/security/haveged/default.nix b/pkgs/tools/security/haveged/default.nix
index c676a173092..b088f07c6e3 100644
--- a/pkgs/tools/security/haveged/default.nix
+++ b/pkgs/tools/security/haveged/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "haveged";
@@ -20,8 +20,8 @@ stdenv.mkDerivation rec {
       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;
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.domenkozar ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/security/hcxdumptool/default.nix b/pkgs/tools/security/hcxdumptool/default.nix
index fc81a395078..082ebac7f6f 100644
--- a/pkgs/tools/security/hcxdumptool/default.nix
+++ b/pkgs/tools/security/hcxdumptool/default.nix
@@ -2,20 +2,20 @@
 
 stdenv.mkDerivation rec {
   pname = "hcxdumptool";
-  version = "6.1.1";
+  version = "6.1.4";
 
   src = fetchFromGitHub {
     owner = "ZerBea";
     repo = "hcxdumptool";
     rev = version;
-    sha256 = "0v6dq6x2mrmavazknmhb08ks53773sll367anfrrramild8350bh";
+    sha256 = "14rwcchqpsxyzvk086d7wbi5qlcxj4jcmafzgvkwzrpbspqh8p24";
   };
 
   buildInputs = [ openssl ];
 
   installFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/ZerBea/hcxdumptool";
     description = "Small tool to capture packets from wlan devices";
     license = licenses.mit;
diff --git a/pkgs/tools/security/hcxtools/default.nix b/pkgs/tools/security/hcxtools/default.nix
index a81c1ef75cf..d0fa5782079 100644
--- a/pkgs/tools/security/hcxtools/default.nix
+++ b/pkgs/tools/security/hcxtools/default.nix
@@ -1,23 +1,24 @@
-{ stdenv, fetchFromGitHub, curl, openssl, zlib }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, curl, openssl, zlib }:
 
 stdenv.mkDerivation rec {
   pname = "hcxtools";
-  version = "6.0.3";
+  version = "6.2.0";
 
   src = fetchFromGitHub {
     owner = "ZerBea";
     repo = pname;
     rev = version;
-    sha256 = "0s9l5mvzcv6hnj7h28piabnm66b09hk2l57vb85ny35w99hzpkc0";
+    sha256 = "sha256-4/kqy0oIe2FdKWtVj11PAUbdWPcKmZ1aIxLx/Zw1E2w=";
   };
 
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ curl openssl zlib ];
 
   makeFlags = [
     "PREFIX=${placeholder "out"}"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/security/hfinger/default.nix b/pkgs/tools/security/hfinger/default.nix
new file mode 100644
index 00000000000..8116c222d07
--- /dev/null
+++ b/pkgs/tools/security/hfinger/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, fetchFromGitHub
+, python3
+, wireshark-cli
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "hfinger";
+  version = "0.2.1";
+  disabled = python3.pythonOlder "3.3";
+
+  src = fetchFromGitHub {
+    owner = "CERT-Polska";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-QKnrprDDBq+D8N1brkqgcfK4E+6ssvgPtRaSxkF0C84=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    fnvhash
+    python_magic
+  ] ++ [
+    wireshark-cli
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "hfinger" ];
+
+  meta = with lib; {
+    description = "Fingerprinting tool for HTTP requests";
+    homepage = "https://github.com/CERT-Polska/hfinger";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/hologram/default.nix b/pkgs/tools/security/hologram/default.nix
index f829d56d6fd..ca4666d9f07 100644
--- a/pkgs/tools/security/hologram/default.nix
+++ b/pkgs/tools/security/hologram/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   name = "hologram-2018-03-19";
@@ -13,16 +13,14 @@ buildGoPackage rec {
 
   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; {
+  meta = with lib; {
     homepage = "https://github.com/AdRoll/hologram/";
-    description = "Easy, painless AWS credentials on developer laptops.";
-    maintainers = with maintainers; [ nand0p ];
+    description = "Easy, painless AWS credentials on developer laptops";
+    maintainers = with maintainers; [ ];
     license = licenses.asl20;
   };
 }
diff --git a/pkgs/tools/security/hologram/deps.nix b/pkgs/tools/security/hologram/deps.nix
deleted file mode 100644
index a9b66da2a9c..00000000000
--- a/pkgs/tools/security/hologram/deps.nix
+++ /dev/null
@@ -1,110 +0,0 @@
-[
-  {
-    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/pkgs/tools/security/honeytrap/default.nix b/pkgs/tools/security/honeytrap/default.nix
new file mode 100644
index 00000000000..735d5d69bd8
--- /dev/null
+++ b/pkgs/tools/security/honeytrap/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+buildGoModule {
+  pname = "honeytrap";
+  version = "unstable-2020-12-10";
+
+  src = fetchFromGitHub {
+    owner = "honeytrap";
+    repo = "honeytrap";
+    rev = "affd7b21a5aa1b57f086e6871753cb98ce088d76";
+    sha256 = "y1SWlBFgX3bFoSRGJ45DdC1DoIK5BfO9Vpi2h57wWtU=";
+  };
+
+  # Otherwise, will try to install a "scripts" binary; it's only used in
+  # dockerize.sh, which we don't care about.
+  subPackages = [ "." ];
+
+  vendorSha256 = "W8w66weYzCpZ+hmFyK2F6wdFz6aAZ9UxMhccNy1X1R8=";
+
+  meta = with lib; {
+    description = "Advanced Honeypot framework";
+    homepage = "https://github.com/honeytrap/honeytrap";
+    license = licenses.asl20;
+    maintainers = teams.determinatesystems.members;
+  };
+}
diff --git a/pkgs/tools/security/honggfuzz/default.nix b/pkgs/tools/security/honggfuzz/default.nix
index ce86e117100..62b335ef5c7 100644
--- a/pkgs/tools/security/honggfuzz/default.nix
+++ b/pkgs/tools/security/honggfuzz/default.nix
@@ -1,18 +1,24 @@
-{ stdenv, fetchFromGitHub, callPackage, makeWrapper
+{ lib, stdenv, fetchFromGitHub, callPackage, makeWrapper
 , clang, llvm, libbfd, libopcodes, libunwind, libblocksruntime
 }:
 
 let
   honggfuzz = stdenv.mkDerivation rec {
     pname = "honggfuzz";
-    version = "2.2";
+    version = "2.4";
 
     src = fetchFromGitHub {
       owner = "google";
       repo = pname;
-      rev = "${version}";
-      sha256 = "0ycpx087mhv5s7w01chg2b6rfb3zgfpp9in0x73kpv7y4dcvg7gw";
+      rev = version;
+      sha256 = "sha256-sU5lmlfmvVWo4K96sI+xQsPfTMd1wsLbihcKI4aTj6g=";
     };
+
+    postPatch = ''
+      substituteInPlace hfuzz_cc/hfuzz-cc.c \
+        --replace '"clang' '"${clang}/bin/clang'
+    '';
+
     enableParallelBuilding = true;
 
     nativeBuildInputs = [ makeWrapper ];
@@ -37,9 +43,9 @@ let
         feedback-based coverage metrics.
       '';
       homepage    = "https://honggfuzz.dev/";
-      license     = stdenv.lib.licenses.asl20;
+      license     = lib.licenses.asl20;
       platforms   = ["x86_64-linux"];
-      maintainers = with stdenv.lib.maintainers; [ cpu ];
+      maintainers = with lib.maintainers; [ cpu ];
     };
   };
 in honggfuzz
diff --git a/pkgs/tools/security/httpdump/default.nix b/pkgs/tools/security/httpdump/default.nix
new file mode 100644
index 00000000000..c2e5a62969b
--- /dev/null
+++ b/pkgs/tools/security/httpdump/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, libpcap
+}:
+
+buildGoModule rec {
+  pname = "httpdump";
+  version = "20210126-${lib.strings.substring 0 7 rev}";
+  rev = "d2e0deadca5f9ec2544cb252da3c450966d1860e";
+
+  src = fetchFromGitHub {
+    owner = "hsiafan";
+    repo = pname;
+    inherit rev;
+    sha256 = "0yh8kxy1k23lln09b614limwk9y59r7cn5qhbnzc06ga4mxfczv2";
+  };
+
+  vendorSha256 = "0lb1p63lzn1ngj54bar9add7w0azvgcq3azhv9c5glk3ykv9c3iy";
+
+  propagatedBuildInputs = [ libpcap ];
+
+  meta = with lib; {
+    description = "Parse and display HTTP traffic from network device or pcap file";
+    homepage = "https://github.com/hsiafan/httpdump";
+    license = with licenses; [ bsd2 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/httpx/default.nix b/pkgs/tools/security/httpx/default.nix
new file mode 100644
index 00000000000..7c3e5863427
--- /dev/null
+++ b/pkgs/tools/security/httpx/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "httpx";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = "httpx";
+    rev = "v${version}";
+    sha256 = "sha256-selmBW6GlfzKbVHz7EgmUB8n567NS08gwkRB9Y+Px8s=";
+  };
+
+  vendorSha256 = "sha256-q0cTFYepq7odZSACNuUoz6kjT7sE38Pv6B113w2gpIQ=";
+
+  meta = with lib; {
+    description = "Fast and multi-purpose HTTP toolkit";
+    longDescription = ''
+      httpx is a fast and multi-purpose HTTP toolkit allow to run multiple
+      probers using retryablehttp library, it is designed to maintain the
+      result reliability with increased threads.
+    '';
+    homepage = "https://github.com/projectdiscovery/httpx";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/ibm-sw-tpm2/default.nix b/pkgs/tools/security/ibm-sw-tpm2/default.nix
index c177726bbb1..d556566a7d5 100644
--- a/pkgs/tools/security/ibm-sw-tpm2/default.nix
+++ b/pkgs/tools/security/ibm-sw-tpm2/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "ibm-sw-tpm2";
-  version = "1637";
+  version = "1661";
 
   src = fetchurl {
     url = "mirror://sourceforge/ibmswtpm2/ibmtpm${version}.tar.gz";
-    sha256 = "09z3wbv38dc8wnw1q961s6bcd0kvz2xkjp6dxg4kn914fwzlqfnx";
+    sha256 = "sha256-VRRZKK0rJPNL5qDqz5+0kuEODqkZuEKMch+pcOhdYUc=";
   };
 
   buildInputs = [ openssl ];
diff --git a/pkgs/tools/security/ic-keysmith/default.nix b/pkgs/tools/security/ic-keysmith/default.nix
new file mode 100644
index 00000000000..9e480d64d18
--- /dev/null
+++ b/pkgs/tools/security/ic-keysmith/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "keysmith";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "dfinity";
+    repo = "keysmith";
+    rev = "v${version}";
+    sha256 = "1z0sxirk71yabgilq8v5lz4nd2bbm1xyrd5zppif8k9jqhr6v3v3";
+  };
+
+  vendorSha256 = "1p0r15ihmnmrybf12cycbav80sdj2dv2kry66f4hjfjn6k8zb0dc";
+
+  meta = with lib; {
+    description = "Hierarchical Deterministic Key Derivation for the Internet Computer";
+    homepage = "https://github.com/dfinity/keysmith";
+    license = licenses.mit;
+    maintainers = with maintainers; [ imalison ];
+  };
+}
diff --git a/pkgs/tools/security/ifdnfc/default.nix b/pkgs/tools/security/ifdnfc/default.nix
index bab6527f415..34c140023ac 100644
--- a/pkgs/tools/security/ifdnfc/default.nix
+++ b/pkgs/tools/security/ifdnfc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub , pkgconfig
+{ lib, stdenv, fetchFromGitHub , pkg-config
 , pcsclite
 , autoreconfHook
 , libnfc
@@ -14,13 +14,13 @@ stdenv.mkDerivation {
     rev = "0e48e8e";
     sha256 = "1cxnvhhlcbm8h49rlw5racspb85fmwqqhd3gzzpzy68vrs0b37vg";
   };
-  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
   buildInputs = [ pcsclite libnfc ];
 
   configureFlags = [ "--prefix=$(out)" ];
   makeFlags = [ "DESTDIR=/" "usbdropdir=$(out)/pcsc/drivers" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "PC/SC IFD Handler based on libnfc";
     longDescription =
     '' libnfc Interface Plugin to be used in <code>services.pcscd.plugins</code>.
diff --git a/pkgs/tools/security/ike-scan/default.nix b/pkgs/tools/security/ike-scan/default.nix
new file mode 100644
index 00000000000..5d54e36585d
--- /dev/null
+++ b/pkgs/tools/security/ike-scan/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, autoconf
+, automake
+, autoreconfHook
+, fetchFromGitHub
+, fetchpatch
+, openssl
+, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ike-scan";
+  version = "1.9.4";
+
+  src = fetchFromGitHub {
+    owner = "royhills";
+    repo = pname;
+    rev = version;
+    sha256 = "01a39bk9ma2lm59q320m9g11909if5gc3qynd8pzn6slqiq5r8kw";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    openssl
+  ];
+
+  configureFlags = [ "--with-openssl=${openssl.dev}" ];
+
+  patches = [
+    # Using the same patches as for the Fedora RPM
+    (fetchpatch {
+      # Memory leaks, https://github.com/royhills/ike-scan/pull/15
+      url = "https://github.com/royhills/ike-scan/pull/15/commits/d864811de08dcddd65ac9b8d0f2acf5d7ddb9dea.patch";
+      sha256 = "0wbrq89dl8js7cdivd0c45hckmflan33cpgc3qm5s3az6r4mjljm";
+    })
+    (fetchpatch {
+      # Unknown vendor IDs,  https://github.com/royhills/ike-scan/pull/18, was merged but not released
+      url = "https://github.com/royhills/ike-scan/pull/18/commits/e065ddbe471880275dc7975e7da235e7a2097c22.patch";
+      sha256 = "13ly01c96nnd5yh7rxrhv636csm264m5xf2a1inprrzxkkri5sls";
+    })
+  ];
+
+  meta = with lib; {
+    description = "Tool to discover, fingerprint and test IPsec VPN servers";
+    longDescription = ''
+      ike-scan is a command-line tool that uses the IKE protocol to discover,
+      fingerprint and test IPsec VPN servers.
+    '';
+    homepage = "https://github.com/royhills/ike-scan";
+    license = with licenses; [ gpl3Plus ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/ipscan/default.nix b/pkgs/tools/security/ipscan/default.nix
index 80634b7d1a1..a2ec75cfd2e 100644
--- a/pkgs/tools/security/ipscan/default.nix
+++ b/pkgs/tools/security/ipscan/default.nix
@@ -1,25 +1,26 @@
-{ stdenv, fetchurl, jdk, jre, swt, makeWrapper, xorg, dpkg }:
+{ lib, stdenv, fetchurl, jdk, jre, swt, makeWrapper, xorg, dpkg }:
 
 stdenv.mkDerivation rec {
   pname = "ipscan";
-  version = "3.7.1";
+  version = "3.7.6";
 
   src = fetchurl {
     url = "https://github.com/angryip/ipscan/releases/download/${version}/ipscan_${version}_all.deb";
-    sha256 = "1l6l3nb1yq0f09ia3k9k1dcpzp9g1hxnf547pqmiyiqvd27n7shs";
+    sha256 = "sha256-IjbuCCwcAOlCM2XbM5qBGjaGn8xNNDjoyJmCzP5JF/Q=";
   };
 
   sourceRoot = ".";
   unpackCmd = "${dpkg}/bin/dpkg-deb -x $src .";
 
-  buildInputs = [ makeWrapper jdk ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jdk ];
 
   installPhase = ''
     mkdir -p $out/share
     cp usr/lib/ipscan/ipscan-any-${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 ]}" \
+      --prefix LD_LIBRARY_PATH : "$out/lib/:${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
@@ -30,7 +31,7 @@ stdenv.mkDerivation rec {
     cp usr/share/pixmaps/ipscan.png $out/share/pixmaps/ipscan.png
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Fast and friendly network scanner";
     homepage = "https://angryip.org";
     license = licenses.gpl2;
diff --git a/pkgs/tools/security/jadx/default.nix b/pkgs/tools/security/jadx/default.nix
index 961f1e6954a..02533f7f6f5 100644
--- a/pkgs/tools/security/jadx/default.nix
+++ b/pkgs/tools/security/jadx/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchFromGitHub, gradle, jdk, makeWrapper, perl }:
+{ lib, stdenv, fetchFromGitHub, gradle, jdk, makeWrapper, perl }:
 
 let
   pname = "jadx";
-  version = "1.1.0";
+  version = "1.2.0";
 
   src = fetchFromGitHub {
     owner = "skylot";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1dx3g0sm46qy57gggpg8bpmin5glzbxdbf0qzvha9r2dwh4mrwlg";
+    sha256 = "1w1wc81mkjcsgjbrihbsphxkcmwnfnf555pmlsd2vs2a04nki01y";
   };
 
   deps = stdenv.mkDerivation {
@@ -33,7 +33,7 @@ let
 
     outputHashAlgo = "sha256";
     outputHashMode = "recursive";
-    outputHash = "083r4hg6m9cxzm2m8nckf10awq8kh901v5i39r60x47xk5yw84ps";
+    outputHash = "05fsycpd90dbak2vgdpd9cz08liq5j78ag9ry9y1s62ld776g0hz";
   };
 in stdenv.mkDerivation {
   inherit pname version src;
@@ -90,7 +90,7 @@ in stdenv.mkDerivation {
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Dex to Java decompiler";
     longDescription = ''
       Command line and GUI tools for produce Java source code from Android Dex
diff --git a/pkgs/tools/security/jd-gui/default.nix b/pkgs/tools/security/jd-gui/default.nix
index c4b7706c266..046abed36f0 100644
--- a/pkgs/tools/security/jd-gui/default.nix
+++ b/pkgs/tools/security/jd-gui/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, jre, jdk, gradle_5, makeDesktopItem, perl, writeText, runtimeShell }:
+{ lib, stdenv, fetchFromGitHub, jre, jdk, gradle_5, makeDesktopItem, copyDesktopItems, perl, writeText, runtimeShell }:
 
 let
   pname = "jd-gui";
@@ -55,9 +55,9 @@ let
     }
   '';
 
-  desktopItem = launcher: makeDesktopItem {
+  desktopItem = makeDesktopItem {
     name = "jd-gui";
-    exec = "${launcher} %F";
+    exec = "jd-gui %F";
     icon = "jd-gui";
     comment = "Java Decompiler JD-GUI";
     desktopName = "JD-GUI";
@@ -71,7 +71,7 @@ in stdenv.mkDerivation rec {
   inherit pname version src;
   name = "${pname}-${version}";
 
-  nativeBuildInputs = [ jdk gradle_5 ];
+  nativeBuildInputs = [ jdk gradle_5 copyDesktopItems ];
 
   buildPhase = ''
     export GRADLE_USER_HOME=$(mktemp -d)
@@ -81,6 +81,8 @@ in stdenv.mkDerivation rec {
   installPhase = let
     jar = "$out/share/jd-gui/${name}.jar";
   in ''
+    runHook preInstall
+
     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
@@ -92,10 +94,12 @@ in stdenv.mkDerivation rec {
     EOF
     chmod +x $out/bin/jd-gui
 
-    ${(desktopItem "$out/bin/jd-gui").buildCommand}
+    runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  desktopItems = [ desktopItem ];
+
+  meta = with lib; {
     description = "Fast Java Decompiler with powerful GUI";
     homepage    = "https://java-decompiler.github.io/";
     license     = licenses.gpl3;
diff --git a/pkgs/tools/security/john/default.nix b/pkgs/tools/security/john/default.nix
index 2fedec48c70..e56e99909ff 100644
--- a/pkgs/tools/security/john/default.nix
+++ b/pkgs/tools/security/john/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, openssl, nss, nspr, kerberos, gmp, zlib, libpcap, re2
+{ lib, stdenv, fetchurl, openssl, nss, nspr, libkrb5, gmp, zlib, libpcap, re2
 , gcc, python3Packages, perl, perlPackages, makeWrapper
 }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   pname = "john";
@@ -36,7 +36,7 @@ stdenv.mkDerivation rec {
     "--with-systemwide"
   ];
 
-  buildInputs = [ openssl nss nspr kerberos gmp zlib libpcap re2 ];
+  buildInputs = [ openssl nss nspr libkrb5 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
diff --git a/pkgs/tools/security/jwt-cli/default.nix b/pkgs/tools/security/jwt-cli/default.nix
index be3de71f25c..e1cd9ec359f 100644
--- a/pkgs/tools/security/jwt-cli/default.nix
+++ b/pkgs/tools/security/jwt-cli/default.nix
@@ -1,21 +1,24 @@
-{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security, fetchpatch }:
 
 rustPlatform.buildRustPackage rec {
   pname = "jwt-cli";
-  version = "3.1.0";
+  version = "4.0.0";
 
   src = fetchFromGitHub {
     owner = "mike-engel";
     repo = pname;
     rev = version;
-    sha256 = "0pmxis3m3madwnmswz9hn0i8fz6a9bg11slgrrwql7mx23ijqf6y";
+    sha256 = "sha256-82Le0kdt/fnSQwsRRYHy4Jv9rsCPGf5dIWmoZE2cPxY=";
   };
 
-  cargoSha256 = "165g1v0c8jxs8ddm8ld0hh7k8mvk3566ig43pf99hnw009fg1yc2";
+  cargoSha256 = "sha256-sCauVxc6JPJ4dBi5LOt+v9bdlRW+oF4cd/sfG5Xdv70=";
 
-  buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
+  buildInputs = lib.optional stdenv.isDarwin Security;
 
-  meta = with stdenv.lib; {
+  doInstallCheck = true;
+  installCheckPhase = "$out/bin/jwt --version";
+
+  meta = with lib; {
     description = "Super fast CLI tool to decode and encode JWTs";
     homepage = "https://github.com/mike-engel/jwt-cli";
     license = with licenses; [ mit ];
diff --git a/pkgs/tools/security/kbs2/default.nix b/pkgs/tools/security/kbs2/default.nix
index 14f2059cf5c..54c9bfa1f4b 100644
--- a/pkgs/tools/security/kbs2/default.nix
+++ b/pkgs/tools/security/kbs2/default.nix
@@ -1,41 +1,45 @@
-{ stdenv, rustPlatform, fetchFromGitHub, installShellFiles, python3, libxcb, AppKit }:
+{ lib, stdenv, rustPlatform, fetchFromGitHub, installShellFiles, python3, libxcb, AppKit, libiconv }:
 
 rustPlatform.buildRustPackage rec {
   pname = "kbs2";
-  version = "0.1.3";
+  version = "0.3.0";
 
   src = fetchFromGitHub {
     owner = "woodruffw";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1zp4gpbqhivmp7lpm10xb6ahx1z7nsijz7pi5i0bndv0y9mr609p";
+    sha256 = "sha256-Mh56VjFHwjiZ0fvOF3fFw+1IU5HwkRdMlFrt3tZjcZY=";
   };
 
-  cargoSha256 = "1inqz4whqw9mb3m22kv44f255m3cjr66pc5ncdw2rgpy3zjh4p3z";
+  cargoSha256 = "sha256-hjUDLA5vNCCIEFQsAhv3hDur1LIGQKYO2rR6AoEb+wA=";
 
   nativeBuildInputs = [ installShellFiles ]
-    ++ stdenv.lib.optionals stdenv.isLinux [ python3 ];
+    ++ lib.optionals stdenv.isLinux [ python3 ];
 
   buildInputs = [ ]
-    ++ stdenv.lib.optionals stdenv.isLinux [ libxcb ]
-    ++ stdenv.lib.optionals stdenv.isDarwin [ AppKit ];
+    ++ lib.optionals stdenv.isLinux [ libxcb ]
+    ++ lib.optionals stdenv.isDarwin [ AppKit libiconv ];
 
   preCheck = ''
     export HOME=$TMPDIR
   '';
 
-  checkFlagsArray = [ "--skip=kbs2::config::tests::test_find_config_dir" ];
+  checkFlags = [ "--skip=kbs2::config::tests::test_find_config_dir" ]
+    ++ lib.optionals stdenv.isDarwin [ "--skip=test_ragelib_rewrap_keyfile" ];
 
   postInstall = ''
+    mkdir -p $out/share/kbs2
+    cp -r contrib/ $out/share/kbs2
     for shell in bash fish zsh; do
       $out/bin/kbs2 --completions $shell > kbs2.$shell
       installShellCompletion kbs2.$shell
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A secret manager backed by age";
     homepage = "https://github.com/woodruffw/kbs2";
+    changelog = "https://github.com/woodruffw/kbs2/blob/v${version}/CHANGELOG.md";
     license = licenses.mit;
     maintainers = [ maintainers.marsam ];
   };
diff --git a/pkgs/tools/security/keybase/default.nix b/pkgs/tools/security/keybase/default.nix
index ee1cfa9d2a4..ec240a7c715 100644
--- a/pkgs/tools/security/keybase/default.nix
+++ b/pkgs/tools/security/keybase/default.nix
@@ -6,7 +6,7 @@
 
 buildGoPackage rec {
   pname = "keybase";
-  version = "5.5.1";
+  version = "5.7.1";
 
   goPackagePath = "github.com/keybase/client";
   subPackages = [ "go/kbnm" "go/keybase" ];
@@ -17,7 +17,7 @@ buildGoPackage rec {
     owner = "keybase";
     repo = "client";
     rev = "v${version}";
-    sha256 = "03y69zmzbnfay173xkbzvnhh8zjjd2rfnqmpgr0wvh1psn7mgpsh";
+    sha256 = "sha256-72rVk8pYIQFESQqBu4bmFBPpAOB0oG2Iu36TbAdecBw=";
   };
 
   patches = [
@@ -28,14 +28,14 @@ buildGoPackage rec {
     })
   ];
 
-  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ AVFoundation AudioToolbox ImageIO CoreMedia Foundation CoreGraphics MediaToolbox ];
+  buildInputs = lib.optionals stdenv.isDarwin [ AVFoundation AudioToolbox ImageIO CoreMedia Foundation CoreGraphics MediaToolbox ];
   buildFlags = [ "-tags production" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.keybase.io/";
-    description = "The Keybase official command-line utility and service.";
+    description = "The Keybase official command-line utility and service";
     platforms = platforms.linux ++ platforms.darwin;
-    maintainers = with maintainers; [ avaq carlsverre np rvolosatovs filalex77 ];
+    maintainers = with maintainers; [ avaq carlsverre np rvolosatovs Br1ght0ne ];
     license = licenses.bsd3;
   };
 }
diff --git a/pkgs/tools/security/keybase/gui.nix b/pkgs/tools/security/keybase/gui.nix
index aabe1fcebbd..3032c18427a 100644
--- a/pkgs/tools/security/keybase/gui.nix
+++ b/pkgs/tools/security/keybase/gui.nix
@@ -1,20 +1,20 @@
-{ stdenv, fetchurl, alsaLib, atk, cairo, cups, udev
+{ stdenv, lib, fetchurl, alsa-lib, atk, cairo, cups, udev, libdrm, mesa
 , dbus, expat, fontconfig, freetype, gdk-pixbuf, glib, gtk3, libappindicator-gtk3
 , libnotify, nspr, nss, pango, systemd, xorg, autoPatchelfHook, wrapGAppsHook
 , runtimeShell, gsettings-desktop-schemas }:
 
 let
-  versionSuffix = "20200527202541.39ca0071e5";
+  versionSuffix = "20210125164223.f3b21527b9";
 in
 
 stdenv.mkDerivation rec {
   pname = "keybase-gui";
-  version = "5.5.1"; # Find latest version from https://prerelease.keybase.io/deb/dists/stable/main/binary-amd64/Packages
+  version = "5.6.1"; # 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 = "1n54a86491aqazqa4rgljbji638nj83ciibqxq46sa2m1php9dfd";
+    sha256 = "12ckfd02j0f3p3pdlwc640f61z1wzblf2414h6fkf5vzd289h35p";
   };
 
   nativeBuildInputs = [
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
   ];
 
   buildInputs = [
-    alsaLib
+    alsa-lib
     atk
     cairo
     cups
@@ -53,10 +53,12 @@ stdenv.mkDerivation rec {
     xorg.libXrender
     xorg.libXtst
     xorg.libxcb
+    libdrm
+    mesa.out
   ];
 
   runtimeDependencies = [
-    udev.lib
+    (lib.getLib udev)
     libappindicator-gtk3
   ];
 
@@ -105,11 +107,11 @@ stdenv.mkDerivation rec {
       --replace run_keybase $out/bin/keybase-gui
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.keybase.io/";
     description = "The Keybase official GUI";
     platforms = [ "x86_64-linux" ];
-    maintainers = with maintainers; [ avaq rvolosatovs puffnfresh np filalex77 ];
+    maintainers = with maintainers; [ avaq rvolosatovs puffnfresh np Br1ght0ne ];
     license = licenses.bsd3;
   };
 }
diff --git a/pkgs/tools/security/keybase/kbfs.nix b/pkgs/tools/security/keybase/kbfs.nix
index e9284e7230f..67abb57394c 100644
--- a/pkgs/tools/security/keybase/kbfs.nix
+++ b/pkgs/tools/security/keybase/kbfs.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub, keybase }:
+{ lib, buildGoPackage, fetchFromGitHub, keybase }:
 
 buildGoPackage {
   pname = "kbfs";
@@ -12,7 +12,7 @@ buildGoPackage {
 
   buildFlags = [ "-tags production" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://keybase.io/docs/kbfs";
     description = "The Keybase filesystem";
     platforms = platforms.unix;
diff --git a/pkgs/tools/security/keycard-cli/default.nix b/pkgs/tools/security/keycard-cli/default.nix
index 73eab6c3dec..6e67358b675 100644
--- a/pkgs/tools/security/keycard-cli/default.nix
+++ b/pkgs/tools/security/keycard-cli/default.nix
@@ -1,20 +1,20 @@
-{ lib, buildGoPackage, fetchFromGitHub, pkgconfig, pcsclite }:
+{ lib, buildGoPackage, fetchFromGitHub, pkg-config, pcsclite }:
 
 buildGoPackage rec {
   pname = "keycard-cli";
-  version = "0.4.0";
+  version = "0.6.0";
 
   goPackagePath = "github.com/status-im/keycard-cli";
   subPackages = [ "." ];
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ pcsclite ];
 
   src = fetchFromGitHub {
     owner = "status-im";
     repo = pname;
     rev = version;
-    sha256 = "0917vl5lw8wgvyn5l8q6xa8bqh342fibaa38syr8hmz8b09qkh38";
+    sha256 = "sha256-ejFvduZs3eWc6efr9o4pXb6qw2QWWQTtkTxF80vOGNU=";
   };
 
   buildFlagsArray = [
diff --git a/pkgs/tools/security/keysmith/default.nix b/pkgs/tools/security/keysmith/default.nix
index b9ab7bb0b4a..142e9c1e4a0 100644
--- a/pkgs/tools/security/keysmith/default.nix
+++ b/pkgs/tools/security/keysmith/default.nix
@@ -10,30 +10,25 @@
 , qtgraphicaleffects
 , kirigami2
 , oathToolkit
+, ki18n
+, libsodium
 }:
 mkDerivation rec {
 
   pname = "keysmith";
-  version = "0.1";
+  version = "0.2";
 
   src = fetchFromGitHub {
     owner = "KDE";
     repo = "keysmith";
     rev = "v${version}";
-    sha256 = "15fzf0bvarivm32zqa5w71mscpxdac64ykiawc5hx6kplz93bsgx";
+    sha256 = "1gvzw23mly8cp7ag3xpbngpid9gqrfj8cyv9dar6i9j660bh03km";
   };
 
   nativeBuildInputs = [ cmake extra-cmake-modules makeWrapper ];
 
-  buildInputs = [ oathToolkit kirigami2 qtquickcontrols2 qtbase ];
-
-  postInstall = ''
-    mv $out/bin/org.kde.keysmith $out/bin/.org.kde.keysmith-wrapped
-    makeWrapper $out/bin/.org.kde.keysmith-wrapped $out/bin/org.kde.keysmith \
-      --set QML2_IMPORT_PATH "${lib.getLib kirigami2}/lib/qt-5.12.7/qml:${lib.getBin qtquickcontrols2}/lib/qt-5.12.7/qml:${lib.getBin qtdeclarative}/lib/qt-5.12.7/qml:${qtgraphicaleffects}/lib/qt-5.12.7/qml" \
-      --set QT_PLUGIN_PATH "${lib.getBin qtbase}/lib/qt-5.12.7/plugins"
-    ln -s $out/bin/org.kde.keysmith $out/bin/keysmith
-  '';
+  buildInputs = [ libsodium ki18n oathToolkit kirigami2 qtquickcontrols2 qtbase ];
+  propagatedBuildInput = [ oathToolkit ];
 
   meta = with lib; {
     description = "OTP client for Plasma Mobile and Desktop";
diff --git a/pkgs/tools/security/kiterunner/default.nix b/pkgs/tools/security/kiterunner/default.nix
new file mode 100644
index 00000000000..a553202b6c1
--- /dev/null
+++ b/pkgs/tools/security/kiterunner/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "kiterunner";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "assetnote";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "084jywgqjj2hpaprdcb9a7i8hihphnfil0sx3wrlvjpa8sk0z1mw";
+  };
+
+  vendorSha256 = "1nczzzsnh38qi949ki5268y39ggkwncanc1pv7727qpwllzl62vy";
+
+  preBuild = ''
+    buildFlagsArray+=("-ldflags" "-s -w -X github.com/assetnote/kiterunner/cmd/kiterunner/cmd.Version=${version}")
+  '';
+
+  subPackages = [ "./cmd/kiterunner" ];
+
+  # Test data is missing in the repo
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Contextual content discovery tool";
+    longDescription = ''
+      Kiterunner is a tool that is capable of not only performing traditional
+      content discovery at lightning fast speeds, but also bruteforcing routes
+      and endpoints in modern applications.
+    '';
+    homepage = "https://github.com/assetnote/kiterunner";
+    license = with licenses; [ agpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/knockknock/default.nix b/pkgs/tools/security/knockknock/default.nix
index 9478bb4ca23..960667e72de 100644
--- a/pkgs/tools/security/knockknock/default.nix
+++ b/pkgs/tools/security/knockknock/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python2Packages, hping }:
+{ lib, fetchFromGitHub, python2Packages, hping }:
 let
   rev  = "bf14bbff";
 in python2Packages.buildPythonApplication rec {
@@ -23,7 +23,7 @@ in python2Packages.buildPythonApplication rec {
     substituteInPlace knockknock.py --replace 'existsInPath("hping3")' '"${hping}/bin/hping3"'
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Simple, secure port knocking daemon and client written in Python";
     homepage    = "http://www.thoughtcrime.org/software/knockknock/";
     license     = licenses.gpl3;
diff --git a/pkgs/tools/security/knockpy/default.nix b/pkgs/tools/security/knockpy/default.nix
new file mode 100644
index 00000000000..8189145846b
--- /dev/null
+++ b/pkgs/tools/security/knockpy/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "knockpy";
+  version = "5.1.0";
+  disabled = python3.pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "guelfoweb";
+    repo = "knock";
+    rev = version;
+    sha256 = "sha256-4W6/omGPmQFuZ/2AVNgCs2q0ti/P8OY4o7b4/g9q+Rc=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    beautifulsoup4
+    colorama
+    matplotlib
+    networkx
+    pyqt5
+    requests
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "knockpy" ];
+
+  meta = with lib; {
+    description = "Tool to scan subdomains";
+    homepage = "https://github.com/guelfoweb/knock";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/kpcli/default.nix b/pkgs/tools/security/kpcli/default.nix
index 09916f85f9e..176cc5e706b 100644
--- a/pkgs/tools/security/kpcli/default.nix
+++ b/pkgs/tools/security/kpcli/default.nix
@@ -1,17 +1,18 @@
-{ stdenv, fetchurl, makeWrapper, perl, perlPackages }:
+{ lib, stdenv, fetchurl, makeWrapper, perl, perlPackages }:
 
 stdenv.mkDerivation rec {
-  version = "3.4";
+  version = "3.6";
   pname = "kpcli";
 
   src = fetchurl {
     url = "mirror://sourceforge/kpcli/${pname}-${version}.pl";
-    sha256 = "0s46cni16ph93havmkrlai3k13mdppyca1s2bqm751a6rirmsgj0";
+    sha256 = "1srd6vrqgjlf906zdyxp4bg6gihkxn62cpzyfv0zzpsqsj13iwh1";
   };
 
-  buildInputs = [ makeWrapper perl ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
 
-  phases = [ "installPhase" "fixupPhase" ];
+  dontUnpack = true;
 
   installPhase = ''
     mkdir -p $out/{bin,share}
@@ -21,14 +22,14 @@ stdenv.mkDerivation rec {
     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)}"
+      ] ++ lib.optional stdenv.isDarwin MacPasteboard)}"
   '';
 
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "KeePass Command Line Interface";
     longDescription = ''
-      KeePass Command Line Interface (CLI) / interactive shell. 
+      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;
diff --git a/pkgs/tools/security/kubei/default.nix b/pkgs/tools/security/kubei/default.nix
new file mode 100644
index 00000000000..840b4f69fc0
--- /dev/null
+++ b/pkgs/tools/security/kubei/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "kubei";
+  version = "1.0.12";
+
+  src = fetchFromGitHub {
+    owner = "Portshift";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-QUPRw8fQ6ahBLZox6m4+feYIrcgDnCTe72nMF8iAV+Y=";
+  };
+
+  vendorSha256 = "sha256-uWDQf0zcTTPBthK60bmGJBP/m+yUu5PvYAbwyd0dcWE=";
+
+  meta = with lib; {
+    description = "Kubernetes runtime scanner";
+    longDescription = ''
+      Kubei is a vulnerabilities scanning and CIS Docker benchmark tool that
+      allows users to get an accurate and immediate risk assessment of their
+      kubernetes clusters. Kubei scans all images that are being used in a
+      Kubernetes cluster, including images of application pods and system pods.
+    '';
+    homepage = "https://github.com/Portshift/kubei";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/kubesec/default.nix b/pkgs/tools/security/kubesec/default.nix
new file mode 100644
index 00000000000..5d634630128
--- /dev/null
+++ b/pkgs/tools/security/kubesec/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "kubesec";
+  version = "2.11.2";
+
+  src = fetchFromGitHub {
+    owner = "controlplaneio";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-W9c3L8lYjF1W0kwSODhMldlqX1h+2mZIRtElZ20skn4=";
+  };
+
+  vendorSha256 = "sha256-zfQu1EdwvR+LGmsbE8RA4pcOGgsukG1TMTCgPyNoVsc=";
+
+  # Tests wants to download the kubernetes schema for use with kubeval
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Security risk analysis tool for Kubernetes resources";
+    homepage = "https://github.com/controlplaneio/kubesec";
+    changelog = "https://github.com/controlplaneio/kubesec/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/kwalletcli/default.nix b/pkgs/tools/security/kwalletcli/default.nix
index d03de5f7cfc..d18d5c1ef8b 100644
--- a/pkgs/tools/security/kwalletcli/default.nix
+++ b/pkgs/tools/security/kwalletcli/default.nix
@@ -1,15 +1,15 @@
-{ mkDerivation, fetchFromGitHub, lib, makeWrapper, pkgconfig
+{ mkDerivation, fetchFromGitHub, lib, makeWrapper, pkg-config
 , kcoreaddons, ki18n, kwallet, mksh, pinentry-qt }:
 
 mkDerivation rec {
   pname = "kwalletcli";
-  version = "3.02";
+  version = "3.03";
 
   src = fetchFromGitHub {
     owner = "MirBSD";
     repo = pname;
     rev = "${pname}-${lib.replaceStrings [ "." ] [ "_" ] version}";
-    sha256 = "1gq45afb5nmmjfqxglv7wvcxcjd9822pc7nysq0350jmmmqwb474";
+    sha256 = "sha256-DUtaQITzHhQrqA9QJd0U/5EDjH0IzY9/kal/7SYQ/Ck=";
   };
 
   postPatch = ''
@@ -26,7 +26,7 @@ mkDerivation rec {
 
   makeFlags = [ "KDE_VER=5" ];
 
-  nativeBuildInputs = [ makeWrapper pkgconfig ];
+  nativeBuildInputs = [ makeWrapper pkg-config ];
   # if using just kwallet, cmake will be added as a buildInput and fail the build
   propagatedBuildInputs = [ kcoreaddons ki18n (lib.getLib kwallet) ];
 
diff --git a/pkgs/tools/security/lastpass-cli/default.nix b/pkgs/tools/security/lastpass-cli/default.nix
index 37da2022520..3da3342e379 100644
--- a/pkgs/tools/security/lastpass-cli/default.nix
+++ b/pkgs/tools/security/lastpass-cli/default.nix
@@ -1,5 +1,16 @@
-{ stdenv, lib, fetchFromGitHub, asciidoc, cmake, docbook_xsl, pkgconfig
-, bash-completion, openssl, curl, libxml2, libxslt }:
+{ stdenv
+, lib
+, fetchFromGitHub
+, asciidoc
+, cmake
+, docbook_xsl
+, pkg-config
+, bash-completion
+, openssl
+, curl
+, libxml2
+, libxslt
+}:
 
 stdenv.mkDerivation rec {
   pname = "lastpass-cli";
@@ -12,26 +23,29 @@ stdenv.mkDerivation rec {
     sha256 = "168jg8kjbylfgalhicn0llbykd7kdc9id2989gg0nxlgmnvzl58a";
   };
 
-  nativeBuildInputs = [ asciidoc cmake docbook_xsl pkgconfig ];
+  nativeBuildInputs = [ asciidoc cmake docbook_xsl pkg-config ];
 
   buildInputs = [
-    bash-completion curl openssl libxml2 libxslt
+    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
+    install -Dm755 -T ../contrib/examples/git-credential-lastpass $out/bin/git-credential-lastpass
   '';
 
   meta = with lib; {
     description = "Stores, retrieves, generates, and synchronizes passwords securely";
-    homepage    = "https://github.com/lastpass/lastpass-cli";
-    license     = licenses.gpl2Plus;
-    platforms   = platforms.unix;
+    homepage = "https://github.com/lastpass/lastpass-cli";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
     maintainers = with maintainers; [ cstrahan ];
   };
 }
diff --git a/pkgs/tools/security/ldeep/default.nix b/pkgs/tools/security/ldeep/default.nix
new file mode 100644
index 00000000000..82d0456a05b
--- /dev/null
+++ b/pkgs/tools/security/ldeep/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, commandparse
+, dnspython
+, ldap3
+, termcolor
+, tqdm
+}:
+
+buildPythonApplication rec {
+  pname = "ldeep";
+  version = "1.0.11";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-MYVC8fxLW85n8uZVMhb2Zml1lQ8vW9gw/eRLcmemQx4=";
+  };
+
+  propagatedBuildInputs = [
+    commandparse
+    dnspython
+    ldap3
+    termcolor
+    tqdm
+  ];
+
+  # no tests are present
+  doCheck = false;
+  pythonImportsCheck = [ "ldeep" ];
+
+  meta = with lib; {
+    description = "In-depth LDAP enumeration utility";
+    homepage = "https://github.com/franc-pentest/ldeep";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/lesspass-cli/default.nix b/pkgs/tools/security/lesspass-cli/default.nix
index 0d59c34ee9a..ce64b6847fe 100644
--- a/pkgs/tools/security/lesspass-cli/default.nix
+++ b/pkgs/tools/security/lesspass-cli/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3, fetchFromGitHub }:
+{ lib, python3, fetchFromGitHub }:
 
 let
   inherit (python3.pkgs) buildPythonApplication pytest mock pexpect;
@@ -6,13 +6,13 @@ let
 in
 buildPythonApplication rec {
   pname = "lesspass-cli";
-  version = "9.0.0";
+  version = "9.1.9";
 
   src = fetchFromGitHub {
     owner = repo;
     repo = repo;
     rev = version;
-    sha256 = "1mdv0c0fn4d72iigy8hz4s7kf7q3pg4gjjadxwxyjwsalapnsapk";
+    sha256 = "126zk248s9r72qk9b8j27yvb8gglw49kazwz0sd69b5kkxvhz2dh";
   };
   sourceRoot = "source/cli";
 
@@ -30,7 +30,7 @@ buildPythonApplication rec {
     pytest tests
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Stateless password manager";
     homepage = "https://lesspass.com";
     maintainers = with maintainers; [ jasoncarr ];
diff --git a/pkgs/tools/security/lethe/default.nix b/pkgs/tools/security/lethe/default.nix
new file mode 100644
index 00000000000..6ae45278810
--- /dev/null
+++ b/pkgs/tools/security/lethe/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lethe";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "kostassoid";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "173ms4fd09iclm4v5zkmvc60l6iyyb5lzxc6dxd6q21zy0pvs35g";
+  };
+
+  cargoSha256 = "11l7wxadinidf0bsxv14j1kv8gdhq1d6ffnb76n54igxid8gza14";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "Tool to wipe drives in a secure way";
+    homepage = "https://github.com/kostassoid/lethe";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/libacr38u/default.nix b/pkgs/tools/security/libacr38u/default.nix
index b56c15af3d6..0acb7e8bb1a 100644
--- a/pkgs/tools/security/libacr38u/default.nix
+++ b/pkgs/tools/security/libacr38u/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, pcsclite , libusb-compat-0_1 }:
+{ lib, stdenv, fetchurl, pkg-config, pcsclite , libusb-compat-0_1, IOKit }:
 
 stdenv.mkDerivation {
   version = "1.7.11";
@@ -11,14 +11,15 @@ stdenv.mkDerivation {
 
   doCheck = true;
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ pcsclite libusb-compat-0_1 ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ pcsclite libusb-compat-0_1 ]
+    ++ lib.optional stdenv.isDarwin IOKit;
 
   preBuild = ''
     makeFlagsArray=(usbdropdir="$out/pcsc/drivers");
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "ACR38U smartcard reader driver for pcsclite";
     longDescription = ''
       A PC/SC IFD handler implementation for the ACS ACR38U
@@ -38,4 +39,4 @@ stdenv.mkDerivation {
     maintainers = with maintainers; [ berce ];
     platforms = with platforms; unix;
   };
-} 
+}
diff --git a/pkgs/tools/security/libmodsecurity/default.nix b/pkgs/tools/security/libmodsecurity/default.nix
index 01e9a384792..03aed8c50e0 100644
--- a/pkgs/tools/security/libmodsecurity/default.nix
+++ b/pkgs/tools/security/libmodsecurity/default.nix
@@ -1,20 +1,20 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
 , doxygen, perl, valgrind
 , curl, geoip, libxml2, lmdb, lua, pcre, yajl }:
 
 stdenv.mkDerivation rec {
   pname = "libmodsecurity";
-  version = "3.0.3";
+  version = "3.0.4";
 
   src = fetchFromGitHub {
     owner = "SpiderLabs";
     repo = "ModSecurity";
     fetchSubmodules = true;
     rev = "v${version}";
-    sha256 = "00g2407g2679zv73q67zd50z0f1g1ij734ssv2pp77z4chn5dzib";
+    sha256 = "07vry10cdll94sp652hwapn0ppjv3mb7n2s781yhy7hssap6f2vp";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig doxygen ];
+  nativeBuildInputs = [ autoreconfHook pkg-config doxygen ];
 
   buildInputs = [ perl valgrind curl geoip libxml2 lmdb lua pcre yajl ];
 
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = ''
       ModSecurity v3 library component.
     '';
diff --git a/pkgs/tools/security/libtpms/default.nix b/pkgs/tools/security/libtpms/default.nix
new file mode 100644
index 00000000000..baca0ed8b77
--- /dev/null
+++ b/pkgs/tools/security/libtpms/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config, autoreconfHook
+, openssl, perl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libtpms";
+  version = "0.8.4";
+
+  src = fetchFromGitHub {
+    owner = "stefanberger";
+    repo = "libtpms";
+    rev = "v${version}";
+    sha256 = "sha256-9e7O9SE7e8D6ULXhICabNCrL+QTH55jQm0AI7DVteE0=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    perl # needed for pod2man
+  ];
+  buildInputs = [ openssl ];
+
+  outputs = [ "out" "man" "dev" ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-openssl"
+    "--with-tpm2"
+  ];
+
+  meta = with lib; {
+    description = "The libtpms library provides software emulation of a Trusted Platform Module (TPM 1.2 and TPM 2.0)";
+    homepage = "https://github.com/stefanberger/libtpms";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.baloo ];
+  };
+}
diff --git a/pkgs/tools/security/logkeys/default.nix b/pkgs/tools/security/logkeys/default.nix
index f3ea25d7160..7cd6b5fd194 100644
--- a/pkgs/tools/security/logkeys/default.nix
+++ b/pkgs/tools/security/logkeys/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoconf, automake, which, procps, kbd }:
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, which, procps, kbd }:
 
 stdenv.mkDerivation {
   pname = "logkeys";
@@ -21,7 +21,7 @@ stdenv.mkDerivation {
 
   preConfigure = "./autogen.sh";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A GNU/Linux keylogger that works!";
     license = licenses.gpl3;
     homepage = "https://github.com/kernc/logkeys";
diff --git a/pkgs/tools/security/lynis/default.nix b/pkgs/tools/security/lynis/default.nix
index d7f42479d0b..094aab1e86d 100644
--- a/pkgs/tools/security/lynis/default.nix
+++ b/pkgs/tools/security/lynis/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, makeWrapper, fetchFromGitHub, gawk, installShellFiles }:
+{ lib, stdenv, makeWrapper, fetchFromGitHub, gawk, installShellFiles }:
 
 stdenv.mkDerivation rec {
   pname = "lynis";
-  version = "3.0.0";
+  version = "3.0.5";
 
   src = fetchFromGitHub {
     owner = "CISOfy";
     repo = pname;
     rev = version;
-    sha256 = "05p8h2ww4jcc6lgxrm796cbvlfmw26rxq5fmw0xxavbpadiw752j";
+    sha256 = "sha256-IJCLj3iSPkfkYOqTu7adtU26jTgKfRmiwIfKvSApdIY=";
   };
 
   nativeBuildInputs = [ installShellFiles makeWrapper ];
@@ -21,17 +21,17 @@ stdenv.mkDerivation rec {
     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 ]}
+    wrapProgram "$out/bin/lynis" --prefix PATH : ${lib.makeBinPath [ gawk ]}
 
     installManPage lynis.8
     installShellCompletion --bash --name lynis.bash \
       extras/bash_completion.d/lynis
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Security auditing tool for Linux, macOS, and UNIX-based systems";
     homepage = "https://cisofy.com/lynis/";
-    license = licenses.gpl3;
+    license = licenses.gpl3Only;
     platforms = platforms.unix;
     maintainers = [ maintainers.ryneeverett ];
   };
diff --git a/pkgs/tools/security/masscan/default.nix b/pkgs/tools/security/masscan/default.nix
index 297d13ef9f9..891311ddaa0 100644
--- a/pkgs/tools/security/masscan/default.nix
+++ b/pkgs/tools/security/masscan/default.nix
@@ -1,42 +1,49 @@
-{ stdenv, fetchFromGitHub, makeWrapper, libpcap }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+, makeWrapper
+, libpcap
+}:
 
 stdenv.mkDerivation rec {
   pname = "masscan";
-  version = "1.0.5";
+  version = "1.3.2";
 
   src = fetchFromGitHub {
-    owner  = "robertdavidgraham";
-    repo   = "masscan";
-    rev    = version;
-    sha256 = "0q0c7bsf0pbl8napry1qyg0gl4pd8wn872h4mz9b56dx4rx90vqg";
+    owner = "robertdavidgraham";
+    repo = "masscan";
+    rev = version;
+    sha256 = "sha256-mnGC/moQANloR5ODwRjzJzBa55OEZ9QU+9WpAHxQE/g=";
   };
 
-  nativeBuildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
 
-  makeFlags = [ "PREFIX=$(out)" "GITVER=${version}" "CC=cc" ];
+  makeFlags = [ "PREFIX=$(out)" "GITVER=${version}" "CC=${stdenv.cc.targetPrefix}cc" ];
 
   preInstall = ''
     mkdir -p $out/bin
   '';
 
   postInstall = ''
-    mkdir -p $out/share/man/man8
+    installManPage doc/masscan.8
+
     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; {
+  meta = with lib; {
     description = "Fast scan of the Internet";
-    homepage    = "https://github.com/robertdavidgraham/masscan";
-    license     = licenses.agpl3;
-    platforms   = platforms.unix;
+    homepage = "https://github.com/robertdavidgraham/masscan";
+    changelog = "https://github.com/robertdavidgraham/masscan/releases/tag/${version}";
+    license = licenses.agpl3Only;
+    platforms = platforms.unix;
     maintainers = with maintainers; [ rnhmjoj ];
   };
 }
diff --git a/pkgs/tools/security/mbox/default.nix b/pkgs/tools/security/mbox/default.nix
index 7292ac6785f..dd73e1624c7 100644
--- a/pkgs/tools/security/mbox/default.nix
+++ b/pkgs/tools/security/mbox/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, openssl, which }:
+{ lib, stdenv, fetchFromGitHub, openssl, which }:
 
 stdenv.mkDerivation {
   name = "mbox-20140526";
@@ -16,7 +16,7 @@ stdenv.mkDerivation {
     cd src
     cp {.,}configsbox.h
   '';
-  
+
   doCheck = true;
   checkPhase = ''
     rm tests/test-*vim.sh tests/test-pip.sh
@@ -27,7 +27,7 @@ stdenv.mkDerivation {
     ./testall.sh
   '';
 
-  meta = with stdenv.lib;
+  meta = with lib;
     { description = "Lightweight sandboxing mechanism that any user can use without special privileges";
       homepage = "http://pdos.csail.mit.edu/mbox/";
       maintainers = with maintainers; [ ehmry ];
diff --git a/pkgs/tools/security/medusa/default.nix b/pkgs/tools/security/medusa/default.nix
index bc18f165be7..43a30aad825 100644
--- a/pkgs/tools/security/medusa/default.nix
+++ b/pkgs/tools/security/medusa/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkg-config, freerdp, openssl, libssh2 }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, freerdp, openssl, libssh2 }:
 
 stdenv.mkDerivation rec {
   pname = "medusa-unstable";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ pkg-config ];
   buildInputs = [ freerdp openssl libssh2 ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/jmk-foofus/medusa";
     description = "A speedy, parallel, and modular, login brute-forcer";
     license = licenses.gpl2;
diff --git a/pkgs/tools/security/meo/default.nix b/pkgs/tools/security/meo/default.nix
index 54b96917623..05aa8323cc9 100644
--- a/pkgs/tools/security/meo/default.nix
+++ b/pkgs/tools/security/meo/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchhg, openssl, pcre-cpp, qt4, boost, pkcs11helper }:
+{ lib, stdenv, fetchhg, openssl, pcre-cpp, qt4, boost, pkcs11helper }:
 
 stdenv.mkDerivation {
   name = "meo-20121113";
-  
+
   src = fetchhg {
     url = "http://oss.stamfest.net/hg/meo";
     rev = "b48e5f16cff8";
@@ -27,9 +27,9 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.agpl3Plus;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
     broken = true;
   };
 }
diff --git a/pkgs/tools/security/metasploit/Gemfile b/pkgs/tools/security/metasploit/Gemfile
index 457c6249ca0..5fa9ad3b4d6 100644
--- a/pkgs/tools/security/metasploit/Gemfile
+++ b/pkgs/tools/security/metasploit/Gemfile
@@ -1,4 +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.90"
+gem "metasploit-framework", git: "https://github.com/rapid7/metasploit-framework", ref: "refs/tags/6.0.54"
diff --git a/pkgs/tools/security/metasploit/Gemfile.lock b/pkgs/tools/security/metasploit/Gemfile.lock
index 7142983f98c..e23841b82a5 100644
--- a/pkgs/tools/security/metasploit/Gemfile.lock
+++ b/pkgs/tools/security/metasploit/Gemfile.lock
@@ -1,18 +1,17 @@
 GIT
   remote: https://github.com/rapid7/metasploit-framework
-  revision: 592eedc5584953fb94b01a9aae48ec04d2cf153a
-  ref: refs/tags/5.0.90
+  revision: 0d6c0cfe63f494a04b46700a4317d52484f3a398
+  ref: refs/tags/6.0.54
   specs:
-    metasploit-framework (5.0.90)
-      actionpack (~> 4.2.6)
-      activerecord (~> 4.2.6)
-      activesupport (~> 4.2.6)
+    metasploit-framework (6.0.54)
+      actionpack (~> 5.2.2)
+      activerecord (~> 5.2.2)
+      activesupport (~> 5.2.2)
       aws-sdk-ec2
       aws-sdk-iam
       aws-sdk-s3
-      bcrypt (= 3.1.12)
+      bcrypt
       bcrypt_pbkdf
-      bit-struct
       bson
       concurrent-ruby (= 1.0.5)
       dnsruby
@@ -24,15 +23,17 @@ GIT
       faye-websocket
       filesize
       hrr_rb_ssh (= 0.3.0.pre2)
+      http-cookie
+      irb
       jsobfu
       json
       metasm
-      metasploit-concern (~> 2.0.0)
-      metasploit-credential (~> 3.0.0)
-      metasploit-model (~> 2.0.4)
-      metasploit-payloads (= 1.4.2)
-      metasploit_data_models (~> 3.0.10)
-      metasploit_payloads-mettle (= 0.5.21)
+      metasploit-concern (~> 3.0.0)
+      metasploit-credential (~> 4.0.0)
+      metasploit-model (~> 3.1.0)
+      metasploit-payloads (= 2.0.48)
+      metasploit_data_models (~> 4.1.0)
+      metasploit_payloads-mettle (= 1.0.10)
       mqtt
       msgpack
       nessus_rest
@@ -48,11 +49,13 @@ GIT
       patch_finder
       pcaprub
       pdf-reader
-      pg (~> 0.20)
+      pg
+      puma
       railties
       rb-readline
       recog
       redcarpet
+      reline (= 0.2.5)
       rex-arch
       rex-bin_tools
       rex-core
@@ -72,91 +75,94 @@ GIT
       rex-text
       rex-zip
       ruby-macho
-      ruby_smb
+      ruby_smb (~> 2.0)
       rubyntlm
       rubyzip
       sinatra
       sqlite3
       sshkey
+      swagger-blocks
       thin
       tzinfo
       tzinfo-data
+      unix-crypt
       warden
       windows_error
       xdr
       xmlrpc
+      zeitwerk
 
 GEM
   remote: https://rubygems.org/
   specs:
-    Ascii85 (1.0.3)
-    actionpack (4.2.11.3)
-      actionview (= 4.2.11.3)
-      activesupport (= 4.2.11.3)
-      rack (~> 1.6)
-      rack-test (~> 0.6.2)
-      rails-dom-testing (~> 1.0, >= 1.0.5)
+    Ascii85 (1.1.0)
+    actionpack (5.2.6)
+      actionview (= 5.2.6)
+      activesupport (= 5.2.6)
+      rack (~> 2.0, >= 2.0.8)
+      rack-test (>= 0.6.3)
+      rails-dom-testing (~> 2.0)
       rails-html-sanitizer (~> 1.0, >= 1.0.2)
-    actionview (4.2.11.3)
-      activesupport (= 4.2.11.3)
+    actionview (5.2.6)
+      activesupport (= 5.2.6)
       builder (~> 3.1)
-      erubis (~> 2.7.0)
-      rails-dom-testing (~> 1.0, >= 1.0.5)
+      erubi (~> 1.4)
+      rails-dom-testing (~> 2.0)
       rails-html-sanitizer (~> 1.0, >= 1.0.3)
-    activemodel (4.2.11.3)
-      activesupport (= 4.2.11.3)
-      builder (~> 3.1)
-    activerecord (4.2.11.3)
-      activemodel (= 4.2.11.3)
-      activesupport (= 4.2.11.3)
-      arel (~> 6.0)
-    activesupport (4.2.11.3)
-      i18n (~> 0.7)
+    activemodel (5.2.6)
+      activesupport (= 5.2.6)
+    activerecord (5.2.6)
+      activemodel (= 5.2.6)
+      activesupport (= 5.2.6)
+      arel (>= 9.0)
+    activesupport (5.2.6)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 0.7, < 2)
       minitest (~> 5.1)
-      thread_safe (~> 0.3, >= 0.3.4)
       tzinfo (~> 1.1)
-    addressable (2.7.0)
+    addressable (2.8.0)
       public_suffix (>= 2.0.2, < 5.0)
     afm (0.2.2)
-    arel (6.0.4)
-    arel-helpers (2.11.0)
+    arel (9.0.0)
+    arel-helpers (2.12.0)
       activerecord (>= 3.1.0, < 7)
-    aws-eventstream (1.1.0)
-    aws-partitions (1.319.0)
-    aws-sdk-core (3.96.1)
+    aws-eventstream (1.1.1)
+    aws-partitions (1.479.0)
+    aws-sdk-core (3.117.0)
       aws-eventstream (~> 1, >= 1.0.2)
       aws-partitions (~> 1, >= 1.239.0)
       aws-sigv4 (~> 1.1)
       jmespath (~> 1.0)
-    aws-sdk-ec2 (1.162.0)
-      aws-sdk-core (~> 3, >= 3.71.0)
+    aws-sdk-ec2 (1.251.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
       aws-sigv4 (~> 1.1)
-    aws-sdk-iam (1.37.0)
-      aws-sdk-core (~> 3, >= 3.71.0)
+    aws-sdk-iam (1.57.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
       aws-sigv4 (~> 1.1)
-    aws-sdk-kms (1.31.0)
-      aws-sdk-core (~> 3, >= 3.71.0)
+    aws-sdk-kms (1.44.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
       aws-sigv4 (~> 1.1)
-    aws-sdk-s3 (1.66.0)
-      aws-sdk-core (~> 3, >= 3.96.1)
+    aws-sdk-s3 (1.96.2)
+      aws-sdk-core (~> 3, >= 3.112.0)
       aws-sdk-kms (~> 1)
       aws-sigv4 (~> 1.1)
-    aws-sigv4 (1.1.3)
-      aws-eventstream (~> 1.0, >= 1.0.2)
-    bcrypt (3.1.12)
-    bcrypt_pbkdf (1.0.1)
-    bindata (2.4.7)
-    bit-struct (0.16)
-    bson (4.8.2)
+    aws-sigv4 (1.2.4)
+      aws-eventstream (~> 1, >= 1.0.2)
+    bcrypt (3.1.16)
+    bcrypt_pbkdf (1.1.0)
+    bindata (2.4.10)
+    bson (4.12.1)
     builder (3.2.4)
     concurrent-ruby (1.0.5)
     cookiejar (0.3.3)
     crass (1.0.6)
-    daemons (1.3.1)
-    dnsruby (1.61.3)
-      addressable (~> 2.5)
+    daemons (1.4.0)
+    dnsruby (1.61.7)
+      simpleidn (~> 0.1)
+    domain_name (0.5.20190701)
+      unf (>= 0.0.5, < 1.0.0)
     ed25519 (1.2.4)
-    em-http-request (1.1.5)
+    em-http-request (1.1.7)
       addressable (>= 2.3.4)
       cookiejar (!= 0.3.1)
       em-socksify (>= 0.3)
@@ -164,35 +170,55 @@ GEM
       http_parser.rb (>= 0.6.0)
     em-socksify (0.3.2)
       eventmachine (>= 1.0.0.beta.4)
-    erubis (2.7.0)
+    erubi (1.10.0)
     eventmachine (1.2.7)
-    faker (2.2.1)
-      i18n (>= 0.8)
-    faraday (1.0.1)
+    faker (2.18.0)
+      i18n (>= 1.6, < 2)
+    faraday (1.5.1)
+      faraday-em_http (~> 1.0)
+      faraday-em_synchrony (~> 1.0)
+      faraday-excon (~> 1.1)
+      faraday-httpclient (~> 1.0.1)
+      faraday-net_http (~> 1.0)
+      faraday-net_http_persistent (~> 1.1)
+      faraday-patron (~> 1.0)
       multipart-post (>= 1.2, < 3)
-    faye-websocket (0.10.9)
+      ruby2_keywords (>= 0.0.4)
+    faraday-em_http (1.0.0)
+    faraday-em_synchrony (1.0.0)
+    faraday-excon (1.1.0)
+    faraday-httpclient (1.0.1)
+    faraday-net_http (1.0.1)
+    faraday-net_http_persistent (1.2.0)
+    faraday-patron (1.0.0)
+    faye-websocket (0.11.1)
       eventmachine (>= 0.12.0)
       websocket-driver (>= 0.5.1)
     filesize (0.2.0)
     hashery (2.1.2)
     hrr_rb_ssh (0.3.0.pre2)
       ed25519 (~> 1.2)
-    http_parser.rb (0.6.0)
-    i18n (0.9.5)
+    http-cookie (1.0.4)
+      domain_name (~> 0.5)
+    http_parser.rb (0.7.0)
+    i18n (1.8.10)
       concurrent-ruby (~> 1.0)
+    io-console (0.5.9)
+    irb (1.3.6)
+      reline (>= 0.2.5)
     jmespath (1.4.0)
     jsobfu (0.4.2)
       rkelly-remix
-    json (2.3.0)
-    loofah (2.5.0)
+    json (2.5.1)
+    loofah (2.10.0)
       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.4)
+    metasm (1.0.5)
+    metasploit-concern (3.0.2)
+      activemodel (~> 5.2.2)
+      activesupport (~> 5.2.2)
+      railties (~> 5.2.2)
+    metasploit-credential (4.0.5)
       metasploit-concern
       metasploit-model
       metasploit_data_models (>= 3.0.0)
@@ -202,166 +228,186 @@ GEM
       rex-socket
       rubyntlm
       rubyzip
-    metasploit-model (2.0.4)
-      activemodel (~> 4.2.6)
-      activesupport (~> 4.2.6)
-      railties (~> 4.2.6)
-    metasploit-payloads (1.4.2)
-    metasploit_data_models (3.0.10)
-      activerecord (~> 4.2.6)
-      activesupport (~> 4.2.6)
+    metasploit-model (3.1.4)
+      activemodel (~> 5.2.2)
+      activesupport (~> 5.2.2)
+      railties (~> 5.2.2)
+    metasploit-payloads (2.0.48)
+    metasploit_data_models (4.1.4)
+      activerecord (~> 5.2.2)
+      activesupport (~> 5.2.2)
       arel-helpers
       metasploit-concern
-      metasploit-model
+      metasploit-model (>= 3.1)
       pg
-      postgres_ext
-      railties (~> 4.2.6)
+      railties (~> 5.2.2)
       recog (~> 2.0)
-    metasploit_payloads-mettle (0.5.21)
-    mini_portile2 (2.4.0)
-    minitest (5.14.1)
+      webrick
+    metasploit_payloads-mettle (1.0.10)
+    method_source (1.0.0)
+    mini_portile2 (2.5.3)
+    minitest (5.14.4)
     mqtt (0.5.0)
-    msgpack (1.3.3)
+    msgpack (1.4.2)
     multipart-post (2.1.1)
+    mustermann (1.1.1)
+      ruby2_keywords (~> 0.0.1)
     nessus_rest (0.1.6)
-    net-ldap (0.16.2)
-    net-ssh (6.0.2)
+    net-ldap (0.17.0)
+    net-ssh (6.1.0)
     network_interface (0.0.2)
-    nexpose (7.2.1)
-    nokogiri (1.10.9)
-      mini_portile2 (~> 2.4.0)
-    octokit (4.18.0)
+    nexpose (7.3.0)
+    nio4r (2.5.7)
+    nokogiri (1.11.7)
+      mini_portile2 (~> 2.5.0)
+      racc (~> 1.4)
+    octokit (4.21.0)
       faraday (>= 0.9)
       sawyer (~> 0.8.0, >= 0.5.3)
     openssl-ccm (1.2.2)
+    openssl-cmac (2.0.1)
     openvas-omp (0.0.4)
     packetfu (1.1.13)
       pcaprub
     patch_finder (1.0.2)
     pcaprub (0.13.0)
-    pdf-reader (2.4.0)
-      Ascii85 (~> 1.0.0)
+    pdf-reader (2.5.0)
+      Ascii85 (~> 1.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.5)
-    rack (1.6.13)
-    rack-protection (1.5.5)
+    pg (1.2.3)
+    public_suffix (4.0.6)
+    puma (5.3.2)
+      nio4r (~> 2.0)
+    racc (1.5.2)
+    rack (2.2.3)
+    rack-protection (2.1.0)
       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)
+    rack-test (1.1.0)
+      rack (>= 1.0, < 3)
+    rails-dom-testing (2.0.3)
+      activesupport (>= 4.2.0)
+      nokogiri (>= 1.6)
     rails-html-sanitizer (1.3.0)
       loofah (~> 2.3)
-    railties (4.2.11.3)
-      actionpack (= 4.2.11.3)
-      activesupport (= 4.2.11.3)
+    railties (5.2.6)
+      actionpack (= 5.2.6)
+      activesupport (= 5.2.6)
+      method_source
       rake (>= 0.8.7)
-      thor (>= 0.18.1, < 2.0)
-    rake (13.0.1)
+      thor (>= 0.19.0, < 2.0)
+    rake (13.0.6)
     rb-readline (0.5.5)
-    recog (2.3.7)
+    recog (2.3.20)
       nokogiri
-    redcarpet (3.5.0)
-    rex-arch (0.1.13)
+    redcarpet (3.5.1)
+    reline (0.2.5)
+      io-console (~> 0.5)
+    rex-arch (0.1.14)
       rex-text
-    rex-bin_tools (0.1.6)
+    rex-bin_tools (0.1.7)
       metasm
       rex-arch
       rex-core
       rex-struct2
       rex-text
-    rex-core (0.1.13)
-    rex-encoder (0.1.4)
+    rex-core (0.1.17)
+    rex-encoder (0.1.5)
       metasm
       rex-arch
       rex-text
-    rex-exploitation (0.1.24)
+    rex-exploitation (0.1.27)
       jsobfu
       metasm
       rex-arch
       rex-encoder
       rex-text
-    rex-java (0.1.5)
-    rex-mime (0.1.5)
+      rexml
+    rex-java (0.1.6)
+    rex-mime (0.1.6)
       rex-text
-    rex-nop (0.1.1)
+    rex-nop (0.1.2)
       rex-arch
-    rex-ole (0.1.6)
+    rex-ole (0.1.7)
       rex-text
-    rex-powershell (0.1.87)
+    rex-powershell (0.1.92)
       rex-random_identifier
       rex-text
       ruby-rc4
-    rex-random_identifier (0.1.4)
+    rex-random_identifier (0.1.7)
       rex-text
-    rex-registry (0.1.3)
-    rex-rop_builder (0.1.3)
+    rex-registry (0.1.4)
+    rex-rop_builder (0.1.4)
       metasm
       rex-core
       rex-text
-    rex-socket (0.1.23)
+    rex-socket (0.1.29)
       rex-core
-    rex-sslscan (0.1.5)
+    rex-sslscan (0.1.6)
       rex-core
       rex-socket
       rex-text
-    rex-struct2 (0.1.2)
-    rex-text (0.2.26)
-    rex-zip (0.1.3)
+    rex-struct2 (0.1.3)
+    rex-text (0.2.35)
+    rex-zip (0.1.4)
       rex-text
+    rexml (3.2.5)
     rkelly-remix (0.0.7)
-    ruby-macho (2.2.0)
+    ruby-macho (2.5.1)
     ruby-rc4 (0.1.5)
-    ruby_smb (1.1.0)
+    ruby2_keywords (0.0.5)
+    ruby_smb (2.0.10)
       bindata
+      openssl-ccm
+      openssl-cmac
       rubyntlm
       windows_error
-    rubyntlm (0.6.2)
-    rubyzip (2.3.0)
+    rubyntlm (0.6.3)
+    rubyzip (2.3.2)
     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)
+    simpleidn (0.2.1)
+      unf (~> 0.1.4)
+    sinatra (2.1.0)
+      mustermann (~> 1.0)
+      rack (~> 2.2)
+      rack-protection (= 2.1.0)
+      tilt (~> 2.0)
     sqlite3 (1.4.2)
     sshkey (2.0.0)
-    thin (1.7.2)
+    swagger-blocks (3.0.0)
+    thin (1.8.1)
       daemons (~> 1.0, >= 1.0.9)
       eventmachine (~> 1.0, >= 1.0.4)
       rack (>= 1, < 3)
-    thor (1.0.1)
+    thor (1.1.0)
     thread_safe (0.3.6)
     tilt (2.0.10)
-    ttfunk (1.6.2.1)
-    tzinfo (1.2.7)
+    ttfunk (1.7.0)
+    tzinfo (1.2.9)
       thread_safe (~> 0.1)
-    tzinfo-data (1.2020.1)
+    tzinfo-data (1.2021.1)
       tzinfo (>= 1.0.0)
-    warden (1.2.7)
-      rack (>= 1.0)
-    websocket-driver (0.7.1)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.7.7)
+    unix-crypt (1.3.0)
+    warden (1.2.9)
+      rack (>= 2.0.9)
+    webrick (1.7.0)
+    websocket-driver (0.7.5)
       websocket-extensions (>= 0.1.0)
-    websocket-extensions (0.1.4)
+    websocket-extensions (0.1.5)
     windows_error (0.1.2)
-    xdr (2.0.0)
-      activemodel (>= 4.2.7)
-      activesupport (>= 4.2.7)
-    xmlrpc (0.3.0)
+    xdr (3.0.2)
+      activemodel (>= 4.2, < 7.0)
+      activesupport (>= 4.2, < 7.0)
+    xmlrpc (0.3.2)
+      webrick
+    zeitwerk (2.4.2)
 
 PLATFORMS
   ruby
diff --git a/pkgs/tools/security/metasploit/default.nix b/pkgs/tools/security/metasploit/default.nix
index cc3d26fbee0..6bee3ddf81c 100644
--- a/pkgs/tools/security/metasploit/default.nix
+++ b/pkgs/tools/security/metasploit/default.nix
@@ -1,13 +1,4 @@
-{ 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
+{ lib, stdenv, fetchFromGitHub, makeWrapper, ruby, bundlerEnv }:
 
 let
   env = bundlerEnv {
@@ -17,16 +8,16 @@ let
   };
 in stdenv.mkDerivation rec {
   pname = "metasploit-framework";
-  version = "5.0.90";
+  version = "6.0.54";
 
   src = fetchFromGitHub {
     owner = "rapid7";
     repo = "metasploit-framework";
     rev = version;
-    sha256 = "1z3m8pvf1r8rz0snfkr9svhgjl2xn2qjgf8qswszzplsccqx1rss";
+    sha256 = "sha256-Aoj0KTp8WiY5a5YxssGjvFlVkVHb6ERVFGhyHS7GZ7o=";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
   dontPatchELF = true; # stay away from exploit executables
 
@@ -45,11 +36,15 @@ in stdenv.mkDerivation rec {
 
   '';
 
-  meta = with stdenv.lib; {
+  # run with: nix-shell maintainers/scripts/update.nix --argstr path metasploit
+  passthru.updateScript = ./update.sh;
+
+  meta = with 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 ];
+    mainProgram = "msfconsole";
   };
 }
diff --git a/pkgs/tools/security/metasploit/gemset.nix b/pkgs/tools/security/metasploit/gemset.nix
index cd3b2a336bd..e1ebae7da23 100644
--- a/pkgs/tools/security/metasploit/gemset.nix
+++ b/pkgs/tools/security/metasploit/gemset.nix
@@ -4,60 +4,60 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1955wx9m2g776sinamanzlk1jx2dzd34ci3sk22xicp0rmglps37";
+      sha256 = "0b2xl458f2ygnjbvv0hacc8bk9qxbx64m2g7vw6f9y7k8q85930y";
       type = "gem";
     };
-    version = "4.2.11.3";
+    version = "5.2.6";
   };
   actionview = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0glnaq3jx4m9q6vn55xqlsg8dbflqzm99fgsl9fl267mc2mz3qrv";
+      sha256 = "06f8212kplqhap9jpi49dvqlhwkfxxxm9nh8al6qjvl7mfh9qbzg";
       type = "gem";
     };
-    version = "4.2.11.3";
+    version = "5.2.6";
   };
   activemodel = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1z3777xsm82i7ggkg74mg21sqz8m5dfl8ykjm7xcrhd2nj843fcp";
+      sha256 = "1r28kcnzr8dm6idirndd8pvbmg5c678ijxk845g84ykq1l69czs6";
       type = "gem";
     };
-    version = "4.2.11.3";
+    version = "5.2.6";
   };
   activerecord = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1fpw9vyf2frkxkc6jbq9g78lhhflwz04j89qxj4krvmlq12q8v6d";
+      sha256 = "05qqnichgxml6z3d1dpgjy2fi62dppnqxgg37hr9a35hwhn05fzc";
       type = "gem";
     };
-    version = "4.2.11.3";
+    version = "5.2.6";
   };
   activesupport = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0wp36wi3r3dscmcr0q6sbz13hr5h911c24ar7zrmmcy7p32ial2i";
+      sha256 = "1vybx4cj42hr6m8cdwbrqq2idh98zms8c11kr399xjczhl9ywjbj";
       type = "gem";
     };
-    version = "4.2.11.3";
+    version = "5.2.6";
   };
   addressable = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
+      sha256 = "022r3m9wdxljpbya69y2i3h9g3dhhfaqzidf95m6qjzms792jvgp";
       type = "gem";
     };
-    version = "2.7.0";
+    version = "2.8.0";
   };
   afm = {
     groups = ["default"];
@@ -74,160 +74,150 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0nfcrdiys6q6ylxiblky9jyssrw2xj96fmxmal7f4f0jj3417vj4";
+      sha256 = "1jk7wlmkr61f6g36w9s2sn46nmdg6wn2jfssrhbhirv5x9n95nk0";
       type = "gem";
     };
-    version = "6.0.4";
+    version = "9.0.0";
   };
   arel-helpers = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "16irs6rai9pasv36yy31glijs3p2pvgry5g1lh03vnzg8xpb1msp";
+      sha256 = "12wgkhajfsm3fgk43zf7xyxrx7q2kc4ggq459p1az6p0b9jscarx";
       type = "gem";
     };
-    version = "2.11.0";
+    version = "2.12.0";
   };
   Ascii85 = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0658m37jjjn6drzqg1gk4p6c205mgp7g1jh2d00n4ngghgmz5qvs";
+      sha256 = "1ds4v9xgsyvijnlflak4dzf1qwmda9yd5bv8jwsb56nngd399rlw";
       type = "gem";
     };
-    version = "1.0.3";
+    version = "1.1.0";
   };
   aws-eventstream = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0r0pn66yqrdkrfdin7qdim0yj2x75miyg4wp6mijckhzhrjb7cv5";
+      sha256 = "0jfki5ikfr8ln5cdgv4iv1643kax0bjpp29jh78chzy713274jh3";
       type = "gem";
     };
-    version = "1.1.0";
+    version = "1.1.1";
   };
   aws-partitions = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "11gr3pkd0cq034jdmvmi32sb99hkh91qjrpvc6jchi4lsaiaiqgc";
+      sha256 = "090s6b7lz9wz6rclklshxbksgvdf4wji7yy2vha6cz8vg6lbz1xh";
       type = "gem";
     };
-    version = "1.319.0";
+    version = "1.479.0";
   };
   aws-sdk-core = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0jdnzynjrpp2jyg8vrbfbaad16k8ni1520xah1z2ckl5779x9fi6";
+      sha256 = "1mcagbyzy7l39lxm9g85frvjwlv3yfd9x8jddd1pfc0xsy9y0rax";
       type = "gem";
     };
-    version = "3.96.1";
+    version = "3.117.0";
   };
   aws-sdk-ec2 = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0xp9kp90ixk1ywd0d8ssbk8dl5kxqnz942yr2qq00m7fd60pihh7";
+      sha256 = "0vs4k390h8sqv6zcmrgixsc8z1smpglrxvnzl1ci522w9jcn6az7";
       type = "gem";
     };
-    version = "1.162.0";
+    version = "1.251.0";
   };
   aws-sdk-iam = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "09l3g5a2r7gnc6pwln409b9ahwcs6xpnjx2qaj70cbllanyxbw0c";
+      sha256 = "0nmd4g0cdvb38z9mpx13z6mwgbyyn84vj8wn0yf5y4kfzmi47q4y";
       type = "gem";
     };
-    version = "1.37.0";
+    version = "1.57.0";
   };
   aws-sdk-kms = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1czxr6yi8p9gma4dwgygp1jn0i289hwa2vw69kzfscgbn118c3mm";
+      sha256 = "0407yggwsy89fzh387vq3af5azplci5v0a8y97h7r6da4jrv1ksm";
       type = "gem";
     };
-    version = "1.31.0";
+    version = "1.44.0";
   };
   aws-sdk-s3 = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1x1d1azxwanvm0d7qppw41x5nx2zv0bcz41yk9vqi5lvr7apaq13";
+      sha256 = "1qgr1x2ykkbbfh6krv4wb97ihjq6w785gh21qrk77s9xjq4lcfqw";
       type = "gem";
     };
-    version = "1.66.0";
+    version = "1.96.2";
   };
   aws-sigv4 = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0kysxyw1zkvggbmcj4xnscdh15kxli8mx07hv447h74g9x02drsd";
+      sha256 = "0cb9hsg0x9v4yk6sxif8968sg646qphmsjaqy9z8p7y3my5bkrf0";
       type = "gem";
     };
-    version = "1.1.3";
+    version = "1.2.4";
   };
   bcrypt = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0ysblqxkclmnhrd0kmb5mr8p38mbar633gdsb14b7dhkhgawgzfy";
+      sha256 = "02r1c3isfchs5fxivbq99gc3aq4vfyn8snhcy707dal1p8qz12qb";
       type = "gem";
     };
-    version = "3.1.12";
+    version = "3.1.16";
   };
   bcrypt_pbkdf = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "02vssr285m7kpsr47jdmzbar1h1d0mnkmyrpr1zg828isfmwii35";
+      sha256 = "0ndamfaivnkhc6hy0yqyk2gkwr6f3bz6216lh74hsiiyk3axz445";
       type = "gem";
     };
-    version = "1.0.1";
+    version = "1.1.0";
   };
   bindata = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "033vd169q751qn3zrsv8j5f80k6wg5yhsy8z3clds6py4vqm6xl8";
-      type = "gem";
-    };
-    version = "2.4.7";
-  };
-  bit-struct = {
-    groups = ["default"];
-    platforms = [];
-    source = {
-      remotes = ["https://rubygems.org"];
-      sha256 = "1w7x1fh4a6inpb46imhdf4xrq0z4d6zdpg7sdf8n98pif2hx50sx";
+      sha256 = "06lqi4svq5qls9f7nnvd2zmjdqmi2sf82sq78ci5d78fq0z5x2vr";
       type = "gem";
     };
-    version = "0.16";
+    version = "2.4.10";
   };
   bson = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "06h8sk2wl7pgrwl15xb1bd6l9ws8sz006rf9cy6n6q7g0iwdalkh";
+      sha256 = "0pnr0b7phdzhkw9xqhmqnw5673ndi13ks3dqwqmbxq6v0rsxiapc";
       type = "gem";
     };
-    version = "4.8.2";
+    version = "4.12.1";
   };
   builder = {
     groups = ["default"];
@@ -274,20 +264,30 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0l5gai3vd4g7aqff0k1mp41j9zcsvm2rbwmqn115a325k9r7pf4w";
+      sha256 = "1fki1aipqafqlg8xy25ykk0ql1dciy9kk6lcp5gzgkh9ccmaxzf3";
       type = "gem";
     };
-    version = "1.3.1";
+    version = "1.4.0";
   };
   dnsruby = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "139cbl2k934q7d50g7hi8r4im69ca3iv16y9plq9yc6mgjq1cgfk";
+      sha256 = "1pbhj4xmj4262in6c1nwl5ssw0qypg8ysjrrkwn2akkzbxzy9rfq";
       type = "gem";
     };
-    version = "1.61.3";
+    version = "1.61.7";
+  };
+  domain_name = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0";
+      type = "gem";
+    };
+    version = "0.5.20190701";
   };
   ed25519 = {
     groups = ["default"];
@@ -304,10 +304,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "13rxmbi0fv91n4sg300v3i9iiwd0jxv0i6xd0sp81dx3jlx7kasx";
+      sha256 = "1azx5rgm1zvx7391sfwcxzyccs46x495vb34ql2ch83f58mwgyqn";
       type = "gem";
     };
-    version = "1.1.5";
+    version = "1.1.7";
   };
   em-socksify = {
     groups = ["default"];
@@ -319,15 +319,15 @@
     };
     version = "0.3.2";
   };
-  erubis = {
+  erubi = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+      sha256 = "09l8lz3j00m898li0yfsnb6ihc63rdvhw3k5xczna5zrjk104f2l";
       type = "gem";
     };
-    version = "2.7.0";
+    version = "1.10.0";
   };
   eventmachine = {
     groups = ["default"];
@@ -344,30 +344,100 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1wpzpqzpqd9jjzm3ap8182sfbnhdahcxpbg0dssbwq13qdf1s5xs";
+      sha256 = "1hwir9b9zy0asy0vap7zfqv75lbws4a1pmh74lhqd2rndv32vfc5";
       type = "gem";
     };
-    version = "2.2.1";
+    version = "2.18.0";
   };
   faraday = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0wwks9652xwgjm7yszcq5xr960pjypc07ivwzbjzpvy9zh2fw6iq";
+      sha256 = "1xpq9w46alagszx2mx82mqxxmsmyni2bpxd08gygzpl03zwbpr63";
+      type = "gem";
+    };
+    version = "1.5.1";
+  };
+  faraday-em_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12cnqpbak4vhikrh2cdn94assh3yxza8rq2p9w2j34bqg5q4qgbs";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-em_synchrony = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vgrbhkp83sngv6k4mii9f2s9v5lmp693hylfxp2ssfc60fas3a6";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  faraday-excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h09wkb0k0bhm6dqsd47ac601qiaah8qdzjh8gvxfd376x1chmdh";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  faraday-httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fyk0jd3ks7fdn8nv3spnwjpzx2lmxmg2gh4inz3by1zjzqg33sc";
       type = "gem";
     };
     version = "1.0.1";
   };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fi8sda5hc54v1w3mqfl5yz09nhx35kglyx72w7b8xxvdr0cwi9j";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  faraday-net_http_persistent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dc36ih95qw3rlccffcb0vgxjhmipsvxhn6cw71l7ffs0f7vq30b";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  faraday-patron = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19wgsgfq0xkski1g7m96snv39la3zxz6x7nbdgiwhg5v82rxfb6w";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
   faye-websocket = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1kbp3rjwm74zdj0wy2n1cyyvd7ak4k8i8zva6ib4vqfcv8d2j11a";
+      sha256 = "14lrb065xc4mny9faf91357r8s91qsbi7zfzsfqlj202b8hsgqf8";
       type = "gem";
     };
-    version = "0.10.9";
+    version = "0.11.1";
   };
   filesize = {
     groups = ["default"];
@@ -399,25 +469,55 @@
     };
     version = "0.3.0.pre2";
   };
+  http-cookie = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19370bc97gsy2j4hanij246hv1ddc85hw0xjb6sj7n1ykqdlx9l9";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
   "http_parser.rb" = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
+      sha256 = "1xha614fi6l04wryqjj1xmpalzlmhb6lb9qmlh8mmliycdhvcshp";
       type = "gem";
     };
-    version = "0.6.0";
+    version = "0.7.0";
   };
   i18n = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "038qvz7kd3cfxk8bvagqhakx68pfbnmghpdkx7573wbf0maqp9a3";
+      sha256 = "0g2fnag935zn2ggm5cn6k4s4xvv53v2givj1j90szmvavlpya96a";
       type = "gem";
     };
-    version = "0.9.5";
+    version = "1.8.10";
+  };
+  io-console = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pmafwxh8z1apnk7bb1ibnbhfrgb1jgilxm4j8d0fcqlc2ggmbja";
+      type = "gem";
+    };
+    version = "0.5.9";
+  };
+  irb = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s4yjh5p1n05cm3pglh3g4ssrgy67x2bn3bsl0sydbm8mlf3xivr";
+      type = "gem";
+    };
+    version = "1.3.6";
   };
   jmespath = {
     groups = ["default"];
@@ -444,122 +544,132 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0nrmw2r4nfxlfgprfgki3hjifgrcrs3l5zvm3ca3gb4743yr25mn";
+      sha256 = "0lrirj0gw420kw71bjjlqkqhqbrplla61gbv1jzgsz6bv90qr3ci";
       type = "gem";
     };
-    version = "2.3.0";
+    version = "2.5.1";
   };
   loofah = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0jk9fgn5ayzbqvzqm11gbkqvas77zdbpkvynlylyiwynclgrn040";
+      sha256 = "19vkaazjqyq7yj5ah8rpr4vl9n4mg95scdr5im93akhd5bjvkkly";
       type = "gem";
     };
-    version = "2.5.0";
+    version = "2.10.0";
   };
   metasm = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0mbmpc8vsi574s78f23bhiqk07sr6yrrrmk702lfv61ql4ah5l89";
+      sha256 = "0dpjbkdvi4h6v0g01db7vlcsg15pfiyslkz3zd7wfk04yrc6g7wi";
       type = "gem";
     };
-    version = "1.0.4";
+    version = "1.0.5";
   };
   metasploit-concern = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0v9lm225fhzhnbjcc0vwb38ybikxwzlv8116rrrkndzs8qy79297";
+      sha256 = "0zbcnhji80cyj19jkdp8wpi1msg9xfm0lacpm8ggm8fca56234zv";
       type = "gem";
     };
-    version = "2.0.5";
+    version = "3.0.2";
   };
   metasploit-credential = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1jh1mzvjpsmqamhwjqs6x2bx550mxkqjvl0f1gl1g87w5qvg3w69";
+      sha256 = "0wflb4r5mz2g29bzjpwc004h6vca9kd0z02v27wc378jgg6q0gna";
       type = "gem";
     };
-    version = "3.0.4";
+    version = "4.0.5";
   };
   metasploit-framework = {
     groups = ["default"];
     platforms = [];
     source = {
       fetchSubmodules = false;
-      rev = "592eedc5584953fb94b01a9aae48ec04d2cf153a";
-      sha256 = "1z3m8pvf1r8rz0snfkr9svhgjl2xn2qjgf8qswszzplsccqx1rss";
+      rev = "0d6c0cfe63f494a04b46700a4317d52484f3a398";
+      sha256 = "1fk7qqp1swk82ial9s6va68mandwlg0v4ccndcwjcnkw78lz9202";
       type = "git";
       url = "https://github.com/rapid7/metasploit-framework";
     };
-    version = "5.0.90";
+    version = "6.0.54";
   };
   metasploit-model = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "05pnai1cv00xw87rrz38dz4s3ss45s90290d0knsy1mq6rp8yvmw";
+      sha256 = "10ndgv4c30rq211f5lyngfcp87lxzgc9h8a7jx40wih43dj6faxq";
       type = "gem";
     };
-    version = "2.0.4";
+    version = "3.1.4";
   };
   metasploit-payloads = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1kddir54jnzl64nsawnvkzdabnmqncq9vav49i1cfschnf4cxc4g";
+      sha256 = "0jg96v1a7q3ypq33jaflnfvpqm6cz0ihaiilag2y6qvd0ypv297d";
       type = "gem";
     };
-    version = "1.4.2";
+    version = "2.0.48";
   };
   metasploit_data_models = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1h59lblfrx8gsnqr10wk958zp6rsjy3qib3hb87s3nm6m1zhm2bc";
+      sha256 = "1gzfvfqs9mf50dcnirc1944a25920s1swjd9g97d1x340651xmmr";
       type = "gem";
     };
-    version = "3.0.10";
+    version = "4.1.4";
   };
   metasploit_payloads-mettle = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1419z6z0j69zdlkfx3kqgqygsm0ysigwccgn82z5lz82i16krhca";
+      sha256 = "12mm3bqcirbzn7337zg96w79i6in49z2gmg41cwjywi1p2iawk61";
       type = "gem";
     };
-    version = "0.5.21";
+    version = "1.0.10";
+  };
+  method_source = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp";
+      type = "gem";
+    };
+    version = "1.0.0";
   };
   mini_portile2 = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
+      sha256 = "1ad0mli9rc0f17zw4ibp24dbj1y39zkykijsjmnzl4gwpg5s0j6k";
       type = "gem";
     };
-    version = "2.4.0";
+    version = "2.5.3";
   };
   minitest = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "09bz9nsznxgaf06cx3b5z71glgl0hdw469gqx3w7bqijgrb55p5g";
+      sha256 = "19z7wkhg59y8abginfrm2wzplz7py3va8fyngiigngqvsws6cwgl";
       type = "gem";
     };
-    version = "5.14.1";
+    version = "5.14.4";
   };
   mqtt = {
     groups = ["default"];
@@ -576,10 +686,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1lva6bkvb4mfa0m3bqn4lm4s4gi81c40jvdcsrxr6vng49q9daih";
+      sha256 = "06iajjyhx0rvpn4yr3h1hc4w4w3k59bdmfhxnjzzh76wsrdxxrc6";
       type = "gem";
     };
-    version = "1.3.3";
+    version = "1.4.2";
   };
   multipart-post = {
     groups = ["default"];
@@ -591,6 +701,16 @@
     };
     version = "2.1.1";
   };
+  mustermann = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ccm54qgshr1lq3pr1dfh7gphkilc19dp63rw6fcx7460pjwy88a";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
   nessus_rest = {
     groups = ["default"];
     platforms = [];
@@ -606,20 +726,20 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1vzfhivjfr9q65hkln7xig3qcba6fw9y4kb4384fpm7d7ww0b7xg";
+      sha256 = "1j19yxrz7h3hj7kiiln13c7bz7hvpdqr31bwi88dj64zifr7896n";
       type = "gem";
     };
-    version = "0.16.2";
+    version = "0.17.0";
   };
   net-ssh = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0kf4am0mz8mwqhif4iqh5yz9pcbbmja5w707j00sfsgrq19nxqld";
+      sha256 = "0jp3jgcn8cij407xx9ldb5h9c6jv13jc4cf6kk2idclz43ww21c9";
       type = "gem";
     };
-    version = "6.0.2";
+    version = "6.1.0";
   };
   network_interface = {
     groups = ["default"];
@@ -636,30 +756,40 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0i108glkklwgjxhfhnlqf4b16plqf9b84qpfz0pnl2pbnal5af8m";
+      sha256 = "0jz5xiwiwagd663qdlfhmc9fm76x78cqhighmfivy6w5v0n4xyq0";
       type = "gem";
     };
-    version = "7.2.1";
+    version = "7.3.0";
+  };
+  nio4r = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00fwz0qq7agd2xkdz02i8li236qvwhma3p0jdn5bdvc21b7ydzd5";
+      type = "gem";
+    };
+    version = "2.5.7";
   };
   nokogiri = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "12j76d0bp608932xkzmfi638c7aqah57l437q8494znzbj610qnm";
+      sha256 = "1vrn31385ix5k9b0yalnlzv360isv6dincbcvi8psllnwz4sjxj9";
       type = "gem";
     };
-    version = "1.10.9";
+    version = "1.11.7";
   };
   octokit = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0zvfr9njmj5svi39fcsi2b0g7pcxb0vamw9dlyas8bg814jlzhi6";
+      sha256 = "0ak64rb48d8z98nw6q70r6i0i3ivv61iqla40ss5l79491qfnn27";
       type = "gem";
     };
-    version = "4.18.0";
+    version = "4.21.0";
   };
   openssl-ccm = {
     groups = ["default"];
@@ -671,6 +801,16 @@
     };
     version = "1.2.2";
   };
+  openssl-cmac = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1k69p0p0ilvqnwskhc0bfax8rwvyk6n4wzarg8qsjdvm13xwx508";
+      type = "gem";
+    };
+    version = "2.0.1";
+  };
   openvas-omp = {
     groups = ["default"];
     platforms = [];
@@ -716,100 +856,90 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1g3gr2m46275hjv6fv4jwq3qlvdbnhf1jxir9vzgxhv45ncnhffy";
+      sha256 = "14cxj3ra9nnn334qpm2vsx9s0zk3095s8ih6cwcp47h3hv03c73y";
       type = "gem";
     };
-    version = "2.4.0";
+    version = "2.5.0";
   };
   pg = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "00vhasqwc4f98qb4wxqn2h07fjwzhp5lwyi41j2gndi2g02wrdqh";
+      sha256 = "13mfrysrdrh8cka1d96zm0lnfs59i5x2g6ps49r2kz5p3q81xrzj";
       type = "gem";
     };
-    version = "0.21.0";
+    version = "1.2.3";
   };
-  pg_array_parser = {
+  public_suffix = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1034dhg8h53j48sfm373js54skg4vpndjga6hzn2zylflikrrf3s";
+      sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
       type = "gem";
     };
-    version = "0.0.9";
+    version = "4.0.6";
   };
-  postgres_ext = {
+  puma = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0ni1ajzxvc17ba4rgl27cd3645ddbpqpfckv7m08sfgk015hh7dq";
+      sha256 = "0lmaq05a257m9588a81wql3a5p039f221f0dmq57bm2qjwxydjmj";
       type = "gem";
     };
-    version = "3.0.1";
+    version = "5.3.2";
   };
-  public_suffix = {
+  racc = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0vywld400fzi17cszwrchrzcqys4qm6sshbv73wy5mwcixmrgg7g";
+      sha256 = "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g";
       type = "gem";
     };
-    version = "4.0.5";
+    version = "1.5.2";
   };
   rack = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0wr1f3g9rc9i8svfxa9cijajl1661d817s56b2w7rd572zwn0zi0";
+      sha256 = "0i5vs0dph9i5jn8dfc6aqd6njcafmb20rwqngrf759c9cvmyff16";
       type = "gem";
     };
-    version = "1.6.13";
+    version = "2.2.3";
   };
   rack-protection = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0my0wlw4a5l3hs79jkx2xzv7djhajgf8d28k8ai1ddlnxxb0v7ss";
+      sha256 = "159a4j4kragqh0z0z8vrpilpmaisnlz3n7kgiyf16bxkwlb3qlhz";
       type = "gem";
     };
-    version = "1.5.5";
+    version = "2.1.0";
   };
   rack-test = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0h6x5jq24makgv2fq5qqgjlrk74dxfy62jif9blk43llw8ib2q7z";
+      sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m";
       type = "gem";
     };
-    version = "0.6.3";
-  };
-  rails-deprecated_sanitizer = {
-    groups = ["default"];
-    platforms = [];
-    source = {
-      remotes = ["https://rubygems.org"];
-      sha256 = "0qxymchzdxww8bjsxj05kbf86hsmrjx40r41ksj0xsixr2gmhbbj";
-      type = "gem";
-    };
-    version = "1.0.3";
+    version = "1.1.0";
   };
   rails-dom-testing = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0wssfqpn00byhvp2372p99mphkcj8qx6pf6646avwr9ifvq0q1x6";
+      sha256 = "1lfq2a7kp2x64dzzi5p4cjcbiv62vxh9lyqk2f0rqq3fkzrw8h5i";
       type = "gem";
     };
-    version = "1.0.9";
+    version = "2.0.3";
   };
   rails-html-sanitizer = {
     groups = ["default"];
@@ -826,20 +956,20 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "12f7g5iw1gqjwl2rvfmbgxipds5c475ggalw6qskzzrx9vyc2fpk";
+      sha256 = "0rs97fxv13hgpbmyhk8ag8qzgkh25css0797h90k9w1vg9djl84k";
       type = "gem";
     };
-    version = "4.2.11.3";
+    version = "5.2.6";
   };
   rake = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0w6qza25bq1s825faaglkx1k6d59aiyjjk3yw3ip5sb463mhhai9";
+      sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w";
       type = "gem";
     };
-    version = "13.0.1";
+    version = "13.0.6";
   };
   rb-readline = {
     groups = ["default"];
@@ -856,200 +986,220 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1j65iary8qkgyrjc3vnjd7dbyjs2bsz2hcg7ndibjk623faxb1wk";
+      sha256 = "11hc55mdl2d4kb8vrbazydxdnzr5l7dd4v5spqrrgnmp2d7rq3az";
       type = "gem";
     };
-    version = "2.3.7";
+    version = "2.3.20";
   };
   redcarpet = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0skcyx1h8b5ms0rp2zm3ql6g322b8c1adnkwkqyv7z3kypb4bm7k";
+      sha256 = "0bvk8yyns5s1ls437z719y5sdv9fr8kfs8dmr6g8s761dv5n8zvi";
       type = "gem";
     };
-    version = "3.5.0";
+    version = "3.5.1";
+  };
+  reline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bf86g8a761mp516349gzmvxkafj36nznczznb3flkn4a84dlk3k";
+      type = "gem";
+    };
+    version = "0.2.5";
   };
   rex-arch = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0cvdy2ysiphdig258lkicbxqq2y47bkl69kgj4kkj8w338rb5kwa";
+      sha256 = "1gi9641869pg30ij7ba3r2z89flvdqsma4spbpww6c8ph62iy4bp";
       type = "gem";
     };
-    version = "0.1.13";
+    version = "0.1.14";
   };
   rex-bin_tools = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "19q4cj7cis29k3zx9j2gp4h3ib0zig2fa4rs56c1gjr32f192zzk";
+      sha256 = "16w219ashxrgrgb5via9k45h7whrib77rmwy0f7akqf409pzjdp7";
       type = "gem";
     };
-    version = "0.1.6";
+    version = "0.1.7";
   };
   rex-core = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1b9pf7f8m2zjck65dpp8h8v4n0a05kfas6cn9adv0w8d9z58aqvv";
+      sha256 = "0b0f9s18d2ax2k1xmwrvr97gxh8gfm79kfibv55fqmv846vgkkvk";
       type = "gem";
     };
-    version = "0.1.13";
+    version = "0.1.17";
   };
   rex-encoder = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1zm5jdxgyyp8pkfqwin34izpxdrmglx6vmk20ifnvcsm55c9m70z";
+      sha256 = "0lnrlii8d3r35927wp42bpdzh37dx3jqgdxk6lk5d6xvz6h14kp7";
       type = "gem";
     };
-    version = "0.1.4";
+    version = "0.1.5";
   };
   rex-exploitation = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0inrf2vahmpxhjf84i8ak2b7gcirsrjrmb1rnvvqqr9kl0xw5xm3";
+      sha256 = "1b10rcrw52nj2aswsn0kwv0s601rbn077k0r6n5lblip6fbrqz9i";
       type = "gem";
     };
-    version = "0.1.24";
+    version = "0.1.27";
   };
   rex-java = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0j58k02p5g9snkpak64sb4aymkrvrh9xpqh8wsnya4w7b86w2y6i";
+      sha256 = "0g8xdj7ij4y51wgh6l29al6i107bqn6pwql6za7ahms75m8s9dys";
       type = "gem";
     };
-    version = "0.1.5";
+    version = "0.1.6";
   };
   rex-mime = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "15a14kz429h7pn81ysa6av3qijxjmxagjff6dyss5v394fxzxf4a";
+      sha256 = "0wzw1qcdgbn3iyskppy5038mcdrzplyai45pilm5qjj4fwvjdl6m";
       type = "gem";
     };
-    version = "0.1.5";
+    version = "0.1.6";
   };
   rex-nop = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0aigf9qsqsmiraa6zvfy1a7cyvf7zc3iyhzxi6fjv5sb8f64d6ny";
+      sha256 = "0yjlmgmaaa65lkd6jrm71g8yfn8xy91jl07nd1v90xp9jrzrrl92";
       type = "gem";
     };
-    version = "0.1.1";
+    version = "0.1.2";
   };
   rex-ole = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1pnzbqfnvbs0vc0z0ryszk3fxhgxrjd6gzwqa937rhlphwp5jpww";
+      sha256 = "0rlsy1a4lig7iqvb4zn60fpf125v8k4bjrjzakks74prjb2qmqnp";
       type = "gem";
     };
-    version = "0.1.6";
+    version = "0.1.7";
   };
   rex-powershell = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "11wi8dpb2s8bvkqhbf80g16nyj2hscs3vz31ffzl1g0g6imcs0dl";
+      sha256 = "02gpfw43r0pkzp7jj3n0lwn4lgbgkgadrn4p33x7b0xh1dalzgj1";
       type = "gem";
     };
-    version = "0.1.87";
+    version = "0.1.92";
   };
   rex-random_identifier = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0fg94sczff5c2rlvqqgw2dndlqyzjil5rjk3p9f46ss2hc8zxlbk";
+      sha256 = "1zaqndyy04c4fn021ibh05xim3wr7l2i71713amz6pvhgs2939r3";
       type = "gem";
     };
-    version = "0.1.4";
+    version = "0.1.7";
   };
   rex-registry = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0wv812ghnz143vx10ixmv32ypj1xrzr4rh4kgam8d8wwjwxsgw1q";
+      sha256 = "09b6jhcih4srrh0j52v49vbffqz8ngki6qpmq9b2wdabqnw63d1v";
       type = "gem";
     };
-    version = "0.1.3";
+    version = "0.1.4";
   };
   rex-rop_builder = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0xjd3d6wnbq4ym0d0m268md8fb16f2hbwrahvxnl14q63fj9i3wy";
+      sha256 = "0ssynxq3kc86v3xnc6jx8pg5zh13q61wl2klqbi9hzn2n8lhdgvj";
       type = "gem";
     };
-    version = "0.1.3";
+    version = "0.1.4";
   };
   rex-socket = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "07vm17w791vdpr23aqp45kqsjbqgwpqj92a535h6n4fckxgzhg94";
+      sha256 = "0ar9vm8pwjz7c11kr3pjnxbgk68f2i5k1r9j3r34pfq9n26s79gr";
       type = "gem";
     };
-    version = "0.1.23";
+    version = "0.1.29";
   };
   rex-sslscan = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "06gbx45q653ajcx099p0yxdqqxazfznbrqshd4nwiwg1p498lmyx";
+      sha256 = "0r58n1ifbay1gq3kln9yg5iqjwp69l0pmb9sqakhqwhjlhzqx2kr";
       type = "gem";
     };
-    version = "0.1.5";
+    version = "0.1.6";
   };
   rex-struct2 = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1nbdn53264a20cr2m2nq2v4mg0n33dvrd1jj1sixl37qjzw2k452";
+      sha256 = "1hp8yv55j995dl587hismwa7ydyprs03c75gia6rwp7v5bhshy4n";
       type = "gem";
     };
-    version = "0.1.2";
+    version = "0.1.3";
   };
   rex-text = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "17m5zwca15qsd7mqqhi2q530iwsrb7wkqh8qff7pxjxwlxbvsrxx";
+      sha256 = "0idgw5z813h5dp82n07g5ldpyfnk7mhvnzl87d9fpy6invixnnbq";
       type = "gem";
     };
-    version = "0.2.26";
+    version = "0.2.35";
   };
   rex-zip = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1mbfryyhcw47i7jb8cs8vilbyqgyiyjkfl1ngl6wdbf7d87dwdw7";
+      sha256 = "0azm4g4dm9k6vrav769vn0gffrv7pgxknlj4dr9yav632920cvqj";
       type = "gem";
     };
-    version = "0.1.3";
+    version = "0.1.4";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
   };
   rkelly-remix = {
     groups = ["default"];
@@ -1066,10 +1216,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1k5vvk9d13pixhbram6fs74ibgmr2dngv7bks13npcjb42q275if";
+      sha256 = "1jgmhj4srl7cck1ipbjys6q4klcs473gq90bm59baw4j1wpfaxch";
       type = "gem";
     };
-    version = "2.2.0";
+    version = "2.5.1";
   };
   ruby-rc4 = {
     groups = ["default"];
@@ -1081,35 +1231,45 @@
     };
     version = "0.1.5";
   };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
   ruby_smb = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "125pimmaskp13nkk5j138nfk1kd8n91sfdlx4dhj2j9zk342wsf4";
+      sha256 = "1h8p6ksfr9xhpj9p38b4mjj76zm4d0dg06hhp00ii9hh7vy6mryd";
       type = "gem";
     };
-    version = "1.1.0";
+    version = "2.0.10";
   };
   rubyntlm = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1p6bxsklkbcqni4bcq6jajc2n57g0w5rzn4r49c3lb04wz5xg0dy";
+      sha256 = "0b8hczk8hysv53ncsqzx4q6kma5gy5lqc7s5yx8h64x3vdb18cjv";
       type = "gem";
     };
-    version = "0.6.2";
+    version = "0.6.3";
   };
   rubyzip = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0590m2pr9i209pp5z4mx0nb1961ishdiqb28995hw1nln1d1b5ji";
+      sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
       type = "gem";
     };
-    version = "2.3.0";
+    version = "2.3.2";
   };
   sawyer = {
     groups = ["default"];
@@ -1121,15 +1281,25 @@
     };
     version = "0.8.2";
   };
+  simpleidn = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06f7w6ph3bzzqk212yylfp4jfx275shgp9zg3xszbpv1ny2skp9m";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
   sinatra = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0byxzl7rx3ki0xd7aiv1x8mbah7hzd8f81l65nq8857kmgzj1jqq";
+      sha256 = "0dd53rzpkxgs697pycbhhgc9vcnxra4ly4xar8ni6aiydx2f88zk";
       type = "gem";
     };
-    version = "1.4.8";
+    version = "2.1.0";
   };
   sqlite3 = {
     groups = ["default"];
@@ -1151,25 +1321,35 @@
     };
     version = "2.0.0";
   };
+  swagger-blocks = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bycg5si4pr69b0qqiqzhwcich90mvmn0v0gs39slvxg5nv3h28k";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
   thin = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0nagbf9pwy1vg09k6j4xqhbjjzrg5dwzvkn4ffvlj76fsn6vv61f";
+      sha256 = "123bh7qlv6shk8bg8cjc84ix8bhlfcilwnn3iy6zq3l57yaplm9l";
       type = "gem";
     };
-    version = "1.7.2";
+    version = "1.8.1";
   };
   thor = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1xbhkmyhlxwzshaqa7swy2bx6vd64mm0wrr8g3jywvxy7hg0cwkm";
+      sha256 = "18yhlvmfya23cs3pvhr1qy38y41b6mhr5q9vwv5lrgk16wmf3jna";
       type = "gem";
     };
-    version = "1.0.1";
+    version = "1.1.0";
   };
   thread_safe = {
     groups = ["default"];
@@ -1196,60 +1376,100 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0w0bjn6k38xv46mr02p3038gwk5jj5hl398bv5kr625msxkdhqzn";
+      sha256 = "15iaxz9iak5643bq2bc0jkbjv8w2zn649lxgvh5wg48q9d4blw13";
       type = "gem";
     };
-    version = "1.6.2.1";
+    version = "1.7.0";
   };
   tzinfo = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1i3jh086w1kbdj3k5l60lc3nwbanmzdf8yjj3mlrx9b2gjjxhi9r";
+      sha256 = "0zwqqh6138s8b321fwvfbywxy00lw1azw4ql3zr0xh1aqxf8cnvj";
       type = "gem";
     };
-    version = "1.2.7";
+    version = "1.2.9";
   };
   tzinfo-data = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1kjywciambyhlkc8ijp3kkx4r24pi9zs7plmxw003mxr6mrhah1w";
+      sha256 = "0ik16lnsyr2739jzwl4r5sz8q639lqw8f9s68iszwhm2pcq8p4w2";
+      type = "gem";
+    };
+    version = "1.2021.1";
+  };
+  unf = {
+    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 = "0wc47r23h063l8ysws8sy24gzh74mks81cak3lkzlrw4qkqb3sg4";
       type = "gem";
     };
-    version = "1.2020.1";
+    version = "0.0.7.7";
+  };
+  unix-crypt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wflipsmmicmgvqilp9pml4x19b337kh6p6jgrzqrzpkq2z52gdq";
+      type = "gem";
+    };
+    version = "1.3.0";
   };
   warden = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0va966lhpylcwbqb9n151kkihx30agh0a57mwjwdxyanll4s1q12";
+      sha256 = "1l7gl7vms023w4clg02pm4ky9j12la2vzsixi2xrv9imbn44ys26";
       type = "gem";
     };
-    version = "1.2.7";
+    version = "1.2.9";
+  };
+  webrick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4cvgmxhfczxiq5fr534lmizkhigd15bsx5719r5ds7k7ivisc7";
+      type = "gem";
+    };
+    version = "1.7.0";
   };
   websocket-driver = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1bxamwqldmy98hxs5pqby3andws14hl36ch78g0s81gaz9b91nj2";
+      sha256 = "0a3bwxd9v3ghrxzjc4vxmf4xa18c6m4xqy5wb0yk5c6b9psc7052";
       type = "gem";
     };
-    version = "0.7.1";
+    version = "0.7.5";
   };
   websocket-extensions = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "00i624ng1nvkz1yckj3f8yxxp6hi7xaqf40qh9q3hj2n1l9i8g6m";
+      sha256 = "0hc2g9qps8lmhibl5baa91b4qx8wqw872rgwagml78ydj8qacsqw";
       type = "gem";
     };
-    version = "0.1.4";
+    version = "0.1.5";
   };
   windows_error = {
     groups = ["default"];
@@ -1266,19 +1486,29 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0c5cp1k4ij3xq1q6fb0f6xv5b65wy18y7bhwvsdx8wd0zyg3x96m";
+      sha256 = "019yzxddyndc7m7basars0m380m27sfcq99vr5hk1ag4ymayqkwr";
       type = "gem";
     };
-    version = "2.0.0";
+    version = "3.0.2";
   };
   xmlrpc = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1s744iwblw262gj357pky3d9fcx9hisvla7rnw29ysn5zsb6i683";
+      sha256 = "1xa79ry3976ylap38cr5g6q3m81plm611flqd3dwgnmgbkycb6jp";
+      type = "gem";
+    };
+    version = "0.3.2";
+  };
+  zeitwerk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1746czsjarixq0x05f7p3hpzi38ldg6wxnxxw74kbjzh1sdjgmpl";
       type = "gem";
     };
-    version = "0.3.0";
+    version = "2.4.2";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/security/metasploit/update.sh b/pkgs/tools/security/metasploit/update.sh
new file mode 100755
index 00000000000..e4da457c6f5
--- /dev/null
+++ b/pkgs/tools/security/metasploit/update.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl bundix git libiconv libpcap libxml2 libxslt pkg-config postgresql ruby.devEnv sqlite xmlstarlet nix-update
+
+set -eu -o pipefail
+cd "$(dirname "$(readlink -f "$0")")"
+
+latest=$(curl https://github.com/rapid7/metasploit-framework/releases.atom | xmlstarlet sel -N atom="http://www.w3.org/2005/Atom" -t -m /atom:feed/atom:entry -v atom:title -n | head -n1)
+echo "Updating metasploit to $latest"
+
+sed -i "s#refs/tags/.*#refs/tags/$latest\"#" Gemfile
+
+bundler install
+bundix
+sed -i '/[ ]*dependencies =/d' gemset.nix
+
+cd "../../../../"
+nix-update metasploit --version "$latest"
diff --git a/pkgs/tools/security/mfcuk/default.nix b/pkgs/tools/security/mfcuk/default.nix
index 59908f2a9ce..3128a787807 100644
--- a/pkgs/tools/security/mfcuk/default.nix
+++ b/pkgs/tools/security/mfcuk/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, libnfc }:
+{ lib, stdenv, fetchurl, pkg-config, libnfc }:
 
 stdenv.mkDerivation {
   pname = "mfcuk";
@@ -9,10 +9,10 @@ stdenv.mkDerivation {
     sha256 = "0m9sy61rsbw63xk05jrrmnyc3xda0c3m1s8pg3sf8ijbbdv9axcp";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libnfc ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "MiFare Classic Universal toolKit";
     license = licenses.gpl2;
     homepage = "https://github.com/nfc-tools/mfcuk";
diff --git a/pkgs/tools/security/mfoc/default.nix b/pkgs/tools/security/mfoc/default.nix
index fb622ad8249..ca1f4a5e4f2 100644
--- a/pkgs/tools/security/mfoc/default.nix
+++ b/pkgs/tools/security/mfoc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, pkgconfig, libnfc }:
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, pkg-config, libnfc }:
 
 stdenv.mkDerivation rec {
   pname = "mfoc";
@@ -22,10 +22,10 @@ stdenv.mkDerivation rec {
     })
   ];
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [ libnfc ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Mifare Classic Offline Cracker";
     license = licenses.gpl2;
     homepage = "https://github.com/nfc-tools/mfoc";
diff --git a/pkgs/tools/security/minica/default.nix b/pkgs/tools/security/minica/default.nix
new file mode 100644
index 00000000000..49f1e2beb4d
--- /dev/null
+++ b/pkgs/tools/security/minica/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "minica";
+  version = "1.0.2";
+
+  goPackagePath = "github.com/jsha/minica";
+
+  src = fetchFromGitHub {
+    owner = "jsha";
+    repo = "minica";
+    rev = "v${version}";
+    sha256 = "18518wp3dcjhf3mdkg5iwxqr3326n6jwcnqhyibphnb2a58ap7ny";
+  };
+
+  buildFlagsArray = ''
+    -ldflags=
+      -X main.BuildVersion=${version}
+  '';
+
+  meta = with lib; {
+    description = "A simple tool for generating self signed certificates";
+    longDescription = ''
+      Minica is a simple CA intended for use in situations where the CA
+      operator also operates each host where a certificate will be used. It
+      automatically generates both a key and a certificate when asked to
+      produce a certificate.
+    '';
+    homepage = "https://github.com/jsha/minica/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ m1cr0man ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/pkgs/tools/security/minio-certgen/default.nix b/pkgs/tools/security/minio-certgen/default.nix
new file mode 100644
index 00000000000..f87fffc4f95
--- /dev/null
+++ b/pkgs/tools/security/minio-certgen/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "minio-certgen";
+  version = "0.0.2";
+
+  src = fetchFromGitHub {
+    owner = "minio";
+    repo = "certgen";
+    rev = "v${version}";
+    sha256 = "sha256-HtzcoEUMt3LpQNyT0wGcmc4Q70QqHx7QpjrDh4YSO/Q=";
+  };
+
+  vendorSha256 = "sha256-pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo=";
+
+  meta = with lib; {
+    description = "A simple Minio tool to generate self-signed certificates, and provides SAN certificates with DNS and IP entries";
+    downloadPage = "https://github.com/minio/certgen";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ superherointj ];
+  };
+}
diff --git a/pkgs/tools/security/minisign/default.nix b/pkgs/tools/security/minisign/default.nix
index b67b65b0cf8..1fb1d6893a9 100644
--- a/pkgs/tools/security/minisign/default.nix
+++ b/pkgs/tools/security/minisign/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, pkg-config, libsodium }:
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, libsodium }:
 
 stdenv.mkDerivation rec {
   pname = "minisign";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ cmake pkg-config ];
   buildInputs = [ libsodium ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A simple tool for signing files and verifying signatures";
     longDescription = ''
       minisign uses public key cryptography to help facilitate secure (but not
diff --git a/pkgs/tools/security/mkpasswd/default.nix b/pkgs/tools/security/mkpasswd/default.nix
index b88852966ee..e001239f313 100644
--- a/pkgs/tools/security/mkpasswd/default.nix
+++ b/pkgs/tools/security/mkpasswd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, whois, perl }:
+{ lib, stdenv, whois, perl }:
 
 stdenv.mkDerivation {
   name = "mkpasswd-${whois.version}";
@@ -11,7 +11,7 @@ stdenv.mkDerivation {
   buildPhase = "make mkpasswd";
   installPhase = "make install-mkpasswd";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://packages.qa.debian.org/w/whois.html";
     description = "Overfeatured front-end to crypt, from the Debian whois package";
     license = licenses.gpl2;
diff --git a/pkgs/tools/security/mkrand/default.nix b/pkgs/tools/security/mkrand/default.nix
index 54934b7111a..59b48f1881d 100644
--- a/pkgs/tools/security/mkrand/default.nix
+++ b/pkgs/tools/security/mkrand/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation {
   name = "mkrand-0.1.0";
@@ -14,7 +14,7 @@ stdenv.mkDerivation {
     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;
+    license = lib.licenses.mit;
+    platforms = lib.platforms.all;
   };
   }
diff --git a/pkgs/tools/security/mktemp/default.nix b/pkgs/tools/security/mktemp/default.nix
index 0732adecc45..dc3f2a8904b 100644
--- a/pkgs/tools/security/mktemp/default.nix
+++ b/pkgs/tools/security/mktemp/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, groff }:
+{ lib, stdenv, fetchurl, groff }:
 
 stdenv.mkDerivation {
   name = "mktemp-1.7";
@@ -16,7 +16,7 @@ stdenv.mkDerivation {
     sha256 = "0x969152znxxjbj7387xb38waslr4yv6bnj5jmhb4rpqxphvk54f";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Simple tool to make temporary file handling in shells scripts safe and simple";
     homepage = "https://www.mktemp.org";
     license = licenses.isc;
diff --git a/pkgs/tools/security/modsecurity/default.nix b/pkgs/tools/security/modsecurity/default.nix
index b9b696c17be..1bbefd1342c 100644
--- a/pkgs/tools/security/modsecurity/default.nix
+++ b/pkgs/tools/security/modsecurity/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchurl, pkgconfig
+{ stdenv, lib, fetchurl, pkg-config
 , curl, apacheHttpd, pcre, apr, aprutil, libxml2
 , luaSupport ? false, lua5
 }:
@@ -6,7 +6,7 @@
 with lib;
 
 let luaValue = if luaSupport then lua5 else "no";
-    optional = stdenv.lib.optional;
+    optional = lib.optional;
 in
 
 stdenv.mkDerivation rec {
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     sha256 = "0611nskd2y6yagrciqafxdn4rxbdk2v4swf45kc1sgwx2sfh34j1";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [  curl apacheHttpd pcre apr aprutil libxml2 ] ++
     optional luaSupport lua5;
 
@@ -49,6 +49,6 @@ stdenv.mkDerivation rec {
     license = licenses.asl20;
     homepage = "https://www.modsecurity.org/";
     maintainers = with maintainers; [offline];
-    platforms   = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
+    platforms   = lib.platforms.linux ++ lib.platforms.darwin;
   };
 }
diff --git a/pkgs/tools/security/monkeysphere/default.nix b/pkgs/tools/security/monkeysphere/default.nix
index 4b1f7569887..bc267a9a770 100644
--- a/pkgs/tools/security/monkeysphere/default.nix
+++ b/pkgs/tools/security/monkeysphere/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, makeWrapper
+{ lib, stdenv, fetchurl, makeWrapper
 , perl, libassuan, libgcrypt
 , perlPackages, lockfileProgs, gnupg, coreutils
 # For the tests:
@@ -32,7 +32,7 @@ in stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ makeWrapper ];
   buildInputs = [ perl libassuan libgcrypt ]
-    ++ stdenv.lib.optional doCheck
+    ++ lib.optional doCheck
       ([ gnupg opensshUnsafe which socat cpio hexdump procps lockfileProgs ] ++
       (with perlPackages; [ CryptOpenSSLRSA CryptOpenSSLBignum ]));
 
@@ -45,7 +45,7 @@ in stdenv.mkDerivation rec {
   # but they aren't enabled by default because they "drain" entropy (GnuPG
   # still uses /dev/random).
   doCheck = false;
-  preCheck = stdenv.lib.optionalString doCheck ''
+  preCheck = lib.optionalString doCheck ''
     patchShebangs tests/
     patchShebangs src/
     sed -i \
@@ -64,12 +64,12 @@ in stdenv.mkDerivation rec {
               CryptOpenSSLRSA
               CryptOpenSSLBignum
             ])
-          + stdenv.lib.optionalString
+          + lib.optionalString
               (builtins.length runtimeDeps > 0)
-              " --prefix PATH : ${stdenv.lib.makeBinPath runtimeDeps}";
+              " --prefix PATH : ${lib.makeBinPath runtimeDeps}";
         wrapMonkeysphere = runtimeDeps: program:
           "wrapProgram $out/bin/${program} ${wrapperArgs runtimeDeps}\n";
-        wrapPrograms = runtimeDeps: programs: stdenv.lib.concatMapStrings
+        wrapPrograms = runtimeDeps: programs: lib.concatMapStrings
           (wrapMonkeysphere runtimeDeps)
           programs;
     in wrapPrograms [ gnupg ] [ "monkeysphere-authentication" "monkeysphere-host" ]
@@ -84,7 +84,7 @@ in stdenv.mkDerivation rec {
         done
       '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://web.monkeysphere.info/";
     description = "Leverage the OpenPGP web of trust for SSH and TLS authentication";
     longDescription = ''
diff --git a/pkgs/tools/security/monsoon/default.nix b/pkgs/tools/security/monsoon/default.nix
new file mode 100644
index 00000000000..3f414081500
--- /dev/null
+++ b/pkgs/tools/security/monsoon/default.nix
@@ -0,0 +1,32 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib, stdenv
+}:
+
+buildGoModule rec {
+  pname = "monsoon";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "RedTeamPentesting";
+    repo = "monsoon";
+    rev = "v${version}";
+    sha256 = "01c84s11m645mqaa2vdnbsj0kb842arqjhicgjv0ahb7qdw65zz4";
+  };
+
+  vendorSha256 = "1g84az07hv8w0jha2yl4f5jm0p9nkbawgw9l7cpmn8ckbfa54l7q";
+
+  # tests fails on darwin
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "Fast HTTP enumerator";
+    longDescription = ''
+      A fast HTTP enumerator that allows you to execute a large number of HTTP
+      requests, filter the responses and display them in real-time.
+    '';
+    homepage = "https://github.com/RedTeamPentesting/monsoon";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/mpw/default.nix b/pkgs/tools/security/mpw/default.nix
index 9d25daf29a6..3973ed51343 100644
--- a/pkgs/tools/security/mpw/default.nix
+++ b/pkgs/tools/security/mpw/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, cmake, fetchFromGitLab
+{ lib, stdenv, cmake, fetchFromGitLab
 , json_c, libsodium, libxml2, ncurses }:
 
 let
@@ -53,7 +53,7 @@ in stdenv.mkDerivation rec {
     runHook postCheck
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A stateless password management solution";
     homepage = "https://masterpasswordapp.com/";
     license = licenses.gpl3;
diff --git a/pkgs/tools/security/munge/default.nix b/pkgs/tools/security/munge/default.nix
index ee1858ad284..0462db8859c 100644
--- a/pkgs/tools/security/munge/default.nix
+++ b/pkgs/tools/security/munge/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, gawk, gnused, libgcrypt, zlib, bzip2 }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, gawk, gnused, libgcrypt, zlib, bzip2 }:
 
 stdenv.mkDerivation rec {
   name = "munge-0.5.14";
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     "--localstatedir=/var"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = ''
       An authentication service for creating and validating credentials
     '';
diff --git a/pkgs/tools/security/naabu/default.nix b/pkgs/tools/security/naabu/default.nix
new file mode 100644
index 00000000000..da59867e1b6
--- /dev/null
+++ b/pkgs/tools/security/naabu/default.nix
@@ -0,0 +1,38 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, libpcap
+}:
+
+buildGoModule rec {
+  pname = "naabu";
+  version = "2.0.4";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = "naabu";
+    rev = "v${version}";
+    sha256 = "sha256-t5Ij3UeH3z8obOH90cnmwcX9iC97sH7VIKvannSZ+MM=";
+  };
+
+  vendorSha256 = "sha256-veOIt3hELk3smrGlTyldtdaz5uI4U8/2SeD0UNykB8A=";
+
+  buildInputs = [ libpcap ];
+
+  preBuild = ''
+    mv v2/* .
+  '';
+
+  meta = with lib; {
+    description = "Fast SYN/CONNECT port scanner";
+    longDescription = ''
+      Naabu is a port scanning tool written in Go that allows you to enumerate
+      valid ports for hosts in a fast and reliable manner. It is a really simple
+      tool that does fast SYN/CONNECT scans on the host/list of hosts and lists
+      all ports that return a reply.
+    '';
+    homepage = "https://github.com/projectdiscovery/naabu";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/nasty/default.nix b/pkgs/tools/security/nasty/default.nix
index 7f423860100..b3b19c9268b 100644
--- a/pkgs/tools/security/nasty/default.nix
+++ b/pkgs/tools/security/nasty/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, gpgme }:
+{ lib, stdenv, fetchurl, gpgme }:
 
 stdenv.mkDerivation rec {
   pname = "nasty";
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
     cp nasty $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/security/nbtscanner/default.nix b/pkgs/tools/security/nbtscanner/default.nix
new file mode 100644
index 00000000000..6ad9fdd4770
--- /dev/null
+++ b/pkgs/tools/security/nbtscanner/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nbtscanner";
+  version = "0.0.1";
+
+  src = fetchFromGitHub {
+    owner = "jonkgrimes";
+    repo = pname;
+    rev = version;
+    sha256 = "06507a8y41v42cmvjpzimyrzdp972w15fjpc6c6750n1wa2wdl6c";
+  };
+
+  cargoSha256 = "0cis54zmr2x0f4z664lmhk9dzx00hvds6jh3x417308sz7ak11gd";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "NetBIOS scanner written in Rust";
+    homepage = "https://github.com/jonkgrimes/nbtscanner";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/ncrack/default.nix b/pkgs/tools/security/ncrack/default.nix
new file mode 100644
index 00000000000..e1504eb12b4
--- /dev/null
+++ b/pkgs/tools/security/ncrack/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub, openssl, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "ncrack";
+  version = "0.7";
+
+  src = fetchFromGitHub {
+    owner = "nmap";
+    repo = "ncrack";
+    rev = version;
+    sha256 = "1gnv5xdd7n04glcpy7q1mkb6f8gdhdrhlrh8z6k4g2pjdhxlz26g";
+  };
+
+  buildInputs = [ openssl zlib ];
+
+  meta = with lib; {
+    description = "Network authentication tool";
+    homepage = "https://nmap.org/ncrack/";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ siraben ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/security/neopg/default.nix b/pkgs/tools/security/neopg/default.nix
index 4f4f660e20f..e39be14475e 100644
--- a/pkgs/tools/security/neopg/default.nix
+++ b/pkgs/tools/security/neopg/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , cmake
 , sqlite
@@ -6,7 +6,7 @@
 , boost
 , curl
 , gettext
-, pkgconfig
+, pkg-config
 , libusb1
 , gnutls }:
 
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     fetchSubmodules = true;
   };
 
-  nativeBuildInputs = [  cmake gettext pkgconfig ];
+  nativeBuildInputs = [  cmake gettext pkg-config ];
 
   buildInputs = [ sqlite botan2 boost curl libusb1 gnutls ];
 
@@ -34,7 +34,7 @@ stdenv.mkDerivation rec {
     export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}$(pwd)/3rdparty/googletest/googletest:$(pwd)/neopg
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://neopg.io/";
     description = "Modern replacement for GnuPG 2";
     license = licenses.gpl3;
@@ -44,5 +44,6 @@ stdenv.mkDerivation rec {
     '';
     maintainers = with maintainers; [ erictapen ];
     platforms = platforms.linux;
+    broken = true; # fails to build with recent versions of botan. https://github.com/das-labor/neopg/issues/98
   };
 }
diff --git a/pkgs/tools/security/nitrokey-app/default.nix b/pkgs/tools/security/nitrokey-app/default.nix
index a4936d763b6..bc7731a0a7a 100644
--- a/pkgs/tools/security/nitrokey-app/default.nix
+++ b/pkgs/tools/security/nitrokey-app/default.nix
@@ -1,23 +1,18 @@
-{ stdenv, bash-completion, cmake, fetchFromGitHub, hidapi, libusb1, pkgconfig
+{ lib, stdenv, bash-completion, cmake, fetchFromGitHub, hidapi, libusb1, pkg-config
 , qtbase, qttranslations, qtsvg, wrapQtAppsHook }:
 
 stdenv.mkDerivation rec {
   pname = "nitrokey-app";
-  version = "1.3.2";
+  version = "1.4.2";
 
   src = fetchFromGitHub {
     owner = "Nitrokey";
     repo = "nitrokey-app";
     rev = "v${version}";
-    sha256 = "193kzlz3qn9il56h78faiqkgv749hdils1nn1iw6g3wphgx5fjs2";
+    sha256 = "1k0w921hfrya4q2r7bqn7kgmwvwb7c15k9ymlbnksmfc9yyjyfcv";
     fetchSubmodules = true;
   };
 
-  postPatch = ''
-    substituteInPlace libnitrokey/CMakeLists.txt \
-      --replace '/data/41-nitrokey.rules' '/libnitrokey/data/41-nitrokey.rules'
-  '';
-
   buildInputs = [
     bash-completion
     hidapi
@@ -28,12 +23,12 @@ stdenv.mkDerivation rec {
   ];
   nativeBuildInputs = [
     cmake
-    pkgconfig
+    pkg-config
     wrapQtAppsHook
   ];
   cmakeFlags = [ "-DCMAKE_BUILD_TYPE=Release" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/security/nitrokey-app/udev-rules.nix b/pkgs/tools/security/nitrokey-app/udev-rules.nix
index a89fa723826..11dcd63d776 100644
--- a/pkgs/tools/security/nitrokey-app/udev-rules.nix
+++ b/pkgs/tools/security/nitrokey-app/udev-rules.nix
@@ -1,18 +1,13 @@
-{ stdenv, nitrokey-app
-, group ? "nitrokey"
-}:
+{ lib, stdenv, nitrokey-app }:
+
 
 stdenv.mkDerivation {
-  name = "nitrokey-udev-rules-${stdenv.lib.getVersion nitrokey-app}";
+  name = "nitrokey-udev-rules-${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
diff --git a/pkgs/tools/security/nmap-unfree/default.nix b/pkgs/tools/security/nmap-unfree/default.nix
new file mode 100644
index 00000000000..1e6ed42bae4
--- /dev/null
+++ b/pkgs/tools/security/nmap-unfree/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchurl
+, libpcap
+, pkg-config
+, openssl
+, lua5_3
+, pcre
+, liblinear
+, libssh2
+, zlib
+, withLua ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nmap-unfree";
+  version = "7.91";
+
+  src = fetchurl {
+    url = "https://nmap.org/dist/nmap-${version}.tar.bz2";
+    sha256 = "001kb5xadqswyw966k2lqi6jr6zz605jpp9w4kmm272if184pk0q";
+  };
+
+  prePatch = lib.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")
+  ];
+
+  makeFlags = lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
+    "AR=${stdenv.cc.bintools.targetPrefix}ar"
+    "RANLIB=${stdenv.cc.bintools.targetPrefix}ranlib"
+    "CC=${stdenv.cc.targetPrefix}gcc"
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    pcre
+    liblinear
+    libssh2
+    libpcap
+    openssl
+    zlib
+  ];
+
+  enableParallelBuilding = true;
+
+  # Tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Open source utility for network discovery and security auditing";
+    homepage = "http://www.nmap.org";
+    # Nmap Public Source License Version 0.93
+    # https://github.com/nmap/nmap/blob/master/LICENSE
+    license = licenses.unfree;
+    maintainers = with maintainers; [ fab SuperSandro2000 ];
+  };
+}
diff --git a/pkgs/tools/security/nmap/default.nix b/pkgs/tools/security/nmap/default.nix
index bd543154494..531eb6eae4a 100644
--- a/pkgs/tools/security/nmap/default.nix
+++ b/pkgs/tools/security/nmap/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, libpcap, pkgconfig, openssl, lua5_3
+{ lib, stdenv, fetchurl, fetchpatch, libpcap, pkg-config, openssl, lua5_3
 , pcre, liblinear, libssh2
 , graphicalSupport ? false
 , libX11 ? null
@@ -8,7 +8,7 @@
 , withLua ? true
 }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   name = "nmap${optionalString graphicalSupport "-graphical"}-${version}";
@@ -52,7 +52,7 @@ stdenv.mkDerivation rec {
     pygtk pysqlite pygobject2 pycairo
   ];
 
-  nativeBuildInputs = [ pkgconfig ] ++ optionals graphicalSupport [ python2.pkgs.wrapPython ];
+  nativeBuildInputs = [ pkg-config ] ++ optionals graphicalSupport [ python2.pkgs.wrapPython ];
   buildInputs = [ pcre liblinear libssh2 libpcap openssl ] ++ optionals graphicalSupport (with python2.pkgs; [
     python2 libX11 gtk2
   ]);
diff --git a/pkgs/tools/security/nmap/qt.nix b/pkgs/tools/security/nmap/qt.nix
index 2dcd7fed0c4..b4e406a0035 100644
--- a/pkgs/tools/security/nmap/qt.nix
+++ b/pkgs/tools/security/nmap/qt.nix
@@ -1,24 +1,30 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig, wrapQtAppsHook
-, dnsutils, nmap
-, qtbase, qtscript, qtwebengine }:
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, wrapQtAppsHook
+, dnsutils
+, nmap
+, qtbase
+, qtscript
+, qtwebengine
+}:
 
 stdenv.mkDerivation rec {
   pname = "nmapsi4";
-  version = "0.4.80-20180430";
+  version = "0.5-alpha2";
 
   src = fetchFromGitHub {
     owner = "nmapsi4";
     repo = "nmapsi4";
-    rev = "d7f18e4c1e38dcf9c29cb4496fe14f9ff172861a";
-    sha256 = "10wqyrjzmad1g7lqa65rymbkna028xbp4xcpj442skw8gyrs3994";
+    rev = "v${version}";
+    sha256 = "sha256-q3XfwJ4TGK4E58haN0Q0xRH4GDpKD8VZzyxHe/VwBqY=";
   };
 
-  nativeBuildInputs = [ cmake pkgconfig wrapQtAppsHook ];
+  nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook ];
 
   buildInputs = [ qtbase qtscript qtwebengine ];
 
-  enableParallelBuilding = true;
-
   postPatch = ''
     substituteInPlace src/platform/digmanager.cpp \
       --replace '"dig"' '"${dnsutils}/bin/dig"'
@@ -45,9 +51,9 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Qt frontend for nmap";
-    license     = licenses.gpl2;
+    license = licenses.gpl2;
     maintainers = with maintainers; [ peterhoeg ];
     inherit (src.meta) homepage;
   };
diff --git a/pkgs/tools/security/nosqli/default.nix b/pkgs/tools/security/nosqli/default.nix
new file mode 100644
index 00000000000..3163d168371
--- /dev/null
+++ b/pkgs/tools/security/nosqli/default.nix
@@ -0,0 +1,25 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "nosqli";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "Charlie-belmer";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "006z76v4a3pxzgnkj5nl0mrlsqmfgvg51w20dl118k2xa70zz63j";
+  };
+
+  vendorSha256 = "01spdh2gbzp6yg2jbiwfnyhqb5s605hyfxhs0f9h4ps4qbi1h9cv";
+
+  meta = with lib; {
+    description = "NoSql Injection tool for finding vulnerable websites using MongoDB";
+    homepage = "https://github.com/Charlie-belmer/nosqli";
+    license = with licenses; [ agpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/notary/default.nix b/pkgs/tools/security/notary/default.nix
index 15797fc8665..ab6ec0b1681 100644
--- a/pkgs/tools/security/notary/default.nix
+++ b/pkgs/tools/security/notary/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, buildGoPackage, libtool }:
+{ lib, fetchFromGitHub, buildGoPackage, libtool }:
 
 buildGoPackage rec {
   pname = "notary";
@@ -35,8 +35,8 @@ buildGoPackage rec {
     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";
+  meta = with lib; {
+    description = "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
diff --git a/pkgs/tools/security/nsjail/001-fix-bison-link-error.patch b/pkgs/tools/security/nsjail/001-fix-bison-link-error.patch
new file mode 100644
index 00000000000..427cea5b02b
--- /dev/null
+++ b/pkgs/tools/security/nsjail/001-fix-bison-link-error.patch
@@ -0,0 +1,30 @@
+From 8e309a0af0851ab54ca7c6d51b6f3d19ee42c8ee Mon Sep 17 00:00:00 2001
+From: Evangelos Foutras <evangelos@foutrelis.com>
+Date: Wed, 17 Mar 2021 16:36:40 +0200
+Subject: [PATCH] Replace YYUSE call with void cast in src/parser.y
+
+The YYUSE macro was renamed to YY_USE in bison 3.7.5; we might as well
+avoid using it altogether and cast the unused variable to void instead.
+
+Fixes the following linker error:
+
+/usr/bin/ld: kafel/libkafel.a(libkafel.o): in function `kafel_yyerror':
+arm_syscalls.c:(.text+0x6984): undefined reference to `YYUSE'
+---
+ src/parser.y | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/parser.y b/src/parser.y
+index e0f109c..0e01373 100644
+--- a/kafel/src/parser.y
++++ b/kafel/src/parser.y
+@@ -420,8 +420,8 @@ const_def
+ 
+ void yyerror(YYLTYPE * loc, struct kafel_ctxt* ctxt, yyscan_t scanner,
+              const char *msg) {
++  (void)scanner; /* suppress unused-parameter warning */
+   if (!ctxt->lexical_error) {
+-    YYUSE(scanner);
+     if (loc->filename != NULL) {
+       append_error(ctxt, "%s:%d:%d: %s", loc->filename, loc->first_line, loc->first_column, msg);
+     } else {
diff --git a/pkgs/tools/security/nsjail/default.nix b/pkgs/tools/security/nsjail/default.nix
index 4522d0e897a..568113368a0 100644
--- a/pkgs/tools/security/nsjail/default.nix
+++ b/pkgs/tools/security/nsjail/default.nix
@@ -1,10 +1,10 @@
-{ stdenv, fetchFromGitHub, autoconf, bison, flex, libtool, pkgconfig, which
+{ lib, stdenv, fetchFromGitHub, autoconf, bison, flex, libtool, pkg-config, which
 , libnl, protobuf, protobufc, shadow
 }:
 
 stdenv.mkDerivation rec {
   pname = "nsjail";
-  version = "3.0";
+  version = "3.0"; # Bumping? Remove the bison patch.
 
   src = fetchFromGitHub {
     owner           = "google";
@@ -14,10 +14,15 @@ stdenv.mkDerivation rec {
     sha256          = "1w6x8xcrs0i1y3q41gyq8z3cq9x24qablklc4jiydf855lhqn4dh";
   };
 
-  nativeBuildInputs = [ autoconf bison flex libtool pkgconfig which ];
+  nativeBuildInputs = [ autoconf bison flex libtool pkg-config which ];
   buildInputs = [ libnl protobuf protobufc ];
   enableParallelBuilding = true;
 
+  patches = [
+    # To remove after bumping 3.0
+    ./001-fix-bison-link-error.patch
+  ];
+
   preBuild = ''
     makeFlagsArray+=(USER_DEFINES='-DNEWUIDMAP_PATH=${shadow}/bin/newuidmap -DNEWGIDMAP_PATH=${shadow}/bin/newgidmap')
   '';
@@ -28,7 +33,7 @@ stdenv.mkDerivation rec {
     install nsjail.1 $out/share/man/man1/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/security/ntlmrecon/default.nix b/pkgs/tools/security/ntlmrecon/default.nix
new file mode 100644
index 00000000000..d24d4ed4d68
--- /dev/null
+++ b/pkgs/tools/security/ntlmrecon/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ntlmrecon";
+  version = "0.4";
+  disabled = python3.pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "pwnfoo";
+    repo = "NTLMRecon";
+    rev = "v-${version}";
+    sha256 = "0rrx49li2l9xlcax84qxjf60nbzp3fgq77c36yqmsp0pc9i89ah6";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    colorama
+    iptools
+    requests
+    termcolor
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "ntlmrecon" ];
+
+  meta = with lib; {
+    description = "Information enumerator for NTLM authentication enabled web endpoints";
+    homepage = "https://github.com/pwnfoo/NTLMRecon";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/nuclei/default.nix b/pkgs/tools/security/nuclei/default.nix
new file mode 100644
index 00000000000..3f674bef7bc
--- /dev/null
+++ b/pkgs/tools/security/nuclei/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "nuclei";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-nmojx3xX5MZFfd1od2Aq3+dWmHCFgR7+q5C2FIUzq7A=";
+  };
+
+  vendorSha256 = "sha256-Ok2VUwtqhlp6NwLbQX9KAaGiZtzmfWG0LcqtBBDk22A=";
+
+  modRoot = "./v2";
+  subPackages = [
+    "cmd/nuclei/"
+  ];
+
+  # Test files are not part of the release tarball
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool for configurable targeted scanning";
+    longDescription = ''
+      Nuclei is used to send requests across targets based on a template
+      leading to zero false positives and providing effective scanning
+      for known paths. Main use cases for nuclei are during initial
+      reconnaissance phase to quickly check for low hanging fruits or
+      CVEs across targets that are known and easily detectable.
+    '';
+    homepage = "https://github.com/projectdiscovery/nuclei";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/nwipe/default.nix b/pkgs/tools/security/nwipe/default.nix
index c72ada86761..eb87e8cba86 100644
--- a/pkgs/tools/security/nwipe/default.nix
+++ b/pkgs/tools/security/nwipe/default.nix
@@ -1,22 +1,42 @@
-{ stdenv, fetchFromGitHub, ncurses, parted, automake, autoconf, pkgconfig }:
+{ lib
+, stdenv
+, autoreconfHook
+, fetchFromGitHub
+, ncurses
+, parted
+, pkg-config
+}:
 
 stdenv.mkDerivation rec {
-  version = "0.28";
   pname = "nwipe";
+  version = "0.31";
+
   src = fetchFromGitHub {
     owner = "martijnvanbrummelen";
     repo = "nwipe";
     rev = "v${version}";
-    sha256 = "1aw905lmn1vm6klqn3q7445dwmwbjhcmwnkygpq9rddacgig1gdx";
+    sha256 = "sha256-+xwQLjl0jhven6udfCprRKW8qWM6JMh5MOZ+ZdaJWQg=";
   };
-  nativeBuildInputs = [ automake autoconf pkgconfig ];
-  buildInputs = [ ncurses parted ];
-  preConfigure = "sh init.sh || :";
-  meta = with stdenv.lib; {
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    ncurses
+    parted
+  ];
+
+  preConfigure = ''
+    sh init.sh || :
+  '';
+
+  meta = with lib; {
     description = "Securely erase disks";
     homepage = "https://github.com/martijnvanbrummelen/nwipe";
-    license = licenses.gpl2;
-    maintainers = [ maintainers.woffs ];
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ woffs ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/security/oath-toolkit/default.nix b/pkgs/tools/security/oath-toolkit/default.nix
index 22327c6a38f..e542a2ae714 100644
--- a/pkgs/tools/security/oath-toolkit/default.nix
+++ b/pkgs/tools/security/oath-toolkit/default.nix
@@ -1,48 +1,30 @@
-{ stdenv, fetchFromGitLab, fetchpatch, pam, xmlsec, autoreconfHook, pkgconfig, libxml2, gtk-doc, perl, gengetopt, bison, help2man }:
+{ lib, stdenv, fetchurl, pam, xmlsec }:
 
 let
+  # TODO: Switch to OpenPAM once https://gitlab.com/oath-toolkit/oath-toolkit/-/issues/26 is addressed upstream
   securityDependency =
     if stdenv.isDarwin then xmlsec
     else pam;
 
-in stdenv.mkDerivation {
-  name = "oath-toolkit-2.6.2";
+in stdenv.mkDerivation rec {
+  pname = "oath-toolkit";
+  version = "2.6.7";
 
-  src = fetchFromGitLab {
-    owner = "oath-toolkit";
-    repo = "oath-toolkit";
-    rev = "0dffdec9c5af5c89a5af43add29d8275eefe7414";
-    sha256 = "0n2sl444723f1k0sjmc0mzdwslx51yxac39c2cx2bl3ykacgfv74";
+  src = fetchurl {
+    url = "mirror://savannah/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1aa620k05lsw3l3slkp2mzma40q3p9wginspn9zk8digiz7dzv9n";
   };
 
-  patches = [
-    # fix for glibc>=2.28
-    (fetchpatch {
-      name   = "new_glibc_check.patch";
-      url    = "https://sources.debian.org/data/main/o/oath-toolkit/2.6.1-1.3/debian/patches/new-glibc-check.patch";
-      sha256 = "0h75xyy3xsl485v7w27yqkks6z9sgsjmrv6wiswy15fdj5wyciv3";
-    })
-  ];
+  buildInputs = [ securityDependency ];
 
-  buildInputs = [ securityDependency libxml2 perl gengetopt bison ];
+  configureFlags = lib.optionals stdenv.isDarwin [ "--disable-pam" ];
 
-  nativeBuildInputs = [ autoreconfHook gtk-doc help2man pkgconfig ];
+  passthru.updateScript = ./update.sh;
 
-  # 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; {
+  meta = with lib; {
     description = "Components for building one-time password authentication systems";
     homepage = "https://www.nongnu.org/oath-toolkit/";
+    maintainers = with maintainers; [ schnusch ];
     platforms = with platforms; linux ++ darwin;
   };
 }
diff --git a/pkgs/tools/security/oath-toolkit/update.sh b/pkgs/tools/security/oath-toolkit/update.sh
new file mode 100755
index 00000000000..3502a541fa8
--- /dev/null
+++ b/pkgs/tools/security/oath-toolkit/update.sh
@@ -0,0 +1,50 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl git gnugrep nix
+
+set -euo pipefail
+
+nixfile='default.nix'
+release_url='https://download.savannah.nongnu.org/releases/oath-toolkit/'
+attr='oathToolkit'
+command='oathtool --version'
+
+color() {
+    printf '%s: \033[%sm%s\033[39m\n' "$0" "$1" "$2" >&2 || true
+}
+
+color 32 "downloading $release_url..."
+if ! release_page=$(curl -Lf "$release_url"); then
+    color 31 "cannot download release page"
+    exit 1
+fi
+
+tarball_name=$(printf '%s\n' "$release_page" \
+    | grep -Po '(?<=href=").*?\.tar\.gz(?=")' \
+    | sort -n | tail -n1)
+tarball_version="${tarball_name%.tar.*}"
+tarball_version="${tarball_version##*-}"
+tarball_url="mirror://savannah${release_url#https://*/releases}$tarball_name"
+
+color 32 "nix-prefetch-url $tarball_url..."
+if ! tarball_sha256=$(nix-prefetch-url --type sha256 "$tarball_url"); then
+    color 31 "cannot prefetch $tarball_url"
+    exit 1
+fi
+
+old_version=$(grep -Pom1 '(?<=version = ").*?(?=";)' "$nixfile")
+
+version=$(printf 'version = "%s";\n' "$tarball_version")
+sha256=$(printf 'sha256 = "%s";\n' "$tarball_sha256")
+sed -e "s,version = .*,$version," -e "s,sha256 = .*,$sha256," -i "$nixfile"
+
+if git diff --exit-code "$nixfile" > /dev/stderr; then
+    printf '\n' >&2 || true
+    color 32 "$tarball_version is up to date"
+else
+    color 32 "running '$command' with nix-shell..."
+    nix-shell -p "callPackage ./$nixfile {}" --run "$command"
+    msg="$attr: $old_version -> $tarball_version"
+    printf '\n' >&2 || true
+    color 31 "$msg"
+    git commit -m "$msg" "$nixfile"
+fi
diff --git a/pkgs/tools/security/omapd/default.nix b/pkgs/tools/security/omapd/default.nix
index 8ed23864ced..7ce377e601a 100644
--- a/pkgs/tools/security/omapd/default.nix
+++ b/pkgs/tools/security/omapd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, qt4, gdb, zlib }:
+{ lib, stdenv, fetchurl, qt4, gdb, zlib }:
 
 stdenv.mkDerivation rec {
   pname = "omapd";
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
     ln -s $out/usr/lib/omapd/plugins $out/bin/plugins
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/security/onesixtyone/default.nix b/pkgs/tools/security/onesixtyone/default.nix
index 4eed52b07f0..374d1322246 100644
--- a/pkgs/tools/security/onesixtyone/default.nix
+++ b/pkgs/tools/security/onesixtyone/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "onesixtyone";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
     install -D onesixtyone $out/bin/onesixtyone
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Fast SNMP Scanner";
     homepage = "https://github.com/trailofbits/onesixtyone";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/security/onioncircuits/default.nix b/pkgs/tools/security/onioncircuits/default.nix
index 0eb0f7b401e..f5d9185dc98 100644
--- a/pkgs/tools/security/onioncircuits/default.nix
+++ b/pkgs/tools/security/onioncircuits/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchgit, pythonPackages, intltool, gtk3, gobject-introspection, gnome3 }:
+{ lib, fetchgit, python3, intltool, gtk3, gobject-introspection, gnome }:
 
-pythonPackages.buildPythonApplication rec {
+python3.pkgs.buildPythonApplication rec {
   pname = "onioncircuits";
   version = "0.5";
 
@@ -12,15 +12,15 @@ pythonPackages.buildPythonApplication rec {
 
   nativeBuildInputs = [ intltool ];
   buildInputs = [ intltool gtk3 gobject-introspection ];
-  propagatedBuildInputs =  with pythonPackages; [ stem distutils_extra pygobject3 ];
+  propagatedBuildInputs =  with python3.pkgs; [ 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"
+      --prefix XDG_DATA_DIRS : "$out/share:${gnome.adwaita-icon-theme}/share"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://tails.boum.org";
     description = "GTK application to display Tor circuits and streams";
     license = licenses.gpl3;
diff --git a/pkgs/tools/security/onlykey-cli/default.nix b/pkgs/tools/security/onlykey-cli/default.nix
new file mode 100644
index 00000000000..b342f203b44
--- /dev/null
+++ b/pkgs/tools/security/onlykey-cli/default.nix
@@ -0,0 +1,24 @@
+{ lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "onlykey-cli";
+  version = "1.2.2";
+
+  src = python3Packages.fetchPypi {
+    inherit version;
+    pname = "onlykey";
+    sha256 = "1qkbgab5xlg7bd0jfzf8k5ppb1zhib76r050fiaqi5wibrqrfwdi";
+  };
+
+  # Requires having the physical onlykey (a usb security key)
+  doCheck = false;
+  propagatedBuildInputs =
+    with python3Packages; [ hidapi aenum six prompt_toolkit pynacl ecdsa cython ];
+
+  meta = with lib; {
+    description = "OnlyKey client and command-line tool";
+    homepage = "https://github.com/trustcrypto/python-onlykey";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ranfdev ];
+  };
+}
diff --git a/pkgs/tools/security/open-ecard/default.nix b/pkgs/tools/security/open-ecard/default.nix
index bac036e6790..00ff112ba84 100644
--- a/pkgs/tools/security/open-ecard/default.nix
+++ b/pkgs/tools/security/open-ecard/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, jre, pcsclite, makeDesktopItem, makeWrapper }:
+{ lib, stdenv, fetchurl, jre, pcsclite, makeDesktopItem, makeWrapper }:
 
 let
   version = "1.2.4";
@@ -23,9 +23,9 @@ in stdenv.mkDerivation rec {
 
   src = srcs.richclient;
 
-  phases = "installPhase";
+  dontUnpack = true;
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
   desktopItem = makeDesktopItem {
     name = appName;
@@ -50,10 +50,10 @@ in stdenv.mkDerivation rec {
     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
+      --suffix LD_LIBRARY_PATH ':' ${lib.getLib pcsclite}/lib
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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/";
diff --git a/pkgs/tools/security/opencryptoki/default.nix b/pkgs/tools/security/opencryptoki/default.nix
index 1eb4aab66b4..0825708f71f 100644
--- a/pkgs/tools/security/opencryptoki/default.nix
+++ b/pkgs/tools/security/opencryptoki/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, openssl, trousers, autoreconfHook, libtool, bison, flex }:
+{ lib, stdenv, fetchFromGitHub, openssl, trousers, autoreconfHook, libtool, bison, flex }:
 
 stdenv.mkDerivation rec {
   pname = "opencryptoki";
@@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "PKCS#11 implementation for Linux";
     homepage    = "https://github.com/opencryptoki/opencryptoki";
     license     = licenses.cpl10;
diff --git a/pkgs/tools/security/opensc/default.nix b/pkgs/tools/security/opensc/default.nix
index 103345abf61..51e0c1f58f9 100644
--- a/pkgs/tools/security/opensc/default.nix
+++ b/pkgs/tools/security/opensc/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, zlib, readline, openssl
-, libiconv, pcsclite, libassuan, libXt, fetchpatch
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, zlib, readline, openssl
+, libiconv, pcsclite, libassuan, libXt
 , docbook_xsl, libxslt, docbook_xml_dtd_412
 , Carbon, PCSC, buildPackages
 , withApplePCSC ? stdenv.isDarwin
@@ -7,21 +7,21 @@
 
 stdenv.mkDerivation rec {
   pname = "opensc";
-  version = "0.20.0";
+  version = "0.21.0";
 
   src = fetchFromGitHub {
     owner = "OpenSC";
     repo = "OpenSC";
     rev = version;
-    sha256 = "0mg8qmhww3li1isfgvn5hang1hq58zra057ilvgci88csfziv5lv";
+    sha256 = "sha256-OjOfA1pIu8NeN+hPuow5UVMKsg0PrsLojw5h05/Qm+o=";
   };
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
   buildInputs = [
     zlib readline openssl libassuan
     libXt libxslt libiconv docbook_xml_dtd_412
   ]
-  ++ stdenv.lib.optional stdenv.isDarwin Carbon
+  ++ lib.optional stdenv.isDarwin Carbon
   ++ (if withApplePCSC then [ PCSC ] else [ pcsclite ]);
 
   NIX_CFLAGS_COMPILE = "-Wno-error";
@@ -41,13 +41,13 @@ stdenv.mkDerivation rec {
       if withApplePCSC then
         "${PCSC}/Library/Frameworks/PCSC.framework/PCSC"
       else
-        "${stdenv.lib.getLib pcsclite}/lib/libpcsclite${stdenv.hostPlatform.extensions.sharedLibrary}"
+        "${lib.getLib pcsclite}/lib/libpcsclite${stdenv.hostPlatform.extensions.sharedLibrary}"
       }"
-    (stdenv.lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform)
+    (lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform)
       "XSLTPROC=${buildPackages.libxslt}/bin/xsltproc")
   ];
 
-  PCSC_CFLAGS = stdenv.lib.optionalString withApplePCSC
+  PCSC_CFLAGS = lib.optionalString withApplePCSC
     "-I${PCSC}/Library/Frameworks/PCSC.framework/Headers";
 
   installFlags = [
@@ -55,7 +55,7 @@ stdenv.mkDerivation rec {
     "completiondir=$(out)/etc"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Set of libraries and utilities to access smart cards";
     homepage = "https://github.com/OpenSC/OpenSC/wiki";
     license = licenses.lgpl21Plus;
diff --git a/pkgs/tools/security/ossec/default.nix b/pkgs/tools/security/ossec/default.nix
index 285e275a81f..b86cb57bbde 100644
--- a/pkgs/tools/security/ossec/default.nix
+++ b/pkgs/tools/security/ossec/default.nix
@@ -1,18 +1,16 @@
-{ stdenv, fetchurl, which }:
+{ lib, stdenv, fetchurl, which }:
 
-stdenv.mkDerivation {
-  name = "ossec-client-2.6";
+stdenv.mkDerivation rec {
+  pname = "ossec-client";
+  version = "2.6";
 
   src = fetchurl {
-    url = "https://www.ossec.net/files/ossec-hids-2.6.tar.gz";
-
+    url = "https://www.ossec.net/files/ossec-hids-${version}.tar.gz";
     sha256 = "0k1b59wdv9h50gbyy88qw3cnpdm8hv0nrl0znm92h9a11i5b39ip";
   };
 
   buildInputs = [ which ];
 
-  phases = [ "unpackPhase" "patchPhase" "buildPhase" ];
-
   patches = [ ./no-root.patch ];
 
   buildPhase = ''
@@ -30,11 +28,12 @@ yes
 "   | ./install.sh
   '';
 
-  meta = {
+  meta = with lib; {
     description = "Open source host-based instrusion detection system";
     homepage = "https://www.ossec.net";
-    license = stdenv.lib.licenses.gpl2;
-    platforms = stdenv.lib.platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
   };
 }
 
diff --git a/pkgs/tools/security/p0f/default.nix b/pkgs/tools/security/p0f/default.nix
index 02d888b725f..84221fbd566 100644
--- a/pkgs/tools/security/p0f/default.nix
+++ b/pkgs/tools/security/p0f/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libpcap, bash }:
+{ lib, stdenv, fetchurl, libpcap, bash }:
 
 stdenv.mkDerivation rec {
   pname = "p0f";
@@ -34,8 +34,8 @@ stdenv.mkDerivation rec {
   meta = {
     description = "Passive network reconnaissance and fingerprinting tool";
     homepage    = "https://lcamtuf.coredump.cx/p0f3/";
-    license     = stdenv.lib.licenses.lgpl21;
-    platforms   = stdenv.lib.platforms.linux;
-    maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
+    license     = lib.licenses.lgpl21;
+    platforms   = lib.platforms.linux;
+    maintainers = [ lib.maintainers.thoughtpolice ];
   };
 }
diff --git a/pkgs/tools/security/pamtester/default.nix b/pkgs/tools/security/pamtester/default.nix
index a1055dadc6c..1944e5187d2 100644
--- a/pkgs/tools/security/pamtester/default.nix
+++ b/pkgs/tools/security/pamtester/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pam }:
+{ lib, stdenv, fetchurl, pam }:
 
 stdenv.mkDerivation rec {
   name = "pamtester-0.1.2";
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ pam ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Utility program to test the PAM facility";
     homepage = "http://pamtester.sourceforge.net/";
     license = licenses.bsd3;
diff --git a/pkgs/tools/security/paperkey/default.nix b/pkgs/tools/security/paperkey/default.nix
index dc3582b7369..766b570a074 100644
--- a/pkgs/tools/security/paperkey/default.nix
+++ b/pkgs/tools/security/paperkey/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv }:
+{ fetchurl, lib, stdenv }:
 
 stdenv.mkDerivation rec {
   pname = "paperkey";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Store OpenPGP or GnuPG on paper";
     longDescription = ''
       A reasonable way to achieve a long term backup of OpenPGP (GnuPG, PGP, etc)
diff --git a/pkgs/tools/security/pass/clip-wayland-support.patch b/pkgs/tools/security/pass/clip-wayland-support.patch
deleted file mode 100644
index 7b8d2eb010d..00000000000
--- a/pkgs/tools/security/pass/clip-wayland-support.patch
+++ /dev/null
@@ -1,113 +0,0 @@
-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/pkgs/tools/security/pass/default.nix b/pkgs/tools/security/pass/default.nix
index 76b90d5b885..7468b5dcc8d 100644
--- a/pkgs/tools/security/pass/default.nix
+++ b/pkgs/tools/security/pass/default.nix
@@ -1,10 +1,11 @@
 { stdenv, lib, pkgs, fetchurl, buildEnv
-, coreutils, gnused, getopt, git, tree, gnupg, openssl, which, procps
-, qrencode , makeWrapper, pass, symlinkJoin
+, coreutils, findutils, gnugrep, gnused, getopt, git, tree, gnupg, openssl
+, which, procps , qrencode , makeWrapper, pass, symlinkJoin
 
 , xclip ? null, xdotool ? null, dmenu ? null
-, x11Support ? !stdenv.isDarwin
+, x11Support ? !stdenv.isDarwin , dmenuSupport ? (x11Support || waylandSupport)
 , waylandSupport ? false, wl-clipboard ? null
+, ydotool ? null, dmenu-wayland ? null
 
 # For backwards-compatibility
 , tombPluginSupport ? false
@@ -12,19 +13,23 @@
 
 with lib;
 
-assert x11Support -> xclip != null
-                  && xdotool != null
-                  && dmenu != null;
-
+assert x11Support -> xclip != null;
 assert waylandSupport -> wl-clipboard != null;
 
+assert dmenuSupport -> x11Support || waylandSupport;
+assert dmenuSupport && x11Support
+  -> dmenu != null && xdotool != null;
+assert dmenuSupport && waylandSupport
+  -> dmenu-wayland != null && ydotool != null;
+
+
 let
   passExtensions = import ./extensions { inherit pkgs; };
 
   env = extensions:
     let
       selected = [ pass ] ++ extensions passExtensions
-        ++ stdenv.lib.optional tombPluginSupport passExtensions.tomb;
+        ++ lib.optional tombPluginSupport passExtensions.tomb;
     in buildEnv {
       name = "pass-extensions-env";
       paths = selected;
@@ -32,11 +37,15 @@ let
 
       postBuild = ''
         files=$(find $out/bin/ -type f -exec readlink -f {} \;)
-        rm $out/bin
-        mkdir $out/bin
+        if [ -L $out/bin ]; then
+          rm $out/bin
+          mkdir $out/bin
+        fi
 
         for i in $files; do
-          ln -sf $i $out/bin/$(basename $i)
+          if ! [ "$(readlink -f "$out/bin/$(basename $i)")" = "$i" ]; then
+            ln -sf $i $out/bin/$(basename $i)
+          fi
         done
 
         wrapProgram $out/bin/pass \
@@ -46,21 +55,18 @@ let
 in
 
 stdenv.mkDerivation rec {
-  version = "1.7.3";
+  version = "1.7.4";
   pname = "password-store";
 
   src = fetchurl {
     url    = "https://git.zx2c4.com/password-store/snapshot/${pname}-${version}.tar.xz";
-    sha256 = "1x53k5dn3cdmvy8m4fqdld4hji5n676ksl0ql4armkmsds26av1b";
+    sha256 = "1h4k6w7g8pr169p5w9n6mkdhxl3pw51zphx7www6pvgjb7vgmafg";
   };
 
   patches = [
     ./set-correct-program-name-for-sleep.patch
     ./extension-dir.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;
+  ] ++ lib.optional stdenv.isDarwin ./no-darwin-getopt.patch;
 
   nativeBuildInputs = [ makeWrapper ];
 
@@ -68,18 +74,19 @@ stdenv.mkDerivation rec {
 
   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.
+    # dependencies (s.el) here. The user has to do this themselves.
     mkdir -p "$out/share/emacs/site-lisp"
     cp "contrib/emacs/password-store.el" "$out/share/emacs/site-lisp/"
-  '' + optionalString x11Support ''
+  '' + optionalString dmenuSupport ''
     cp "contrib/dmenu/passmenu" "$out/bin/"
   '';
 
-  wrapperPath = with stdenv.lib; makeBinPath ([
+  wrapperPath = with lib; makeBinPath ([
     coreutils
+    findutils
     getopt
     git
+    gnugrep
     gnupg
     gnused
     tree
@@ -87,8 +94,11 @@ stdenv.mkDerivation rec {
     qrencode
     procps
   ] ++ optional stdenv.isDarwin openssl
-    ++ ifEnable x11Support [ dmenu xclip xdotool ]
-    ++ optional waylandSupport wl-clipboard);
+    ++ optional x11Support xclip
+    ++ optional waylandSupport wl-clipboard
+    ++ optionals (waylandSupport && dmenuSupport) [ ydotool dmenu-wayland ]
+    ++ optionals (x11Support && dmenuSupport) [ xdotool dmenu ]
+  );
 
   postFixup = ''
     # Fix program name in --help
@@ -98,7 +108,7 @@ stdenv.mkDerivation rec {
     # Ensure all dependencies are in PATH
     wrapProgram $out/bin/pass \
       --prefix PATH : "${wrapperPath}"
-  '' + stdenv.lib.optionalString x11Support ''
+  '' + lib.optionalString dmenuSupport ''
     # 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 \
@@ -118,7 +128,7 @@ stdenv.mkDerivation rec {
            -e 's@^GPGS=.*''$@GPG=${gnupg}/bin/gpg2@' \
            -e '/which gpg/ d' \
       tests/setup.sh
-  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+  '' + 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
@@ -140,7 +150,7 @@ stdenv.mkDerivation rec {
     withExtensions = env;
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Stores, retrieves, generates, and synchronizes passwords securely";
     homepage    = "https://www.passwordstore.org/";
     license     = licenses.gpl2Plus;
diff --git a/pkgs/tools/security/pass/extensions/audit/default.nix b/pkgs/tools/security/pass/extensions/audit/default.nix
index 144d13238f2..415a4b9e79d 100644
--- a/pkgs/tools/security/pass/extensions/audit/default.nix
+++ b/pkgs/tools/security/pass/extensions/audit/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, pass, fetchFromGitHub, pythonPackages, makeWrapper, gnupg }:
+{ lib, stdenv, pass, fetchFromGitHub, pythonPackages, makeWrapper, gnupg }:
 
 let
   pythonEnv = pythonPackages.python.withPackages (p: [ p.requests p.setuptools p.zxcvbn ]);
@@ -30,7 +30,8 @@ in stdenv.mkDerivation rec {
   buildInputs = [ pythonEnv ];
   nativeBuildInputs = [ makeWrapper ];
 
-  doCheck = true;
+  # Tests freeze on darwin with: pass-audit-1.1 (checkPhase): EOFError
+  doCheck = !stdenv.isDarwin;
   checkInputs = [ pythonPackages.green pass gnupg ];
   checkPhase = ''
     ${pythonEnv}/bin/python3 setup.py green -q
@@ -42,7 +43,7 @@ in stdenv.mkDerivation rec {
       --prefix PYTHONPATH : "$out/lib/${pythonEnv.libPrefix}/site-packages"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Pass extension for auditing your password repository.";
     homepage = "https://github.com/roddhjav/pass-audit";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/security/pass/extensions/checkup.nix b/pkgs/tools/security/pass/extensions/checkup.nix
index 83a1d7a8872..5ae846d4a4b 100644
--- a/pkgs/tools/security/pass/extensions/checkup.nix
+++ b/pkgs/tools/security/pass/extensions/checkup.nix
@@ -1,18 +1,22 @@
-{ stdenv, fetchFromGitHub
-, curl, findutils, gnugrep, gnused }:
+{ lib, stdenv, fetchFromGitHub
+, curl, findutils, gnugrep, gnused, shellcheck }:
 
-stdenv.mkDerivation rec {
+let
   pname = "pass-checkup";
-  version = "0.2.0";
+  version = "0.2.1";
+in stdenv.mkDerivation {
+  inherit pname version;
 
   src = fetchFromGitHub {
     owner = "etu";
-    repo = "pass-checkup";
+    repo = pname;
     rev = version;
-    sha256 = "17fyf8zj535fg43yddjww1jhxfb3nbdkn622wjxaai2nf46jzh7y";
+    sha256 = "18b6rx59r7g0hvqs2affvw0g0jyifyzhanwgz2q2b8nhjgqgnar2";
   };
 
-  patchPhase = ''
+  nativeBuildInputs = [ shellcheck ];
+
+  postPatch = ''
     substituteInPlace checkup.bash \
       --replace curl ${curl}/bin/curl \
       --replace find ${findutils}/bin/find \
@@ -21,13 +25,17 @@ stdenv.mkDerivation rec {
   '';
 
   installPhase = ''
+    runHook preInstall
+
     install -D -m755 checkup.bash $out/lib/password-store/extensions/checkup.bash
+
+    runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    license = licenses.gpl3Plus;
     maintainers = with maintainers; [ etu ];
     platforms = platforms.unix;
   };
diff --git a/pkgs/tools/security/pass/extensions/default.nix b/pkgs/tools/security/pass/extensions/default.nix
index 1f41a692482..96c252156de 100644
--- a/pkgs/tools/security/pass/extensions/default.nix
+++ b/pkgs/tools/security/pass/extensions/default.nix
@@ -7,9 +7,7 @@ with pkgs;
     pythonPackages = python3Packages;
   };
   pass-checkup = callPackage ./checkup.nix {};
-  pass-import = callPackage ./import.nix {
-    pythonPackages = python3Packages;
-  };
+  pass-import = callPackage ./import.nix {};
   pass-otp = callPackage ./otp.nix {};
   pass-tomb = callPackage ./tomb.nix {};
   pass-update = callPackage ./update.nix {};
diff --git a/pkgs/tools/security/pass/extensions/genphrase.nix b/pkgs/tools/security/pass/extensions/genphrase.nix
index 48db0094db9..dff64d7f185 100644
--- a/pkgs/tools/security/pass/extensions/genphrase.nix
+++ b/pkgs/tools/security/pass/extensions/genphrase.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "pass-genphrase";
-  version = "0.2";
+  version = "0.3";
 
   src = fetchFromGitHub {
     owner = "congma";
     repo = "pass-genphrase";
     rev = version;
-    sha256 = "1sdkmz5s6wdx4vdlgqf5kmyrm17zwzy3n52s13qpx32bnnajap1h";
+    sha256 = "01dff2jlp111y7vlmp1wbgijzphhlzc19m02fs8nzmn5vxyffanx";
   };
 
   dontBuild = true;
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
       --replace '$EXTENSIONS' "$out/lib/password-store/extensions/"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Pass extension that generates memorable passwords";
     homepage = "https://github.com/congma/pass-genphrase";
     license = licenses.gpl3;
diff --git a/pkgs/tools/security/pass/extensions/import.nix b/pkgs/tools/security/pass/extensions/import.nix
index cc5f0c94e11..60775be180c 100644
--- a/pkgs/tools/security/pass/extensions/import.nix
+++ b/pkgs/tools/security/pass/extensions/import.nix
@@ -1,57 +1,60 @@
-{ stdenv, pass, fetchFromGitHub, pythonPackages, makeWrapper, fetchpatch }:
-
-let
-  pythonEnv = pythonPackages.python.withPackages (p: [
-    p.defusedxml
-    p.setuptools
-    p.pyaml
-  ]);
-
-in stdenv.mkDerivation rec {
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, python3Packages
+, gnupg
+, pass
+, makeWrapper
+}:
+
+python3Packages.buildPythonApplication rec {
   pname = "pass-import";
-  version = "2.6";
+  version = "3.2";
 
   src = fetchFromGitHub {
     owner = "roddhjav";
     repo = "pass-import";
     rev = "v${version}";
-    sha256 = "1q8rln4djh2z8j2ycm654df5y6anm5iv2r19spgy07c3fnisxlac";
+    sha256 = "0hrpg7yiv50xmbajfy0zdilsyhbj5iv0qnlrgkfv99q1dvd5qy56";
   };
 
-  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";
-    })
+  propagatedBuildInputs = with python3Packages; [
+    cryptography
+    defusedxml
+    pyaml
+    pykeepass
+    python_magic # similar API to "file-magic", but already in nixpkgs.
+    secretstorage
   ];
 
-  postPatch = ''
-    sed -i -e 's|$0|${pass}/bin/pass|' import.bash
-  '';
-
-  dontBuild = true;
+  checkInputs = [
+    gnupg
+    pass
+    python3Packages.pytestCheckHook
+  ];
 
-  installFlags = [
-    "PREFIX=$(out)"
-    "BASHCOMPDIR=$(out)/etc/bash_completion.d"
+  disabledTests = [
+    "test_import_gnome_keyring" # requires dbus, which pytest doesn't support
   ];
 
-  postFixup = ''
-    install -D pass_import.py $out/${pythonPackages.python.sitePackages}/pass_import.py
+  postInstall = ''
+    mkdir -p $out/lib/password-store/extensions
+    cp ${src}/import.bash $out/lib/password-store/extensions/import.bash
     wrapProgram $out/lib/password-store/extensions/import.bash \
-      --prefix PATH : "${pythonEnv}/bin" \
-      --prefix PYTHONPATH : "$out/${pythonPackages.python.sitePackages}" \
+      --prefix PATH : "${python3Packages.python.withPackages (_: propagatedBuildInputs)}/bin" \
+      --prefix PYTHONPATH : "$out/${python3Packages.python.sitePackages}" \
       --run "export PREFIX"
+    cp -r ${src}/share $out/
+  '';
+
+  postCheck = ''
+    $out/bin/pimport --list-exporters --list-importers
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Pass extension for importing data from existing password managers";
     homepage = "https://github.com/roddhjav/pass-import";
+    changelog = "https://github.com/roddhjav/pass-import/blob/v${version}/CHANGELOG.rst";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ lovek323 fpletz tadfisher ];
     platforms = platforms.unix;
diff --git a/pkgs/tools/security/pass/extensions/otp.nix b/pkgs/tools/security/pass/extensions/otp.nix
index 835e693c2c5..8d9b350543d 100644
--- a/pkgs/tools/security/pass/extensions/otp.nix
+++ b/pkgs/tools/security/pass/extensions/otp.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, oathToolkit }:
+{ lib, stdenv, fetchFromGitHub, oathToolkit }:
 
 stdenv.mkDerivation rec {
   pname = "pass-otp";
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
                    "BASHCOMPDIR=$(out)/share/bash-completion/completions"
                  ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A pass extension for managing one-time-password (OTP) tokens";
     homepage = "https://github.com/tadfisher/pass-otp";
     license = licenses.gpl3;
diff --git a/pkgs/tools/security/pass/extensions/tomb.nix b/pkgs/tools/security/pass/extensions/tomb.nix
index 43c74a9029b..74f8694f224 100644
--- a/pkgs/tools/security/pass/extensions/tomb.nix
+++ b/pkgs/tools/security/pass/extensions/tomb.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, tomb }:
+{ lib, stdenv, fetchFromGitHub, tomb }:
 
 stdenv.mkDerivation rec {
   pname = "pass-tomb";
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
       --replace 'TOMB="''${PASSWORD_STORE_TOMB:-tomb}"' 'TOMB="''${PASSWORD_STORE_TOMB:-${tomb}/bin/tomb}"'
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Pass extension that keeps the password store encrypted inside a tomb";
     homepage = "https://github.com/roddhjav/pass-tomb";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/security/pass/extensions/update.nix b/pkgs/tools/security/pass/extensions/update.nix
index b2f331f1375..50a4c49b90d 100644
--- a/pkgs/tools/security/pass/extensions/update.nix
+++ b/pkgs/tools/security/pass/extensions/update.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "pass-update";
@@ -13,14 +13,14 @@ stdenv.mkDerivation rec {
 
   postPatch = ''
     substituteInPlace Makefile \
-      --replace "BASHCOMPDIR ?= /etc/bash_completion.d" "BASHCOMPDIR ?= $out/etc/bash_completion.d"
+      --replace "BASHCOMPDIR ?= /etc/bash_completion.d" "BASHCOMPDIR ?= $out/share/bash-completion/completions"
   '';
 
   dontBuild = true;
 
   installFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Pass extension that provides an easy flow for updating passwords";
     homepage = "https://github.com/roddhjav/pass-update";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/security/pass/no-darwin-getopt.patch b/pkgs/tools/security/pass/no-darwin-getopt.patch
index e8f7e138ff0..7e8b66dd7f1 100644
--- a/pkgs/tools/security/pass/no-darwin-getopt.patch
+++ b/pkgs/tools/security/pass/no-darwin-getopt.patch
@@ -1,9 +1,11 @@
-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."
+diff --git a/src/platform/darwin.sh b/src/platform/darwin.sh
+index f6cc471..e2e8bba 100644
+--- a/src/platform/darwin.sh
++++ b/src/platform/darwin.sh
+@@ -39,6 +39,5 @@ qrcode() {
+ 	fi
  }
  
--GETOPT="$(brew --prefix gnu-getopt 2>/dev/null || { which port &>/dev/null && echo /opt/local; } || echo /usr/local)/bin/getopt"
+-GETOPT="$({ test -x /usr/local/opt/gnu-getopt/bin/getopt && echo /usr/local/opt/gnu-getopt; } || brew --prefix gnu-getopt 2>/dev/null || { which port &>/dev/null && echo /opt/local; } || echo /usr/local)/bin/getopt"
  SHRED="srm -f -z"
+ BASE64="openssl base64"
diff --git a/pkgs/tools/security/pass/rofi-pass.nix b/pkgs/tools/security/pass/rofi-pass.nix
index b3c08648862..3b5aedf81a8 100644
--- a/pkgs/tools/security/pass/rofi-pass.nix
+++ b/pkgs/tools/security/pass/rofi-pass.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pass, rofi, coreutils, utillinux, xdotool, gnugrep
+{ lib, stdenv, fetchFromGitHub, pass, rofi, coreutils, util-linux, xdotool, gnugrep
 , libnotify, pwgen, findutils, gawk, gnused, xclip, makeWrapper
 }:
 
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
     sha256 = "131jpcwyyzgzjn9lx4k1zn95pd68pjw4i41jfzcp9z9fnazyln5n";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
   dontBuild = true;
 
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
     cp -a config.example $out/share/doc/rofi-pass/config.example
   '';
 
-  wrapperPath = with stdenv.lib; makeBinPath [
+  wrapperPath = with lib; makeBinPath [
     coreutils
     findutils
     gawk
@@ -35,7 +35,7 @@ stdenv.mkDerivation rec {
     (pass.withExtensions (ext: [ ext.pass-otp ]))
     pwgen
     rofi
-    utillinux
+    util-linux
     xclip
     xdotool
   ];
@@ -50,7 +50,7 @@ stdenv.mkDerivation rec {
   meta = {
     description = "A script to make rofi work with password-store";
     homepage = "https://github.com/carnager/rofi-pass";
-    license = stdenv.lib.licenses.gpl3;
-    platforms = with stdenv.lib.platforms; linux;
+    license = lib.licenses.gpl3;
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/security/pass/set-correct-program-name-for-sleep.patch b/pkgs/tools/security/pass/set-correct-program-name-for-sleep.patch
index f3a844ad2d6..a71a279c1ef 100644
--- a/pkgs/tools/security/pass/set-correct-program-name-for-sleep.patch
+++ b/pkgs/tools/security/pass/set-correct-program-name-for-sleep.patch
@@ -5,29 +5,10 @@ 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
diff --git a/pkgs/tools/security/passff-host/default.nix b/pkgs/tools/security/passff-host/default.nix
index 0bdb04b7612..fb348800f5a 100644
--- a/pkgs/tools/security/passff-host/default.nix
+++ b/pkgs/tools/security/passff-host/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python3, pass }:
+{ lib, stdenv, fetchFromGitHub, python3, pass }:
 
 stdenv.mkDerivation rec {
   pname = "passff-host";
@@ -38,7 +38,7 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Host app for the WebExtension PassFF";
     homepage = "https://github.com/passff/passff-host";
     license = licenses.gpl2;
diff --git a/pkgs/tools/security/passphrase2pgp/default.nix b/pkgs/tools/security/passphrase2pgp/default.nix
new file mode 100644
index 00000000000..55e19b94813
--- /dev/null
+++ b/pkgs/tools/security/passphrase2pgp/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "passphrase2pgp";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "skeeto";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-VNOoYYnHsSgiSbVxlBwYUq0JsLa4BwZQSvMVSiyB6rg=";
+  };
+
+  vendorSha256 = "sha256-7q5nwkj4TP7VgHmV9YBbCB11yTPL7tK4gD+uN4Vw3Cs";
+
+  postInstall = ''
+    mkdir -p $out/share/doc/$name
+    cp README.md $out/share/doc/$name
+  '';
+
+  meta = with lib; {
+    description = "Predictable, passphrase-based PGP key generator";
+    homepage = "https://github.com/skeeto/passphrase2pgp";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ kaction ];
+  };
+}
diff --git a/pkgs/tools/security/pbis/default.nix b/pkgs/tools/security/pbis/default.nix
index 176ef7f7616..7561b1fae98 100644
--- a/pkgs/tools/security/pbis/default.nix
+++ b/pkgs/tools/security/pbis/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoconf, automake, libtool, perl, flex, bison, curl,
+{ lib, 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 {
@@ -33,9 +33,9 @@ stdenv.mkDerivation rec {
     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"
+    NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -isystem ${lib.getDev libxml2}/include/libxml2 -Wno-error=array-bounds -Wno-error=pointer-sign -Wno-error=deprecated-declarations -Wno-error=unused-variable"
   '';
-  configureScript = ''../configure'';
+  configureScript = "../configure";
   configureFlags = [
     "CFLAGS=-O"
     "--docdir=${placeholder "prefix"}/share/doc"
@@ -61,7 +61,7 @@ stdenv.mkDerivation rec {
   '';
   outputs = [ "out" "sys" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/security/pcsc-cyberjack/default.nix b/pkgs/tools/security/pcsc-cyberjack/default.nix
index 7ae062547aa..40736cdc86b 100644
--- a/pkgs/tools/security/pcsc-cyberjack/default.nix
+++ b/pkgs/tools/security/pcsc-cyberjack/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, autoreconfHook, pkgconfig, libusb1, pcsclite }:
+{ lib, stdenv, fetchurl, autoreconfHook, pkg-config, libusb1, pcsclite }:
 
 let
   version = "3.99.5";
@@ -17,12 +17,14 @@ in stdenv.mkDerivation rec {
 
   outputs = [ "out" "tools" ];
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
   buildInputs = [ libusb1 pcsclite ];
 
   enableParallelBuilding = true;
 
+  NIX_CFLAGS_COMPILE = "-Wno-error=narrowing";
+
   configureFlags = [
     "--with-usbdropdir=${placeholder "out"}/pcsc/drivers"
     "--bindir=${placeholder "tools"}/bin"
@@ -30,7 +32,7 @@ in stdenv.mkDerivation rec {
 
   postInstall = "make -C tools/cjflash install";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "REINER SCT cyberJack USB chipcard reader user space driver";
     homepage = "https://www.reiner-sct.com/";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/security/pcsc-safenet/default.nix b/pkgs/tools/security/pcsc-safenet/default.nix
new file mode 100644
index 00000000000..3610343fc27
--- /dev/null
+++ b/pkgs/tools/security/pcsc-safenet/default.nix
@@ -0,0 +1,96 @@
+{ stdenv
+, lib
+, fetchurl
+, autoPatchelfHook
+, dpkg
+, gtk2
+, openssl
+, pcsclite
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pcsc-safenet";
+  version = "10.0.37-0";
+
+  # https://aur.archlinux.org/packages/sac-core/
+  src = fetchurl {
+    url = "https://storage.spidlas.cz/public/soft/safenet/SafenetAuthenticationClient-core-${version}_amd64.deb";
+    sha256 = "1r9739bhal7ramj1rpawaqvik45xbs1c756l1da96din638gzy5l";
+  };
+
+  dontBuild = true;
+  dontConfigure = true;
+
+  unpackPhase = ''
+    dpkg-deb -x $src .
+  '';
+
+  buildInputs = [
+    gtk2
+    openssl
+    pcsclite
+  ];
+
+  runtimeDependencies = [
+    openssl
+  ];
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    dpkg
+  ];
+
+  installPhase = ''
+    # Set up for pcsc drivers
+    mkdir -p pcsc/drivers
+    mv usr/share/eToken/drivers/* pcsc/drivers/
+    rm -r usr/share/eToken/drivers
+
+    # Move binaries out
+    mv usr/bin bin
+
+    # Move UI to bin
+    mv usr/share/SAC/SACUIProcess bin/
+    rm -r usr/share/SAC
+
+    mkdir $out
+    cp -r {bin,etc,lib,pcsc,usr,var} $out/
+
+    cd "$out/lib/"
+    ln -sf libeToken.so.10.0.37 libeTPkcs11.so
+    ln -sf libeToken.so.10.0.37 libeToken.so.10.0
+    ln -sf libeToken.so.10.0.37 libeToken.so.10
+    ln -sf libeToken.so.10.0.37 libeToken.so
+    ln -sf libcardosTokenEngine.so.10.0.37 libcardosTokenEngine.so.10.0
+    ln -sf libcardosTokenEngine.so.10.0.37 libcardosTokenEngine.so.10
+    ln -sf libcardosTokenEngine.so.10.0.37 libcardosTokenEngine.so
+
+    cd $out/pcsc/drivers/aks-ifdh.bundle/Contents/Linux/
+    ln -sf libAksIfdh.so.10.0 libAksIfdh.so
+    ln -sf libAksIfdh.so.10.0 libAksIfdh.so.10
+
+    ln -sf ${openssl.out}/lib/libcrypto.so $out/lib/libcrypto.so.1.0.0
+  '';
+
+  dontAutoPatchelf = true;
+
+  # Patch DYN shared libraries (autoPatchElfHook only patches EXEC | INTERP).
+  postFixup = ''
+    autoPatchelf "$out"
+
+    runtime_rpath="${lib.makeLibraryPath runtimeDependencies}"
+
+    for mod in $(find "$out" -type f -name '*.so.*'); do
+      mod_rpath="$(patchelf --print-rpath "$mod")"
+      patchelf --set-rpath "$runtime_rpath:$mod_rpath" "$mod"
+    done;
+  '';
+
+  meta = with lib; {
+    homepage = "https://safenet.gemalto.com/multi-factor-authentication/security-applications/authentication-client-token-management";
+    description = "Safenet Authentication Client";
+    platforms = [ "x86_64-linux" ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ wldhx ];
+  };
+}
diff --git a/pkgs/tools/security/pcsc-scm-scl011/default.nix b/pkgs/tools/security/pcsc-scm-scl011/default.nix
index 62f4c3e8556..aa1580e2459 100644
--- a/pkgs/tools/security/pcsc-scm-scl011/default.nix
+++ b/pkgs/tools/security/pcsc-scm-scl011/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, unzip, libusb-compat-0_1 }:
+{ lib, stdenv, fetchurl, unzip, libusb-compat-0_1 }:
 
 let
   arch = if stdenv.hostPlatform.system == "i686-linux" then "32"
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
     sha256 = "0ik26sxgqgsqplksl87z61vwmx51k7plaqmrkdid7xidgfhfxr42";
   };
 
-  buildInputs = [ unzip ];
+  nativeBuildInputs = [ unzip ];
 
   unpackPhase = ''
     unzip $src
@@ -30,16 +30,16 @@ stdenv.mkDerivation rec {
     cp -r proprietary/*.bundle $out/pcsc/drivers
   '';
 
-  libPath = stdenv.lib.makeLibraryPath [ libusb-compat-0_1 ];
+  libPath = lib.makeLibraryPath [ libusb-compat-0_1 ];
 
   fixupPhase = ''
     patchelf --set-rpath $libPath \
       $out/pcsc/drivers/SCLGENERIC.bundle/Contents/Linux/libSCLGENERIC.so.${version};
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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";
+    homepage = "https://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 ];
diff --git a/pkgs/tools/security/pcsclite/default.nix b/pkgs/tools/security/pcsclite/default.nix
index 98a3e8797fb..71bd13c4a72 100644
--- a/pkgs/tools/security/pcsclite/default.nix
+++ b/pkgs/tools/security/pcsclite/default.nix
@@ -1,27 +1,46 @@
-{ stdenv, fetchurl, pkgconfig, udev, dbus, perl, python3
-, IOKit ? null }:
+{ stdenv
+, lib
+, fetchurl
+, autoreconfHook
+, pkg-config
+, perl
+, python3
+, dbus
+, polkit
+, systemd
+, IOKit
+}:
 
 stdenv.mkDerivation rec {
   pname = "pcsclite";
-  version = "1.9.0";
+  version = "1.9.1";
 
   outputs = [ "bin" "out" "dev" "doc" "man" ];
 
   src = fetchurl {
     url = "https://pcsclite.apdu.fr/files/pcsc-lite-${version}.tar.bz2";
-    sha256 = "1y9f9zipnrmgiw0mxrvcgky8vfrcmg6zh40gbln5a93i2c1x8j01";
+    sha256 = "sha256-c8R4m3h2qDOnD0k82iFlXf6FaJ2bfilwHCQyduVeaDo=";
   };
 
   patches = [ ./no-dropdir-literals.patch ];
 
+  postPatch = ''
+    sed -i configure.ac \
+      -e "s@polkit_policy_dir=.*@polkit_policy_dir=$bin/share/polkit-1/actions@"
+  '';
+
   configureFlags = [
+    "--enable-confdir=/etc"
     # The OS should care on preparing the drivers into this location
     "--enable-usbdropdir=/var/lib/pcsc/drivers"
-    "--enable-confdir=/etc"
-  ] ++ stdenv.lib.optional stdenv.isLinux
-         "--with-systemdsystemunitdir=\${out}/etc/systemd/system"
-    ++ stdenv.lib.optional (!stdenv.isLinux)
-         "--disable-libsystemd";
+  ]
+  ++ (if stdenv.isLinux then [
+    "--enable-ipcdir=/run/pcscd"
+    "--enable-polkit"
+    "--with-systemdsystemunitdir=${placeholder "bin"}/lib/systemd/system"
+  ] else [
+    "--disable-libsystemd"
+  ]);
 
   postConfigure = ''
     sed -i -re '/^#define *PCSCLITE_HP_DROPDIR */ {
@@ -34,11 +53,15 @@ stdenv.mkDerivation rec {
     moveToOutput bin/pcsc-spy "$dev"
   '';
 
-  nativeBuildInputs = [ pkgconfig perl ];
-  buildInputs = [ python3 ] ++ stdenv.lib.optionals stdenv.isLinux [ udev dbus ]
-             ++ stdenv.lib.optionals stdenv.isDarwin [ IOKit ];
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ autoreconfHook pkg-config perl ];
+
+  buildInputs = [ python3 ]
+    ++ lib.optionals stdenv.isLinux [ dbus polkit systemd ]
+    ++ lib.optionals stdenv.isDarwin [ IOKit ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Middleware to access a smart card using SCard API (PC/SC)";
     homepage = "https://pcsclite.apdu.fr/";
     license = licenses.bsd3;
diff --git a/pkgs/tools/security/pcsctools/default.nix b/pkgs/tools/security/pcsctools/default.nix
index b2ef4e7e030..51813526de1 100644
--- a/pkgs/tools/security/pcsctools/default.nix
+++ b/pkgs/tools/security/pcsctools/default.nix
@@ -1,20 +1,35 @@
-{ stdenv, lib, fetchurl, makeWrapper, pkgconfig, udev, dbus, pcsclite
-, wget, coreutils, perlPackages
+{ stdenv
+, lib
+, fetchurl
+, makeWrapper
+, pkg-config
+, systemd
+, dbus
+, pcsclite
+, wget
+, coreutils
+, perlPackages
 }:
 
-let deps = lib.makeBinPath [ wget coreutils ];
-
-in stdenv.mkDerivation rec {
-  name = "pcsc-tools-1.5.7";
+stdenv.mkDerivation rec {
+  pname = "pcsc-tools";
+  version = "1.5.7";
 
   src = fetchurl {
-    url = "http://ludovic.rousseau.free.fr/softwares/pcsc-tools/${name}.tar.bz2";
+    url = "http://ludovic.rousseau.free.fr/softwares/pcsc-tools/${pname}-${version}.tar.bz2";
     sha256 = "17b9jxvcxmn007lavan20l25v4jvm6dqc4x9dlqzbg6mjs28zsp0";
   };
 
-  buildInputs = [ udev dbus perlPackages.perl pcsclite ];
+  postPatch = ''
+    substituteInPlace ATR_analysis \
+      --replace /usr/local/pcsc /etc/pcsc \
+      --replace /usr/share/pcsc $out/share/pcsc
+  '';
+
+  buildInputs = [ dbus perlPackages.perl pcsclite ]
+    ++ lib.optional stdenv.isLinux systemd;
 
-  nativeBuildInputs = [ makeWrapper pkgconfig ];
+  nativeBuildInputs = [ makeWrapper pkg-config ];
 
   postInstall = ''
     wrapProgram $out/bin/scriptor \
@@ -24,14 +39,16 @@ in stdenv.mkDerivation rec {
     wrapProgram $out/bin/ATR_analysis \
       --set PERL5LIB "${with perlPackages; makePerlPath [ pcscperl ]}"
     wrapProgram $out/bin/pcsc_scan \
-      --set PATH "$out/bin:${deps}"
+      --prefix PATH : "$out/bin:${lib.makeBinPath [ coreutils wget ]}"
+
+    install -Dm444 -t $out/share/pcsc smartcard_list.txt
   '';
 
   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; [ ];
+    maintainers = with maintainers; [ peterhoeg ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/security/pdfcrack/default.nix b/pkgs/tools/security/pdfcrack/default.nix
index afef0d4c472..451cdd5591b 100644
--- a/pkgs/tools/security/pdfcrack/default.nix
+++ b/pkgs/tools/security/pdfcrack/default.nix
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
     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;
+    platforms = platforms.all;
     maintainers = with maintainers; [ qoelet ];
   };
 }
diff --git a/pkgs/tools/security/pgpdump/default.nix b/pkgs/tools/security/pgpdump/default.nix
index cd421224fa6..c0f496438a4 100644
--- a/pkgs/tools/security/pgpdump/default.nix
+++ b/pkgs/tools/security/pgpdump/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub
+{ lib, stdenv, fetchFromGitHub
 , supportCompressedPackets ? true, zlib, bzip2
 }:
 
@@ -13,9 +13,9 @@ stdenv.mkDerivation rec {
     sha256 = "0pi9qdbmcmi58gmljin51ylbi3zkknl8fm26jm67cpl55hvfsn23";
   };
 
-  buildInputs = stdenv.lib.optionals supportCompressedPackets [ zlib bzip2 ];
+  buildInputs = lib.optionals supportCompressedPackets [ zlib bzip2 ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A PGP packet visualizer";
     longDescription = ''
       pgpdump is a PGP packet visualizer which displays the packet format of
diff --git a/pkgs/tools/security/phrasendrescher/default.nix b/pkgs/tools/security/phrasendrescher/default.nix
index 71a9824bb62..7e8c87f6e82 100644
--- a/pkgs/tools/security/phrasendrescher/default.nix
+++ b/pkgs/tools/security/phrasendrescher/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, openssl, libssh2, gpgme }:
+{ lib, stdenv, fetchurl, openssl, libssh2, gpgme }:
 
 stdenv.mkDerivation rec {
   pname = "phrasendrescher";
@@ -18,9 +18,9 @@ stdenv.mkDerivation rec {
 
   configureFlags = [ "--with-plugins" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A modular and multi processing pass phrase cracking tool";
-    homepage = "http://leidecker.info/projects/phrasendrescher/index.shtml";
+    homepage = "https://leidecker.info/projects/phrasendrescher/index.shtml";
     license = licenses.gpl2Plus;
     platforms = platforms.all;
     maintainers = with maintainers; [ bjornfor ];
diff --git a/pkgs/tools/security/pinentry/default.nix b/pkgs/tools/security/pinentry/default.nix
index e6d07888d1d..909bbbaed16 100644
--- a/pkgs/tools/security/pinentry/default.nix
+++ b/pkgs/tools/security/pinentry/default.nix
@@ -1,11 +1,11 @@
-{ fetchurl, mkDerivation, fetchpatch, stdenv, lib, pkgconfig, autoreconfHook, wrapGAppsHook
+{ fetchurl, mkDerivation, fetchpatch, stdenv, lib, pkg-config, autoreconfHook, wrapGAppsHook
 , libgpgerror, libassuan, qtbase, wrapQtAppsHook
 , ncurses, gtk2, gcr
 , libcap ? null, libsecret ? null
-, enabledFlavors ? [ "curses" "tty" "gtk2" "qt" "gnome3" "emacs" ]
+, enabledFlavors ? [ "curses" "tty" "gtk2" "qt" "emacs" ] ++ lib.optionals stdenv.isLinux [ "gnome3" ]
 }:
 
-with stdenv.lib;
+with lib;
 
 assert isList enabledFlavors && enabledFlavors != [];
 
@@ -48,7 +48,7 @@ pinentryMkDerivation rec {
     sha256 = "0w35ypl960pczg5kp6km3dyr000m1hf0vpwwlh72jjkjza36c1v8";
   };
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook ]
+  nativeBuildInputs = [ pkg-config autoreconfHook ]
     ++ concatMap(f: flavorInfo.${f}.nativeBuildInputs or []) enabledFlavors;
   buildInputs = [ libgpgerror libassuan libcap libsecret ]
     ++ concatMap(f: flavorInfo.${f}.buildInputs or []) enabledFlavors;
@@ -89,7 +89,7 @@ pinentryMkDerivation rec {
 
   passthru = { flavors = enabledFlavors; };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://gnupg.org/aegypten2/";
     description = "GnuPG’s interface to passphrase input";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/security/pinentry/mac.nix b/pkgs/tools/security/pinentry/mac.nix
index 1c3b87cd9f0..27917ffbbf1 100644
--- a/pkgs/tools/security/pinentry/mac.nix
+++ b/pkgs/tools/security/pinentry/mac.nix
@@ -1,7 +1,8 @@
-{ stdenv, fetchFromGitHub, xcbuildHook, libiconv, ncurses, Cocoa }:
+{ lib, stdenv, fetchFromGitHub, xcbuildHook, libiconv, ncurses, Cocoa }:
 
 stdenv.mkDerivation {
-  name = "pinentry-mac-0.9.4";
+  pname = "pinentry-mac";
+  version = "0.9.4";
 
   src = fetchFromGitHub {
     owner = "matthewbauer";
@@ -13,6 +14,12 @@ stdenv.mkDerivation {
   nativeBuildInputs = [ xcbuildHook ];
   buildInputs = [ libiconv ncurses Cocoa ];
 
+  preBuild = ''
+    # Only build for what we care about (also allows arm64)
+    substituteInPlace pinentry-mac.xcodeproj/project.pbxproj \
+      --replace "i386 x86_64 ppc" "${stdenv.targetPlatform.darwinArch}"
+  '';
+
   installPhase = ''
     mkdir -p $out/Applications
     mv Products/Release/pinentry-mac.app $out/Applications
@@ -24,8 +31,8 @@ stdenv.mkDerivation {
 
   meta = {
     description = "Pinentry for GPG on Mac";
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
     homepage = "https://github.com/GPGTools/pinentry-mac";
-    platforms = stdenv.lib.platforms.darwin;
+    platforms = lib.platforms.darwin;
   };
 }
diff --git a/pkgs/tools/security/pius/default.nix b/pkgs/tools/security/pius/default.nix
index f1b4d80a355..3612caa196c 100644
--- a/pkgs/tools/security/pius/default.nix
+++ b/pkgs/tools/security/pius/default.nix
@@ -1,4 +1,4 @@
-{ fetchFromGitHub, stdenv, python3Packages, gnupg, perl }:
+{ fetchFromGitHub, lib, python3Packages, gnupg, perl }:
 
 let version = "3.0.0"; in
 python3Packages.buildPythonApplication {
@@ -33,9 +33,9 @@ python3Packages.buildPythonApplication {
          to the process.
       '';
 
-    license = stdenv.lib.licenses.gpl2;
+    license = lib.licenses.gpl2;
 
-    platforms = stdenv.lib.platforms.gnu ++ stdenv.lib.platforms.linux;
-    maintainers = with stdenv.lib.maintainers; [ kierdavis ];
+    platforms = lib.platforms.gnu ++ lib.platforms.linux;
+    maintainers = with lib.maintainers; [ kierdavis ];
   };
 }
diff --git a/pkgs/tools/security/plasma-pass/default.nix b/pkgs/tools/security/plasma-pass/default.nix
new file mode 100644
index 00000000000..20f64b725f1
--- /dev/null
+++ b/pkgs/tools/security/plasma-pass/default.nix
@@ -0,0 +1,41 @@
+{ mkDerivation, lib, fetchFromGitLab, cmake, extra-cmake-modules
+, ki18n
+, kitemmodels
+, oathToolkit
+, qgpgme
+, plasma-framework
+, qt5 }:
+
+mkDerivation rec {
+  pname = "plasma-pass";
+  version = "1.2.0";
+
+  src = fetchFromGitLab {
+    domain = "invent.kde.org";
+    owner = "plasma";
+    repo = "plasma-pass";
+    rev = "v${version}";
+    sha256 = "1w2mzxyrh17x7da62b6sg1n85vnh1q77wlrfxwfb1pk77y59rlf1";
+  };
+
+  buildInputs  = [
+    ki18n
+    kitemmodels
+    oathToolkit
+    qgpgme
+    plasma-framework
+    qt5.qtbase
+    qt5.qtdeclarative
+  ];
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+
+  meta = with lib; {
+    description = "A Plasma applet to access passwords from pass, the standard UNIX password manager";
+    homepage = "https://invent.kde.org/plasma/plasma-pass";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ matthiasbeyer ];
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/pkgs/tools/security/polkit-gnome/default.nix b/pkgs/tools/security/polkit-gnome/default.nix
index 55991169968..c4c9e9929d5 100644
--- a/pkgs/tools/security/polkit-gnome/default.nix
+++ b/pkgs/tools/security/polkit-gnome/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, polkit, gtk3, pkgconfig, intltool }:
+{ lib, stdenv, fetchurl, polkit, gtk3, pkg-config, intltool }:
 stdenv.mkDerivation rec {
   pname = "polkit-gnome";
   version = "0.105";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ polkit gtk3 ];
-  nativeBuildInputs = [ pkgconfig intltool ];
+  nativeBuildInputs = [ pkg-config intltool ];
 
   configureFlags = [ "--disable-introspection" ];
 
@@ -22,8 +22,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.lgpl2Plus;
+    maintainers = with lib.maintainers; [ phreedom ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/security/proxmark3/default.nix b/pkgs/tools/security/proxmark3/default.nix
index 304ba041b46..b52e7279fa9 100644
--- a/pkgs/tools/security/proxmark3/default.nix
+++ b/pkgs/tools/security/proxmark3/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pkgconfig, ncurses, readline, pcsclite, qt5
+{ lib, stdenv, fetchFromGitHub, pkg-config, ncurses, readline, pcsclite, qt5
 , gcc-arm-embedded }:
 
 let
@@ -12,9 +12,11 @@ let
         inherit rev sha256;
       };
 
-      nativeBuildInputs = [ pkgconfig gcc-arm-embedded ];
+      nativeBuildInputs = [ pkg-config gcc-arm-embedded ];
       buildInputs = [ ncurses readline pcsclite qt5.qtbase ];
 
+      dontWrapQtApps = true;
+
       postPatch = ''
         substituteInPlace client/Makefile --replace '-ltermcap' ' '
         substituteInPlace liblua/Makefile --replace '-ltermcap' ' '
@@ -33,7 +35,7 @@ let
         install -Dt $out/firmware bootrom/obj/bootrom.elf armsrc/obj/fullimage.elf
       '';
 
-      meta = with stdenv.lib; {
+      meta = with lib; {
         description = "Client for proxmark3, powerful general purpose RFID tool";
         homepage = "http://www.proxmark.org";
         license = licenses.gpl2Plus;
diff --git a/pkgs/tools/security/proxmark3/proxmark3-rrg.nix b/pkgs/tools/security/proxmark3/proxmark3-rrg.nix
new file mode 100644
index 00000000000..2ae34439472
--- /dev/null
+++ b/pkgs/tools/security/proxmark3/proxmark3-rrg.nix
@@ -0,0 +1,38 @@
+{ lib, mkDerivation, fetchFromGitHub, pkg-config, gcc-arm-embedded, bluez5
+, readline
+
+, hardwarePlatform ? "PM3RDV4"
+
+, hardwarePlatformExtras ? "" }:
+
+mkDerivation rec {
+  pname = "proxmark3-rrg";
+  version = "4.9237";
+
+  src = fetchFromGitHub {
+    owner = "RfidResearchGroup";
+    repo = "proxmark3";
+    rev = "v${version}";
+    sha256 = "13xrhvrsm73rfgqpgca6a37c3jixdkxvfggmacnnx5fdfb393bfx";
+  };
+
+  nativeBuildInputs = [ pkg-config gcc-arm-embedded ];
+  buildInputs = [ bluez5 readline ];
+
+  makeFlags = [
+    "PLATFORM=${hardwarePlatform}"
+    "PLATFORM_EXTRAS=${hardwarePlatformExtras}"
+  ];
+
+  installPhase = ''
+    install -Dt $out/bin client/proxmark3
+    install -Dt $out/firmware bootrom/obj/bootrom.elf armsrc/obj/fullimage.elf
+  '';
+
+  meta = with lib; {
+    description = "Client for proxmark3, powerful general purpose RFID tool";
+    homepage = "https://rfidresearchgroup.com/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ nyanotech ];
+  };
+}
diff --git a/pkgs/tools/security/prs/default.nix b/pkgs/tools/security/prs/default.nix
new file mode 100644
index 00000000000..6d97958ec78
--- /dev/null
+++ b/pkgs/tools/security/prs/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, rustPlatform
+, fetchFromGitLab
+, installShellFiles
+, pkg-config
+, python3
+, dbus
+, glib
+, gpgme
+, gtk3
+, libxcb
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "prs";
+  version = "0.2.11";
+
+  src = fetchFromGitLab {
+    owner = "timvisee";
+    repo = "prs";
+    rev = "v${version}";
+    sha256 = "sha256-jBHe3ZeB+GS+Ds8c6ySwoyyJfqoCWKSgIObg+z1TNmU=";
+  };
+
+  cargoSha256 = "sha256-dhQuzzML817cDIsYuZElHZfq55AdZ20xeXTNm1nJPqk=";
+
+  postPatch = ''
+    # The GPGME backend is recommended
+    for f in "gtk3/Cargo.toml" "cli/Cargo.toml"; do
+      substituteInPlace "$f" --replace \
+        'default = ["backend-gnupg-bin"' 'default = ["backend-gpgme"'
+    done
+  '';
+
+  nativeBuildInputs = [ gpgme installShellFiles pkg-config python3 ];
+
+  buildInputs = [ dbus glib gpgme gtk3 libxcb ];
+
+  postInstall = ''
+    for shell in bash fish zsh; do
+      installShellCompletion --cmd prs --$shell <($out/bin/prs internal completions $shell --stdout)
+    done
+  '';
+
+  meta = with lib; {
+    description = "Secure, fast & convenient password manager CLI using GPG and git to sync";
+    homepage = "https://gitlab.com/timvisee/prs";
+    changelog = "https://gitlab.com/timvisee/prs/-/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [
+      lgpl3Only # lib
+      gpl3Only  # everything else
+    ];
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/pkgs/tools/security/pwdsafety/default.nix b/pkgs/tools/security/pwdsafety/default.nix
new file mode 100644
index 00000000000..2a6ed328e49
--- /dev/null
+++ b/pkgs/tools/security/pwdsafety/default.nix
@@ -0,0 +1,25 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "pwdsafety";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "edoardottt";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1qnkabgc2924qg9x1ij51jq7lnxzcj1ygdp3x4mzi9gl532i191w";
+  };
+
+  vendorSha256 = "0avm4zwwqv476yrraaf5xkc1lac0mwnmzav5wckifws6r4x3xrsb";
+
+  meta = with lib; {
+    description = "Command line tool checking password safety";
+    homepage = "https://github.com/edoardottt/pwdsafety";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/pwgen/default.nix b/pkgs/tools/security/pwgen/default.nix
index a63e40b744e..c84b9472e96 100644
--- a/pkgs/tools/security/pwgen/default.nix
+++ b/pkgs/tools/security/pwgen/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, autoreconfHook}:
+{lib, stdenv, fetchurl, autoreconfHook}:
 stdenv.mkDerivation {
   name = "pwgen-2.08";
 
@@ -11,6 +11,6 @@ stdenv.mkDerivation {
 
   meta = {
     description = "Password generator which creates passwords which can be easily memorized by a human";
-    platforms = stdenv.lib.platforms.all;
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/security/pwncat/default.nix b/pkgs/tools/security/pwncat/default.nix
new file mode 100644
index 00000000000..67cfac9085f
--- /dev/null
+++ b/pkgs/tools/security/pwncat/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+}:
+
+buildPythonApplication rec {
+  pname = "pwncat";
+  version = "0.1.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "62e625e9061f037cfca7b7455a4f7db4213c1d1302e73d4c475c63f924f1805f";
+  };
+
+  # Tests requires to start containers
+  doCheck = false;
+
+  meta = with lib; {
+    description = "TCP/UDP communication suite";
+    homepage = "https://pwncat.org/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/pyrit/default.nix b/pkgs/tools/security/pyrit/default.nix
index 93ae86416e1..dc1d0b97f87 100644
--- a/pkgs/tools/security/pyrit/default.nix
+++ b/pkgs/tools/security/pyrit/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchFromGitHub, python2Packages, openssl, zlib, libpcap, opencl-headers, ocl-icd }:
+{ lib, fetchFromGitHub, python2Packages, openssl, zlib, libpcap, opencl-headers, ocl-icd }:
 
 let
   version = "2019-12-13";
@@ -32,7 +32,7 @@ python2Packages.buildPythonApplication rec {
   buildInputs = [ openssl zlib libpcap ];
   propagatedBuildInputs = [ cpyrit_opencl ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/JPaulMora/Pyrit";
     description = "GPGPU-driven WPA/WPA2-PSK key cracker";
     license = licenses.gpl3;
diff --git a/pkgs/tools/security/qdigidoc/default.nix b/pkgs/tools/security/qdigidoc/default.nix
index fcbc166689e..86dc3dfff33 100644
--- a/pkgs/tools/security/qdigidoc/default.nix
+++ b/pkgs/tools/security/qdigidoc/default.nix
@@ -1,23 +1,26 @@
-{ stdenv, mkDerivation, fetchgit, fetchurl, cmake, darkhttpd, gettext, makeWrapper, pkgconfig
+{ lib, mkDerivation, fetchgit, fetchurl, cmake, darkhttpd, gettext, makeWrapper, pkg-config
 , libdigidocpp, opensc, openldap, openssl, pcsclite, qtbase, qttranslations, qtsvg }:
 
 mkDerivation rec {
   pname = "qdigidoc";
-  version = "4.2.3";
+  version = "4.2.8";
 
   src = fetchgit {
     url = "https://github.com/open-eid/DigiDoc4-Client";
     rev = "v${version}";
-    sha256 = "1hj49vvg8vrayr9kpz73fafa7k298hmiamkyd8c3ipy6s51xh6q4";
+    sha256 = "02k2s6l79ssvrksa0midm7bq856llrmq0n40yxwm3j011nvc8vsm";
     fetchSubmodules = true;
   };
 
   tsl = fetchurl {
     url = "https://ec.europa.eu/information_society/policy/esignature/trusted-list/tl-mp.xml";
-    sha256 = "0llr2fj8vd097hcr1d0xmzdy4jydv0b5j5qlksbjffs22rqgal14";
+    sha256 = "0klz9blrp0jjhlr9k1i266afp44pqmii1x0y8prk0417ia3fxpli";
   };
 
-  nativeBuildInputs = [ cmake darkhttpd gettext makeWrapper pkgconfig ];
+  # Adds explicit imports for QPainterPath, fixed in upstream (https://github.com/open-eid/DigiDoc4-Client/pull/914)
+  patches = [ ./qt5.15.patch ];
+
+  nativeBuildInputs = [ cmake darkhttpd gettext makeWrapper pkg-config ];
 
   postPatch = ''
     substituteInPlace client/CMakeLists.txt \
@@ -40,7 +43,7 @@ mkDerivation rec {
       --prefix LD_LIBRARY_PATH : ${opensc}/lib/pkcs11/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Qt-based UI for signing and verifying DigiDoc documents";
     homepage = "https://www.id.ee/";
     license = licenses.lgpl21Plus;
diff --git a/pkgs/tools/security/qdigidoc/qt5.15.patch b/pkgs/tools/security/qdigidoc/qt5.15.patch
new file mode 100644
index 00000000000..6f390702348
--- /dev/null
+++ b/pkgs/tools/security/qdigidoc/qt5.15.patch
@@ -0,0 +1,39 @@
+From 1aa314f5433b9b3e89a1c05b5c465fb477435e23 Mon Sep 17 00:00:00 2001
+From: Dmitri Smirnov <dmitri@smirnov.ee>
+Date: Mon, 8 Mar 2021 14:15:27 +0100
+Subject: [PATCH] =?UTF-8?q?Added=20explicit=20imports=20for=20QPainterPath?=
+ =?UTF-8?q?=20to=20fix=20builds=20with=20Qt=20=E2=89=A5=205.15?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Dmitri Smirnov <dmitri@smirnov.ee>
+---
+ client/widgets/CheckBox.cpp   | 1 +
+ client/widgets/MainAction.cpp | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/client/widgets/CheckBox.cpp b/client/widgets/CheckBox.cpp
+index a03b56e5d..725d585b7 100644
+--- a/client/widgets/CheckBox.cpp
++++ b/client/widgets/CheckBox.cpp
+@@ -22,6 +22,7 @@
+ #include <QBrush>
+ #include <QPaintEvent>
+ #include <QPainter>
++#include <QPainterPath>
+ #include <QStyleOptionButton>
+ 
+ CheckBox::CheckBox(QWidget *parent)
+diff --git a/client/widgets/MainAction.cpp b/client/widgets/MainAction.cpp
+index 4cf4bb1cf..a46c193e3 100644
+--- a/client/widgets/MainAction.cpp
++++ b/client/widgets/MainAction.cpp
+@@ -24,6 +24,7 @@
+ 
+ #include <QtCore/QSettings>
+ #include <QtGui/QPainter>
++#include <QtGui/QPainterPath>
+ #include <QtGui/QPaintEvent>
+ 
+ using namespace ria::qdigidoc4;
diff --git a/pkgs/tools/security/quill-qr/default.nix b/pkgs/tools/security/quill-qr/default.nix
new file mode 100644
index 00000000000..55c2f45cc68
--- /dev/null
+++ b/pkgs/tools/security/quill-qr/default.nix
@@ -0,0 +1,45 @@
+{ coreutils
+, fetchFromGitHub
+, gzip
+, jq
+, lib
+, makeWrapper
+, qrencode
+, stdenvNoCC
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "quill-qr";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "IvanMalison";
+    repo = "quill-qr";
+    rev = "v${version}";
+    sha256 = "1kdsq6csmxfvs2wy31bc9r92l5pkmzlzkyqrangvrf4pbk3sk0r6";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -a quill-qr.sh $out/bin/quill-qr.sh
+    patchShebangs $out/bin
+
+    wrapProgram $out/bin/quill-qr.sh --prefix PATH : "${lib.makeBinPath [
+      qrencode
+      coreutils
+      jq
+      gzip
+    ]}"
+  '';
+
+  meta = with lib; {
+    description = "Print QR codes for use with https://p5deo-6aaaa-aaaab-aaaxq-cai.raw.ic0.app/";
+    homepage = "https://github.com/IvanMalison/quill-qr";
+    maintainers = with maintainers; [ imalison ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/pkgs/tools/security/quill/default.nix b/pkgs/tools/security/quill/default.nix
new file mode 100644
index 00000000000..74c7996a896
--- /dev/null
+++ b/pkgs/tools/security/quill/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, openssl, Security, libiconv, pkg-config, protobuf, which, buildPackages }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "quill";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "dfinity";
+    repo = "quill";
+    rev = "v${version}";
+    sha256 = "02ga2xkdxs36mfr4lv43cy6wkf27c28bdkzfkp3az5jvyk17mkfr";
+  };
+
+  ic = fetchFromGitHub {
+    owner = "dfinity";
+    repo = "ic";
+    rev = "779549eccfcf61ac702dfc2ee6d76ffdc2db1f7f";
+    sha256 = "1r31d5hab7k1n60a7y8fw79fjgfq04cgj9krwa6r9z4isi3919v6";
+  };
+
+  registry = "file://local-registry";
+
+  preBuild = ''
+    export REGISTRY_TRANSPORT_PROTO_INCLUDES=${ic}/rs/registry/transport/proto
+    export IC_BASE_TYPES_PROTO_INCLUDES=${ic}/rs/types/base_types/proto
+    export IC_PROTOBUF_PROTO_INCLUDES=${ic}/rs/protobuf/def
+    export IC_NNS_COMMON_PROTO_INCLUDES=${ic}/rs/nns/common/proto
+    export PROTOC=${buildPackages.protobuf}/bin/protoc
+    export OPENSSL_DIR=${openssl.dev}
+    export OPENSSL_LIB_DIR=${openssl.out}/lib
+  '';
+
+  cargoSha256 = "142pzhyi73ljlqas5vbhjhn4vmp9w9ps1mv8q7s3kzg0h7jcvm1k";
+
+  nativeBuildInputs = [ pkg-config protobuf ];
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security libiconv ];
+
+  meta = with lib; {
+    homepage = "https://github.com/dfinity/quill";
+    changelog = "https://github.com/dfinity/quill/releases/tag/v${version}";
+    description = "Minimalistic ledger and governance toolkit for cold wallets on the Internet Computer.";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ imalison ];
+  };
+}
diff --git a/pkgs/tools/security/radamsa/default.nix b/pkgs/tools/security/radamsa/default.nix
index b1d6400f2d0..2ddbc403492 100644
--- a/pkgs/tools/security/radamsa/default.nix
+++ b/pkgs/tools/security/radamsa/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchFromGitLab, bash }:
+{ lib, stdenv, fetchurl, fetchFromGitLab, bash }:
 
 let
   # Fetch explicitly, otherwise build will try to do so
@@ -32,12 +32,12 @@ stdenv.mkDerivation rec {
 
   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;
+    maintainers = [ lib.maintainers.markWot ];
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/security/rage/default.nix b/pkgs/tools/security/rage/default.nix
index 26ae27dff6b..99e61dc2358 100644
--- a/pkgs/tools/security/rage/default.nix
+++ b/pkgs/tools/security/rage/default.nix
@@ -1,21 +1,29 @@
-{ stdenv, rustPlatform, fetchFromGitHub, installShellFiles, Security }:
+{ lib, stdenv, rustPlatform, fetchFromGitHub, installShellFiles
+, Foundation, Security, libiconv }:
 
 rustPlatform.buildRustPackage rec {
   pname = "rage";
-  version = "0.4.0";
+  version = "0.6.0";
 
   src = fetchFromGitHub {
     owner = "str4d";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1wwndzy4xxbar9r67z8g7pp0s1xsxk5xaarh4h6hc0kh411zglrq";
+    sha256 = "1vag448zpjyplcjpf1ir81l8ip3yxm9vkrxffqr78zslb4k6hw2w";
   };
 
-  cargoSha256 = "08njl8irkqkfxj54pz4sx3l9aqb40h10wxb82zza52pqd4zapgn6";
+  cargoSha256 = "06jfhq9vnkq5g5bw1zl2sxsih63yajcyk9zaizhzkdsbhydr4955";
 
   nativeBuildInputs = [ installShellFiles ];
 
-  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ Security ];
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Foundation
+    Security
+    libiconv
+  ];
+
+  # cargo test has an x86-only dependency
+  doCheck = stdenv.hostPlatform.isx86;
 
   postBuild = ''
     cargo run --example generate-docs
@@ -27,11 +35,11 @@ rustPlatform.buildRustPackage rec {
     installShellCompletion target/completions/*.{bash,fish,zsh}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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";
-    changelog = "https://github.com/str4d/rage/releases/tag/v${version}";
-    license = licenses.asl20;
-    maintainers = [ maintainers.marsam ];
+    changelog = "https://github.com/str4d/rage/raw/v${version}/rage/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ]; # either at your option
+    maintainers = with maintainers; [ marsam ryantm ];
   };
 }
diff --git a/pkgs/tools/security/rarcrack/default.nix b/pkgs/tools/security/rarcrack/default.nix
index 9749d825168..3745a9520f1 100644
--- a/pkgs/tools/security/rarcrack/default.nix
+++ b/pkgs/tools/security/rarcrack/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchFromGitHub, libxml2, file, p7zip, unrar, unzip}:
+{lib, stdenv, fetchFromGitHub, libxml2, file, p7zip, unrar, unzip}:
 
 stdenv.mkDerivation {
   pname = "rarcrack";
@@ -11,8 +11,9 @@ stdenv.mkDerivation {
     sha256 = "134fq84896w5vp8vg4qg0ybpb466njibigyd7bqqm1xydr07qrgn";
   };
 
-  buildInputs = [ libxml2 file p7zip unrar unzip ];
-  buildFlags = stdenv.lib.optional stdenv.cc.isClang "CC=clang";
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [ libxml2 file p7zip unrar ];
+  buildFlags = lib.optional stdenv.cc.isClang "CC=clang";
   installFlags = [ "PREFIX=\${out}" ];
 
   patchPhase = ''
@@ -23,7 +24,7 @@ stdenv.mkDerivation {
     mkdir -p $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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.
diff --git a/pkgs/tools/security/rbw/default.nix b/pkgs/tools/security/rbw/default.nix
new file mode 100644
index 00000000000..17ecdee6d30
--- /dev/null
+++ b/pkgs/tools/security/rbw/default.nix
@@ -0,0 +1,83 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchCrate
+, openssl
+, pkg-config
+, makeWrapper
+, installShellFiles
+, Security
+, libiconv
+
+# rbw-fzf
+, withFzf ? false, fzf, perl
+
+# rbw-rofi
+, withRofi ? false, rofi, xclip
+
+# pass-import
+, withPass ? false, pass
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rbw";
+  version = "1.3.0";
+
+  src = fetchCrate {
+    inherit version;
+    crateName = pname;
+    sha256 = "17x4q29rsljbalc70r3ks4r6g5zc6jl4si75i33fcicxsvx6f39q";
+  };
+
+  cargoSha256 = "14095ds8f5knrqcriphjlbvasc29n9rf8h5vlkmhpxyk7wh9azzc";
+
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+    installShellFiles
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security libiconv ];
+
+  postPatch = lib.optionalString withFzf ''
+    patchShebangs bin/rbw-fzf
+    substituteInPlace bin/rbw-fzf \
+        --replace fzf ${fzf}/bin/fzf \
+        --replace perl ${perl}/bin/perl
+  '' + lib.optionalString withRofi ''
+    patchShebangs bin/rbw-rofi
+    substituteInPlace bin/rbw-rofi \
+        --replace rofi ${rofi}/bin/rofi \
+        --replace xclip ${xclip}/bin/xclip
+  '' + lib.optionalString withRofi ''
+    patchShebangs bin/pass-import
+    substituteInPlace bin/pass-import \
+        --replace pass ${pass}/bin/pass
+  '';
+
+  preConfigure = ''
+    export OPENSSL_INCLUDE_DIR="${openssl.dev}/include"
+    export OPENSSL_LIB_DIR="${openssl.out}/lib"
+  '';
+
+  postInstall = ''
+    for shell in bash zsh fish; do
+      $out/bin/rbw gen-completions $shell > rbw.$shell
+      installShellCompletion rbw.$shell
+    done
+  '' + lib.optionalString withFzf ''
+    cp bin/rbw-fzf $out/bin
+  '' + lib.optionalString withRofi ''
+    cp bin/rbw-rofi $out/bin
+  '' + lib.optionalString withPass ''
+    cp bin/pass-import $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Unofficial command line client for Bitwarden";
+    homepage = "https://crates.io/crates/rbw";
+    changelog = "https://git.tozt.net/rbw/plain/CHANGELOG.md?id=${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ albakham luc65r marsam ];
+  };
+}
diff --git a/pkgs/tools/security/rekor/default.nix b/pkgs/tools/security/rekor/default.nix
new file mode 100644
index 00000000000..b9b49d4e2df
--- /dev/null
+++ b/pkgs/tools/security/rekor/default.nix
@@ -0,0 +1,43 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+let
+  generic = { pname, packageToBuild, description }:
+    buildGoModule rec {
+      inherit pname;
+      version = "0.2.0";
+
+      src = fetchFromGitHub {
+        owner = "sigstore";
+        repo = "rekor";
+        rev = "v${version}";
+        sha256 = "1y6qw55r30jgkcwc6434ly0v9dcfa2lc7z5djn7rjcqrjg3gn7yv";
+      };
+
+      vendorSha256 = "1wlh505ypwyr91wi80fpbap3far3fljwjd4mql2qcqgg0b1yay9s";
+
+      subPackages = [ packageToBuild ];
+
+      preBuild = ''
+        buildFlagsArray+=("-ldflags" "-s -w -X github.com/sigstore/rekor/${packageToBuild}/app.gitVersion=v${version}")
+      '';
+
+      meta = with lib; {
+        inherit description;
+        homepage = "https://github.com/sigstore/rekor";
+        changelog = "https://github.com/sigstore/rekor/releases/tag/v${version}";
+        license = licenses.asl20;
+        maintainers = with maintainers; [ lesuisse ];
+      };
+    };
+in {
+  rekor-cli = generic {
+    pname = "rekor-cli";
+    packageToBuild = "cmd/rekor-cli";
+    description = "CLI client for Sigstore, the Signature Transparency Log";
+  };
+  rekor-server = generic {
+    pname = "rekor-server";
+    packageToBuild = "cmd/rekor-server";
+    description = "Sigstore server, the Signature Transparency Log";
+  };
+}
diff --git a/pkgs/tools/security/rhash/default.nix b/pkgs/tools/security/rhash/default.nix
index 394dd89484f..68bf35a751e 100644
--- a/pkgs/tools/security/rhash/default.nix
+++ b/pkgs/tools/security/rhash/default.nix
@@ -1,28 +1,37 @@
-{ stdenv, fetchFromGitHub, which }:
+{ lib, stdenv, fetchFromGitHub, which
+, enableStatic ? stdenv.hostPlatform.isStatic
+}:
 
 stdenv.mkDerivation rec {
-  version = "1.4.0";
+  version = "1.4.1";
   pname = "rhash";
 
   src = fetchFromGitHub {
     owner = "rhash";
     repo = "RHash";
     rev = "v${version}";
-    sha256 = "18zgr1bjzz8v6rckz2q2hx9f2ssbv8qfwclzpbyjaz0c1c9lqqar";
+    sha256 = "sha256-kmi1FtJYPBUdMfJlzEsQkTwcYB99isP3yzH1EYlk54g=";
   };
 
   nativeBuildInputs = [ which ];
 
   # configure script is not autotools-based, doesn't support these options
+  dontAddStaticConfigureFlags = true;
   configurePlatforms = [ ];
+  configureFlags = [
+    "--ar=${stdenv.cc.targetPrefix}ar"
+    (lib.enableFeature enableStatic "static")
+    (lib.enableFeature enableStatic "lib-static")
+  ];
 
   doCheck = true;
 
   checkTarget = "test-full";
 
-  installTargets = [ "install" "install-lib-shared" "install-lib-so-link" "install-lib-headers" ];
+  installTargets = [ "install" "install-lib-headers" ]
+    ++ lib.optional (!enableStatic) "install-lib-so-link";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://rhash.sourceforge.net/";
     description = "Console utility and library for computing and verifying hash sums of files";
     license = licenses.bsd0;
diff --git a/pkgs/tools/security/ripasso/cursive.nix b/pkgs/tools/security/ripasso/cursive.nix
index 29229bff002..1a4b1de1b1f 100644
--- a/pkgs/tools/security/ripasso/cursive.nix
+++ b/pkgs/tools/security/ripasso/cursive.nix
@@ -1,35 +1,37 @@
-{ stdenv, lib, rustPlatform, fetchFromGitHub, pkgconfig, ncurses, python3, openssl, libgpgerror, gpgme, xorg, AppKit, Security }:
+{ stdenv, lib, rustPlatform, fetchFromGitHub, pkg-config, ncurses, python3, openssl, libgpgerror, gpgme, xorg, AppKit, Security, installShellFiles }:
 
 with rustPlatform;
 buildRustPackage rec {
-  version = "0.4.0";
+  version = "0.5.1";
   pname = "ripasso-cursive";
 
   src = fetchFromGitHub {
     owner = "cortex";
     repo = "ripasso";
     rev  = "release-${version}";
-    sha256 = "164da20j727p8l7hh37j2r8pai9sj402nhswvg0nrlgj53nr6083";
+    sha256 = "1jx6qv7skikl1ap3g1r34rkz4ab756kra7dgwwv45vl2fb6x74k4";
   };
 
   patches = [ ./fix-tests.patch ];
 
-  cargoSha256 = "1wpn67v0xmxhn1dgzhh1pwz1yc3cizmfxhpb7qv9b27ynx4486ji";
+  cargoSha256 = "1li1gmcs7lnjr4qhzs0rrgngdcxy1paiibjwk9zx2rrs71021cgk";
 
-  cargoBuildFlags = [ "-p ripasso-cursive -p ripasso-man" ];
+  cargoBuildFlags = [ "-p ripasso-cursive" ];
 
-  nativeBuildInputs = [ pkgconfig gpgme python3 ];
+  nativeBuildInputs = [ pkg-config gpgme python3 installShellFiles ];
   buildInputs = [
     ncurses openssl libgpgerror gpgme xorg.libxcb
-  ] ++ stdenv.lib.optionals stdenv.isDarwin [ AppKit Security ];
+  ] ++ 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
+  preCheck = ''
+    export HOME=$TMPDIR
   '';
 
-  meta = with stdenv.lib; {
+  postInstall = ''
+    installManPage target/man-page/cursive/ripasso-cursive.1
+  '';
+
+  meta = with lib; {
     description = "A simple password manager written in Rust";
     homepage = "https://github.com/cortex/ripasso";
     license = licenses.gpl3;
diff --git a/pkgs/tools/security/ripasso/fix-tests.patch b/pkgs/tools/security/ripasso/fix-tests.patch
index 433ff933b1f..85b1714e5c2 100644
--- a/pkgs/tools/security/ripasso/fix-tests.patch
+++ b/pkgs/tools/security/ripasso/fix-tests.patch
@@ -1,35 +1,82 @@
-diff --git a/src/pass/test.rs b/src/pass/test.rs
-index c980a2f..2e6c8cc 100644
 --- a/src/pass/test.rs
-+++ b/src/pass/test.rs
-@@ -56,6 +56,7 @@ fn populate_password_list_small_repo() {
++++ a/src/pass/test.rs
+@@ -83,6 +83,7 @@
      base_path.pop();
      base_path.pop();
      base_path.pop();
 +    base_path.pop();
      base_path.push("testres");
  
-     let mut password_dir: PathBuf = base_path.clone();
-@@ -84,6 +85,7 @@ fn populate_password_list_repo_with_deleted_files() {
+     let home: PathBuf = base_path.clone();
+@@ -114,6 +115,7 @@
      base_path.pop();
      base_path.pop();
      base_path.pop();
 +    base_path.pop();
      base_path.push("testres");
  
-     let mut password_dir: PathBuf = base_path.clone();
-@@ -112,6 +114,7 @@ fn populate_password_list_directory_without_git() {
+     let home: PathBuf = base_path.clone();
+@@ -144,6 +146,7 @@
      base_path.pop();
      base_path.pop();
      base_path.pop();
 +    base_path.pop();
      base_path.push("testres");
  
-     let mut password_dir: PathBuf = base_path.clone();
-@@ -149,4 +152,4 @@ fn parse_signing_keys_empty() {
-     let result = PasswordStore::parse_signing_keys(&None).unwrap();
+     let home: PathBuf = base_path.clone();
+@@ -185,6 +188,7 @@
+     base_path.pop();
+     base_path.pop();
+     base_path.pop();
++    base_path.pop();
+     base_path.push("testres");
+ 
+     let home: PathBuf = base_path.clone();
+@@ -220,6 +224,7 @@
+     base_path.pop();
+     base_path.pop();
+     base_path.pop();
++    base_path.pop();
+     base_path.push("testres");
+ 
+     let home: PathBuf = base_path.clone();
+@@ -267,6 +272,7 @@
+     base_path.pop();
+     base_path.pop();
+     base_path.pop();
++    base_path.pop();
+     base_path.push("testres");
+ 
+     let home: PathBuf = base_path.clone();
+@@ -298,6 +304,7 @@
+     base_path.pop();
+     base_path.pop();
+     base_path.pop();
++    base_path.pop();
+     base_path.push("testres");
+ 
+     let home: PathBuf = base_path.clone();
+@@ -337,6 +344,7 @@
+     base_path.pop();
+     base_path.pop();
+     base_path.pop();
++    base_path.pop();
+     base_path.push("testres");
+ 
+     let home: PathBuf = base_path.clone();
+@@ -828,6 +836,7 @@
+     base_path.pop();
+     base_path.pop();
+     base_path.pop();
++    base_path.pop();
+     base_path.push("testres");
+ 
+     let home: PathBuf = base_path.clone();
+@@ -860,6 +869,7 @@
+     base_path.pop();
+     base_path.pop();
+     base_path.pop();
++    base_path.pop();
+     base_path.pop();
+     base_path.push("testres");
  
-     assert_eq!(result.len(), 0);
--}
-\ No newline at end of file
-+}
diff --git a/pkgs/tools/security/rng-tools/default.nix b/pkgs/tools/security/rng-tools/default.nix
index 16952e6dabb..76aea2bbd51 100644
--- a/pkgs/tools/security/rng-tools/default.nix
+++ b/pkgs/tools/security/rng-tools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libtool, autoreconfHook, pkgconfig
+{ lib, stdenv, fetchFromGitHub, libtool, autoreconfHook, pkg-config
 , sysfsutils
 , argp-standalone
   # WARNING: DO NOT USE BEACON GENERATED VALUES AS SECRET CRYPTOGRAPHIC KEYS
@@ -10,17 +10,17 @@
 , libp11 ? null, opensc ? null, withPkcs11 ? true
 }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   pname = "rng-tools";
-  version = "6.9";
+  version = "6.11";
 
   src = fetchFromGitHub {
     owner = "nhorman";
     repo = "rng-tools";
     rev = "v${version}";
-    sha256 = "065jf26s8zkicb95zc9ilksjdq9gqrh5vcx3mhi6mypbnamn6w98";
+    sha256 = "sha256-qheJaeVX2zuv0mvKEd6wcbSHFjiJE0t5hVCJiRSKm3M=";
   };
 
   postPatch = ''
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
     ''}
   '';
 
-  nativeBuildInputs = [ autoreconfHook libtool pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook libtool pkg-config ];
 
   configureFlags = [
     (withFeature   withGcrypt        "libgcrypt")
diff --git a/pkgs/tools/security/rnp/default.nix b/pkgs/tools/security/rnp/default.nix
new file mode 100644
index 00000000000..3c60190f128
--- /dev/null
+++ b/pkgs/tools/security/rnp/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, stdenv
+, asciidoctor
+, botan2
+, bzip2
+, cmake
+, fetchFromGitHub
+, gnupg
+, gtest
+, json_c
+, pkg-config
+, python3
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rnp";
+  version = "0.15.1";
+
+  src = fetchFromGitHub {
+    owner = "rnpgp";
+    repo = "rnp";
+    rev = "v${version}";
+    sha256 = "1l7y99rcss5w24lil6nqwr0dzh2jvq0qxmdvq7j5yx3fdssd5xsv";
+  };
+
+  buildInputs = [ zlib bzip2 json_c botan2 ];
+
+  cmakeFlags = [
+    "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}"
+    "-DBUILD_SHARED_LIBS=on"
+    "-DBUILD_TESTING=on"
+    "-DDOWNLOAD_GTEST=off"
+    "-DDOWNLOAD_RUBYRNP=off"
+  ];
+
+  nativeBuildInputs = [ asciidoctor cmake gnupg gtest pkg-config python3 ];
+
+  # NOTE: check-only inputs should ideally be moved to checkInputs, but it
+  # would fail during buildPhase.
+  # checkInputs = [ gtest python3 ];
+
+  outputs = [ "out" "lib" "dev" ];
+
+  preConfigure = ''
+    echo "v${version}" > version.txt
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/rnpgp/rnp";
+    description = "High performance C++ OpenPGP library, fully compliant to RFC 4880";
+    license = licenses.bsd2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ribose-jeffreylau ];
+  };
+}
diff --git a/pkgs/tools/security/rustscan/default.nix b/pkgs/tools/security/rustscan/default.nix
new file mode 100644
index 00000000000..adf514006b1
--- /dev/null
+++ b/pkgs/tools/security/rustscan/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, nmap, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rustscan";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "RustScan";
+    repo = pname;
+    rev = version;
+    sha256 = "0fdbsz1v7bb5dm3zqjs1qf73lb1m4qzkqyb3h3hbyrp9vklgxsgw";
+  };
+
+  cargoSha256 = "0658jbx59qrsgpfczzlfrbp2qm7kh0c5561bsxzmgiri7fcz9w0n";
+
+  postPatch = ''
+    substituteInPlace src/main.rs \
+      --replace 'Command::new("nmap")' 'Command::new("${nmap}/bin/nmap")'
+  '';
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  checkFlags = [
+    "--skip=infer_ulimit_lowering_no_panic"
+    "--skip=google_dns_runs"
+    "--skip=parse_correct_host_addresses"
+    "--skip=parse_hosts_file_and_incorrect_hosts"
+    "--skip=run_perl_script"
+    "--skip=run_python_script"
+  ];
+
+  meta = with lib; {
+    description = "Faster Nmap Scanning with Rust";
+    homepage = "https://github.com/RustScan/RustScan";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.SuperSandro2000 ];
+  };
+}
diff --git a/pkgs/tools/security/safe/default.nix b/pkgs/tools/security/safe/default.nix
index 43d791e19db..503cfbd9e86 100644
--- a/pkgs/tools/security/safe/default.nix
+++ b/pkgs/tools/security/safe/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib
 , buildGoPackage
 , fetchFromGitHub
 }:
@@ -22,7 +22,7 @@ buildGoPackage rec {
     buildFlagsArray+=("-ldflags" "-X main.Version=${version}")
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A Vault CLI";
     homepage = "https://github.com/starkandwayne/safe";
     license = licenses.mit;
diff --git a/pkgs/tools/security/saml2aws/default.nix b/pkgs/tools/security/saml2aws/default.nix
index 940e67013ee..8ee2c9a4c4e 100644
--- a/pkgs/tools/security/saml2aws/default.nix
+++ b/pkgs/tools/security/saml2aws/default.nix
@@ -1,18 +1,20 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, stdenv, buildGoModule, fetchFromGitHub, AppKit }:
 
 buildGoModule rec {
   pname = "saml2aws";
-  version = "2.26.2";
+  version = "2.31.0";
 
   src = fetchFromGitHub {
     owner = "Versent";
     repo = "saml2aws";
     rev = "v${version}";
-    sha256 = "0y5gvdrdr6i9spdwsxvzs1bxs32icxpkqxnglp1bf4gglc580d87";
+    sha256 = "sha256-Qe7+INWS9b6lw7QbaaQwIkRwvfx5dRKsZqun3z/U/QA=";
   };
 
   runVend = true;
-  vendorSha256 = "1kzihyx44sx6php4z58fzy6c3g0y713939yzxpgk3n03snn2x8sf";
+  vendorSha256 = "sha256-TieQVPSWtIteU0wTqX7si6GrPdYd4WD2eK4ZlLz0VJ8=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ AppKit ];
 
   doCheck = false;
 
@@ -22,11 +24,11 @@ buildGoModule rec {
     -ldflags=-X main.Version=${version}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    platforms   = lib.platforms.unix;
+    maintainers = [ lib.maintainers.pmyjavec ];
   };
 }
diff --git a/pkgs/tools/security/sammler/default.nix b/pkgs/tools/security/sammler/default.nix
new file mode 100644
index 00000000000..f5bfab987a1
--- /dev/null
+++ b/pkgs/tools/security/sammler/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "sammler";
+  version = "20210523-${lib.strings.substring 0 7 rev}";
+  rev = "259b9fc6155f40758e5fa480683467c35df746e7";
+
+  src = fetchFromGitHub {
+    owner = "redcode-labs";
+    repo = "Sammler";
+    inherit rev;
+    sha256 = "1gsv83sbqc9prkigbjvkhh547w12l3ynbajpnbqyf8sz4bd1nj5c";
+  };
+
+  vendorSha256 = "1510rhdac8v21kpp00q8yy6b13hgac8547d7f5q7nwrgnihg03w4";
+
+  subPackages = [ "." ];
+
+  runVend = true;
+
+  meta = with lib; {
+    description = "Tool to extract useful data from documents";
+    homepage = "https://github.com/redcode-labs/Sammler";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/sbsigntool/default.nix b/pkgs/tools/security/sbsigntool/default.nix
index 1a42ddf8bec..7a0bb37d4a4 100644
--- a/pkgs/tools/security/sbsigntool/default.nix
+++ b/pkgs/tools/security/sbsigntool/default.nix
@@ -1,5 +1,5 @@
-{ stdenv
-, fetchgit, autoconf, automake, pkgconfig, help2man
+{ lib, stdenv
+, fetchgit, autoconf, automake, pkg-config, help2man
 , openssl, libuuid, gnu-efi, libbfd
 }:
 
@@ -17,7 +17,7 @@ stdenv.mkDerivation {
 
   prePatch = "patchShebangs .";
 
-  nativeBuildInputs = [ autoconf automake pkgconfig help2man ];
+  nativeBuildInputs = [ autoconf automake pkg-config help2man ];
   buildInputs = [ openssl libuuid libbfd gnu-efi ];
 
   configurePhase = ''
@@ -42,7 +42,7 @@ stdenv.mkDerivation {
     make install
     '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tools for maintaining UEFI signature databases";
     homepage    = "http://jk.ozlabs.org/docs/sbkeysync-maintaing-uefi-key-databases";
     maintainers = [ maintainers.tstrobel ];
diff --git a/pkgs/tools/security/scallion/default.nix b/pkgs/tools/security/scallion/default.nix
index 1395b8e1061..6f0dcd1bb01 100644
--- a/pkgs/tools/security/scallion/default.nix
+++ b/pkgs/tools/security/scallion/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, makeWrapper, mono, openssl_1_0_2, ocl-icd }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper, mono, openssl_1_0_2, ocl-icd }:
 
 stdenv.mkDerivation rec {
   version = "2.1";
@@ -22,11 +22,11 @@ stdenv.mkDerivation rec {
     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_1_0_2 ocl-icd ]} \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ openssl_1_0_2 ocl-icd ]} \
       --add-flags $out/share/scallion.exe
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "GPU-based tor hidden service name generator";
     homepage = src.meta.homepage;
     license = licenses.mit;
diff --git a/pkgs/tools/security/scilla/default.nix b/pkgs/tools/security/scilla/default.nix
new file mode 100644
index 00000000000..1983aef1726
--- /dev/null
+++ b/pkgs/tools/security/scilla/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "scilla";
+  version = "20210118-${lib.strings.substring 0 7 rev}";
+  rev = "74dd81492fef92b95765df1d0f629276a146a5a4";
+
+  src = fetchFromGitHub {
+    owner = "edoardottt";
+    repo = pname;
+    inherit rev;
+    sha256 = "10qvaigfarljydfb9vx2fb9nk293j4g9w2h9mr8xw6adbvl0qr9q";
+  };
+
+  vendorSha256 = "04wqsl4269gc3r6l9srqhcq19zarnyyab8k1shj3w6lkfcc61z25";
+
+  meta = with lib; {
+    description = "Information gathering tool for DNS, ports and more";
+    homepage = "https://github.com/edoardottt/scilla";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/scrypt/default.nix b/pkgs/tools/security/scrypt/default.nix
index 018bc44b144..89ff50e0a8a 100644
--- a/pkgs/tools/security/scrypt/default.nix
+++ b/pkgs/tools/security/scrypt/default.nix
@@ -1,23 +1,35 @@
-{ stdenv, fetchurl, openssl }:
+{ lib, stdenv, fetchurl, openssl, util-linux, getconf }:
 
 stdenv.mkDerivation rec {
   pname = "scrypt";
-  version = "1.3.0";
+  version = "1.3.1";
 
   src = fetchurl {
     url = "https://www.tarsnap.com/scrypt/${pname}-${version}.tgz";
-    sha256 = "0j17yfrpi2bk5cawb4a4mzpv1vadqxh956hx0pa1gqfisknk8c16";
+    sha256 = "1hnl0r6pmyxiy4dmafmqk1db7wpc0x9rqpzqcwr9d2cmghcj6byz";
   };
 
+  outputs = [ "out" "lib" "dev" ];
+
+  configureFlags = [ "--enable-libscrypt-kdf" ];
+
   buildInputs = [ openssl ];
 
+  nativeBuildInputs = [ getconf ];
+
   patchPhase = ''
-    for f in Makefile.in autotools/Makefile.am libcperciva/cpusupport/Build/cpusupport.sh ; do
+    for f in Makefile.in autotools/Makefile.am libcperciva/cpusupport/Build/cpusupport.sh configure ; do
       substituteInPlace $f --replace "command -p " ""
     done
+
+    patchShebangs tests/test_scrypt.sh
   '';
 
-  meta = with stdenv.lib; {
+  doCheck = true;
+  checkTarget = "test";
+  checkInputs = [ util-linux ];
+
+  meta = with lib; {
     description = "Encryption utility";
     homepage    = "https://www.tarsnap.com/scrypt.html";
     license     = licenses.bsd2;
diff --git a/pkgs/tools/security/seccure/default.nix b/pkgs/tools/security/seccure/default.nix
index e0f01f4f2c4..07c8d0382ca 100644
--- a/pkgs/tools/security/seccure/default.nix
+++ b/pkgs/tools/security/seccure/default.nix
@@ -1,16 +1,16 @@
-{ stdenv, fetchurl, libgcrypt }:
+{ lib, 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
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
   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;
+    platforms = lib.platforms.unix;
+    license = lib.licenses.lgpl3;
   };
 }
diff --git a/pkgs/tools/security/secp256k1/default.nix b/pkgs/tools/security/secp256k1/default.nix
index b5e92a35454..e88187f8465 100644
--- a/pkgs/tools/security/secp256k1/default.nix
+++ b/pkgs/tools/security/secp256k1/default.nix
@@ -1,45 +1,40 @@
-{ 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
-
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
 }:
 
-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";
+  version = "unstable-2021-06-06";
 
   src = fetchFromGitHub {
     owner = "bitcoin-core";
     repo = "secp256k1";
-    rev = "f54c6c5083307b18224c953cf5870ea7ffce070b";
-    sha256 = "0bxqmimm627g9klalg1vdbspmn52588v4a6cli3p8bn84ibsnzbm";
+    rev = "7973576f6e3ab27d036a09397152b124d747f4ae";
+    sha256 = "0vjk55dv0mkph4k6bqgkykmxn05ngzvhc4rzjnvn33xzi8dzlvah";
   };
 
-  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" ];
+  configureFlags = [
+    "--enable-benchmark=no"
+    "--enable-exhaustive-tests=no"
+    "--enable-experimental"
+    "--enable-module-ecdh"
+    "--enable-module-recovery"
+    "--enable-module-schnorrsig"
+    "--enable-tests=yes"
+  ];
+
+  doCheck = true;
+
+  checkPhase = "./tests";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Optimized C library for EC operations on curve secp256k1";
     longDescription = ''
       Optimized C library for EC operations on curve secp256k1. Part of
@@ -48,7 +43,7 @@ stdenv.mkDerivation {
     '';
     homepage = "https://github.com/bitcoin-core/secp256k1";
     license = with licenses; [ mit ];
-    maintainers = with maintainers; [ chris-martin ];
+    maintainers = with maintainers; [ ];
     platforms = with platforms; unix;
   };
 }
diff --git a/pkgs/tools/security/secretscanner/default.nix b/pkgs/tools/security/secretscanner/default.nix
new file mode 100644
index 00000000000..93d440009f3
--- /dev/null
+++ b/pkgs/tools/security/secretscanner/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, hyperscan
+, pkg-config
+}:
+
+buildGoModule rec {
+  pname = "secretscanner";
+  version = "20210214-${lib.strings.substring 0 7 rev}";
+  rev = "42a38f9351352bf6240016b5b93d971be35cad46";
+
+  src = fetchFromGitHub {
+    owner = "deepfence";
+    repo = "SecretScanner";
+    inherit rev;
+    sha256 = "0yga71f7bx5a3hj5agr88pd7j8jnxbwqm241fhrvv8ic4sx0mawg";
+  };
+
+  vendorSha256 = "0b7qa83iqnigihgwlqsxi28n7d9h0dk3wx1bqvhn4k01483cipsd";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ hyperscan ];
+
+  postInstall = ''
+    mv $out/bin/SecretScanner $out/bin/$pname
+  '';
+
+  meta = with lib; {
+    description = "Tool to find secrets and passwords in container images and file systems";
+    homepage = "https://github.com/deepfence/SecretScanner";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
+
diff --git a/pkgs/tools/security/sedutil/default.nix b/pkgs/tools/security/sedutil/default.nix
index 4877a8adfce..6ed4a23af1d 100644
--- a/pkgs/tools/security/sedutil/default.nix
+++ b/pkgs/tools/security/sedutil/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   pname = "sedutil";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "DTA sedutil Self encrypting drive software";
     homepage    = "https://www.drivetrust.com";
     license     = licenses.gpl3;
diff --git a/pkgs/tools/security/sequoia/default.nix b/pkgs/tools/security/sequoia/default.nix
index 6b389a379d6..d84f6f29900 100644
--- a/pkgs/tools/security/sequoia/default.nix
+++ b/pkgs/tools/security/sequoia/default.nix
@@ -1,32 +1,48 @@
-{ stdenv, fetchFromGitLab, lib, darwin
-, git, nettle, llvmPackages, cargo, rustc
-, rustPlatform, pkgconfig, glib
-, openssl, sqlite, capnproto
-, ensureNewerSourcesForZipFilesHook, pythonSupport ? true, pythonPackages ? null
+{ stdenv
+, fetchFromGitLab
+, lib
+, darwin
+, git
+, nettle
+# Use the same llvmPackages version as Rust
+, llvmPackages_10
+, cargo
+, rustc
+, rustPlatform
+, pkg-config
+, glib
+, openssl
+, sqlite
+, capnproto
+, ensureNewerSourcesForZipFilesHook
+, pythonSupport ? true
+, pythonPackages ? null
 }:
 
 assert pythonSupport -> pythonPackages != null;
 
 rustPlatform.buildRustPackage rec {
   pname = "sequoia";
-  version = "0.18.0";
+  # Upstream has separate version numbering for the library and the CLI frontend.
+  # This derivation provides the CLI frontend, and thus uses its version number.
+  version = "0.25.0";
 
   src = fetchFromGitLab {
     owner = "sequoia-pgp";
-    repo = pname;
-    rev = "v${version}";
-    sha256 = "18acv0185y51yz6jwchi1vf701shz37z5qmnzpq6z419lpjdaskd";
+    repo = "sequoia";
+    rev = "sq/v${version}";
+    sha256 = "13f582g10vba0cpbdmqkkfzgd5jgagb640jaz1w425wf5nbh6q50";
   };
 
-  cargoSha256 = "1jazwpv5mrsd0hxfavk0lvq8n26iglzl8pggw311ysi0lwabjq0y";
+  cargoSha256 = "sha256-qIGP48uj2iQ6MVgy5anKI9QrX9vnuKh46Fmmcczda4w=";
 
   nativeBuildInputs = [
-    pkgconfig
+    pkg-config
     cargo
     rustc
     git
-    llvmPackages.libclang
-    llvmPackages.clang
+    llvmPackages_10.libclang.lib
+    llvmPackages_10.clang
     ensureNewerSourcesForZipFilesHook
     capnproto
   ] ++
@@ -35,7 +51,7 @@ rustPlatform.buildRustPackage rec {
 
   checkInputs = lib.optionals pythonSupport [
     pythonPackages.pytest
-    pythonPackages.pytestrunner
+    pythonPackages.pytest-runner
   ];
 
   buildInputs = [
@@ -48,33 +64,32 @@ rustPlatform.buildRustPackage rec {
 
   makeFlags = [
     "PREFIX=${placeholder "out"}"
+    # Defaults to "ginstall" from some reason, although upstream's Makefiles check uname
+    "INSTALL=install"
   ];
 
   buildFlags = [
     "build-release"
   ];
 
-  LIBCLANG_PATH = "${llvmPackages.libclang}/lib";
+  LIBCLANG_PATH = "${llvmPackages_10.libclang.lib}/lib";
 
-  # Please check if this is still needed when updating.
-  # Exlude tests for sequoia-store, they often error with 'Too many open files' Hydra.
-  CARGO_TEST_ARGS = " --all --exclude sequoia-store";
+  # Sometimes, tests fail on CI (ofborg) & hydra without this
+  CARGO_TEST_ARGS = "--workspace --exclude sequoia-store";
 
+  # Without this, the examples won't build
   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"
+    export makeFlags="PYTHON=disable"
   '';
 
   # Don't use buildRustPackage phases, only use it for rust deps setup
@@ -84,11 +99,10 @@ rustPlatform.buildRustPackage rec {
   checkPhase = null;
   installPhase = null;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A cool new OpenPGP implementation";
     homepage = "https://sequoia-pgp.org/";
     license = licenses.gpl3;
     maintainers = with maintainers; [ minijackson doronbehar ];
-    broken = stdenv.targetPlatform.isDarwin;
   };
 }
diff --git a/pkgs/tools/security/sha1collisiondetection/default.nix b/pkgs/tools/security/sha1collisiondetection/default.nix
index 8c6a026a612..07c9ed9b240 100644
--- a/pkgs/tools/security/sha1collisiondetection/default.nix
+++ b/pkgs/tools/security/sha1collisiondetection/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, libtool, which }:
+{ lib, stdenv, fetchFromGitHub, libtool, which }:
 
 stdenv.mkDerivation  rec {
   pname = "sha1collisiondetection";
@@ -17,7 +17,7 @@ stdenv.mkDerivation  rec {
 
   nativeBuildInputs = [ libtool which ];
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/security/shc/default.nix b/pkgs/tools/security/shc/default.nix
index 3705d2c7ed1..0c1bf93ed1c 100644
--- a/pkgs/tools/security/shc/default.nix
+++ b/pkgs/tools/security/shc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "shc";
@@ -12,10 +12,10 @@ stdenv.mkDerivation rec {
     sha256 = "0bfn404plsssa14q89k9l3s5lxq3df0sny5lis4j2w75qrkqx694";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://neurobin.org/projects/softwares/unix/shc/";
     description = "Shell Script Compiler";
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.all;
     license = licenses.gpl3;
   };
 }
diff --git a/pkgs/tools/security/sheesy-cli/default.nix b/pkgs/tools/security/sheesy-cli/default.nix
new file mode 100644
index 00000000000..3929dbc8ad1
--- /dev/null
+++ b/pkgs/tools/security/sheesy-cli/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, rustPlatform, fetchCrate, installShellFiles
+, libgpgerror, gpgme, gettext, openssl, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sheesy-cli";
+  version = "4.0.11";
+
+  src = fetchCrate {
+    inherit version pname;
+    sha256 = "1l21ji9zqy8x1g2gvqwdhya505max07ibx1hh88s36k0jbvdb7xc";
+  };
+
+  cargoSha256 = "159a5ph1gxwcgahyr8885lq3c1w76nxzfrfdpyqixqrr7jzx2rd3";
+  cargoDepsName = pname;
+
+  cargoBuildFlags = [ "--bin sy" "--features" "vault,extract,completions,substitute,process" ];
+
+  nativeBuildInputs = [ libgpgerror gpgme gettext installShellFiles ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  postInstall = ''
+    installShellCompletion --cmd sy \
+      --bash <($out/bin/sy completions bash) \
+      --fish <($out/bin/sy completions fish) \
+      --zsh <($out/bin/sy completions zsh)
+  '';
+
+  meta = with lib; {
+    description = "The 'share-secrets-safely' CLI to interact with GPG/pass-like vaults";
+    homepage = "https://share-secrets-safely.github.io/cli/";
+    changelog = "https://github.com/share-secrets-safely/cli/releases/tag/${version}";
+    license = with licenses; [ lgpl21Only ];
+    maintainers = with maintainers; [ devhell ];
+  };
+}
diff --git a/pkgs/tools/security/shhgit/default.nix b/pkgs/tools/security/shhgit/default.nix
new file mode 100644
index 00000000000..a05eba1282c
--- /dev/null
+++ b/pkgs/tools/security/shhgit/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "shhgit";
+  version = "0.4-${lib.strings.substring 0 7 rev}";
+  rev = "7e55062d10d024f374882817692aa2afea02ff84";
+
+  src = fetchFromGitHub {
+    owner = "eth0izzle";
+    repo = pname;
+    inherit rev;
+    sha256 = "1b7r4ivfplm4crlvx571nyz2rc6djy0xvl14nz7m0ngh6206df9k";
+  };
+
+  vendorSha256 = "0isa9faaknm8c9mbyj5dvf1dfnyv44d1pjd2nbkyfi6b22hcci3d";
+
+  meta = with lib; {
+    description = "Tool to detect secrets in repositories";
+    homepage = "https://github.com/eth0izzle/shhgit";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/signify/default.nix b/pkgs/tools/security/signify/default.nix
index 3ec260a7c0c..fb3df51167b 100644
--- a/pkgs/tools/security/signify/default.nix
+++ b/pkgs/tools/security/signify/default.nix
@@ -1,26 +1,26 @@
-{ stdenv, fetchFromGitHub, libbsd, pkgconfig }:
+{ lib, stdenv, fetchFromGitHub, libbsd, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "signify";
-  version = "25";
+  version = "30";
 
   src = fetchFromGitHub {
     owner = "aperezdc";
     repo = "signify";
     rev = "v${version}";
-    sha256 = "0zg0rffxwj2a71s1bllhrn491xsmirg9sshpq8f3vl25lv4c2cnq";
+    sha256 = "02xh6x6rszkvk3rf6zai7n3ivchmw0d8mwllpinjxc7k6sd415c3";
   };
 
   doCheck = true;
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libbsd ];
 
   preInstall = ''
     export PREFIX=$out
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "OpenBSD signing tool";
     longDescription = ''
       OpenBSDs signing tool, which uses the Ed25519 public key signature system
diff --git a/pkgs/tools/security/signing-party/default.nix b/pkgs/tools/security/signing-party/default.nix
index 17c65d28884..ee099b704aa 100644
--- a/pkgs/tools/security/signing-party/default.nix
+++ b/pkgs/tools/security/signing-party/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitLab, autoconf, automake, makeWrapper
+{ lib, stdenv, fetchFromGitLab, autoconf, automake, makeWrapper
 , python3, perl, perlPackages
 , libmd, gnupg, which, getopt, libpaper, nettools, qprint
 , sendmailPath ? "/run/wrappers/bin/sendmail" }:
@@ -127,62 +127,62 @@ in stdenv.mkDerivation rec {
         TextTemplate MIMETools MailTools TimeDate NetIDNEncode ]
         ++ GnuPGInterfaceRuntimeDependencies)} \
       --prefix PATH ":" \
-      "${stdenv.lib.makeBinPath [ nettools gnupg ]}"
+      "${lib.makeBinPath [ nettools gnupg ]}"
 
     wrapProgram $out/bin/gpg-key2latex --set PERL5LIB \
       ${perlPackages.makePerlPath GnuPGInterfaceRuntimeDependencies} \
       --prefix PATH ":" \
-      "${stdenv.lib.makeBinPath [ gnupg libpaper ]}"
+      "${lib.makeBinPath [ gnupg libpaper ]}"
 
     wrapProgram $out/bin/gpg-key2ps --prefix PATH ":" \
-      "${stdenv.lib.makeBinPath [ which gnupg libpaper ]}"
+      "${lib.makeBinPath [ which gnupg libpaper ]}"
 
     wrapProgram $out/bin/gpg-mailkeys --prefix PATH ":" \
-      "${stdenv.lib.makeBinPath [ gnupg qprint ]}"
+      "${lib.makeBinPath [ gnupg qprint ]}"
 
     wrapProgram $out/bin/gpgdir --set PERL5LIB \
       ${with perlPackages; makePerlPath ([
         TermReadKey ]
         ++ GnuPGInterfaceRuntimeDependencies)} \
       --prefix PATH ":" \
-      "${stdenv.lib.makeBinPath [ gnupg ]}"
+      "${lib.makeBinPath [ gnupg ]}"
 
     wrapProgram $out/bin/gpglist --prefix PATH ":" \
-      "${stdenv.lib.makeBinPath [ gnupg ]}"
+      "${lib.makeBinPath [ gnupg ]}"
 
     wrapProgram $out/bin/gpgparticipants --prefix PATH ":" \
-      "${stdenv.lib.makeBinPath [ getopt gnupg ]}"
+      "${lib.makeBinPath [ getopt gnupg ]}"
 
 #    wrapProgram $out/bin/gpgparticipants-prefill
 
     wrapProgram $out/bin/gpgparticipants-filter --prefix PATH ":" \
-      "${stdenv.lib.makeBinPath [ gnupg ]}"
+      "${lib.makeBinPath [ gnupg ]}"
 
     wrapProgram $out/bin/gpgsigs --set PERL5LIB \
       ${perlPackages.makePerlPath GnuPGInterfaceRuntimeDependencies} \
       --prefix PATH ":" \
-      "${stdenv.lib.makeBinPath [ gnupg ]}"
+      "${lib.makeBinPath [ gnupg ]}"
 
     wrapProgram $out/bin/gpgwrap --prefix PATH ":" \
-      "${stdenv.lib.makeBinPath [ gnupg ]}"
+      "${lib.makeBinPath [ gnupg ]}"
 
 #    wrapProgram $out/bin/keyanalyze --set PERL5LIB \
 
     wrapProgram $out/bin/keyart --prefix PATH ":" \
-      "${stdenv.lib.makeBinPath [ gnupg ]}"
+      "${lib.makeBinPath [ gnupg ]}"
 
     wrapProgram $out/bin/keylookup --prefix PATH ":" \
-      "${stdenv.lib.makeBinPath [ gnupg ]}"
+      "${lib.makeBinPath [ gnupg ]}"
 
     wrapProgram $out/bin/pgp-clean --set PERL5LIB \
       ${perlPackages.makePerlPath GnuPGInterfaceRuntimeDependencies} \
       --prefix PATH ":" \
-      "${stdenv.lib.makeBinPath [ gnupg ]}"
+      "${lib.makeBinPath [ gnupg ]}"
 
     wrapProgram $out/bin/pgp-fixkey --set PERL5LIB \
       ${perlPackages.makePerlPath GnuPGInterfaceRuntimeDependencies} \
       --prefix PATH ":" \
-      "${stdenv.lib.makeBinPath [ gnupg ]}"
+      "${lib.makeBinPath [ gnupg ]}"
 
 #    wrapProgram $out/bin/pgpring
 
@@ -196,7 +196,7 @@ in stdenv.mkDerivation rec {
       ${with perlPackages; makePerlPath [ GD ]}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://salsa.debian.org/signing-party-team/signing-party";
     description = "A collection of several projects relating to OpenPGP";
     longDescription = ''
diff --git a/pkgs/tools/security/sigurlx/default.nix b/pkgs/tools/security/sigurlx/default.nix
new file mode 100644
index 00000000000..b6908c27422
--- /dev/null
+++ b/pkgs/tools/security/sigurlx/default.nix
@@ -0,0 +1,25 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "sigurlx";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "drsigned";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1q5vy05387qx7h4xcccvn2z2ks1kiff3mfbd2w3w0l0a4qgz74xs";
+  };
+
+  vendorSha256 = "1bp6bf99rxlyg91pn1y228q18lawpykmvkl22cydmclms0q0n238";
+
+  meta = with lib; {
+    description = "Tool to map the attack surface of web applications";
+    homepage = "https://github.com/drsigned/sigurlx";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/simple-tpm-pk11/default.nix b/pkgs/tools/security/simple-tpm-pk11/default.nix
index 2a360b4321c..4d5c020ad42 100644
--- a/pkgs/tools/security/simple-tpm-pk11/default.nix
+++ b/pkgs/tools/security/simple-tpm-pk11/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, trousers, openssl, opencryptoki, autoreconfHook, libtool }:
+{ lib, stdenv, fetchFromGitHub, trousers, openssl, opencryptoki, autoreconfHook, libtool }:
 
 stdenv.mkDerivation rec {
   pname = "simple-tpm-pk11";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Simple PKCS11 provider for TPM chips";
     longDescription = ''
       A simple library for using the TPM chip to secure SSH keys.
diff --git a/pkgs/tools/security/sipvicious/default.nix b/pkgs/tools/security/sipvicious/default.nix
new file mode 100644
index 00000000000..1167d40e432
--- /dev/null
+++ b/pkgs/tools/security/sipvicious/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+}:
+
+buildPythonApplication rec {
+  pname = "sipvicious";
+  version = "0.3.4";
+
+  src = fetchFromGitHub {
+    owner = "EnableSecurity";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-O8/9Vz/u8BoF1dfGceOJdzPPYLfkdBp2DkwA5WQ3dgo=";
+  };
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "sipvicious" ];
+
+  meta = with lib; {
+    description = " Set of tools to audit SIP based VoIP systems";
+    homepage = "https://github.com/EnableSecurity/sipvicious";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/slowhttptest/default.nix b/pkgs/tools/security/slowhttptest/default.nix
new file mode 100644
index 00000000000..5dce5d5439a
--- /dev/null
+++ b/pkgs/tools/security/slowhttptest/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "slowhttptest";
+  version = "1.8.2";
+
+  src = fetchFromGitHub {
+    owner = "shekyan";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1xv2j3hl4zj0s2cxcsvlwgridh9ap4g84g7c4918d03id15wydcx";
+  };
+
+  buildInputs = [ openssl ];
+
+  meta = with lib; {
+    description = "Application Layer DoS attack simulator";
+    homepage = "https://github.com/shekyan/slowhttptest";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/sn0int/default.nix b/pkgs/tools/security/sn0int/default.nix
index 8b99649e0c9..43a39010441 100644
--- a/pkgs/tools/security/sn0int/default.nix
+++ b/pkgs/tools/security/sn0int/default.nix
@@ -1,22 +1,34 @@
-{ lib, fetchFromGitHub, rustPlatform, libsodium, libseccomp, sqlite, pkgconfig
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, libsodium
+, libseccomp
+, sqlite
+, pkg-config
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "sn0int";
-  version = "0.19.1";
+  version = "0.21.2";
 
   src = fetchFromGitHub {
     owner = "kpcyrd";
     repo = pname;
     rev = "v${version}";
-    sha256 = "10f1wblczxlww09f4dl8i9zzgpr14jj7s329wkvm7lafmwx3qrn5";
+    sha256 = "sha256-BKdi/o/A0fJBlcKTDTCX7uGkK6QR0S9hIn0DI3CN5Gg=";
   };
 
-  cargoSha256 = "1v0q751ylsfpdjwsbl20pvn7g75w503jwjl5kn5kc8xq3g0lnp65";
+  cargoSha256 = "sha256-MeMTXwb5v4iUJQSViOraXAck7n6VlIW2Qa0qNUZWu1g=";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [
+    pkg-config
+  ];
 
-  buildInputs = [ libsodium libseccomp sqlite ];
+  buildInputs = [
+    libsodium
+    libseccomp
+    sqlite
+  ];
 
   # One of the dependencies (chrootable-https) tries to read "/etc/resolv.conf"
   # in "checkPhase", hence fails in sandbox of "nix".
@@ -25,7 +37,7 @@ rustPlatform.buildRustPackage rec {
   meta = with lib; {
     description = "Semi-automatic OSINT framework and package manager";
     homepage = "https://github.com/kpcyrd/sn0int";
-    license = licenses.gpl3;
+    license = with licenses; [ gpl3Plus ];
     maintainers = with maintainers; [ xrelkd ];
     platforms = platforms.linux;
   };
diff --git a/pkgs/tools/security/snallygaster/default.nix b/pkgs/tools/security/snallygaster/default.nix
new file mode 100644
index 00000000000..e77743d8648
--- /dev/null
+++ b/pkgs/tools/security/snallygaster/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "snallygaster";
+  version = "0.0.10";
+
+  src = fetchFromGitHub {
+    owner = "hannob";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1xd483sl94zhs7yhc52s0zrn3pj7vf5izggp4ap1d2j0lbwwcyka";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    urllib3
+    beautifulsoup4
+    dnspython
+  ];
+
+  checkInputs = with python3Packages; [
+    pytestCheckHook
+  ];
+
+  pytestFlagsArray = [
+    # we are not interested in linting the project
+    "--ignore=tests/test_codingstyle.py"
+  ];
+
+  meta = with lib; {
+    description = "Tool to scan for secret files on HTTP servers";
+    homepage = "https://github.com/hannob/snallygaster";
+    license = licenses.cc0;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/pkgs/tools/security/snow/default.nix b/pkgs/tools/security/snow/default.nix
new file mode 100644
index 00000000000..6d264c09ade
--- /dev/null
+++ b/pkgs/tools/security/snow/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "snow";
+  version = "20130616";
+
+  src = fetchurl {
+    url = "https://web.archive.org/web/20200304125913if_/http://darkside.com.au/snow/snow-${version}.tar.gz";
+    sha256 = "0r9q45y55z4i0askkxmxrx0jr1620ypd870vz0hx2a6n9skimdy0";
+  };
+
+  makeFlags = [ "CFLAGS=-O2" ];
+
+  installPhase = ''
+    install -Dm755 snow -t $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Conceal messages in ASCII text by appending whitespace to the end of lines";
+    homepage = "http://www.darkside.com.au/snow/";
+    license = licenses.apsl20;
+    maintainers = with maintainers; [ siraben ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/security/snowcrash/default.nix b/pkgs/tools/security/snowcrash/default.nix
new file mode 100644
index 00000000000..cd85ff90bf9
--- /dev/null
+++ b/pkgs/tools/security/snowcrash/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "snowcrash";
+  version = "unstable-2021-04-29";
+
+  src = fetchFromGitHub {
+    owner = "redcode-labs";
+    repo = "SNOWCRASH";
+    rev = "514cceea1ca82f44e0c8a8744280f3a16abb6745";
+    sha256 = "16p1nfi9zdlcffjyrk1phrippjqrdzf3cpc51dgdy3bfr7pds2ld";
+  };
+
+  vendorSha256 = "1xm2yjr4mqkara3yib6vgfj14ldh7r0v1vr2i0ks13l1rm54x840";
+
+  subPackages = [ "." ];
+
+  runVend = true;
+
+  postFixup = ''
+    mv $out/bin/SNOWCRASH $out/bin/${pname}
+  '';
+
+  meta = with lib; {
+    description = "Polyglot payload generator";
+    homepage = "https://github.com/redcode-labs/SNOWCRASH";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/softhsm/default.nix b/pkgs/tools/security/softhsm/default.nix
index 61afb9082d0..873cfdbbb05 100644
--- a/pkgs/tools/security/softhsm/default.nix
+++ b/pkgs/tools/security/softhsm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, botan2, libobjc, Security }:
+{ lib, stdenv, fetchurl, botan2, libobjc, Security }:
 
 stdenv.mkDerivation rec {
 
@@ -18,13 +18,13 @@ stdenv.mkDerivation rec {
     ];
 
   propagatedBuildInputs =
-    stdenv.lib.optionals stdenv.isDarwin [ libobjc Security ];
+    lib.optionals stdenv.isDarwin [ libobjc Security ];
 
   buildInputs = [ botan2 ];
 
   postInstall = "rm -rf $out/var";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.opendnssec.org/softhsm";
     description = "Cryptographic store accessible through a PKCS #11 interface";
     longDescription = "
diff --git a/pkgs/tools/security/sonar-scanner-cli/default.nix b/pkgs/tools/security/sonar-scanner-cli/default.nix
new file mode 100644
index 00000000000..95db01370b4
--- /dev/null
+++ b/pkgs/tools/security/sonar-scanner-cli/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, lib, fetchurl, unzip, jre }:
+
+let
+
+  version = "4.5.0.2216";
+
+  sonarScannerArchPackage = {
+    "x86_64-linux" = {
+      url = "https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-${version}-linux.zip";
+      sha256 = "sha256-rmvDb5l2BGV8j94Uhu2kJXwoDAHA3VncAahqGvLY3I0=";
+    };
+    "x86_64-darwin" = {
+      url = "https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-${version}-macosx.zip";
+      sha256 = "1g3lldpkrjlvwld9h82hlwclyplxpbk4q3nq59ylw4dhp26kb993";
+    };
+  };
+
+in stdenv.mkDerivation rec {
+  inherit version;
+  pname = "sonar-scanner-cli";
+
+  src = fetchurl sonarScannerArchPackage.${stdenv.hostPlatform.system};
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    mkdir -p $out/lib
+    cp -r lib/* $out/lib/
+    mkdir -p $out/bin
+    cp bin/* $out/bin/
+    mkdir -p $out/conf
+    cp conf/* $out/conf/
+  '';
+
+  fixupPhase = ''
+    substituteInPlace $out/bin/sonar-scanner \
+      --replace "\$sonar_scanner_home/jre" "${lib.getBin jre}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/SonarSource/sonar-scanner-cli";
+    description = "SonarQube Scanner used to start code analysis";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ peterromfeldhk ];
+    platforms = builtins.attrNames sonarScannerArchPackage;
+  };
+}
diff --git a/pkgs/tools/security/sops/default.nix b/pkgs/tools/security/sops/default.nix
index 8ec324b3542..1cf89143925 100644
--- a/pkgs/tools/security/sops/default.nix
+++ b/pkgs/tools/security/sops/default.nix
@@ -1,23 +1,24 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "sops";
-  version = "3.6.0";
+  version = "3.7.1";
 
   src = fetchFromGitHub {
     rev = "v${version}";
     owner = "mozilla";
     repo = pname;
-    sha256 = "01skk6vdfki4a88z0snl1pby09im406qhnsfa0d2l8gp6nz8pq6j";
+    sha256 = "0z3jcyl245yjszzjf2h6l1dwa092vxzvfmnivmwi6jvpsdcv33h1";
   };
 
-  vendorSha256 = "0475y95qma5m346ng898n80xv2rxzndx89c9ygjcvjs513yzcba2";
+  vendorSha256 = "1mnwgsbpi56ql0lbpn7dkaps96x9b1lmhlk5cd6d40da7xj616n7";
 
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/mozilla/sops";
     description = "Mozilla sops (Secrets OPerationS) is an editor of encrypted files";
+    changelog = "https://github.com/mozilla/sops/raw/v${version}/CHANGELOG.rst";
     maintainers = [ maintainers.marsam ];
     license = licenses.mpl20;
   };
diff --git a/pkgs/tools/security/spectre-meltdown-checker/default.nix b/pkgs/tools/security/spectre-meltdown-checker/default.nix
index 4d58095c43b..49aa4a2a4ca 100644
--- a/pkgs/tools/security/spectre-meltdown-checker/default.nix
+++ b/pkgs/tools/security/spectre-meltdown-checker/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchFromGitHub, makeWrapper, coreutils, binutils-unwrapped }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper, coreutils, binutils-unwrapped }:
 
 stdenv.mkDerivation rec {
   pname = "spectre-meltdown-checker";
-  version = "0.43";
+  version = "0.44";
 
   src = fetchFromGitHub {
     owner = "speed47";
     repo = "spectre-meltdown-checker";
     rev = "v${version}";
-    sha256 = "1ys5m1yvm26qjlsjpqqd33lwpb880p0ay289hmifxjjawkqddjgg";
+    sha256 = "1b47wlc52jnp2d5c7kbqnxmlm4g3cfbv25q30llv5mlmzs6d7bam";
   };
 
   prePatch = ''
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ makeWrapper ];
 
-  installPhase = with stdenv.lib; ''
+  installPhase = with lib; ''
     runHook preInstall
 
     install -Dm755 spectre-meltdown-checker.sh $out/bin/spectre-meltdown-checker
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Spectre & Meltdown vulnerability/mitigation checker for Linux";
     homepage = "https://github.com/speed47/spectre-meltdown-checker";
     license = licenses.gpl3;
diff --git a/pkgs/tools/security/srm/default.nix b/pkgs/tools/security/srm/default.nix
index 853ad4f280a..587d7782e76 100644
--- a/pkgs/tools/security/srm/default.nix
+++ b/pkgs/tools/security/srm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
 
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
     sha256 = "10sjarhprs6s4zandndg720528rcnd4xk8dl48pjj7li1q9c30vm";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Delete files securely";
     longDescription = ''
       srm (secure rm) is a command-line compatible rm(1) which
diff --git a/pkgs/tools/security/ssb/default.nix b/pkgs/tools/security/ssb/default.nix
new file mode 100644
index 00000000000..d6305e4cf4a
--- /dev/null
+++ b/pkgs/tools/security/ssb/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "ssb";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "kitabisa";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0dkd02l30461cwn5hsssnjyb9s8ww179wll3l7z5hy1hv3x6h9g1";
+  };
+
+  vendorSha256 = "1q3dxizyz9bcdfs5j2bzhl2aadhd00cvzhj202wlls0zrlb9pp4f";
+
+  meta = with lib; {
+    description = "Tool to bruteforce SSH server";
+    homepage = "https://github.com/kitabisa/ssb";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/ssdeep/default.nix b/pkgs/tools/security/ssdeep/default.nix
index 33ab4c373bc..acc617103d7 100644
--- a/pkgs/tools/security/ssdeep/default.nix
+++ b/pkgs/tools/security/ssdeep/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   pname = "ssdeep";
@@ -19,8 +19,8 @@ stdenv.mkDerivation rec {
   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 ];
+    license     = lib.licenses.gpl2;
+    platforms   = lib.platforms.unix;
+    maintainers = [ lib.maintainers.thoughtpolice ];
   };
 }
diff --git a/pkgs/tools/security/ssh-audit/default.nix b/pkgs/tools/security/ssh-audit/default.nix
index 884a3d90c4f..a7ef677759f 100644
--- a/pkgs/tools/security/ssh-audit/default.nix
+++ b/pkgs/tools/security/ssh-audit/default.nix
@@ -2,43 +2,24 @@
 
 python3Packages.buildPythonApplication rec {
   pname = "ssh-audit";
-  version = "2.2.0";
+  version = "2.4.0";
 
   src = fetchFromGitHub {
     owner = "jtesta";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1z1h9nsgfaxdnkr9dvc0yzc23b3wz436rg2fycg2glwjhhal8az7";
+    sha256 = "sha256-Xq1q/i43vZAv8BayVOdKuZ3+mJcQQ0x4Kc3WlASE6m8=";
   };
 
-  postPatch = ''
-    cp ./README.md pypi/sshaudit/
-    cp ./ssh-audit.py pypi/sshaudit/sshaudit.py
-    mv pypi/* .
-    ls -lah
-  '';
-
   checkInputs = with python3Packages; [
     pytestCheckHook
   ];
 
-  disabledTests = [
-    "test_resolve_error"
-    "test_resolve_hostname_without_records"
-    "test_resolve_ipv4"
-    "test_resolve_ipv6"
-    "test_resolve_ipv46_both"
-    "test_resolve_ipv46_order"
-    "test_invalid_host"
-    "test_invalid_port"
-    "test_not_connected_socket"
-    "test_ssh2_server_simple"
-  ];
-
   meta = with lib; {
     description = "Tool for ssh server auditing";
     homepage = "https://github.com/jtesta/ssh-audit";
     license = licenses.mit;
-    maintainers = with maintainers; [ tv ];
+    platforms = platforms.all;
+    maintainers = with maintainers; [ tv SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/security/ssh-to-pgp/default.nix b/pkgs/tools/security/ssh-to-pgp/default.nix
new file mode 100644
index 00000000000..fc07714b55b
--- /dev/null
+++ b/pkgs/tools/security/ssh-to-pgp/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, buildGoModule, gnupg }:
+
+buildGoModule rec {
+  pname = "ssh-to-pgp";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "Mic92";
+    repo = "ssh-to-pgp";
+    rev = version;
+    sha256 = "sha256-5Wg0ItAkAb0zlhzcuDT9o0XIIbG9kqk4mIYb6hSJlsI=";
+  };
+
+  vendorSha256 = "sha256-OMWiJ1n8ynvIGcmotjuGGsRuAidYgVo5Y5JjrAw8fpc=";
+
+  checkInputs = [ gnupg ];
+  checkPhase = ''
+    HOME=$TMPDIR go test .
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Convert ssh private keys to PGP";
+    homepage = "https://github.com/Mic92/ssh-to-pgp";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mic92 ];
+  };
+}
diff --git a/pkgs/tools/security/sshchecker/default.nix b/pkgs/tools/security/sshchecker/default.nix
new file mode 100644
index 00000000000..5dfc37dcf6c
--- /dev/null
+++ b/pkgs/tools/security/sshchecker/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "sshchecker";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "lazytools";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "139b850h1w0392k8jcgj22jscsl2l60b5kk0n8378b6g57ikmis0";
+  };
+
+  vendorSha256 = "19hdaf7d6lvwrl5rc1srrjsjx57g25cy4lvw0vvs6j52impdk6ak";
+
+  meta = with lib; {
+    description = "Dedicated SSH brute-forcing tool";
+    longDescription = ''
+      sshchecker is a fast dedicated SSH brute-forcing tool to check
+      SSH login on the giving IP list.
+    '';
+    homepage = "https://github.com/lazytools/sshchecker";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/sshguard/default.nix b/pkgs/tools/security/sshguard/default.nix
index bad1c9fd16d..a45a57eff0b 100644
--- a/pkgs/tools/security/sshguard/default.nix
+++ b/pkgs/tools/security/sshguard/default.nix
@@ -1,22 +1,22 @@
-{ stdenv, fetchurl, autoreconfHook, yacc, flex}:
+{ lib, stdenv, fetchurl, autoreconfHook, bison, flex}:
 
 stdenv.mkDerivation rec {
-  version = "2.4.0";
+  version = "2.4.2";
   pname = "sshguard";
 
   src = fetchurl {
     url = "mirror://sourceforge/sshguard/${pname}-${version}.tar.gz";
-    sha256 = "1h6n2xyh58bshplbdqlr9rbnf3lz7nydnq5m2hkq15is3c4s8p06";
+    sha256 = "1s1prqdbxjrd1n3j4x8ggy9gl2j0ax6xhkzcvyzajw7awmvbfw17";
   };
 
   doCheck = true;
 
-  nativeBuildInputs = [ autoreconfHook yacc flex ];
+  nativeBuildInputs = [ autoreconfHook bison flex ];
 
   configureFlags = [ "--sysconfdir=/etc" ];
 
-  meta = with stdenv.lib; {
-    description = "SSHGuard protects hosts from brute-force attacks";
+  meta = with lib; {
+    description = "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.
diff --git a/pkgs/tools/security/sshuttle/default.nix b/pkgs/tools/security/sshuttle/default.nix
index 6f620904872..959712488a2 100644
--- a/pkgs/tools/security/sshuttle/default.nix
+++ b/pkgs/tools/security/sshuttle/default.nix
@@ -1,4 +1,5 @@
-{ stdenv
+{ lib
+, stdenv
 , python3Packages
 , makeWrapper
 , coreutils
@@ -10,27 +11,32 @@
 
 python3Packages.buildPythonApplication rec {
   pname = "sshuttle";
-  version = "1.0.3";
+  version = "1.0.5";
 
   src = python3Packages.fetchPypi {
     inherit pname version;
-    sha256 = "0fff1c88669a20bb6a4e7331960673a3a02a2e04ff163e4c9299496646edcf61";
+    sha256 = "fd8c691aac2cb80933aae7f94d9d9e271a820efc5c48e73408f1a90da426a1bd";
   };
 
   patches = [ ./sudo.patch ];
 
-  nativeBuildInputs = [ makeWrapper python3Packages.setuptools_scm ];
+  postPatch = ''
+    substituteInPlace setup.cfg \
+      --replace '--cov=sshuttle --cov-branch --cov-report=term-missing' ""
+  '';
+
+  nativeBuildInputs = [ makeWrapper python3Packages.setuptools-scm ];
 
-  checkInputs = with python3Packages; [ mock pytest pytestcov pytestrunner flake8 ];
+  propagatedBuildInputs = [ python3Packages.psutil ];
 
-  runtimeDeps = [ coreutils openssh procps ] ++ stdenv.lib.optionals stdenv.isLinux [ iptables nettools ];
+  checkInputs = with python3Packages; [ mock pytestCheckHook flake8 ];
 
   postInstall = ''
     wrapProgram $out/bin/sshuttle \
-      --prefix PATH : "${stdenv.lib.makeBinPath runtimeDeps}" \
+      --prefix PATH : "${lib.makeBinPath ([ coreutils openssh procps ] ++ lib.optionals stdenv.isLinux [ iptables nettools ])}" \
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/sshuttle/sshuttle/";
     description = "Transparent proxy server that works as a poor man's VPN";
     longDescription = ''
@@ -38,8 +44,7 @@ python3Packages.buildPythonApplication rec {
       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;
+    license = licenses.lgpl21;
     maintainers = with maintainers; [ domenkozar carlosdagos ];
-    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/security/sslscan/default.nix b/pkgs/tools/security/sslscan/default.nix
index 68efa7a17d1..4bd7a3ff221 100644
--- a/pkgs/tools/security/sslscan/default.nix
+++ b/pkgs/tools/security/sslscan/default.nix
@@ -1,25 +1,28 @@
-{ stdenv, fetchFromGitHub, openssl }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, openssl
+}:
 
 stdenv.mkDerivation rec {
   pname = "sslscan";
-  version = "1.11.13";
+  version = "2.0.10";
 
   src = fetchFromGitHub {
     owner = "rbsec";
     repo = "sslscan";
-    rev = "${version}-rbsec";
-    sha256 = "0sa8iw91wi3515lw761j84wagab1x9rxr0mn8m08qj300z2044yk";
+    rev = version;
+    sha256 = "sha256-L6cNmvR6zy2tkMHh+LBsQ3VZDUr0tD5AlOEj+dTLV5k=";
   };
 
   buildInputs = [ openssl ];
 
-  makeFlags = [ "PREFIX=$(out)" "CC=cc" ];
+  makeFlags = [ "PREFIX=$(out)" "CC=${stdenv.cc.targetPrefix}cc" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tests SSL/TLS services and discover supported cipher suites";
     homepage = "https://github.com/rbsec/sslscan";
-    license = licenses.gpl3;
+    license = licenses.gpl3Only;
     maintainers = with maintainers; [ fpletz globin ];
-    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/security/ssss/default.nix b/pkgs/tools/security/ssss/default.nix
index bd7de72e6be..61d10111120 100644
--- a/pkgs/tools/security/ssss/default.nix
+++ b/pkgs/tools/security/ssss/default.nix
@@ -1,28 +1,45 @@
-{ stdenv, fetchurl, gmp }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, gmp
+, installShellFiles
+}:
 
-stdenv.mkDerivation {
-  name = "ssss-0.5";
+stdenv.mkDerivation rec {
+  pname = "ssss";
+  version = "0.5.7";
 
-  src = fetchurl {
-    url = "http://point-at-infinity.org/ssss/ssss-0.5.tar.gz";
-    sha256 = "15grn2fp1x8p92kxkwbmsx8rz16g93y9grl3hfqbh1jn21ama5jx";
+  src = fetchFromGitHub {
+    owner = "MrJoy";
+    repo = pname;
+    rev = "releases%2Fv${version}";
+    sha256 = "18r1hwch6nq6gjijavr4pvrxz2plrlrvdx8ssqhdj2vmqvlqwbvd";
   };
 
-  buildInputs = [ gmp ];
+  nativeBuildInputs = [
+    installShellFiles
+  ];
 
-  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
-    '';
+  buildInputs = [
+    gmp
+  ];
 
-  meta = {
+  preBuild = ''
+    sed -e s@/usr/@$out/@g -i Makefile
+    cp ssss.manpage.xml ssss.1
+    mkdir -p $out/bin
+    echo -e 'install:\n\tcp ssss-combine ssss-split '"$out"'/bin' >>Makefile
+  '';
+
+  postInstall = ''
+    installManPage ssss.1
+  '';
+
+  meta = with lib; {
     description = "Shamir Secret Sharing Scheme";
     homepage = "http://point-at-infinity.org/ssss/";
-    platforms = stdenv.lib.platforms.unix;
-    license = stdenv.lib.licenses.gpl2;
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/tools/security/steghide/default.nix b/pkgs/tools/security/steghide/default.nix
deleted file mode 100644
index 5ac40e0a047..00000000000
--- a/pkgs/tools/security/steghide/default.nix
+++ /dev/null
@@ -1,30 +0,0 @@
-{ 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/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc34.patch b/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc34.patch
deleted file mode 100644
index 373316c7840..00000000000
--- a/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc34.patch
+++ /dev/null
@@ -1,42 +0,0 @@
---- 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/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc4.patch b/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc4.patch
deleted file mode 100644
index a8df1735e9d..00000000000
--- a/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc4.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-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/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc43.patch b/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc43.patch
deleted file mode 100644
index ca66b9c544f..00000000000
--- a/pkgs/tools/security/steghide/patches/steghide-0.5.1-gcc43.patch
+++ /dev/null
@@ -1,349 +0,0 @@
---- 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/pkgs/tools/security/stegseek/default.nix b/pkgs/tools/security/stegseek/default.nix
new file mode 100644
index 00000000000..f898b5eab0e
--- /dev/null
+++ b/pkgs/tools/security/stegseek/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv
+, cmake
+, fetchFromGitHub
+, libjpeg
+, libmcrypt
+, libmhash
+, libtool
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "stegseek";
+  version = "0.6";
+
+  src = fetchFromGitHub {
+    owner = "RickdeJager";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-B5oJffYOYfsH0YRq/Bq0ciIlCsCONyScFBjP7a1lIzo=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [
+    libjpeg
+    libmcrypt
+    libmhash
+    libtool
+    zlib
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Tool to crack steganography";
+    longDescription = ''
+      Stegseek is a lightning fast steghide cracker that can be
+      used to extract hidden data from files.
+    '';
+    homepage = "https://github.com/RickdeJager/stegseek";
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/step-ca/default.nix b/pkgs/tools/security/step-ca/default.nix
index e5574be8ab9..f72f3c978ff 100644
--- a/pkgs/tools/security/step-ca/default.nix
+++ b/pkgs/tools/security/step-ca/default.nix
@@ -1,25 +1,55 @@
-{ lib, buildGoPackage, fetchFromGitHub }:
+{ stdenv
+, lib
+, fetchFromGitHub
+, buildGoModule
+, coreutils
+, pcsclite
+, PCSC
+, pkg-config
+, hsmSupport ? true
+}:
 
-buildGoPackage rec {
+buildGoModule rec {
   pname = "step-ca";
-  version = "0.13.3";
-
-  goPackagePath = "github.com/smallstep/certificates";
+  version = "0.15.15";
 
   src = fetchFromGitHub {
     owner = "smallstep";
     repo = "certificates";
     rev = "v${version}";
-    sha256 = "1i42j7v5a5qqqb9ng8irblfyzykhyws0394q3zac290ymjijxbnq";
+    sha256 = "sha256-YYYpMHEis/zoRsdwW70X8zn0FMsW+2vMYdlWxr3qqzY==";
   };
 
-  goDeps = ./deps.nix;
+  vendorSha256 = "sha256-mjj+70/ioqcchB3X5vZPb0Oa7lA/qKh5zEpidT0jrEs=";
+
+  nativeBuildInputs = lib.optionals hsmSupport [ pkg-config ];
+
+  buildInputs =
+    lib.optionals (hsmSupport && stdenv.isLinux) [ pcsclite ]
+    ++ lib.optionals (hsmSupport && stdenv.isDarwin) [ PCSC ];
+
+  postPatch = ''
+    substituteInPlace systemd/step-ca.service --replace "/bin/kill" "${coreutils}/bin/kill"
+  '';
+
+  preBuild = ''
+    ${lib.optionalString (!hsmSupport) "export CGO_ENABLED=0"}
+  '';
+
+  postInstall = ''
+    install -Dm444 -t $out/lib/systemd/system systemd/step-ca.service
+  '';
+
+  # Tests fail on darwin with
+  # panic: httptest: failed to listen on a port: listen tcp6 [::1]:0: bind: operation not permitted [recovered]
+  # probably some sandboxing issue
+  doCheck = stdenv.isLinux;
 
   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 ];
+    maintainers = with maintainers; [ cmcdragonkai mohe2015 ];
     platforms = platforms.linux ++ platforms.darwin;
   };
 }
diff --git a/pkgs/tools/security/step-ca/deps.nix b/pkgs/tools/security/step-ca/deps.nix
deleted file mode 100644
index 07607b6f65d..00000000000
--- a/pkgs/tools/security/step-ca/deps.nix
+++ /dev/null
@@ -1,291 +0,0 @@
-# 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/pkgs/tools/security/step-cli/default.nix b/pkgs/tools/security/step-cli/default.nix
index d696b560f6d..c91a83c0a0d 100644
--- a/pkgs/tools/security/step-cli/default.nix
+++ b/pkgs/tools/security/step-cli/default.nix
@@ -1,19 +1,31 @@
-{ lib, buildGoPackage, fetchFromGitHub }:
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
 
-buildGoPackage rec {
+buildGoModule rec {
   pname = "step-cli";
-  version = "0.13.3";
-
-  goPackagePath = "github.com/smallstep/cli";
+  version = "0.16.1";
 
   src = fetchFromGitHub {
     owner = "smallstep";
     repo = "cli";
     rev = "v${version}";
-    sha256 = "0b5hk9a8yq1nyh8m1gmf28yiha95xwsc4dk321g84hvai7g47pbr";
+    sha256 = "sha256-gMXvHPqWvaZmzWiWrxlknaMkUraS64yrKl+RzAF7c4I=";
   };
 
-  goDeps = ./deps.nix;
+  ldflags = [
+    "-w"
+    "-s"
+    "-X main.Version=${version}"
+  ];
+
+  preCheck = ''
+    # Tries to connect to smallstep.com
+    rm command/certificate/remote_test.go
+  '';
+
+  vendorSha256 = "sha256-WF2UD0LwzCMkoW1EfcjV+9ZboPp1oWhmsSEryj13Kg0=";
 
   meta = with lib; {
     description = "A zero trust swiss army knife for working with X509, OAuth, JWT, OATH OTP, etc";
diff --git a/pkgs/tools/security/step-cli/deps.nix b/pkgs/tools/security/step-cli/deps.nix
deleted file mode 100644
index bae1ba070a6..00000000000
--- a/pkgs/tools/security/step-cli/deps.nix
+++ /dev/null
@@ -1,453 +0,0 @@
-# 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/pkgs/tools/security/stoken/default.nix b/pkgs/tools/security/stoken/default.nix
index 22dc5e476e7..f5f733d70b9 100644
--- a/pkgs/tools/security/stoken/default.nix
+++ b/pkgs/tools/security/stoken/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoconf, automake, libtool, pkgconfig
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, pkg-config
 , libxml2, nettle
 , withGTK3 ? true, gtk3 }:
 
@@ -20,13 +20,13 @@ stdenv.mkDerivation rec {
     autoconf
   '';
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [
     autoconf automake libtool
     libxml2 nettle
-  ] ++ stdenv.lib.optional withGTK3 gtk3;
+  ] ++ lib.optional withGTK3 gtk3;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Software Token for Linux/UNIX";
     homepage = "https://github.com/cernekee/stoken";
     license = licenses.lgpl21Plus;
diff --git a/pkgs/tools/security/stricat/default.nix b/pkgs/tools/security/stricat/default.nix
index 28c462cbb0a..bdd7d18923f 100644
--- a/pkgs/tools/security/stricat/default.nix
+++ b/pkgs/tools/security/stricat/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "stricat";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "1axg8r4g5n5kdqj5013pgck80nni3z172xkg506vz4zx1zcmrm4r";
   };
 
-  buildFlags = [ "CC=cc" ];
+  buildFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
 
   installPhase = ''
     mkdir -p $out/bin
@@ -19,8 +19,8 @@ stdenv.mkDerivation rec {
   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 ];
+    license     = lib.licenses.bsd3;
+    platforms   = lib.platforms.unix;
+    maintainers = [ lib.maintainers.thoughtpolice ];
   };
 }
diff --git a/pkgs/tools/security/su-exec/default.nix b/pkgs/tools/security/su-exec/default.nix
index 8ff33ee1ec9..0e26d2430cb 100644
--- a/pkgs/tools/security/su-exec/default.nix
+++ b/pkgs/tools/security/su-exec/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "su-exec";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
     cp -a su-exec $out/bin/su-exec
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "switch user and group id and exec";
     homepage    = "https://github.com/ncopa/su-exec";
     license     = licenses.mit;
diff --git a/pkgs/tools/security/subjs/default.nix b/pkgs/tools/security/subjs/default.nix
new file mode 100644
index 00000000000..1b7986c0a77
--- /dev/null
+++ b/pkgs/tools/security/subjs/default.nix
@@ -0,0 +1,32 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "subjs";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "lc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "01cip5rf35dnh3l325p03y6axyqdpf48ry4zcwiyd7hlfsglbk3j";
+  };
+
+  vendorSha256 = "1y01k8pvv7y9zb15wbk068cvkx0g83484jak2dvcvghqcf5j1fr1";
+
+  buildFlagsArray = [ "-ldflags=-s -w -X main.AppVersion=${version}" ];
+
+  meta = with lib; {
+    description = "Fetcher for Javascript files";
+    longDescription = ''
+      subjs fetches Javascript files from a list of URLs or subdomains.
+      Analyzing Javascript files can help you find undocumented endpoints,
+      secrets and more.
+    '';
+    homepage = "https://github.com/lc/subjs";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/sudo/default.nix b/pkgs/tools/security/sudo/default.nix
index e05374575d2..5e308fd25ca 100644
--- a/pkgs/tools/security/sudo/default.nix
+++ b/pkgs/tools/security/sudo/default.nix
@@ -1,4 +1,11 @@
-{ stdenv, fetchurl, coreutils, pam, groff, sssd
+{ lib
+, stdenv
+, fetchurl
+, coreutils
+, pam
+, groff
+, sssd
+, nixosTests
 , sendmailPath ? "/run/wrappers/bin/sendmail"
 , withInsults ? false
 , withSssd ? false
@@ -6,11 +13,11 @@
 
 stdenv.mkDerivation rec {
   pname = "sudo";
-  version = "1.8.31p1";
+  version = "1.9.7";
 
   src = fetchurl {
     url = "https://www.sudo.ws/dist/${pname}-${version}.tar.gz";
-    sha256 = "1n0mdmgcs92af34xxsnsh1arrngymhdmwd9srjgjbk65q7xzsg67";
+    sha256 = "sha256-K758LWaZuE2VDvmkPwnU2We4vCRLc7wJXEICBo3b5Uk=";
   };
 
   prePatch = ''
@@ -27,26 +34,26 @@ stdenv.mkDerivation rec {
     "--with-iologdir=/var/log/sudo-io"
     "--with-sendmail=${sendmailPath}"
     "--enable-tmpfiles.d=no"
-  ] ++ stdenv.lib.optional withInsults [
+  ] ++ lib.optional withInsults [
     "--with-insults"
     "--with-all-insults"
-  ] ++ stdenv.lib.optional withSssd [
+  ] ++ lib.optional withSssd [
     "--with-sssd"
     "--with-sssd-lib=${sssd}/lib"
   ];
 
   configureFlagsArray = [
-    "--with-passprompt=[sudo] password for %p: "  # intentional trailing space
+    "--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=/"
+      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 ];
@@ -56,28 +63,29 @@ stdenv.mkDerivation rec {
 
   doCheck = false; # needs root
 
-  postInstall =
-    ''
-    rm -f $out/share/doc/sudo/ChangeLog
-    '';
+  postInstall = ''
+    rm $out/share/doc/sudo/ChangeLog
+  '';
+
+  passthru.tests = { inherit (nixosTests) sudo; };
 
   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.
+        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 ];
+    maintainers = with lib.maintainers; [ eelco delroth ];
 
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/security/sudolikeaboss/default.nix b/pkgs/tools/security/sudolikeaboss/default.nix
index 97db4a28c45..242da1a67bb 100644
--- a/pkgs/tools/security/sudolikeaboss/default.nix
+++ b/pkgs/tools/security/sudolikeaboss/default.nix
@@ -1,9 +1,9 @@
 # This file was generated by go2nix, then modified by hand for Darwin support.
-{ stdenv, buildGoPackage, fetchFromGitHub, fixDarwinDylibNames, darwin }:
+{ lib, buildGoPackage, fetchFromGitHub, darwin }:
 
 buildGoPackage rec {
   pname = "sudolikeaboss-unstable";
-  version = "20161127-${stdenv.lib.strings.substring 0 7 rev}";
+  version = "20161127-${lib.strings.substring 0 7 rev}";
   rev = "2d9afe19f872c9f433d476e57ee86169781b164c";
 
   goPackagePath = "github.com/ravenac95/sudolikeaboss";
@@ -17,13 +17,11 @@ buildGoPackage rec {
 
   goDeps = ./deps.nix;
 
-  propagatedBuildInputs = with darwin.apple_sdk.frameworks; [
+  buildInputs = with darwin.apple_sdk.frameworks; [
     Cocoa
-    fixDarwinDylibNames
   ];
 
-  meta = with stdenv.lib; {
-    inherit version;
+  meta = with lib; {
     inherit (src.meta) homepage;
     description = "Get 1password access from iterm2";
     license = licenses.mit;
diff --git a/pkgs/tools/security/super/0001-Remove-references-to-dropped-sys_nerr-sys_errlist-fo.patch b/pkgs/tools/security/super/0001-Remove-references-to-dropped-sys_nerr-sys_errlist-fo.patch
new file mode 100644
index 00000000000..048486caafd
--- /dev/null
+++ b/pkgs/tools/security/super/0001-Remove-references-to-dropped-sys_nerr-sys_errlist-fo.patch
@@ -0,0 +1,51 @@
+From 86e37c1c09c23924c4e055a3d4b8c79f19cd0599 Mon Sep 17 00:00:00 2001
+From: Maximilian Bosch <maximilian@mbosch.me>
+Date: Mon, 10 Aug 2020 21:33:39 +0200
+Subject: [PATCH] Remove references to dropped `sys_nerr` & `sys_errlist` for
+ `glibc-2.32` compat
+
+According to the release-notes[1], `strerror(3)` should be used. This is
+already the case, however the source tries to be backwards-compatible by
+supporting `sys_nerr` & `sys_errlist` which breaks compilation
+unfortunately.
+
+Simply using `strerror` fixes the problems.
+
+[1] https://sourceware.org/pipermail/libc-announce/2020/000029.html
+---
+ utils.c | 12 +-----------
+ 1 file changed, 1 insertion(+), 11 deletions(-)
+
+diff --git a/utils.c b/utils.c
+index 3ec70b6..430f027 100644
+--- a/utils.c
++++ b/utils.c
+@@ -2003,7 +2003,6 @@ int n;
+ 
+ #ifdef HAVE_SYS_ERRLIST
+     extern char *sys_errlist[];
+-    extern int sys_nerr;
+ #endif
+ 
+ /*
+@@ -2019,16 +2018,7 @@ int errnum;
+     sprintf(buf, "Error %d", errnum);
+     return buf;
+ #else
+-    if (errnum < 0 || errnum > sys_nerr) {
+-	sprintf(buf, "Error %d (!)", errnum);
+-	return buf;
+-    } else {
+-#ifdef HAVE_STRERROR
+-	return strerror(errnum);
+-#else
+-	return sys_errlist[errnum];
+-#endif
+-    }
++    return strerror(errnum);
+ #endif
+ }
+ 
+-- 
+2.25.4
+
diff --git a/pkgs/tools/security/super/default.nix b/pkgs/tools/security/super/default.nix
index 07051731069..f8e78c66979 100644
--- a/pkgs/tools/security/super/default.nix
+++ b/pkgs/tools/security/super/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch }:
+{ lib, stdenv, fetchurl, fetchpatch }:
 
 stdenv.mkDerivation rec {
   name = "super-3.30.0";
@@ -17,6 +17,7 @@ stdenv.mkDerivation rec {
   '';
 
   patches = [
+    ./0001-Remove-references-to-dropped-sys_nerr-sys_errlist-fo.patch
     (fetchpatch {
       name = "CVE-2014-0470.patch";
       url = "https://salsa.debian.org/debian/super/raw/debian/3.30.0-7/debian/patches/14-Fix-unchecked-setuid-call.patch";
@@ -43,6 +44,6 @@ stdenv.mkDerivation rec {
         in /etc/super.tab); and 2) “setuid”, which allows root to
         execute a command under a different uid.
       '';
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/security/swtpm/default.nix b/pkgs/tools/security/swtpm/default.nix
new file mode 100644
index 00000000000..2bd0326d4d9
--- /dev/null
+++ b/pkgs/tools/security/swtpm/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, libtasn1, openssl, fuse, glib, libseccomp
+, libtpms
+, unixtools, expect, socat
+, gnutls
+, perl
+, python3, python3Packages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "swtpm";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "stefanberger";
+    repo = "swtpm";
+    rev = "v${version}";
+    sha256 = "sha256-KY5V4z/8I15ePjorgZueNahlD/xvFa3tDarA0tuRxFk=";
+  };
+
+  pythonPath = with python3Packages; requiredPythonModules [
+    setuptools
+    cryptography
+  ];
+
+  patches = [
+    # upstream looks for /usr directory in $prefix to check
+    # whether or not to proceed with installation of python
+    # tools (swtpm_setup utility).
+    ./python-installation.patch
+  ];
+
+  prePatch = ''
+    patchShebangs src/swtpm_setup/setup.py
+    patchShebangs samples/setup.py
+  '';
+
+  nativeBuildInputs = [
+    pkg-config unixtools.netstat expect socat
+    perl # for pod2man
+    autoreconfHook
+    python3
+  ];
+  buildInputs = [
+    libtpms
+    openssl libtasn1 libseccomp
+    fuse glib
+    gnutls
+    python3.pkgs.wrapPython
+  ];
+  propagatedBuildInputs = pythonPath;
+
+  configureFlags = [
+    "--with-cuse"
+  ];
+
+  postInstall = ''
+    wrapPythonProgramsIn $out/bin "$out $pythonPath"
+    wrapPythonProgramsIn $out/share/swtpm "$out $pythonPath"
+  '';
+
+  enableParallelBuilding = true;
+
+  outputs = [ "out" "man" ];
+
+  meta = with lib; {
+    description = "Libtpms-based TPM emulator";
+    homepage = "https://github.com/stefanberger/swtpm";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.baloo ];
+  };
+}
diff --git a/pkgs/tools/security/swtpm/python-installation.patch b/pkgs/tools/security/swtpm/python-installation.patch
new file mode 100644
index 00000000000..d2689f051c5
--- /dev/null
+++ b/pkgs/tools/security/swtpm/python-installation.patch
@@ -0,0 +1,60 @@
+commit 353794feb596d95e3f8893e39b174c5a89d1013e
+Author: Arthur Gautier <baloo@superbaloo.net>
+Date:   Wed Feb 17 02:27:40 2021 +0000
+
+    python-install
+    
+    Signed-off-by: Arthur Gautier <baloo@superbaloo.net>
+
+diff --git a/samples/Makefile.am b/samples/Makefile.am
+index 7d69bf8..1803bb9 100644
+--- a/samples/Makefile.am
++++ b/samples/Makefile.am
+@@ -39,19 +39,9 @@ python-uninstall:
+ 	$(PIP3) uninstall -y $(PY_PACKAGE_NAME)
+ 
+ if PYTHON_INSTALLATION
+-install-exec-local: $(PY_PACKAGE)
+-	@if ! test $(findstring /usr, "$(DESTDIR)$(bindir)"); then \
+-		echo "Warning: Not installing python package to $(DESTDIR)$(bindir)"; \
+-	else \
+-		$(MAKE) python-install; \
+-	fi
++install-exec-local: python-install
+ 
+-uninstall-local:
+-	@if ! test $(findstring /usr, "$(DESTDIR)$(bindir)"); then \
+-		echo "Cleanup for distcheck build not implemented" ; \
+-	else \
+-		$(MAKE) python-uninstall; \
+-	fi
++uninstall-local: python-uninstall
+ endif
+ 
+ 
+diff --git a/src/swtpm_setup/Makefile.am b/src/swtpm_setup/Makefile.am
+index 529eefe..533b1b3 100644
+--- a/src/swtpm_setup/Makefile.am
++++ b/src/swtpm_setup/Makefile.am
+@@ -29,19 +29,9 @@ python-uninstall:
+ 	$(PIP3) uninstall -y $(PY_PACKAGE_NAME)
+ 
+ if PYTHON_INSTALLATION
+-install-exec-local: $(PY_PACKAGE)
+-	@if ! test $(findstring /usr, "$(DESTDIR)$(bindir)"); then \
+-		echo "Warning: Not installing python package to $(DESTDIR)$(bindir)"; \
+-	else \
+-		$(MAKE) python-install; \
+-	fi
++install-exec-local: python-install
+ 
+-uninstall-local:
+-	@if ! test $(findstring /usr, "$(DESTDIR)$(bindir)"); then \
+-		echo "Cleanup for distcheck build not implemented" ; \
+-	else \
+-		$(MAKE) python-uninstall; \
+-	fi
++uninstall-local: python-uninstall
+ endif
+ 
+ # for out-of-tree builds we need to clean up
diff --git a/pkgs/tools/security/tboot/default.nix b/pkgs/tools/security/tboot/default.nix
index 38f467fb441..9c5d44c6d60 100644
--- a/pkgs/tools/security/tboot/default.nix
+++ b/pkgs/tools/security/tboot/default.nix
@@ -1,36 +1,33 @@
-{ stdenv, fetchurl, trousers, openssl, zlib }:
+{ lib, stdenv, fetchurl, openssl, perl, trousers, zlib }:
 
 stdenv.mkDerivation rec {
   pname = "tboot";
-  version = "1.9.8";
+  version = "1.10.1";
 
   src = fetchurl {
     url = "mirror://sourceforge/tboot/${pname}-${version}.tar.gz";
-    sha256 = "06f0ggl6vrb5ghklblvh2ixgmmjv31rkp1vfj9qm497iqwq9ac00";
+    sha256 = "18bnkwnlk16cc20nysqfcjx006idi7jmmhahk8vk09w458bhaajg";
   };
 
-  patches = [ ./tboot-add-well-known-secret-option-to-lcp_writepol.patch ];
-
-  buildInputs = [ trousers openssl zlib ];
+  buildInputs = [ openssl trousers zlib ];
 
   enableParallelBuilding = true;
 
-  hardeningDisable = [ "pic" "stackprotector" ];
-
-  NIX_CFLAGS_COMPILE = [ "-Wno-error=address-of-packed-member" ];
+  preConfigure = ''
+    substituteInPlace tboot/Makefile --replace /usr/bin/perl ${perl}/bin/perl
 
-  configurePhase = ''
-    for a in lcptools utils tb_polgen; do
-      substituteInPlace $a/Makefile --replace /usr/sbin /sbin
+    for a in lcptools-v2 tb_polgen utils; do
+      substituteInPlace "$a/Makefile" --replace /usr/sbin /sbin
     done
     substituteInPlace docs/Makefile --replace /usr/share /share
   '';
 
   installFlags = [ "DESTDIR=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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/";
+    changelog   = "https://sourceforge.net/p/tboot/code/ci/v${version}/tree/CHANGELOG";
     license     = licenses.bsd3;
     maintainers = with maintainers; [ ak ];
     platforms   = [ "x86_64-linux" "i686-linux" ];
diff --git a/pkgs/tools/security/tboot/tboot-add-well-known-secret-option-to-lcp_writepol.patch b/pkgs/tools/security/tboot/tboot-add-well-known-secret-option-to-lcp_writepol.patch
deleted file mode 100644
index a16ba9f4fba..00000000000
--- a/pkgs/tools/security/tboot/tboot-add-well-known-secret-option-to-lcp_writepol.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-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/pkgs/tools/security/tcpcrypt/default.nix b/pkgs/tools/security/tcpcrypt/default.nix
index a6eb09fd2c5..eb889cfef16 100644
--- a/pkgs/tools/security/tcpcrypt/default.nix
+++ b/pkgs/tools/security/tcpcrypt/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchFromGitHub, autoreconfHook
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
 , openssl
 , libcap, libpcap, libnfnetlink, libnetfilter_conntrack, libnetfilter_queue
 }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   pname = "tcpcrypt";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
     sha256 = "0a015rlyvagz714pgwr85f8gjq1fkc0il7d7l39qcgxrsp15b96w";
   };
 
-  postUnpack = ''mkdir -vp $sourceRoot/m4'';
+  postUnpack = "mkdir -vp $sourceRoot/m4";
 
   outputs = [ "bin" "dev" "out" ];
   nativeBuildInputs = [ autoreconfHook ];
diff --git a/pkgs/tools/security/teler/default.nix b/pkgs/tools/security/teler/default.nix
new file mode 100644
index 00000000000..a4bcc87eedf
--- /dev/null
+++ b/pkgs/tools/security/teler/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "teler";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "kitabisa";
+    repo = "teler";
+    rev = "v${version}";
+    sha256 = "sha256-i4106PtoCJt5CY9ahczZYe9GufBkaZS+9Peh0IY9r1M=";
+  };
+
+  vendorSha256 = "sha256-TQjwPem+RMuoF5T02CL/CTvBS6W7Q786gTvYUFIvxjE=";
+
+  preBuild = ''
+    buildFlagsArray+=("-ldflags" "-s -w -X ktbs.dev/teler/common.Version=${version}")
+  '';
+
+  # test require internet access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Real-time HTTP Intrusion Detection";
+    longDescription = ''
+      teler is an real-time intrusion detection and threat alert
+      based on web log that runs in a terminal with resources that
+      we collect and provide by the community.
+    '';
+    homepage = "https://github.com/kitabisa/teler";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/terrascan/default.nix b/pkgs/tools/security/terrascan/default.nix
new file mode 100644
index 00000000000..d3af5e368f5
--- /dev/null
+++ b/pkgs/tools/security/terrascan/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "terrascan";
+  version = "1.8.1";
+
+  src = fetchFromGitHub {
+    owner = "accurics";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-eCkinYJtZNf5Fo+LXu01cHRInA9CfDONvt1OIs3XJSk=";
+  };
+
+  vendorSha256 = "1fqk9dpbfz97jwx1m54a8q67g95n5w7m1bxb7g9gkzk98f1zzv3r";
+
+  # Tests want to download a vulnerable Terraform project
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Detect compliance and security violations across Infrastructure";
+    longDescription = ''
+      Detect compliance and security violations across Infrastructure as Code to
+      mitigate risk before provisioning cloud native infrastructure. It contains
+      500+ polices and support for Terraform and Kubernetes.
+    '';
+    homepage = "https://github.com/accurics/terrascan";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/thc-hydra/default.nix b/pkgs/tools/security/thc-hydra/default.nix
index f83d2675c6a..f60d5374648 100644
--- a/pkgs/tools/security/thc-hydra/default.nix
+++ b/pkgs/tools/security/thc-hydra/default.nix
@@ -1,15 +1,15 @@
 { stdenv, lib, fetchFromGitHub, zlib, openssl, ncurses, libidn, pcre, libssh, libmysqlclient, postgresql
-, withGUI ? false, makeWrapper, pkgconfig, gtk2 }:
+, withGUI ? false, makeWrapper, pkg-config, gtk2 }:
 
 stdenv.mkDerivation rec {
   pname = "thc-hydra";
-  version = "9.1";
+  version = "9.2";
 
   src = fetchFromGitHub {
     owner = "vanhauser-thc";
     repo = "thc-hydra";
     rev = "v${version}";
-    sha256 = "1533h9z5jdlazwy0z7ll2753i507wq55by7rm9lh6y59889p0hps";
+    sha256 = "sha256-V9rr5fbJWm0pa+Kp8g95XvLPo/uWcDwyU2goImnIq58=";
   };
 
   postPatch = let
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
       --replace "-lcurses" "-lncurses"
   '';
 
-  nativeBuildInputs = lib.optionals withGUI [ pkgconfig makeWrapper ];
+  nativeBuildInputs = lib.optionals withGUI [ pkg-config makeWrapper ];
 
   buildInputs = [
     zlib openssl ncurses libidn pcre libssh libmysqlclient postgresql
@@ -38,7 +38,7 @@ stdenv.mkDerivation rec {
       --add-flags --hydra-path --add-flags "$out/bin/hydra"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A very fast network logon cracker which support many different services";
     homepage = "https://www.thc.org/thc-hydra/";
     license = licenses.agpl3;
diff --git a/pkgs/tools/security/thc-ipv6/default.nix b/pkgs/tools/security/thc-ipv6/default.nix
new file mode 100644
index 00000000000..6e7f4fb2891
--- /dev/null
+++ b/pkgs/tools/security/thc-ipv6/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, libpcap, openssl, libnetfilter_queue, libnfnetlink }:
+stdenv.mkDerivation rec {
+  pname = "thc-ipv6";
+  version = "3.8";
+
+  src = fetchFromGitHub {
+    owner = "vanhauser-thc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "07kwika1zdq62s5p5z94xznm77dxjxdg8k0hrg7wygz50151nzmx";
+  };
+
+  buildInputs = [
+    libpcap
+    openssl
+    libnetfilter_queue
+    libnfnetlink
+  ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+  ];
+
+  meta = with lib; {
+    description = "IPv6 attack toolkit";
+    homepage = "https://github.com/vanhauser-thc/thc-ipv6";
+    maintainers = with maintainers; [ ajs124 ];
+    platforms = platforms.linux;
+    license = licenses.agpl3Only;
+  };
+}
diff --git a/pkgs/tools/security/theharvester/default.nix b/pkgs/tools/security/theharvester/default.nix
index 4153ddafbf4..dc1596facdf 100644
--- a/pkgs/tools/security/theharvester/default.nix
+++ b/pkgs/tools/security/theharvester/default.nix
@@ -1,25 +1,55 @@
-{ lib, fetchFromGitHub, python3 }:
+{ lib
+, fetchFromGitHub
+, python3
+}:
 
 python3.pkgs.buildPythonApplication rec {
-  pname = "theHarvester";
-  version = "3.1";
+  pname = "theharvester";
+  version = "4.0.0";
 
   src = fetchFromGitHub {
     owner = "laramies";
     repo = pname;
-    rev = "V${version}";
-    sha256 = "0lxzxfa9wbzim50d2jmd27i57szd0grm1dfayhnym86jn01qpvn3";
+    rev = version;
+    sha256 = "02jhk34znpvq522pqr3x4c0rljw37x62znwycijf1zx81dpbn4rm";
   };
 
-  propagatedBuildInputs = with python3.pkgs; [ 
-    aiodns beautifulsoup4 dns grequests netaddr
-    plotly pyyaml requests retrying shodan texttable
+  propagatedBuildInputs = with python3.pkgs; [
+    aiodns
+    aiofiles
+    aiohttp
+    aiomultiprocess
+    aiosqlite
+    beautifulsoup4
+    censys
+    certifi
+    dnspython
+    fastapi
+    lxml
+    netaddr
+    plotly
+    pyppeteer
+    pyyaml
+    requests
+    retrying
+    shodan
+    slowapi
+    starlette
+    uvicorn
+    uvloop
   ];
 
-  checkInputs = [ python3.pkgs.pytest ];
+  checkInputs = with  python3.pkgs; [
+    pytest
+    pytest-asyncio
+  ];
 
-  checkPhase = "runHook preCheck ; pytest tests/test_myparser.py ; runHook postCheck";
   # We don't run other tests (discovery modules) because they require network access
+  checkPhase = ''
+    runHook preCheck
+    pytest tests/test_myparser.py
+    runHook postCheck
+  '';
 
   meta = with lib; {
     description = "Gather E-mails, subdomains and names from different public sources";
@@ -31,6 +61,6 @@ python3.pkgs.buildPythonApplication rec {
     '';
     homepage = "https://github.com/laramies/theHarvester";
     maintainers = with maintainers; [ c0bw3b treemo ];
-    license = licenses.gpl2;
+    license = licenses.gpl2Only;
   };
 }
diff --git a/pkgs/tools/security/tor/default.nix b/pkgs/tools/security/tor/default.nix
index c535bf70670..b3c98ac013e 100644
--- a/pkgs/tools/security/tor/default.nix
+++ b/pkgs/tools/security/tor/default.nix
@@ -1,5 +1,6 @@
-{ stdenv, fetchurl, pkgconfig, libevent, openssl, zlib, torsocks
-, libseccomp, systemd, libcap, lzma, zstd, scrypt, nixosTests
+{ lib, stdenv, fetchurl, pkg-config, libevent, openssl, zlib, torsocks
+, libseccomp, systemd, libcap, xz, zstd, scrypt, nixosTests
+, writeShellScript
 
 # for update.nix
 , writeScript
@@ -12,29 +13,43 @@
 , gnused
 , nix
 }:
-
+let
+  tor-client-auth-gen = writeShellScript "tor-client-auth-gen" ''
+    PATH="${lib.makeBinPath [coreutils gnugrep openssl]}"
+    pem="$(openssl genpkey -algorithm x25519)"
+
+    printf private_key=descriptor:x25519:
+    echo "$pem" | grep -v " PRIVATE KEY" |
+    base64 -d | tail --bytes=32 | base32 | tr -d =
+
+    printf public_key=descriptor:x25519:
+    echo "$pem" | openssl pkey -in /dev/stdin -pubout |
+    grep -v " PUBLIC KEY" |
+    base64 -d | tail --bytes=32 | base32 | tr -d =
+  '';
+in
 stdenv.mkDerivation rec {
   pname = "tor";
-  version = "0.4.3.6";
+  version = "0.4.6.6";
 
   src = fetchurl {
     url = "https://dist.torproject.org/${pname}-${version}.tar.gz";
-    sha256 = "0qmcrkjip0ywq77232m73pjwqiaj0q2klwklqlpbw575shvhcbba";
+    sha256 = "04ifi18cj4cw5lhfzgfrrc42j7qqdmbvxq24xlhj0dsmljdih8rl";
   };
 
   outputs = [ "out" "geoip" ];
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ libevent openssl zlib lzma zstd scrypt ] ++
-    stdenv.lib.optionals stdenv.isLinux [ libseccomp systemd libcap ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libevent openssl zlib xz zstd scrypt ] ++
+    lib.optionals stdenv.isLinux [ libseccomp systemd libcap ];
 
   patches = [ ./disable-monotonic-timer-tests.patch ];
 
   # cross compiles correctly but needs the following
-  configureFlags = stdenv.lib.optional (stdenv.hostPlatform != stdenv.buildPlatform)
+  configureFlags = lib.optional (stdenv.hostPlatform != stdenv.buildPlatform)
     "--disable-tool-name-check";
 
-  NIX_CFLAGS_LINK = stdenv.lib.optionalString stdenv.cc.isGNU "-lgcc_s";
+  NIX_CFLAGS_LINK = lib.optionalString stdenv.cc.isGNU "-lgcc_s";
 
   postPatch = ''
     substituteInPlace contrib/client-tools/torify \
@@ -52,12 +67,13 @@ stdenv.mkDerivation rec {
     mkdir -p $geoip/share/tor
     mv $out/share/tor/geoip{,6} $geoip/share/tor
     rm -rf $out/share/tor
+    ln -s ${tor-client-auth-gen} $out/bin/tor-client-auth-gen
   '';
 
   passthru = {
     tests.tor = nixosTests.tor;
     updateScript = import ./update.nix {
-      inherit (stdenv) lib;
+      inherit lib;
       inherit
         writeScript
         common-updater-scripts
@@ -72,7 +88,7 @@ stdenv.mkDerivation rec {
     };
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.torproject.org/";
     repositories.git = "https://git.torproject.org/git/tor";
     description = "Anonymizing overlay network";
@@ -90,7 +106,7 @@ stdenv.mkDerivation rec {
     license = licenses.bsd3;
 
     maintainers = with maintainers;
-      [ phreedom doublec thoughtpolice joachifm ];
+      [ phreedom thoughtpolice joachifm prusnak ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/security/tor/tor-arm.nix b/pkgs/tools/security/tor/tor-arm.nix
index 896ab50562d..fcdb628e0f4 100644
--- a/pkgs/tools/security/tor/tor-arm.nix
+++ b/pkgs/tools/security/tor/tor-arm.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, makeWrapper
+{ lib, stdenv, fetchurl, makeWrapper
 , python2Packages, ncurses, lsof, nettools
 }:
 
@@ -48,8 +48,8 @@ stdenv.mkDerivation rec {
   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 ];
+    license     = lib.licenses.gpl3;
+    platforms   = lib.platforms.unix;
+    maintainers = [ lib.maintainers.thoughtpolice ];
   };
 }
diff --git a/pkgs/tools/security/tor/torsocks.nix b/pkgs/tools/security/tor/torsocks.nix
index 381377032d6..22cfa51d4e5 100644
--- a/pkgs/tools/security/tor/torsocks.nix
+++ b/pkgs/tools/security/tor/torsocks.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, fetchurl, autoreconfHook, libcap }:
+{ lib, stdenv, fetchgit, fetchurl, autoreconfHook, libcap }:
 
 stdenv.mkDerivation rec {
   pname = "torsocks";
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ autoreconfHook ];
 
-  patches = stdenv.lib.optional stdenv.isDarwin
+  patches = lib.optional stdenv.isDarwin
     (fetchurl {
        url = "https://trac.torproject.org/projects/tor/raw-attachment/ticket/28538/0001-Fix-macros-for-accept4-2.patch";
        sha256 = "97881f0b59b3512acc4acb58a0d6dfc840d7633ead2f400fad70dda9b2ba30b0";
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
     sed -i \
       -e 's,\(local app_path\)=`which $1`,\1=`type -P $1`,' \
       src/bin/torsocks.in
-  '' + stdenv.lib.optionalString stdenv.isLinux ''
+  '' + lib.optionalString stdenv.isLinux ''
     sed -i \
       -e 's,\(local getcap\)=.*,\1=${libcap}/bin/getcap,' \
       src/bin/torsocks.in
@@ -36,8 +36,8 @@ stdenv.mkDerivation rec {
     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 ];
+    license          = lib.licenses.gpl2;
+    platforms        = lib.platforms.unix;
+    maintainers      = with lib.maintainers; [ phreedom thoughtpolice ];
   };
 }
diff --git a/pkgs/tools/security/tpm-luks/default.nix b/pkgs/tools/security/tpm-luks/default.nix
index fc1931fa4ba..2af4a742208 100644
--- a/pkgs/tools/security/tpm-luks/default.nix
+++ b/pkgs/tools/security/tpm-luks/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, autoreconfHook, gawk, trousers, cryptsetup, openssl }:
+{ lib, stdenv, fetchgit, autoreconfHook, gawk, trousers, cryptsetup, openssl }:
 
 stdenv.mkDerivation {
   pname = "tpm-luks";
@@ -25,10 +25,11 @@ stdenv.mkDerivation {
     rm -r $out/nix
     '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "LUKS key storage in TPM NVRAM";
     homepage    = "https://github.com/shpedoikal/tpm-luks/";
     maintainers = [ maintainers.tstrobel ];
+    license = with licenses; [ gpl2Only ];
     platforms   = platforms.linux;
   };
 }
diff --git a/pkgs/tools/security/tpm-quote-tools/default.nix b/pkgs/tools/security/tpm-quote-tools/default.nix
index a652867a0d0..938d0a6f294 100644
--- a/pkgs/tools/security/tpm-quote-tools/default.nix
+++ b/pkgs/tools/security/tpm-quote-tools/default.nix
@@ -1,10 +1,10 @@
-{ stdenv, fetchurl, trousers, openssl }:
+{ lib, stdenv, fetchurl, trousers, openssl }:
 
-stdenv.mkDerivation rec { 
+stdenv.mkDerivation rec {
   pname = "tpm-quote-tools";
   version = "1.0.4";
 
-  src = fetchurl { 
+  src = fetchurl {
     url = "mirror://sourceforge/project/tpmquotetools/${version}/${pname}-${version}.tar.gz";
     sha256 = "1qjs83xb4np4yn1bhbjfhvkiika410v8icwnjix5ad96w2nlxp0h";
   };
@@ -13,11 +13,11 @@ stdenv.mkDerivation rec {
 
   postFixup = ''
     patchelf \
-      --set-rpath "${stdenv.lib.makeLibraryPath [ openssl ]}:$(patchelf --print-rpath $out/bin/tpm_mkaik)" \
+      --set-rpath "${lib.makeLibraryPath [ openssl ]}:$(patchelf --print-rpath $out/bin/tpm_mkaik)" \
       $out/bin/tpm_mkaik
   '';
 
-  meta = with stdenv.lib; { 
+  meta = with 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
diff --git a/pkgs/tools/security/tpm-tools/default.nix b/pkgs/tools/security/tpm-tools/default.nix
index 5e0b4e6d94f..c0e2941323a 100644
--- a/pkgs/tools/security/tpm-tools/default.nix
+++ b/pkgs/tools/security/tpm-tools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, trousers, openssl, opencryptoki, perl }:
+{ lib, stdenv, fetchurl, trousers, openssl, opencryptoki, perl }:
 
 let
   version = "1.3.9.1";
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ perl ];
   buildInputs = [ trousers openssl opencryptoki ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Management tools for TPM hardware";
     longDescription = ''
       tpm-tools is an open-source package designed to enable user and
diff --git a/pkgs/tools/security/tpm2-abrmd/default.nix b/pkgs/tools/security/tpm2-abrmd/default.nix
index 6fe116d7015..a3352c5abfd 100644
--- a/pkgs/tools/security/tpm2-abrmd/default.nix
+++ b/pkgs/tools/security/tpm2-abrmd/default.nix
@@ -6,13 +6,13 @@
 
 stdenv.mkDerivation rec {
   pname = "tpm2-abrmd";
-  version = "2.3.2";
+  version = "2.3.3";
 
   src = fetchFromGitHub {
     owner = "tpm2-software";
     repo = pname;
     rev = version;
-    sha256 = "0jzglnlb700clcq6mjhhgvcq29a6893h888wsn9fbrh4f255sw8q";
+    sha256 = "17nv50w1yh6fg7393vfvys9y13lp0gvxx9vcw2pb87ky551d7xkf";
   };
 
   nativeBuildInputs = [ pkg-config makeWrapper autoreconfHook autoconf-archive which ];
@@ -44,6 +44,6 @@ stdenv.mkDerivation rec {
     homepage = "https://github.com/tpm2-software/tpm2-tools";
     license = licenses.bsd3;
     platforms = platforms.linux;
-    maintainers = with maintainers; [ lschuermann ];
+    maintainers = with maintainers; [ matthiasbeyer ];
   };
 }
diff --git a/pkgs/tools/security/tpm2-tools/default.nix b/pkgs/tools/security/tpm2-tools/default.nix
index e6a7621d987..52964b620dd 100644
--- a/pkgs/tools/security/tpm2-tools/default.nix
+++ b/pkgs/tools/security/tpm2-tools/default.nix
@@ -1,19 +1,19 @@
 { stdenv, fetchurl, lib
-, pandoc, pkgconfig, makeWrapper, curl, openssl, tpm2-tss
+, pandoc, pkg-config, makeWrapper, curl, openssl, tpm2-tss, libuuid
 , abrmdSupport ? true, tpm2-abrmd ? null }:
 
 stdenv.mkDerivation rec {
   pname = "tpm2-tools";
-  version = "4.1.3";
+  version = "5.0";
 
   src = fetchurl {
     url = "https://github.com/tpm2-software/${pname}/releases/download/${version}/${pname}-${version}.tar.gz";
-    sha256 = "0117r0zzdnblkibv81y71v3limixsw5m7g9xwf7lcx8fc8836pdv";
+    sha256 = "sha256-4bkH/imHdigFLgithO68bD92RtKVBe1IYulhYqjJG6E=";
   };
 
-  nativeBuildInputs = [ pandoc pkgconfig makeWrapper ];
+  nativeBuildInputs = [ pandoc pkg-config makeWrapper ];
   buildInputs = [
-    curl openssl tpm2-tss
+    curl openssl tpm2-tss libuuid
   ];
 
   preFixup = let
@@ -21,10 +21,8 @@ stdenv.mkDerivation rec {
       tpm2-tss
     ] ++ (lib.optional abrmdSupport tpm2-abrmd));
   in ''
-    for bin in $out/bin/*; do
-      wrapProgram $bin \
-        --suffix LD_LIBRARY_PATH : "${ldLibraryPath}"
-    done
+    wrapProgram $out/bin/tpm2 --suffix LD_LIBRARY_PATH : "${ldLibraryPath}"
+    wrapProgram $out/bin/tss2 --suffix LD_LIBRARY_PATH : "${ldLibraryPath}"
   '';
 
 
diff --git a/pkgs/tools/security/traitor/default.nix b/pkgs/tools/security/traitor/default.nix
new file mode 100644
index 00000000000..e056b556aad
--- /dev/null
+++ b/pkgs/tools/security/traitor/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "traitor";
+  version = "0.0.8";
+
+  src = fetchFromGitHub {
+    owner = "liamg";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-eUeKkjSpKel6XH3/VVw/WPCG/Nq8BcZwMNFG9z9FUuU=";
+  };
+
+  vendorSha256 = null;
+
+  meta = with lib; {
+    description = "Automatic Linux privilege escalation";
+    longDescription = ''
+      Automatically exploit low-hanging fruit to pop a root shell. Traitor packages
+      up a bunch of methods to exploit local misconfigurations and vulnerabilities
+      (including most of GTFOBins) in order to pop a root shell.
+    '';
+    homepage = "https://github.com/liamg/traitor";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/trousers/allow-non-tss-config-file-owner.patch b/pkgs/tools/security/trousers/allow-non-tss-config-file-owner.patch
index 774a14f72ba..391eb1ad589 100644
--- a/pkgs/tools/security/trousers/allow-non-tss-config-file-owner.patch
+++ b/pkgs/tools/security/trousers/allow-non-tss-config-file-owner.patch
@@ -7,10 +7,10 @@ diff -ur trousers-0.3.11.2.orig/src/tcsd/tcsd_conf.c trousers-0.3.11.2/src/tcsd/
  
 +#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) {
+ 	if (stat_buf.st_uid != 0 || 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);
+ 		LogError("TCSD config file (%s) must be mode 0640", tcsd_config_file);
  		return TCSERR(TSS_E_INTERNAL_ERROR);
  	}
 +#endif
diff --git a/pkgs/tools/security/trousers/default.nix b/pkgs/tools/security/trousers/default.nix
index 2cc702cf6f2..16536409b5e 100644
--- a/pkgs/tools/security/trousers/default.nix
+++ b/pkgs/tools/security/trousers/default.nix
@@ -1,17 +1,15 @@
-{ stdenv, fetchurl, openssl, pkgconfig }:
+{ lib, stdenv, fetchurl, openssl, pkg-config, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   pname = "trousers";
-  version = "0.3.14";
+  version = "0.3.15";
 
   src = fetchurl {
     url = "mirror://sourceforge/trousers/trousers/${version}/${pname}-${version}.tar.gz";
-    sha256 = "0iwgsbrbb7nfqgl61x8aailwxm8akxh9gkcwxhsvf50x4qx72l6f";
+    sha256 = "0zy7r9cnr2gvwr2fb1q4fc5xnvx405ymcbrdv7qsqwl3a4zfjnqy";
   };
 
-  sourceRoot = ".";
-
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
   buildInputs = [ openssl ];
 
   patches = [ ./allow-non-tss-config-file-owner.patch ];
@@ -21,7 +19,7 @@ stdenv.mkDerivation rec {
   NIX_CFLAGS_COMPILE = [ "-DALLOW_NON_TSS_CONFIG_FILE" ];
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Trusted computing software stack";
     homepage    = "http://trousers.sourceforge.net/";
     license     = licenses.bsd3;
diff --git a/pkgs/tools/security/truecrack/default.nix b/pkgs/tools/security/truecrack/default.nix
new file mode 100644
index 00000000000..cf64b234c66
--- /dev/null
+++ b/pkgs/tools/security/truecrack/default.nix
@@ -0,0 +1,40 @@
+{ lib, gccStdenv, fetchFromGitLab, cudatoolkit
+, cudaSupport ? false
+, pkg-config }:
+
+gccStdenv.mkDerivation rec {
+  pname = "truecrack";
+  version = "3.6";
+
+  src = fetchFromGitLab {
+    owner = "kalilinux";
+    repo = "packages/truecrack";
+    rev = "debian/${version}+git20150326-0kali1";
+    sha256 = "+Rw9SfaQtO1AJO6UVVDMCo8DT0dYEbv7zX8SI+pHCRQ=";
+  };
+
+  configureFlags = (if cudaSupport then [
+    "--with-cuda=${cudatoolkit}"
+  ] else [
+    "--enable-cpu"
+  ]);
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = lib.optionals cudaSupport [
+    cudatoolkit
+  ];
+
+  installFlags = [ "prefix=$(out)" ];
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "TrueCrack is a brute-force password cracker for TrueCrypt volumes. It works on Linux and it is optimized for Nvidia Cuda technology.";
+    homepage = "https://gitlab.com/kalilinux/packages/truecrack";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ethancedwards8 ];
+  };
+}
diff --git a/pkgs/tools/security/uddup/default.nix b/pkgs/tools/security/uddup/default.nix
new file mode 100644
index 00000000000..60c3609738d
--- /dev/null
+++ b/pkgs/tools/security/uddup/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildPythonApplication
+, colorama
+, fetchFromGitHub
+, pytestCheckHook
+}:
+
+buildPythonApplication rec {
+  pname = "uddup";
+  version = "0.9.3";
+
+  src = fetchFromGitHub {
+    owner = "rotemreiss";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1f5dm3772hiik9irnyvbs7wygcafbwi7czw3b47cwhb90b8fi5hg";
+  };
+
+  propagatedBuildInputs = [
+    colorama
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [ "uddup" ];
+
+  meta = with lib; {
+    description = "Tool for de-duplication URLs";
+    homepage = "https://github.com/rotemreiss/uddup";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/urlhunter/default.nix b/pkgs/tools/security/urlhunter/default.nix
new file mode 100644
index 00000000000..ebc628e563c
--- /dev/null
+++ b/pkgs/tools/security/urlhunter/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "urlhunter";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "utkusen";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0ph0pwfd8bb5499bsx3bd8sqhn69y00zk32ayc3n61gpcc6rmvn7";
+  };
+
+  vendorSha256 = "165kplaqigis0anafvzfqzwc3jjhsn2mwgf4phb4ck75n3yf85ys";
+
+  meta = with lib; {
+    description = "Recon tool that allows searching shortened URLs";
+    longDescription = ''
+      urlhunter is a recon tool that allows searching on URLs that are
+      exposed via shortener services such as bit.ly and goo.gl.
+    '';
+    homepage = "https://github.com/utkusen/urlhunter";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/vault/default.nix b/pkgs/tools/security/vault/default.nix
index 50a7844356f..66a6d5e63e8 100644
--- a/pkgs/tools/security/vault/default.nix
+++ b/pkgs/tools/security/vault/default.nix
@@ -1,34 +1,44 @@
-{ stdenv, fetchFromGitHub, buildGoPackage, installShellFiles }:
+{ stdenv, lib, fetchFromGitHub, buildGoPackage, installShellFiles, nixosTests
+, makeWrapper
+, gawk
+, glibc
+}:
 
 buildGoPackage rec {
   pname = "vault";
-  version = "1.5.0";
+  version = "1.7.3";
 
   src = fetchFromGitHub {
     owner = "hashicorp";
     repo = "vault";
     rev = "v${version}";
-    sha256 = "1bdhcsx7hwz4kb68jrrrzlbr7k744g0pym996dq1p5rvz05j3pqc";
+    sha256 = "sha256-BO4xzZrX9eVETQWjBDBfP7TlD7sO+gLgbB330A11KAI=";
   };
 
   goPackagePath = "github.com/hashicorp/vault";
 
   subPackages = [ "." ];
 
-  nativeBuildInputs = [ installShellFiles ];
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
 
   buildFlagsArray = [ "-tags=vault" "-ldflags=-s -w -X ${goPackagePath}/sdk/version.GitCommit=${src.rev}" ];
 
   postInstall = ''
     echo "complete -C $out/bin/vault vault" > vault.bash
     installShellCompletion vault.bash
+  '' + lib.optionalString stdenv.isLinux ''
+    wrapProgram $out/bin/vault \
+      --prefix PATH ${lib.makeBinPath [ gawk glibc ]}
   '';
 
-  meta = with stdenv.lib; {
+  passthru.tests.vault = nixosTests.vault;
+
+  meta = with lib; {
     homepage = "https://www.vaultproject.io/";
     description = "A tool for managing secrets";
+    changelog = "https://github.com/hashicorp/vault/blob/v${version}/CHANGELOG.md";
     platforms = platforms.linux ++ platforms.darwin;
     license = licenses.mpl20;
-    maintainers = with maintainers; [ rushmorem lnl7 offline pradeepchhetri ];
+    maintainers = with maintainers; [ rushmorem lnl7 offline pradeepchhetri Chili-Man ];
   };
 }
diff --git a/pkgs/tools/security/vault/vault-bin.nix b/pkgs/tools/security/vault/vault-bin.nix
index 6b14a834330..68df6e557f6 100644
--- a/pkgs/tools/security/vault/vault-bin.nix
+++ b/pkgs/tools/security/vault/vault-bin.nix
@@ -1,30 +1,26 @@
-{ stdenv, fetchurl, unzip }:
+{ lib, stdenv, fetchurl, unzip, makeWrapper, gawk, glibc }:
 
 let
-  version = "1.3.0";
+  version = "1.7.3";
 
   sources = let
     base = "https://releases.hashicorp.com/vault/${version}";
   in {
     x86_64-linux = fetchurl {
       url = "${base}/vault_${version}_linux_amd64.zip";
-      sha256 = "1crfj4gd1qwwa2xidd0pjffv0n6hf5hbhv6568m6zc1ig0qqm6yq";
+      sha256 = "sha256-hFMTKpO3VcCondSy8amb1K8G+BZ7gZF/EXCAg5Ax4D8=";
     };
     i686-linux = fetchurl {
       url = "${base}/vault_${version}_linux_386.zip";
-      sha256 = "0pyf0kyvxpmx3fwfvin1r0x30r9byx9lyi81894q06xrhiwbqc0l";
+      sha256 = "02wbbzffb2m7y3476l5qa5dhi0v30f3sfif0svqhhzh927kg4s5w";
     };
     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";
+      sha256 = "0sw56dhjbasdnlwg668swhyxrn5gy7h9gysdg96za4dhq3iimkrn";
     };
     aarch64-linux = fetchurl {
       url = "${base}/vault_${version}_linux_arm64.zip";
-      sha256 = "1bk5y3knc42mh07gnnn6p109qz908014620h1s0348wp4qfdy49w";
+      sha256 = "0c2w0684adaqildwviajp6pi8vp76g4zwwgc1k2bb5mwv1h2y293";
     };
   };
 
@@ -34,21 +30,28 @@ in stdenv.mkDerivation {
 
   src = sources.${stdenv.hostPlatform.system} or (throw "unsupported system: ${stdenv.hostPlatform.system}");
 
-  nativeBuildInputs = [ unzip ];
+  nativeBuildInputs = [ makeWrapper unzip ];
 
   sourceRoot = ".";
 
   installPhase = ''
+    runHook preInstall
+
     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
+  '' + lib.optionalString stdenv.isLinux ''
+    wrapProgram $out/bin/vault \
+      --prefix PATH ${lib.makeBinPath [ gawk glibc ]}
+  '' + ''
+    runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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" ];
+    platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ];
     license = licenses.mpl20;
-    maintainers = with maintainers; [ offline psyanticy mkaito ];
+    maintainers = with maintainers; teams.serokell.members ++ [ offline psyanticy Chili-Man ];
   };
 }
diff --git a/pkgs/tools/security/bitwarden_rs/default.nix b/pkgs/tools/security/vaultwarden/default.nix
index c2bb8324186..4342c8f3ac9 100644
--- a/pkgs/tools/security/bitwarden_rs/default.nix
+++ b/pkgs/tools/security/vaultwarden/default.nix
@@ -1,31 +1,32 @@
-{ stdenv, rustPlatform, fetchFromGitHub, nixosTests
-, pkgconfig, openssl
-, Security, CoreServices
+{ lib, stdenv, rustPlatform, fetchFromGitHub, fetchurl, nixosTests
+, pkg-config, openssl
+, libiconv, Security, CoreServices
 , dbBackend ? "sqlite", libmysqlclient, postgresql }:
 
 let
   featuresFlag = "--features ${dbBackend}";
 
 in rustPlatform.buildRustPackage rec {
-  pname = "bitwarden_rs";
-  version = "1.16.3";
+  pname = "vaultwarden";
+  version = "1.22.1";
 
   src = fetchFromGitHub {
     owner = "dani-garcia";
     repo = pname;
     rev = version;
-    sha256 = "1scy8abzy6j1jsms84cg2nqkn1zsxr5mjikp2xh0yl0ckkk13ffn";
+    sha256 = "sha256-aXbnNO3mTAgE1yNx7YVDo1vPpO8ACZpBGHQ633fNZ3k=";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = with stdenv.lib; [ openssl ]
-    ++ optionals stdenv.isDarwin [ Security CoreServices ]
+  cargoSha256 = "sha256-SFzq3OU0a0s3zlEzUkqGdZb/knYafqDamLy4ghH4i8I=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = with lib; [ openssl ]
+    ++ optionals stdenv.isDarwin [ libiconv Security CoreServices ]
     ++ optional (dbBackend == "mysql") libmysqlclient
     ++ optional (dbBackend == "postgresql") postgresql;
 
   RUSTC_BOOTSTRAP = 1;
 
-  cargoSha256 = "112mvgq581cms0war5dbni7f7yryjr5agryzn5qx835qkznzar8s";
   cargoBuildFlags = [ featuresFlag ];
 
   checkPhase = ''
@@ -35,12 +36,12 @@ in rustPlatform.buildRustPackage rec {
     runHook postCheck
   '';
 
-  passthru.tests = nixosTests.bitwarden;
+  passthru.tests = nixosTests.vaultwarden;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Unofficial Bitwarden compatible server written in Rust";
-    homepage = "https://github.com/dani-garcia/bitwarden_rs";
-    license = licenses.gpl3;
+    homepage = "https://github.com/dani-garcia/vaultwarden";
+    license = licenses.gpl3Only;
     maintainers = with maintainers; [ msteen ];
   };
 }
diff --git a/pkgs/tools/security/vaultwarden/vault.nix b/pkgs/tools/security/vaultwarden/vault.nix
new file mode 100644
index 00000000000..49e7cc4f3ba
--- /dev/null
+++ b/pkgs/tools/security/vaultwarden/vault.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, nixosTests }:
+
+stdenv.mkDerivation rec {
+  pname = "vaultwarden-vault";
+  version = "2.19.0";
+
+  src = fetchurl {
+    url = "https://github.com/dani-garcia/bw_web_builds/releases/download/v${version}/bw_web_v${version}.tar.gz";
+    sha256 = "sha256:0yrk2b2d5sld4z60siacafdz95gqikcv4snzd6hwhq1l6kz151az";
+  };
+
+  buildCommand = ''
+    mkdir -p $out/share/vaultwarden/
+    cd $out/share/vaultwarden/
+    tar xf $src
+    mv web-vault vault
+  '';
+
+  passthru.tests = nixosTests.vaultwarden;
+
+  meta = with lib; {
+    description = "Integrates the web vault into vaultwarden";
+    homepage = "https://github.com/dani-garcia/bw_web_builds";
+    platforms = platforms.all;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ msteen mic92 ];
+  };
+}
diff --git a/pkgs/tools/security/volatility/default.nix b/pkgs/tools/security/volatility/default.nix
index 8cf904c39c5..4abbbd2d1d1 100644
--- a/pkgs/tools/security/volatility/default.nix
+++ b/pkgs/tools/security/volatility/default.nix
@@ -1,22 +1,24 @@
-{ stdenv, fetchurl, pythonPackages }:
+{ lib, fetchFromGitHub, pythonPackages }:
 
 pythonPackages.buildPythonApplication rec {
-  version = "2.6";
   pname = "volatility";
+  version = "2.6.1";
 
-  src = fetchurl {
-    url = "https://downloads.volatilityfoundation.org/releases/${version}/${pname}-${version}.zip";
-    sha256 = "15cjrx31nnqa3bpjkv0x05j7f2sb7pq46a72zh7qg55zf86hawsv";
+  src = fetchFromGitHub {
+    owner = "volatilityfoundation";
+    repo = pname;
+    rev = version;
+    sha256 = "1v92allp3cv3akk71kljcwxr27h1k067dsq7j9h8jnlwk9jxh6rf";
   };
 
   doCheck = false;
 
-  propagatedBuildInputs = [ pythonPackages.pycrypto pythonPackages.distorm3 ];
+  propagatedBuildInputs = with pythonPackages; [ pycrypto distorm3 pillow ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.volatilityfoundation.org/";
     description = "Advanced memory forensics framework";
     maintainers = with maintainers; [ bosu ];
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
   };
 }
diff --git a/pkgs/tools/security/vulnix/default.nix b/pkgs/tools/security/vulnix/default.nix
index d4a3a0c621a..037adda92eb 100644
--- a/pkgs/tools/security/vulnix/default.nix
+++ b/pkgs/tools/security/vulnix/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib
 , python3Packages
 , nix
 , ronn
@@ -6,11 +6,11 @@
 
 python3Packages.buildPythonApplication rec {
   pname = "vulnix";
-  version = "1.9.6";
+  version = "1.10.0";
 
   src = python3Packages.fetchPypi {
     inherit pname version;
-    sha256 = "0anyxmqgn4kx102l3qjhh1f2b0cg7mnlapfhriyjw0zyy5gyqvng";
+    sha256 = "1d5mqpc4g1wkqcwxp8m9k130i3ii3q7n1n4b1fyb5wijidmyn3xv";
   };
 
   outputs = [ "out" "doc" "man" ];
@@ -19,7 +19,7 @@ python3Packages.buildPythonApplication rec {
   checkInputs = with python3Packages; [
     freezegun
     pytest
-    pytestcov
+    pytest-cov
     pytest-flake8
   ];
 
@@ -48,7 +48,7 @@ python3Packages.buildPythonApplication rec {
 
   dontStrip = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "NixOS vulnerability scanner";
     homepage = "https://github.com/flyingcircusio/vulnix";
     license = licenses.bsd3;
diff --git a/pkgs/tools/security/wad/default.nix b/pkgs/tools/security/wad/default.nix
new file mode 100644
index 00000000000..ee731798097
--- /dev/null
+++ b/pkgs/tools/security/wad/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, mock
+, pytestCheckHook
+, six
+}:
+
+buildPythonApplication rec {
+  pname = "wad";
+  version = "0.4.6";
+
+  src = fetchPypi {
+    inherit pname;
+    inherit version;
+    sha256 = "02jq77h6g9v7n4qqq7qri6wmhggy257983dwgmpjsf4qsagkgwy8";
+  };
+
+  propagatedBuildInputs = [
+    six
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    mock
+  ];
+
+  pythonImportsCheck = [ "wad" ];
+
+  meta = with lib; {
+    description = "Tool for detecting technologies used by web applications";
+    longDescription = ''
+      WAD lets you analyze given URL(s) and detect technologies used by web
+      application behind that URL, from the OS and web server level, to the
+      programming platform and frameworks, as well as server- and client-side
+      applications, tools and libraries.
+    '';
+    homepage = "https://github.com/CERN-CERT/WAD";
+    # wad is GPLv3+, wappalyzer source is MIT
+    license = with licenses; [ gpl3Plus mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/wafw00f/default.nix b/pkgs/tools/security/wafw00f/default.nix
new file mode 100644
index 00000000000..dae4f5a5ad0
--- /dev/null
+++ b/pkgs/tools/security/wafw00f/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, pluginbase
+, requests
+}:
+
+buildPythonApplication rec {
+  pname = "wafw00f";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "EnableSecurity";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0526kz6ypww9nxc2vddkhpn1gqvn25mzj3wmi91wwxwxjjb6w4qj";
+  };
+
+  propagatedBuildInputs = [
+    requests
+    pluginbase
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "wafw00f" ];
+
+  meta = with lib; {
+    description = "Tool to identify and fingerprint Web Application Firewalls (WAF)";
+    homepage = "https://github.com/EnableSecurity/wafw00f";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/wapiti/default.nix b/pkgs/tools/security/wapiti/default.nix
new file mode 100644
index 00000000000..945f78dc559
--- /dev/null
+++ b/pkgs/tools/security/wapiti/default.nix
@@ -0,0 +1,106 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "wapiti";
+  version = "3.0.4";
+
+  src = fetchFromGitHub {
+    owner = "wapiti-scanner";
+    repo = pname;
+    rev = version;
+    sha256 = "0wnz4nq1q5y74ksb1kcss9vdih0kbrmnkfbyc2ngd9id1ixfamxb";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    pytest-runner
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    beautifulsoup4
+    browser-cookie3
+    Mako
+    markupsafe
+    pysocks
+    requests
+    six
+    tld
+    yaswfp
+  ] ++ lib.optionals (python3.pythonOlder "3.8") [ importlib-metadata ];
+
+  checkInputs = with python3.pkgs; [
+    responses
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    # Is already fixed in the repo. Will be part of the next release
+    substituteInPlace setup.py \
+      --replace "importlib_metadata==2.0.0" "importlib_metadata"
+  '';
+
+  disabledTests = [
+    # Tests requires network access
+    "test_attr"
+    "test_bad_separator_used"
+    "test_blind"
+    "test_chunked_timeout"
+    "test_cookies_detection"
+    "test_csrf_cases"
+    "test_detection"
+    "test_direct"
+    "test_escape_with_style"
+    "test_explorer_filtering"
+    "test_false"
+    "test_frame"
+    "test_headers_detection"
+    "test_html_detection"
+    "test_implies_detection"
+    "test_inclusion_detection"
+    "test_meta_detection"
+    "test_no_crash"
+    "test_options"
+    "test_out_of_band"
+    "test_partial_tag_name_escape"
+    "test_prefix_and_suffix_detection"
+    "test_qs_limit"
+    "test_rare_tag_and_event"
+    "test_redirect_detection"
+    "test_request_object"
+    "test_script"
+    "test_ssrf"
+    "test_tag_name_escape"
+    "test_timeout"
+    "test_title_false_positive"
+    "test_title_positive"
+    "test_true_positive_request_count"
+    "test_url_detection"
+    "test_warning"
+    "test_whole"
+    "test_xss_inside_tag_input"
+    "test_xss_inside_tag_link"
+    "test_xss_uppercase_no_script"
+    "test_xss_with_strong_csp"
+    "test_xss_with_weak_csp"
+    "test_xxe"
+  ];
+
+  pythonImportsCheck = [ "wapitiCore" ];
+
+  meta = with lib; {
+    description = "Web application vulnerability scanner";
+    longDescription = ''
+      Wapiti allows you to audit the security of your websites or web applications.
+      It performs "black-box" scans (it does not study the source code) of the web
+      application by crawling the webpages of the deployed webapp, looking for
+      scripts and forms where it can inject data. Once it gets the list of URLs,
+      forms and their inputs, Wapiti acts like a fuzzer, injecting payloads to see
+      if a script is vulnerable.
+    '';
+    homepage = "https://wapiti-scanner.github.io/";
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/wipe/default.nix b/pkgs/tools/security/wipe/default.nix
index 6b84803d2c4..5b0f079e5a6 100644
--- a/pkgs/tools/security/wipe/default.nix
+++ b/pkgs/tools/security/wipe/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "wipe";
@@ -11,11 +11,11 @@ stdenv.mkDerivation rec {
 
   patches = [ ./fix-install.patch ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Secure file wiping utility";
     homepage    = "http://wipe.sourceforge.net/";
     license     = licenses.gpl2;
-    platforms   = platforms.linux;
+    platforms   = platforms.all;
     maintainers = [ maintainers.abbradar ];
   };
 }
diff --git a/pkgs/tools/security/wprecon/default.nix b/pkgs/tools/security/wprecon/default.nix
new file mode 100644
index 00000000000..401692bdf67
--- /dev/null
+++ b/pkgs/tools/security/wprecon/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "wprecon";
+  version = "1.6.3a";
+
+  src = fetchFromGitHub {
+    owner = "blackbinn";
+    repo = pname;
+    rev = version;
+    sha256 = "0gqi4799ha3mf8r7ini0wj4ilkfsh80vnnxijfv9a343r6z5w0dn";
+  };
+
+  vendorSha256 = "1sab58shspll96rqy1rp659s0yikqdcx59z9b88d6p4w8a98ns87";
+
+  meta = with lib; {
+    description = "WordPress vulnerability recognition tool";
+    homepage = "https://github.com/blackbinn/wprecon";
+    # License Zero Noncommercial Public License 2.0.1
+    # https://github.com/blackbinn/wprecon/blob/master/LICENSE
+    license = with licenses; [ unfree ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/wpscan/Gemfile.lock b/pkgs/tools/security/wpscan/Gemfile.lock
index f3ece99b365..65e09d0aecf 100644
--- a/pkgs/tools/security/wpscan/Gemfile.lock
+++ b/pkgs/tools/security/wpscan/Gemfile.lock
@@ -1,53 +1,57 @@
 GEM
   remote: https://rubygems.org/
   specs:
-    activesupport (6.0.1)
+    activesupport (6.1.4)
       concurrent-ruby (~> 1.0, >= 1.0.2)
-      i18n (>= 0.7, < 2)
-      minitest (~> 5.1)
-      tzinfo (~> 1.1)
-      zeitwerk (~> 2.2)
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      tzinfo (~> 2.0)
+      zeitwerk (~> 2.3)
     addressable (2.7.0)
       public_suffix (>= 2.0.2, < 5.0)
-    cms_scanner (0.7.1)
+    cms_scanner (0.13.5)
+      ethon (~> 0.14.0)
       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)
+      nokogiri (~> 1.11.4)
+      opt_parse_validator (~> 1.9.4)
+      public_suffix (~> 4.0.3)
+      ruby-progressbar (>= 1.10, < 1.12)
       sys-proctable (~> 1.2.2)
-      typhoeus (~> 1.3.0)
+      typhoeus (>= 1.3, < 1.5)
       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)
+    concurrent-ruby (1.1.9)
+    ethon (0.14.0)
+      ffi (>= 1.15.0)
+    ffi (1.15.3)
+    get_process_mem (0.2.7)
       ffi (~> 1.0)
-    i18n (1.7.0)
+    i18n (1.8.10)
       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)
+    mini_portile2 (2.5.3)
+    minitest (5.14.4)
+    nokogiri (1.11.7)
+      mini_portile2 (~> 2.5.0)
+      racc (~> 1.4)
+    opt_parse_validator (1.9.4)
+      activesupport (>= 5.2, < 6.2.0)
       addressable (>= 2.5, < 2.8)
-    public_suffix (4.0.1)
-    ruby-progressbar (1.10.1)
-    sys-proctable (1.2.2)
+    public_suffix (4.0.6)
+    racc (1.5.2)
+    ruby-progressbar (1.11.0)
+    sys-proctable (1.2.6)
       ffi
-    thread_safe (0.3.6)
-    typhoeus (1.3.1)
+    typhoeus (1.4.0)
       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)
+    tzinfo (2.0.4)
+      concurrent-ruby (~> 1.0)
+    webrick (1.7.0)
+    wpscan (3.8.18)
+      cms_scanner (~> 0.13.5)
+    xmlrpc (0.3.2)
+      webrick
     yajl-ruby (1.4.1)
-    zeitwerk (2.2.2)
+    zeitwerk (2.4.2)
 
 PLATFORMS
   ruby
diff --git a/pkgs/tools/security/wpscan/default.nix b/pkgs/tools/security/wpscan/default.nix
index e7a784c1a77..6a41611e67e 100644
--- a/pkgs/tools/security/wpscan/default.nix
+++ b/pkgs/tools/security/wpscan/default.nix
@@ -11,11 +11,13 @@ bundlerApp {
       --prefix PATH : ${lib.makeBinPath [ curl ]}
   '';
 
+  passthru.updateScript = ./update.sh;
+
   meta = with lib; {
     description = "Black box WordPress vulnerability scanner";
-    homepage    = "https://wpscan.org/";
-    license     = licenses.unfreeRedistributable;
+    homepage = "https://wpscan.org/";
+    license = licenses.unfreeRedistributable;
     maintainers = with maintainers; [ nyanloutre manveru ];
-    platforms   = platforms.unix;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/security/wpscan/gemset.nix b/pkgs/tools/security/wpscan/gemset.nix
index 5c0691fda1b..80b5ec290c0 100644
--- a/pkgs/tools/security/wpscan/gemset.nix
+++ b/pkgs/tools/security/wpscan/gemset.nix
@@ -5,10 +5,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "190xv21yz03zz8nlfly557ir859jr5zkwi89naziy65hskdnkw1s";
+      sha256 = "0kqgywy4cj3h5142dh7pl0xx5nybp25jn0ykk0znziivzks68xdk";
       type = "gem";
     };
-    version = "6.0.1";
+    version = "6.1.4";
   };
   addressable = {
     dependencies = ["public_suffix"];
@@ -22,25 +22,25 @@
     version = "2.7.0";
   };
   cms_scanner = {
-    dependencies = ["get_process_mem" "nokogiri" "opt_parse_validator" "public_suffix" "ruby-progressbar" "sys-proctable" "typhoeus" "xmlrpc" "yajl-ruby"];
+    dependencies = ["ethon" "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";
+      sha256 = "15qh28drxkyv294l1qcpsghfa875p71q0vkmmv5l6fbmpapmllrk";
       type = "gem";
     };
-    version = "0.7.1";
+    version = "0.13.5";
   };
   concurrent-ruby = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1x07r23s7836cpp5z9yrlbpljcxpax14yw4fy4bnp6crhr6x24an";
+      sha256 = "0nwad3211p7yv9sda31jmbyw6sdafzmdi2i2niaz6f0wk5nq9h0f";
       type = "gem";
     };
-    version = "1.1.5";
+    version = "1.1.9";
   };
   ethon = {
     dependencies = ["ffi"];
@@ -48,20 +48,20 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0gggrgkcq839mamx7a8jbnp2h7x2ykfn34ixwskwb0lzx2ak17g9";
+      sha256 = "1bby4hbq96vnzcdbbybcbddin8dxdnj1ns758kcr4akykningqhh";
       type = "gem";
     };
-    version = "0.12.0";
+    version = "0.14.0";
   };
   ffi = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "10ay35dm0lkcqprsiya6q2kwvyid884102ryipr4vrk790yfp8kd";
+      sha256 = "1wgvaclp4h9y8zkrgz8p2hqkrgr4j7kz0366mik0970w532cbmcq";
       type = "gem";
     };
-    version = "1.11.3";
+    version = "1.15.3";
   };
   get_process_mem = {
     dependencies = ["ffi"];
@@ -69,10 +69,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1q7pivp9z9pdxc2ha32q7x9zgqy8m9jf87g6n5mvi5l6knxya8sh";
+      sha256 = "1fkyyyxjcx4iigm8vhraa629k2lxa1npsv4015y82snx84v3rzaa";
       type = "gem";
     };
-    version = "0.2.5";
+    version = "0.2.7";
   };
   i18n = {
     dependencies = ["concurrent-ruby"];
@@ -80,41 +80,41 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0hmypvx9iyc0b4hski7aic2xzm09cg1c7q1qlpnk3k8s5acxzyhl";
+      sha256 = "0g2fnag935zn2ggm5cn6k4s4xvv53v2givj1j90szmvavlpya96a";
       type = "gem";
     };
-    version = "1.7.0";
+    version = "1.8.10";
   };
   mini_portile2 = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
+      sha256 = "1ad0mli9rc0f17zw4ibp24dbj1y39zkykijsjmnzl4gwpg5s0j6k";
       type = "gem";
     };
-    version = "2.4.0";
+    version = "2.5.3";
   };
   minitest = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0w16p7cvslh3hxd3cia8jg4pd85z7rz7xqb16vh42gj4rijn8rmi";
+      sha256 = "19z7wkhg59y8abginfrm2wzplz7py3va8fyngiigngqvsws6cwgl";
       type = "gem";
     };
-    version = "5.13.0";
+    version = "5.14.4";
   };
   nokogiri = {
-    dependencies = ["mini_portile2"];
+    dependencies = ["mini_portile2" "racc"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0r0qpgf80h764k176yr63gqbs2z0xbsp8vlvs2a79d5r9vs83kln";
+      sha256 = "1vrn31385ix5k9b0yalnlzv360isv6dincbcvi8psllnwz4sjxj9";
       type = "gem";
     };
-    version = "1.10.7";
+    version = "1.11.7";
   };
   opt_parse_validator = {
     dependencies = ["activesupport" "addressable"];
@@ -122,51 +122,51 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "19rm44ww3zfb440kqpdprwb7y2d0gcm4znhv4kfs8dkhz8k1k5vy";
+      sha256 = "1n297vrxq7r1fsh0x8yf1nhgdawmcl0sq04l468gwrd4y754rjyx";
       type = "gem";
     };
-    version = "1.8.1";
+    version = "1.9.4";
   };
   public_suffix = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0xnfv2j2bqgdpg2yq9i2rxby0w2sc9h5iyjkpaas2xknwrgmhdb0";
+      sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
       type = "gem";
     };
-    version = "4.0.1";
+    version = "4.0.6";
   };
-  ruby-progressbar = {
+  racc = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1k77i0d4wsn23ggdd2msrcwfy0i376cglfqypkk2q77r2l3408zf";
+      sha256 = "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g";
       type = "gem";
     };
-    version = "1.10.1";
+    version = "1.5.2";
   };
-  sys-proctable = {
-    dependencies = ["ffi"];
+  ruby-progressbar = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0ndk34ipd4v96v5cbvj0kbkhnssi4nqrzd7sifyg3bavi1jrw3w8";
+      sha256 = "02nmaw7yx9kl7rbaan5pl8x5nn0y4j5954mzrkzi9i3dhsrps4nc";
       type = "gem";
     };
-    version = "1.2.2";
+    version = "1.11.0";
   };
-  thread_safe = {
+  sys-proctable = {
+    dependencies = ["ffi"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      sha256 = "17zzb1slwhq0j42qh8ywnh4c5ww2wwskl9362ayxf0am86b02zsb";
       type = "gem";
     };
-    version = "0.3.6";
+    version = "1.2.6";
   };
   typhoeus = {
     dependencies = ["ethon"];
@@ -174,21 +174,31 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0cni8b1idcp0dk8kybmxydadhfpaj3lbs99w5kjibv8bsmip2zi5";
+      sha256 = "1m22yrkmbj81rzhlny81j427qdvz57yk5wbcf3km0nf3bl6qiygz";
       type = "gem";
     };
-    version = "1.3.1";
+    version = "1.4.0";
   };
   tzinfo = {
-    dependencies = ["thread_safe"];
+    dependencies = ["concurrent-ruby"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z";
+      sha256 = "10qp5x7f9hvlc0psv9gsfbxg4a7s0485wsbq1kljkxq94in91l4z";
       type = "gem";
     };
-    version = "1.2.5";
+    version = "2.0.4";
+  };
+  webrick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4cvgmxhfczxiq5fr534lmizkhigd15bsx5719r5ds7k7ivisc7";
+      type = "gem";
+    };
+    version = "1.7.0";
   };
   wpscan = {
     dependencies = ["cms_scanner"];
@@ -196,20 +206,21 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0vn6i48msxhj8g769vn2s3siv98cnqchblw69ldk1mr85lw4jci6";
+      sha256 = "01ig3fbxxm0gnvqkzmsc4zcipijprrw5xs84rnwp50w0crww842c";
       type = "gem";
     };
-    version = "3.7.5";
+    version = "3.8.18";
   };
   xmlrpc = {
+    dependencies = ["webrick"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1s744iwblw262gj357pky3d9fcx9hisvla7rnw29ysn5zsb6i683";
+      sha256 = "1xa79ry3976ylap38cr5g6q3m81plm611flqd3dwgnmgbkycb6jp";
       type = "gem";
     };
-    version = "0.3.0";
+    version = "0.3.2";
   };
   yajl-ruby = {
     groups = ["default"];
@@ -226,9 +237,9 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0jywi63w1m2b2w9fj9rjb9n3imf6p5bfijfmml1xzdnsrdrjz0x1";
+      sha256 = "1746czsjarixq0x05f7p3hpzi38ldg6wxnxxw74kbjzh1sdjgmpl";
       type = "gem";
     };
-    version = "2.2.2";
+    version = "2.4.2";
   };
 }
diff --git a/pkgs/tools/security/wpscan/update.sh b/pkgs/tools/security/wpscan/update.sh
new file mode 100755
index 00000000000..4e55a770fd4
--- /dev/null
+++ b/pkgs/tools/security/wpscan/update.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p bash bundix bundler
+
+set -e
+
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+rm -f Gemfile.lock Gemfile.lock
+bundler lock
+BUNDLE_GEMFILE=Gemfile bundler lock --lockfile=Gemfile.lock
+bundix --gemfile=Gemfile --lockfile=Gemfile.lock --gemset=gemset.nix
diff --git a/pkgs/tools/security/xcat/default.nix b/pkgs/tools/security/xcat/default.nix
new file mode 100644
index 00000000000..516585f8912
--- /dev/null
+++ b/pkgs/tools/security/xcat/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "xcat";
+  version = "1.2.0";
+  disabled = python3.pythonOlder "3.7";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "orf";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "01r5998gdvqjdrahpk0ci27lx9yghbddlanqcspr3qp5y5930i0s";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiodns
+    aiohttp
+    appdirs
+    cchardet
+    click
+    colorama
+    prompt_toolkit
+    xpath-expressions
+  ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "xcat" ];
+
+  meta = with lib; {
+    description = "XPath injection tool";
+    longDescription = ''
+      xcat is an advanced tool for exploiting XPath injection vulnerabilities,
+      featuring a comprehensive set of features to read the entire file being
+      queried as well as other files on the filesystem, environment variables
+      and directories.
+    '';
+    homepage = "https://github.com/orf/xcat";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/xorex/default.nix b/pkgs/tools/security/xorex/default.nix
new file mode 100644
index 00000000000..84919f54826
--- /dev/null
+++ b/pkgs/tools/security/xorex/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+python3.pkgs.buildPythonApplication rec {
+  pname = "xorex";
+  version = "0.3.0";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "Neo23x0";
+    repo = "xorex";
+    rev = version;
+    sha256 = "rBsOSXWnHRhpLmq20XBuGx8gGBM8ouMyOISkbzUcvE4=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    chmod +x xorex.py
+    mv xorex.py $out/bin/xorex
+
+    runHook postInstall
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    colorama
+    pefile
+  ];
+
+  meta = with lib; {
+    description = "XOR Key Extractor";
+    homepage = "https://github.com/Neo23x0/xorex";
+    license = licenses.asl20;
+    maintainers = teams.determinatesystems.members;
+  };
+}
diff --git a/pkgs/tools/security/xortool/default.nix b/pkgs/tools/security/xortool/default.nix
new file mode 100644
index 00000000000..1e8b6aee5d3
--- /dev/null
+++ b/pkgs/tools/security/xortool/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildPythonApplication
+, docopt
+, fetchFromGitHub
+, importlib-metadata
+, poetry-core
+}:
+
+buildPythonApplication rec {
+  pname = "xortool";
+  version = "1.0.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "hellman";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "19lfadi28r89bl5q8fhrxgjgs3nx3kgjd4rdg7wbvzi1cn29c5n7";
+  };
+
+  nativeBuildInputs = [ poetry-core ];
+
+  propagatedBuildInputs = [ docopt importlib-metadata ];
+
+  # Project has no tests
+  doCheck = false;
+  pythonImportsCheck = [ "xortool" ];
+
+  meta = with lib; {
+    description = "Tool to analyze multi-byte XOR cipher";
+    homepage = "https://github.com/hellman/xortool";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/yarGen/default.nix b/pkgs/tools/security/yarGen/default.nix
new file mode 100644
index 00000000000..8a2d51b8e19
--- /dev/null
+++ b/pkgs/tools/security/yarGen/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, python3
+, fetchFromGitHub
+, fetchpatch
+}:
+python3.pkgs.buildPythonApplication rec {
+  pname = "yarGen";
+  version = "0.23.4";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "Neo23x0";
+    repo = "yarGen";
+    rev = version;
+    sha256 = "6PJNAeeLAyUlZcIi0g57sO1Ex6atn7JhbK9kDbNrZ6A=";
+  };
+
+  patches = [
+    # https://github.com/Neo23x0/yarGen/pull/33
+    (fetchpatch {
+      name = "use-built-in-scandir.patch";
+      url = "https://github.com/Neo23x0/yarGen/commit/cae14ac8efeb5536885792cae99d1d0f7fb6fde3.patch";
+      sha256 = "0z6925r7n1iysld5c8li5nkm1dbxg8j7pn0626a4vic525vf8ndl";
+    })
+    # https://github.com/Neo23x0/yarGen/pull/34
+    (fetchpatch {
+      name = "use-cwd-for-abspath.patch";
+      url = "https://github.com/Neo23x0/yarGen/commit/441dafb702149f5728c2c6736fc08741a46deb26.patch";
+      sha256 = "lNp3oC2BM7tBzN4AetvPr+xJLz6KkZxQmsldeZaxJQU=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace yarGen.py \
+      --replace "./3rdparty/strings.xml" "$out/share/yarGen/3rdparty/strings.xml"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dt "$out/bin" yarGen.py
+    install -Dt "$out/share/yarGen/3rdparty" 3rdparty/strings.xml
+
+    runHook postInstall
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pefile
+    lxml
+  ];
+
+  meta = with lib; {
+    description = "A generator for YARA rules";
+    homepage = "https://github.com/Neo23x0/yarGen";
+    license = licenses.bsd3;
+    maintainers = teams.determinatesystems.members;
+  };
+}
diff --git a/pkgs/tools/security/yara/default.nix b/pkgs/tools/security/yara/default.nix
index 8a119535023..3eb5495d2c9 100644
--- a/pkgs/tools/security/yara/default.nix
+++ b/pkgs/tools/security/yara/default.nix
@@ -1,45 +1,56 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , autoreconfHook
 , pcre
 , pkg-config
 , protobufc
 , withCrypto ? true, openssl
-, enableMagic ? true, file
 , enableCuckoo ? true, jansson
+, enableDex ? true
+, enableDotNet ? true
+, enableMacho ? true
+, enableMagic ? true, file
+, enableStatic ? false
 }:
 
 stdenv.mkDerivation rec {
-  version = "4.0.1";
+  version = "4.1.1";
   pname = "yara";
 
   src = fetchFromGitHub {
     owner = "VirusTotal";
     repo = "yara";
     rev = "v${version}";
-    sha256 = "0dy8jf0pdn0wilxy1pj6pqjxg7icxkwax09w54np87gl9p00f5rk";
+    sha256 = "185j7firn7i5506rcp0va7sxdbminwrm06jsm4c70jf98qxmv522";
   };
 
   nativeBuildInputs = [ autoreconfHook pkg-config ];
 
   buildInputs = [ pcre protobufc ]
-    ++ stdenv.lib.optionals withCrypto [ openssl ]
-    ++ stdenv.lib.optionals enableMagic [ file ]
-    ++ stdenv.lib.optionals enableCuckoo [ jansson ]
+    ++ lib.optionals withCrypto [ openssl ]
+    ++ lib.optionals enableMagic [ file ]
+    ++ lib.optionals enableCuckoo [ jansson ]
   ;
 
   preConfigure = "./bootstrap.sh";
 
   configureFlags = [
-    (stdenv.lib.withFeature withCrypto "crypto")
-    (stdenv.lib.enableFeature enableMagic "magic")
-    (stdenv.lib.enableFeature enableCuckoo "cuckoo")
+    (lib.withFeature withCrypto "crypto")
+    (lib.enableFeature enableCuckoo "cuckoo")
+    (lib.enableFeature enableDex "dex")
+    (lib.enableFeature enableDotNet "dotnet")
+    (lib.enableFeature enableMacho "macho")
+    (lib.enableFeature enableMagic "magic")
+    (lib.enableFeature enableStatic "static")
   ];
 
-  meta = with stdenv.lib; {
+  doCheck = enableStatic;
+
+  meta = with lib; {
     description = "The pattern matching swiss knife for malware researchers";
     homepage = "http://Virustotal.github.io/yara/";
     license = licenses.asl20;
+    maintainers = with maintainers; [ fab ];
     platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/security/yubikey-agent/default.nix b/pkgs/tools/security/yubikey-agent/default.nix
index 5860fb3a03e..baccb14faf4 100644
--- a/pkgs/tools/security/yubikey-agent/default.nix
+++ b/pkgs/tools/security/yubikey-agent/default.nix
@@ -1,31 +1,27 @@
-{ stdenv, lib, fetchFromGitHub, buildGoModule, libnotify, makeWrapper, pcsclite, pinentry_mac, pkgconfig, darwin }:
+{ stdenv, lib, fetchFromGitHub, buildGoModule, libnotify, makeWrapper, pcsclite, pinentry_mac, pkg-config, darwin }:
 
 buildGoModule rec {
   pname = "yubikey-agent";
-  version = "0.1.3";
+  version = "0.1.4";
 
   src = fetchFromGitHub {
     owner = "FiloSottile";
     repo = pname;
     rev = "v${version}";
-    sha256 = "07gix5wrakn4z846zhvl66lzwx58djrfnn6m8v7vc69l9jr3kihr";
+    sha256 = "1b4522s7xkh6q74m0lprbnzg2hspg1pr9rzn94qmd06sry82d3fd";
   };
 
   buildInputs =
     lib.optional stdenv.isLinux (lib.getDev pcsclite)
     ++ lib.optional stdenv.isDarwin (darwin.apple_sdk.frameworks.PCSC);
 
-  nativeBuildInputs = [ makeWrapper pkgconfig ];
+  nativeBuildInputs = [ makeWrapper pkg-config ];
 
-  # pull in go-piv/piv-go#75
-  # once go-piv/piv-go#75 is merged and released, we should
-  # use the released version (and push upstream to do the same)
-  patches = [ ./use-piv-go-75.patch ];
   postPatch = lib.optionalString stdenv.isLinux ''
     substituteInPlace main.go --replace 'notify-send' ${libnotify}/bin/notify-send
   '';
 
-  vendorSha256 = "128mlsagj3im6h0p0ndhzk29ya47g19im9dldx3nmddf2jlccj2h";
+  vendorSha256 = "0cpj4nj2g0ick6p79h4pnjg7ybnyz9p26jivv0awi6bmn378nbxn";
 
   doCheck = false;
 
@@ -35,14 +31,9 @@ buildGoModule rec {
   # ensure the nixpkgs-provided one is available
   postInstall = lib.optionalString stdenv.isDarwin ''
     wrapProgram $out/bin/yubikey-agent --suffix PATH : $(dirname ${pinentry_mac}/${pinentry_mac.binaryPath})
-  ''
-  # Note: in the next release, upstream provides
-  # contrib/systemd/user/yubikey-agent.service, which we should use
-  # instead
-  # See https://github.com/FiloSottile/yubikey-agent/pull/43
-  + lib.optionalString stdenv.isLinux ''
+  '' + lib.optionalString stdenv.isLinux ''
     mkdir -p $out/lib/systemd/user
-    substitute ${./yubikey-agent.service} $out/lib/systemd/user/yubikey-agent.service \
+    substitute contrib/systemd/user/yubikey-agent.service $out/lib/systemd/user/yubikey-agent.service \
       --replace 'ExecStart=yubikey-agent' "ExecStart=$out/bin/yubikey-agent"
   '';
 
diff --git a/pkgs/tools/security/yubikey-agent/use-piv-go-75.patch b/pkgs/tools/security/yubikey-agent/use-piv-go-75.patch
deleted file mode 100644
index 73967d817d9..00000000000
--- a/pkgs/tools/security/yubikey-agent/use-piv-go-75.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From 547695fff9cbfc4037168cdeb07cfe16bd89b6db Mon Sep 17 00:00:00 2001
-From: Philip Potter <philip.g.potter@gmail.com>
-Date: Sat, 25 Jul 2020 21:59:50 +0100
-Subject: [PATCH] Pull in piv-go#75
-
----
- go.mod | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/go.mod b/go.mod
-index d4d13c8..f75be2d 100644
---- a/go.mod
-+++ b/go.mod
-@@ -7,3 +7,5 @@ require (
- 	github.com/gopasspw/gopass v1.9.1
- 	golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79
- )
-+
-+replace github.com/go-piv/piv-go => github.com/rawkode/piv-go v1.5.1-0.20200725154545-1c3200c75a28
--- 
-2.27.0
-
diff --git a/pkgs/tools/security/yubikey-agent/yubikey-agent.service b/pkgs/tools/security/yubikey-agent/yubikey-agent.service
deleted file mode 100644
index 7a91f902544..00000000000
--- a/pkgs/tools/security/yubikey-agent/yubikey-agent.service
+++ /dev/null
@@ -1,35 +0,0 @@
-[Unit]
-Description=Seamless ssh-agent for YubiKeys
-Documentation=https://filippo.io/yubikey-agent
-
-[Service]
-ExecStart=yubikey-agent -l %t/yubikey-agent/yubikey-agent.sock
-ExecReload=/bin/kill -HUP $MAINPID
-ProtectSystem=strict
-ProtectKernelLogs=yes
-ProtectKernelModules=yes
-ProtectKernelTunables=yes
-ProtectControlGroups=yes
-ProtectClock=yes
-ProtectHostname=yes
-PrivateTmp=yes
-PrivateDevices=yes
-PrivateUsers=yes
-IPAddressDeny=any
-RestrictAddressFamilies=AF_UNIX
-RestrictNamespaces=yes
-RestrictRealtime=yes
-RestrictSUIDSGID=yes
-LockPersonality=yes
-CapabilityBoundingSet=
-SystemCallFilter=@system-service
-SystemCallFilter=~@privileged @resources
-SystemCallErrorNumber=EPERM
-SystemCallArchitectures=native
-NoNewPrivileges=yes
-KeyringMode=private
-UMask=0177
-RuntimeDirectory=yubikey-agent
-
-[Install]
-WantedBy=default.target
diff --git a/pkgs/tools/security/zdns/default.nix b/pkgs/tools/security/zdns/default.nix
new file mode 100644
index 00000000000..913735d4cb9
--- /dev/null
+++ b/pkgs/tools/security/zdns/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "zdns";
+  version = "20210327-${lib.strings.substring 0 7 rev}";
+  rev = "8c53210f0b9a4fe16c70a5d854e9413c3d0c1ba2";
+
+  src = fetchFromGitHub {
+    owner = "zmap";
+    repo = pname;
+    inherit rev;
+    sha256 = "0pdfz1489ynpw72flalnlkwybp683v826icjx7ljys45xvagdvck";
+  };
+
+  vendorSha256 = "0b8h5n01xmhar1a09svb35ah48k9zdy1mn5balq0h2l0jxr05z78";
+
+  subPackages = [ "zdns" ];
+
+  meta = with lib; {
+    description = "CLI DNS lookup tool";
+    homepage = "https://github.com/zmap/zdns";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/zgrab2/default.nix b/pkgs/tools/security/zgrab2/default.nix
new file mode 100644
index 00000000000..b8863a6a94e
--- /dev/null
+++ b/pkgs/tools/security/zgrab2/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "zgrab2";
+  version = "20210327-${lib.strings.substring 0 7 rev}";
+  rev = "17a5257565c758e2b817511d15476d330be0a17a";
+
+  src = fetchFromGitHub {
+    owner = "zmap";
+    repo = pname;
+    inherit rev;
+    sha256 = "1hxk2jggj8lww97lwmks46i001p5ycnxnck8yya6d0fd3ayxvw2w";
+  };
+
+  vendorSha256 = "1s0azy5b5hi5h24vs6a9f1n70l980vkid28ihqh10zq6ajmds2z3";
+
+  subPackages = [ "cmd/zgrab2" ];
+
+  meta = with lib; {
+    description = "Web application scanner";
+    homepage = "https://github.com/zmap/zgrab2";
+    license = with licenses; [ asl20 isc ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/security/zmap/default.nix b/pkgs/tools/security/zmap/default.nix
index e2350b67c7d..0e37b725db4 100644
--- a/pkgs/tools/security/zmap/default.nix
+++ b/pkgs/tools/security/zmap/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig, libjson, json_c, gengetopt, flex, byacc, gmp
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, libjson, json_c, gengetopt, flex, byacc, gmp
 , libpcap
 }:
 
@@ -21,12 +21,12 @@ stdenv.mkDerivation rec {
   cmakeFlags = [ "-DRESPECT_INSTALL_PREFIX_CONFIG=ON" ];
   dontUseCmakeBuildDir = true;
 
-  nativeBuildInputs = [ cmake pkgconfig gengetopt flex byacc ];
+  nativeBuildInputs = [ cmake pkg-config gengetopt flex byacc ];
   buildInputs = [ libjson json_c gmp libpcap ];
 
   outputs = [ "out" "man" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://zmap.io/";
     license = licenses.asl20;
     description = "Fast single packet network scanner designed for Internet-wide network surveys";
diff --git a/pkgs/tools/security/zsteg/Gemfile b/pkgs/tools/security/zsteg/Gemfile
new file mode 100644
index 00000000000..814e5fe8ad4
--- /dev/null
+++ b/pkgs/tools/security/zsteg/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'zsteg'
diff --git a/pkgs/tools/security/zsteg/Gemfile.lock b/pkgs/tools/security/zsteg/Gemfile.lock
new file mode 100644
index 00000000000..b611fb93f5a
--- /dev/null
+++ b/pkgs/tools/security/zsteg/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    iostruct (0.0.4)
+    rainbow (3.0.0)
+    zpng (0.3.1)
+      rainbow
+    zsteg (0.2.2)
+      iostruct
+      zpng (>= 0.3.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  zsteg
+
+BUNDLED WITH
+   2.1.4
diff --git a/pkgs/tools/security/zsteg/default.nix b/pkgs/tools/security/zsteg/default.nix
new file mode 100644
index 00000000000..e47f285de70
--- /dev/null
+++ b/pkgs/tools/security/zsteg/default.nix
@@ -0,0 +1,16 @@
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "zsteg";
+
+  gemdir = ./.;
+
+  exes = [ "zsteg" ];
+
+  meta = with lib; {
+    description = "Detect stegano-hidden data in PNG & BMP.";
+    homepage = "http://zed.0xff.me/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ applePrincess ];
+  };
+}
diff --git a/pkgs/tools/security/zsteg/gemset.nix b/pkgs/tools/security/zsteg/gemset.nix
new file mode 100644
index 00000000000..4f5bd79ce44
--- /dev/null
+++ b/pkgs/tools/security/zsteg/gemset.nix
@@ -0,0 +1,44 @@
+{
+  iostruct = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kwp6ryis32j3z7myw8g7v1yszwrwyl04g2c7flr42pwxga1afxc";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  rainbow = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bb2fpjspydr6x0s8pn1pqkzmxszvkfapv0p4627mywl7ky4zkhk";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  zpng = {
+    dependencies = ["rainbow"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ciyab7qxqsxjhfvr6rbpdzg655fi1zygqg9sd9m6wmgc037dj74";
+      type = "gem";
+    };
+    version = "0.3.1";
+  };
+  zsteg = {
+    dependencies = ["iostruct" "zpng"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mwajlsgs27449n2yf2f9hz8g46qv9bz9f58i9cz1jg58spvpxpk";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+}
diff --git a/pkgs/tools/security/zzuf/default.nix b/pkgs/tools/security/zzuf/default.nix
index 5dab990e22f..f8f7bece3a5 100644
--- a/pkgs/tools/security/zzuf/default.nix
+++ b/pkgs/tools/security/zzuf/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoconf, automake, libtool, pkgconfig }:
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "zzuf";
@@ -11,12 +11,12 @@ stdenv.mkDerivation rec {
     sha256 = "0li1s11xf32dafxq1jbnc8c63313hy9ry09dja2rymk9mza4x2n9";
   };
 
-  buildInputs = [ autoconf automake libtool pkgconfig ];
+  buildInputs = [ autoconf automake libtool pkg-config ];
 
   preConfigure = "./bootstrap";
 
-  meta = with stdenv.lib; {
-    description = "Transparent application input fuzzer.";
+  meta = with lib; {
+    description = "Transparent application input fuzzer";
     homepage = "http://caca.zoy.org/wiki/zzuf";
     license = licenses.wtfpl;
     platforms = platforms.linux;
diff --git a/pkgs/tools/system/acct/default.nix b/pkgs/tools/system/acct/default.nix
index dd4eb0d5d2b..fbe396f1fdf 100644
--- a/pkgs/tools/system/acct/default.nix
+++ b/pkgs/tools/system/acct/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv }:
+{ fetchurl, lib, stdenv }:
 
 stdenv.mkDerivation rec {
   name = "acct-6.6.4";
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "GNU Accounting Utilities, login and process accounting utilities";
 
     longDescription = ''
diff --git a/pkgs/tools/system/acpica-tools/default.nix b/pkgs/tools/system/acpica-tools/default.nix
index 62b1be61965..36ad8ff06e3 100644
--- a/pkgs/tools/system/acpica-tools/default.nix
+++ b/pkgs/tools/system/acpica-tools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, bison, flex }:
+{ lib, stdenv, fetchurl, bison, flex }:
 
 stdenv.mkDerivation rec {
   pname = "acpica-tools";
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
 
   installFlags = [ "PREFIX=${placeholder "out"}" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "ACPICA Tools";
     homepage = "https://www.acpica.org/";
     license = with licenses; [ gpl2 bsd3 ];
diff --git a/pkgs/tools/system/actkbd/default.nix b/pkgs/tools/system/actkbd/default.nix
index 706b3700a41..ac2fb338d3d 100644
--- a/pkgs/tools/system/actkbd/default.nix
+++ b/pkgs/tools/system/actkbd/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv }:
+{ fetchurl, lib, stdenv }:
 
 stdenv.mkDerivation rec {
   name = "actkbd-0.2.8";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
     cp -r README samples $out/share/doc/actkbd
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A keyboard shortcut daemon";
     longDescription = ''
       actkbd is a simple daemon that binds actions to keyboard events
diff --git a/pkgs/tools/system/amtterm/default.nix b/pkgs/tools/system/amtterm/default.nix
index 9050111fc17..4ceb1aea72b 100644
--- a/pkgs/tools/system/amtterm/default.nix
+++ b/pkgs/tools/system/amtterm/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, makeWrapper, perl, perlPackages }:
+{ fetchurl, lib, stdenv, makeWrapper, perl, perlPackages }:
 
 
 stdenv.mkDerivation rec {
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
   postInstall =
     "wrapProgram $out/bin/amttool --prefix PERL5LIB : $PERL5LIB";
 
-  meta = with stdenv.lib;
+  meta = with lib;
     { description = "Intel AMT® SoL client + tools";
       homepage = "https://www.kraxel.org/cgit/amtterm/";
       license = licenses.gpl2;
diff --git a/pkgs/tools/system/at/default.nix b/pkgs/tools/system/at/default.nix
index 278b14cd199..11a45fbe391 100644
--- a/pkgs/tools/system/at/default.nix
+++ b/pkgs/tools/system/at/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, bison, flex, pam, perl
+{ lib, stdenv, fetchurl, fetchpatch, bison, flex, pam, perl
 , sendmailPath ? "/run/wrappers/bin/sendmail"
 , atWrapperPath ? "/run/wrappers/bin/at"
 }:
@@ -51,9 +51,9 @@ stdenv.mkDerivation rec {
   '';
 
   meta = {
-    description = ''The classical Unix `at' job scheduling command'';
-    license = stdenv.lib.licenses.gpl2Plus;
+    description = "The classical Unix `at' job scheduling command";
+    license = lib.licenses.gpl2Plus;
     homepage = "https://packages.qa.debian.org/at";
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/system/augeas/default.nix b/pkgs/tools/system/augeas/default.nix
index 338b8f8ac45..3b3d2864d71 100644
--- a/pkgs/tools/system/augeas/default.nix
+++ b/pkgs/tools/system/augeas/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, readline, libxml2 }:
+{ lib, stdenv, fetchurl, pkg-config, readline, libxml2 }:
 
 stdenv.mkDerivation rec {
   pname = "augeas";
@@ -8,10 +8,10 @@ stdenv.mkDerivation rec {
     url = "http://download.augeas.net/${pname}-${version}.tar.gz";
     sha256 = "11ybhb13wkkilsn7b416a1dn61m1xrq0lbdpkhp5w61jrk4l469j";
   };
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ readline libxml2 ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Configuration editing tool";
     license = licenses.lgpl2;
     homepage = "http://augeas.net/";
diff --git a/pkgs/tools/system/auto-cpufreq/default.nix b/pkgs/tools/system/auto-cpufreq/default.nix
new file mode 100644
index 00000000000..28d771f07b2
--- /dev/null
+++ b/pkgs/tools/system/auto-cpufreq/default.nix
@@ -0,0 +1,39 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonPackage rec {
+  pname = "auto-cpufreq";
+  version = "1.6.4";
+
+  src = fetchFromGitHub {
+    owner = "AdnanHodzic";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-9WYuAWcJGosYEsnnkqvZLXXvqF+1nBEozh6F84Kit6w=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ click distro psutil ];
+
+  doCheck = false;
+  pythonImportsCheck = [ "auto_cpufreq" ];
+
+  # patch to prevent script copying and to disable install
+  patches = [ ./prevent-install-and-copy.patch ];
+
+  postInstall = ''
+    # copy script manually
+    cp ${src}/scripts/cpufreqctl.sh $out/bin/cpufreqctl.auto-cpufreq
+
+    # systemd service
+    mkdir -p $out/lib/systemd/system
+    cp ${src}/scripts/auto-cpufreq.service $out/lib/systemd/system
+    substituteInPlace $out/lib/systemd/system/auto-cpufreq.service --replace "/usr/local" $out
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/AdnanHodzic/auto-cpufreq";
+    description = "Automatic CPU speed & power optimizer for Linux";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.Technical27 ];
+  };
+}
diff --git a/pkgs/tools/system/auto-cpufreq/prevent-install-and-copy.patch b/pkgs/tools/system/auto-cpufreq/prevent-install-and-copy.patch
new file mode 100644
index 00000000000..41bd3dc5916
--- /dev/null
+++ b/pkgs/tools/system/auto-cpufreq/prevent-install-and-copy.patch
@@ -0,0 +1,168 @@
+diff --git a/auto_cpufreq/core.py b/auto_cpufreq/core.py
+index 83d0d64..04b5035 100644
+--- a/auto_cpufreq/core.py
++++ b/auto_cpufreq/core.py
+@@ -204,35 +204,13 @@ def get_current_gov():
+ 
+ 
+ def cpufreqctl():
+-    """
+-    deploy cpufreqctl script
+-    """
+-
+-    # detect if running on a SNAP
+-    if os.getenv("PKG_MARKER") == "SNAP":
+-        pass
+-    else:
+-        # deploy cpufreqctl.auto-cpufreq script
+-        if os.path.isfile("/usr/bin/cpufreqctl"):
+-            shutil.copy(
+-                SCRIPTS_DIR / "cpufreqctl.sh", "/usr/bin/cpufreqctl.auto-cpufreq"
+-            )
+-        else:
+-            shutil.copy(
+-                SCRIPTS_DIR / "cpufreqctl.sh", "/usr/bin/cpufreqctl.auto-cpufreq"
+-            )
++    # scripts are already in the correct place
++    pass
+ 
+ 
+ def cpufreqctl_restore():
+-    """
+-    remove cpufreqctl.auto-cpufreq script
+-    """
+-    # detect if running on a SNAP
+-    if os.getenv("PKG_MARKER") == "SNAP":
+-        pass
+-    else:
+-        if os.path.isfile("/usr/bin/cpufreqctl.auto-cpufreq"):
+-            os.remove("/usr/bin/cpufreqctl.auto-cpufreq")
++    # no need to restore
++    pass
+ 
+ 
+ def footer(l=79):
+@@ -276,76 +254,13 @@ def remove_complete_msg():
+ 
+ 
+ def deploy_daemon():
+-    print("\n" + "-" * 21 + " Deploying auto-cpufreq as a daemon " + "-" * 22 + "\n")
+-
+-    # deploy cpufreqctl script func call
+-    cpufreqctl()
+-
+-    print("* Turn off bluetooth on boot")
+-    btconf = Path("/etc/bluetooth/main.conf")
+-    try:
+-        orig_set = "AutoEnable=true"
+-        change_set = "AutoEnable=false"
+-        with btconf.open(mode="r+") as f:
+-            content = f.read()
+-            f.seek(0)
+-            f.truncate()
+-            f.write(content.replace(orig_set, change_set))
+-    except Exception as e:
+-        print(f"\nERROR:\nWas unable to turn off bluetooth on boot\n{repr(e)}")
+-
+-    auto_cpufreq_stats_path.touch(exist_ok=True)
+-
+-    print("\n* Deploy auto-cpufreq install script")
+-    shutil.copy(
+-        SCRIPTS_DIR / "auto-cpufreq-install.sh", "/usr/bin/auto-cpufreq-install"
+-    )
+-
+-    print("\n* Deploy auto-cpufreq remove script")
+-    shutil.copy(SCRIPTS_DIR / "auto-cpufreq-remove.sh", "/usr/bin/auto-cpufreq-remove")
+-
+-    call("/usr/bin/auto-cpufreq-install", shell=True)
++    # prevent needless copying and system changes
++    pass
+ 
+ 
+ # remove auto-cpufreq daemon
+ def remove():
+-
+-    # check if auto-cpufreq is installed
+-    if not os.path.exists("/usr/bin/auto-cpufreq-remove"):
+-        print("\nauto-cpufreq daemon is not installed.\n")
+-        sys.exit(1)
+-
+-    print("\n" + "-" * 21 + " Removing auto-cpufreq daemon " + "-" * 22 + "\n")
+-
+-    print("* Turn on bluetooth on boot")
+-    btconf = "/etc/bluetooth/main.conf"
+-    try:
+-        orig_set = "AutoEnable=true"
+-        change_set = "AutoEnable=false"
+-        with open(btconf, "r+") as f:
+-            content = f.read()
+-            f.seek(0)
+-            f.truncate()
+-            f.write(content.replace(change_set, orig_set))
+-    except Exception as e:
+-        print(f"\nERROR:\nWas unable to turn on bluetooth on boot\n{repr(e)}")
+-
+-    # run auto-cpufreq daemon install script
+-    call("/usr/bin/auto-cpufreq-remove", shell=True)
+-
+-    # remove auto-cpufreq-remove
+-    os.remove("/usr/bin/auto-cpufreq-remove")
+-
+-    # delete stats file
+-    if auto_cpufreq_stats_path.exists():
+-        if auto_cpufreq_stats_file is not None:
+-            auto_cpufreq_stats_file.close()
+-
+-        auto_cpufreq_stats_path.unlink()
+-
+-    # restore original cpufrectl script
+-    cpufreqctl_restore()
+-
++    pass
+ 
+ def gov_check():
+     for gov in get_avail_gov():
+diff --git a/scripts/cpufreqctl.sh b/scripts/cpufreqctl.sh
+index 63a2b5b..e157efe 100755
+--- a/scripts/cpufreqctl.sh
++++ b/scripts/cpufreqctl.sh
+@@ -467,35 +467,21 @@ fi
+ 
+ if [ $OPTION = "--install" ]
+ then
+-  echo 'installing helpers...'
+-  cp $0 /usr/bin/
+-  echo 'installing policy...'
+-  cp $(dirname "$(readlink -f "$0")")/konkor.cpufreq.policy /usr/share/polkit-1/actions/
+-  echo 'installing fonts...'
+-  mkdir -p /usr/share/fonts/truetype/cpufreq
+-  cp $(dirname "$(readlink -f "$0")")/fonts/cpufreq.ttf /usr/share/fonts/truetype/cpufreq/
+-  echo "done"
++  echo "install is disabled in the nix package"
+   exit
+ fi
+ if [ $OPTION = "--update-fonts" ]
+ then
+-  fc-cache -f
++  echo "update-fonts is disabled in the nix package"
+   exit
+ fi
+ if [ $OPTION = "--uninstall" ]
+ then
+-  echo 'uninstalling cpufreqctl helper...'
+-  rm /usr/bin/cpufreqctl
+-  echo 'uninstalling policy...'
+-  rm /usr/share/polkit-1/actions/konkor.cpufreq.policy
+-  echo 'uninstalling fonts...'
+-  rm -rf /usr/share/fonts/truetype/cpufreq
+-  echo "done"
++  echo "uninstall is disabled in the nix package"
+   exit
+ fi
+ if [ $OPTION = "--reset" ]
+ then
+-  echo 'reset to default values...'
+-  dconf reset -f "/org/gnome/shell/extensions/cpufreq/"
++  echo "reset is disabled in the nix package"
+   exit
+ fi
diff --git a/pkgs/tools/system/awstats/default.nix b/pkgs/tools/system/awstats/default.nix
index 9da6ac59f3d..e0fb92b519f 100644
--- a/pkgs/tools/system/awstats/default.nix
+++ b/pkgs/tools/system/awstats/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchurl, perlPackages, jdk }:
+{ lib, fetchurl, perlPackages, jdk }:
 
 perlPackages.buildPerlPackage rec {
   pname = "awstats";
-  version = "7.7";
+  version = "7.8";
 
   src = fetchurl {
     url = "mirror://sourceforge/awstats/${pname}-${version}.tar.gz";
-    sha256 = "0z3p77jnpjilajs9yv87r8xla2x1gjqlvrhpbgbh5ih73386v3j2";
+    sha256 = "1f6l0hd01jmz7hpg0py8qixxiq50n8gl37iypayskxmy05z8craa";
   };
 
   postPatch = ''
@@ -52,9 +52,9 @@ perlPackages.buildPerlPackage rec {
     mv docs "$doc/share/doc/awstats"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Real-time logfile analyzer to get advanced statistics";
-    homepage = "http://awstats.org";
+    homepage = "https://awstats.org";
     license = licenses.gpl3Plus;
     platforms = platforms.unix;
   };
diff --git a/pkgs/tools/system/bar/default.nix b/pkgs/tools/system/bar/default.nix
index 32945a24bb1..79bb3f79a99 100644
--- a/pkgs/tools/system/bar/default.nix
+++ b/pkgs/tools/system/bar/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation {
   name = "bar-1.11.1";
@@ -11,8 +11,8 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.rdnetto ];
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/system/bfs/default.nix b/pkgs/tools/system/bfs/default.nix
index 78e92e01c6e..4b1bcec96a7 100644
--- a/pkgs/tools/system/bfs/default.nix
+++ b/pkgs/tools/system/bfs/default.nix
@@ -1,27 +1,27 @@
-{ stdenv, fetchFromGitHub, libcap, acl }:
+{ lib, stdenv, fetchFromGitHub, libcap, acl }:
 
 stdenv.mkDerivation rec {
   pname = "bfs";
-  version = "1.7";
+  version = "2.2.1";
 
   src = fetchFromGitHub {
     repo = "bfs";
     owner = "tavianator";
     rev = version;
-    sha256 = "1jkz99i10y6dwc4dyh2vp3p549jscgwjdp6x17mcw561bnam2287";
+    sha256 = "sha256-3E1EXtI8QvHRDoVSV21K1/Rknp3E+GV1n5iorrv5jNY=";
   };
 
-  buildInputs = stdenv.lib.optionals stdenv.isLinux [ libcap acl ];
+  buildInputs = lib.optionals stdenv.isLinux [ libcap acl ];
 
   # Disable LTO on darwin. See https://github.com/NixOS/nixpkgs/issues/19098
-  preConfigure = stdenv.lib.optionalString stdenv.isDarwin ''
+  preConfigure = lib.optionalString stdenv.isDarwin ''
     substituteInPlace Makefile --replace "-flto -DNDEBUG" "-DNDEBUG"
   '';
 
   makeFlags = [ "PREFIX=$(out)" ];
   buildFlags = [ "release" ]; # "release" enables compiler optimizations
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/system/bottom/default.nix b/pkgs/tools/system/bottom/default.nix
new file mode 100644
index 00000000000..1401f2a78a9
--- /dev/null
+++ b/pkgs/tools/system/bottom/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, DiskArbitration
+, Foundation
+, IOKit
+, installShellFiles
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bottom";
+  version = "0.6.3";
+
+  src = fetchFromGitHub {
+    owner = "ClementTsang";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-hXEaQL4jTd/MfEUVKUTs7oTRAffau1YA/IUUtD+V9KI=";
+  };
+
+  prePatch = ''
+    rm .cargo/config.toml
+  '';
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
+    DiskArbitration
+    Foundation
+    IOKit
+    libiconv
+  ];
+
+  cargoSha256 = "sha256-aeR6fcIWkY4AWZy8tVotUAVRVSiO/0S0DU/A9/ATrF4=";
+
+  doCheck = false;
+
+  postInstall = ''
+    installShellCompletion $releaseDir/build/bottom-*/out/btm.{bash,fish} --zsh $releaseDir/build/bottom-*/out/_btm
+  '';
+
+  meta = with lib; {
+    description = "A cross-platform graphical process/system monitor with a customizable interface";
+    homepage = "https://github.com/ClementTsang/bottom";
+    license = licenses.mit;
+    maintainers = with maintainers; [ berbiche ];
+    platforms = platforms.unix;
+    mainProgram = "btm";
+  };
+}
diff --git a/pkgs/tools/system/bpytop/default.nix b/pkgs/tools/system/bpytop/default.nix
index a408f44ec10..f552ede91b5 100644
--- a/pkgs/tools/system/bpytop/default.nix
+++ b/pkgs/tools/system/bpytop/default.nix
@@ -1,17 +1,23 @@
-{ stdenv, python3Packages, fetchFromGitHub, makeWrapper, substituteAll }:
+{ lib
+, stdenv
+, python3Packages
+, fetchFromGitHub
+, makeWrapper
+}:
 
 stdenv.mkDerivation rec {
   pname = "bpytop";
-  version = "1.0.21";
+  version = "1.0.67";
 
   src = fetchFromGitHub {
     owner = "aristocratos";
     repo = pname;
     rev = "v${version}";
-    sha256 = "10cygn4srmzk1b279hrlp4rjbldkzq7354fhm0jbmd3rp15b454p";
+    sha256 = "sha256-nvpIqX16WP9kslFo1ne5+QAZcvG+WFm5kDVOLN4C+b0=";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
+
   propagatedBuildInputs = with python3Packages; [ python psutil ];
 
   dontBuild = true;
@@ -19,6 +25,7 @@ stdenv.mkDerivation rec {
   postPatch = ''
     sed -i -e "s#/usr/\[local/\]#$out/#g" \
            -e "s#/usr/{td}#$out/#g" \
+           -e "s#THEME_DIR: str = \"\"#THEME_DIR: str = \"$out/share/bpytop/themes\"#" \
       ./bpytop.py
   '';
 
@@ -32,7 +39,7 @@ stdenv.mkDerivation rec {
       --prefix PYTHONPATH : "$PYTHONPATH"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A resource monitor; python port of bashtop";
     homepage = src.meta.homepage;
     license = licenses.apsl20;
diff --git a/pkgs/tools/system/chase/default.nix b/pkgs/tools/system/chase/default.nix
index c4396aad9ca..ff4885b088d 100644
--- a/pkgs/tools/system/chase/default.nix
+++ b/pkgs/tools/system/chase/default.nix
@@ -1,10 +1,10 @@
-{ stdenv, fetchurl ,pkgconfig, libatomic_ops , boehmgc }:
+{ lib, stdenv, fetchurl ,pkg-config, libatomic_ops , boehmgc }:
 
 stdenv.mkDerivation rec {
   pname = "chase";
   version = "0.5.2";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libatomic_ops boehmgc ] ;
   src = fetchurl {
     url = "mirror://debian/pool/main/c/chase/chase_${version}.orig.tar.gz";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
   makeFlags = [ "-e" ];
   makeFlagsArray="LIBS=-lgc";
 
-  meta = with stdenv.lib ; {
+  meta = with lib ; {
     description = "Follow a symlink and print out its target file";
     longDescription = ''
     A commandline program that chases symbolic filesystems links to the original file
diff --git a/pkgs/tools/system/clinfo/default.nix b/pkgs/tools/system/clinfo/default.nix
index c50bfe4a0d0..9c5b54f554b 100644
--- a/pkgs/tools/system/clinfo/default.nix
+++ b/pkgs/tools/system/clinfo/default.nix
@@ -1,27 +1,30 @@
-{ stdenv, fetchFromGitHub, ocl-icd, opencl-headers }:
+{ lib, stdenv, fetchFromGitHub, ocl-icd, opencl-headers }:
 
 stdenv.mkDerivation rec {
   pname = "clinfo";
-  version = "2.2.18.04.06";
+  version = "3.0.21.02.21";
 
-    src = fetchFromGitHub {
-      owner = "Oblomov";
-      repo = "clinfo";
-      rev = version;
-      sha256 = "0y2q0lz5yzxy970b7w7340vp4fl25vndahsyvvrywcrn51ipgplx";
-    };
+  src = fetchFromGitHub {
+    owner = "Oblomov";
+    repo = "clinfo";
+    rev = version;
+    sha256 = "sha256-0ijfbfv1F6mnt1uFH/A4yOADJoAFrPMa3yAOFJW53ek=";
+  };
 
   buildInputs = [ ocl-icd opencl-headers ];
 
-  NIX_CFLAGS_COMPILE = [ "-Wno-error=stringop-truncation" ];
+  NIX_CFLAGS_COMPILE = [
+    "-Wno-error=stringop-overflow"
+    "-Wno-error=stringop-truncation"
+  ];
 
   makeFlags = [ "PREFIX=${placeholder "out"}" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/system/cm-rgb/default.nix b/pkgs/tools/system/cm-rgb/default.nix
index acfe440b5d5..3a6c7c6e57c 100644
--- a/pkgs/tools/system/cm-rgb/default.nix
+++ b/pkgs/tools/system/cm-rgb/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib
 , buildPythonApplication
 , fetchFromGitHub
 , atk
@@ -12,13 +12,13 @@
 
 buildPythonApplication rec {
   pname = "cm-rgb";
-  version = "0.3.4";
+  version = "0.3.6";
 
   src = fetchFromGitHub {
     owner = "gfduszynski";
     repo = pname;
     rev = "v${version}";
-    sha256 = "04brldaa2zpvzkcg43i5hpbj03d1nqrgiplm5nh4shn12cif19ag";
+    sha256 = "sha256-m0ZAjSLRzcjzygLEbvCiDd7krc1gRqTg1ZV4H/o2c68=";
   };
 
   nativeBuildInputs = [
@@ -37,21 +37,17 @@ buildPythonApplication rec {
   ];
 
   postInstall = ''
-    # Remove this line when/if this PR gets merged:
-    # https://github.com/gfduszynski/cm-rgb/pull/43 
-    install -m0755 scripts/cm-rgb-gui $out/bin/cm-rgb-gui
-
     mkdir -p $out/etc/udev/rules.d
     echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="2516", ATTR{idProduct}=="0051", TAG+="uaccess"' \
       > $out/etc/udev/rules.d/60-cm-rgb.rules
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Control AMD Wraith Prism RGB LEDs";
     longDescription = ''
       cm-rgb controls AMD Wraith Prism RGB LEDS.
 
-      To permit non-root accounts to change use this utility on
+      To permit non-root accounts to use this utility on
       NixOS, add this package to <literal>services.udev.packages</literal>
       in <filename>configuration.nix</filename>.
     '';
diff --git a/pkgs/tools/system/collectd/data.nix b/pkgs/tools/system/collectd/data.nix
index 378eb62d6cc..3867bd6bb3d 100644
--- a/pkgs/tools/system/collectd/data.nix
+++ b/pkgs/tools/system/collectd/data.nix
@@ -5,7 +5,7 @@ stdenv.mkDerivation {
 
   pname = "collectd-data";
 
-  phases = [ "installPhase" ];
+  dontUnpack = true;
 
   installPhase = ''
     mkdir -p $out/share/collectd
diff --git a/pkgs/tools/system/collectd/default.nix b/pkgs/tools/system/collectd/default.nix
index f625a441ba3..600c5cbfecd 100644
--- a/pkgs/tools/system/collectd/default.nix
+++ b/pkgs/tools/system/collectd/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchurl, fetchpatch, darwin, callPackage
+{ lib, stdenv, fetchurl, fetchpatch, darwin, callPackage
 , autoreconfHook
-, pkgconfig
+, pkg-config
 , libtool
 , ...
 }@args:
@@ -8,18 +8,18 @@ let
   plugins = callPackage ./plugins.nix args;
 in
 stdenv.mkDerivation rec {
-  version = "5.11.0";
+  version = "5.12.0";
   pname = "collectd";
 
   src = fetchurl {
     url = "https://collectd.org/files/${pname}-${version}.tar.bz2";
-    sha256 = "1cjxksxdqcqdccz1nbnc2fp6yy84qq361ynaq5q8bailds00mc9p";
+    sha256 = "1mh97afgq6qgmpvpr84zngh58m0sl1b4wimqgvvk376188q09bjv";
   };
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
   buildInputs = [
     libtool
-  ] ++ stdenv.lib.optionals stdenv.isDarwin [
+  ] ++ lib.optionals stdenv.isDarwin [
     darwin.apple_sdk.frameworks.ApplicationServices
   ] ++ plugins.buildInputs;
 
@@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Daemon which collects system performance statistics periodically";
     homepage = "https://collectd.org";
     license = licenses.gpl2;
diff --git a/pkgs/tools/system/collectd/plugins.nix b/pkgs/tools/system/collectd/plugins.nix
index defeed4c892..dd578cd6393 100644
--- a/pkgs/tools/system/collectd/plugins.nix
+++ b/pkgs/tools/system/collectd/plugins.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , curl
 , darwin
 , hiredis
@@ -49,7 +49,7 @@ let
     aggregation = {};
     amqp = {
       buildInputs = [ yajl ] ++
-        stdenv.lib.optionals stdenv.isLinux [ rabbitmq-c ];
+        lib.optionals stdenv.isLinux [ rabbitmq-c ];
     };
     apache = {
       buildInputs = [ curl ];
@@ -62,7 +62,7 @@ let
     };
     barometer = {};
     battery = {
-      buildInputs = stdenv.lib.optionals stdenv.isDarwin [
+      buildInputs = lib.optionals stdenv.isDarwin [
         darwin.apple_sdk.frameworks.IOKit
       ];
     };
@@ -94,9 +94,9 @@ let
     };
     df = {};
     disk = {
-      buildInputs = stdenv.lib.optionals stdenv.isLinux [
+      buildInputs = lib.optionals stdenv.isLinux [
         udev
-      ] ++ stdenv.lib.optionals stdenv.isDarwin [
+      ] ++ lib.optionals stdenv.isDarwin [
         darwin.apple_sdk.frameworks.IOKit
       ];
     };
@@ -126,7 +126,7 @@ let
     iptables = {
       buildInputs = [
         libpcap
-      ] ++ stdenv.lib.optionals stdenv.isLinux [
+      ] ++ lib.optionals stdenv.isLinux [
         iptables libmnl
       ];
     };
@@ -161,14 +161,14 @@ let
     memory = {};
     mic = {};
     modbus = {
-      buildInputs = stdenv.lib.optionals stdenv.isLinux [ libmodbus ];
+      buildInputs = lib.optionals stdenv.isLinux [ libmodbus ];
     };
     mqtt = {
       buildInputs = [ mosquitto ];
     };
     multimeter = {};
     mysql = {
-      buildInputs = stdenv.lib.optionals (libmysqlclient != null) [
+      buildInputs = lib.optionals (libmysqlclient != null) [
         libmysqlclient
       ];
     };
@@ -176,7 +176,7 @@ let
     netlink = {
       buildInputs = [
         libpcap
-      ] ++ stdenv.lib.optionals stdenv.isLinux [
+      ] ++ lib.optionals stdenv.isLinux [
         libmnl
       ];
     };
@@ -236,20 +236,20 @@ let
       buildInputs = [ rrdtool libxml2 ];
     };
     sensors = {
-      buildInputs = stdenv.lib.optionals stdenv.isLinux [ lm_sensors ];
+      buildInputs = lib.optionals stdenv.isLinux [ lm_sensors ];
     };
     serial = {};
     sigrok = {
-      buildInputs = stdenv.lib.optionals stdenv.isLinux [ libsigrok udev ];
+      buildInputs = lib.optionals stdenv.isLinux [ libsigrok udev ];
     };
     smart = {
-      buildInputs = stdenv.lib.optionals stdenv.isLinux [ libatasmart udev ];
+      buildInputs = lib.optionals stdenv.isLinux [ libatasmart udev ];
     };
     snmp = {
-      buildInputs = stdenv.lib.optionals stdenv.isLinux [ net-snmp ];
+      buildInputs = lib.optionals stdenv.isLinux [ net-snmp ];
     };
     snmp_agent = {
-      buildInputs = stdenv.lib.optionals stdenv.isLinux [ net-snmp ];
+      buildInputs = lib.optionals stdenv.isLinux [ net-snmp ];
     };
     statsd = {};
     swap = {};
@@ -280,7 +280,7 @@ let
     };
     virt = {
       buildInputs = [ libvirt libxml2 yajl ] ++
-        stdenv.lib.optionals stdenv.isLinux [ lvm2 udev
+        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
diff --git a/pkgs/tools/system/colorls/Gemfile.lock b/pkgs/tools/system/colorls/Gemfile.lock
index d138a167ce7..e9cd8cbf766 100644
--- a/pkgs/tools/system/colorls/Gemfile.lock
+++ b/pkgs/tools/system/colorls/Gemfile.lock
@@ -2,14 +2,16 @@ GEM
   remote: https://rubygems.org/
   specs:
     clocale (0.0.4)
-    colorls (1.4.2)
+    colorls (1.4.3)
       clocale (~> 0)
       filesize (~> 0)
       manpages (~> 0)
       rainbow (>= 2.2, < 4.0)
+      unicode-display_width (~> 1.7)
     filesize (0.2.0)
     manpages (0.6.1)
     rainbow (3.0.0)
+    unicode-display_width (1.7.0)
 
 PLATFORMS
   ruby
diff --git a/pkgs/tools/system/colorls/gemset.nix b/pkgs/tools/system/colorls/gemset.nix
index 2e4a26ff918..b978a4762ac 100644
--- a/pkgs/tools/system/colorls/gemset.nix
+++ b/pkgs/tools/system/colorls/gemset.nix
@@ -10,15 +10,15 @@
     version = "0.0.4";
   };
   colorls = {
-    dependencies = ["clocale" "filesize" "manpages" "rainbow"];
+    dependencies = ["clocale" "filesize" "manpages" "rainbow" "unicode-display_width"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0sw377wklld5zn1la0smxc2bg4rph2xf9d0h3zmxhmds06lb92db";
+      sha256 = "1w9d99qzgxw8wwa4z1vkdnr70fppx2g9shma6dz3ihjhajj2xvmq";
       type = "gem";
     };
-    version = "1.4.2";
+    version = "1.4.3";
   };
   filesize = {
     groups = ["default"];
@@ -50,4 +50,14 @@
     };
     version = "3.0.0";
   };
-}
\ No newline at end of file
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06i3id27s60141x6fdnjn5rar1cywdwy64ilc59cz937303q3mna";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+}
diff --git a/pkgs/tools/system/consul-template/default.nix b/pkgs/tools/system/consul-template/default.nix
index 69d5cd6bb73..5326f8722d8 100644
--- a/pkgs/tools/system/consul-template/default.nix
+++ b/pkgs/tools/system/consul-template/default.nix
@@ -1,24 +1,27 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
-buildGoPackage rec {
+buildGoModule rec {
   pname = "consul-template";
-  version = "0.19.4";
-  rev = "v${version}";
-
-  goPackagePath = "github.com/hashicorp/consul-template";
+  version = "0.26.0";
 
   src = fetchFromGitHub {
-    inherit rev;
     owner = "hashicorp";
     repo = "consul-template";
-    sha256 = "06agjzpax45gw7s9b69cz9w523nx7ksikqcg0z0vipwrp7pwrydd";
+    rev = "v${version}";
+    sha256 = "sha256-upVCztpfT+SuuB343GEnT4KSnWul10/cItKJvUqJYo4=";
   };
 
-  meta = with stdenv.lib; {
+  vendorSha256 = "sha256-IAWuqg8zZ9/ny3ZijxGgHAJDICV09NTGxPvLLP4oLzw=";
+
+  # consul-template tests depend on vault and consul services running to
+  # execute tests so we skip them here
+  doCheck = false;
+
+  meta = with 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 ];
+    maintainers = with maintainers; [ cpcloud pradeepchhetri ];
   };
 }
diff --git a/pkgs/tools/system/cron/default.nix b/pkgs/tools/system/cron/default.nix
index 9cde31205e1..d1b8d2d6afd 100644
--- a/pkgs/tools/system/cron/default.nix
+++ b/pkgs/tools/system/cron/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, vim, sendmailPath ? "/usr/sbin/sendmail"}:
+{lib, stdenv, fetchurl, vim, sendmailPath ? "/usr/sbin/sendmail"}:
 
 stdenv.mkDerivation {
   name = "cron-4.1";
@@ -39,7 +39,7 @@ stdenv.mkDerivation {
 
   preInstall = "mkdir -p $out/bin $out/sbin $out/share/man/man1 $out/share/man/man5 $out/share/man/man8";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Daemon for running commands at specific times (Vixie Cron)";
     license = licenses.bsd0;
     platforms = with platforms; linux ++ darwin;
diff --git a/pkgs/tools/system/ctop/default.nix b/pkgs/tools/system/ctop/default.nix
index 6cb8e482160..45cbca172fa 100644
--- a/pkgs/tools/system/ctop/default.nix
+++ b/pkgs/tools/system/ctop/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "ctop";
-  version = "0.7.3";
+  version = "0.7.6";
 
   src = fetchFromGitHub {
     owner = "bcicen";
     repo = pname;
-    rev = "v${version}";
-    sha256 = "0y72l65xgfqrgghzbm1zcy776l5m31z0gn6vfr689zyi3k3f4kh8";
+    rev = version;
+    sha256 = "sha256-ceRyYrqmgdTnV8m9LkLlR6iTrC5F81X/V3fWI2CiKBw=";
   };
 
-  vendorSha256 = "1x4li44vg0l1x205v9a971cgphplxhsrn59q97gmj9cfy4m7jdfw";
+  vendorSha256 = "sha256-UCeMy4iT0c2sTcCDPg0TIYCLYfrIUvHluUuGIpzluSg=";
 
   doCheck = false;
 
@@ -21,6 +21,6 @@ buildGoModule rec {
     description = "Top-like interface for container metrics";
     homepage = "https://ctop.sh/";
     license = licenses.mit;
-    maintainers = with maintainers; [ apeyroux marsam ];
+    maintainers = with maintainers; [ apeyroux marsam SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/system/daemon/default.nix b/pkgs/tools/system/daemon/default.nix
index fb06247f984..b7be04bcfcb 100644
--- a/pkgs/tools/system/daemon/default.nix
+++ b/pkgs/tools/system/daemon/default.nix
@@ -1,16 +1,23 @@
-{stdenv, fetchurl, perl}:
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "daemon";
+  version = "0.8";
 
-stdenv.mkDerivation {
-  name = "daemon-0.6.4";
   src = fetchurl {
-    url = "http://libslack.org/daemon/download/daemon-0.6.4.tar.gz";
-    sha256 = "18aw0f8k3j30xqwv4z03962kdpqd10nf1w9liihylmadlx5fmff4";
+    url = "http://libslack.org/daemon/download/daemon-${version}.tar.gz";
+    sha256 = "sha256-dPEubUs8hWMkib0IQx09mXvBcmS/V7cgI4Ty6AnP9ZY=";
   };
-  makeFlags = [ "PREFIX=$(out)" ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "CC=${stdenv.cc.targetPrefix}cc"
+  ];
+
   buildInputs = [ perl ];
 
-  meta = {
-    description = "Daemon turns other process into daemons";
+  meta = with lib; {
+    description = "Turns other processes 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.
@@ -18,8 +25,8 @@ stdenv.mkDerivation {
       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;
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.sander ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/system/daemonize/default.nix b/pkgs/tools/system/daemonize/default.nix
index a8685189b61..b79da1986d7 100644
--- a/pkgs/tools/system/daemonize/default.nix
+++ b/pkgs/tools/system/daemonize/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "daemonize";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "0q2c3i3si3k7wfhl6fyckkmkc81yp67pz52p3ggis79p4nczri10";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Runs a command as a Unix daemon";
     homepage    = "http://software.clapper.org/daemonize/";
     license     = licenses.bsd3;
diff --git a/pkgs/tools/system/das_watchdog/default.nix b/pkgs/tools/system/das_watchdog/default.nix
index 8c1a5657991..d9332acc898 100644
--- a/pkgs/tools/system/das_watchdog/default.nix
+++ b/pkgs/tools/system/das_watchdog/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, libgtop, xmessage, which, pkgconfig }:
+{ lib, stdenv, fetchgit, libgtop, xmessage, which, pkg-config }:
 
 stdenv.mkDerivation {
   pname = "das_watchdog";
@@ -10,7 +10,7 @@ stdenv.mkDerivation {
     sha256 = "02y1vfb3wh4908xjj1kpyf8kgxk29x8dw7yl3pnl220qz2gi99vr";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libgtop xmessage which ];
 
   installPhase = ''
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
     cp test_rt $out/bin/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/kmatheussen/das_watchdog";
     description = "A general watchdog for the linux operating system";
     longDescription = ''
diff --git a/pkgs/tools/system/datefudge/default.nix b/pkgs/tools/system/datefudge/default.nix
index 819071f3f06..be2ad70498a 100644
--- a/pkgs/tools/system/datefudge/default.nix
+++ b/pkgs/tools/system/datefudge/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, fetchpatch }:
+{ lib, stdenv, fetchgit, fetchpatch }:
 
 stdenv.mkDerivation rec {
   pname = "datefudge";
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
 
   postInstall = "chmod +x $out/lib/datefudge/datefudge.so";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Fake the system date";
     longDescription = ''
       datefudge is a small utility that pretends that the system time is
diff --git a/pkgs/tools/system/dcfldd/default.nix b/pkgs/tools/system/dcfldd/default.nix
index 9ea7b485b96..e5d5026e629 100644
--- a/pkgs/tools/system/dcfldd/default.nix
+++ b/pkgs/tools/system/dcfldd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "dcfldd-1.3.4-1";
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "An enhanced version of GNU dd";
 
     homepage = "http://dcfldd.sourceforge.net/";
diff --git a/pkgs/tools/system/dd_rescue/default.nix b/pkgs/tools/system/dd_rescue/default.nix
index 9962337de07..ce996bf7c6f 100644
--- a/pkgs/tools/system/dd_rescue/default.nix
+++ b/pkgs/tools/system/dd_rescue/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, autoconf }:
+{ lib, stdenv, fetchurl, autoconf }:
 
 stdenv.mkDerivation rec {
   version = "1.99.8";
@@ -30,13 +30,12 @@ stdenv.mkDerivation rec {
     cp "$out/share/dd_rescue"/dd_rhelp*/dd_rhelp "$out/bin"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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/pkgs/tools/system/ddrescue/default.nix b/pkgs/tools/system/ddrescue/default.nix
index 8efcf22312f..7e96a4c01f7 100644
--- a/pkgs/tools/system/ddrescue/default.nix
+++ b/pkgs/tools/system/ddrescue/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl, lzip
 }:
 
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
   doCheck = true; # not cross;
   configureFlags = [ "CXX=${stdenv.cc.targetPrefix}c++" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "GNU ddrescue, a data recovery tool";
 
     longDescription =
diff --git a/pkgs/tools/system/ddrescueview/default.nix b/pkgs/tools/system/ddrescueview/default.nix
index 838873b7557..6c8e9c56cdc 100644
--- a/pkgs/tools/system/ddrescueview/default.nix
+++ b/pkgs/tools/system/ddrescueview/default.nix
@@ -1,20 +1,24 @@
 { stdenv, lib, fetchurl, fpc, lazarus, atk, cairo, gdk-pixbuf, glib, gtk2, libX11, pango }:
 
-stdenv.mkDerivation rec {
-  name = "ddrescueview-0.4alpha3";
+let
+  versionBase = "0.4";
+  versionSuffix = "alpha4";
+in stdenv.mkDerivation rec {
+  pname = "ddrescueview";
+  version = "${versionBase}${versionSuffix}";
+  name = "ddrescueview-0.4alpha4";
 
   src = fetchurl {
-    name = "${name}.tar.xz";
-    url = "mirror://sourceforge/ddrescueview/ddrescueview-source-0.4%7Ealpha3.tar.xz";
-    sha256 = "0603jisxkswfyh93s3i20f8ns4yf83dmgmy0lg5001rvaw9mkw9j";
+    name = "ddrescueview-${versionBase}${versionSuffix}.tar.xz";
+    url = "mirror://sourceforge/ddrescueview/ddrescueview-source-${versionBase}~${versionSuffix}.tar.xz";
+    sha256 = "0v159nlc0lrqznbbwi7zda619is5h2rjk55gz6cl807j0kd19ycc";
   };
+  sourceRoot = "ddrescueview-source-${versionBase}~${versionSuffix}/source";
 
   nativeBuildInputs = [ fpc lazarus ];
 
   buildInputs = [ atk cairo gdk-pixbuf glib gtk2 libX11 pango ];
 
-  sourceRoot = "source";
-
   NIX_LDFLAGS = "--as-needed -rpath ${lib.makeLibraryPath buildInputs}";
 
   buildPhase = ''
@@ -24,9 +28,8 @@ stdenv.mkDerivation rec {
   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
+    mkdir -p "$out/share"
+    cp -ar applications icons man $out/share
   '';
 
   meta = with lib; {
diff --git a/pkgs/tools/system/ddrutility/default.nix b/pkgs/tools/system/ddrutility/default.nix
index bb24076ce7c..02c89b22989 100644
--- a/pkgs/tools/system/ddrutility/default.nix
+++ b/pkgs/tools/system/ddrutility/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "ddrutility";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "DESTDIR=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A set of utilities for hard drive data rescue";
     homepage = "https://sourceforge.net/projects/ddrutility/";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/system/dfc/default.nix b/pkgs/tools/system/dfc/default.nix
index 415b647befa..6478e699539 100644
--- a/pkgs/tools/system/dfc/default.nix
+++ b/pkgs/tools/system/dfc/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, cmake, gettext}:
+{lib, stdenv, fetchurl, cmake, gettext}:
 
 stdenv.mkDerivation rec {
   pname = "dfc";
@@ -14,8 +14,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.bsd3;
+    maintainers = with lib.maintainers; [qknight];
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/system/di/default.nix b/pkgs/tools/system/di/default.nix
index 0a6ae26547b..6dcd3e87f68 100644
--- a/pkgs/tools/system/di/default.nix
+++ b/pkgs/tools/system/di/default.nix
@@ -1,17 +1,17 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "di";
-  version = "4.48";
+  version = "4.48.0.1";
 
   src = fetchurl {
     url = "https://gentoo.com/${pname}/${pname}-${version}.tar.gz";
-    sha256 = "0crvvfsxh8ryc0j19a2x52i9zacvggm8zi6j3kzygkcwnpz4km8r";
+    sha256 = "sha256-YFCFRDGeq2h/UXKme/NnnCuFdtw2Vim6Y3SbytaItGc=";
   };
 
   makeFlags = [ "INSTALL_DIR=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Disk information utility; displays everything 'df' does and more";
     homepage = "https://gentoo.com/di/";
     license = licenses.zlib;
diff --git a/pkgs/tools/system/disk-filltest/default.nix b/pkgs/tools/system/disk-filltest/default.nix
index 7bcf592012a..ecfa14aa91b 100644
--- a/pkgs/tools/system/disk-filltest/default.nix
+++ b/pkgs/tools/system/disk-filltest/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "disk-filltest";
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
     mkdir -p $out/share/man; mv $out/man1 $out/share/man
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Simple program to detect bad disks by filling them with random data";
     longDescription = ''
       disk-filltest is a tool to check storage disks for coming
diff --git a/pkgs/tools/system/dog/default.nix b/pkgs/tools/system/dog/default.nix
index 5063e3555bb..94a6b34ff53 100644
--- a/pkgs/tools/system/dog/default.nix
+++ b/pkgs/tools/system/dog/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation {
   name = "dog-1.7";
@@ -20,7 +20,7 @@ stdenv.mkDerivation {
     cp dog $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://lwn.net/Articles/421072/";
     description = "cat replacement";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/system/efibootmgr/default.nix b/pkgs/tools/system/efibootmgr/default.nix
index dd898de0fc2..0c678dd9c51 100644
--- a/pkgs/tools/system/efibootmgr/default.nix
+++ b/pkgs/tools/system/efibootmgr/default.nix
@@ -1,10 +1,10 @@
-{ stdenv, fetchFromGitHub, fetchpatch, pkgconfig, efivar, popt }:
+{ lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config, efivar, popt }:
 
 stdenv.mkDerivation rec {
   pname = "efibootmgr";
   version = "17";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   buildInputs = [ efivar popt ];
 
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
 
   installFlags = [ "prefix=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/system/efivar/default.nix b/pkgs/tools/system/efivar/default.nix
index ea0ed8afcfd..c92b28e7f5e 100644
--- a/pkgs/tools/system/efivar/default.nix
+++ b/pkgs/tools/system/efivar/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildPackages, fetchFromGitHub, fetchurl, pkgconfig, popt }:
+{ lib, stdenv, buildPackages, fetchFromGitHub, fetchurl, pkg-config, popt }:
 
 stdenv.mkDerivation rec {
   pname = "efivar";
@@ -39,10 +39,11 @@ stdenv.mkDerivation rec {
       sha256 = "1ajj11wwsvamfspq4naanvw08h63gr0g71q0dfbrrywrhc0jlmdw";
     })
   ];
-  # We have no LTO here since commit 22284b07.
-  postPatch = if stdenv.isi686 then "sed '/^OPTIMIZE /s/-flto//' -i Make.defaults" else null;
+  # We have no LTO here since commit 22284b07.  With GCC 10 that triggers a warning.
+  postPatch = "sed '/^OPTIMIZE /s/-flto//' -i Make.defaults";
+  NIX_CFLAGS_COMPILE = "-Wno-error=stringop-truncation";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ popt ];
   depsBuildBuild = [ buildPackages.stdenv.cc ];
 
@@ -55,7 +56,7 @@ stdenv.mkDerivation rec {
     "PCDIR=$(dev)/lib/pkgconfig"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit (src.meta) homepage;
     description = "Tools and library to manipulate EFI variables";
     platforms = platforms.linux;
diff --git a/pkgs/tools/system/envconsul/default.nix b/pkgs/tools/system/envconsul/default.nix
index 09175f14609..9e8180b318a 100644
--- a/pkgs/tools/system/envconsul/default.nix
+++ b/pkgs/tools/system/envconsul/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "envconsul";
@@ -14,7 +14,7 @@ buildGoPackage rec {
     sha256 = "03cgxkyyynr067dg5b0lhvaxn60318fj9fh55p1n43vj5nrzgnbc";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/hashicorp/envconsul/";
     description = "Read and set environmental variables for processes from Consul";
     platforms = platforms.linux ++ platforms.darwin;
diff --git a/pkgs/tools/system/evemu/default.nix b/pkgs/tools/system/evemu/default.nix
index 02f92a19890..c01a909668e 100644
--- a/pkgs/tools/system/evemu/default.nix
+++ b/pkgs/tools/system/evemu/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, autoreconfHook, pkgconfig, pythonPackages
+{ lib, stdenv, fetchgit, autoreconfHook, pkg-config, python3Packages
 , libevdev
 }:
 
@@ -14,11 +14,13 @@ stdenv.mkDerivation rec {
     sha256 = "1m38fxwy2s82vb2qm9aqxinws12akmqqq7q66is931lc3awqkbah";
   };
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  nativeBuildInputs = [ pkg-config autoreconfHook python3Packages.python ];
 
-  buildInputs = [ pythonPackages.python pythonPackages.evdev libevdev ];
+  buildInputs = [ python3Packages.evdev libevdev ];
 
-  meta = with stdenv.lib; {
+  strictDeps = true;
+
+  meta = with 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";
diff --git a/pkgs/tools/system/facter/default.nix b/pkgs/tools/system/facter/default.nix
index 01fd10d6777..d1d18809a5b 100644
--- a/pkgs/tools/system/facter/default.nix
+++ b/pkgs/tools/system/facter/default.nix
@@ -1,18 +1,18 @@
-{ stdenv, fetchFromGitHub, boost, cmake, cpp-hocon, curl, leatherman, libwhereami, libyamlcpp, openssl, ruby, utillinux }:
+{ lib, stdenv, fetchFromGitHub, boost, cmake, cpp-hocon, curl, leatherman, libwhereami, libyamlcpp, openssl, ruby, util-linux }:
 
 stdenv.mkDerivation rec {
   pname = "facter";
-  version = "3.14.12";
+  version = "3.14.17";
 
   src = fetchFromGitHub {
-    sha256 = "1n0m2w133bpbbpc1imp89xlinmny7xaz1w87cs18p1lnk2w043lc";
+    sha256 = "sha256-RvsUt1DyN8Xr+Xtz84mbKlDwxLewgK6qklYVdQHu6q0=";
     rev = version;
     repo = pname;
     owner = "puppetlabs";
   };
 
-  CXXFLAGS = stdenv.lib.optionalString stdenv.cc.isGNU "-fpermissive -Wno-error=catch-value";
-  NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isLinux "-lblkid";
+  CXXFLAGS = lib.optionalString stdenv.cc.isGNU "-fpermissive -Wno-error=catch-value";
+  NIX_LDFLAGS = lib.optionalString stdenv.isLinux "-lblkid";
 
   cmakeFlags = [
     "-DFACTER_RUBY=${ruby}/lib/libruby${stdenv.hostPlatform.extensions.sharedLibrary}"
@@ -22,11 +22,9 @@ stdenv.mkDerivation rec {
   NIX_CFLAGS_COMPILE = "-Wno-error";
 
   nativeBuildInputs = [ cmake ];
-  buildInputs = [ boost cpp-hocon curl leatherman libwhereami libyamlcpp openssl ruby utillinux ];
+  buildInputs = [ boost cpp-hocon curl leatherman libwhereami libyamlcpp openssl ruby util-linux ];
 
-  enableParallelBuilding = true;
-
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/puppetlabs/facter";
     description = "A system inventory tool";
     license = licenses.asl20;
diff --git a/pkgs/tools/system/fakechroot/default.nix b/pkgs/tools/system/fakechroot/default.nix
index fc74644ab03..382a47039ba 100644
--- a/pkgs/tools/system/fakechroot/default.nix
+++ b/pkgs/tools/system/fakechroot/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, perl }:
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, perl }:
 
 stdenv.mkDerivation rec {
   pname = "fakechroot";
@@ -21,12 +21,30 @@ stdenv.mkDerivation rec {
       # and are uninteresting as well as unimportant for our purposes (since NEWS never leaves the build env).
       excludes = [ "NEWS.md" ];
     })
+
+    # glibc 2.33 compat (https://github.com/dex4er/fakechroot/pull/85/)
+    (fetchpatch {
+      url = "https://github.com/dex4er/fakechroot/commit/534e6d555736b97211523970d378dfb0db2608e9.patch";
+      sha256 = "sha256-bUlGJZvOSrATPt8bxGqU1UETTUD9V/HhJyA5ZxsOLQU=";
+    })
+    (fetchpatch {
+      url = "https://github.com/dex4er/fakechroot/commit/75d7e6fa191c11a791faff06a0de86eaa7801d05.patch";
+      sha256 = "sha256-vWN7zFkKlBd/F+h/66z21RiZqkSCn3UIzy9NHV7TYDg=";
+    })
+    (fetchpatch {
+      url = "https://github.com/dex4er/fakechroot/commit/693a3597ea7fccfb62f357503ff177bd3e3d5a89.patch";
+      sha256 = "sha256-bFXsT0hWocJFbtS1cpzo7oIy/x66iUw6QE1/cEoZ+3k=";
+    })
+    (fetchpatch {
+      url = "https://github.com/dex4er/fakechroot/commit/e7c1f3a446e594a4d0cce5f5d499c9439ce1d5c5.patch";
+      sha256 = "sha256-eX6kB4U1ZlXoRtkSVEIBTRjO/cTS/7z5a9S366DiRMg=";
+    })
   ];
 
   nativeBuildInputs = [ autoreconfHook ];
   buildInputs = [ perl ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/dex4er/fakechroot";
     description = "Give a fake chroot environment through LD_PRELOAD";
     license = licenses.lgpl21;
diff --git a/pkgs/tools/system/fakeroot/default.nix b/pkgs/tools/system/fakeroot/default.nix
index c5765609a27..bf42e987c4d 100644
--- a/pkgs/tools/system/fakeroot/default.nix
+++ b/pkgs/tools/system/fakeroot/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, getopt, libcap, gnused }:
+{ lib, stdenv, fetchurl, fetchpatch, getopt, libcap, gnused }:
 
 stdenv.mkDerivation rec {
   version = "1.23";
@@ -9,9 +9,25 @@ stdenv.mkDerivation rec {
     sha256 = "1xpl0s2yjyjwlf832b6kbkaa5921liybaar13k7n45ckd9lxd700";
   };
 
-  patches = stdenv.lib.optional stdenv.isLinux ./einval.patch
+  patches = lib.optionals stdenv.isLinux [
+    ./einval.patch
+
+    # glibc 2.33 patches from ArchLinux
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/archlinux/svntogit-packages/packages/fakeroot/trunk/fakeroot-1.25.3-glibc-2.33-fix-1.patch";
+      sha256 = "sha256-F6BcxYInSLu7Fxg6OmMZDhTWoLqsc//yYPlTZqQQl68=";
+    })
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/archlinux/svntogit-packages/packages/fakeroot/trunk/fakeroot-1.25.3-glibc-2.33-fix-2.patch";
+      sha256 = "sha256-ifpJxhk6MyQpFolC1hIAAUjcHmOHVU1D25tRwpu2S/k=";
+    })
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/archlinux/svntogit-packages/packages/fakeroot/trunk/fakeroot-1.25.3-glibc-2.33-fix-3.patch";
+      sha256 = "sha256-o2Xm4C64Ny9TL8fjsZltjO1CdJ4VGwqZ+LnufVL5Sq8=";
+    })
+  ]
   # patchset from brew
-  ++ stdenv.lib.optionals stdenv.isDarwin [
+  ++ 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";
@@ -30,19 +46,31 @@ stdenv.mkDerivation rec {
   ];
 
   buildInputs = [ getopt gnused ]
-    ++ stdenv.lib.optional (!stdenv.isDarwin) libcap
+    ++ 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
   '';
 
+  postConfigure = let
+    # additional patch from brew, but needs to be applied to a generated file
+    patch-wraptmpf = fetchpatch {
+      name = "fakeroot-patch-wraptmpf-h.patch";
+      url = "https://bugs.debian.org/cgi-bin/bugreport.cgi?att=3;bug=766649;filename=fakeroot-patch-wraptmpf-h.patch;msg=20";
+      sha256 = "1jhsi4bv6nnnjb4vmmmbhndqg719ckg860hgw98bli8m05zwbx6a";
+    };
+  in lib.optional stdenv.isDarwin ''
+    make wraptmpf.h
+    patch -p1 < ${patch-wraptmpf}
+  '';
+
   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;
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [viric];
+    platforms = lib.platforms.unix;
   };
 
 }
diff --git a/pkgs/tools/system/fancy-motd/default.nix b/pkgs/tools/system/fancy-motd/default.nix
new file mode 100644
index 00000000000..e8f21c6fbd3
--- /dev/null
+++ b/pkgs/tools/system/fancy-motd/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, lib, fetchFromGitHub, bc, curl, figlet, fortune, gawk, iproute2, procps }:
+
+stdenv.mkDerivation rec {
+  pname = "fancy-motd";
+  version = "unstable-2021-07-15";
+
+  src = fetchFromGitHub {
+    owner = "bcyran";
+    repo = pname;
+    rev = "e8d2d2602d9b9fbc132ddc4f9fbf22428d715721";
+    sha256 = "10fxr1grsiwvdc5m2wd4n51lvz0zd4sldg9rzviaim18nw68gdq3";
+  };
+
+  buildInputs = [ bc curl figlet fortune gawk iproute2 ];
+
+  postPatch = ''
+    substituteInPlace motd.sh \
+      --replace 'BASE_DIR="$(dirname "$(readlink -f "$0")")"' "BASE_DIR=\"$out/lib\""
+
+    substituteInPlace modules/20-uptime \
+      --replace "uptime -p" "${procps}/bin/uptime -p"
+
+    # does not work on nixos
+    rm modules/41-updates
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D motd.sh $out/bin/motd
+
+    install -D framework.sh $out/lib/framework.sh
+    install -D config.sh.example $out/lib/config.sh
+    find modules -type f -exec install -D {} $out/lib/{} \;
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Fancy, colorful MOTD written in bash. Server status at a glance.";
+    homepage = "https://github.com/bcyran/fancy-motd";
+    license = licenses.mit;
+    maintainers = with maintainers; [ rhoriguchi ];
+    platforms = platforms.linux;
+    mainProgram = "motd";
+  };
+}
diff --git a/pkgs/tools/system/fcron/default.nix b/pkgs/tools/system/fcron/default.nix
index 59daac89bd4..9e3b3c2c16d 100644
--- a/pkgs/tools/system/fcron/default.nix
+++ b/pkgs/tools/system/fcron/default.nix
@@ -1,7 +1,7 @@
 # restart using 'killall -TERM fcron; fcron -b
 # use convert-fcrontab to update fcrontab files
 
-{ stdenv, fetchurl, perl, busybox, vim }:
+{ lib, stdenv, fetchurl, perl, busybox, vim }:
 
 stdenv.mkDerivation rec {
   pname = "fcron";
@@ -52,10 +52,10 @@ stdenv.mkDerivation rec {
     find -type f | xargs sed -i -e 's@^\(\s\)*chown@\1:@' -e 's@^\(\s\)*chgrp@\1:@'
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/system/fdisk/default.nix b/pkgs/tools/system/fdisk/default.nix
index 423b00bd543..4ad654783df 100644
--- a/pkgs/tools/system/fdisk/default.nix
+++ b/pkgs/tools/system/fdisk/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, parted, libuuid, gettext, guile }:
+{ fetchurl, lib, 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
@@ -20,10 +20,10 @@ stdenv.mkDerivation rec {
       cfdisk.  It uses GNU Parted.
     '';
 
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
 
     homepage = "https://www.gnu.org/software/fdisk/";
 
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/system/fio/default.nix b/pkgs/tools/system/fio/default.nix
index 80789681fc4..b108c9dd3d1 100644
--- a/pkgs/tools/system/fio/default.nix
+++ b/pkgs/tools/system/fio/default.nix
@@ -1,23 +1,25 @@
-{ stdenv, fetchFromGitHub, makeWrapper
-, libaio, python, zlib
+{ lib, stdenv, fetchFromGitHub, makeWrapper
+, libaio, python3, zlib
 , withGnuplot ? false, gnuplot ? null }:
 
 stdenv.mkDerivation rec {
   pname = "fio";
-  version = "3.21";
+  version = "3.27";
 
   src = fetchFromGitHub {
     owner  = "axboe";
     repo   = "fio";
     rev    = "fio-${version}";
-    sha256 = "0v8bq79n2nfnrs8pw2f3a93f8k691dnfzd5qxb5srwak4y2za7hn";
+    sha256 = "sha256-/VzqmDbCTOOwFBMDj9nYuAW7ZJNM8B2LQ3QxReWG+iw=";
   };
 
-  buildInputs = [ python zlib ]
-    ++ stdenv.lib.optional (!stdenv.isDarwin) libaio;
+  buildInputs = [ python3 zlib ]
+    ++ lib.optional (!stdenv.isDarwin) libaio;
 
   nativeBuildInputs = [ makeWrapper ];
 
+  strictDeps = true;
+
   enableParallelBuilding = true;
 
   postPatch = ''
@@ -27,12 +29,12 @@ stdenv.mkDerivation rec {
     substituteInPlace tools/plot/fio2gnuplot --replace /usr/share/fio $out/share/fio
   '';
 
-  postInstall = stdenv.lib.optionalString withGnuplot ''
+  postInstall = lib.optionalString withGnuplot ''
     wrapProgram $out/bin/fio2gnuplot \
-      --prefix PATH : ${stdenv.lib.makeBinPath [ gnuplot ]}
+      --prefix PATH : ${lib.makeBinPath [ gnuplot ]}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Flexible IO Tester - an IO benchmark tool";
     homepage = "https://git.kernel.dk/cgit/fio/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/system/foreman/gemset.nix b/pkgs/tools/system/foreman/gemset.nix
index b35bd15c974..f747a2b0634 100644
--- a/pkgs/tools/system/foreman/gemset.nix
+++ b/pkgs/tools/system/foreman/gemset.nix
@@ -15,4 +15,4 @@
       sha256 = "1caz8mi7gq1hs4l1flcyyw1iw1bdvdbhppsvy12akr01k3s17xaq";
     };
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/system/foremost/default.nix b/pkgs/tools/system/foremost/default.nix
index 96c54513ef1..24f207e95f1 100644
--- a/pkgs/tools/system/foremost/default.nix
+++ b/pkgs/tools/system/foremost/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "foremost";
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
     mkdir -p $out/{bin,share/man/man8}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Recover files based on their contents";
     longDescription = ''
       Foremost is a console program to recover files based on their headers,
diff --git a/pkgs/tools/system/freeipmi/default.nix b/pkgs/tools/system/freeipmi/default.nix
index 35fb630d238..77828ae823d 100644
--- a/pkgs/tools/system/freeipmi/default.nix
+++ b/pkgs/tools/system/freeipmi/default.nix
@@ -1,12 +1,12 @@
-{ fetchurl, stdenv, libgcrypt, readline, libgpgerror }:
+{ fetchurl, lib, stdenv, libgcrypt, readline, libgpgerror }:
 
 stdenv.mkDerivation rec {
-  version = "1.6.5";
+  version = "1.6.8";
   pname = "freeipmi";
 
   src = fetchurl {
     url = "mirror://gnu/freeipmi/${pname}-${version}.tar.gz";
-    sha256 = "1ncf1s84752xaq07h36wrxa5ww1167s2bizkww0igxv8djyddwk1";
+    sha256 = "0w8af1i57szmxl9vfifwwyal7xh8aixz2l9487wvy6yckqk6m92a";
   };
 
   buildInputs = [ libgcrypt readline libgpgerror ];
@@ -33,12 +33,11 @@ stdenv.mkDerivation rec {
     homepage = "https://www.gnu.org/software/freeipmi/";
     downloadPage = "https://www.gnu.org/software/freeipmi/download.html";
 
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
 
-    maintainers = with stdenv.lib.maintainers; [ raskin ];
-    platforms = stdenv.lib.platforms.gnu ++ stdenv.lib.platforms.linux;  # arbitrary choice
+    maintainers = with lib.maintainers; [ raskin ];
+    platforms = lib.platforms.gnu ++ lib.platforms.linux;  # arbitrary choice
 
     updateWalker = true;
-    inherit version;
   };
 }
diff --git a/pkgs/tools/system/gdmap/default.nix b/pkgs/tools/system/gdmap/default.nix
index 6fdfd6e7190..d9c639ab1c4 100644
--- a/pkgs/tools/system/gdmap/default.nix
+++ b/pkgs/tools/system/gdmap/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, gtk2, pkgconfig, libxml2, intltool, gettext }:
+{ lib, stdenv, fetchurl, gtk2, pkg-config, libxml2, intltool, gettext }:
 
 stdenv.mkDerivation rec {
   name = "gdmap-0.8.1";
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "0nr8l88cg19zj585hczj8v73yh21k7j13xivhlzl8jdk0j0cj052";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ gtk2 libxml2 intltool gettext ];
 
   patches = [ ./get_sensitive.patch ./set_flags.patch ];
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
 
   NIX_LDFLAGS = "-lm";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://gdmap.sourceforge.net";
     description = "Recursive rectangle map of disk usage";
     license = licenses.gpl2;
diff --git a/pkgs/tools/system/gdu/default.nix b/pkgs/tools/system/gdu/default.nix
new file mode 100644
index 00000000000..c50b2a4c84e
--- /dev/null
+++ b/pkgs/tools/system/gdu/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "gdu";
+  version = "5.3.0";
+
+  src = fetchFromGitHub {
+    owner = "dundee";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hf5jTEAN5oOPg2PaAlYjIDMYcwXkaFAqPtWTwZV98N0=";
+  };
+
+  vendorSha256 = "sha256-9W1K01PJ+tRLSJ0L7NGHXT5w5oHmlBkT8kwnOLOzSCc=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildFlagsArray = [
+    "-ldflags="
+    "-s"
+    "-w"
+    "-X github.com/dundee/gdu/v${lib.versions.major version}/build.Version=${version}"
+  ];
+
+  postPatch = ''
+    substituteInPlace cmd/gdu/app/app_test.go --replace "development" "${version}"
+  '';
+
+  postInstall = ''
+    installManPage gdu.1
+  '';
+
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "Disk usage analyzer with console interface";
+    longDescription = ''
+      Gdu is intended primarily for SSD disks where it can fully
+      utilize parallel processing. However HDDs work as well, but
+      the performance gain is not so huge.
+    '';
+    homepage = "https://github.com/dundee/gdu";
+    license = with licenses; [ mit ];
+    maintainers = [ maintainers.fab ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/system/go-audit/default.nix b/pkgs/tools/system/go-audit/default.nix
new file mode 100644
index 00000000000..9670a4d0684
--- /dev/null
+++ b/pkgs/tools/system/go-audit/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "go-audit";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "slackhq";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "02iwjzaz2ks0zmwijaijwzc3gn9mhn7xpx369ylgaz68arlapfjg";
+  };
+
+  vendorSha256 = "11kb7xm82s0d8d06b2jknwn3dfh4i0a1dv0740y47vk62sf6f05i";
+
+  # Tests need network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "An alternative to the auditd daemon";
+    homepage = "https://github.com/slackhq/go-audit";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/system/gotop/default.nix b/pkgs/tools/system/gotop/default.nix
index f5d7ff4759e..dffbaaa8183 100644
--- a/pkgs/tools/system/gotop/default.nix
+++ b/pkgs/tools/system/gotop/default.nix
@@ -1,28 +1,32 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, stdenv, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "gotop";
-  version = "4.0.1";
+  version = "4.1.2";
 
   src = fetchFromGitHub {
     owner = "xxxserxxx";
     repo = pname;
     rev = "v${version}";
-    sha256 = "10qfzmq1wdgpvv319khzicalix1x4fqava0wry3bzz84k5c9dabs";
+    sha256 = "15bsxaxqxp17wsr0p9fkpvgfyqnhhwm3j8jxkvcs4cdw73qaxdsy";
   };
 
   runVend = true;
-  vendorSha256 = "09vdhdgj74ifdhl6rmxddkvk7ls26jn8gswzcxf9389zkjzi7822";
+  vendorSha256 = "06hl1npwmy9dvpf4kljvw8lwwiigm52wf106lmf9k6k2gi5ikprz";
+
+  ldflags = [ "-s" "-w" "-X main.Version=v${version}" ];
 
   preCheck = ''
     export HOME=$(mktemp -d)
   '';
 
-  meta = with stdenv.lib; {
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
     description = "A terminal based graphical activity monitor inspired by gtop and vtop";
     homepage = "https://github.com/xxxserxxx/gotop";
-    license = licenses.agpl3;
+    changelog = "https://github.com/xxxserxxx/gotop/raw/v${version}/CHANGELOG.md";
+    license = licenses.mit;
     maintainers = [ maintainers.magnetophon ];
-    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/system/gptfdisk/default.nix b/pkgs/tools/system/gptfdisk/default.nix
index 613f63c3f04..0e7aff32bf0 100644
--- a/pkgs/tools/system/gptfdisk/default.nix
+++ b/pkgs/tools/system/gptfdisk/default.nix
@@ -1,19 +1,19 @@
-{ fetchurl, stdenv, libuuid, popt, icu, ncurses }:
+{ fetchurl, lib, stdenv, libuuid, popt, icu, ncurses, nixosTests }:
 
 stdenv.mkDerivation rec {
   pname = "gptfdisk";
-  version = "1.0.5";
+  version = "1.0.8";
 
   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 = "0bybgp30pqxb6x5krxazkq4drca0gz4inxj89fpyr204rn3kjz8f";
+    sha256 = "sha256-ldGYVvAE2rxLjDQrJhLo0KnuvdUgBClxiDafFS6dxt8=";
   };
 
   postPatch = ''
     patchShebangs gdisk_test.sh
-  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+  '' + lib.optionalString stdenv.isDarwin ''
     substituteInPlace Makefile.mac --replace \
       "-mmacosx-version-min=10.4" "-mmacosx-version-min=10.6"
     substituteInPlace Makefile.mac --replace \
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
       "/opt/local/lib/libncurses.a" "${ncurses.out}/lib/libncurses.dylib"
   '';
 
-  buildPhase = stdenv.lib.optionalString stdenv.isDarwin "make -f Makefile.mac";
+  buildPhase = lib.optionalString stdenv.isDarwin "make -f Makefile.mac";
   buildInputs = [ libuuid popt icu ncurses ];
 
   installPhase = ''
@@ -37,10 +37,15 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
+  passthru.tests = lib.optionalAttrs stdenv.hostPlatform.isx86 {
+    installer-simpleLabels = nixosTests.installer.simpleLabels;
+  };
+
+  meta = with 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;
+    maintainers = [ maintainers.ehmry ];
   };
 }
diff --git a/pkgs/tools/system/gptman/default.nix b/pkgs/tools/system/gptman/default.nix
new file mode 100644
index 00000000000..648b68bcbc4
--- /dev/null
+++ b/pkgs/tools/system/gptman/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gptman";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "cecton";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "11zyjrw4f8gi5s4sd2kl3sdiz0avq7clr8zqnwl04y61b3fpg7y1";
+  };
+
+  cargoSha256 = "1cp8cyrd7ab8r2j28b69c2p3ysix5b9hpsqk07cmzgqwwml0qj12";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  meta = with lib; {
+    description = "A CLI tool for Linux to copy a partition from one disk to another and more.";
+    homepage = "https://github.com/cecton/gptman";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ akshgpt7 ];
+  };
+}
diff --git a/pkgs/tools/system/gt5/default.nix b/pkgs/tools/system/gt5/default.nix
index 61d25f414bb..374bcf0e314 100644
--- a/pkgs/tools/system/gt5/default.nix
+++ b/pkgs/tools/system/gt5/default.nix
@@ -1,8 +1,8 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation rec {
   name = "gt5-1.4.0";
-  
+
   src = fetchurl {
     url = "mirror://sourceforge/gt5/${name}.tar.gz";
     sha256 = "0gm0gzyp4d9rxqddbaskbz5zvmlhyr4nyb5x9g7x4abyyxqjlnkq";
@@ -19,8 +19,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; all;
   };
 }
diff --git a/pkgs/tools/system/hardinfo/default.nix b/pkgs/tools/system/hardinfo/default.nix
index fd8fb08cf29..15c8cbd12f0 100644
--- a/pkgs/tools/system/hardinfo/default.nix
+++ b/pkgs/tools/system/hardinfo/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, which, pkgconfig, gtk2, pcre, glib, libxml2
+{ lib, stdenv, fetchurl, which, pkg-config, gtk2, pcre, glib, libxml2
 , libsoup ? null
 }:
 
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   # Not adding 'hostname' command, the build shouldn't depend on what the build
   # host is called.
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ which gtk2 pcre glib libxml2 libsoup ];
 
   # Fixes '#error You must compile this program without "-O"'
@@ -40,7 +40,7 @@ stdenv.mkDerivation rec {
     rmdir "$out/usr"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://hardinfo.org/";
     description = "Display information about your hardware and operating system";
     license = licenses.gpl2;
diff --git a/pkgs/tools/system/hardlink/default.nix b/pkgs/tools/system/hardlink/default.nix
index c0c6aa72d3b..a790c600a9d 100644
--- a/pkgs/tools/system/hardlink/default.nix
+++ b/pkgs/tools/system/hardlink/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pcre2 }:
+{ lib, stdenv, fetchurl, pcre2 }:
 
 
 stdenv.mkDerivation {
@@ -23,7 +23,7 @@ stdenv.mkDerivation {
     cp -f hardlink.1 $out/share/man/man1/hardlink.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Consolidate duplicate files via hardlinks";
     homepage = "https://pagure.io/hardlink";
     repositories.git = "https://src.fedoraproject.org/cgit/rpms/hardlink.git";
diff --git a/pkgs/tools/system/hiera-eyaml/gemset.nix b/pkgs/tools/system/hiera-eyaml/gemset.nix
index d5aa722e5fc..cf7d8d6905d 100644
--- a/pkgs/tools/system/hiera-eyaml/gemset.nix
+++ b/pkgs/tools/system/hiera-eyaml/gemset.nix
@@ -28,4 +28,4 @@
     };
     version = "3.0.0";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/system/honcho/default.nix b/pkgs/tools/system/honcho/default.nix
index eb96c3f4613..17fa9489333 100644
--- a/pkgs/tools/system/honcho/default.nix
+++ b/pkgs/tools/system/honcho/default.nix
@@ -1,15 +1,14 @@
-{ stdenv, fetchFromGitHub, pythonPackages }:
+{ lib, fetchFromGitHub, python3Packages }:
 
 let
-  inherit (pythonPackages) python;
+  inherit (python3Packages) python;
   pname = "honcho";
 
 in
 
-pythonPackages.buildPythonApplication rec {
+python3Packages.buildPythonApplication rec {
   name = "${pname}-${version}";
   version = "1.0.1";
-  namePrefix = "";
 
   src = fetchFromGitHub {
     owner = "nickstenning";
@@ -18,7 +17,7 @@ pythonPackages.buildPythonApplication rec {
     sha256 = "11bd87474qpif20xdcn0ra1idj5k16ka51i658wfpxwc6nzsn92b";
   };
 
-  checkInputs = with pythonPackages; [ jinja2 pytest mock coverage ];
+  checkInputs = with python3Packages; [ jinja2 pytest mock coverage ];
 
   buildPhase = ''
     ${python.interpreter} setup.py build
@@ -40,7 +39,7 @@ pythonPackages.buildPythonApplication rec {
     runHook postCheck
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A Python clone of Foreman, a tool for managing Procfile-based applications";
     license = licenses.mit;
     homepage = "https://github.com/nickstenning/honcho";
diff --git a/pkgs/tools/system/hostctl/default.nix b/pkgs/tools/system/hostctl/default.nix
new file mode 100644
index 00000000000..54bc72144ea
--- /dev/null
+++ b/pkgs/tools/system/hostctl/default.nix
@@ -0,0 +1,36 @@
+{ buildGoModule, fetchFromGitHub, lib, installShellFiles }:
+
+buildGoModule rec {
+  pname = "hostctl";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "guumaster";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-X07JvXN1mwOQE2XBfaYbqQnQ92fBSg/Erj0yUygAqmM=";
+  };
+
+  vendorSha256 = "sha256-rGDWrivIdl5FTu/kNR8nAfE2+1hE4cm3uDg7oBobE9M=";
+
+  buildFlagsArray = [ "-ldflags=-s -w -X github.com/guumaster/hostctl/cmd/hostctl/actions.version=${version}" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+  postInstall = ''
+    installShellCompletion --cmd hostctl \
+      --bash <($out/bin/hostctl completion bash) \
+      --zsh <($out/bin/hostctl completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Your dev tool to manage /etc/hosts like a pro!";
+    longDescription = ''
+      This tool gives you more control over the use of your hosts file.
+      You can have multiple profiles and switch them on/off as you need.
+    '';
+    homepage = "https://guumaster.github.io/hostctl/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ blaggacao ];
+  };
+}
+
diff --git a/pkgs/tools/system/htop/default.nix b/pkgs/tools/system/htop/default.nix
index c9adf5377e2..25a397bc987 100644
--- a/pkgs/tools/system/htop/default.nix
+++ b/pkgs/tools/system/htop/default.nix
@@ -1,29 +1,29 @@
-{ lib, fetchurl, stdenv, ncurses,
-IOKit, python3 }:
+{ lib, fetchFromGitHub, stdenv, autoreconfHook
+, ncurses, IOKit
+}:
 
 stdenv.mkDerivation rec {
   pname = "htop";
-  version = "2.2.0";
+  version = "3.0.5";
 
-  src = fetchurl {
-    url = "https://hisham.hm/htop/releases/${version}/${pname}-${version}.tar.gz";
-    sha256 = "0mrwpb3cpn3ai7ar33m31yklj64c3pp576vh1naqff6f21pq5mnr";
+  src = fetchFromGitHub {
+    owner = "htop-dev";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-9zecDd3oZ24RyOLnKdJmR29Chx6S24Kvuf/F7RYzl4I=";
   };
 
-  nativeBuildInputs = [ python3 ];
-  buildInputs =
-    [ ncurses ] ++
-    lib.optionals stdenv.isDarwin [ IOKit ];
+  nativeBuildInputs = [ autoreconfHook ];
 
-  prePatch = ''
-    patchShebangs scripts/MakeHeader.py
-  '';
+  buildInputs = [ ncurses
+  ] ++ lib.optionals stdenv.isDarwin [ IOKit ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "An interactive process viewer for Linux";
-    homepage = "https://hisham.hm/htop/";
-    license = licenses.gpl2Plus;
-    platforms = with platforms; linux ++ freebsd ++ openbsd ++ darwin;
+    homepage = "https://htop.dev";
+    license = licenses.gpl2Only;
+    platforms = platforms.all;
     maintainers = with maintainers; [ rob relrod ];
+    changelog = "https://github.com/htop-dev/${pname}/blob/${version}/ChangeLog";
   };
 }
diff --git a/pkgs/tools/system/hwinfo/default.nix b/pkgs/tools/system/hwinfo/default.nix
index 6b6aa40a0f7..9ee77bfc6d3 100644
--- a/pkgs/tools/system/hwinfo/default.nix
+++ b/pkgs/tools/system/hwinfo/default.nix
@@ -1,17 +1,17 @@
-{ stdenv, fetchFromGitHub, libx86emu, flex, perl, libuuid }:
+{ lib, stdenv, fetchFromGitHub, libx86emu, flex, perl, libuuid }:
 
 stdenv.mkDerivation rec {
   pname = "hwinfo";
-  version = "21.70";
+  version = "21.75";
 
   src = fetchFromGitHub {
     owner = "opensuse";
     repo = "hwinfo";
     rev = version;
-    sha256 = "13vvsxj06wy86m7fy6bwy63ga49a2k4chdnk8jj3klj2cnh7ql8z";
+    sha256 = "sha256-w2Lb+4FvPXw2uFqwsmzVdKIXY8IXV/TAb8FHFPl/K40=";
   };
 
-  patchPhase = ''
+  postPatch = ''
     # VERSION and changelog are usually generated using Git
     # unless HWINFO_VERSION is defined (see Makefile)
     export HWINFO_VERSION="${version}"
@@ -30,9 +30,9 @@ stdenv.mkDerivation rec {
 
   installFlags = [ "DESTDIR=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Hardware detection tool from openSUSE";
-    license = licenses.gpl2;
+    license = licenses.gpl2Only;
     homepage = "https://github.com/openSUSE/hwinfo";
     maintainers = with maintainers; [ bobvanderlinden ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/system/idle3tools/default.nix b/pkgs/tools/system/idle3tools/default.nix
index fa5234d8cbc..5e9796396a9 100644
--- a/pkgs/tools/system/idle3tools/default.nix
+++ b/pkgs/tools/system/idle3tools/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation {
   name = "idle3-tools-0.9.1";
@@ -15,8 +15,8 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/system/illum/default.nix b/pkgs/tools/system/illum/default.nix
index 41fce9b9b91..42aae9d81a2 100644
--- a/pkgs/tools/system/illum/default.nix
+++ b/pkgs/tools/system/illum/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, pkgconfig, ninja, libevdev, libev }:
+{ lib, stdenv, fetchgit, pkg-config, ninja, libevdev, libev }:
 
 stdenv.mkDerivation {
   version = "0.4";
@@ -11,7 +11,7 @@ stdenv.mkDerivation {
     sha256 = "05v3hz7n6b1mlhc6zqijblh1vpl0ja1y8y0lafw7mjdz03wxhfdb";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ ninja libevdev libev ];
 
   configurePhase = ''
@@ -26,8 +26,8 @@ stdenv.mkDerivation {
   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;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.dancek ];
+    license = lib.licenses.agpl3;
   };
 }
diff --git a/pkgs/tools/system/incron/default.nix b/pkgs/tools/system/incron/default.nix
index 4b5709e6227..2df4acba9b5 100644
--- a/pkgs/tools/system/incron/default.nix
+++ b/pkgs/tools/system/incron/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, bash }:
+{ lib, stdenv, fetchFromGitHub, bash }:
 
 stdenv.mkDerivation rec {
   name = "incron-0.5.12";
@@ -26,8 +26,8 @@ stdenv.mkDerivation rec {
     cp incrond incrontab $out/bin/
   '';
 
-  meta = with stdenv.lib; {
-    description = "A cron-like daemon which handles filesystem events.";
+  meta = with lib; {
+    description = "A cron-like daemon which handles filesystem events";
     homepage = "https://github.com/ar-/incron";
     license = licenses.gpl2;
     maintainers = [ maintainers.aanderse ];
diff --git a/pkgs/tools/system/inxi/default.nix b/pkgs/tools/system/inxi/default.nix
index 4a59facb27b..b03a7c14a7d 100644
--- a/pkgs/tools/system/inxi/default.nix
+++ b/pkgs/tools/system/inxi/default.nix
@@ -1,18 +1,18 @@
 { lib, stdenv, fetchFromGitHub, perl, perlPackages, makeWrapper
 , ps, dnsutils # dig is recommended for multiple categories
 , withRecommends ? false # Install (almost) all recommended tools (see --recommends)
-, withRecommendedSystemPrograms ? withRecommends, utillinuxMinimal, dmidecode
-, file, hddtemp, iproute, ipmitool, usbutils, kmod, lm_sensors, smartmontools
-, binutils, tree, upower
+, withRecommendedSystemPrograms ? withRecommends, util-linuxMinimal, dmidecode
+, file, hddtemp, iproute2, ipmitool, usbutils, kmod, lm_sensors, smartmontools
+, binutils, tree, upower, pciutils
 , withRecommendedDisplayInformationPrograms ? withRecommends, glxinfo, xorg
 }:
 
 let
   prefixPath = programs:
-    "--prefix PATH ':' '${stdenv.lib.makeBinPath programs}'";
+    "--prefix PATH ':' '${lib.makeBinPath programs}'";
   recommendedSystemPrograms = lib.optionals withRecommendedSystemPrograms [
-    utillinuxMinimal dmidecode file hddtemp iproute ipmitool usbutils kmod
-    lm_sensors smartmontools binutils tree upower
+    util-linuxMinimal dmidecode file hddtemp iproute2 ipmitool usbutils kmod
+    lm_sensors smartmontools binutils tree upower pciutils
   ];
   recommendedDisplayInformationPrograms = lib.optionals
     withRecommendedDisplayInformationPrograms
@@ -22,16 +22,17 @@ let
     ++ recommendedDisplayInformationPrograms;
 in stdenv.mkDerivation rec {
   pname = "inxi";
-  version = "3.1.06-1";
+  version = "3.3.04-1";
 
   src = fetchFromGitHub {
     owner = "smxi";
     repo = "inxi";
     rev = version;
-    sha256 = "11z90x7rwzm7krkcnmcs9f41i1d284vrj0aqk2xnvl3p79vx25f7";
+    sha256 = "sha256-/EutIHQGLiRcRD/r8LJYG7oJBb7EAhR5cn6QiC7zMOc=";
   };
 
-  buildInputs = [ perl makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
 
   installPhase = ''
     mkdir -p $out/bin
@@ -43,7 +44,7 @@ in stdenv.mkDerivation rec {
     cp inxi.1 $out/share/man/man1/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A full featured CLI system information tool";
     longDescription = ''
       inxi is a command line system information script built for console and
@@ -56,6 +57,6 @@ in stdenv.mkDerivation rec {
     changelog = "https://github.com/smxi/inxi/blob/${version}/inxi.changelog";
     license = licenses.gpl3Plus;
     platforms = platforms.unix;
-    maintainers = with maintainers; [ primeos ];
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/tools/system/ioping/default.nix b/pkgs/tools/system/ioping/default.nix
index 7b65739c1a8..9af290503f4 100644
--- a/pkgs/tools/system/ioping/default.nix
+++ b/pkgs/tools/system/ioping/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fetchpatch }:
+{ lib, stdenv, fetchFromGitHub, fetchpatch }:
 
 stdenv.mkDerivation rec {
   pname = "ioping";
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Disk I/O latency measuring tool";
     maintainers = with maintainers; [ raskin ];
     platforms = platforms.unix;
diff --git a/pkgs/tools/system/iops/default.nix b/pkgs/tools/system/iops/default.nix
index cf34cb115f1..b2be488673e 100644
--- a/pkgs/tools/system/iops/default.nix
+++ b/pkgs/tools/system/iops/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "iops";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
     cp iops $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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.
diff --git a/pkgs/tools/system/ior/default.nix b/pkgs/tools/system/ior/default.nix
index eff85589a1e..c2616797da3 100644
--- a/pkgs/tools/system/ior/default.nix
+++ b/pkgs/tools/system/ior/default.nix
@@ -1,22 +1,22 @@
-{ stdenv, fetchFromGitHub, openmpi, perl, autoreconfHook }:
+{ lib, stdenv, fetchFromGitHub, mpi, perl, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   pname = "ior";
-  version = "3.2.1";
+  version = "3.3.0";
 
   src = fetchFromGitHub {
     owner = "hpc";
     repo = pname;
     rev = version;
-    sha256 = "036cg75c5vq6kijfv8f918vpm9sf1h7lyg6xr9fba7n0dwbbmycv";
+    sha256 = "sha256-pSjptDfiPlaToXe1yHyk9MQMC9PqcVSjqAmWLD11iOM=";
   };
 
   nativeBuildInputs = [ autoreconfHook ];
-  buildInputs = [ openmpi perl ];
+  buildInputs = [ mpi perl ];
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://ior.readthedocs.io/en/latest/";
     description = "Parallel file system I/O performance test";
     license = licenses.gpl2;
diff --git a/pkgs/tools/system/ipmitool/default.nix b/pkgs/tools/system/ipmitool/default.nix
index b5da2db67fe..e7d6130ffa6 100644
--- a/pkgs/tools/system/ipmitool/default.nix
+++ b/pkgs/tools/system/ipmitool/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchurl, openssl, fetchpatch, static ? false }:
+{ stdenv, lib, fetchurl, openssl, fetchpatch, static ? stdenv.hostPlatform.isStatic }:
 
 let
   pkgname = "ipmitool";
@@ -22,6 +22,11 @@ stdenv.mkDerivation {
       url = "https://github.com/ipmitool/ipmitool/commit/5db314f694f75c575cd7c9ffe9ee57aaf3a88866.patch";
       sha256 = "01niwrgajhrdhl441gzmw6v1r1yc3i8kn98db4b6smfn5fwdp1pa";
     })
+    (fetchpatch {
+      name = "CVE-2020-5208.patch";
+      url = "https://github.com/ipmitool/ipmitool/commit/e824c23316ae50beb7f7488f2055ac65e8b341f2.patch";
+      sha256 = "sha256-X7MnoX2fzByRpRY4p33xetT+V2aehlQ/qU+aeaqtTUY=";
+    })
   ];
 
   buildInputs = [ openssl ];
@@ -29,19 +34,19 @@ stdenv.mkDerivation {
   configureFlags = [
     "--infodir=${placeholder "out"}/share/info"
     "--mandir=${placeholder "out"}/share/man"
-  ] ++ stdenv.lib.optionals static [
+  ] ++ lib.optionals static [
     "LDFLAGS=-static"
     "--enable-static"
     "--disable-shared"
-  ] ++ stdenv.lib.optionals (!static) [
+  ] ++ lib.optionals (!static) [
     "--enable-shared"
   ];
 
-  makeFlags = stdenv.lib.optional static "AM_LDFLAGS=-all-static";
+  makeFlags = lib.optional static "AM_LDFLAGS=-all-static";
   dontDisableStatic = static;
 
   meta = with lib; {
-    description = ''Command-line interface to IPMI-enabled devices'';
+    description = "Command-line interface to IPMI-enabled devices";
     license = licenses.bsd3;
     homepage = "https://sourceforge.net/projects/ipmitool/";
     platforms = platforms.unix;
diff --git a/pkgs/tools/system/ipmiutil/default.nix b/pkgs/tools/system/ipmiutil/default.nix
index 17c28b3cd42..a11890dabd6 100644
--- a/pkgs/tools/system/ipmiutil/default.nix
+++ b/pkgs/tools/system/ipmiutil/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, openssl }:
+{ lib, stdenv, fetchurl, openssl }:
 
 stdenv.mkDerivation rec {
   baseName = "ipmiutil";
@@ -20,13 +20,12 @@ stdenv.mkDerivation rec {
 
   NIX_CFLAGS_COMPILE = "-fno-stack-protector";
 
-  meta = with stdenv.lib; {
+  meta = with 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/pkgs/tools/system/java-service-wrapper/default.nix b/pkgs/tools/system/java-service-wrapper/default.nix
index 758942c0549..4d1417b4b83 100644
--- a/pkgs/tools/system/java-service-wrapper/default.nix
+++ b/pkgs/tools/system/java-service-wrapper/default.nix
@@ -1,15 +1,15 @@
-{ stdenv, fetchurl
+{ lib, stdenv, fetchurl
 , jdk
 , ant, cunit, ncurses
 }:
 
 stdenv.mkDerivation rec {
   pname = "java-service-wrapper";
-  version = "3.5.43";
+  version = "3.5.45";
 
   src = fetchurl {
     url = "https://wrapper.tanukisoftware.com/download/${version}/wrapper_${version}_src.tar.gz";
-    sha256 = "19cx3854rk7b2056z8pvxnf4simsg5js7czsy2bys7jl6vh2x02b";
+    sha256 = "sha256-rnlloa0DicWT1RlP2szDvBINvT5/RZ17GOarUzvX1AI=";
   };
 
   buildInputs = [ jdk ];
@@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
     cp lib/libwrapper.so $out/lib/libwrapper.so
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Enables a Java Application to be run as a Windows Service or Unix Daemon";
     homepage = "https://wrapper.tanukisoftware.com/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/system/journalwatch/default.nix b/pkgs/tools/system/journalwatch/default.nix
index b41196b85c9..3d85d13149c 100644
--- a/pkgs/tools/system/journalwatch/default.nix
+++ b/pkgs/tools/system/journalwatch/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildPythonPackage, fetchFromGitHub, pythonOlder, systemd, pytest }:
+{ lib, buildPythonPackage, fetchFromGitHub, pythonOlder, systemd, pytest }:
 
 buildPythonPackage rec {
   pname = "journalwatch";
@@ -30,7 +30,7 @@ buildPythonPackage rec {
   ];
 
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "journalwatch is a tool to find error messages in the systemd journal.";
     homepage = "https://github.com/The-Compiler/journalwatch";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/system/jsvc/default.nix b/pkgs/tools/system/jsvc/default.nix
new file mode 100644
index 00000000000..442f8d90419
--- /dev/null
+++ b/pkgs/tools/system/jsvc/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, commonsDaemon, jdk, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "jsvc";
+  version = "1.2.4";
+
+  src = fetchurl {
+    url = "https://downloads.apache.org//commons/daemon/source/commons-daemon-${version}-src.tar.gz";
+    sha256 = "1nrr6ggy6h20r9zyv14vx6vc9p1w6l8fl9fn6i8dx2hrq6kk2bjw";
+  };
+
+  buildInputs = [ commonsDaemon ];
+  nativeBuildInputs = [ jdk makeWrapper ];
+
+  preConfigure = ''
+    cd ./src/native/unix/
+    sh ./support/buildconf.sh
+  '';
+
+  preBuild = ''
+    export JAVA_HOME=${jre}
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp jsvc $out/bin/jsvc
+    chmod +x $out/bin/jsvc
+    wrapProgram $out/bin/jsvc --set JAVA_HOME "${jre}"
+    runHook postInstall
+  '';
+
+  meta = {
+    homepage    = "https://commons.apache.org/proper/commons-daemon";
+    description = "JSVC is part of the Apache Commons Daemon software, a set of utilities and Java support classes for running Java applications as server processes.";
+    maintainers = with lib.maintainers; [ rsynnest ];
+    license     = lib.licenses.asl20;
+    platforms = with lib.platforms; unix;
+  };
+}
diff --git a/pkgs/tools/system/jump/default.nix b/pkgs/tools/system/jump/default.nix
index 9966ace14f4..fa0c2f73922 100644
--- a/pkgs/tools/system/jump/default.nix
+++ b/pkgs/tools/system/jump/default.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "jump";
-  version = "0.30.1";
+  version = "0.40.0";
 
   src = fetchFromGitHub {
     owner = "gsamokovarov";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0mph3bqfjnw3yf0a6ml3ccmkr1shviwvvq4d04ky4gppfy6z51jy";
+    sha256 = "sha256-8Lfta4qDXYVSHG3UI8iUA6vIjBe5OIX7n0LC4OW1qMU=";
   };
 
-  vendorSha256 = "1500vim2lmkkls758pwhlx3piqbw6ap0nnhdwz9pcxih4s4as2nk";
+  vendorSha256 = null;
 
   doCheck = false;
 
@@ -28,7 +28,7 @@ buildGoModule rec {
   '';
 
   meta = with lib; {
-    description = "Jump helps you navigate faster by learning your habits.";
+    description = "Navigate directories 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
diff --git a/pkgs/tools/system/kmon/default.nix b/pkgs/tools/system/kmon/default.nix
index a2610327f61..85d9df5df48 100644
--- a/pkgs/tools/system/kmon/default.nix
+++ b/pkgs/tools/system/kmon/default.nix
@@ -1,17 +1,17 @@
-{ stdenv, fetchFromGitHub, rustPlatform, python3, libxcb }:
+{ lib, fetchFromGitHub, rustPlatform, python3, libxcb }:
 
 rustPlatform.buildRustPackage rec {
   pname = "kmon";
-  version = "1.4.0";
+  version = "1.5.4";
 
   src = fetchFromGitHub {
     owner = "orhun";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1f9q4bc1kr1hgwf8byj13d6vsfs97wz7x10zwa82iv9b0wb1lr5w";
+    sha256 = "sha256-zbTS4nGb2jDYGhNYxoPaVv9kAc51CQOi9qiHiSLjAjo=";
   };
 
-  cargoSha256 = "1xy8rkba9idd0w4bnczmv4ll9awvar99vb7s0jd25fjbzqqlz820";
+  cargoSha256 = "sha256-ujVlOShZOuaV3B1ydggVJXLNMQHoTZC0dJaw+/ajVFg=";
 
   nativeBuildInputs = [ python3 ];
 
@@ -21,7 +21,7 @@ rustPlatform.buildRustPackage rec {
     install -D man/kmon.8 -t $out/share/man/man8/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Linux Kernel Manager and Activity Monitor";
     homepage = "https://github.com/orhun/kmon";
     license = with licenses; [ gpl3 ];
diff --git a/pkgs/tools/system/ledmon/default.nix b/pkgs/tools/system/ledmon/default.nix
index 6775a471126..0ca1aa441db 100644
--- a/pkgs/tools/system/ledmon/default.nix
+++ b/pkgs/tools/system/ledmon/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, perl, udev, sg3_utils }:
+{ lib, stdenv, fetchFromGitHub, perl, udev, sg3_utils }:
 
 stdenv.mkDerivation rec {
   pname = "ledmon";
@@ -25,11 +25,11 @@ stdenv.mkDerivation rec {
     "LEDMON_INSTDIR=${placeholder "out"}/sbin"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/intel/ledmon";
     description = "Enclosure LED Utilities";
     platforms = platforms.linux;
     license = with licenses; [ gpl2 ];
-    maintainers = with stdenv.lib.maintainers; [ sorki ];
+    maintainers = with lib.maintainers; [ sorki ];
   };
 }
diff --git a/pkgs/tools/system/loadwatch/default.nix b/pkgs/tools/system/loadwatch/default.nix
index eb7f1e3bb59..80f808214bc 100644
--- a/pkgs/tools/system/loadwatch/default.nix
+++ b/pkgs/tools/system/loadwatch/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, ... }:
+{ lib, stdenv, fetchgit, ... }:
 
 stdenv.mkDerivation {
   name = "loadwatch-1.1-1-g6d2544c";
@@ -11,10 +11,10 @@ stdenv.mkDerivation {
     mkdir -p $out/bin
     install loadwatch lw-ctl $out/bin
   '';
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Run a program using only idle cycles";
     license = licenses.gpl2;
     maintainers = with maintainers; [ woffs ];
-    platforms = platforms.linux;
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/system/localtime/default.nix b/pkgs/tools/system/localtime/default.nix
index 805a70c74e9..798e3b3e883 100644
--- a/pkgs/tools/system/localtime/default.nix
+++ b/pkgs/tools/system/localtime/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, buildGoPackage, m4 }:
+{ lib, fetchFromGitHub, buildGoPackage, m4 }:
 
 buildGoPackage rec {
   name = "localtime-2017-11-07";
@@ -28,7 +28,7 @@ buildGoPackage rec {
     make install $makeFlags
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/system/logcheck/default.nix b/pkgs/tools/system/logcheck/default.nix
index 71edfde9a0b..dea241e11ac 100644
--- a/pkgs/tools/system/logcheck/default.nix
+++ b/pkgs/tools/system/logcheck/default.nix
@@ -1,13 +1,13 @@
-{ stdenv, fetchurl, lockfileProgs, perlPackages }:
+{ lib, stdenv, fetchurl, lockfileProgs, perlPackages }:
 
 stdenv.mkDerivation rec {
   pname = "logcheck";
-  version = "1.3.20";
+  version = "1.3.23";
   _name    = "logcheck_${version}";
 
   src = fetchurl {
     url = "mirror://debian/pool/main/l/logcheck/${_name}.tar.xz";
-    sha256 = "1rmkvxhcwr9gb6z4dlgr6rrx5l70hshlxdggs6qx0w1ljcmx1dlz";
+    sha256 = "sha256-ohiLpUn/9EEsggdLJxiE/2bSXz/bKkGRboF85naFWyk=";
   };
 
   prePatch = ''
@@ -33,7 +33,7 @@ stdenv.mkDerivation rec {
     "SHAREDIR=share/logtail/detectrotate"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Mails anomalies in the system logfiles to the administrator";
     longDescription = ''
       Mails anomalies in the system logfiles to the administrator.
@@ -42,7 +42,7 @@ stdenv.mkDerivation rec {
       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;
+    license = licenses.gpl2Plus;
     maintainers = [ maintainers.bluescreen303 ];
   };
 }
diff --git a/pkgs/tools/system/logrotate/default.nix b/pkgs/tools/system/logrotate/default.nix
index 4c891e3e5b3..3d5dac7faa8 100644
--- a/pkgs/tools/system/logrotate/default.nix
+++ b/pkgs/tools/system/logrotate/default.nix
@@ -1,40 +1,35 @@
-{ stdenv, fetchFromGitHub, gzip, popt, autoreconfHook
+{ lib, stdenv, fetchFromGitHub, gzip, popt, autoreconfHook
 , mailutils ? null
+, aclSupport ? true, acl
 }:
 
 stdenv.mkDerivation rec {
   pname = "logrotate";
-  version = "3.17.0";
+  version = "3.18.1";
 
   src = fetchFromGitHub {
     owner = "logrotate";
     repo = "logrotate";
     rev = version;
-    sha256 = "133k4y24p918v4dva6dh70bdfv13jvwl2vlhq0mybrs3ripvnh4h";
+    sha256 = "sha256-OJOV++rtN9ry+l0c0eanpu/Pwu8cOHfyEaDWp3FZjkw=";
   };
 
   # 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
-  '';
+  configureFlags = [
+    "--with-compress-command=${gzip}/bin/gzip"
+    "--with-uncompress-command=${gzip}/bin/gunzip"
+  ] ++ lib.optionals (mailutils != null) [
+    "--with-default-mail-command=${mailutils}/bin/mail"
+  ];
 
   nativeBuildInputs = [ autoreconfHook ];
-  buildInputs = [ popt ];
+  buildInputs = [ popt ] ++ lib.optionals aclSupport [ acl ];
 
-  meta = {
+  meta = with lib; {
     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;
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.viric ];
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/system/lr/default.nix b/pkgs/tools/system/lr/default.nix
index 8d2febbeb8a..43d37569ba3 100644
--- a/pkgs/tools/system/lr/default.nix
+++ b/pkgs/tools/system/lr/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "lr";
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/chneukirchen/lr";
     description = "List files recursively";
     license = licenses.mit;
diff --git a/pkgs/tools/system/lshw/default.nix b/pkgs/tools/system/lshw/default.nix
index 3d1a6ace08e..040f065acd7 100644
--- a/pkgs/tools/system/lshw/default.nix
+++ b/pkgs/tools/system/lshw/default.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, fetchurl, fetchpatch
-, withGUI ? false, gtk2, pkgconfig, sqlite # compile GUI
+, withGUI ? false, gtk2, pkg-config, sqlite # compile GUI
 }:
 
 let numVersion = "02.18"; # :(
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
     })
   ];
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   buildInputs = lib.optionals withGUI [ gtk2 sqlite ];
 
@@ -44,7 +44,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://ezix.org/project/wiki/HardwareLiSter";
     description = "Provide detailed information on the hardware configuration of the machine";
     license = licenses.gpl2;
diff --git a/pkgs/tools/system/mcron/default.nix b/pkgs/tools/system/mcron/default.nix
index ca515cbdfd8..b8175b51483 100644
--- a/pkgs/tools/system/mcron/default.nix
+++ b/pkgs/tools/system/mcron/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, guile, which, ed, libtool }:
+{ fetchurl, lib, stdenv, guile, which, ed, libtool }:
 
 stdenv.mkDerivation rec {
   name = "mcron-1.0.6";
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
 
     homepage = "https://www.gnu.org/software/mcron/";
 
-    license = stdenv.lib.licenses.gpl3Plus;
-    platforms = stdenv.lib.platforms.unix;
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/system/memtester/default.nix b/pkgs/tools/system/memtester/default.nix
index 7b065c6cfa8..276d4f446cf 100644
--- a/pkgs/tools/system/memtester/default.nix
+++ b/pkgs/tools/system/memtester/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "memtester";
-  version = "4.3.0";
+  version = "4.5.0";
 
   preConfigure = ''
     echo "$CC" > conf-cc
@@ -11,12 +11,12 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "http://pyropus.ca/software/memtester/old-versions/memtester-${version}.tar.gz";
-    sha256 = "127xymmyzb9r6dxqrwd69v7gf8csv8kv7fjvagbglf3wfgyy5pzr";
+    sha256 = "0dxfwayns3hjjplkxkpkm1409lmjlpi4chcrahcvdbnl0q6jpmcf";
   };
 
   installFlags = [ "INSTALLPATH=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A userspace utility for testing the memory subsystem for faults";
     homepage = "http://pyropus.ca/software/memtester/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/system/minijail/default.nix b/pkgs/tools/system/minijail/default.nix
index 2f5adc3f4c9..fac934f7bb2 100644
--- a/pkgs/tools/system/minijail/default.nix
+++ b/pkgs/tools/system/minijail/default.nix
@@ -11,12 +11,12 @@ in
 
 stdenv.mkDerivation rec {
   pname = "minijail";
-  version = "14";
+  version = "16";
 
   src = fetchFromGitiles {
     url = "https://android.googlesource.com/platform/external/minijail";
     rev = "linux-v${version}";
-    sha256 = "00dq854n4zg3ca2b46f90k15n32zn2sgabi76mnq2w985k9v977n";
+    sha256 = "0pxazds3w12c30msq6bxs4a9cbds0dkj6n3ca0i1wqvgz864yrgs";
   };
 
   nativeBuildInputs =
diff --git a/pkgs/tools/system/mlc/default.nix b/pkgs/tools/system/mlc/default.nix
new file mode 100644
index 00000000000..257cd31c060
--- /dev/null
+++ b/pkgs/tools/system/mlc/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, patchelf }:
+stdenv.mkDerivation rec {
+  pname = "mlc";
+  version = "3.9";
+
+  src = fetchurl {
+    url = "https://software.intel.com/content/dam/develop/external/us/en/protected/mlc_v${version}.tgz";
+    sha256 = "1x7abm9hbv9hkqa3cgxz6l04m3ycyl40i4zgx1w819pc10n6dhdb";
+  };
+
+  sourceRoot = "Linux";
+
+  installPhase = ''
+    install -Dm755 mlc $out/bin/mlc
+  '';
+
+  nativeBuildInputs = [ patchelf ];
+
+  fixupPhase = ''
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/bin/mlc
+  '';
+
+  meta = with lib; {
+    homepage = "https://software.intel.com/content/www/us/en/develop/articles/intelr-memory-latency-checker.html";
+    description = "Intel Memory Latency Checker";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ basvandijk ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/pkgs/tools/system/monit/default.nix b/pkgs/tools/system/monit/default.nix
index 8be921b385e..8a2a3406c3e 100644
--- a/pkgs/tools/system/monit/default.nix
+++ b/pkgs/tools/system/monit/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl, bison, flex
 , zlib
 , usePAM ? stdenv.hostPlatform.isLinux, pam
@@ -6,26 +6,26 @@
 }:
 
 stdenv.mkDerivation rec {
-  name = "monit-5.27.0";
+  name = "monit-5.27.2";
 
   src = fetchurl {
     url = "${meta.homepage}dist/${name}.tar.gz";
-    sha256 = "197w59wkg6izlj6p7xbx0n6ksvm6pym9pzh24nakl6agcbpxxh6q";
+    sha256 = "sha256-2ICceNXcHtenujKlpVxRFIVRMsxNpIBfjTqvjPRuqkw=";
   };
 
   nativeBuildInputs = [ bison flex ];
   buildInputs = [ zlib.dev ] ++
-    stdenv.lib.optionals useSSL [ openssl ] ++
-    stdenv.lib.optionals usePAM [ pam ];
+    lib.optionals useSSL [ openssl ] ++
+    lib.optionals usePAM [ pam ];
 
   configureFlags = [
-    (stdenv.lib.withFeature usePAM "pam")
+    (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) [
+  ]) ++ 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"
@@ -34,8 +34,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.agpl3;
+    maintainers = with lib.maintainers; [ raskin wmertens ryantm ];
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/system/mq-cli/default.nix b/pkgs/tools/system/mq-cli/default.nix
index a29e1630116..2c1baa24f6f 100644
--- a/pkgs/tools/system/mq-cli/default.nix
+++ b/pkgs/tools/system/mq-cli/default.nix
@@ -11,7 +11,7 @@ rustPlatform.buildRustPackage rec {
     sha256 = "02z85waj5jc312biv2qhbgplsggxgjmfmyv9v8b1ky0iq1mpxjw7";
   };
 
-  cargoSha256 = "19ccylnmmlm2d8kc178cffpjwrjlia6b4v3nzvxcs81a396ymr7b";
+  cargoSha256 = "19mk0hl7cr5qb3r64zi0hcsn4yqbg8c3g2f9jywm0g2c13ak36li";
 
   meta = with lib; {
     description      = "CLI tool to manage POSIX message queues";
diff --git a/pkgs/tools/system/nats-top/default.nix b/pkgs/tools/system/nats-top/default.nix
new file mode 100644
index 00000000000..f2be03d4301
--- /dev/null
+++ b/pkgs/tools/system/nats-top/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "nats-top";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "nats-io";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0b1hpnq8m1xfrn58ammmnx6lmhk319m8z4xjxgckz7wvy2fbzw0n";
+  };
+
+  vendorSha256 = "1a48p9gx5zdc340ma6cqakhi6f3lw9b0kz2597j1jcsk2qb7s581";
+
+  meta = with lib; {
+    description = "top-like tool for monitoring NATS servers";
+    homepage = "https://github.com/nats-io/nats-top";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/system/natscli/default.nix b/pkgs/tools/system/natscli/default.nix
new file mode 100644
index 00000000000..a7f4337ce81
--- /dev/null
+++ b/pkgs/tools/system/natscli/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "natscli";
+  version = "0.0.25";
+
+  src = fetchFromGitHub {
+    owner = "nats-io";
+    repo = pname;
+    rev = version;
+    sha256 = "180511x3sciqs0njz80qc1a785m84ks9l338qi3liv7bcd541xcr";
+  };
+
+  vendorSha256 = "1j2a6wmyb9akndiwq79jqy5lz84bz2k01xp505j60ynsflim7shq";
+
+  meta = with lib; {
+    description = "NATS Command Line Interface";
+    homepage = "https://github.com/nats-io/natscli";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/system/netdata/default.nix b/pkgs/tools/system/netdata/default.nix
index e5316e028db..25d0366ef71 100644
--- a/pkgs/tools/system/netdata/default.nix
+++ b/pkgs/tools/system/netdata/default.nix
@@ -1,30 +1,33 @@
-{ stdenv, callPackage, fetchFromGitHub, autoreconfHook, pkgconfig
+{ lib, stdenv, callPackage, fetchFromGitHub, autoreconfHook, pkg-config, makeWrapper
 , CoreFoundation, IOKit, libossp_uuid
-, curl, libcap,  libuuid, lm_sensors, zlib, fetchpatch
+, nixosTests
+, curl, libcap, libuuid, lm_sensors, zlib
 , withCups ? false, cups
 , withDBengine ? true, libuv, lz4, judy
 , withIpmi ? (!stdenv.isDarwin), freeipmi
 , withNetfilter ? (!stdenv.isDarwin), libmnl, libnetfilter_acct
+, withCloud ? (!stdenv.isDarwin), json_c
 , withSsl ? true, openssl
 , withDebug ? false
 }:
 
-with stdenv.lib;
+with lib;
 
 let
   go-d-plugin = callPackage ./go.d.plugin.nix {};
 in stdenv.mkDerivation rec {
-  version = "1.23.2";
+  version = "1.31.0";
   pname = "netdata";
 
   src = fetchFromGitHub {
     owner = "netdata";
     repo = "netdata";
     rev = "v${version}";
-    sha256 = "1vv92plk9dxk6fl76ik1zralpzc35ymrfyrf1cr6pv8q3agyy5k4";
+    sha256 = "0735cxmljrp8zlkcq7hcxizy4j4xiv7vf782zkz5chn06n38mcik";
+    fetchSubmodules = true;
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config makeWrapper ];
   buildInputs = [ curl.dev zlib.dev ]
     ++ optionals stdenv.isDarwin [ CoreFoundation IOKit libossp_uuid ]
     ++ optionals (!stdenv.isDarwin) [ libcap.dev libuuid.dev ]
@@ -32,16 +35,18 @@ in stdenv.mkDerivation rec {
     ++ optionals withDBengine [ libuv lz4.dev judy ]
     ++ optionals withIpmi [ freeipmi ]
     ++ optionals withNetfilter [ libmnl libnetfilter_acct ]
+    ++ optionals withCloud [ json_c ]
     ++ optionals withSsl [ openssl.dev ];
 
   patches = [
+    # required to prevent plugins from relying on /etc
+    # and /var
     ./no-files-in-etc-and-var.patch
-  ] ++ stdenv.lib.optionals (!stdenv.cc.isGNU) [
-    # fix memcpy typo for non-gnu. Remove with the next release.
-    (fetchpatch {
-      url = "https://github.com/netdata/netdata/commit/da7f267196b489e9a75724b68897e8f2e6137d72.patch";
-      sha256 = "1j2sa06j6v491nw58bjx5nqqyfi1n2n9z3p3jiy4yh74m3asldlv";
-    })
+    # The current IPC location is unsafe as it writes
+    # a fixed path in /tmp, which is world-writable.
+    # Therefore we put it into `/run/netdata`, which is owned
+    # by netdata only.
+    ./ipc-socket-in-run.patch
   ];
 
   NIX_CFLAGS_COMPILE = optionalString withDebug "-O1 -ggdb -DNETDATA_INTERNAL_CHECKS=1";
@@ -53,6 +58,8 @@ in stdenv.mkDerivation rec {
     # 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
+    mv $out/libexec/netdata/plugins.d/cgroup-network \
+       $out/libexec/netdata/plugins.d/cgroup-network.org
     mv $out/libexec/netdata/plugins.d/perf.plugin \
        $out/libexec/netdata/plugins.d/perf.plugin.org
     mv $out/libexec/netdata/plugins.d/slabinfo.plugin \
@@ -71,18 +78,22 @@ in stdenv.mkDerivation rec {
   configureFlags = [
     "--localstatedir=/var"
     "--sysconfdir=/etc"
+  ] ++ optionals withCloud [
+    "--enable-cloud"
+    "--with-aclk-ng"
   ];
 
   postFixup = ''
-    rm -r $out/sbin
+    wrapProgram $out/bin/netdata-claim.sh --prefix PATH : ${lib.makeBinPath [ openssl ]}
   '';
 
+  passthru.tests.netdata = nixosTests.netdata;
+
   meta = {
     description = "Real-time performance monitoring tool";
-    homepage = "https://my-netdata.io/";
-    license = licenses.gpl3;
+    homepage = "https://www.netdata.cloud/";
+    license = licenses.gpl3Plus;
     platforms = platforms.unix;
-    maintainers = [ maintainers.lethalman ];
+    maintainers = [ ];
   };
-
 }
diff --git a/pkgs/tools/system/netdata/go.d.plugin.nix b/pkgs/tools/system/netdata/go.d.plugin.nix
index e2392df495f..be6e8f26763 100644
--- a/pkgs/tools/system/netdata/go.d.plugin.nix
+++ b/pkgs/tools/system/netdata/go.d.plugin.nix
@@ -2,16 +2,16 @@
 
 buildGoModule rec {
   pname = "netdata-go.d.plugin";
-  version = "0.20.0";
+  version = "0.28.1";
 
   src = fetchFromGitHub {
     owner = "netdata";
     repo = "go.d.plugin";
     rev = "v${version}";
-    sha256 = "0wd1wg56q955jm5ksq2zqzlms1nlxx7n7vv43l096k1578fv93jv";
+    sha256 = "0i77nvqi3dcby0gr3b06bai170q2ibp5390qfjijrk1yqz6x6sd5";
   };
 
-  vendorSha256 = "1k84l97fw4s9jdwbka4p168m7l7wil0c4cpijis8ypj3g1xfrw90";
+  vendorSha256 = "1q8z4smaxzqd5iwvbnkkr33c3b94rjwa3xjirwlr595g0wn93wc7";
 
   doCheck = false;
 
@@ -26,6 +26,6 @@ buildGoModule rec {
     description = "Netdata orchestrator for data collection modules written in go";
     homepage = "https://github.com/netdata/go.d.plugin";
     license = licenses.gpl3;
-    maintainers = [ maintainers.lethalman ];
+    maintainers = [ ];
   };
 }
diff --git a/pkgs/tools/system/netdata/ipc-socket-in-run.patch b/pkgs/tools/system/netdata/ipc-socket-in-run.patch
new file mode 100644
index 00000000000..a117955af09
--- /dev/null
+++ b/pkgs/tools/system/netdata/ipc-socket-in-run.patch
@@ -0,0 +1,13 @@
+diff --git a/daemon/commands.h b/daemon/commands.h
+index bd4aabfe1cbe4..ce7eb3c730228 100644
+--- a/daemon/commands.h
++++ b/daemon/commands.h
+@@ -6,7 +6,7 @@
+ #ifdef _WIN32
+ # define PIPENAME "\\\\?\\pipe\\netdata-cli"
+ #else
+-# define PIPENAME "/tmp/netdata-ipc"
++# define PIPENAME "/run/netdata/ipc"
+ #endif
+ 
+ #define MAX_COMMAND_LENGTH 4096
diff --git a/pkgs/tools/system/netdata/no-files-in-etc-and-var.patch b/pkgs/tools/system/netdata/no-files-in-etc-and-var.patch
index 594805fdf18..1d0c5cfba58 100644
--- a/pkgs/tools/system/netdata/no-files-in-etc-and-var.patch
+++ b/pkgs/tools/system/netdata/no-files-in-etc-and-var.patch
@@ -1,28 +1,8 @@
-From 4ecc1475be94a384c122594b5f7d455beb64a2f0 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg@thalheim.io>
-Date: Sat, 22 Feb 2020 06:42:14 +0000
-Subject: [PATCH] no files in etc and var
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jörg Thalheim <joerg@thalheim.io>
----
- collectors/Makefile.am                 | 2 +-
- collectors/charts.d.plugin/Makefile.am | 2 +-
- collectors/node.d.plugin/Makefile.am   | 2 +-
- collectors/python.d.plugin/Makefile.am | 2 +-
- collectors/statsd.plugin/Makefile.am   | 2 +-
- health/Makefile.am                     | 2 +-
- system/Makefile.am                     | 3 +--
- web/Makefile.am                        | 2 +-
- 8 files changed, 8 insertions(+), 9 deletions(-)
-
 diff --git a/collectors/Makefile.am b/collectors/Makefile.am
-index 9bb52958..c9799165 100644
+index 021e2ff23..115b88277 100644
 --- a/collectors/Makefile.am
 +++ b/collectors/Makefile.am
-@@ -32,7 +32,7 @@ usercustompluginsconfigdir=$(configdir)/custom-plugins.d
+@@ -33,7 +33,7 @@ usercustompluginsconfigdir=$(configdir)/custom-plugins.d
  usergoconfigdir=$(configdir)/go.d
  
  # Explicitly install directories to avoid permission issues due to umask
@@ -32,7 +12,7 @@ index 9bb52958..c9799165 100644
  	$(INSTALL) -d $(DESTDIR)$(usergoconfigdir)
  
 diff --git a/collectors/charts.d.plugin/Makefile.am b/collectors/charts.d.plugin/Makefile.am
-index 03c7f0a9..01985db0 100644
+index 03c7f0a94..01985db01 100644
 --- a/collectors/charts.d.plugin/Makefile.am
 +++ b/collectors/charts.d.plugin/Makefile.am
 @@ -34,7 +34,7 @@ dist_userchartsconfig_DATA = \
@@ -44,8 +24,21 @@ index 03c7f0a9..01985db0 100644
  	$(INSTALL) -d $(DESTDIR)$(userchartsconfigdir)
  
  chartsconfigdir=$(libconfigdir)/charts.d
+diff --git a/collectors/ebpf.plugin/Makefile.am b/collectors/ebpf.plugin/Makefile.am
+index 18b1fc6c8..b4b0c7852 100644
+--- a/collectors/ebpf.plugin/Makefile.am
++++ b/collectors/ebpf.plugin/Makefile.am
+@@ -13,7 +13,7 @@ SUFFIXES = .in
+ userebpfconfigdir=$(configdir)/ebpf.d
+ 
+ # Explicitly install directories to avoid permission issues due to umask
+-install-exec-local:
++no-install-exec-local:
+ 	$(INSTALL) -d $(DESTDIR)$(userebpfconfigdir)
+ 
+ dist_plugins_SCRIPTS = \
 diff --git a/collectors/node.d.plugin/Makefile.am b/collectors/node.d.plugin/Makefile.am
-index c3142d43..95e32445 100644
+index c3142d433..95e324455 100644
 --- a/collectors/node.d.plugin/Makefile.am
 +++ b/collectors/node.d.plugin/Makefile.am
 @@ -26,7 +26,7 @@ dist_usernodeconfig_DATA = \
@@ -58,7 +51,7 @@ index c3142d43..95e32445 100644
  
  nodeconfigdir=$(libconfigdir)/node.d
 diff --git a/collectors/python.d.plugin/Makefile.am b/collectors/python.d.plugin/Makefile.am
-index e678f86a..29a319da 100644
+index 38eb90f79..ce7079441 100644
 --- a/collectors/python.d.plugin/Makefile.am
 +++ b/collectors/python.d.plugin/Makefile.am
 @@ -32,7 +32,7 @@ dist_userpythonconfig_DATA = \
@@ -71,10 +64,10 @@ index e678f86a..29a319da 100644
  
  pythonconfigdir=$(libconfigdir)/python.d
 diff --git a/collectors/statsd.plugin/Makefile.am b/collectors/statsd.plugin/Makefile.am
-index b01302d1..f5b77da4 100644
+index 71f2d468d..2c9ced2bf 100644
 --- a/collectors/statsd.plugin/Makefile.am
 +++ b/collectors/statsd.plugin/Makefile.am
-@@ -17,5 +17,5 @@ dist_userstatsdconfig_DATA = \
+@@ -18,5 +18,5 @@ dist_userstatsdconfig_DATA = \
      $(NULL)
  
  # Explicitly install directories to avoid permission issues due to umask
@@ -82,7 +75,7 @@ index b01302d1..f5b77da4 100644
 +no-install-exec-local:
  	$(INSTALL) -d $(DESTDIR)$(userstatsdconfigdir)
 diff --git a/health/Makefile.am b/health/Makefile.am
-index 853ed0d7..210330a6 100644
+index b963ea0cd..6979e69bf 100644
 --- a/health/Makefile.am
 +++ b/health/Makefile.am
 @@ -19,7 +19,7 @@ dist_userhealthconfig_DATA = \
@@ -95,10 +88,10 @@ index 853ed0d7..210330a6 100644
  
  healthconfigdir=$(libconfigdir)/health.d
 diff --git a/system/Makefile.am b/system/Makefile.am
-index ad68c655..74f032f9 100644
+index 5323738c9..06e1b6a73 100644
 --- a/system/Makefile.am
 +++ b/system/Makefile.am
-@@ -17,11 +17,10 @@ include $(top_srcdir)/build/subst.inc
+@@ -20,11 +20,10 @@ include $(top_srcdir)/build/subst.inc
  SUFFIXES = .in
  
  dist_config_SCRIPTS = \
@@ -112,7 +105,7 @@ index ad68c655..74f032f9 100644
  
  nodist_noinst_DATA = \
 diff --git a/web/Makefile.am b/web/Makefile.am
-index ccaccd76..16a2977e 100644
+index ccaccd764..16a2977e5 100644
 --- a/web/Makefile.am
 +++ b/web/Makefile.am
 @@ -12,7 +12,7 @@ SUBDIRS = \
@@ -124,6 +117,3 @@ index ccaccd76..16a2977e 100644
  	$(INSTALL) -d $(DESTDIR)$(usersslconfigdir)
  
  dist_noinst_DATA = \
--- 
-2.25.0
-
diff --git a/pkgs/tools/system/nkeys/default.nix b/pkgs/tools/system/nkeys/default.nix
new file mode 100644
index 00000000000..05d2d853b24
--- /dev/null
+++ b/pkgs/tools/system/nkeys/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "nkeys";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "nats-io";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "06wbmb3cxjrcfvgfbn6rdfzb4pfaaw11bnvl1r4kig4ag22qcz7b";
+  };
+
+  vendorSha256 = "0kiqlw2411x5c1pamq3mn5wcm8mdn91avwg8xh2a7sy3kqw5d26d";
+
+  meta = with lib; {
+    description = "Public-key signature system for NATS";
+    homepage = "https://github.com/nats-io/nkeys";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/system/nq/default.nix b/pkgs/tools/system/nq/default.nix
index 9e6522b2028..239ac1368ad 100644
--- a/pkgs/tools/system/nq/default.nix
+++ b/pkgs/tools/system/nq/default.nix
@@ -2,24 +2,24 @@
 
 stdenv.mkDerivation rec {
   pname = "nq";
-  version = "0.3.1";
+  version = "0.4";
   src = fetchFromGitHub {
     owner = "chneukirchen";
     repo = "nq";
     rev = "v${version}";
-    sha256 = "1db96ykz35r273jyhf7cdknqk4p2jj9l8gbz7pjy1hq4pb6ffk99";
+    sha256 = "sha256-UfCeHwOD+tG6X2obW64DYZr6j90yh1Yl7My4ur+sqmk=";
   };
   makeFlags = [ "PREFIX=$(out)" ];
   postPatch = ''
     sed -i tq \
-      -e 's|\bfq\b|'$out'/bin/fq|g' \
-      -e 's|\bnq\b|'$out'/bin/nq|g'
+      -e 's|\bnq\b|'$out'/bin/nq|g' \
+      -e 's|\bfq\b|'$out'/bin/fq|g'
   '';
   meta = with lib; {
     description = "Unix command line queue utility";
     homepage = "https://github.com/chneukirchen/nq";
     license = licenses.publicDomain;
-    platforms = platforms.linux;
+    platforms = platforms.all;
     maintainers = with maintainers; [ cstrahan ];
   };
 }
diff --git a/pkgs/tools/system/nvtop/default.nix b/pkgs/tools/system/nvtop/default.nix
index cd9ec7c7082..fdbfeb1c31f 100644
--- a/pkgs/tools/system/nvtop/default.nix
+++ b/pkgs/tools/system/nvtop/default.nix
@@ -1,27 +1,31 @@
-{ stdenv, fetchFromGitHub, cmake, nvidia_x11, cudatoolkit, ncurses }:
+{ lib, stdenv, fetchFromGitHub, cmake, cudatoolkit, ncurses, addOpenGLRunpath }:
 
 stdenv.mkDerivation rec {
   pname = "nvtop";
-  version = "1.0.0";
+  version = "1.1.0";
 
   src = fetchFromGitHub {
     owner = "Syllo";
-    repo  = "nvtop";
+    repo = "nvtop";
     rev = version;
-    sha256 = "1b6yz54xddip1r0k8cbqg41dpyhds18fj29bj3yf40xvysklb0f4";
+    sha256 = "1h24ppdz7l6l0znwbgir49f7r1fshzjavc6i5j33c6bvr318dpqb";
   };
 
   cmakeFlags = [
     "-DNVML_INCLUDE_DIRS=${cudatoolkit}/include"
-    "-DNVML_LIBRARIES=${nvidia_x11}/lib/libnvidia-ml.so"
+    "-DNVML_LIBRARIES=${cudatoolkit}/targets/x86_64-linux/lib/stubs/libnvidia-ml.so"
     "-DCMAKE_BUILD_TYPE=Release"
   ];
 
-  nativeBuildInputs = [ cmake ];
-  buildInputs = [ ncurses nvidia_x11 cudatoolkit ];
+  nativeBuildInputs = [ cmake addOpenGLRunpath ];
+  buildInputs = [ ncurses cudatoolkit ];
 
-  meta = with stdenv.lib; {
-    description = "A (h)top like like task monitor for NVIDIA GPUs";
+  postFixup = ''
+    addOpenGLRunpath $out/bin/nvtop
+  '';
+
+  meta = with lib; {
+    description = "A (h)top like task monitor for NVIDIA GPUs";
     homepage = "https://github.com/Syllo/nvtop";
     license = licenses.gpl3;
     platforms = platforms.linux;
diff --git a/pkgs/tools/system/opencl-info/default.nix b/pkgs/tools/system/opencl-info/default.nix
index a5013a68885..d5fd86f231a 100644
--- a/pkgs/tools/system/opencl-info/default.nix
+++ b/pkgs/tools/system/opencl-info/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, opencl-clhpp, ocl-icd }:
+{ lib, stdenv, fetchFromGitHub, opencl-clhpp, ocl-icd }:
 
 stdenv.mkDerivation {
   name = "opencl-info-2014-02-21";
@@ -10,6 +10,14 @@ stdenv.mkDerivation {
     sha256 = "114lxgnjg40ivjjszkv4n3f3yq2lbrvywryvbazf20kqmdz7315l";
   };
 
+  patches = [
+    # The cl.hpp header was removed from opencl-clhpp. This patch
+    # updates opencl-info to use the new cp2.hpp header.
+    #
+    # Submitted upstream: https://github.com/marchv/opencl-info/pull/2
+    ./opencl-info-clhpp2.diff
+  ];
+
   buildInputs = [ opencl-clhpp ocl-icd ];
 
   NIX_LDFLAGS = "-lOpenCL";
@@ -18,7 +26,7 @@ stdenv.mkDerivation {
     install -Dm755 opencl-info $out/bin/opencl-info
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A tool to dump OpenCL platform/device information";
     homepage = "https://github.com/marchv/opencl-info";
     license = licenses.mit;
diff --git a/pkgs/tools/system/opencl-info/opencl-info-clhpp2.diff b/pkgs/tools/system/opencl-info/opencl-info-clhpp2.diff
new file mode 100644
index 00000000000..013222beebf
--- /dev/null
+++ b/pkgs/tools/system/opencl-info/opencl-info-clhpp2.diff
@@ -0,0 +1,22 @@
+diff --git a/opencl-info.cpp b/opencl-info.cpp
+index a23015d..a6de0c1 100644
+--- a/opencl-info.cpp
++++ b/opencl-info.cpp
+@@ -7,7 +7,7 @@
+ #if defined(__APPLE__) || defined(__MACOSX)
+ #  include <OpenCL/cl.hpp>
+ #else
+-#  include <CL/cl.hpp>
++#  include <CL/cl2.hpp>
+ #endif
+ 
+ #include <iostream>
+@@ -130,7 +130,7 @@ int main() {
+                 PconstEnd;
+                 P(device, CL_DEVICE_LOCAL_MEM_SIZE);
+                 Pbool(device, CL_DEVICE_ERROR_CORRECTION_SUPPORT);
+-                Pbool(device, CL_DEVICE_HOST_UNIFIED_MEMORY);
++                // Pbool(device, CL_DEVICE_HOST_UNIFIED_MEMORY); /* Deprecated in 2.0 */
+                 P(device, CL_DEVICE_PROFILING_TIMER_RESOLUTION);
+                 Pbool(device, CL_DEVICE_ENDIAN_LITTLE);
+                 Pbool(device, CL_DEVICE_AVAILABLE);
diff --git a/pkgs/tools/system/pciutils/default.nix b/pkgs/tools/system/pciutils/default.nix
index 4bbe2bdcee0..8c017c42d7a 100644
--- a/pkgs/tools/system/pciutils/default.nix
+++ b/pkgs/tools/system/pciutils/default.nix
@@ -1,4 +1,8 @@
-{ stdenv, fetchurl, pkgconfig, zlib, kmod, which }:
+{ lib, stdenv, fetchurl, pkg-config, zlib, kmod, which
+, hwdata
+, static ? stdenv.hostPlatform.isStatic
+, IOKit
+}:
 
 stdenv.mkDerivation rec {
   name = "pciutils-3.7.0"; # with release-date database
@@ -8,11 +12,16 @@ stdenv.mkDerivation rec {
     sha256 = "1ss0rnfsx8gvqjxaji4mvbhf9xyih4cadmgadbwwv8mnx1xvjh4x";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ zlib kmod which ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ zlib kmod which ] ++
+    lib.optional stdenv.hostPlatform.isDarwin IOKit;
+
+  preConfigure = if stdenv.cc.isGNU then null else ''
+    substituteInPlace Makefile --replace 'CC=$(CROSS_COMPILE)gcc' ""
+  '';
 
   makeFlags = [
-    "SHARED=yes"
+    "SHARED=${if static then "no" else "yes"}"
     "PREFIX=\${out}"
     "STRIP="
     "HOST=${stdenv.hostPlatform.system}"
@@ -22,10 +31,17 @@ stdenv.mkDerivation rec {
 
   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";
+  postInstall = ''
+    # Remove update-pciids as it won't work on nixos
+    rm $out/sbin/update-pciids $out/man/man8/update-pciids.8
+
+    # use database from hwdata instead
+    # (we don't create a symbolic link because we do not want to pull in the
+    # full closure of hwdata)
+    cp --reflink=auto ${hwdata}/share/hwdata/pci.ids $out/share/pci.ids
+  '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://mj.ucw.cz/pciutils.html";
     description = "A collection of programs for inspecting and manipulating configuration of PCI devices";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/system/pcstat/default.nix b/pkgs/tools/system/pcstat/default.nix
index 5febbcb6ef6..d01b08a1434 100644
--- a/pkgs/tools/system/pcstat/default.nix
+++ b/pkgs/tools/system/pcstat/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage {
   pname = "pcstat-unstable";
@@ -15,8 +15,8 @@ buildGoPackage {
 
   goDeps = ./deps.nix;
 
-  meta = with stdenv.lib; {
-    description = "Page Cache stat: get page cache stats for files on Linux.";
+  meta = with 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/pkgs/tools/system/plan9port/darwin-cfframework.patch b/pkgs/tools/system/plan9port/darwin-cfframework.patch
deleted file mode 100644
index 01541af92e3..00000000000
--- a/pkgs/tools/system/plan9port/darwin-cfframework.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-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/pkgs/tools/system/plan9port/darwin-sw_vers.patch b/pkgs/tools/system/plan9port/darwin-sw_vers.patch
deleted file mode 100644
index 3e61c83e540..00000000000
--- a/pkgs/tools/system/plan9port/darwin-sw_vers.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-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/pkgs/tools/system/plan9port/default.nix b/pkgs/tools/system/plan9port/default.nix
index 8164dfa9136..78db6e2037e 100644
--- a/pkgs/tools/system/plan9port/default.nix
+++ b/pkgs/tools/system/plan9port/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, which
+{ lib, stdenv, fetchFromGitHub, which
 , darwin ? null
 , xorgproto ? null
 , libX11
@@ -11,20 +11,15 @@
 
 stdenv.mkDerivation {
   pname = "plan9port";
-  version = "2020-01-08";
+  version = "2021-04-22";
 
   src =  fetchFromGitHub {
     owner = "9fans";
     repo = "plan9port";
-    rev = "cc3d97d52a72d7eaceb5b636bcdf81c3e19f7a2e";
-    sha256 = "0gb55kj0gzx1kdhiwcrbr7xcgz1im21dyxgxhfhh6d0q9rw0c17g";
+    rev = "70cc6e5ba7798b315c3fb3aae19620a01604a459";
+    hash = "sha256-HCn8R9YSocHrpw/xK5n8gsCLSAbAQgw0NtjO9vYIbKo=";
   };
 
-  patches = [
-    ./darwin-sw_vers.patch
-    ./darwin-cfframework.patch
-  ];
-
   postPatch = ''
     #hardcoded path
     substituteInPlace src/cmd/acme/acme.c \
@@ -37,7 +32,7 @@ stdenv.mkDerivation {
 
     substituteInPlace bin/9c \
       --replace 'which uniq' '${which}/bin/which uniq'
-  '' + stdenv.lib.optionalString (!stdenv.isDarwin) ''
+  '' + 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':" \
@@ -48,10 +43,10 @@ stdenv.mkDerivation {
 
   buildInputs = [
     perl
-  ] ++ stdenv.lib.optionals (!stdenv.isDarwin) [
+  ] ++ 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; [
+  ] ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
     Carbon Cocoa IOKit Metal QuartzCore
   ]);
 
@@ -79,17 +74,23 @@ stdenv.mkDerivation {
     ./test
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    license = licenses.mit;
+    maintainers = with maintainers; [
+      AndersonTorres
+      bbarker
+      ehmry
+      ftrvxmtrx
+      kovirobi
+    ];
     platforms = platforms.unix;
+    broken = stdenv.isDarwin;
   };
 }
 # TODO: investigate the mouse chording support patch
diff --git a/pkgs/tools/system/procodile/gemset.nix b/pkgs/tools/system/procodile/gemset.nix
index 36ec2a9cf18..f5b73b617bb 100644
--- a/pkgs/tools/system/procodile/gemset.nix
+++ b/pkgs/tools/system/procodile/gemset.nix
@@ -20,4 +20,4 @@
     };
     version = "1.0.23";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/system/proot/default.nix b/pkgs/tools/system/proot/default.nix
index 06147df093e..daf543d7f75 100644
--- a/pkgs/tools/system/proot/default.nix
+++ b/pkgs/tools/system/proot/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub
+{ lib, stdenv, fetchFromGitHub
 , talloc, docutils, swig, python, coreutils, enablePython ? true }:
 
 stdenv.mkDerivation {
@@ -19,8 +19,8 @@ stdenv.mkDerivation {
     sed -i /CROSS_COMPILE/d src/GNUmakefile
   '';
 
-  buildInputs = [ talloc ] ++ stdenv.lib.optional enablePython python;
-  nativeBuildInputs = [ docutils ] ++ stdenv.lib.optional enablePython swig;
+  buildInputs = [ talloc ] ++ lib.optional enablePython python;
+  nativeBuildInputs = [ docutils ] ++ lib.optional enablePython swig;
 
   enableParallelBuilding = true;
 
@@ -36,7 +36,7 @@ stdenv.mkDerivation {
     install -Dm644 doc/proot/man.1 $out/share/man/man1/proot.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://proot-me.github.io";
     description = "User-space implementation of chroot, mount --bind and binfmt_misc";
     platforms = platforms.linux;
diff --git a/pkgs/tools/system/ps_mem/default.nix b/pkgs/tools/system/ps_mem/default.nix
index 45a33a1adb7..1752aba240f 100644
--- a/pkgs/tools/system/ps_mem/default.nix
+++ b/pkgs/tools/system/ps_mem/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, pythonPackages, fetchFromGitHub }:
+{ lib, pythonPackages, fetchFromGitHub }:
 
 let
   version = "3.13";
@@ -13,11 +13,11 @@ in pythonPackages.buildPythonApplication {
     sha256 = "0pgi9hvwfbkzvwicqlkwx4rwal1ikza018yxbwpnf7c80zw0zaw9";
   };
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = [ ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/system/psensor/default.nix b/pkgs/tools/system/psensor/default.nix
index afbab363443..079055bd3ba 100644
--- a/pkgs/tools/system/psensor/default.nix
+++ b/pkgs/tools/system/psensor/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchurl, pkgconfig, lm_sensors, libgtop, libatasmart, gtk3
+{ stdenv, lib, fetchurl, pkg-config, lm_sensors, libgtop, libatasmart, gtk3
 , libnotify, udisks2, libXNVCtrl, wrapGAppsHook
 }:
 
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
     sha256 = "1ark901va79gfq5p8h8dqypjgm3f8crmj37520q3slwz2rfphkq8";
   };
 
-  nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
+  nativeBuildInputs = [ pkg-config wrapGAppsHook ];
 
   buildInputs = [
     lm_sensors libgtop libatasmart gtk3 libnotify udisks2
diff --git a/pkgs/tools/system/psstop/default.nix b/pkgs/tools/system/psstop/default.nix
index 3a5ee2b0581..1d4fff918ec 100644
--- a/pkgs/tools/system/psstop/default.nix
+++ b/pkgs/tools/system/psstop/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, glib }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, glib }:
 
 stdenv.mkDerivation rec {
   pname = "psstop";
@@ -11,11 +11,11 @@ stdenv.mkDerivation rec {
     sha256 = "03ir3jjpzm7q8n1qc5jr99hqarr9r529w1zb6f7q4wak2vfj7w9h";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
   buildInputs = [ glib ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/clearlinux/psstop";
     description = "Show processes' memory usage by looking into pss"; # upstream summary
     license = licenses.gpl3;
diff --git a/pkgs/tools/system/r10k/gemset.nix b/pkgs/tools/system/r10k/gemset.nix
index d0e955d4cea..9b46cce00da 100644
--- a/pkgs/tools/system/r10k/gemset.nix
+++ b/pkgs/tools/system/r10k/gemset.nix
@@ -165,4 +165,4 @@
     };
     version = "1.3.1";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/system/retry/default.nix b/pkgs/tools/system/retry/default.nix
new file mode 100644
index 00000000000..48125d2df37
--- /dev/null
+++ b/pkgs/tools/system/retry/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, which, txt2man }:
+stdenv.mkDerivation rec {
+  pname = "retry";
+  version = "1.0.4";
+
+  nativeBuildInputs = [ autoreconfHook which txt2man ];
+
+  src = fetchFromGitHub {
+    owner = "minfrin";
+    repo = "retry";
+    rev = "${pname}-${version}";
+    sha256 = "sha256:0jrx4yrwlf4fn3309kxraj7zgwk7gq6rz5ibswq3w3b3jfvxi8qb";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/minfrin/retry";
+    description = "Retry a command until the command succeeds";
+    platforms = platforms.all;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ gfrascadorio ];
+  };
+}
+
diff --git a/pkgs/tools/system/rocm-smi/default.nix b/pkgs/tools/system/rocm-smi/default.nix
index 8cbc56e0468..de9afdae294 100644
--- a/pkgs/tools/system/rocm-smi/default.nix
+++ b/pkgs/tools/system/rocm-smi/default.nix
@@ -1,30 +1,52 @@
-{ lib, buildPythonApplication, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub, cmake, python3 }:
 
-buildPythonApplication rec {
+stdenv.mkDerivation rec {
   pname = "rocm-smi";
-  version = "3.7.0";
+  version = "4.1.0";
 
   src = fetchFromGitHub {
     owner = "RadeonOpenCompute";
-    repo = "ROC-smi";
+    repo = "rocm_smi_lib";
     rev = "rocm-${version}";
-    sha256 = "00g9cbni73x9da05lx7hiffp303mdkj1wpxiavfylr4q4z84yhrz";
+    hash = "sha256-LEaC1XhmyoVWrpL05MhgN02LVT2rLKdnw9g2QdfM/uE=";
   };
 
-  format = "other";
+  nativeBuildInputs = [ cmake python3.pkgs.wrapPython ];
 
-  dontConfigure = true;
-  dontBuild = true;
+  postPatch = ''
+    # Upstream ROCm is installed in an /opt directory. For this reason,
+    # it does not completely follow FHS layout, creating top-level
+    # rocm_smi, oam, and bindings top-level directories. Since rocm-smi
+    # is a package that is typically installed, we change the paths to
+    # follow FHS more closely.
 
-  installPhase = ''
-    install -Dm0755 rocm_smi.py $out/bin/rocm-smi
+    # rocm_smi libraries and headers go into lib and include. Bindings
+    # go into lib/rocm_smi/bindings.
+    substituteInPlace rocm_smi/CMakeLists.txt \
+      --replace "DESTINATION rocm_smi/" "DESTINATION " \
+      --replace "DESTINATION bindings" "DESTINATION lib/rocm_smi/bindings" \
+      --replace "../rocm_smi/bindings/rsmiBindings.py" "../lib/rocm_smi/bindings/rsmiBindings.py" \
+      --replace 'DESTINATION ''${ROCM_SMI}/' "DESTINATION "
+
+    # oam libraries and headers go into lib and include.
+    substituteInPlace oam/CMakeLists.txt \
+      --replace "DESTINATION oam/" "DESTINATION " \
+      --replace 'DESTINATION ''${OAM_NAME}/' "DESTINATION "
+
+    # Update relative path to librocm_smi64 in the Python binding.
+    substituteInPlace python_smi_tools/rsmiBindings.py \
+      --replace "/../lib/librocm_smi64.so" "/../../librocm_smi64.so"
+  '';
+
+  postInstall = ''
+    wrapPythonProgramsIn $out/bin
   '';
 
   meta = with lib; {
     description = "System management interface for AMD GPUs supported by ROCm";
     homepage = "https://github.com/RadeonOpenCompute/ROC-smi";
     license = with licenses; [ mit ];
-    maintainers = with maintainers; [ danieldk ];
-    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+    platforms = [ "x86_64-linux" ];
   };
 }
diff --git a/pkgs/tools/system/rofi-systemd/default.nix b/pkgs/tools/system/rofi-systemd/default.nix
index 92c13527c6f..f64a84c5509 100644
--- a/pkgs/tools/system/rofi-systemd/default.nix
+++ b/pkgs/tools/system/rofi-systemd/default.nix
@@ -1,18 +1,18 @@
-{ stdenv, fetchFromGitHub, rofi, systemd, coreutils, utillinux, gawk, makeWrapper
+{ lib, stdenv, fetchFromGitHub, rofi, systemd, coreutils, util-linux, gawk, makeWrapper, jq
 }:
 
 stdenv.mkDerivation rec {
   pname = "rofi-systemd";
-  version = "0.1.0";
+  version = "0.1.1";
 
   src = fetchFromGitHub {
     owner = "IvanMalison";
     repo = "rofi-systemd";
     rev = "v${version}";
-    sha256 = "1dbygq3qaj1f73hh3njdnmibq7vi6zbyzdc6c0j989c0r1ksv0zi";
+    sha256 = "0lgffb6rk1kf91j4j303lzpx8w2g9zy2gk99p8g8pk62a30c5asm";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
   dontBuild = true;
 
@@ -21,12 +21,13 @@ stdenv.mkDerivation rec {
     cp -a rofi-systemd $out/bin/rofi-systemd
   '';
 
-  wrapperPath = with stdenv.lib; makeBinPath [
-    rofi
+  wrapperPath = with lib; makeBinPath [
     coreutils
-    utillinux
     gawk
+    jq
+    rofi
     systemd
+    util-linux
   ];
 
   fixupPhase = ''
@@ -38,8 +39,8 @@ stdenv.mkDerivation rec {
   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;
+    maintainers = with lib.maintainers; [ imalison ];
+    license = lib.licenses.gpl3;
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/system/rowhammer-test/default.nix b/pkgs/tools/system/rowhammer-test/default.nix
index 02462584c65..9afb1933e17 100644
--- a/pkgs/tools/system/rowhammer-test/default.nix
+++ b/pkgs/tools/system/rowhammer-test/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation {
   name = "rowhammer-test-20150811";
@@ -10,7 +10,7 @@ stdenv.mkDerivation {
     sha256 = "1fbfcnm5gjish47wdvikcsgzlb5vnlfqlzzm6mwiw2j5qkq0914i";
   };
 
-  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.isi686 "-Wno-error=format";
+  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isi686 "-Wno-error=format";
 
   buildPhase = "sh -e make.sh";
 
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
     cp rowhammer_test double_sided_rowhammer $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Test DRAM for bit flips caused by the rowhammer problem";
     homepage = "https://github.com/google/rowhammer-test";
     license = licenses.asl20;
diff --git a/pkgs/tools/system/rsyslog/default.nix b/pkgs/tools/system/rsyslog/default.nix
index 7be7e5b3d37..7fc11d49d7c 100644
--- a/pkgs/tools/system/rsyslog/default.nix
+++ b/pkgs/tools/system/rsyslog/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, autoreconfHook, libestr, json_c, zlib, pythonPackages, fastJson
+{ lib, stdenv, fetchurl, pkg-config, 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
@@ -8,7 +8,7 @@
 , nixosTests ? null
 }:
 
-with stdenv.lib;
+with lib;
 let
   mkFlag = cond: name: if cond then "--enable-${name}" else "--disable-${name}";
 in
@@ -23,14 +23,14 @@ stdenv.mkDerivation rec {
 
   #patches = [ ./fix-gnutls-detection.patch ];
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  nativeBuildInputs = [ pkg-config 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 libmaxminddb
-  ] ++ stdenv.lib.optional (libmysqlclient != null) libmysqlclient
-    ++ stdenv.lib.optional stdenv.isLinux systemd;
+  ] ++ lib.optional (libmysqlclient != null) libmysqlclient
+    ++ lib.optional stdenv.isLinux systemd;
 
   configureFlags = [
     "--sysconfdir=/etc"
diff --git a/pkgs/tools/system/runit/default.nix b/pkgs/tools/system/runit/default.nix
index acca0acf3ef..2553c07cd6b 100644
--- a/pkgs/tools/system/runit/default.nix
+++ b/pkgs/tools/system/runit/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, darwin
+{ lib, stdenv, fetchurl, darwin
 
 # Build runit-init as a static binary
 , static ? false
@@ -23,15 +23,15 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  buildInputs = stdenv.lib.optionals static [ stdenv.cc.libc stdenv.cc.libc.static ] ++
-    stdenv.lib.optional stdenv.isDarwin darwin.apple_sdk.libs.utmp;
+  buildInputs = lib.optionals static [ stdenv.cc.libc stdenv.cc.libc.static ] ++
+    lib.optional stdenv.isDarwin darwin.apple_sdk.libs.utmp;
 
   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) ''
+  '' + lib.optionalString (!static) ''
     sed -i 's,-static,,g' src/Makefile
   '';
 
@@ -40,7 +40,7 @@ stdenv.mkDerivation rec {
 
     # Both of these are originally hard-coded to gcc
     echo ${stdenv.cc.targetPrefix}cc > conf-cc
-    echo ${stdenv.cc.targetPrefix}cc ${stdenv.lib.optionalString stdenv.isDarwin "-Xlinker -x "}> conf-ld
+    echo ${stdenv.cc.targetPrefix}cc ${lib.optionalString stdenv.isDarwin "-Xlinker -x "}> conf-ld
   '';
 
   installPhase = ''
@@ -51,7 +51,7 @@ stdenv.mkDerivation rec {
     cp -r ../man $man/share/man/man8
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "UNIX init scheme with service supervision";
     license = licenses.bsd3;
     homepage = "http://smarden.org/runit";
diff --git a/pkgs/tools/system/s-tui/default.nix b/pkgs/tools/system/s-tui/default.nix
index 1192a176263..3943a8f4eef 100644
--- a/pkgs/tools/system/s-tui/default.nix
+++ b/pkgs/tools/system/s-tui/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3Packages }:
+{ lib, python3Packages }:
 
 python3Packages.buildPythonPackage rec {
   pname = "s-tui";
@@ -16,7 +16,7 @@ python3Packages.buildPythonPackage rec {
 
   LC_ALL = "en_US.UTF-8";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://amanusk.github.io/s-tui/";
     description = "Stress-Terminal UI monitoring tool";
     license = licenses.gpl2;
diff --git a/pkgs/tools/system/s6-rc/default.nix b/pkgs/tools/system/s6-rc/default.nix
index 4ddc7fbecc0..532575d16c8 100644
--- a/pkgs/tools/system/s6-rc/default.nix
+++ b/pkgs/tools/system/s6-rc/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, skawarePackages }:
+{ lib, skawarePackages }:
 
 with skawarePackages;
 
 buildPackage {
   pname = "s6-rc";
-  version = "0.5.1.2";
-  sha256 = "18m8jsx3bkj566p6xwwnsvdckk10n8wqnhp0na2k88i295h4rnjp";
+  version = "0.5.2.2";
+  sha256 = "12bzc483jpd16xmhfsfrib84daj1k3kwy5s5nc18ap60apa1r39a";
 
   description = "A service manager for s6-based systems";
-  platforms = stdenv.lib.platforms.linux;
+  platforms = lib.platforms.linux;
 
   outputs = [ "bin" "lib" "dev" "doc" "out" ];
 
diff --git a/pkgs/tools/system/s6/default.nix b/pkgs/tools/system/s6/default.nix
index 3ce97a9d97b..e9d096a7ab0 100644
--- a/pkgs/tools/system/s6/default.nix
+++ b/pkgs/tools/system/s6/default.nix
@@ -4,8 +4,8 @@ with skawarePackages;
 
 buildPackage {
   pname = "s6";
-  version = "2.9.1.0";
-  sha256 = "1xqzl2wnvcmcyhppk7mc10h1ac7fkik3i6gpyliwpf3d5i9mkqh5";
+  version = "2.10.0.3";
+  sha256 = "0mw7blp8dwr09z58m9mrxwmmvvpnjzq9klcf1vgm0hbha4qkf88x";
 
   description = "skarnet.org's small & secure supervision software suite";
 
diff --git a/pkgs/tools/system/safe-rm/default.nix b/pkgs/tools/system/safe-rm/default.nix
index a9fc44e8b40..bac9bb35602 100644
--- a/pkgs/tools/system/safe-rm/default.nix
+++ b/pkgs/tools/system/safe-rm/default.nix
@@ -1,34 +1,36 @@
-{ stdenv, fetchgit, perl, coreutils }:
+{ lib, rustPlatform, fetchgit, coreutils, installShellFiles }:
 
-stdenv.mkDerivation rec {
+rustPlatform.buildRustPackage rec {
   pname = "safe-rm";
-  version = "0.12";
+  version = "1.1.0";
 
   src = fetchgit {
-    url = "https://gitorious.org/safe-rm/mainline.git";
+    url = "https://git.launchpad.net/safe-rm";
     rev = "refs/tags/${pname}-${version}";
-    sha256 = "0zkmwxyl1870ar6jr9h537vmqgkckqs9jd1yv6m4qqzdsmg5gdbq";
+    sha256 = "sha256-7+4XwsjzLBCQmHDYNwhlN4Yg3eL43GUEbq8ROtuP2Kw=";
   };
 
-  propagatedBuildInputs = [ perl coreutils ];
+  cargoSha256 = "sha256-durb4RTzEun7HPeYfvDJpvO+6L7tNFmAxdIwINbwZrg=";
 
-  postFixup = ''
-    sed -e 's@/bin/rm@${coreutils}/bin/rm@' -i $out/bin/safe-rm
+  postPatch = ''
+    substituteInPlace src/main.rs \
+      --replace "/bin/rm" "${coreutils}/bin/rm"
   '';
 
-  installPhase = ''
-    mkdir -p $out/bin
-    cp safe-rm $out/bin
+  nativeBuildInputs = [ installShellFiles ];
 
-    mkdir -p $out/share/man/man1
-    pod2man safe-rm > $out/share/man/man1/safe-rm.1
+  # uses lots of absolute paths outside of the sandbox
+  doCheck = false;
+
+  postInstall = ''
+    installManPage safe-rm.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tool intended to prevent the accidental deletion of important files";
     homepage = "https://launchpad.net/safe-rm";
-    license = licenses.gpl3;
+    license = licenses.gpl3Plus;
     platforms = platforms.all;
-    maintainers = [ maintainers.koral ];
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/system/safecopy/default.nix b/pkgs/tools/system/safecopy/default.nix
index e8db6a2fd39..5533c9a57ff 100644
--- a/pkgs/tools/system/safecopy/default.nix
+++ b/pkgs/tools/system/safecopy/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "safecopy-1.7";
@@ -22,9 +22,9 @@ stdenv.mkDerivation rec {
 
     homepage = "http://safecopy.sourceforge.net";
 
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
 
-    platforms = stdenv.lib.platforms.linux;
-    maintainers = [ stdenv.lib.maintainers.bluescreen303 ];
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.bluescreen303 ];
   };
 }
diff --git a/pkgs/tools/system/setserial/default.nix b/pkgs/tools/system/setserial/default.nix
index 68ea32e1e8a..da5d3b2a0d1 100644
--- a/pkgs/tools/system/setserial/default.nix
+++ b/pkgs/tools/system/setserial/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, groff }:
+{ lib, stdenv, fetchurl, groff }:
 
 stdenv.mkDerivation rec {
   pname = "setserial";
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Serial port configuration utility";
-    platforms = stdenv.lib.platforms.linux;
-    license = stdenv.lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl2;
   };
 }
diff --git a/pkgs/tools/system/sg3_utils/default.nix b/pkgs/tools/system/sg3_utils/default.nix
index 45e3287511a..d0084e1f4d8 100644
--- a/pkgs/tools/system/sg3_utils/default.nix
+++ b/pkgs/tools/system/sg3_utils/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "sg3_utils-1.45";
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "0qasc3qm4i8swjfaywiwpgz76gdxqvm47qycxgmprbsjmxqwk1qb";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://sg.danny.cz/sg/";
     description = "Utilities that send SCSI commands to devices";
     platforms = platforms.linux;
diff --git a/pkgs/tools/system/sleuthkit/default.nix b/pkgs/tools/system/sleuthkit/default.nix
index 8dbc28d3a31..912afb7021c 100644
--- a/pkgs/tools/system/sleuthkit/default.nix
+++ b/pkgs/tools/system/sleuthkit/default.nix
@@ -1,18 +1,18 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, libewf, afflib, openssl, zlib }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libewf, afflib, openssl, zlib }:
 
 stdenv.mkDerivation rec {
-  version = "4.6.5";
+  version = "4.10.2";
   pname = "sleuthkit";
 
   src = fetchFromGitHub {
     owner = "sleuthkit";
     repo = "sleuthkit";
     rev = "${pname}-${version}";
-    sha256 = "1q1cdixnfv9v4qlzza8xwdsyvq1vdw6gjgkd41yc1d57ldp1qm0c";
+    sha256 = "sha256-N0/spV/Bxk/UNULPot82Vw1uTIxy/Arf84wqUp6W2Tc=";
   };
 
   postPatch = ''
-    substituteInPlace tsk/img/ewf.c --replace libewf_handle_read_random libewf_handle_read_buffer_at_offset
+    substituteInPlace tsk/img/ewf.cpp --replace libewf_handle_read_random libewf_handle_read_buffer_at_offset
   '';
 
   enableParallelBuilding = true;
@@ -26,9 +26,8 @@ stdenv.mkDerivation rec {
   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;
+    maintainers = [ lib.maintainers.raskin ];
+    platforms = lib.platforms.linux;
+    license = lib.licenses.ipl10;
   };
 }
diff --git a/pkgs/tools/system/smartmontools/default.nix b/pkgs/tools/system/smartmontools/default.nix
index 5d9196fcc16..669d1a9fbc6 100644
--- a/pkgs/tools/system/smartmontools/default.nix
+++ b/pkgs/tools/system/smartmontools/default.nix
@@ -1,43 +1,43 @@
-{ stdenv, fetchurl, autoreconfHook
-, mailutils, inetutils
-, IOKit ? null , ApplicationServices ? null }:
+{ lib, stdenv, fetchurl, autoreconfHook
+, mailutils, enableMail ? true
+, inetutils
+, IOKit, ApplicationServices }:
 
 let
-  version = "7.1";
-
-  dbrev = "5062";
-  drivedbBranch = "RELEASE_7_0_DRIVEDB";
+  dbrev = "5171";
+  drivedbBranch = "RELEASE_7_2_DRIVEDB";
   driverdb = fetchurl {
     url    = "https://sourceforge.net/p/smartmontools/code/${dbrev}/tree/branches/${drivedbBranch}/smartmontools/drivedb.h?format=raw";
-    sha256 = "0gggl55h9gq0z846ndhyd7xrpxh8lqfbidblx0598q2wlh9rvlww";
+    sha256 = "0vncr98xagbcfsxgfgxsip2qrl9q3y8va19qhv6yknlwbdfap4mn";
     name   = "smartmontools-drivedb.h";
   };
 
 in stdenv.mkDerivation rec {
   pname = "smartmontools";
-  inherit version;
+  version = "7.2";
 
   src = fetchurl {
     url = "mirror://sourceforge/smartmontools/${pname}-${version}.tar.gz";
-    sha256 = "0imqb7ka4ia5573w8rnpck571pjjc9698pdjcapy9cfyk4n4swrz";
+    sha256 = "1mlc25sd5rgj5xmzcllci47inmfdw7cp185fday6hc9rwqkqmnaw";
   };
 
   patches = [ ./smartmontools.patch ];
   postPatch = "cp -v ${driverdb} drivedb.h";
 
   configureFlags = [
-    "--with-scriptpath=${stdenv.lib.makeBinPath [ mailutils inetutils ]}"
+    "--with-scriptpath=${lib.makeBinPath ([ inetutils ] ++ lib.optional enableMail mailutils)}"
   ];
 
   nativeBuildInputs = [ autoreconfHook ];
-  buildInputs = [] ++ stdenv.lib.optionals stdenv.isDarwin [IOKit ApplicationServices];
+  buildInputs = [] ++ lib.optionals stdenv.isDarwin [IOKit ApplicationServices];
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tools for monitoring the health of hard drives";
     homepage    = "https://www.smartmontools.org/";
     license     = licenses.gpl2Plus;
     maintainers = with maintainers; [ peti Frostman ];
     platforms   = with platforms; linux ++ darwin;
+    mainProgram = "smartctl";
   };
 }
diff --git a/pkgs/tools/system/snooze/default.nix b/pkgs/tools/system/snooze/default.nix
new file mode 100644
index 00000000000..bfe91c6e0e8
--- /dev/null
+++ b/pkgs/tools/system/snooze/default.nix
@@ -0,0 +1,19 @@
+{ lib, stdenv, fetchFromGitHub }:
+stdenv.mkDerivation rec {
+  pname = "snooze";
+  version = "0.5";
+  src = fetchFromGitHub {
+    owner = "leahneukirchen";
+    repo = "snooze";
+    rev = "v${version}";
+    sha256 = "sha256-K77axli/mapUr3yxpmUfFq4iWwgRmEVUlP6+/0Iezwo=";
+  };
+  makeFlags = [ "DESTDIR=$(out)" "PREFIX=/" ];
+
+  meta = with lib; {
+    description = "Tool for waiting until a particular time and then running a command";
+    maintainers = with maintainers; [ kaction ];
+    license = licenses.cc0;
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/system/socklog/default.nix b/pkgs/tools/system/socklog/default.nix
index cf7fbe5e9a1..a87beb14a84 100644
--- a/pkgs/tools/system/socklog/default.nix
+++ b/pkgs/tools/system/socklog/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
-with stdenv.lib;
+with lib;
 
 stdenv.mkDerivation rec {
   pname = "socklog";
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
     echo "$NIX_CC/bin/cc -s"                    >src/conf-ld
   '';
 
-  buildPhase = ''package/compile'';
+  buildPhase = "package/compile";
 
   installPhase = ''
     mkdir -p $out/bin
@@ -45,7 +45,7 @@ stdenv.mkDerivation rec {
     mv doc/*.html $doc/share/doc/socklog/html/
   '';
 
-  checkPhase = ''package/check'';
+  checkPhase = "package/check";
 
   doCheck = true;
 
diff --git a/pkgs/tools/system/stress-ng/default.nix b/pkgs/tools/system/stress-ng/default.nix
index d9953b7cdb5..8065355383a 100644
--- a/pkgs/tools/system/stress-ng/default.nix
+++ b/pkgs/tools/system/stress-ng/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchurl
+{ lib, stdenv, fetchurl
 , attr, judy, keyutils, libaio, libapparmor, libbsd, libcap, libgcrypt, lksctp-tools, zlib
 }:
 
 stdenv.mkDerivation rec {
   pname = "stress-ng";
-  version = "0.11.14";
+  version = "0.12.11";
 
   src = fetchurl {
     url = "https://kernel.ubuntu.com/~cking/tarballs/${pname}/${pname}-${version}.tar.xz";
-    sha256 = "0sqka2ns9xqma9wa67in4vrd15q0rz62gblmzniq5i4xppykc55j";
+    sha256 = "sha256-lxOTB1Mhwkw9V2ms+rtwWRHR9BHO1ZN7fP6lhSjBtOY=";
   };
 
   postPatch = ''
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
 
   # All platforms inputs then Linux-only ones
   buildInputs = [ judy libbsd libgcrypt zlib ]
-    ++ stdenv.lib.optionals stdenv.hostPlatform.isLinux [
+    ++ lib.optionals stdenv.hostPlatform.isLinux [
       attr keyutils libaio libapparmor libcap lksctp-tools
     ];
 
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
     "BASHDIR=${placeholder "out"}/share/bash-completion/completions"
   ];
 
-  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.hostPlatform.isMusl "-D_LINUX_SYSINFO_H=1";
+  NIX_CFLAGS_COMPILE = 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
@@ -36,7 +36,7 @@ stdenv.mkDerivation rec {
   # mystery, though. :-(
   enableParallelBuilding = (!stdenv.isi686);
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Stress test a computer system";
     longDescription = ''
       stress-ng will stress test a computer system in various selectable ways. It
diff --git a/pkgs/tools/system/stress/default.nix b/pkgs/tools/system/stress/default.nix
index 1595e8347e1..33fbd15c5e6 100644
--- a/pkgs/tools/system/stress/default.nix
+++ b/pkgs/tools/system/stress/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchurl }:
+{ lib, 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; {
+  meta = with 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/pkgs/tools/system/stressapptest/default.nix b/pkgs/tools/system/stressapptest/default.nix
new file mode 100644
index 00000000000..9b7eb0a6f3e
--- /dev/null
+++ b/pkgs/tools/system/stressapptest/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libaio
+}:
+
+stdenv.mkDerivation rec {
+  pname = "stressapptest";
+  version = "1.0.9";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1qzj6h6adx042rb9aiz916jna269whibvj5ys4p5nwdp17fqh922";
+  };
+
+  buildInputs = [ libaio ];
+
+  meta = with lib; {
+    description = "Userspace memory and IO stress test tool";
+    homepage = "https://github.com/stressapptest/stressapptest";
+    license = with licenses; [ asl20 ];
+    maintainers = with lib.maintainers; [ fab ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/system/suid-chroot/default.nix b/pkgs/tools/system/suid-chroot/default.nix
index 9697748e056..e12b0d82861 100644
--- a/pkgs/tools/system/suid-chroot/default.nix
+++ b/pkgs/tools/system/suid-chroot/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "suid-chroot";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
     sed -i -e '/chmod u+s/d' Makefile
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Setuid-safe wrapper for chroot";
     license = licenses.gpl2Plus;
     platforms = with platforms; unix;
diff --git a/pkgs/tools/system/supervise/default.nix b/pkgs/tools/system/supervise/default.nix
index cbf96818f48..3d69faf7bd4 100644
--- a/pkgs/tools/system/supervise/default.nix
+++ b/pkgs/tools/system/supervise/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchzip }:
+{ lib, stdenv, fetchzip }:
 
 stdenv.mkDerivation rec {
 
@@ -10,11 +10,11 @@ stdenv.mkDerivation rec {
     sha256 = "0jk6q2f67pfs18ah040lmsbvbrnjap7w04jjddsfn1j5bcrvs13x";
   };
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = with lib.maintainers; [ catern ];
   };
 }
diff --git a/pkgs/tools/system/symlinks/default.nix b/pkgs/tools/system/symlinks/default.nix
index 93a6bbf0c75..ad275a2d447 100644
--- a/pkgs/tools/system/symlinks/default.nix
+++ b/pkgs/tools/system/symlinks/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv }:
+{ fetchurl, lib, stdenv }:
 
 stdenv.mkDerivation rec {
   pname = "symlinks";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
     cp symlinks.8 $out/share/man/man8
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Find and remedy problematic symbolic links on a system";
     homepage = "https://github.com/brandt/symlinks";
     license = licenses.mit;
diff --git a/pkgs/tools/system/syslog-ng-incubator/default.nix b/pkgs/tools/system/syslog-ng-incubator/default.nix
index 5d802dbed7e..0f8db091d61 100644
--- a/pkgs/tools/system/syslog-ng-incubator/default.nix
+++ b/pkgs/tools/system/syslog-ng-incubator/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, glib, syslogng
-, eventlog, perl, python, yacc, protobufc, libivykis, libcap, czmq
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, glib, syslogng
+, eventlog, perl, python, bison, protobufc, libivykis, libcap, czmq
 }:
 
 stdenv.mkDerivation rec {
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
     sha256 = "17y85cqcyfbp882gaii731cvz5bg1s8rgda271jh6kgnrz5rbd4s";
   };
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook yacc ];
+  nativeBuildInputs = [ pkg-config autoreconfHook bison ];
 
   buildInputs = [
     glib syslogng eventlog perl python protobufc libivykis libcap czmq
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
     "--with-module-dir=$(out)/lib/syslog-ng"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/balabit/syslog-ng-incubator";
     description = "A collection of tools and modules for syslog-ng";
     license = licenses.gpl2;
diff --git a/pkgs/tools/system/syslog-ng/default.nix b/pkgs/tools/system/syslog-ng/default.nix
index eeb2a99740e..41da0b99fd9 100644
--- a/pkgs/tools/system/syslog-ng/default.nix
+++ b/pkgs/tools/system/syslog-ng/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, openssl, libcap, curl, which
-, eventlog, pkgconfig, glib, python, systemd, perl
+{ lib, stdenv, fetchurl, openssl, libcap, curl, which
+, eventlog, pkg-config, glib, python, systemd, perl
 , riemann_c_client, protobufc, pcre, libnet
 , json_c, libuuid, libivykis, mongoc, rabbitmq-c
 , libesmtp
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
     sha256 = "1s56q8k69sdrqsh3y9lr4di01fqw7xb49wr0dz75jmz084yg8kmg";
   };
 
-  nativeBuildInputs = [ pkgconfig which ];
+  nativeBuildInputs = [ pkg-config which ];
 
   buildInputs = [
     libcap
@@ -54,7 +54,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.syslog-ng.com";
     description = "Next-generation syslogd with advanced networking and filtering capabilities";
     license = licenses.gpl2;
diff --git a/pkgs/tools/system/systemd-journal2gelf/default.nix b/pkgs/tools/system/systemd-journal2gelf/default.nix
index 3f23624071f..62a7c9d8aea 100644
--- a/pkgs/tools/system/systemd-journal2gelf/default.nix
+++ b/pkgs/tools/system/systemd-journal2gelf/default.nix
@@ -1,20 +1,20 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "SystemdJournal2Gelf-unstable";
-  version = "20190702";
+  version = "20200813";
 
   src = fetchFromGitHub {
-    rev = "b1aa5ff31307d11a3c9b4dd08c3cd6230d935ec5";
+    rev = "d389dc8583b752cbd37c389a55a6c82200e47394";
     owner = "parse-nl";
     repo = "SystemdJournal2Gelf";
-    sha256 = "13jyh34wprjixinmh6l7wj7lr1f6qy6nrjcf8l29a74mczbphnvv";
+    sha256 = "0p38r5kdfcn6n2d44dygrs5xgv51s5qlsfhzzwn16r3n6x91s62b";
     fetchSubmodules = true;
   };
 
   goPackagePath = "github.com/parse-nl/SystemdJournal2Gelf";
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
diff --git a/pkgs/tools/system/taskspooler/default.nix b/pkgs/tools/system/taskspooler/default.nix
new file mode 100644
index 00000000000..9899a9fb3f6
--- /dev/null
+++ b/pkgs/tools/system/taskspooler/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchurl, makeWrapper, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "taskspooler";
+  version = "1.0.1";
+
+  src = fetchurl {
+    url = "https://vicerveza.homeunix.net/%7Eviric/wsgi-bin/hgweb.wsgi/ts/archive/7cf9a8bda6d3.tar.gz";
+    sha256 = "11i21s8sdmjl4gy5f3dyfsxsmg1japgs4r5ym0b3jdyp99xhpbl1";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "PREFIX?=/usr/local" "PREFIX=$out"
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/ts \
+      --set-default TS_SLOTS "$(${coreutils}/bin/nproc --all)"
+  '';
+
+  meta = with lib; {
+    description = "Simple single node task scheduler";
+    license = licenses.gpl2Plus;
+    homepage = "https://vicerveza.homeunix.net/~viric/wsgi-bin/hgweb.wsgi/ts";
+    platforms = platforms.unix;
+    maintainers = [ maintainers.sheepforce ];
+  };
+}
diff --git a/pkgs/tools/system/testdisk/default.nix b/pkgs/tools/system/testdisk/default.nix
index 223d1102e0d..10cbed47068 100644
--- a/pkgs/tools/system/testdisk/default.nix
+++ b/pkgs/tools/system/testdisk/default.nix
@@ -1,9 +1,9 @@
 { mkDerivation
-, stdenv
+, lib, stdenv
 , fetchurl
 , ncurses
 , libuuid
-, pkgconfig
+, pkg-config
 , libjpeg
 , zlib
 , libewf
@@ -35,18 +35,18 @@ assert enableQt -> qwt != null;
     zlib
     libewf
   ]
-  ++ stdenv.lib.optional enableNtfs ntfs3g
-  ++ stdenv.lib.optional enableExtFs e2fsprogs
-  ++ stdenv.lib.optionals enableQt [ qtbase qttools qwt ];
+  ++ lib.optional enableNtfs ntfs3g
+  ++ lib.optional enableExtFs e2fsprogs
+  ++ lib.optionals enableQt [ qtbase qttools qwt ];
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
 
   NIX_CFLAGS_COMPILE="-Wno-unused";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.cgsecurity.org/wiki/Main_Page";
     downloadPage = "https://www.cgsecurity.org/wiki/TestDisk_Download";
-    description = "Testdisk / Photorec - Data recovery utilities";
+    description = "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
@@ -61,8 +61,8 @@ assert enableQt -> qwt != null;
       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;
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.all;
     maintainers = with maintainers; [ fgaz eelco ];
   };
 }
diff --git a/pkgs/tools/system/thermald/default.nix b/pkgs/tools/system/thermald/default.nix
index c0a94457e6a..4d2ca811837 100644
--- a/pkgs/tools/system/thermald/default.nix
+++ b/pkgs/tools/system/thermald/default.nix
@@ -1,42 +1,73 @@
-{ stdenv, fetchFromGitHub, autoconf, automake, libtool
-, pkgconfig, dbus, dbus-glib, libxml2, autoconf-archive }:
+{ autoconf
+, autoconf-archive
+, automake
+, dbus
+, dbus-glib
+, docbook_xml_dtd_412
+, docbook-xsl-nons
+, fetchFromGitHub
+, gtk-doc
+, libevdev
+, libtool
+, libxml2
+, xz
+, pkg-config
+, lib, stdenv
+, upower
+}:
 
 stdenv.mkDerivation rec {
   pname = "thermald";
-  version = "2.2";
+  version = "2.4.3";
+
+  outputs = [ "out" "devdoc" ];
 
   src = fetchFromGitHub {
     owner = "intel";
     repo = "thermal_daemon";
     rev = "v${version}";
-    sha256 = "1nrhv3bypyc48h9smj5cpq63rawm6vqyg3cwkhpz69rgjnf1283m";
+    sha256 = "sha256-CPrk2r3C4WG+y3KzWf6xWhfNdDgEigki62iAXu+DccU=";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ autoconf automake libtool dbus dbus-glib libxml2 autoconf-archive ];
-
-  patchPhase = ''sed -e 's/upstartconfdir = \/etc\/init/upstartconfdir = $(out)\/etc\/init/' -i data/Makefile.am'';
+  nativeBuildInputs = [
+    autoconf
+    autoconf-archive
+    automake
+    docbook-xsl-nons
+    docbook_xml_dtd_412
+    gtk-doc
+    libtool
+    pkg-config
+  ];
 
-  preConfigure = ''
-    export PKG_CONFIG_PATH="${dbus.dev}/lib/pkgconfig:$PKG_CONFIG_PATH"
-    ./autogen.sh
-  '';
+  buildInputs = [
+    dbus
+    dbus-glib
+    libevdev
+    libxml2
+    xz
+    upower
+  ];
 
   configureFlags = [
     "--sysconfdir=${placeholder "out"}/etc"
     "--localstatedir=/var"
+    "--enable-gtk-doc"
     "--with-dbus-sys-dir=${placeholder "out"}/share/dbus-1/system.d"
     "--with-systemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
   ];
 
+  preConfigure = "NO_CONFIGURE=1 ./autogen.sh";
+
   postInstall = ''
     cp ./data/thermal-conf.xml $out/etc/thermald/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Thermal Daemon";
     homepage = "https://01.org/linux-thermal-daemon";
-    license = licenses.gpl2;
+    changelog = "https://github.com/intel/thermal_daemon/blob/master/README.txt";
+    license = licenses.gpl2Plus;
     platforms = [ "x86_64-linux" "i686-linux" ];
     maintainers = with maintainers; [ abbradar ];
   };
diff --git a/pkgs/tools/system/thinkfan/default.nix b/pkgs/tools/system/thinkfan/default.nix
index 4edcfb63fe5..a53ef4ae9f8 100644
--- a/pkgs/tools/system/thinkfan/default.nix
+++ b/pkgs/tools/system/thinkfan/default.nix
@@ -1,46 +1,59 @@
-{ stdenv, fetchFromGitHub, cmake, libyamlcpp, pkgconfig
-, smartSupport ? false, libatasmart }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, libyamlcpp
+, pkg-config
+, procps
+, coreutils
+, smartSupport ? false, libatasmart
+}:
 
 stdenv.mkDerivation rec {
   pname = "thinkfan";
-  version = "1.1";
+  version = "1.2.2";
 
   src = fetchFromGitHub {
     owner = "vmatare";
     repo = "thinkfan";
     rev = version;
-    sha256 = "1fxd1w3z65glw6y04myn7ihgswkx6sqnkky159mik4n96pfrsvr5";
+    sha256 = "01l1pnj1cgy3dwgyys2s5iqzyv6kk47vlpy09qjafk8py21ijik3";
   };
 
+  postPatch = ''
+    # fix hardcoded install path
+    substituteInPlace CMakeLists.txt --replace /etc $out/etc
+
+    # fix command paths in unit files
+    for unit in rcscripts/systemd/*; do
+      substituteInPlace "$unit" \
+        --replace /bin/kill ${procps}/bin/kill \
+        --replace /usr/bin/pkill ${procps}/bin/pkill \
+        --replace /usr/bin/sleep ${coreutils}/bin/sleep
+    done
+  '';
+
   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;
+    # force install unit files
+    "-DSYSTEMD_FOUND=ON"
+  ] ++ lib.optional smartSupport "-DUSE_ATASMART=ON";
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ libyamlcpp ] ++ lib.optional smartSupport libatasmart;
+
+  meta = {
+    description = "A simple, lightweight fan control program";
+    longDescription = ''
+      Thinkfan is 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 = lib.licenses.gpl3Plus;
     homepage = "https://github.com/vmatare/thinkfan";
-    maintainers = with maintainers; [ domenkozar ];
-    platforms = platforms.linux;
+    maintainers = with lib.maintainers; [ domenkozar rnhmjoj ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/system/throttled/default.nix b/pkgs/tools/system/throttled/default.nix
index 71bb6dfb357..9b92635d1d7 100644
--- a/pkgs/tools/system/throttled/default.nix
+++ b/pkgs/tools/system/throttled/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchFromGitHub, python3Packages }:
+{ lib, stdenv, fetchFromGitHub, python3Packages }:
 
 stdenv.mkDerivation rec {
   pname = "throttled";
-  version = "0.7";
+  version = "0.8";
 
   src = fetchFromGitHub {
     owner = "erpalma";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1y1sczvj2qc8ml9i1rdzr8hklvci9bdphm3mmri2ncaqys8wdbh4";
+    sha256 = "0qw124gdgjqij3xhgg8j1mdsg6j0xg340as5qf8hd3gwc38sqi9x";
   };
 
   nativeBuildInputs = [ python3Packages.wrapPython ];
@@ -31,9 +31,9 @@ stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  postFixup = ''wrapPythonPrograms'';
+  postFixup = "wrapPythonPrograms";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Fix for Intel CPU throttling issues";
     homepage = "https://github.com/erpalma/throttled";
     license = licenses.mit;
diff --git a/pkgs/tools/system/tm/default.nix b/pkgs/tools/system/tm/default.nix
index 390eae4de50..19ade9b929c 100644
--- a/pkgs/tools/system/tm/default.nix
+++ b/pkgs/tools/system/tm/default.nix
@@ -1,26 +1,28 @@
-{stdenv, fetchurl}:
+{ lib
+, stdenv
+, fetchurl
+}:
 
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
+  pname = "tm";
+  version = "0.4.1";
 
-  name = "tm-0.4.1";
+  src = fetchurl {
+    url = "https://vicerveza.homeunix.net/~viric/soft/tm/tm-${version}.tar.gz";
+    sha256 = "3b389bc03b6964ad5ffa57a344b891fdbcf7c9b2604adda723a863f83657c4a0";
+  };
 
-  installPhase=''make install "PREFIX=$out"'';
+  makeFlags = [ "PREFIX=$(out)" ];
 
-  patchPhase = ''
+  postPatch = ''
     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";
+  meta = with lib; {
     description = "Terminal mixer - multiplexer for the i/o of terminal applications";
-    license = licenses.gpl2;
+    homepage = "http://vicerveza.homeunix.net/~viric/soft/tm";
+    license = licenses.gpl2Plus;
     maintainers = with maintainers; [ viric ];
     platforms = platforms.all;
   };
-
 }
diff --git a/pkgs/tools/system/tre-command/default.nix b/pkgs/tools/system/tre-command/default.nix
index d0f81414741..85b4f9fe2ac 100644
--- a/pkgs/tools/system/tre-command/default.nix
+++ b/pkgs/tools/system/tre-command/default.nix
@@ -1,17 +1,17 @@
-{ rustPlatform, fetchFromGitHub, stdenv, installShellFiles }:
+{ rustPlatform, fetchFromGitHub, lib, installShellFiles }:
 
 rustPlatform.buildRustPackage rec {
   pname = "tre-command";
-  version = "0.3.2";
+  version = "0.3.6";
 
   src = fetchFromGitHub {
     owner = "dduan";
     repo = "tre";
     rev = "v${version}";
-    sha256 = "1kb8jwmjhlp9bk08rb6gq3j810cv9bidm28sa417vyykp9a8p2ky";
+    sha256 = "1r84xzv3p0ml3wac2j7j5fkm7i93v2xvadb8f8al5wi57q39irj7";
   };
 
-  cargoSha256 = "0cqkpvq8b2vnqpkd819cdgh4fqr9yns337fgzah4m40ygs25n9iv";
+  cargoSha256 = "1f7yhnbgccqmz8hpc1xdv97j53far6d5p5gqvq6xxaqq9irf9bgj";
 
   nativeBuildInputs = [ installShellFiles ];
 
@@ -19,7 +19,7 @@ rustPlatform.buildRustPackage rec {
     installManPage manual/tre.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tree command, improved";
     homepage = "https://github.com/dduan/tre";
     license = licenses.mit;
diff --git a/pkgs/tools/system/tree/default.nix b/pkgs/tools/system/tree/default.nix
index 24d11a9c0ee..ab76de74762 100644
--- a/pkgs/tools/system/tree/default.nix
+++ b/pkgs/tools/system/tree/default.nix
@@ -1,8 +1,6 @@
-{ stdenv, fetchurl }:
+{ lib, 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.
@@ -23,9 +21,9 @@ let
     '' else
     ""; # use linux flags by default
 in
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "tree";
-  inherit version;
+  version = "1.8.0";
 
   src = fetchurl {
     url = "http://mama.indstate.edu/users/ice/tree/src/tree-${version}.tgz";
@@ -45,7 +43,7 @@ stdenv.mkDerivation {
   meta = {
     homepage = "http://mama.indstate.edu/users/ice/tree/";
     description = "Command to produce a depth indented directory listing";
-    license = stdenv.lib.licenses.gpl2;
+    license = lib.licenses.gpl2;
 
     longDescription = ''
       Tree is a recursive directory listing command that produces a
@@ -53,7 +51,7 @@ stdenv.mkDerivation {
       the LS_COLORS environment variable is set and output is to tty.
     '';
 
-    platforms = stdenv.lib.platforms.all;
-    maintainers = [stdenv.lib.maintainers.peti];
+    platforms = lib.platforms.all;
+    maintainers = [lib.maintainers.peti];
   };
 }
diff --git a/pkgs/tools/system/ts/default.nix b/pkgs/tools/system/ts/default.nix
index 4046b363811..b954b1adc01 100644
--- a/pkgs/tools/system/ts/default.nix
+++ b/pkgs/tools/system/ts/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl
+{ lib, stdenv, fetchurl
 , sendmailPath ? "/run/wrappers/bin/sendmail"
 }:
 
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
     sha256 = "15dkzczx10fhl0zs9bmcgkxfbwq2znc7bpscljm4rchbzx7y6lsg";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://vicerveza.homeunix.net/~viric/soft/ts";
     description = "Task spooler - batch queue";
     license = licenses.gpl2;
diff --git a/pkgs/tools/system/tuptime/default.nix b/pkgs/tools/system/tuptime/default.nix
index abfc8ae5ac8..0d3b6f4d6b8 100644
--- a/pkgs/tools/system/tuptime/default.nix
+++ b/pkgs/tools/system/tuptime/default.nix
@@ -1,16 +1,16 @@
-{ stdenv, fetchFromGitHub
+{ lib, stdenv, fetchFromGitHub
 , makeWrapper, installShellFiles
 , python3, sqlite }:
 
 stdenv.mkDerivation rec {
   pname = "tuptime";
-  version = "5.0.0";
+  version = "5.0.2";
 
   src = fetchFromGitHub {
     owner = "rfrail3";
     repo = "tuptime";
     rev = version;
-    sha256 = "0izps85p8pxidfrzp7l4hp221fx3dcgapapsix1zavq6jrsl2qyh";
+    sha256 = "sha256-2Q1czKvwdVq+2+64k4SOghw05CUlT5HdZpvKMRbGdDY=";
   };
 
   nativeBuildInputs = [ makeWrapper installShellFiles ];
@@ -31,13 +31,13 @@ stdenv.mkDerivation rec {
 
   preFixup = ''
     wrapProgram $out/share/tuptime/db-tuptime-migrate-4.0-to-5.0.sh \
-      --prefix PATH : "${stdenv.lib.makeBinPath [ sqlite ]}"
+      --prefix PATH : "${lib.makeBinPath [ sqlite ]}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Total uptime & downtime statistics utility";
     homepage = "https://github.com/rfrail3/tuptime";
-    license = licenses.gpl2;
+    license = licenses.gpl2Plus;
     platforms = platforms.all;
     maintainers = [ maintainers.evils ];
   };
diff --git a/pkgs/tools/system/uefitool/common.nix b/pkgs/tools/system/uefitool/common.nix
index 7d5ee82dcf9..7b9c8f2e57d 100644
--- a/pkgs/tools/system/uefitool/common.nix
+++ b/pkgs/tools/system/uefitool/common.nix
@@ -20,8 +20,10 @@ mkDerivation rec {
   buildInputs = [ qtbase ];
   nativeBuildInputs = [ qmake cmake zip ];
 
-  configurePhase = ":";
-  buildPhase = "bash unixbuild.sh";
+  dontConfigure = true;
+  buildPhase = ''
+    bash unixbuild.sh
+  '';
 
   installPhase = ''
     mkdir -p "$out"/bin
diff --git a/pkgs/tools/system/uefitool/variants.nix b/pkgs/tools/system/uefitool/variants.nix
index 470c8a0ca4d..0e8d7285aab 100644
--- a/pkgs/tools/system/uefitool/variants.nix
+++ b/pkgs/tools/system/uefitool/variants.nix
@@ -3,8 +3,8 @@ let
   common = opts: libsForQt5.callPackage (import ./common.nix opts) {};
 in rec {
   new-engine = common rec {
-    version = "A57";
-    sha256 = "0algfdlxfjs582hsqmagbcmw06p8qlh0k5xczfkscs3prdn2vm7n";
+    version = "A58";
+    sha256 = "131hkyr07fg7rnr938yyj0gk528x3402dhisav221c27v84zb7pn";
     installFiles = [ "UEFITool/UEFITool" "UEFIFind/UEFIFind" "UEFIExtract/UEFIExtract" ];
   };
   old-engine = common rec {
diff --git a/pkgs/tools/system/undaemonize/default.nix b/pkgs/tools/system/undaemonize/default.nix
index e82ee18b831..45e7a8d6d62 100644
--- a/pkgs/tools/system/undaemonize/default.nix
+++ b/pkgs/tools/system/undaemonize/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation {
   name = "undaemonize-2017-07-11";
@@ -14,9 +14,9 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.canndrew ];
+    platforms = lib.platforms.linux;
   };
 }
 
diff --git a/pkgs/tools/system/uptimed/default.nix b/pkgs/tools/system/uptimed/default.nix
index e9224977542..5d0d49f198e 100644
--- a/pkgs/tools/system/uptimed/default.nix
+++ b/pkgs/tools/system/uptimed/default.nix
@@ -1,11 +1,11 @@
-{ stdenv, fetchFromGitHub, autoreconfHook }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   pname = "uptimed";
-  version = "0.4.2";
+  version = "0.4.3";
 
   src = fetchFromGitHub {
-    sha256 = "0wnnpjfxnycigqj6hag0n6p5piss8cv40y9jda72d9s4df5n91z8";
+    sha256 = "sha256-X/LnH+EWjXlw8RktfL4ckAUmP2DPV1qlb6Ii4N985cU=";
     rev = "v${version}";
     repo = "uptimed";
     owner = "rpodgorny";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ autoreconfHook ];
   patches = [ ./no-var-spool-install.patch ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Uptime record daemon";
     longDescription = ''
       An uptime record daemon keeping track of the highest uptimes a computer
@@ -23,8 +23,8 @@ stdenv.mkDerivation rec {
       which can also easily be used to show your records on a web page.
     '';
     homepage = "https://github.com/rpodgorny/uptimed/";
-    license = licenses.gpl2;
+    license = with licenses; [ gpl2Only lgpl21Plus ];
+    maintainers = with maintainers; [ ];
     platforms = platforms.linux;
   };
-
 }
diff --git a/pkgs/tools/system/uroboros/default.nix b/pkgs/tools/system/uroboros/default.nix
new file mode 100644
index 00000000000..7f25c70c297
--- /dev/null
+++ b/pkgs/tools/system/uroboros/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "uroboros";
+  version = "20210304-${lib.strings.substring 0 7 rev}";
+  rev = "9bed95bb4cc44cfd043e8ac192e788df379c7a44";
+
+  src = fetchFromGitHub {
+    owner = "evilsocket";
+    repo = pname;
+    inherit rev;
+    sha256 = "1a1bc2za2ppb7j7ibhykgxwivwmx7yq0593255jd55gl60r0l7i4";
+  };
+
+  vendorSha256 = "1ml3x00zzkwj1f76a4wk2y8z4bxjhadf2p1li96qjpnc8fgfd50l";
+
+  meta = with lib; {
+    description = "Tool for monitoring and profiling single processes";
+    homepage = "https://github.com/evilsocket/uroboros";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/pkgs/tools/system/vbetool/default.nix b/pkgs/tools/system/vbetool/default.nix
index dc2ec24e594..ebdeae60c38 100644
--- a/pkgs/tools/system/vbetool/default.nix
+++ b/pkgs/tools/system/vbetool/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pciutils, libx86, zlib }:
+{ lib, stdenv, fetchurl, pciutils, libx86, zlib }:
 
 stdenv.mkDerivation rec {
   pname = "vbetool";
@@ -17,9 +17,9 @@ stdenv.mkDerivation rec {
 
   configureFlags = [ "LDFLAGS=-lpci" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Video BIOS execution tool";
-    homepage = "http://www.codon.org.uk/~mjg59/vbetool/";
+    homepage = "https://www.codon.org.uk/~mjg59/vbetool/";
     maintainers = [ maintainers.raskin ];
     platforms = platforms.linux;
     license = licenses.gpl2;
diff --git a/pkgs/tools/system/vboot_reference/default.nix b/pkgs/tools/system/vboot_reference/default.nix
index 1391a2a5ed2..b4b92b8f90f 100644
--- a/pkgs/tools/system/vboot_reference/default.nix
+++ b/pkgs/tools/system/vboot_reference/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitiles, pkgconfig, libuuid, openssl, libyaml, lzma }:
+{ lib, stdenv, fetchFromGitiles, pkg-config, libuuid, openssl, libyaml, xz }:
 
 stdenv.mkDerivation rec {
   version = "20180311";
@@ -12,8 +12,8 @@ stdenv.mkDerivation rec {
     sha256 = "1zja4ma6flch08h5j2l1hqnxmw2xwylidnddxxd5y2x05dai9ddj";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ openssl libuuid libyaml lzma ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl libuuid libyaml xz ];
 
   enableParallelBuilding = true;
 
@@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
     cp -r tests/devkeys* $out/share/vboot/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Chrome OS partitioning and kernel signing tools";
     license = licenses.bsd3;
     platforms = platforms.linux;
diff --git a/pkgs/tools/system/which/default.nix b/pkgs/tools/system/which/default.nix
index 79a50e43ed8..f4c871d5af0 100644
--- a/pkgs/tools/system/which/default.nix
+++ b/pkgs/tools/system/which/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "which-2.21";
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "1bgafvy3ypbhhfznwjv1lxmd6mci3x1byilnnkc7gcr486wlb8pl";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.gnu.org/software/which/";
     description = "Shows the full path of (shell) commands";
     platforms = platforms.all;
diff --git a/pkgs/tools/system/wslu/default.nix b/pkgs/tools/system/wslu/default.nix
new file mode 100644
index 00000000000..cab427e1657
--- /dev/null
+++ b/pkgs/tools/system/wslu/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "wslu";
+  version = "3.2.3";
+
+  src = fetchFromGitHub {
+    owner = "wslutilities";
+    repo = pname;
+    rev = "v${version}";
+    sha512 = "2mkvdl65hnwflmi635ngmsm1aqsablz2gypn3a1adby1mwwdc57xym8kkg5359g3mvksac6n43ji2z48lfpvlay64z793q2v0z6by02";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A collection of utilities for Windows 10 Linux Subsystems";
+    homepage = "https://github.com/wslutilities/wslu";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ jamiemagee ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/system/wsmancli/default.nix b/pkgs/tools/system/wsmancli/default.nix
index 79fb92d5bb2..ac6a561bb0a 100644
--- a/pkgs/tools/system/wsmancli/default.nix
+++ b/pkgs/tools/system/wsmancli/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
 , openssl, openwsman }:
 
 stdenv.mkDerivation rec {
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
     sha256 = "0a67fz9lj7xkyfqim6ai9kj7v6hzx94r1bg0g0l5dymgng648b9j";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
   buildInputs = [ openwsman openssl ];
 
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
     touch AUTHORS NEWS README
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Openwsman command-line client";
     longDescription = ''
       Openwsman provides a command-line tool, wsman, to perform basic
@@ -31,6 +31,5 @@ stdenv.mkDerivation rec {
     '';
     downloadPage = "https://github.com/Openwsman/wsmancli/releases";
     inherit (openwsman.meta) homepage license maintainers platforms;
-    inherit version;
   };
 }
diff --git a/pkgs/tools/system/yeshup/default.nix b/pkgs/tools/system/yeshup/default.nix
index 3242eeaeebc..113d17b09b5 100644
--- a/pkgs/tools/system/yeshup/default.nix
+++ b/pkgs/tools/system/yeshup/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "yeshup";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
     cp -v yeshup $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/RhysU/yeshup";
     platforms = platforms.linux;
     license = licenses.cc-by-sa-30; # From Stackoverflow answer
diff --git a/pkgs/tools/system/ytop/default.nix b/pkgs/tools/system/ytop/default.nix
deleted file mode 100644
index 64c3bf93aaa..00000000000
--- a/pkgs/tools/system/ytop/default.nix
+++ /dev/null
@@ -1,27 +0,0 @@
-{ stdenv, rustPlatform, fetchFromGitHub, IOKit }:
-
-assert stdenv.isDarwin -> IOKit != null;
-
-rustPlatform.buildRustPackage rec {
-  pname = "ytop";
-  version = "0.6.2";
-
-  src = fetchFromGitHub {
-    owner = "cjbassi";
-    repo = pname;
-    rev = version;
-    sha256 = "02cpn5257yrmbakx3mlqs97kfambbn9ljb60jbqr1b9w24kd6zgf";
-  };
-
-  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ IOKit ];
-
-  cargoSha256 = "0alqzy9gbj9m4l7xj1jsrnl09pv6z7c73gq787cqwn0gj93aaj19";
-
-  meta = with stdenv.lib; {
-    description = "A TUI system monitor written in Rust";
-    homepage = "https://github.com/cjbassi/ytop";
-    license = licenses.mit;
-    maintainers = with maintainers; [ sikmir ];
-    platforms = platforms.unix;
-  };
-}
diff --git a/pkgs/tools/system/zenith/default.nix b/pkgs/tools/system/zenith/default.nix
index 6e3024a3f7d..1e36614c427 100644
--- a/pkgs/tools/system/zenith/default.nix
+++ b/pkgs/tools/system/zenith/default.nix
@@ -1,26 +1,42 @@
-{ stdenv, rustPlatform, fetchFromGitHub, IOKit }:
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, IOKit
+, nvidiaSupport ? false
+, makeWrapper
+}:
 
 rustPlatform.buildRustPackage rec {
   pname = "zenith";
-  version = "0.10.0";
+  version = "0.12.0";
 
   src = fetchFromGitHub {
     owner = "bvaisvil";
     repo = pname;
     rev = version;
-    sha256 = "04nd5gq49y1k9xxrc9ll155k9j42ivscjzx405qyyxv7dpgyw131";
+    sha256 = "1bn364rmp0q86rd7vgv4n7x09cdf9m4njcaq92jnk85ni6h147ax";
   };
 
-  cargoSha256 = "0ggpr2skl3d47y771npmbbqb9vga4y4iyry3qn0xj2hg9d7msf4l";
+  cargoBuildFlags = lib.optionals nvidiaSupport [ "--features" "nvidia" ];
+  cargoSha256 = "0c2mk2bcz4qjyqmf11yqhnhy4pqxr77b3c1gvr5jfmjshx4ff7v2";
 
-  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ IOKit ];
+  nativeBuildInputs = lib.optional nvidiaSupport makeWrapper;
+  buildInputs = lib.optionals stdenv.isDarwin [ IOKit ];
 
-  meta = with stdenv.lib; {
-    description = "Sort of like top or htop but with zoom-able charts, network, and disk usage";
+  postInstall = lib.optionalString nvidiaSupport ''
+    wrapProgram $out/bin/zenith \
+      --suffix LD_LIBRARY_PATH : "/run/opengl-driver/lib"
+  '';
+
+  meta = with lib; {
+    description = "Sort of like top or htop but with zoom-able charts, network, and disk usage"
+      + lib.optionalString nvidiaSupport ", and NVIDIA GPU usage";
     homepage = "https://github.com/bvaisvil/zenith";
     license = licenses.mit;
     maintainers = with maintainers; [ bbigras ];
     # doesn't build on aarch64 https://github.com/bvaisvil/zenith/issues/19
+    # see https://github.com/NixOS/nixpkgs/pull/88616
     platforms = platforms.x86;
   };
 }
diff --git a/pkgs/tools/text/a2ps/default.nix b/pkgs/tools/text/a2ps/default.nix
index c29060cb82f..978839ab1fd 100644
--- a/pkgs/tools/text/a2ps/default.nix
+++ b/pkgs/tools/text/a2ps/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, autoconf, bison, libpaper, gperf, file, perl }:
+{ lib, stdenv, fetchurl, fetchpatch, autoconf, bison, libpaper, gperf, file, perl }:
 
 stdenv.mkDerivation rec {
   name = "a2ps-4.14";
@@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ autoconf file bison perl ];
   buildInputs = [ libpaper gperf ];
 
-  meta = with stdenv.lib; {
+  meta = with 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,
diff --git a/pkgs/tools/text/agrep/default.nix b/pkgs/tools/text/agrep/default.nix
index c0816f8ab76..9fe158b426a 100644
--- a/pkgs/tools/text/agrep/default.nix
+++ b/pkgs/tools/text/agrep/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation {
   pname = "agrep";
@@ -13,7 +13,7 @@ stdenv.mkDerivation {
   };
 
   # Related: https://github.com/Wikinaut/agrep/pull/11
-  prePatch = stdenv.lib.optionalString (stdenv.hostPlatform.isMusl || stdenv.isDarwin) ''
+  prePatch = lib.optionalString (stdenv.hostPlatform.isMusl || stdenv.isDarwin) ''
     sed -i '1i#include <sys/stat.h>' checkfil.c newmgrep.c recursiv.c
   '';
   installPhase = ''
@@ -23,7 +23,7 @@ stdenv.mkDerivation {
 
   makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Approximate grep for fast fuzzy string searching";
     homepage = "https://www.tgries.de/agrep/";
     license = licenses.isc;
diff --git a/pkgs/tools/text/aha/default.nix b/pkgs/tools/text/aha/default.nix
index 1a6d65c52cd..4ac07cef7ee 100644
--- a/pkgs/tools/text/aha/default.nix
+++ b/pkgs/tools/text/aha/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
   pname = "aha";
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "ANSI HTML Adapter";
     longDescription = ''
       aha takes ANSI SGR-coloured input and produces W3C-conformant HTML code.
diff --git a/pkgs/tools/text/amber/default.nix b/pkgs/tools/text/amber/default.nix
index 22a18b1cffb..1cd9e74f194 100644
--- a/pkgs/tools/text/amber/default.nix
+++ b/pkgs/tools/text/amber/default.nix
@@ -1,23 +1,23 @@
-{ stdenv, fetchFromGitHub, rustPlatform
-, Security
+{ lib, stdenv, fetchFromGitHub, rustPlatform
+, libiconv, Security
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "amber";
-  version = "0.5.4";
+  version = "0.5.9";
 
   src = fetchFromGitHub {
     owner = "dalance";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0pqz3spb5lmrj7w8hynmah9nrcfjsb1s0bmrr0cng9a9jx8amwzn";
+    sha256 = "sha256-mmgJCD7kJjvpxyagsoe5CSzqIEZcIiYMAMP3axRphv4=";
   };
 
-  cargoSha256 = "1ps70swh96xbfn4hng5krlmwvw2bwrl2liqvx9v9vy6pr86643s6";
+  cargoSha256 = "sha256-opRinhTmhZxpAwHNiVOLXL8boQf09Y1NXrWQ6HWQYQ0=";
 
-  buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A code search-and-replace tool";
     homepage = "https://github.com/dalance/amber";
     license = with licenses; [ mit ];
diff --git a/pkgs/tools/text/angle-grinder/default.nix b/pkgs/tools/text/angle-grinder/default.nix
new file mode 100644
index 00000000000..02235b057d4
--- /dev/null
+++ b/pkgs/tools/text/angle-grinder/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "angle-grinder";
+  version = "0.17.0";
+
+  src = fetchFromGitHub {
+    owner = "rcoh";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-jG3jHFqFOrIT/e5oyLOEckw5C3LIs7amFAa4QDEI/EY=";
+  };
+
+  cargoSha256 = "sha256-Rkex+fnnacV+DCRpX3Zh9J3vGuG4QfFhFezHTs33peY=";
+
+  meta = with lib; {
+    description = "Slice and dice logs on the command line";
+    homepage = "https://github.com/rcoh/angle-grinder";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bbigras ];
+  };
+}
diff --git a/pkgs/tools/text/ansifilter/default.nix b/pkgs/tools/text/ansifilter/default.nix
index 00c8c075ed6..97b06b9a0c7 100644
--- a/pkgs/tools/text/ansifilter/default.nix
+++ b/pkgs/tools/text/ansifilter/default.nix
@@ -1,15 +1,15 @@
-{ fetchurl, stdenv, pkgconfig, boost, lua }:
+{ fetchurl, lib, stdenv, pkg-config, boost, lua }:
 
 stdenv.mkDerivation rec {
   pname = "ansifilter";
-  version = "2.16";
+  version = "2.18";
 
   src = fetchurl {
     url = "http://www.andre-simon.de/zip/ansifilter-${version}.tar.bz2";
-    sha256 = "1wmszcykhaipxa7kxj4ml0lkmd5z7i9ryaachg9jpkhbaaijzkbz";
+    sha256 = "sha256-Zs8BfTakPV9q4gYJzjtYZHSU7mwOQfxoLFmL/859fTk=";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ boost lua ];
 
   postPatch = ''
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
     "conf_dir=/etc/ansifilter"
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tool to convert ANSI to other formats";
     longDescription = ''
       Tool to remove ANSI or convert them to another format
diff --git a/pkgs/tools/text/ascii/default.nix b/pkgs/tools/text/ascii/default.nix
index 94ab5286f8c..f596c8d330d 100644
--- a/pkgs/tools/text/ascii/default.nix
+++ b/pkgs/tools/text/ascii/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "ascii";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
     mkdir -vp "$out/bin" "$out/share/man/man1"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Interactive ASCII name and synonym chart";
     homepage = "http://www.catb.org/~esr/ascii/";
     license = licenses.bsd3;
diff --git a/pkgs/tools/text/asciigraph/default.nix b/pkgs/tools/text/asciigraph/default.nix
new file mode 100644
index 00000000000..27c2a1ff28e
--- /dev/null
+++ b/pkgs/tools/text/asciigraph/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "asciigraph";
+  version = "0.5.2";
+
+  goPackagePath = "github.com/guptarohit/asciigraph";
+
+  src = fetchFromGitHub {
+    owner = "guptarohit";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-iVgJtxt0B6nMA3bieZ1CmZucwLMb5av6Wn5BMDRWfcI=";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/guptarohit/asciigraph";
+    description = "Lightweight ASCII line graph ╭┈╯ command line app";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.mmahut ];
+  };
+}
diff --git a/pkgs/tools/text/bcat/gemset.nix b/pkgs/tools/text/bcat/gemset.nix
index 75de0e5cf38..9471ffae8dd 100644
--- a/pkgs/tools/text/bcat/gemset.nix
+++ b/pkgs/tools/text/bcat/gemset.nix
@@ -20,4 +20,4 @@
     };
     version = "1.6.11";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/text/boxes/default.nix b/pkgs/tools/text/boxes/default.nix
index b9d54d3a9e7..f39349b2fbf 100644
--- a/pkgs/tools/text/boxes/default.nix
+++ b/pkgs/tools/text/boxes/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, bison, flex }:
+{ lib, stdenv, fetchFromGitHub, bison, flex }:
 
 stdenv.mkDerivation rec {
   pname = "boxes";
@@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
                 "GLOBALCONF=${placeholder "out"}/share/boxes/boxes-config"
   '';
 
-  makeFlags = stdenv.lib.optionals stdenv.isDarwin [ "CC=cc" ];
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
 
   installPhase = ''
     install -Dm755 -t $out/bin src/boxes
@@ -33,7 +33,7 @@ stdenv.mkDerivation rec {
     install -Dm644 -t $out/share/man/man1 doc/boxes.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Command line ASCII boxes unlimited!";
     longDescription = ''
       Boxes is a command line filter program that draws ASCII art boxes around
diff --git a/pkgs/tools/text/catdoc/default.nix b/pkgs/tools/text/catdoc/default.nix
index 64ef092f36b..61570a70b7d 100644
--- a/pkgs/tools/text/catdoc/default.nix
+++ b/pkgs/tools/text/catdoc/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch }:
+{ lib, stdenv, fetchurl, fetchpatch }:
 
 stdenv.mkDerivation rec {
   pname = "catdoc";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
 
   configureFlags = [ "--disable-wordview" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "MS-Word/Excel/PowerPoint to text converter";
     platforms = platforms.all;
     license = licenses.gpl2;
diff --git a/pkgs/tools/text/catdocx/default.nix b/pkgs/tools/text/catdocx/default.nix
index f24864f754b..adf78397fcb 100644
--- a/pkgs/tools/text/catdocx/default.nix
+++ b/pkgs/tools/text/catdocx/default.nix
@@ -20,7 +20,7 @@ stdenv.mkDerivation {
     ln -s $out/libexec/catdocx.sh $out/bin/catdocx
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Extracts plain text from docx files";
     homepage = "https://github.com/jncraton/catdocx";
     license = with licenses; [ bsd3 ];
diff --git a/pkgs/tools/text/cconv/default.nix b/pkgs/tools/text/cconv/default.nix
index 8fe400aaab2..e918d620c67 100644
--- a/pkgs/tools/text/cconv/default.nix
+++ b/pkgs/tools/text/cconv/default.nix
@@ -1,21 +1,22 @@
-{ stdenv, fetchurl, autoreconfHook }:
-let version = "0.6.3"; in
-  stdenv.mkDerivation {
+{ lib, stdenv, fetchurl, autoreconfHook, libiconv }:
+
+stdenv.mkDerivation rec {
   pname = "cconv";
-  inherit version;
-  
+  version = "0.6.3";
+
   src = fetchurl {
     url = "https://github.com/xiaoyjy/cconv/archive/v${version}.tar.gz";
     sha256 = "82f46a94829f5a8157d6f686e302ff5710108931973e133d6e19593061b81d84";
   };
 
   nativeBuildInputs = [ autoreconfHook ];
-  
-  meta = with stdenv.lib; {
+  buildInputs = [ libiconv ];
+
+  meta = with lib; {
     description = "A iconv based simplified-traditional chinese conversion tool";
     homepage = "https://github.com/xiaoyjy/cconv";
     license = licenses.mit;
-    platforms = platforms.linux;
+    platforms = platforms.all;
     maintainers = [ maintainers.redfish64 ];
   };
 }
diff --git a/pkgs/tools/text/chars/default.nix b/pkgs/tools/text/chars/default.nix
new file mode 100644
index 00000000000..c8d1b1064ac
--- /dev/null
+++ b/pkgs/tools/text/chars/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv
+, fetchFromGitHub
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "chars";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "antifuchs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1pyda3b6svxzc98d7ggl7v9xd0xhilmpjrnajzh77zcwzq42s17l";
+  };
+
+  cargoSha256 = "0ywywbcnc9jm0cfd6kbq8vl6r5dl16sxn7pwi2k6l0sj75pm1i6h";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "Commandline tool to display information about unicode characters";
+    homepage = "https://github.com/antifuchs/chars";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bbigras ];
+  };
+}
diff --git a/pkgs/tools/text/choose/default.nix b/pkgs/tools/text/choose/default.nix
new file mode 100644
index 00000000000..f5cded1beab
--- /dev/null
+++ b/pkgs/tools/text/choose/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "choose";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "theryangeary";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-QX0tAo1cGPpRhggiAPxsVhKXg6TgaVl1lcp3na7jUNw=";
+  };
+
+  cargoSha256 = "sha256-3pK7y/zC5iZkto5p5Xerlpu3yfN6sB2kjLF2fURlUj0=";
+
+  meta = with lib; {
+    description = "A human-friendly and fast alternative to cut and (sometimes) awk";
+    homepage = "https://github.com/theryangeary/choose";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ sohalt ];
+  };
+}
diff --git a/pkgs/tools/text/chroma/default.nix b/pkgs/tools/text/chroma/default.nix
new file mode 100644
index 00000000000..1b9cbcd3727
--- /dev/null
+++ b/pkgs/tools/text/chroma/default.nix
@@ -0,0 +1,42 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "chroma";
+  version = "0.9.2";
+
+  src = fetchFromGitHub {
+    owner  = "alecthomas";
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "19d7yr6q8kwrm91yyglmw9n7wa861sgi6dbwn8sl6dp55czfwvaq";
+    # populate values otherwise taken care of by goreleaser,
+    # unfortunately these require us to use git. By doing
+    # this in postFetch we can delete .git afterwards and
+    # maintain better reproducibility of the src.
+    leaveDotGit = true;
+    postFetch = ''
+      cd "$out"
+
+      commit="$(git rev-parse HEAD)"
+      date=$(git show -s --format=%aI "$commit")
+
+      substituteInPlace "$out/cmd/chroma/main.go" \
+        --replace 'version = "?"' 'version = "${version}"' \
+        --replace 'commit  = "?"' "commit = \"$commit\"" \
+        --replace 'date    = "?"' "date = \"$date\""
+
+      find "$out" -name .git -print0 | xargs -0 rm -rf
+    '';
+  };
+
+  vendorSha256 = "0y8mp08zccn9qxrsj9j7vambz8dwzsxbbgrlppzam53rg8rpxhrg";
+
+  subPackages = [ "cmd/chroma" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/alecthomas/chroma";
+    description = "A general purpose syntax highlighter in pure Go";
+    license = licenses.mit;
+    maintainers = [ maintainers.sternenseemann ];
+  };
+}
diff --git a/pkgs/tools/text/cmigemo/default.nix b/pkgs/tools/text/cmigemo/default.nix
new file mode 100644
index 00000000000..6787d68991d
--- /dev/null
+++ b/pkgs/tools/text/cmigemo/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, fetchurl, gzip, libiconv, nkf, perl, skk-dicts, which }:
+
+stdenv.mkDerivation {
+  pname = "cmigemo";
+  version = "1.3e";
+
+  src = fetchFromGitHub {
+    owner = "koron";
+    repo = "cmigemo";
+    rev = "5c014a885972c77e67d0d17d367d05017c5873f7";
+    sha256 = "0xrblwhaf70m0knkd5584iahaq84rlk0926bhdsrzmakpw77hils";
+  };
+
+  nativeBuildInputs = [ gzip libiconv nkf perl which ];
+
+  postUnpack = ''
+    cp ${skk-dicts}/share/SKK-JISYO.L source/dict/
+  '';
+
+  patches = [ ./no-http-tool-check.patch ];
+
+  makeFlags = [ "INSTALL=install" ];
+
+  buildPhase = if stdenv.isDarwin then "make osx-all" else "make gcc-all";
+
+  installTargets = [ (if stdenv.isDarwin then "osx-install" else "gcc-install") ];
+
+  meta = with lib; {
+    description = "A tool that supports Japanese incremental search with Romaji";
+    homepage = "https://www.kaoriya.net/software/cmigemo";
+    license = licenses.mit;
+    maintainers = [ maintainers.cohei ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/text/cmigemo/no-http-tool-check.patch b/pkgs/tools/text/cmigemo/no-http-tool-check.patch
new file mode 100644
index 00000000000..518bfa0e617
--- /dev/null
+++ b/pkgs/tools/text/cmigemo/no-http-tool-check.patch
@@ -0,0 +1,23 @@
+diff --git a/configure b/configure
+index 4480261..2fb9b34 100755
+--- a/configure
++++ b/configure
+@@ -28,18 +28,6 @@ do
+   esac
+ done
+ 
+-# Check HTTP access tool
+-if CHECK_COMMAND curl ; then
+-  PROGRAM_HTTP="curl -O"
+-elif CHECK_COMMAND wget ; then
+-  PROGRAM_HTTP="wget"
+-elif CHECK_COMMAND fetch ; then
+-  PROGRAM_HTTP="fetch"
+-else
+-  echo "ERROR: Require one of HTTP access tools (curl, wget or fetch)."
+-  exit 1
+-fi
+-
+ # Check encoding filter
+ if CHECK_COMMAND qkc ; then
+   PROGRAM_ENCODEFILTER="qkc -q -u"
diff --git a/pkgs/tools/text/codesearch/default.nix b/pkgs/tools/text/codesearch/default.nix
index 7f706cf1376..9c3e9fbd840 100644
--- a/pkgs/tools/text/codesearch/default.nix
+++ b/pkgs/tools/text/codesearch/default.nix
@@ -1,9 +1,9 @@
 # This file was generated by go2nix.
-{ stdenv, buildGoPackage, fetchgit }:
+{ lib, buildGoPackage, fetchgit }:
 
 buildGoPackage rec {
   pname = "codesearch";
-  version = "20150717-${stdenv.lib.strings.substring 0 7 rev}";
+  version = "20150717-${lib.strings.substring 0 7 rev}";
   rev = "a45d81b686e85d01f2838439deaf72126ccd5a96";
 
   goPackagePath = "github.com/google/codesearch";
@@ -14,13 +14,11 @@ buildGoPackage rec {
     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;
+    license = [ lib.licenses.bsd3 ];
+    maintainers = [ lib.maintainers.bennofs ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/text/codesearch/deps.nix b/pkgs/tools/text/codesearch/deps.nix
deleted file mode 100644
index 2d1dad70634..00000000000
--- a/pkgs/tools/text/codesearch/deps.nix
+++ /dev/null
@@ -1,3 +0,0 @@
-# This file was generated by go2nix.
-[
-]
diff --git a/pkgs/tools/text/colordiff/default.nix b/pkgs/tools/text/colordiff/default.nix
index c3da9a60555..364d3c6edc4 100644
--- a/pkgs/tools/text/colordiff/default.nix
+++ b/pkgs/tools/text/colordiff/default.nix
@@ -1,26 +1,36 @@
-{ stdenv, fetchurl, perl /*, xmlto */}:
+{ lib, stdenv, fetchFromGitHub, docbook_xml_dtd_412, docbook_xsl, perl, w3m, xmlto }:
 
 stdenv.mkDerivation rec {
-  name = "colordiff-1.0.19";
+  pname = "colordiff";
+  version = "1.0.19";
 
-  src = fetchurl {
-    urls = [
-      "https://www.colordiff.org/${name}.tar.gz"
-      "http://www.colordiff.org/archive/${name}.tar.gz"
-    ];
-    sha256 = "069vzzgs7b44bmfh3ks2psrdb26s1w19gp9w4xxbgi7nhx6w3s26";
+  src = fetchFromGitHub {
+    owner = "daveewart";
+    repo = "colordiff";
+    rev = "v${version}";
+    sha256 = "1v7s1yn0qvn08iwm5js8mxn442392qyr7s9ij506byfd497ag7qk";
   };
 
-  buildInputs = [ perl /* xmlto */ ];
+  nativeBuildInputs = [ docbook_xml_dtd_412 docbook_xsl perl w3m xmlto ];
 
-  dontBuild = 1; # do not build doc yet.
+  buildInputs = [ perl ];
 
-  installPhase = ''make INSTALL_DIR=/bin MAN_DIR=/share/man/man1 DESTDIR="$out" install'';
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace 'TMPDIR=colordiff-''${VERSION}' ""
+  '';
 
-  meta = with stdenv.lib; {
+  installFlags = [
+    "INSTALL_DIR=/bin"
+    "MAN_DIR=/share/man/man1"
+    "DESTDIR=${placeholder "out"}"
+  ];
+
+  meta = with 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;
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/text/coloursum/default.nix b/pkgs/tools/text/coloursum/default.nix
index 38f544496d5..8391b75a67b 100644
--- a/pkgs/tools/text/coloursum/default.nix
+++ b/pkgs/tools/text/coloursum/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
 
 rustPlatform.buildRustPackage rec {
   pname = "coloursum";
@@ -11,11 +11,11 @@ rustPlatform.buildRustPackage rec {
     sha256 = "1piz0l7qdcvjzfykm6rzqc8s1daxp3cj3923v9cmm41bc2v0p5q0";
   };
 
-  cargoSha256 = "1w0q5w0bf1682jvzcml8cgmr9mrgi4if0p63wzchyjav330dp6pk";
+  cargoSha256 = "08l01ivmln9gwabwa1p0gk454qyxlcpnlxx840vys476f4pw7vvf";
 
-  buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
+  buildInputs = lib.optional stdenv.isDarwin Security;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Colourise your checksum output";
     homepage = "https://github.com/ticky/coloursum";
     license = licenses.mit;
diff --git a/pkgs/tools/text/convertlit/default.nix b/pkgs/tools/text/convertlit/default.nix
index a947ef98a68..18dc01c01d0 100644
--- a/pkgs/tools/text/convertlit/default.nix
+++ b/pkgs/tools/text/convertlit/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchzip, libtommath}:
+{lib, stdenv, fetchzip, libtommath}:
 
 stdenv.mkDerivation {
   name = "convertlit-1.8";
@@ -30,7 +30,7 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/text/copyright-update/default.nix b/pkgs/tools/text/copyright-update/default.nix
index ca815f915db..e0318c20a0e 100644
--- a/pkgs/tools/text/copyright-update/default.nix
+++ b/pkgs/tools/text/copyright-update/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, perl }:
+{ lib, stdenv, fetchFromGitHub, perl }:
 
 stdenv.mkDerivation rec {
   pname = "copyright-update";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
 
   installFlags = [ "INSTALL=install" "prefix=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/jaalto/project--copyright-update";
     description = "Updates the copyright information in a set of files";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/text/csvkit/default.nix b/pkgs/tools/text/csvkit/default.nix
index 7a0240fc730..56f5bae3123 100644
--- a/pkgs/tools/text/csvkit/default.nix
+++ b/pkgs/tools/text/csvkit/default.nix
@@ -1,36 +1,37 @@
-{ lib, python3, glibcLocales }:
+{ lib, fetchpatch, python3 }:
 
 python3.pkgs.buildPythonApplication rec {
   pname = "csvkit";
-  version = "1.0.4";
+  version = "1.0.5";
 
   src = python3.pkgs.fetchPypi {
     inherit pname version;
-    sha256 = "1830lb95rh1iyi3drlwxzb6y3pqkii0qiyzd40c1kvhvaf1s6lqk";
+    sha256 = "1ffmbzk4rxnl1yhqfl58v7kvl5m9cbvjm8v7xp4mvr00sgs91lvv";
   };
 
+  patches = [
+    # Fixes a failing dbf related test. Won't be needed on 1.0.6 or later.
+    (fetchpatch {
+      url = "https://github.com/wireservice/csvkit/commit/5f22e664121b13d9ff005a9206873a8f97431dca.patch";
+      sha256 = "1kg00z65x7l6dnm5nfsr5krs8m7mv23hhb1inkaqf5m5fpkpnvv7";
+    })
+  ];
+
   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";
-      };}))
+    agate-sql
     six
+    setuptools
   ];
 
   checkInputs = with python3.pkgs; [
-    glibcLocales nose
+    nose
+    pytestCheckHook
   ];
 
-  checkPhase = ''
-    LC_ALL="en_US.UTF-8" nosetests -e test_csvsql
-  '';
+  pythonImportsCheck = [ "csvkit" ];
 
   meta = with lib; {
     description = "A suite of command-line tools for converting to and working with CSV";
diff --git a/pkgs/tools/text/dadadodo/default.nix b/pkgs/tools/text/dadadodo/default.nix
index 5de8e25e6fb..a70a7efda72 100644
--- a/pkgs/tools/text/dadadodo/default.nix
+++ b/pkgs/tools/text/dadadodo/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "dadadodo";
@@ -9,6 +9,8 @@ stdenv.mkDerivation rec {
     sha256 = "1pzwp3mim58afjrc92yx65mmgr1c834s1v6z4f4gyihwjn8bn3if";
   };
 
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
   installPhase = ''
     mkdir -p $out/bin
     cp dadadodo $out/bin
@@ -16,10 +18,10 @@ stdenv.mkDerivation rec {
 
   hardeningDisable = [ "format" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Markov chain-based text generator";
     homepage = "http://www.jwz.org/dadadodo";
     maintainers = with maintainers; [ pSub ];
-    platforms = with platforms; linux;
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/text/dcs/default.nix b/pkgs/tools/text/dcs/default.nix
new file mode 100644
index 00000000000..511931f0380
--- /dev/null
+++ b/pkgs/tools/text/dcs/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, yuicompressor
+, zopfli
+, stdenv
+}:
+buildGoModule {
+  pname = "dcs";
+  version = "unstable-2021-04-07";
+
+  src = fetchFromGitHub {
+    owner = "Debian";
+    repo = "dcs";
+    rev = "da46accc4d55e9bfde1a6852ac5a9e730fcbbb2c";
+    sha256 = "N+6BXlKn1YTlh0ZdPNWa0nuJNcQtlUIc9TocM8cbzQk=";
+  };
+
+  vendorSha256 = "l2mziuisx0HzuP88rS5M+Wha6lu8P036wJYZlmzjWfs=";
+
+  # Depends on dcs binaries
+  doCheck = false;
+
+  nativeBuildInputs = [
+    yuicompressor
+    zopfli
+  ];
+
+  postBuild = ''
+    make -C static -j$NIX_BUILD_CORES
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/dcs
+    cp -r cmd/dcs-web/templates $out/share/dcs
+    cp -r static $out/share/dcs
+  '';
+
+  meta = with lib; {
+    description = "Debian Code Search";
+    homepage = "https://github.com/Debian/dcs";
+    license = licenses.bsd3;
+    maintainers = teams.determinatesystems.members;
+    broken = stdenv.isAarch64;
+  };
+}
diff --git a/pkgs/tools/text/dfmt/default.nix b/pkgs/tools/text/dfmt/default.nix
new file mode 100644
index 00000000000..16702bb6966
--- /dev/null
+++ b/pkgs/tools/text/dfmt/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, python3
+}:
+
+let
+  inherit (python3.pkgs)
+    buildPythonApplication
+    fetchPypi
+    pythonOlder;
+in
+buildPythonApplication rec {
+  pname = "dfmt";
+  version = "1.2.0";
+  disabled = pythonOlder "3.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "7af6360ca8d556f1cfe82b97f03b8d1ea5a9d6de1fa3018290c844b6566d9d6e";
+  };
+
+  meta = with lib; {
+    description = "Format paragraphs, comments and doc strings";
+    homepage = "https://github.com/dmerejkowsky/dfmt";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ cole-h ];
+  };
+}
diff --git a/pkgs/tools/text/diction/default.nix b/pkgs/tools/text/diction/default.nix
index f43cd94a83e..be486cccf54 100644
--- a/pkgs/tools/text/diction/default.nix
+++ b/pkgs/tools/text/diction/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "diction";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
       characteristics of a document, including sentence length and other
       readability measures.
     '';
-    license = stdenv.lib.licenses.gpl3Plus;
-    platforms = stdenv.lib.platforms.unix;
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/text/diffr/default.nix b/pkgs/tools/text/diffr/default.nix
index 4fa7814ad00..a77a5dc081e 100644
--- a/pkgs/tools/text/diffr/default.nix
+++ b/pkgs/tools/text/diffr/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
 
 rustPlatform.buildRustPackage rec {
   pname = "diffr";
@@ -11,15 +11,15 @@ rustPlatform.buildRustPackage rec {
     sha256 = "18ks5g4bx6iz9hdjxmi6a41ncxpb1hnsscdlddp2gr40k3vgd0pa";
   };
 
-  cargoSha256 = "09yn02985yv40n9y0ipz0jmj7iqhz7l8hd3ry9ib3fyw9pyklnfa";
+  cargoSha256 = "05rfjangmyvmqm0bvl4bcvc7m4zhg66gknh85sxr3bzrlwzacwgw";
 
-  buildInputs = (stdenv.lib.optional stdenv.isDarwin Security);
+  buildInputs = (lib.optional stdenv.isDarwin Security);
 
   preCheck = ''
     export DIFFR_TESTS_BINARY_PATH=$releaseDir/diffr
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Yet another diff highlighting tool";
     homepage = "https://github.com/mookid/diffr";
     license = with licenses; [ mit ];
diff --git a/pkgs/tools/text/diffstat/default.nix b/pkgs/tools/text/diffstat/default.nix
index bed34e30e79..c8ff1e973a5 100644
--- a/pkgs/tools/text/diffstat/default.nix
+++ b/pkgs/tools/text/diffstat/default.nix
@@ -1,17 +1,17 @@
-{ fetchurl, stdenv }:
+{ fetchurl, lib, stdenv }:
 
 stdenv.mkDerivation rec {
-  name = "diffstat-1.63";
+  name = "diffstat-1.64";
 
   src = fetchurl {
     urls = [
       "ftp://ftp.invisible-island.net/diffstat/${name}.tgz"
       "https://invisible-mirror.net/archives/diffstat/${name}.tgz"
     ];
-    sha256 = "0vyw200s5dv1257pmrh6c6fdkmw3slyz5szpqfx916xr04sdbpby";
+    sha256 = "sha256-uK7jjZ0uHQWSbmtVgQqdLC3UB/JNaiZzh1Y6RDbj9/w=";
   };
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/text/diffutils/default.nix b/pkgs/tools/text/diffutils/default.nix
index 6fd69a9ba4c..d95e7ae399d 100644
--- a/pkgs/tools/text/diffutils/default.nix
+++ b/pkgs/tools/text/diffutils/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, xz, coreutils ? null }:
+{ lib, stdenv, fetchurl, xz, coreutils ? null }:
 
 # Note: this package is used for bootstrapping fetchurl, and thus
 # cannot use fetchpatch! All mutable patches (generated by GitHub or
@@ -6,10 +6,11 @@
 # files.
 
 stdenv.mkDerivation rec {
-  name = "diffutils-3.7";
+  pname = "diffutils";
+  version = "3.7";
 
   src = fetchurl {
-    url = "mirror://gnu/diffutils/${name}.tar.xz";
+    url = "mirror://gnu/diffutils/diffutils-${version}.tar.xz";
     sha256 = "09isrg0isjinv8c535nxsi1s86wfdfzml80dbw41dj9x3hiad9xk";
   };
 
@@ -22,10 +23,10 @@ stdenv.mkDerivation rec {
   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";
+    lib.optional (coreutils != null) "PR_PROGRAM=${coreutils}/bin/pr"
+    ++ lib.optional (stdenv.buildPlatform != stdenv.hostPlatform) "gl_cv_func_getopt_gnu=yes";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.gnu.org/software/diffutils/diffutils.html";
     description = "Commands for showing the differences between files (diff, cmp, etc.)";
     license = licenses.gpl3;
diff --git a/pkgs/tools/text/dirdiff/default.nix b/pkgs/tools/text/dirdiff/default.nix
new file mode 100644
index 00000000000..b49df59b29e
--- /dev/null
+++ b/pkgs/tools/text/dirdiff/default.nix
@@ -0,0 +1,59 @@
+{ copyDesktopItems, fetchurl, lib, makeDesktopItem, stdenv, tcl, tk }:
+
+stdenv.mkDerivation rec {
+  pname = "dirdiff";
+  version = "2.1";
+
+  src = fetchurl {
+    url = "https://www.samba.org/ftp/paulus/${pname}-${version}.tar.gz";
+    sha256 = "0lljd8av68j70733yshzzhxjr1lm0vgmbqsm8f02g03qsma3cdyb";
+  };
+
+  nativeBuildInputs = [ copyDesktopItems ];
+  buildInputs = [ tcl tk ];
+
+  # Some light path patching.
+  patches = [ ./dirdiff-2.1-vars.patch ];
+  postPatch = ''
+    for file in dirdiff Makefile; do
+      substituteInPlace "$file" \
+          --subst-var out \
+          --subst-var-by tcl ${tcl} \
+          --subst-var-by tk ${tk}
+    done
+  '';
+
+  # If we don't create the directories ourselves, then 'make install' creates
+  # files named 'bin' and 'lib'.
+  preInstall = ''
+    mkdir -p $out/bin $out/lib
+  '';
+
+  installFlags = [
+    "BINDIR=${placeholder "out"}/bin"
+    "LIBDIR=${placeholder "out"}/lib"
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "dirdiff";
+      exec = "dirdiff";
+      desktopName = "Dirdiff";
+      genericName = "Directory Diff Viewer";
+      comment = "Diff and merge directory trees";
+      categories = "Development;";
+    })
+  ];
+
+  meta = with lib; {
+    description = "Graphical directory tree diff and merge tool";
+    longDescription = ''
+      Dirdiff is a graphical tool for displaying the differences between
+      directory trees and for merging changes from one tree into another.
+    '';
+    homepage = "https://www.samba.org/ftp/paulus/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ khumba ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/text/dirdiff/dirdiff-2.1-vars.patch b/pkgs/tools/text/dirdiff/dirdiff-2.1-vars.patch
new file mode 100644
index 00000000000..4e7aa025754
--- /dev/null
+++ b/pkgs/tools/text/dirdiff/dirdiff-2.1-vars.patch
@@ -0,0 +1,32 @@
+diff '--color=auto' -ru dirdiff-2.1/dirdiff dirdiff-2.1-patched/dirdiff
+--- dirdiff-2.1/dirdiff	2005-04-20 03:09:53.000000000 -0700
++++ dirdiff-2.1-patched/dirdiff	2021-02-14 22:54:09.837692023 -0800
+@@ -1,6 +1,6 @@
+ #!/bin/sh
+ # Tcl ignores the next line \
+-exec wish "$0" -- "${1+$@}"
++exec @tk@/bin/wish "$0" -- "${1+$@}"
+ 
+ # Copyright (C) 1999-2004 Paul Mackerras.  All rights reserved.
+ # This program is free software; it may be used, copied, modified
+@@ -17,7 +17,7 @@
+ set TclExe [info nameofexecutable]
+ set compound_ok [expr {$tcl_version >= 8.4}]
+ 
+-set nofilecmp [catch {load libfilecmp.so.0.0}]
++set nofilecmp [catch {load @out@/lib/libfilecmp.so.0.0}]
+ set rcsflag {}
+ set diffbflag {}
+ set diffBflag {}
+diff '--color=auto' -ru dirdiff-2.1/Makefile dirdiff-2.1-patched/Makefile
+--- dirdiff-2.1/Makefile	2005-04-19 03:22:01.000000000 -0700
++++ dirdiff-2.1-patched/Makefile	2021-02-14 22:54:58.575400923 -0800
+@@ -7,7 +7,7 @@
+ INSTALL=install
+ 
+ # You may need to change the -I arguments depending on your system
+-CFLAGS=-O3 -I/usr/include/tcl8.3/ -I/usr/include/tcl
++CFLAGS=-O3 -I@tcl@/include
+ 
+ all:	libfilecmp.so.0.0
+ 
diff --git a/pkgs/tools/text/discount/default.nix b/pkgs/tools/text/discount/default.nix
index 5a4dfd5de85..264e944028e 100644
--- a/pkgs/tools/text/discount/default.nix
+++ b/pkgs/tools/text/discount/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub }:
 
 stdenv.mkDerivation rec {
-  version = "2.2.6";
+  version = "2.2.7";
   pname = "discount";
 
   src = fetchFromGitHub {
     owner = "Orc";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1y066jkxfas0vdixbqq66j9p00a102sbfgq5gbrblfczqjrmc38w";
+    sha256 = "0p2gznrsvv82zxbajqir8y2ap1ribbgagqg1bzhv3i81p2byhjh7";
   };
 
   patches = ./fix-configure-path.patch;
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Implementation of Markdown markup language in C";
     homepage = "http://www.pell.portland.or.us/~orc/Code/discount/";
     license = licenses.bsd3;
diff --git a/pkgs/tools/text/dos2unix/default.nix b/pkgs/tools/text/dos2unix/default.nix
index b7efe02f4cd..f694b91762c 100644
--- a/pkgs/tools/text/dos2unix/default.nix
+++ b/pkgs/tools/text/dos2unix/default.nix
@@ -1,22 +1,23 @@
-{stdenv, fetchurl, perl, gettext }:
+{lib, stdenv, fetchurl, perl, gettext }:
 
 stdenv.mkDerivation rec {
   pname = "dos2unix";
-  version = "7.4.1";
+  version = "7.4.2";
 
   src = fetchurl {
     url = "https://waterlan.home.xs4all.nl/dos2unix/${pname}-${version}.tar.gz";
-    sha256 = "08w6yywzirsxq8bh87jycvvw922ybhc2l426j2iqzliyn1h8mm8w";
+    sha256 = "00dfsf4rfyjb5j12gan8xjiirm0asshdz6dmd3l34a7ays6wadb0";
   };
 
   nativeBuildInputs = [ perl gettext ];
   makeFlags = [ "prefix=${placeholder "out"}" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/text/each/default.nix b/pkgs/tools/text/each/default.nix
new file mode 100644
index 00000000000..0218cf5dde2
--- /dev/null
+++ b/pkgs/tools/text/each/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "each";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "arraypad";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "04rx8jf871l4darfx6029dhpnbpmzwjgzazayp1qcaadsk8207z5";
+  };
+
+  cargoSha256 = "1r7nzfh7v2mlp0wdrcpqfj68h3zmip2m3d4z2nwxyikmw7c80car";
+
+  meta = with lib; {
+    description = " A better way of working with structured data on the command line";
+    homepage = "https://github.com/arraypad/each";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ thiagokokada ];
+  };
+}
diff --git a/pkgs/tools/text/ebook-tools/default.nix b/pkgs/tools/text/ebook-tools/default.nix
index 2a6af785692..bb93b217ea2 100644
--- a/pkgs/tools/text/ebook-tools/default.nix
+++ b/pkgs/tools/text/ebook-tools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, cmake, pkgconfig, libxml2, libzip }:
+{ lib, stdenv, fetchurl, cmake, pkg-config, libxml2, libzip }:
 
 stdenv.mkDerivation rec {
   name = "ebook-tools-0.2.2";
@@ -8,18 +8,19 @@ stdenv.mkDerivation rec {
     sha256 = "1bi7wsz3p5slb43kj7lgb3r6lb91lvb6ldi556k4y50ix6b5khyb";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ cmake libxml2 libzip ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ libxml2 libzip ];
 
-  preConfigure = 
+  preConfigure =
     ''
       NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE $(pkg-config --cflags libzip)"
     '';
 
-  meta = {
+  meta = with lib; {
     homepage = "http://ebook-tools.sourceforge.net";
     description = "Tools and library for dealing with various ebook file formats";
     maintainers = [ ];
-    platforms = stdenv.lib.platforms.all;
+    platforms = platforms.all;
+    license = licenses.mit;
   };
 }
diff --git a/pkgs/tools/text/enca/default.nix b/pkgs/tools/text/enca/default.nix
index 6cfb4721066..7015bd4453c 100644
--- a/pkgs/tools/text/enca/default.nix
+++ b/pkgs/tools/text/enca/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libiconv, recode }:
+{ lib, stdenv, fetchurl, libiconv, recode }:
 
 stdenv.mkDerivation rec {
   pname = "enca";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ recode libiconv ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Detects the encoding of text files and reencodes them";
 
     longDescription = ''
@@ -23,6 +23,6 @@ stdenv.mkDerivation rec {
     '';
 
     license = licenses.gpl2;
-   
+
   };
 }
diff --git a/pkgs/tools/text/enscript/default.nix b/pkgs/tools/text/enscript/default.nix
index 670e052772e..1918029317a 100644
--- a/pkgs/tools/text/enscript/default.nix
+++ b/pkgs/tools/text/enscript/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, gettext }:
+{ lib, stdenv, fetchurl, gettext }:
 
 stdenv.mkDerivation rec {
   name = "enscript-1.6.6";
@@ -33,11 +33,11 @@ stdenv.mkDerivation rec {
          it has many options that can be used to customize printouts.
       '';
 
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
 
     homepage = "https://www.gnu.org/software/enscript/";
 
     maintainers = [ ];
-    platforms = stdenv.lib.platforms.all;
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/text/epubcheck/default.nix b/pkgs/tools/text/epubcheck/default.nix
index b40769e5522..88ead40541f 100644
--- a/pkgs/tools/text/epubcheck/default.nix
+++ b/pkgs/tools/text/epubcheck/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchzip
+{ lib, stdenv, fetchzip
 , jre, makeWrapper }:
 
 stdenv.mkDerivation rec {
@@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
       --add-flags "-classpath $classpath com.adobe.epubcheck.tool.Checker"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/w3c/epubcheck";
     description = "Validation tool for EPUB";
     license = with licenses; [ asl20 bsd3 mpl10 w3c ];
diff --git a/pkgs/tools/text/esh/default.nix b/pkgs/tools/text/esh/default.nix
index 171d90026be..a1d6db2a7c2 100644
--- a/pkgs/tools/text/esh/default.nix
+++ b/pkgs/tools/text/esh/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, asciidoctor, gawk, gnused, runtimeShell }:
+{ lib, stdenv, fetchFromGitHub, asciidoctor, gawk, gnused, runtimeShell }:
 
 stdenv.mkDerivation rec {
   pname = "esh";
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
   doCheck = true;
   checkTarget = "test";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Simple templating engine based on shell";
     homepage = "https://github.com/jirutka/esh";
     license = licenses.mit;
diff --git a/pkgs/tools/text/fanficfare/default.nix b/pkgs/tools/text/fanficfare/default.nix
index 1dbe4514363..5fb70f63dc3 100644
--- a/pkgs/tools/text/fanficfare/default.nix
+++ b/pkgs/tools/text/fanficfare/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3Packages }:
+{ lib, python3Packages }:
 
 python3Packages.buildPythonApplication rec {
   pname = "FanFicFare";
@@ -18,12 +18,11 @@ python3Packages.buildPythonApplication rec {
 
   doCheck = false; # no tests exist
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tool for making eBooks from fanfiction web sites";
     homepage = "https://github.com/JimmXinu/FanFicFare";
     license = licenses.gpl3;
-    platforms = platforms.linux;
+    platforms = platforms.unix;
     maintainers = with maintainers; [ dwarfmaster ];
-    inherit version;
   };
 }
diff --git a/pkgs/tools/text/fastmod/default.nix b/pkgs/tools/text/fastmod/default.nix
index d15683894a2..d6e2dc4dd1f 100644
--- a/pkgs/tools/text/fastmod/default.nix
+++ b/pkgs/tools/text/fastmod/default.nix
@@ -1,25 +1,26 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , rustPlatform
+, libiconv
 , Security
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "fastmod";
-  version = "0.4.0";
+  version = "0.4.2";
 
   src = fetchFromGitHub {
     owner = "facebookincubator";
     repo = pname;
     rev = "v${version}";
-    sha256 = "0089a17h0wgan3fs6x1la35lzjs1pib7p81wqkh3zcwvx8ffa8z8";
+    sha256 = "sha256-Lv8hARD/aVWiWpJQmPWPeACpX15+3NogoUl5yh63E7A=";
   };
 
-  cargoSha256 = "02nkxjwfiljndmi0pv98chfsw9vmjzgmp5r14mchpayp4943qk9m";
+  cargoSha256 = "sha256-L1MKoVacVKcpEG2IfS+eENxFZNiSaTDTxfFbFlvzYl8=";
 
-  buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A utility that makes sweeping changes to large, shared code bases";
     homepage = "https://github.com/facebookincubator/fastmod";
     license = licenses.asl20;
diff --git a/pkgs/tools/text/frangipanni/default.nix b/pkgs/tools/text/frangipanni/default.nix
new file mode 100644
index 00000000000..58da1a4be4d
--- /dev/null
+++ b/pkgs/tools/text/frangipanni/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "frangipanni";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "birchb1024";
+    repo = "frangipanni";
+    rev = "v${version}";
+    sha256 = "sha256-jIXyqwZWfCBSDTTodHTct4V5rjYv7h4Vcw7cXOFk17w=";
+  };
+
+  vendorSha256 = "sha256-TSN5M/UCTtfoTf1hDCfrJMCFdSwL/NVXssgt4aefom8=";
+
+  meta = with lib; {
+    description = "Convert lines of text into a tree structure";
+    homepage = "https://github.com/birchb1024/frangipanni";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+  };
+}
diff --git a/pkgs/tools/text/fst/0001-cargo-lockfile.patch b/pkgs/tools/text/fst/0001-cargo-lockfile.patch
new file mode 100644
index 00000000000..c8c56ffdb62
--- /dev/null
+++ b/pkgs/tools/text/fst/0001-cargo-lockfile.patch
@@ -0,0 +1,935 @@
+From 84797e8fb8ead8822ebfd251b47c72433555860e Mon Sep 17 00:00:00 2001
+From: "Robert T. McGibbon" <rmcgibbo@gmail.com>
+Date: Fri, 5 Mar 2021 16:59:41 -0500
+Subject: [PATCH 1/1] Create cargo lock file for 0.4.5
+
+---
+ Cargo.lock | 916 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 916 insertions(+)
+ create mode 100644 Cargo.lock
+
+diff --git a/Cargo.lock b/Cargo.lock
+new file mode 100644
+index 0000000..136677d
+--- /dev/null
++++ b/Cargo.lock
+@@ -0,0 +1,916 @@
++# This file is automatically @generated by Cargo.
++# It is not intended for manual editing.
++[[package]]
++name = "anyhow"
++version = "1.0.38"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1"
++
++[[package]]
++name = "atty"
++version = "0.2.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
++dependencies = [
++ "hermit-abi",
++ "libc",
++ "winapi",
++]
++
++[[package]]
++name = "autocfg"
++version = "1.0.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
++
++[[package]]
++name = "bit-set"
++version = "0.5.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de"
++dependencies = [
++ "bit-vec",
++]
++
++[[package]]
++name = "bit-vec"
++version = "0.6.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
++
++[[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.15"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a40b47ad93e1a5404e6c18dec46b628214fee441c70f4ab5d6942142cc268a3d"
++dependencies = [
++ "lazy_static",
++ "memchr",
++ "regex-automata",
++ "serde",
++]
++
++[[package]]
++name = "bumpalo"
++version = "3.6.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe"
++
++[[package]]
++name = "byteorder"
++version = "1.4.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b"
++
++[[package]]
++name = "cast"
++version = "0.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4b9434b9a5aa1450faa3f9cb14ea0e8c53bb5d2b3c1bfd1ab4fc03e9f33fbfb0"
++dependencies = [
++ "rustc_version",
++]
++
++[[package]]
++name = "cfg-if"
++version = "0.1.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
++
++[[package]]
++name = "cfg-if"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
++
++[[package]]
++name = "clap"
++version = "2.33.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
++dependencies = [
++ "bitflags",
++ "textwrap",
++ "unicode-width",
++]
++
++[[package]]
++name = "criterion"
++version = "0.3.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ab327ed7354547cc2ef43cbe20ef68b988e70b4b593cbd66a2a61733123a3d23"
++dependencies = [
++ "atty",
++ "cast",
++ "clap",
++ "criterion-plot",
++ "csv",
++ "itertools 0.10.0",
++ "lazy_static",
++ "num-traits",
++ "oorandom",
++ "plotters",
++ "rayon",
++ "regex",
++ "serde",
++ "serde_cbor",
++ "serde_derive",
++ "serde_json",
++ "tinytemplate",
++ "walkdir",
++]
++
++[[package]]
++name = "criterion-plot"
++version = "0.4.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e022feadec601fba1649cfa83586381a4ad31c6bf3a9ab7d408118b05dd9889d"
++dependencies = [
++ "cast",
++ "itertools 0.9.0",
++]
++
++[[package]]
++name = "crossbeam-channel"
++version = "0.4.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87"
++dependencies = [
++ "crossbeam-utils 0.7.2",
++ "maybe-uninit",
++]
++
++[[package]]
++name = "crossbeam-channel"
++version = "0.5.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775"
++dependencies = [
++ "cfg-if 1.0.0",
++ "crossbeam-utils 0.8.3",
++]
++
++[[package]]
++name = "crossbeam-deque"
++version = "0.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9"
++dependencies = [
++ "cfg-if 1.0.0",
++ "crossbeam-epoch",
++ "crossbeam-utils 0.8.3",
++]
++
++[[package]]
++name = "crossbeam-epoch"
++version = "0.9.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2584f639eb95fea8c798496315b297cf81b9b58b6d30ab066a75455333cf4b12"
++dependencies = [
++ "cfg-if 1.0.0",
++ "crossbeam-utils 0.8.3",
++ "lazy_static",
++ "memoffset",
++ "scopeguard",
++]
++
++[[package]]
++name = "crossbeam-utils"
++version = "0.7.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
++dependencies = [
++ "autocfg",
++ "cfg-if 0.1.10",
++ "lazy_static",
++]
++
++[[package]]
++name = "crossbeam-utils"
++version = "0.8.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49"
++dependencies = [
++ "autocfg",
++ "cfg-if 1.0.0",
++ "lazy_static",
++]
++
++[[package]]
++name = "csv"
++version = "1.1.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f9d58633299b24b515ac72a3f869f8b91306a3cec616a602843a383acd6f9e97"
++dependencies = [
++ "bstr",
++ "csv-core",
++ "itoa",
++ "ryu",
++ "serde",
++]
++
++[[package]]
++name = "csv-core"
++version = "0.1.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
++dependencies = [
++ "memchr",
++]
++
++[[package]]
++name = "doc-comment"
++version = "0.3.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
++
++[[package]]
++name = "either"
++version = "1.6.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
++
++[[package]]
++name = "fnv"
++version = "1.0.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
++
++[[package]]
++name = "fst"
++version = "0.4.5"
++dependencies = [
++ "doc-comment",
++ "fnv",
++ "memmap",
++ "quickcheck",
++ "rand 0.7.3",
++ "utf8-ranges",
++]
++
++[[package]]
++name = "fst"
++version = "0.4.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d79238883cf0307100b90aba4a755d8051a3182305dfe7f649a1e9dc0517006f"
++dependencies = [
++ "utf8-ranges",
++]
++
++[[package]]
++name = "fst-bench"
++version = "0.0.1"
++dependencies = [
++ "criterion",
++ "fnv",
++ "fst 0.4.5",
++]
++
++[[package]]
++name = "fst-bin"
++version = "0.4.1"
++dependencies = [
++ "anyhow",
++ "bit-set",
++ "bstr",
++ "clap",
++ "crossbeam-channel 0.4.4",
++ "csv",
++ "fst 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memmap",
++ "num_cpus",
++ "regex-automata",
++ "serde",
++ "tempfile",
++]
++
++[[package]]
++name = "getrandom"
++version = "0.1.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
++dependencies = [
++ "cfg-if 1.0.0",
++ "libc",
++ "wasi 0.9.0+wasi-snapshot-preview1",
++]
++
++[[package]]
++name = "getrandom"
++version = "0.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
++dependencies = [
++ "cfg-if 1.0.0",
++ "libc",
++ "wasi 0.10.2+wasi-snapshot-preview1",
++]
++
++[[package]]
++name = "half"
++version = "1.7.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "62aca2aba2d62b4a7f5b33f3712cb1b0692779a56fb510499d5c0aa594daeaf3"
++
++[[package]]
++name = "hermit-abi"
++version = "0.1.18"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"
++dependencies = [
++ "libc",
++]
++
++[[package]]
++name = "itertools"
++version = "0.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
++dependencies = [
++ "either",
++]
++
++[[package]]
++name = "itertools"
++version = "0.10.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "37d572918e350e82412fe766d24b15e6682fb2ed2bbe018280caa810397cb319"
++dependencies = [
++ "either",
++]
++
++[[package]]
++name = "itoa"
++version = "0.4.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
++
++[[package]]
++name = "js-sys"
++version = "0.3.48"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "dc9f84f9b115ce7843d60706df1422a916680bfdfcbdb0447c5614ff9d7e4d78"
++dependencies = [
++ "wasm-bindgen",
++]
++
++[[package]]
++name = "lazy_static"
++version = "1.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
++
++[[package]]
++name = "libc"
++version = "0.2.88"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "03b07a082330a35e43f63177cc01689da34fbffa0105e1246cf0311472cac73a"
++
++[[package]]
++name = "log"
++version = "0.4.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
++dependencies = [
++ "cfg-if 1.0.0",
++]
++
++[[package]]
++name = "maybe-uninit"
++version = "2.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
++
++[[package]]
++name = "memchr"
++version = "2.3.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
++
++[[package]]
++name = "memmap"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b"
++dependencies = [
++ "libc",
++ "winapi",
++]
++
++[[package]]
++name = "memoffset"
++version = "0.6.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87"
++dependencies = [
++ "autocfg",
++]
++
++[[package]]
++name = "num-traits"
++version = "0.2.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
++dependencies = [
++ "autocfg",
++]
++
++[[package]]
++name = "num_cpus"
++version = "1.13.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
++dependencies = [
++ "hermit-abi",
++ "libc",
++]
++
++[[package]]
++name = "oorandom"
++version = "11.1.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
++
++[[package]]
++name = "plotters"
++version = "0.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "45ca0ae5f169d0917a7c7f5a9c1a3d3d9598f18f529dd2b8373ed988efea307a"
++dependencies = [
++ "num-traits",
++ "plotters-backend",
++ "plotters-svg",
++ "wasm-bindgen",
++ "web-sys",
++]
++
++[[package]]
++name = "plotters-backend"
++version = "0.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b07fffcddc1cb3a1de753caa4e4df03b79922ba43cf882acc1bdd7e8df9f4590"
++
++[[package]]
++name = "plotters-svg"
++version = "0.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b38a02e23bd9604b842a812063aec4ef702b57989c37b655254bb61c471ad211"
++dependencies = [
++ "plotters-backend",
++]
++
++[[package]]
++name = "ppv-lite86"
++version = "0.2.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
++
++[[package]]
++name = "proc-macro2"
++version = "1.0.24"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
++dependencies = [
++ "unicode-xid",
++]
++
++[[package]]
++name = "quickcheck"
++version = "0.9.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a44883e74aa97ad63db83c4bf8ca490f02b2fc02f92575e720c8551e843c945f"
++dependencies = [
++ "rand 0.7.3",
++ "rand_core 0.5.1",
++]
++
++[[package]]
++name = "quote"
++version = "1.0.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
++dependencies = [
++ "proc-macro2",
++]
++
++[[package]]
++name = "rand"
++version = "0.7.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
++dependencies = [
++ "getrandom 0.1.16",
++ "libc",
++ "rand_chacha 0.2.2",
++ "rand_core 0.5.1",
++ "rand_hc 0.2.0",
++]
++
++[[package]]
++name = "rand"
++version = "0.8.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
++dependencies = [
++ "libc",
++ "rand_chacha 0.3.0",
++ "rand_core 0.6.2",
++ "rand_hc 0.3.0",
++]
++
++[[package]]
++name = "rand_chacha"
++version = "0.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
++dependencies = [
++ "ppv-lite86",
++ "rand_core 0.5.1",
++]
++
++[[package]]
++name = "rand_chacha"
++version = "0.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
++dependencies = [
++ "ppv-lite86",
++ "rand_core 0.6.2",
++]
++
++[[package]]
++name = "rand_core"
++version = "0.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
++dependencies = [
++ "getrandom 0.1.16",
++]
++
++[[package]]
++name = "rand_core"
++version = "0.6.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
++dependencies = [
++ "getrandom 0.2.2",
++]
++
++[[package]]
++name = "rand_hc"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
++dependencies = [
++ "rand_core 0.5.1",
++]
++
++[[package]]
++name = "rand_hc"
++version = "0.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
++dependencies = [
++ "rand_core 0.6.2",
++]
++
++[[package]]
++name = "rayon"
++version = "1.5.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674"
++dependencies = [
++ "autocfg",
++ "crossbeam-deque",
++ "either",
++ "rayon-core",
++]
++
++[[package]]
++name = "rayon-core"
++version = "1.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a"
++dependencies = [
++ "crossbeam-channel 0.5.0",
++ "crossbeam-deque",
++ "crossbeam-utils 0.8.3",
++ "lazy_static",
++ "num_cpus",
++]
++
++[[package]]
++name = "redox_syscall"
++version = "0.2.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9"
++dependencies = [
++ "bitflags",
++]
++
++[[package]]
++name = "regex"
++version = "1.4.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a"
++dependencies = [
++ "regex-syntax",
++]
++
++[[package]]
++name = "regex-automata"
++version = "0.1.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4"
++dependencies = [
++ "byteorder",
++ "fst 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "regex-syntax",
++]
++
++[[package]]
++name = "regex-syntax"
++version = "0.6.22"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581"
++
++[[package]]
++name = "remove_dir_all"
++version = "0.5.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
++dependencies = [
++ "winapi",
++]
++
++[[package]]
++name = "rustc_version"
++version = "0.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
++dependencies = [
++ "semver",
++]
++
++[[package]]
++name = "ryu"
++version = "1.0.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
++
++[[package]]
++name = "same-file"
++version = "1.0.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
++dependencies = [
++ "winapi-util",
++]
++
++[[package]]
++name = "scopeguard"
++version = "1.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
++
++[[package]]
++name = "semver"
++version = "0.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
++dependencies = [
++ "semver-parser",
++]
++
++[[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.123"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae"
++dependencies = [
++ "serde_derive",
++]
++
++[[package]]
++name = "serde_cbor"
++version = "0.11.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1e18acfa2f90e8b735b2836ab8d538de304cbb6729a7360729ea5a895d15a622"
++dependencies = [
++ "half",
++ "serde",
++]
++
++[[package]]
++name = "serde_derive"
++version = "1.0.123"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++]
++
++[[package]]
++name = "serde_json"
++version = "1.0.64"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79"
++dependencies = [
++ "itoa",
++ "ryu",
++ "serde",
++]
++
++[[package]]
++name = "syn"
++version = "1.0.61"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ed22b90a0e734a23a7610f4283ac9e5acfb96cbb30dfefa540d66f866f1c09c5"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "unicode-xid",
++]
++
++[[package]]
++name = "tempfile"
++version = "3.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22"
++dependencies = [
++ "cfg-if 1.0.0",
++ "libc",
++ "rand 0.8.3",
++ "redox_syscall",
++ "remove_dir_all",
++ "winapi",
++]
++
++[[package]]
++name = "textwrap"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
++dependencies = [
++ "unicode-width",
++]
++
++[[package]]
++name = "tinytemplate"
++version = "1.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
++dependencies = [
++ "serde",
++ "serde_json",
++]
++
++[[package]]
++name = "unicode-width"
++version = "0.1.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
++
++[[package]]
++name = "unicode-xid"
++version = "0.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
++
++[[package]]
++name = "utf8-ranges"
++version = "1.0.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b4ae116fef2b7fea257ed6440d3cfcff7f190865f170cdad00bb6465bf18ecba"
++
++[[package]]
++name = "walkdir"
++version = "2.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d"
++dependencies = [
++ "same-file",
++ "winapi",
++ "winapi-util",
++]
++
++[[package]]
++name = "wasi"
++version = "0.9.0+wasi-snapshot-preview1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
++
++[[package]]
++name = "wasi"
++version = "0.10.2+wasi-snapshot-preview1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
++
++[[package]]
++name = "wasm-bindgen"
++version = "0.2.71"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7ee1280240b7c461d6a0071313e08f34a60b0365f14260362e5a2b17d1d31aa7"
++dependencies = [
++ "cfg-if 1.0.0",
++ "wasm-bindgen-macro",
++]
++
++[[package]]
++name = "wasm-bindgen-backend"
++version = "0.2.71"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5b7d8b6942b8bb3a9b0e73fc79b98095a27de6fa247615e59d096754a3bc2aa8"
++dependencies = [
++ "bumpalo",
++ "lazy_static",
++ "log",
++ "proc-macro2",
++ "quote",
++ "syn",
++ "wasm-bindgen-shared",
++]
++
++[[package]]
++name = "wasm-bindgen-macro"
++version = "0.2.71"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e5ac38da8ef716661f0f36c0d8320b89028efe10c7c0afde65baffb496ce0d3b"
++dependencies = [
++ "quote",
++ "wasm-bindgen-macro-support",
++]
++
++[[package]]
++name = "wasm-bindgen-macro-support"
++version = "0.2.71"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cc053ec74d454df287b9374ee8abb36ffd5acb95ba87da3ba5b7d3fe20eb401e"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "syn",
++ "wasm-bindgen-backend",
++ "wasm-bindgen-shared",
++]
++
++[[package]]
++name = "wasm-bindgen-shared"
++version = "0.2.71"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7d6f8ec44822dd71f5f221a5847fb34acd9060535c1211b70a05844c0f6383b1"
++
++[[package]]
++name = "web-sys"
++version = "0.3.48"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ec600b26223b2948cedfde2a0aa6756dcf1fef616f43d7b3097aaf53a6c4d92b"
++dependencies = [
++ "js-sys",
++ "wasm-bindgen",
++]
++
++[[package]]
++name = "winapi"
++version = "0.3.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
++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.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
++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"
+-- 
+2.29.2
+
diff --git a/pkgs/tools/text/fst/default.nix b/pkgs/tools/text/fst/default.nix
new file mode 100644
index 00000000000..99c90400522
--- /dev/null
+++ b/pkgs/tools/text/fst/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fst";
+  version = "0.4.5";
+
+  src = fetchFromGitHub {
+    owner = "BurntSushi";
+    repo = pname;
+    rev = version;
+    sha256 = "01qdj7zzgwb1zqcznfmnks3dnl6hnf8ib0sm0sgimsbcvajmhab3";
+  };
+
+  cargoPatches = [
+    # Add Cargo.lock lockfile, which upstream does not include
+    ./0001-cargo-lockfile.patch
+  ];
+
+  cargoBuildFlags = [ "--workspace" ];
+  cargoSha256 = "0440p0hb3nlq9wwk3zac9dldanslrddvqn4gib0vl7aikxkcvh4l";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    csv="$(mktemp)"
+    fst="$(mktemp)"
+    printf "abc,1\nabcd,1" > "$csv"
+    $out/bin/fst map "$csv" "$fst" --force
+    $out/bin/fst fuzzy "$fst" 'abc'
+    $out/bin/fst --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Represent large sets and maps compactly with finite state transducers";
+    homepage = "https://github.com/BurntSushi/fst";
+    license = with licenses; [ unlicense /* or */ mit ];
+    maintainers = with maintainers; [ rmcgibbo ];
+  };
+}
diff --git a/pkgs/tools/text/gawk/default.nix b/pkgs/tools/text/gawk/default.nix
index 73e2b8a6de4..b7eb00ee594 100644
--- a/pkgs/tools/text/gawk/default.nix
+++ b/pkgs/tools/text/gawk/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl
+{ lib, stdenv, fetchurl
 # TODO: links -lsigsegv but loses the reference for some reason
 , withSigsegv ? (false && stdenv.hostPlatform.system != "x86_64-cygwin"), libsigsegv
 , interactive ? false, readline
@@ -16,7 +16,7 @@
 assert (doCheck && stdenv.isLinux) -> glibcLocales != null;
 
 let
-  inherit (stdenv.lib) optional;
+  inherit (lib) optional;
 in
 stdenv.mkDerivation rec {
   name = "gawk-5.1.0";
@@ -56,7 +56,7 @@ stdenv.mkDerivation rec {
     libsigsegv = if withSigsegv then libsigsegv else null; # for stdenv bootstrap
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.gnu.org/software/gawk/";
     description = "GNU implementation of the Awk programming language";
 
@@ -81,4 +81,3 @@ stdenv.mkDerivation rec {
     maintainers = [ ];
   };
 }
-
diff --git a/pkgs/tools/text/gawk/gawk-with-extensions.nix b/pkgs/tools/text/gawk/gawk-with-extensions.nix
index 751e5181bb5..1b82d798d33 100644
--- a/pkgs/tools/text/gawk/gawk-with-extensions.nix
+++ b/pkgs/tools/text/gawk/gawk-with-extensions.nix
@@ -1,7 +1,8 @@
 { runCommand, gawk, extensions, makeWrapper }:
 
 runCommand "gawk-with-extensions" {
-  buildInputs = [ makeWrapper gawk ] ++ extensions;
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ gawk ] ++ extensions;
 } ''
   mkdir -p $out/bin
   for i in ${gawk}/bin/*; do
diff --git a/pkgs/tools/text/gawk/gawkextlib.nix b/pkgs/tools/text/gawk/gawkextlib.nix
index e15b2d4e257..1d3f14ea336 100644
--- a/pkgs/tools/text/gawk/gawkextlib.nix
+++ b/pkgs/tools/text/gawk/gawkextlib.nix
@@ -1,10 +1,10 @@
-{ stdenv, recurseIntoAttrs, fetchgit, writeText, pkgconfig, autoreconfHook
+{ lib, stdenv, recurseIntoAttrs, fetchgit, writeText, pkg-config, 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
+  buildExtension = lib.makeOverridable
     ({ name, gawkextlib, extraBuildInputs ? [ ], doCheck ? true }:
       let is_extension = !isNull gawkextlib;
       in stdenv.mkDerivation rec {
@@ -26,13 +26,13 @@ let
           automake
           libtool
           autoreconfHook
-          pkgconfig
+          pkg-config
           texinfo
           gettext
         ];
 
         buildInputs = [ gawk ] ++ extraBuildInputs;
-        propagatedBuildInputs = stdenv.lib.optional is_extension gawkextlib;
+        propagatedBuildInputs = lib.optional is_extension gawkextlib;
 
         setupHook = if is_extension then ./setup-hook.sh else null;
         inherit gawk;
@@ -40,7 +40,7 @@ let
         inherit doCheck;
         checkInputs = [ more ];
 
-        meta = with stdenv.lib; {
+        meta = with lib; {
           homepage = "https://sourceforge.net/projects/gawkextlib/";
           description = "Dynamically loaded extension libraries for GNU AWK";
           longDescription = ''
diff --git a/pkgs/tools/text/gist/default.nix b/pkgs/tools/text/gist/default.nix
index a4a26e139fb..d2676b37997 100644
--- a/pkgs/tools/text/gist/default.nix
+++ b/pkgs/tools/text/gist/default.nix
@@ -4,8 +4,8 @@ buildRubyGem rec {
   inherit ruby;
   name = "${gemName}-${version}";
   gemName = "gist";
-  version = "5.1.0";
-  source.sha256 = "0s69y6hi5iq5k6317j1kjmhi3mk586j1543q8wa608grwcmbq3fw";
+  version = "6.0.0";
+  source.sha256 = "0qnd1jqd7b04871v4l73grcmi7c0pivm8nsfrqvwivm4n4b3c2hd";
 
   meta = with lib; {
     description = "Upload code to https://gist.github.com (or github enterprise)";
diff --git a/pkgs/tools/text/gjo/default.nix b/pkgs/tools/text/gjo/default.nix
index 28af709c30e..da8fa212940 100644
--- a/pkgs/tools/text/gjo/default.nix
+++ b/pkgs/tools/text/gjo/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib
 , buildGoModule
 , fetchFromGitHub
 }:
@@ -14,9 +14,9 @@ buildGoModule rec {
     sha256 = "07halr0jzds4rya6hlvp45bjf7vg4yf49w5q60mch05hk8qkjjdw";
   };
 
-  vendorSha256 = "0sjjj9z1dhilhpc8pq4154czrb79z9cm044jvn75kxcjv6v5l2m5";
+  vendorSha256 = null;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Small utility to create JSON objects";
     homepage = "https://github.com/skanehira/gjo";
     license = licenses.mit;
diff --git a/pkgs/tools/text/glogg/default.nix b/pkgs/tools/text/glogg/default.nix
index dff7262bed2..6bdd6dea029 100644
--- a/pkgs/tools/text/glogg/default.nix
+++ b/pkgs/tools/text/glogg/default.nix
@@ -1,4 +1,4 @@
-{ mkDerivation, stdenv, fetchFromGitHub, qmake, boost }:
+{ mkDerivation, lib, stdenv, fetchFromGitHub, qmake, boost }:
 
 mkDerivation rec {
   pname = "glogg";
@@ -11,7 +11,7 @@ mkDerivation rec {
     sha256 = "0hf1c2m8n88frmxmyn0ndr8129p7iky49nq565sw1asaydm5z6pb";
   };
 
-  postPatch = stdenv.lib.optionalString stdenv.isDarwin ''
+  postPatch = lib.optionalString stdenv.isDarwin ''
     substituteInPlace glogg.pro \
       --replace "boost_program_options-mt" "boost_program_options"
   '';
@@ -22,14 +22,14 @@ mkDerivation rec {
   qmakeFlags = [ "VERSION=${version}" ];
   enableParallelBuilding = true;
 
-  postInstall = stdenv.lib.optionalString stdenv.isDarwin ''
+  postInstall = lib.optionalString stdenv.isDarwin ''
     mkdir -p $out/Applications
     mv $out/bin/glogg.app $out/Applications/glogg.app
     rm -fr $out/{bin,share}
     wrapQtApp $out/Applications/glogg.app/Contents/MacOS/glogg
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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.
diff --git a/pkgs/tools/text/gnugrep/default.nix b/pkgs/tools/text/gnugrep/default.nix
index f7e3cd42a9b..42a9d913dd2 100644
--- a/pkgs/tools/text/gnugrep/default.nix
+++ b/pkgs/tools/text/gnugrep/default.nix
@@ -1,11 +1,11 @@
-{ stdenv, fetchurl, pcre, libiconv, perl }:
+{ lib, stdenv, fetchurl, pcre, libiconv, perl }:
 
 # Note: this package is used for bootstrapping fetchurl, and thus
 # cannot use fetchpatch! All mutable patches (generated by GitHub or
 # cgit) that are needed here should be included directly in Nixpkgs as
 # files.
 
-let version = "3.4"; in
+let version = "3.6"; in
 
 stdenv.mkDerivation {
   pname = "gnugrep";
@@ -13,7 +13,7 @@ stdenv.mkDerivation {
 
   src = fetchurl {
     url = "mirror://gnu/grep/grep-${version}.tar.xz";
-    sha256 = "1yy33kiwrxrwj2nxa4fg15bvmwyghqbs8qwkdvy5phm784f7brjq";
+    sha256 = "0gipv6bzkm1aihj0ncqpyh164xrzgcxcv9r1kwzyk2g1mzl1azk6";
   };
 
   # Perl is needed for testing
@@ -46,7 +46,7 @@ stdenv.mkDerivation {
       chmod +x $out/bin/egrep $out/bin/fgrep
     '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.gnu.org/software/grep/";
     description = "GNU implementation of the Unix grep command";
 
diff --git a/pkgs/tools/text/gnupatch/default.nix b/pkgs/tools/text/gnupatch/default.nix
index 8cca7f15962..97d3136e7e7 100644
--- a/pkgs/tools/text/gnupatch/default.nix
+++ b/pkgs/tools/text/gnupatch/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl
+{ lib, stdenv, fetchurl
 , ed, autoreconfHook
 }:
 
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ autoreconfHook ];
 
-  configureFlags = stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+  configureFlags = lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
     "ac_cv_func_strnlen_working=yes"
   ];
 
@@ -50,9 +50,9 @@ stdenv.mkDerivation rec {
 
     homepage = "https://savannah.gnu.org/projects/patch";
 
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
 
     maintainers = [ ];
-    platforms = stdenv.lib.platforms.all;
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/text/gnused/422.nix b/pkgs/tools/text/gnused/422.nix
index 7ea637dc8c9..80aa9f654a6 100644
--- a/pkgs/tools/text/gnused/422.nix
+++ b/pkgs/tools/text/gnused/422.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation {
   name = "gnused-4.2.2";
@@ -8,7 +8,7 @@ stdenv.mkDerivation {
     sha256 = "f048d1838da284c8bc9753e4506b85a1e0cc1ea8999d36f6995bcb9460cddbd7";
   };
 
-  configureFlags = stdenv.lib.optional stdenv.hostPlatform.isMinGW "ac_cv_func__set_invalid_parameter_handler=no";
+  configureFlags = lib.optional stdenv.hostPlatform.isMinGW "ac_cv_func__set_invalid_parameter_handler=no";
 
   outputs = [ "out" "info" ];
 
@@ -25,9 +25,9 @@ stdenv.mkDerivation {
       multiple occurrences of a string within a file.
     '';
 
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
 
-    platforms = stdenv.lib.platforms.all;
+    platforms = lib.platforms.all;
     maintainers = [ ];
   };
 }
diff --git a/pkgs/tools/text/gnused/default.nix b/pkgs/tools/text/gnused/default.nix
index d4da6f2c8ce..23b2794bf13 100644
--- a/pkgs/tools/text/gnused/default.nix
+++ b/pkgs/tools/text/gnused/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl }:
+{ lib, stdenv, fetchurl, perl }:
 
 stdenv.mkDerivation rec {
   pname = "gnused";
@@ -30,9 +30,9 @@ stdenv.mkDerivation rec {
       multiple occurrences of a string within a file.
     '';
 
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
 
-    platforms = stdenv.lib.platforms.unix;
-    maintainers = [ ];
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ mic92 ];
   };
 }
diff --git a/pkgs/tools/text/gpt2tc/0001-add-python-shebang.patch b/pkgs/tools/text/gpt2tc/0001-add-python-shebang.patch
new file mode 100644
index 00000000000..b47b444009a
--- /dev/null
+++ b/pkgs/tools/text/gpt2tc/0001-add-python-shebang.patch
@@ -0,0 +1,10 @@
+diff --git a/gpt2convert.py b/gpt2convert.py
+index 34ca909..6e6cac5 100644
+--- a/gpt2convert.py
++++ b/gpt2convert.py
+@@ -1,3 +1,5 @@
++#!/usr/bin/env python3
++
+ import sys
+ import tensorflow as tf
+ import numpy as np
diff --git a/pkgs/tools/text/gpt2tc/default.nix b/pkgs/tools/text/gpt2tc/default.nix
new file mode 100644
index 00000000000..3714a418548
--- /dev/null
+++ b/pkgs/tools/text/gpt2tc/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchurl, autoPatchelfHook, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "gpt2tc";
+  version = "2021-04-24";
+
+  src = fetchurl {
+    url = "https://bellard.org/libnc/gpt2tc-${version}.tar.gz";
+    hash = "sha256-kHnRziSNRewifM/oKDQwG27rXRvntuUUX8M+PUNHpA4=";
+  };
+
+  patches = [
+    # Add a shebang to the python script so that nix detects it as such and
+    # wraps it properly. Otherwise, it runs in shell and freezes the system.
+    ./0001-add-python-shebang.patch
+  ];
+
+  nativeBuildInputs = [ autoPatchelfHook ];
+
+  buildInputs = [
+    (python3.withPackages (p: with p; [ numpy tensorflow ]))
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D -m755 -t $out/lib libnc${stdenv.hostPlatform.extensions.sharedLibrary}
+    addAutoPatchelfSearchPath $out/lib
+    install -D -m755 -t $out/bin gpt2tc
+    install -T -m755 download_model.sh $out/bin/gpt2-download-model
+    install -T -m755 gpt2convert.py $out/bin/gpt2-convert
+    install -D -m644 -t $out/share/gpt2tc readme.txt gpt2vocab.txt Changelog
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Text completion and compression using GPT-2";
+    homepage = "https://bellard.org/nncp/gpt2tc.html";
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ anna328p ];
+  };
+}
diff --git a/pkgs/tools/text/grin/default.nix b/pkgs/tools/text/grin/default.nix
index 611507da75c..5d89619001b 100644
--- a/pkgs/tools/text/grin/default.nix
+++ b/pkgs/tools/text/grin/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python2Packages }:
+{ lib, fetchFromGitHub, python2Packages }:
 
 python2Packages.buildPythonApplication rec {
   program = "grin";
@@ -18,7 +18,7 @@ python2Packages.buildPythonApplication rec {
   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 ];
+    platforms = lib.platforms.all;
+    maintainers = [ lib.maintainers.sjagoe ];
   };
 }
diff --git a/pkgs/tools/text/grip-search/default.nix b/pkgs/tools/text/grip-search/default.nix
index 921691a40af..57f0139dbc9 100644
--- a/pkgs/tools/text/grip-search/default.nix
+++ b/pkgs/tools/text/grip-search/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, boost, pkgconfig, cmake, catch2 }:
+{ lib, stdenv, fetchFromGitHub, boost, pkg-config, cmake, catch2 }:
 
 stdenv.mkDerivation rec {
   pname = "grip-search";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
     sha256 = "0bkqarylgzhis6fpj48qbifcd6a26cgnq8784hgnm707rq9kb0rx";
   };
 
-  nativeBuildInputs = [ pkgconfig cmake catch2 ];
+  nativeBuildInputs = [ pkg-config cmake catch2 ];
 
   doCheck = true;
 
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
     substituteInPlace src/general/config.h --replace "CUSTOM-BUILD" "${version}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Fast, indexed regexp search over large file trees";
     homepage = "https://github.com/sc0ty/grip";
     license = licenses.gpl3;
diff --git a/pkgs/tools/text/groff/default.nix b/pkgs/tools/text/groff/default.nix
index 8c98a4aba46..5b158f2cbb0 100644
--- a/pkgs/tools/text/groff/default.nix
+++ b/pkgs/tools/text/groff/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchurl, perl
+{ lib, stdenv, fetchurl, fetchpatch, perl
 , ghostscript #for postscript and html output
 , psutils, netpbm #for html output
 , buildPackages
 , autoreconfHook
-, pkgconfig
+, pkg-config
 , texinfo
 }:
 
@@ -22,24 +22,31 @@ stdenv.mkDerivation rec {
 
   patches = [
     ./0001-Fix-cross-compilation-by-looking-for-ar.patch
+  ]
+  ++ lib.optionals (stdenv.cc.isClang && lib.versionAtLeast stdenv.cc.version "9") [
+    # https://trac.macports.org/ticket/59783
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/openembedded/openembedded-core/ce265cf467f1c3e5ba2edbfbef2170df1a727a52/meta/recipes-extended/groff/files/0001-Include-config.h.patch";
+      sha256 = "1b0mg31xkpxkzlx696nr08rcc7ndpaxdplvysy0hw5099c4n1wyf";
+    })
   ];
 
-  postPatch = stdenv.lib.optionalString (psutils != null) ''
+  postPatch = lib.optionalString (psutils != null) ''
     substituteInPlace src/preproc/html/pre-html.cpp \
       --replace "psselect" "${psutils}/bin/psselect"
-  '' + stdenv.lib.optionalString (netpbm != null) ''
+  '' + lib.optionalString (netpbm != null) ''
     substituteInPlace src/preproc/html/pre-html.cpp \
-      --replace "pnmcut" "${stdenv.lib.getBin netpbm}/bin/pnmcut" \
-      --replace "pnmcrop" "${stdenv.lib.getBin netpbm}/bin/pnmcrop" \
-      --replace "pnmtopng" "${stdenv.lib.getBin netpbm}/bin/pnmtopng"
+      --replace "pnmcut" "${lib.getBin netpbm}/bin/pnmcut" \
+      --replace "pnmcrop" "${lib.getBin netpbm}/bin/pnmcrop" \
+      --replace "pnmtopng" "${lib.getBin netpbm}/bin/pnmtopng"
     substituteInPlace tmac/www.tmac \
-      --replace "pnmcrop" "${stdenv.lib.getBin netpbm}/bin/pnmcrop" \
-      --replace "pngtopnm" "${stdenv.lib.getBin netpbm}/bin/pngtopnm" \
-      --replace "@PNMTOPS_NOSETPAGE@" "${stdenv.lib.getBin netpbm}/bin/pnmtops -nosetpage"
+      --replace "pnmcrop" "${lib.getBin netpbm}/bin/pnmcrop" \
+      --replace "pngtopnm" "${lib.getBin netpbm}/bin/pngtopnm" \
+      --replace "@PNMTOPS_NOSETPAGE@" "${lib.getBin netpbm}/bin/pnmtops -nosetpage"
   '';
 
   buildInputs = [ ghostscript psutils netpbm perl ];
-  nativeBuildInputs = [ autoreconfHook pkgconfig texinfo ];
+  nativeBuildInputs = [ autoreconfHook pkg-config 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
@@ -48,13 +55,14 @@ stdenv.mkDerivation rec {
   # have to pass "--with-appresdir", too.
   configureFlags = [
     "--without-x"
-  ] ++ stdenv.lib.optionals (ghostscript != null) [
+  ] ++ lib.optionals (ghostscript != null) [
     "--with-gs=${ghostscript}/bin/gs"
-  ] ++ stdenv.lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
+  ] ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
     "ac_cv_path_PERL=${buildPackages.perl}/bin/perl"
+    "gl_cv_func_signbit=yes"
   ];
 
-  makeFlags = stdenv.lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
+  makeFlags = 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"
@@ -82,10 +90,6 @@ stdenv.mkDerivation rec {
     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
@@ -102,11 +106,11 @@ stdenv.mkDerivation rec {
     substituteInPlace $perl/bin/grog \
       --replace $out/lib/groff/grog $perl/lib/groff/grog
 
-  '' + stdenv.lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
+  '' + lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
     find $perl/ -type f -print0 | xargs --null sed -i 's|${buildPackages.perl}|${perl}|'
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/text/groff/site.tmac b/pkgs/tools/text/groff/site.tmac
index 8ef1040ca4a..776a7abb1da 100644
--- a/pkgs/tools/text/groff/site.tmac
+++ b/pkgs/tools/text/groff/site.tmac
@@ -14,3 +14,6 @@
 .  if '\V[GROFF_SGR]'' \
 .    output x X tty: sgr 0
 .\}
+.
+.ds doc-default-operating-system Nixpkgs
+.ds doc-volume-operating-system Nixpkgs
diff --git a/pkgs/tools/text/gtranslator/default.nix b/pkgs/tools/text/gtranslator/default.nix
index 5f217e69ea5..5bc99724e3f 100644
--- a/pkgs/tools/text/gtranslator/default.nix
+++ b/pkgs/tools/text/gtranslator/default.nix
@@ -1,14 +1,15 @@
-{ stdenv
+{ lib, stdenv
 , fetchurl
 , meson
 , ninja
-, pkgconfig
+, pkg-config
 , itstool
 , gettext
 , python3
 , wrapGAppsHook
 , libxml2
 , libgda
+, libhandy
 , libsoup
 , json-glib
 , gspell
@@ -16,23 +17,23 @@
 , libdazzle
 , gtk3
 , gtksourceview4
-, gnome3
+, gnome
 , gsettings-desktop-schemas
 }:
 
 stdenv.mkDerivation rec {
   pname = "gtranslator";
-  version = "3.36.0";
+  version = "40.0";
 
   src = fetchurl {
-    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "1lxd2nkji4jk8g2xmyc1a1r3ww710ddk91zh9psmx8xlb4xivaid";
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "0d48nc11z0m91scy21ah56ysxns82zvswx8lglvlkig1vqvblgpc";
   };
 
   nativeBuildInputs = [
     meson
     ninja
-    pkgconfig
+    pkg-config
     itstool
     gettext
     python3
@@ -46,6 +47,7 @@ stdenv.mkDerivation rec {
     libdazzle
     gtksourceview4
     libgda
+    libhandy
     libsoup
     json-glib
     gettext
@@ -59,12 +61,12 @@ stdenv.mkDerivation rec {
   '';
 
   passthru = {
-    updateScript = gnome3.updateScript {
+    updateScript = gnome.updateScript {
       packageName = pname;
     };
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "GNOME translation making program";
     homepage = "https://wiki.gnome.org/Apps/Gtranslator";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/text/gucci/default.nix b/pkgs/tools/text/gucci/default.nix
index 1667f2e45b5..943b86d3b05 100644
--- a/pkgs/tools/text/gucci/default.nix
+++ b/pkgs/tools/text/gucci/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "gucci";
@@ -19,7 +19,7 @@ buildGoPackage rec {
     -ldflags=-X main.AppVersion=${version}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A simple CLI templating tool written in golang";
     homepage = "https://github.com/noqcks/gucci";
     license = licenses.mit;
diff --git a/pkgs/tools/text/highlight/default.nix b/pkgs/tools/text/highlight/default.nix
index a918770aa7b..f44ddc9d0e9 100644
--- a/pkgs/tools/text/highlight/default.nix
+++ b/pkgs/tools/text/highlight/default.nix
@@ -1,26 +1,26 @@
-{ stdenv, fetchFromGitLab, getopt, lua, boost, pkgconfig, swig, perl, gcc }:
+{ lib, stdenv, fetchFromGitLab, getopt, lua, boost, pkg-config, swig, perl, gcc }:
 
-with stdenv.lib;
+with lib;
 
 let
   self = stdenv.mkDerivation rec {
     pname = "highlight";
-    version = "3.57";
+    version = "4.1";
 
     src = fetchFromGitLab {
       owner = "saalen";
       repo = "highlight";
       rev = "v${version}";
-      sha256 = "1xrk7c7akjiwh3wh9bll0qh4g0kqvbzjz9ancpadnk0k7bqi0kxf";
+      sha256 = "sha256-KktwbnL13Tcc2iWAjgqQSMSenUN6nYBEGbFrpB1kkr0=";
     };
 
     enableParallelBuilding = true;
 
-    nativeBuildInputs = [ pkgconfig swig perl ] ++ optional stdenv.isDarwin gcc;
+    nativeBuildInputs = [ pkg-config swig perl ] ++ optional stdenv.isDarwin gcc;
 
     buildInputs = [ getopt lua boost ];
 
-    prePatch = stdenv.lib.optionalString stdenv.cc.isClang ''
+    prePatch = lib.optionalString stdenv.cc.isClang ''
       substituteInPlace src/makefile \
           --replace 'CXX=g++' 'CXX=clang++'
     '';
@@ -45,7 +45,7 @@ let
       make -C extras/swig clean # Clean up intermediate files.
     '';
 
-    meta = with stdenv.lib; {
+    meta = with lib; {
       description = "Source code highlighting tool";
       homepage = "http://www.andre-simon.de/doku/highlight/en/highlight.php";
       platforms = platforms.unix;
diff --git a/pkgs/tools/text/hottext/default.nix b/pkgs/tools/text/hottext/default.nix
new file mode 100644
index 00000000000..2e9d0a909a2
--- /dev/null
+++ b/pkgs/tools/text/hottext/default.nix
@@ -0,0 +1,100 @@
+{ lib, stdenv, fetchurl, fetchFromGitHub, nim, gentium, SDL2, makeDesktopItem }:
+
+let
+  treeformLibs = lib.attrsets.mapAttrsToList (repo: args:
+    fetchFromGitHub ({
+      inherit repo;
+      owner = "treeform";
+    } // args)) {
+      bumpy = {
+        rev = "1.0.3";
+        sha256 = "sha256-mDmDlhOGoYYjKgF5j808oT2NqRlfcOdLSDE3WtdJFQ0=";
+      };
+      chroma = {
+        rev = "0.2.5";
+        sha256 = "sha256-6lNHpO2aMorgkaPfo6kRcOs9r5R6T/kislVmkeoulw8=";
+      };
+      flatty = {
+        rev = "0.2.1";
+        sha256 = "sha256-TqNnRh2+i6n98ktLRVQxt9CVw17FGLNYq29rJoMus/0=";
+      };
+      pixie = {
+        rev = "1.1.3";
+        sha256 = "sha256-xKIejVxOd19mblL1ZwpJH91dgKQS5g8U08EL8lGGelA=";
+      };
+      typography = {
+        rev = "0.7.9";
+        sha256 = "sha256-IYjw3PCp5XzVed2fGGCt9Hb60cxFeF0BUZ7L5PedTLU=";
+      };
+      vmath = {
+        rev = "1.0.3";
+        sha256 = "sha256-zzSKXjuTZ46HTFUs0N47mxEKTKIdS3dwr+60sQYSdn0=";
+      };
+    };
+
+  nimLibs = treeformLibs ++ [
+    (fetchFromGitHub {
+      owner = "nim-lang";
+      repo = "sdl2";
+      rev = "v2.0.2";
+      sha256 = "sha256-Ivx/gxDa2HVDjCVrJVu23i4d0pDzzv+ThmwqNjtkjsA=";
+    })
+    (fetchFromGitHub {
+      owner = "guzba";
+      repo = "nimsimd";
+      rev = "1.0.0";
+      sha256 = "sha256-kp61fylAJ6MSN9hLYLi7CU2lxVR/lbrNCvZTe0LJLGo=";
+    })
+    (fetchFromGitHub {
+      owner = "guzba";
+      repo = "zippy";
+      rev = "0.5.6";
+      sha256 = "sha256-axp4t9+8TFSpvnATlRKZyuOGLA0e/XKfvrVSwreXpC4=";
+    })
+  ];
+
+in stdenv.mkDerivation rec {
+  pname = "hottext";
+  version = "1.3";
+
+  src = fetchurl {
+    url = "https://git.sr.ht/~ehmry/hottext/archive/v${version}.tar.gz";
+    sha256 = "sha256-iz7Z2x0/yi/E6gGFkYgq/yZDOxrZGwQmumPoO9kckLQ=";
+  };
+
+  nativeBuildInputs = [ nim ];
+  buildInputs = [ SDL2 ];
+
+  nimFlags = [ "-d:release" ] ++ map (lib: "--path:${lib}/src") nimLibs;
+
+  HOTTEXT_FONT_PATH = "${gentium}/share/fonts/truetype/GentiumPlus-Regular.ttf";
+
+  buildPhase = ''
+    runHook preBuild
+    HOME=$TMPDIR
+    nim $nimFlags compile src/$pname
+    runHook postBuild
+  '';
+
+  desktopItem = makeDesktopItem {
+    categories = "Utility;";
+    comment = meta.description;
+    desktopName = pname;
+    exec = pname;
+    name = pname;
+  };
+
+  installPhase = ''
+    runHook preInstall
+    install -Dt $out/bin src/$pname
+    cp -r $desktopItem/* $out
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Simple RSVP speed-reading utility";
+    license = licenses.unlicense;
+    homepage = "https://git.sr.ht/~ehmry/hottext";
+    maintainers = with maintainers; [ ehmry ];
+  };
+}
diff --git a/pkgs/tools/text/html-tidy/default.nix b/pkgs/tools/text/html-tidy/default.nix
index 28e1759fea5..d4bb26a0a77 100644
--- a/pkgs/tools/text/html-tidy/default.nix
+++ b/pkgs/tools/text/html-tidy/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchFromGitHub, cmake, libxslt }:
+{ lib, stdenv, fetchFromGitHub, cmake, libxslt }:
 
 stdenv.mkDerivation rec {
   pname = "html-tidy";
-  version = "5.6.0";
+  version = "5.8.0";
 
   src = fetchFromGitHub {
     owner = "htacg";
     repo = "tidy-html5";
     rev = version;
-    sha256 = "0w175c5d1babq0w1zzdzw9gl6iqbgyq58v8587s7srp05y3hwy9k";
+    sha256 = "sha256-ZMz0NySxzX2XHiqB8f5asvwjIG6kdIcq8Gb3EbAxBaU=";
   };
 
   nativeBuildInputs = [ cmake libxslt/*manpage*/ ];
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
   # 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; {
+  meta = with lib; {
     description = "A HTML validator and `tidier'";
     longDescription = ''
       HTML Tidy is a command-line tool and C library that can be
diff --git a/pkgs/tools/text/html2text/default.nix b/pkgs/tools/text/html2text/default.nix
index 7cf276f2da3..ae92f3ba9d9 100644
--- a/pkgs/tools/text/html2text/default.nix
+++ b/pkgs/tools/text/html2text/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation {
   name = "html2text-1.3.2a";
@@ -25,8 +25,8 @@ stdenv.mkDerivation {
   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 ];
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.eikek ];
   };
 }
diff --git a/pkgs/tools/text/icdiff/default.nix b/pkgs/tools/text/icdiff/default.nix
index 15739432a19..c051560151a 100644
--- a/pkgs/tools/text/icdiff/default.nix
+++ b/pkgs/tools/text/icdiff/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub, pythonPackages }:
+{ lib, fetchFromGitHub, python3Packages, bash, git, less }:
 
-pythonPackages.buildPythonApplication rec {
+python3Packages.buildPythonApplication rec {
   pname = "icdiff";
   version = "1.9.5";
 
@@ -11,7 +11,21 @@ pythonPackages.buildPythonApplication rec {
     sha256 = "080v8h09pv8qwplin4kwfm0kmqjwdqjfxbpcdrv16sv4hwfwl5qd";
   };
 
-  meta = with stdenv.lib; {
+  checkInputs = [
+    bash
+    git
+    less
+  ];
+
+  # error: could not lock config file /homeless-shelter/.gitconfig: No such file or directory
+  doCheck = false;
+
+  checkPhase = ''
+    patchShebangs test.sh
+    ./test.sh ${python3Packages.python.interpreter}
+  '';
+
+  meta = with lib; {
     homepage = "https://www.jefftk.com/icdiff";
     description = "Side-by-side highlighted command line diffs";
     maintainers = with maintainers; [ aneeshusa ];
diff --git a/pkgs/tools/text/invoice2data/default.nix b/pkgs/tools/text/invoice2data/default.nix
index 78ab971f0c0..8007724f4a5 100644
--- a/pkgs/tools/text/invoice2data/default.nix
+++ b/pkgs/tools/text/invoice2data/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3Packages, xpdf, imagemagick, tesseract }:
+{ lib, python3Packages, xpdf, imagemagick, tesseract }:
 
 python3Packages.buildPythonPackage rec {
   pname = "invoice2data";
@@ -9,14 +9,14 @@ python3Packages.buildPythonPackage rec {
     sha256 = "1phz0a8jxg074k0im7shrrdfvdps7bn1fa4zwcf8q3sa2iig26l4";
   };
 
-  makeWrapperArgs = ["--prefix" "PATH" ":" (stdenv.lib.makeBinPath [ imagemagick xpdf tesseract ]) ];
+  makeWrapperArgs = ["--prefix" "PATH" ":" (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; {
+  meta = with lib; {
     description = "Data extractor for PDF invoices";
     homepage = "https://github.com/invoice-x/invoice2data";
     license = licenses.mit;
diff --git a/pkgs/tools/text/ispell/default.nix b/pkgs/tools/text/ispell/default.nix
index 2f61536ed2c..f4403f4991f 100644
--- a/pkgs/tools/text/ispell/default.nix
+++ b/pkgs/tools/text/ispell/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, bison, ncurses }:
+{ lib, stdenv, fetchurl, bison, ncurses }:
 
 stdenv.mkDerivation rec {
   pname = "ispell";
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
 
   postPatch = ''
     cat >> local.h <<EOF
-    ${stdenv.lib.optionalString (!stdenv.isDarwin) "#define USG"}
+    ${lib.optionalString (!stdenv.isDarwin) "#define USG"}
     #define TERMLIB "-lncurses"
     #define LANGUAGES "{american,MASTERDICTS=american.med,HASHFILES=americanmed.hash}"
     #define MASTERHASH "americanmed.hash"
@@ -49,7 +49,7 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "An interactive spell-checking program for Unix";
     homepage = "https://www.cs.hmc.edu/~geoff/ispell.html";
     license = licenses.free;
diff --git a/pkgs/tools/text/jbofihe/default.nix b/pkgs/tools/text/jbofihe/default.nix
new file mode 100644
index 00000000000..111b019c3b1
--- /dev/null
+++ b/pkgs/tools/text/jbofihe/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, bison, flex, perl, }:
+
+stdenv.mkDerivation rec {
+  pname = "jbofihe";
+  version = "0.43";
+
+  src = fetchFromGitHub {
+    owner = "lojban";
+    repo = "jbofihe";
+    rev = "v${version}";
+    sha256 = "1xx7x1256sjncyzx656jl6jl546vn8zz0siymqalz6v9yf341p98";
+  };
+
+  nativeBuildInputs = [ bison flex perl ];
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+    (cd tests && ./run *.in)
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "Parser & analyser for Lojban";
+    homepage = "https://github.com/lojban/jbofihe";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ chkno ];
+  };
+}
diff --git a/pkgs/tools/text/jsawk/default.nix b/pkgs/tools/text/jsawk/default.nix
index 4f2ad403e36..4efaf56ccf6 100644
--- a/pkgs/tools/text/jsawk/default.nix
+++ b/pkgs/tools/text/jsawk/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, makeWrapper, spidermonkey }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper, spidermonkey_78 }:
 
 stdenv.mkDerivation {
   pname = "jsawk";
@@ -10,19 +10,19 @@ stdenv.mkDerivation {
     sha256 = "0z3vdr3c8nvdrrxkjv9b4xg47mdb2hsknxpimw6shgwbigihapyr";
   };
   dontBuild = true;
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
   installPhase = ''
     mkdir -p $out/bin
     cp $src/jsawk $out/bin/
     wrapProgram $out/bin/jsawk \
-      --prefix PATH : "${spidermonkey}/bin"
+      --prefix PATH : "${spidermonkey_78}/bin"
   '';
 
   meta = {
-    description = "Jsawk is like awk, but for JSON";
+    description = "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;
+    license = lib.licenses.publicDomain;
+    maintainers = with lib.maintainers; [ puffnfresh ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/text/jumanpp/default.nix b/pkgs/tools/text/jumanpp/default.nix
index ecadb4a89d8..5578ed417a2 100644
--- a/pkgs/tools/text/jumanpp/default.nix
+++ b/pkgs/tools/text/jumanpp/default.nix
@@ -1,15 +1,19 @@
-{ stdenv, fetchurl, cmake, protobuf }:
+{ lib, stdenv, fetchurl, cmake, protobuf, libiconv }:
+
 stdenv.mkDerivation rec {
   pname = "jumanpp";
-  version = "2.0.0-rc2";
+  version = "2.0.0-rc3";
 
   src = fetchurl {
     url = "https://github.com/ku-nlp/${pname}/releases/download/v${version}/${pname}-${version}.tar.xz";
-    sha256 = "17fzmd0f5m9ayfhsr0mg7hjp3pg1mhbgknhgyd8v87x46g8bg6qp";
+    sha256 = "sha256-ASdr6qbkSe71M7QmuuwidCa4xQhDVoXBJ2XqvSY53pQ=";
   };
-  buildInputs = [ cmake protobuf ];
 
-  meta = with stdenv.lib; {
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ protobuf ]
+    ++ lib.optional stdenv.isDarwin libiconv;
+
+  meta = with lib; {
     description = "A Japanese morphological analyser using a recurrent neural network language model (RNNLM)";
     longDescription = ''
       JUMAN++ is a new morphological analyser that considers semantic
diff --git a/pkgs/tools/text/kakasi/default.nix b/pkgs/tools/text/kakasi/default.nix
index 62645573259..609b8aff9b5 100644
--- a/pkgs/tools/text/kakasi/default.nix
+++ b/pkgs/tools/text/kakasi/default.nix
@@ -1,11 +1,11 @@
-{ stdenv, fetchurl, libiconv }:
+{ lib, stdenv, fetchurl, libiconv }:
 
 stdenv.mkDerivation rec {
   name = "kakasi-2.3.6";
 
-  buildInputs = stdenv.lib.optional stdenv.isDarwin [ libiconv ];
+  buildInputs = lib.optional stdenv.isDarwin [ libiconv ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Kanji Kana Simple Inverter";
     longDescription = ''
       KAKASI is the language processing filter to convert Kanji
diff --git a/pkgs/tools/text/kdiff3/default.nix b/pkgs/tools/text/kdiff3/default.nix
index 9c0526c3e63..c230278c0a0 100644
--- a/pkgs/tools/text/kdiff3/default.nix
+++ b/pkgs/tools/text/kdiff3/default.nix
@@ -6,11 +6,11 @@
 
 mkDerivation rec {
   pname = "kdiff3";
-  version = "1.8.3";
+  version = "1.8.5";
 
   src = fetchurl {
     url = "https://download.kde.org/stable/${pname}/${pname}-${version}.tar.xz";
-    sha256 = "1awb62y09kbkjhz22mdkrppd6w5aihd3l0ssvpil8c9hg8syjd9g";
+    sha256 = "sha256-vJL30E6xI/nFbb4wR69nv3FSQPqZSHrB0czypF4IVME=";
   };
 
   nativeBuildInputs = [ extra-cmake-modules kdoctools wrapGAppsHook ];
@@ -18,7 +18,7 @@ mkDerivation rec {
   propagatedBuildInputs = [ kconfig kcrash kinit kparts kiconthemes ];
 
   meta = with lib; {
-    homepage = "http://kdiff3.sourceforge.net/";
+    homepage = "https://invent.kde.org/sdk/kdiff3";
     license = licenses.gpl2Plus;
     description = "Compares and merges 2 or 3 files or directories";
     maintainers = with maintainers; [ peterhoeg ];
diff --git a/pkgs/tools/text/kramdown-rfc2629/Gemfile.lock b/pkgs/tools/text/kramdown-rfc2629/Gemfile.lock
deleted file mode 100644
index b50dc2fdbca..00000000000
--- a/pkgs/tools/text/kramdown-rfc2629/Gemfile.lock
+++ /dev/null
@@ -1,17 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    certified (1.0.0)
-    kramdown (1.17.0)
-    kramdown-rfc2629 (1.2.13)
-      certified (~> 1.0)
-      kramdown (~> 1.17.0)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  kramdown-rfc2629
-
-BUNDLED WITH
-   2.1.4
diff --git a/pkgs/tools/text/kramdown-rfc2629/default.nix b/pkgs/tools/text/kramdown-rfc2629/default.nix
deleted file mode 100644
index 945c676ca18..00000000000
--- a/pkgs/tools/text/kramdown-rfc2629/default.nix
+++ /dev/null
@@ -1,18 +0,0 @@
-{ lib, bundlerApp }:
-
-# Not in the default ../../../development/ruby-modules/with-packages/Gemfile
-# because of version clash on the "kramdown" dependency.
-bundlerApp rec {
-  pname = "kramdown-rfc2629";
-  gemdir = ./.;
-  exes = [ "kramdown-rfc2629" ];
-
-  meta = with lib; {
-    description = "A markdown parser with multiple backends";
-    homepage    = "https://github.com/cabo/kramdown-rfc2629";
-    license     = with licenses; mit;
-    maintainers = with maintainers; [
-      vcunat # not really, but I expect to use it occasionally around IETF
-    ];
-  };
-}
diff --git a/pkgs/tools/text/kramdown-rfc2629/gemset.nix b/pkgs/tools/text/kramdown-rfc2629/gemset.nix
deleted file mode 100644
index 65d1c234de2..00000000000
--- a/pkgs/tools/text/kramdown-rfc2629/gemset.nix
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  certified = {
-    groups = ["default"];
-    platforms = [];
-    source = {
-      remotes = ["https://rubygems.org"];
-      sha256 = "1706p6p0a8adyvd943af2a3093xakvislgffw3v9dvp7j07dyk5a";
-      type = "gem";
-    };
-    version = "1.0.0";
-  };
-  kramdown = {
-    groups = ["default"];
-    platforms = [];
-    source = {
-      remotes = ["https://rubygems.org"];
-      sha256 = "1n1c4jmrh5ig8iv1rw81s4mw4xsp4v97hvf8zkigv4hn5h542qjq";
-      type = "gem";
-    };
-    version = "1.17.0";
-  };
-  kramdown-rfc2629 = {
-    dependencies = ["certified" "kramdown"];
-    groups = ["default"];
-    platforms = [];
-    source = {
-      remotes = ["https://rubygems.org"];
-      sha256 = "0s53m46qlcdakik0czvx0p41mk46l9l36331cps8gpf364wf3l9d";
-      type = "gem";
-    };
-    version = "1.2.13";
-  };
-}
\ No newline at end of file
diff --git a/pkgs/tools/text/kytea/default.nix b/pkgs/tools/text/kytea/default.nix
index b120d43287a..9cbc2c030a4 100644
--- a/pkgs/tools/text/kytea/default.nix
+++ b/pkgs/tools/text/kytea/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
 
@@ -12,9 +12,9 @@ stdenv.mkDerivation rec {
 
   patches = [ ./gcc-O3.patch ];
 
-  NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.cc.isClang "-Wno-error=c++11-narrowing";
+  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=c++11-narrowing";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.phontron.com/kytea/";
     description = "General toolkit developed for analyzing text";
 
diff --git a/pkgs/tools/text/l2md/default.nix b/pkgs/tools/text/l2md/default.nix
new file mode 100644
index 00000000000..e443cc42a2e
--- /dev/null
+++ b/pkgs/tools/text/l2md/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchgit, libgit2 }:
+
+stdenv.mkDerivation rec {
+  pname = "l2md";
+  version = "unstable-2020-07-31";
+
+  src = fetchgit {
+    url = "https://git.kernel.org/pub/scm/linux/kernel/git/dborkman/l2md.git";
+    rev = "2b9fae141fc2129940e0337732a35a3fc1c33455";
+    sha256 = "PNNoD3a+rJwKH6wbOkvVU1IW4+xF7+zQaLFAlyLlYOI=";
+  };
+
+  buildInputs = [ libgit2 ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp l2md $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Convert public-inbox archives to maildir messages";
+    longDescription = ''
+      Quick and dirty hack to import lore.kernel.org list archives via git,
+      to export them in maildir format or through a pipe, and to keep them
+      periodically synced.
+    '';
+    homepage = "https://git.kernel.org/pub/scm/linux/kernel/git/dborkman/l2md.git";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ yoctocell ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/text/languagetool/default.nix b/pkgs/tools/text/languagetool/default.nix
index 0dd01d382ed..791d779bf83 100644
--- a/pkgs/tools/text/languagetool/default.nix
+++ b/pkgs/tools/text/languagetool/default.nix
@@ -1,19 +1,21 @@
-{ stdenv, fetchzip, jre, makeWrapper }:
+{ lib, stdenv, fetchzip, jre, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "LanguageTool";
-  version = "5.0";
+  version = "5.4";
 
   src = fetchzip {
     url = "https://www.languagetool.org/download/${pname}-${version}.zip";
-    sha256 = "1jyd4z62ldwhqx9r7v4b9k4pl300wr4b7ggj4f0yjf0gpwg7l9p7";
+    sha256 = "sha256-2khadADfzwkW+J0uafPWJ6xUQRSQDm8seiBHueQGmKI=";
   };
   nativeBuildInputs = [ makeWrapper ];
   buildInputs = [ jre ];
 
   installPhase = ''
+    runHook preInstall
+
     mkdir -p $out/share
-    mv * $out/share/
+    mv -- * $out/share/
 
     for lt in languagetool{,-commandline,-server};do
       makeWrapper ${jre}/bin/java $out/bin/$lt \
@@ -22,14 +24,15 @@ stdenv.mkDerivation rec {
 
     makeWrapper ${jre}/bin/java $out/bin/languagetool-http-server \
       --add-flags "-cp $out/share/languagetool-server.jar org.languagetool.server.HTTPServer"
+
+    runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://languagetool.org";
     license = licenses.lgpl21Plus;
-    maintainers = with maintainers; [
-      edwtjo
-    ];
+    maintainers = with maintainers; [ edwtjo ];
+    platforms = jre.meta.platforms;
     description = "A proofreading program for English, French German, Polish, and more";
   };
 }
diff --git a/pkgs/tools/text/ledger2beancount/default.nix b/pkgs/tools/text/ledger2beancount/default.nix
new file mode 100644
index 00000000000..12fe3a9c9e0
--- /dev/null
+++ b/pkgs/tools/text/ledger2beancount/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, perlPackages, beancount }:
+
+with lib;
+
+let
+  perlDeps = with perlPackages; [
+    DateCalc
+    DateTimeFormatStrptime
+    enum
+    FileBaseDir
+    GetoptLongDescriptive
+    ListMoreUtils
+    RegexpCommon
+    StringInterpolate
+    YAMLLibYAML
+  ];
+
+in stdenv.mkDerivation rec {
+  pname = "ledger2beancount";
+  version = "2.5";
+
+  src = fetchFromGitHub {
+    owner = "beancount";
+    repo = "ledger2beancount";
+    rev = version;
+    sha256 = "0kimp8l9ax37grfv5r5iw0g0xnrpkak022fl10y3i7kc4nyi1s99";
+  };
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perlPackages.perl beancount ] ++ perlDeps;
+
+  makeFlags = [ "prefix=$(out)" ];
+  installFlags = [ "INSTALL=install" ];
+
+  installPhase = ''
+    mkdir -p $out
+    cp -r $src/bin $out/bin
+  '';
+
+  postFixup = ''
+    wrapProgram "$out/bin/ledger2beancount" \
+      --set PERL5LIB "${perlPackages.makeFullPerlPath perlDeps}"
+  '';
+
+  meta = {
+    description = "Ledger to Beancount text-based converter";
+    longDescription = ''
+      A script to automatically convert Ledger-based textual ledgers to Beancount ones.
+
+      Conversion is based on (concrete) syntax, so that information that is not meaningful for accounting reasons but still valuable (e.g., comments, formatting, etc.) can be preserved.
+    '';
+    homepage = "https://github.com/beancount/ledger2beancount";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pablovsky ];
+  };
+}
diff --git a/pkgs/tools/text/link-grammar/default.nix b/pkgs/tools/text/link-grammar/default.nix
index 25a5d129c81..3a6686dba5f 100644
--- a/pkgs/tools/text/link-grammar/default.nix
+++ b/pkgs/tools/text/link-grammar/default.nix
@@ -1,28 +1,65 @@
-{ stdenv, fetchurl, pkgconfig, python3, sqlite, libedit, zlib }:
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, python3
+, sqlite
+, libedit
+, runCommand
+, dieHook
+}:
 
-stdenv.mkDerivation rec {
-  version = "5.8.0";
+let
+
+link-grammar = stdenv.mkDerivation rec {
   pname = "link-grammar";
+  version = "5.9.1";
 
   outputs = [ "bin" "out" "dev" "man" ];
 
   src = fetchurl {
     url = "http://www.abisource.com/downloads/${pname}/${version}/${pname}-${version}.tar.gz";
-    sha256 = "1v8ngx77nachxln68xpvyw2lh7z59pzsi99h8j0mnrm0gjsacrdd";
+    sha256 = "sha256-4D/rqoIGlvR+q7Az8E1xPYSQQMJMRVeRM9HQIbjssLo=";
   };
 
-  nativeBuildInputs = [ pkgconfig python3 ];
-  buildInputs = [ sqlite libedit zlib ];
+  nativeBuildInputs = [
+    pkg-config
+    python3
+  ];
+
+  buildInputs = [
+    sqlite
+    libedit
+  ];
 
   configureFlags = [
     "--disable-java-bindings"
   ];
 
-  meta = with stdenv.lib; {
+  doCheck = true;
+
+  passthru.tests = {
+    quick = runCommand "link-grammar-quick-test" {
+      buildInputs = [
+        link-grammar
+        dieHook
+      ];
+    } ''
+      echo "Furiously sleep ideas green colorless." | link-parser en | grep "No complete linkages found." || die "Grammaticaly invalid sentence was parsed."
+      echo "Colorless green ideas sleep furiously." | link-parser en | grep "Found .* linkages." || die "Grammaticaly valid sentence was not parsed."
+      touch $out
+    '';
+  };
+
+  meta = with lib; {
     description = "A Grammar Checking library";
     homepage = "https://www.abisource.com/projects/link-grammar/";
-    license = licenses.lgpl21;
+    changelog = "https://github.com/opencog/link-grammar/blob/link-grammar-${version}/ChangeLog";
+    license = licenses.lgpl21Only;
     maintainers = with maintainers; [ jtojnar ];
     platforms = platforms.unix;
   };
-}
+};
+
+in
+  link-grammar
diff --git a/pkgs/tools/text/lv/default.nix b/pkgs/tools/text/lv/default.nix
index 3e96858f9c9..48ed867c8e4 100644
--- a/pkgs/tools/text/lv/default.nix
+++ b/pkgs/tools/text/lv/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, ncurses }:
+{ lib, stdenv, fetchurl, ncurses }:
 
 stdenv.mkDerivation rec {
   pname = "lv";
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
     mkdir -p $out/bin
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/text/m2r/default.nix b/pkgs/tools/text/m2r/default.nix
new file mode 100644
index 00000000000..f6dda712d0b
--- /dev/null
+++ b/pkgs/tools/text/m2r/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, docutils
+, mistune
+, pygments
+}:
+
+buildPythonApplication rec {
+  pname = "m2r";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "miyakogi";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-JNLPEXMoiISh4RnKP+Afj9/PJp9Lrx9UYHsfuGAL7uI=";
+  };
+
+  buildInputs = [
+    docutils
+    mistune
+    pygments
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/miyakogi/m2r";
+    description = "Markdown-to-RestructuredText converter";
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres ];
+  };
+}
diff --git a/pkgs/tools/text/mairix/default.nix b/pkgs/tools/text/mairix/default.nix
index a2ae91e974b..57e05bf19f6 100644
--- a/pkgs/tools/text/mairix/default.nix
+++ b/pkgs/tools/text/mairix/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, zlib, bzip2, bison, flex }:
+{ lib, stdenv, fetchurl, zlib, bzip2, bison, flex }:
 
 stdenv.mkDerivation rec {
   name = "mairix-0.24";
@@ -17,9 +17,9 @@ stdenv.mkDerivation rec {
 
   meta = {
     homepage = "http://www.rc0.org.uk/mairix";
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = 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;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; all;
   };
 }
diff --git a/pkgs/tools/text/mark/default.nix b/pkgs/tools/text/mark/default.nix
new file mode 100644
index 00000000000..0cccb644f9e
--- /dev/null
+++ b/pkgs/tools/text/mark/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "mark";
+  version = "5.5";
+
+  src = fetchFromGitHub {
+    owner  = "kovetskiy";
+    repo   = "mark";
+    rev    = version;
+    sha256 = "sha256-+mDUT9zkawa6Ad1uptc34RGK3bhU6WowwUZdwKbOnj4=";
+  };
+
+  vendorSha256 = "sha256-nneQ0B7PyHAqiOzrmWqSssZM8B3np4VFUJLBqUvkjZE=";
+
+  buildFlagsArray = [ "-ldflags=-s -w -X main.version=${version}" ];
+
+  meta = with lib; {
+    description = "A tool for syncing your markdown documentation with Atlassian Confluence pages";
+    homepage = "https://github.com/kovetskiy/mark";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ rguevara84 ];
+  };
+}
diff --git a/pkgs/tools/text/markdown-pp/default.nix b/pkgs/tools/text/markdown-pp/default.nix
index eaaa0547964..c6e937eab27 100644
--- a/pkgs/tools/text/markdown-pp/default.nix
+++ b/pkgs/tools/text/markdown-pp/default.nix
@@ -1,13 +1,15 @@
-{ fetchFromGitHub, pythonPackages, stdenv }:
+{ lib
+, fetchFromGitHub
+, python3
+}:
 
-with pythonPackages;
-buildPythonApplication rec {
+python3.pkgs.buildPythonApplication rec {
   pname = "MarkdownPP";
   version = "1.5.1";
-  propagatedBuildInputs = [ pillow watchdog ];
+  propagatedBuildInputs = with python3.pkgs; [ pillow watchdog ];
   checkPhase = ''
     cd test
-    PATH=$out/bin:$PATH ${python}/bin/${python.executable} test.py
+    PATH=$out/bin:$PATH ${python3}/bin/${python3.executable} test.py
   '';
   src = fetchFromGitHub {
     owner = "jreese";
@@ -15,7 +17,7 @@ buildPythonApplication rec {
     rev = "v${version}";
     sha256 = "180i5wn9z6vdk2k2bh8345z3g80hj7zf5s2pq0h7k9vaxqpp7avc";
   };
-  meta = with stdenv.lib; {
+  meta = with 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";
diff --git a/pkgs/tools/text/mawk/default.nix b/pkgs/tools/text/mawk/default.nix
index 204d346082c..d5f228d7873 100644
--- a/pkgs/tools/text/mawk/default.nix
+++ b/pkgs/tools/text/mawk/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "mawk-1.3.4-20200120";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
     sha256 = "0dw2icf8bnqd9y0clfd9pkcxz4b2phdihwci13z914mf3wgcvm3z";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Interpreter for the AWK Programming Language";
     homepage = "https://invisible-island.net/mawk/mawk.html";
     license = licenses.gpl2;
diff --git a/pkgs/tools/text/mb2md/default.nix b/pkgs/tools/text/mb2md/default.nix
index 91c958cf067..78ce7f59397 100644
--- a/pkgs/tools/text/mb2md/default.nix
+++ b/pkgs/tools/text/mb2md/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, makeWrapper, perlPackages }:
+{ lib, stdenv, fetchurl, makeWrapper, perlPackages }:
 
 let
   perlDeps = with perlPackages; [ TimeDate ];
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
       --set PERL5LIB "${perlPackages.makePerlPath perlDeps}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "mbox to maildir tool";
     license = licenses.publicDomain;
     platforms = platforms.all;
diff --git a/pkgs/tools/text/mdbook-mermaid/default.nix b/pkgs/tools/text/mdbook-mermaid/default.nix
new file mode 100644
index 00000000000..741bc652e51
--- /dev/null
+++ b/pkgs/tools/text/mdbook-mermaid/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdbook-mermaid";
+  version = "0.8.3";
+
+  src = fetchFromGitHub {
+    owner = "badboy";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-maYFOlWNqKFmyDM2nDF25rzYnUXMlV9Ry9TMoXReUUg=";
+  };
+
+  cargoSha256 = "sha256-GL5Z4KfRu0zQAzVCWRIhaYtG5FrDdQabsbyFX7SjZvg=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  meta = with lib; {
+    description = "A preprocessor for mdbook to add mermaid.js support";
+    homepage = "https://github.com/badboy/mdbook-mermaid";
+    license = [ licenses.mpl20 ];
+    maintainers = with maintainers; [ xrelkd ];
+  };
+}
diff --git a/pkgs/tools/text/mdbook/default.nix b/pkgs/tools/text/mdbook/default.nix
index 9cfdc9c9b7e..29007dd1282 100644
--- a/pkgs/tools/text/mdbook/default.nix
+++ b/pkgs/tools/text/mdbook/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchFromGitHub, rustPlatform, CoreServices, darwin }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, CoreServices }:
 
 rustPlatform.buildRustPackage rec {
   pname = "mdbook";
-  version = "0.4.2";
+  version = "0.4.10";
 
   src = fetchFromGitHub {
     owner = "rust-lang-nursery";
     repo = "mdBook";
     rev = "v${version}";
-    sha256 = "0rkl5k7a9a0vx06jqvbgki2bwag0ar2pcbg3qi88xnjnnmphzpzj";
+    sha256 = "sha256-1Ddy/kb2Q7P+tzyEr3EC3qWm6MGSsDL3/vnPJLAm/J0=";
   };
 
-  cargoSha256 = "1zhlb6wnjnayq833h62nm3ndlhiz1qajw8w5ccc88b8q8m4ipd7c";
+  cargoSha256 = "sha256-x2BwnvEwTqz378aDE7OHWuEwNEsUnRudLq7sUJjHRpA=";
 
-  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ CoreServices ];
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Create books from MarkDown";
     homepage = "https://github.com/rust-lang-nursery/mdbook";
     license = [ licenses.mpl20 ];
diff --git a/pkgs/tools/text/mdcat/default.nix b/pkgs/tools/text/mdcat/default.nix
index 0d5f878af08..67f69ecc71d 100644
--- a/pkgs/tools/text/mdcat/default.nix
+++ b/pkgs/tools/text/mdcat/default.nix
@@ -1,38 +1,56 @@
-{ stdenv, fetchFromGitHub, rustPlatform, pkgconfig, openssl, Security, ansi2html }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, asciidoctor
+, openssl
+, Security
+, ansi2html
+, installShellFiles
+}:
 
 rustPlatform.buildRustPackage rec {
   pname = "mdcat";
-  version = "0.20.0";
+  version = "0.23.2";
 
   src = fetchFromGitHub {
     owner = "lunaryorn";
     repo = pname;
     rev = "mdcat-${version}";
-    hash = "sha256-1qxz6p7VaJ9eMcLQaTW/M4+Xo0WLihzyEAycbkjjPyA=";
+    sha256 = "sha256-PM6bx7qzEx4He9aX4WRO7ad/f9+wzT+gPGXKwYwG8+A=";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ openssl ] ++ stdenv.lib.optional stdenv.isDarwin Security;
+  nativeBuildInputs = [ pkg-config asciidoctor installShellFiles ];
+  buildInputs = [ openssl ]
+    ++ lib.optional stdenv.isDarwin Security;
 
-  cargoSha256 = "sha256-/mAwlxed1MOFUA1jDSrgPzJuURbKzwucBWORVVHlrt8=";
+  cargoSha256 = "sha256-GL9WGoyM1++QFAR+bzj0XkjaRaDCWcbcahles5amNpk=";
 
   checkInputs = [ ansi2html ];
-  checkPhase = ''
-    # Skip tests that use the network and that include files.
-    cargo test -- \
-      --skip magic::tests::detect_mimetype_of_larger_than_magic_param_bytes_max_length \
-      --skip magic::tests::detect_mimetype_of_magic_param_bytes_max_length \
-      --skip magic::tests::detect_mimetype_of_png_image \
-      --skip magic::tests::detect_mimetype_of_svg_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 \
-      --skip iterm2_tests_render_md_samples_images_md
+  # Skip tests that use the network and that include files.
+  checkFlags = [
+    "--skip magic::tests::detect_mimetype_of_larger_than_magic_param_bytes_max_length"
+    "--skip magic::tests::detect_mimetype_of_magic_param_bytes_max_length"
+    "--skip magic::tests::detect_mimetype_of_png_image"
+    "--skip magic::tests::detect_mimetype_of_svg_image"
+    "--skip resources::tests::read_url_with_http_url_fails_when_size_limit_is_exceeded"
+    "--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"
+    "--skip iterm2_tests_render_md_samples_images_md"
+  ];
+
+  postInstall = ''
+    installManPage $releaseDir/build/mdcat-*/out/mdcat.1
+    installShellCompletion --bash $releaseDir/build/mdcat-*/out/completions/mdcat.bash
+    installShellCompletion --fish $releaseDir/build/mdcat-*/out/completions/mdcat.fish
+    installShellCompletion --zsh $releaseDir/build/mdcat-*/out/completions/_mdcat
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "cat for markdown";
     homepage = "https://github.com/lunaryorn/mdcat";
     license = with licenses; [ asl20 ];
-    maintainers = with maintainers; [ davidtwco ];
+    maintainers = with maintainers; [ davidtwco SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/text/mecab/default.nix b/pkgs/tools/text/mecab/default.nix
index 32060a6179a..c579dcb8a17 100644
--- a/pkgs/tools/text/mecab/default.nix
+++ b/pkgs/tools/text/mecab/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, mecab-ipadic }:
+{ lib, stdenv, fetchurl, mecab-ipadic }:
 
 let
   mecab-base = import ./base.nix { inherit fetchurl; };
@@ -10,7 +10,7 @@ stdenv.mkDerivation (mecab-base // {
       sed -i 's|^dicdir = .*$|dicdir = ${mecab-ipadic}|' "$out/etc/mecabrc"
     '';
 
-    meta = with stdenv.lib; {
+    meta = with lib; {
       description = "Japanese morphological analysis system";
       homepage = "http://taku910.github.io/mecab/";
       license = licenses.bsd3;
diff --git a/pkgs/tools/text/miller/default.nix b/pkgs/tools/text/miller/default.nix
index 4137fd4d278..670c0612b39 100644
--- a/pkgs/tools/text/miller/default.nix
+++ b/pkgs/tools/text/miller/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchFromGitHub, autoreconfHook, flex, libtool }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, flex, libtool }:
 
 stdenv.mkDerivation rec {
   pname = "miller";
 
-  version = "5.9.0";
+  version = "5.10.2";
 
   src = fetchFromGitHub {
     owner = "johnkerl";
     repo = "miller";
     rev = "v${version}";
-    sha256 = "14fi6jlqb980qjcpb90fk85cglskq9b9i2k0216bhpvjmagywgp7";
+    sha256 = "sha256-NI57U3FpUfQ6ouBEYrzzG+9kpL58BD4HoAuRAFJMO9k=";
   };
 
   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.";
+  meta = with lib; {
+    description = "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 ];
diff --git a/pkgs/tools/text/mpage/default.nix b/pkgs/tools/text/mpage/default.nix
index e86c9f2ad26..99cfec97a70 100644
--- a/pkgs/tools/text/mpage/default.nix
+++ b/pkgs/tools/text/mpage/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv }:
+{ fetchurl, lib, stdenv }:
 
 stdenv.mkDerivation rec {
   name = "mpage-2.5.7";
@@ -7,8 +7,9 @@ stdenv.mkDerivation rec {
     sha256 = "1zn37r5xrvjgjbw2bdkc0r7s6q8b1krmcryzj0yf0dyxbx79rasi";
   };
 
-  patchPhase = ''
+  postPatch = ''
     sed -i "Makefile" -e "s|^ *PREFIX *=.*$|PREFIX = $out|g"
+    substituteInPlace Makefile --replace 'gcc' '${stdenv.cc.targetPrefix}cc'
   '';
 
   meta = {
@@ -24,6 +25,6 @@ stdenv.mkDerivation rec {
 
     license = "liberal";  # a non-copyleft license, see `Copyright' file
     homepage = "http://www.mesa.nl/pub/mpage/";
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/text/multitran/data/default.nix b/pkgs/tools/text/multitran/data/default.nix
index 9b431f5b30b..a94f5bc9688 100644
--- a/pkgs/tools/text/multitran/data/default.nix
+++ b/pkgs/tools/text/multitran/data/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl} :
+{lib, 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:
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
   meta = {
     homepage = "http://multitran.sourceforge.net/";
     description = "Multitran data english-russian";
-    license = stdenv.lib.licenses.gpl2;
-    platforms = stdenv.lib.platforms.unix;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/text/multitran/libbtree/default.nix b/pkgs/tools/text/multitran/libbtree/default.nix
index 9a7e0fdbd07..893c1e1d931 100644
--- a/pkgs/tools/text/multitran/libbtree/default.nix
+++ b/pkgs/tools/text/multitran/libbtree/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl} :
+{lib, stdenv, fetchurl} :
 
 stdenv.mkDerivation {
   name = "libbtree-0.0.1alpha2";
@@ -13,7 +13,7 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/text/multitran/libfacet/default.nix b/pkgs/tools/text/multitran/libfacet/default.nix
index f359819aa73..3895f3a922c 100644
--- a/pkgs/tools/text/multitran/libfacet/default.nix
+++ b/pkgs/tools/text/multitran/libfacet/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, libmtsupport }:
+{ lib, stdenv, fetchurl, libmtsupport }:
 
 stdenv.mkDerivation {
   name = "libfacet-0.0.1alpha2";
-  
+
   src = fetchurl {
     url = "mirror://sourceforge/multitran/libfacet-0.0.1alpha2.tar.bz2";
     sha256 = "dc53351c4035a3c27dc6c1d0410e808346fbc107e7e7c112ec65c59d0df7a144";
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
   meta = {
     homepage = "http://multitran.sourceforge.net/";
     description = "Multitran lib: enchanced locale facets";
-    license = stdenv.lib.licenses.gpl2;
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/text/multitran/libmtquery/default.nix b/pkgs/tools/text/multitran/libmtquery/default.nix
index 2c03de6ede8..3b7dd681e8a 100644
--- a/pkgs/tools/text/multitran/libmtquery/default.nix
+++ b/pkgs/tools/text/multitran/libmtquery/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, libmtsupport, libfacet, libbtree, multitrandata } :
+{lib, stdenv, fetchurl, libmtsupport, libfacet, libbtree, multitrandata } :
 
 stdenv.mkDerivation {
   name = "libmtquery-0.0.1alpha3";
@@ -23,7 +23,7 @@ stdenv.mkDerivation {
   meta = {
     homepage = "http://multitran.sourceforge.net/";
     description = "Multitran lib: main engine to query translations";
-    license = stdenv.lib.licenses.gpl2;
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/text/multitran/libmtsupport/default.nix b/pkgs/tools/text/multitran/libmtsupport/default.nix
index bc5a77be4fb..eebc88189f2 100644
--- a/pkgs/tools/text/multitran/libmtsupport/default.nix
+++ b/pkgs/tools/text/multitran/libmtsupport/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl} :
+{lib, stdenv, fetchurl} :
 
 stdenv.mkDerivation {
   name = "libmtsupport-0.0.1alpha2";
@@ -13,7 +13,7 @@ stdenv.mkDerivation {
   meta = {
     homepage = "http://multitran.sourceforge.net/";
     description = "Multitran lib: basic useful functions";
-    license = stdenv.lib.licenses.gpl2;
-    platforms = stdenv.lib.platforms.linux;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/text/multitran/mtutils/default.nix b/pkgs/tools/text/multitran/mtutils/default.nix
index 9d701421d11..00325276fdb 100644
--- a/pkgs/tools/text/multitran/mtutils/default.nix
+++ b/pkgs/tools/text/multitran/mtutils/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, libmtsupport, libfacet, libbtree, libmtquery, help2man} :
+{lib, stdenv, fetchurl, libmtsupport, libfacet, libbtree, libmtquery, help2man} :
 
 stdenv.mkDerivation {
   name = "mt-utils-0.0.1alpha3";
@@ -25,8 +25,8 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
   };
 }
diff --git a/pkgs/tools/text/namazu/default.nix b/pkgs/tools/text/namazu/default.nix
index 93fc9dc75de..e748515b051 100644
--- a/pkgs/tools/text/namazu/default.nix
+++ b/pkgs/tools/text/namazu/default.nix
@@ -1,30 +1,21 @@
-{ fetchurl, stdenv, perl }:
+{ fetchurl, lib, stdenv, perl, perlPackages, makeWrapper }:
 
 stdenv.mkDerivation rec {
-  name = "namazu-2.0.21";
+  pname = "namazu";
+  version = "2.0.21";
 
   src = fetchurl {
-    url = "http://namazu.org/stable/${name}.tar.gz";
+    url = "http://namazu.org/stable/${pname}-${version}.tar.gz";
     sha256 = "1xvi7hrprdchdpzhg3fvk4yifaakzgydza5c0m50h1yvg6vay62w";
   };
 
-  buildInputs = [ perl ];
+  buildInputs = [ perl perlPackages.FileMMagic ];
+  nativeBuildInputs = [ makeWrapper ];
 
-  # 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"
+  postInstall = ''
+    wrapProgram $out/bin/mknmz --set PERL5LIB ${perlPackages.makeFullPerlPath [ perlPackages.FileMMagic ]}
   '';
 
-  # 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";
 
@@ -34,11 +25,10 @@ stdenv.mkDerivation rec {
       but also as a personal search system for email or other files.
     '';
 
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
     homepage = "http://namazu.org/";
 
-    platforms = stdenv.lib.platforms.gnu ++ stdenv.lib.platforms.linux;  # arbitrary choice
+    platforms = lib.platforms.gnu ++ lib.platforms.linux;  # arbitrary choice
     maintainers = [ ];
-    broken = true; # File-MMagic is not compatible with our Perl version
   };
 }
diff --git a/pkgs/tools/text/nawk/default.nix b/pkgs/tools/text/nawk/default.nix
index aafce117ee4..580d30a5833 100644
--- a/pkgs/tools/text/nawk/default.nix
+++ b/pkgs/tools/text/nawk/default.nix
@@ -1,26 +1,28 @@
-{ stdenv, fetchFromGitHub, yacc }:
+{ lib, stdenv, fetchFromGitHub, bison, buildPackages }:
 
 stdenv.mkDerivation rec {
   pname = "nawk";
-  version = "20180827";
+  version = "unstable-2021-02-15";
 
   src = fetchFromGitHub {
     owner = "onetrueawk";
     repo = "awk";
-    rev = version;
-    sha256 = "0qcsxhcwg6g3c0zxmbipqa8d8d5n8zxrq0hymb8yavsaz103fcl6";
+    rev = "c0f4e97e4561ff42544e92512bbaf3d7d1f6a671";
+    sha256 = "kQCvItpSJnDJMDvlB8ruY+i0KdjmAphRDqCKw8f0m/8=";
   };
 
-  nativeBuildInputs = [ yacc ];
-
-  patchPhase = ''
-    substituteInPlace ./makefile \
-    --replace "YACC = yacc -d -S" ""
-  '';
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ bison ];
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "HOSTCC=${if stdenv.buildPlatform.isDarwin then "clang" else "cc"}"
+  ];
 
   installPhase = ''
+    runHook preInstall
     install -Dm755 a.out "$out/bin/nawk"
     install -Dm644 awk.1 "$out/share/man/man1/nawk.1"
+    runHook postInstall
   '';
 
   meta = {
@@ -31,8 +33,8 @@ stdenv.mkDerivation rec {
        (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;
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.konimex ];
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/text/nkf/default.nix b/pkgs/tools/text/nkf/default.nix
index 8a314d44843..a2b5f66a6e9 100644
--- a/pkgs/tools/text/nkf/default.nix
+++ b/pkgs/tools/text/nkf/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "nkf";
@@ -14,8 +14,8 @@ stdenv.mkDerivation rec {
   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 ];
+    license = lib.licenses.zlib;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.auntie ];
   };
 }
diff --git a/pkgs/tools/text/num-utils/default.nix b/pkgs/tools/text/num-utils/default.nix
new file mode 100644
index 00000000000..14784a4e8cf
--- /dev/null
+++ b/pkgs/tools/text/num-utils/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "num-utils";
+  version = "0.5";
+
+  src = fetchurl {
+    url = "https://suso.suso.org/programs/num-utils/downloads/num-utils-${version}.tar.gz";
+    sha256 = "0kn6yskjww2agcqvas5l2xp55mp4njdxqkdicchlji3qzih2fn83";
+  };
+
+  buildInputs = [ perl ];
+
+  patchPhase = ''
+    substituteInPlace Makefile --replace "-o 0 -g 0" "" --replace "\$(RPMDIR)" ""
+  '';
+  makeFlags = [
+    "TOPDIR=${placeholder "out"}"
+    "PERL=${perl}/bin/perl"
+  ];
+
+  meta = with lib; {
+    description = "Programs for dealing with numbers from the command line";
+    homepage = "https://suso.suso.org/xulu/Num-utils";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.catern ];
+  };
+}
diff --git a/pkgs/tools/text/numdiff/default.nix b/pkgs/tools/text/numdiff/default.nix
index 6e0c7e75649..317d29003cd 100644
--- a/pkgs/tools/text/numdiff/default.nix
+++ b/pkgs/tools/text/numdiff/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl, libintl }:
 
 
 stdenv.mkDerivation rec {
@@ -9,7 +9,10 @@ stdenv.mkDerivation rec {
     url = "mirror://savannah/numdiff/numdiff-${version}.tar.gz";
     sha256 = "1vzmjh8mhwwysn4x4m2vif7q2k8i19x8azq7pzmkwwj4g48lla47";
   };
-  meta = with stdenv.lib; {
+
+  buildInputs = [ libintl ];
+
+  meta = with 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
@@ -18,6 +21,6 @@ stdenv.mkDerivation rec {
     homepage = "https://www.nongnu.org/numdiff/";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [];
-    platforms = platforms.gnu ++ platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/text/ocrmypdf/0001-Make-compatible-with-pdfminer.six-version-20200720.patch b/pkgs/tools/text/ocrmypdf/0001-Make-compatible-with-pdfminer.six-version-20200720.patch
deleted file mode 100644
index 967bcd3948c..00000000000
--- a/pkgs/tools/text/ocrmypdf/0001-Make-compatible-with-pdfminer.six-version-20200720.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 4315b58e0bffedd145cec61f96062292cd98278e Mon Sep 17 00:00:00 2001
-From: Pascal Bach <pascal.bach@nextrem.ch>
-Date: Thu, 23 Jul 2020 21:37:33 +0200
-Subject: [PATCH] Make compatible with pdfminer.six version 20200720
-
----
- setup.py                       | 2 +-
- src/ocrmypdf/pdfinfo/layout.py | 8 ++++++--
- 2 files changed, 7 insertions(+), 3 deletions(-)
-
-diff --git a/setup.py b/setup.py
-index bd95ed9..d1f4ab1 100644
---- a/setup.py
-+++ b/setup.py
-@@ -83,7 +83,7 @@ setup(
-         'cffi >= 1.9.1',  # must be a setup and install requirement
-         'coloredlogs >= 14.0',  # strictly optional
-         'img2pdf >= 0.3.0, < 0.4',  # pure Python, so track HEAD closely
--        'pdfminer.six >= 20191110, <= 20200517',
-+        'pdfminer.six >= 20191110, <= 20200720',
-         'pikepdf >= 1.14.0, < 2',
-         'Pillow >= 7.0.0',
-         'pluggy >= 0.13.0',
-diff --git a/src/ocrmypdf/pdfinfo/layout.py b/src/ocrmypdf/pdfinfo/layout.py
-index 98bd82e..8b41e14 100644
---- a/src/ocrmypdf/pdfinfo/layout.py
-+++ b/src/ocrmypdf/pdfinfo/layout.py
-@@ -26,7 +26,11 @@ import pdfminer.pdfdevice
- import pdfminer.pdfinterp
- from pdfminer.converter import PDFLayoutAnalyzer
- from pdfminer.layout import LAParams, LTChar, LTPage, LTTextBox
--from pdfminer.pdfdocument import PDFTextExtractionNotAllowed
-+try:
-+    from pdfminer.pdfdocument import PDFTextExtractionNotAllowedError
-+except ImportError:
-+    # Fallback for pdfminer < 20200720
-+    from pdfminer.pdfdocument import PDFTextExtractionNotAllowed as PDFTextExtractionNotAllowedError
- from pdfminer.pdffont import PDFSimpleFont, PDFUnicodeNotDefined
- from pdfminer.pdfpage import PDFPage
- from pdfminer.utils import bbox2str, matrix2str
-@@ -239,7 +243,7 @@ def get_page_analysis(infile, pageno, pscript5_mode):
-         with Path(infile).open('rb') as f:
-             page = PDFPage.get_pages(f, pagenos=[pageno], maxpages=0)
-             interp.process_page(next(page))
--    except PDFTextExtractionNotAllowed:
-+    except PDFTextExtractionNotAllowedError:
-         raise EncryptedPdfError()
-     finally:
-         if pscript5_mode:
--- 
-2.27.0
-
diff --git a/pkgs/tools/text/ocrmypdf/default.nix b/pkgs/tools/text/ocrmypdf/default.nix
index b7864b05b6e..0dff6d76fff 100644
--- a/pkgs/tools/text/ocrmypdf/default.nix
+++ b/pkgs/tools/text/ocrmypdf/default.nix
@@ -7,6 +7,7 @@
 , python3
 , python3Packages
 , qpdf
+, lib
 , stdenv
 , tesseract4
 , unpaper
@@ -29,21 +30,19 @@ let
 in
 buildPythonApplication rec {
   pname = "ocrmypdf";
-  version = "10.3.0";
-  disabled = ! python3Packages.isPy3k;
+  version = "12.3.0";
 
   src = fetchFromGitHub {
     owner = "jbarlow83";
     repo = "OCRmyPDF";
     rev = "v${version}";
-    sha256 = "0c6v7846lmkmbyfla07s35mpba4h09h0fx6pxqf0yvdjxmj46q8c";
+    sha256 = "122yv3p0v4fbx30zgppcznwnm7svg97gv0sa103xb6zcld68ggn2";
   };
 
   nativeBuildInputs = with python3Packages; [
-    pytestrunner
     setuptools
     setuptools-scm-git-archive
-    setuptools_scm
+    setuptools-scm
   ];
 
   propagatedBuildInputs = with python3Packages; [
@@ -64,9 +63,8 @@ buildPythonApplication rec {
     pypdf2
     pytest
     pytest-helpers-namespace
-    pytest_xdist
-    pytestcov
-    pytestrunner
+    pytest-xdist
+    pytest-cov
     python-xmp-toolkit
     pytestCheckHook
   ] ++ runtimeDeps;
@@ -74,19 +72,18 @@ buildPythonApplication rec {
   patches = [
     (substituteAll {
       src = ./liblept.patch;
-      liblept = "${stdenv.lib.getLib leptonica}/lib/liblept${stdenv.hostPlatform.extensions.sharedLibrary}";
+      liblept = "${lib.getLib leptonica}/lib/liblept${stdenv.hostPlatform.extensions.sharedLibrary}";
     })
-    # https://github.com/jbarlow83/OCRmyPDF/pull/596
-    ./0001-Make-compatible-with-pdfminer.six-version-20200720.patch
   ];
 
-  makeWrapperArgs = [ "--prefix PATH : ${stdenv.lib.makeBinPath [ ghostscript jbig2enc pngquant qpdf tesseract4 unpaper ]}" ];
+  makeWrapperArgs = [ "--prefix PATH : ${lib.makeBinPath [ ghostscript jbig2enc pngquant qpdf tesseract4 unpaper ]}" ];
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    license = with licenses; [ mpl20 mit ];
     platforms = platforms.linux;
     maintainers = [ maintainers.kiwi ];
+    changelog  = "https://github.com/jbarlow83/OCRmyPDF/blob/v${version}/docs/release_notes.rst";
   };
 }
diff --git a/pkgs/tools/text/odt2txt/default.nix b/pkgs/tools/text/odt2txt/default.nix
index 2a64533a459..0eb18e8435d 100644
--- a/pkgs/tools/text/odt2txt/default.nix
+++ b/pkgs/tools/text/odt2txt/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, zlib, libiconv }:
+{ lib, stdenv, fetchurl, zlib, libiconv }:
 
 stdenv.mkDerivation rec {
   pname = "odt2txt";
@@ -16,8 +16,8 @@ stdenv.mkDerivation rec {
   meta = {
     description = "Simple .odt to .txt converter";
     homepage = "https://github.com/dstosberg/odt2txt";
-    platforms = stdenv.lib.platforms.all;
-    license = stdenv.lib.licenses.gpl2;
+    platforms = lib.platforms.all;
+    license = lib.licenses.gpl2;
     maintainers = [ ];
   };
 }
diff --git a/pkgs/tools/text/opencc/default.nix b/pkgs/tools/text/opencc/default.nix
index 54027de9acd..f99062de413 100644
--- a/pkgs/tools/text/opencc/default.nix
+++ b/pkgs/tools/text/opencc/default.nix
@@ -1,29 +1,26 @@
-{ stdenv, fetchFromGitHub, cmake, python }:
+{ lib, stdenv, fetchFromGitHub, cmake, python }:
 
 stdenv.mkDerivation rec {
   pname = "opencc";
-  version = "1.0.6";
+  version = "1.1.2";
 
   src = fetchFromGitHub {
     owner = "BYVoid";
     repo = "OpenCC";
     rev = "ver.${version}";
-    sha256 = "1ygj2ygxsva72hs6cm0a6wdd2rp71k4nm0pd7cb20y2srdlzvdqk";
+    sha256 = "1a15p9idznh23b44r7rw2zjnirbxjs5pyq3k6xkz0k64cdh2zq6h";
   };
 
   nativeBuildInputs = [ cmake python ];
 
   # let intermediate tools find intermediate library
-  preBuild = stdenv.lib.optionalString stdenv.isLinux ''
+  preBuild = lib.optionalString stdenv.isLinux ''
     export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}$(pwd)/src
-  '' + stdenv.lib.optionalString stdenv.isDarwin ''
+  '' + lib.optionalString stdenv.isDarwin ''
     export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH''${DYLD_LIBRARY_PATH:+:}$(pwd)/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; {
+  meta = with lib; {
     homepage = "https://github.com/BYVoid/OpenCC";
     license = licenses.asl20;
     description = "A project for conversion between Traditional and Simplified Chinese";
diff --git a/pkgs/tools/text/papertrail/default.nix b/pkgs/tools/text/papertrail/default.nix
index d635fab74d5..c3d005a97e0 100644
--- a/pkgs/tools/text/papertrail/default.nix
+++ b/pkgs/tools/text/papertrail/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, bundlerEnv, ruby, bundlerUpdateScript }:
+{ lib, stdenv, bundlerEnv, ruby, bundlerUpdateScript }:
 
 let
   papertrail-env = bundlerEnv {
@@ -11,7 +11,7 @@ let
 in stdenv.mkDerivation {
   name = "papertrail-${(import ./gemset.nix).papertrail.version}";
 
-  phases = [ "installPhase" ];
+  dontUnpack = true;
 
   installPhase = ''
     mkdir -p $out/bin
@@ -20,7 +20,7 @@ in stdenv.mkDerivation {
 
   passthru.updateScript = bundlerUpdateScript "papertrail";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Command-line client for Papertrail log management service";
     homepage    = "https://github.com/papertrail/papertrail-cli/";
     license     = licenses.mit;
diff --git a/pkgs/tools/text/papertrail/gemset.nix b/pkgs/tools/text/papertrail/gemset.nix
index 91bfe319896..dcdfcdf7ea5 100644
--- a/pkgs/tools/text/papertrail/gemset.nix
+++ b/pkgs/tools/text/papertrail/gemset.nix
@@ -23,4 +23,4 @@
     };
     version = "0.10.1";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/text/par/default.nix b/pkgs/tools/text/par/default.nix
index 54b5e6566e8..e4c6c5d0c08 100644
--- a/pkgs/tools/text/par/default.nix
+++ b/pkgs/tools/text/par/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, fetchpatch}:
+{lib, stdenv, fetchurl, fetchpatch}:
 
 stdenv.mkDerivation {
   pname = "par";
@@ -18,7 +18,10 @@ stdenv.mkDerivation {
     })
   ];
 
-  buildPhase = ''make -f protoMakefile'';
+  makefile = "protoMakefile";
+  preBuild = ''
+    makeFlagsArray+=(CC="${stdenv.cc.targetPrefix}cc -c" LINK1=${stdenv.cc.targetPrefix}cc)
+  '';
 
   installPhase = ''
     mkdir -p $out/bin
@@ -29,7 +32,7 @@ stdenv.mkDerivation {
   '';
 
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "http://www.nicemice.net/par/";
     description = "Paragraph reflow for email";
     platforms = platforms.unix;
diff --git a/pkgs/tools/text/patchutils/generic.nix b/pkgs/tools/text/patchutils/generic.nix
index 52961e58c0e..d3e9da242e2 100644
--- a/pkgs/tools/text/patchutils/generic.nix
+++ b/pkgs/tools/text/patchutils/generic.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl
+{ lib, stdenv, fetchurl, perl
 , version, sha256, patches ? []
 , ...
 }:
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
 
   doCheck = false; # fails
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Tools to manipulate patch files";
     homepage = "http://cyberelk.net/tim/software/patchutils";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/text/pbgopy/default.nix b/pkgs/tools/text/pbgopy/default.nix
new file mode 100644
index 00000000000..d4ed4eb0f03
--- /dev/null
+++ b/pkgs/tools/text/pbgopy/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pbgopy";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "nakabonne";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-P/MFDFMsqSTVErTM9izJJSMIbiOcbQ9Ya10/w6NRcYw=";
+  };
+
+  vendorSha256 = "sha256-S2X74My6wyDZOsEYTDilCFaYgV2vQzU0jOAY9cEkJ6A=";
+
+  meta = with lib; {
+    description = "Copy and paste between devices";
+    homepage = "https://github.com/nakabonne/pbgopy";
+    license = licenses.mit;
+    maintainers = [ maintainers.ivar ];
+  };
+}
diff --git a/pkgs/tools/text/peco/default.nix b/pkgs/tools/text/peco/default.nix
index c5655cb2a58..2928d532207 100644
--- a/pkgs/tools/text/peco/default.nix
+++ b/pkgs/tools/text/peco/default.nix
@@ -1,28 +1,25 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
-buildGoPackage rec {
+buildGoModule rec {
   pname = "peco";
-  version = "0.5.3";
+  version = "0.5.8";
 
-  goPackagePath = "github.com/peco/peco";
   subPackages = [ "cmd/peco" ];
 
   src = fetchFromGitHub {
     owner = "peco";
     repo = "peco";
     rev = "v${version}";
-    sha256 = "1m3s1jrrhqccgg3frfnq6iprwwi97j13wksckpcyrg51z6y5q041";
+    sha256 = "12xbqisk7bcy38fmjxcs069a0600gncbqzscqw6x37lgw6hlw52x";
   };
 
-  goDeps = ./deps.nix;
+  vendorSha256 = "1p8pc50ql2vqnn0crx0y558i3m0d6vcdaj3995h3f0908pnk6x7q";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Simplistic interactive filtering tool";
     homepage = "https://github.com/peco/peco";
+    changelog = "https://github.com/peco/peco/blob/v${version}/Changes";
     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/pkgs/tools/text/peco/deps.nix b/pkgs/tools/text/peco/deps.nix
deleted file mode 100644
index 29bae2de5b5..00000000000
--- a/pkgs/tools/text/peco/deps.nix
+++ /dev/null
@@ -1,57 +0,0 @@
-# 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/pkgs/tools/text/platinum-searcher/default.nix b/pkgs/tools/text/platinum-searcher/default.nix
index b53c5646e70..ca89b7dc2d8 100644
--- a/pkgs/tools/text/platinum-searcher/default.nix
+++ b/pkgs/tools/text/platinum-searcher/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "the_platinum_searcher";
@@ -16,9 +16,9 @@ buildGoPackage rec {
 
   goDeps = ./deps.nix;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/monochromegane/the_platinum_searcher";
-    description = "A code search tool similar to ack and the_silver_searcher(ag).";
+    description = "A code search tool similar to ack and the_silver_searcher(ag)";
     license = licenses.mit;
   };
 }
diff --git a/pkgs/tools/text/pn/default.nix b/pkgs/tools/text/pn/default.nix
new file mode 100644
index 00000000000..81e4c1eb358
--- /dev/null
+++ b/pkgs/tools/text/pn/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, cmake, libphonenumber, icu, protobuf }:
+
+stdenv.mkDerivation rec {
+  pname = "pn";
+  version = "unstable-2021-01-28";
+
+  src = fetchFromGitHub {
+    owner = "Orange-OpenSource";
+    repo = pname;
+    rev = "41e1215397129ed0d42b5f137fb35b5e0648edda";
+    sha256 = "1g8r7y230k01ghraa55g1bhz3fiz6bjdgcsddy2dfa5ih8c4s3jm";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libphonenumber icu protobuf ];
+
+  meta = with lib; {
+    description = "A libphonenumber command-line wrapper";
+    homepage = "https://github.com/Orange-OpenSource/pn";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.McSinyx ];
+  };
+}
diff --git a/pkgs/tools/text/podiff/default.nix b/pkgs/tools/text/podiff/default.nix
index bee2c7a1a8f..2078c75f136 100644
--- a/pkgs/tools/text/podiff/default.nix
+++ b/pkgs/tools/text/podiff/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation {
   pname = "podiff";
-  version = "1.1";
+  version = "1.3";
 
   src = fetchurl {
-    url = "ftp://download.gnu.org.ua/pub/release/podiff/podiff-1.1.tar.gz";
-    sha256 = "1zz6bcmka5zvk2rq775qv122lqh54aijkxlghvx7z0r6kh880x59";
+    url = "ftp://download.gnu.org.ua/pub/release/podiff/podiff-1.3.tar.gz";
+    sha256 = "sha256-7fpix+GkXsfpRgnkHtk1iXF6ILHri7BtUhNPK6sDQFA=";
   };
 
   patchPhase = ''
@@ -15,11 +15,11 @@ stdenv.mkDerivation {
     mkdir -p $out/share/man/man1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/text/poedit/default.nix b/pkgs/tools/text/poedit/default.nix
index ccd99a272b5..9a5226d98b2 100644
--- a/pkgs/tools/text/poedit/default.nix
+++ b/pkgs/tools/text/poedit/default.nix
@@ -1,23 +1,25 @@
-{ stdenv, fetchurl, autoconf, automake, libtool, gettext, pkgconfig, wxGTK30,
-  boost, icu, lucenepp, asciidoc, libxslt, xmlto, gtk2, gtkspell2, pugixml,
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, gettext, pkg-config, wxGTK30-gtk3,
+  boost, icu, lucenepp, asciidoc, libxslt, xmlto, gtk3, gtkspell3, pugixml,
   nlohmann_json, hicolor-icon-theme, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
   pname = "poedit";
-  version = "2.3.1";
+  version = "2.4.3";
 
-  src = fetchurl {
-    url = "https://github.com/vslavik/poedit/archive/v${version}-oss.tar.gz";
-    sha256 = "04f9za35rwyr7mabk8f8izc0fgvc3sfx45v8dml1xmi634n174ds";
+  src = fetchFromGitHub {
+    owner = "vslavik";
+    repo = "poedit";
+    rev = "v${version}-oss";
+    sha256 = "02xf2w3d2lnr3vqmil9vvg9pir7d21x4zrj9xwpgb7dhs0gimj0x";
   };
 
-  nativeBuildInputs = [ autoconf automake asciidoc wrapGAppsHook 
-    libxslt xmlto boost libtool pkgconfig ];
+  nativeBuildInputs = [ autoconf automake asciidoc wrapGAppsHook
+    libxslt xmlto boost libtool pkg-config ];
 
-  buildInputs = [ lucenepp nlohmann_json wxGTK30 icu pugixml gtk2 gtkspell2 hicolor-icon-theme ];
+  buildInputs = [ lucenepp nlohmann_json wxGTK30-gtk3 icu pugixml gtk3 gtkspell3 hicolor-icon-theme ];
 
   propagatedBuildInputs = [ gettext ];
-  
+
   preConfigure = "
     patchShebangs bootstrap
     ./bootstrap
@@ -29,18 +31,18 @@ stdenv.mkDerivation rec {
     "--with-boost-libdir=${boost.out}/lib"
     "CPPFLAGS=-I${nlohmann_json}/include/nlohmann/"
   ];
- 
+
   preFixup = ''
-    gappsWrapperArgs+=(--prefix PATH : "${stdenv.lib.makeBinPath [ gettext ]}")
+    gappsWrapperArgs+=(--prefix PATH : "${lib.makeBinPath [ gettext ]}")
   '';
- 
+
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    maintainers = with maintainers; [ dasj19 ];
   };
 }
diff --git a/pkgs/tools/text/popfile/default.nix b/pkgs/tools/text/popfile/default.nix
index b7134ba7356..e2f5952077f 100644
--- a/pkgs/tools/text/popfile/default.nix
+++ b/pkgs/tools/text/popfile/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchzip, makeWrapper, perlPackages,
+{ lib, stdenv, fetchzip, makeWrapper, perlPackages,
 ... }:
 
 stdenv.mkDerivation rec {
@@ -12,7 +12,8 @@ stdenv.mkDerivation rec {
     stripRoot = false;
   };
 
-  buildInputs = [ makeWrapper ] ++ (with perlPackages; [
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = (with perlPackages; [
     ## These are all taken from the popfile documentation as applicable to Linux
     ## http://getpopfile.org/docs/howtos:allplatformsrequireperl
     perl
@@ -49,11 +50,11 @@ stdenv.mkDerivation rec {
   meta = {
     description = "An email classification system that automatically sorts messages and fights spam";
     homepage = "http://getpopfile.org";
-    license = stdenv.lib.licenses.gpl2;
+    license = 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;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/text/proselint/default.nix b/pkgs/tools/text/proselint/default.nix
index 36a68f9406d..143c43f660d 100644
--- a/pkgs/tools/text/proselint/default.nix
+++ b/pkgs/tools/text/proselint/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, buildPythonApplication, click, future, six }:
+{ lib, fetchurl, buildPythonApplication, click, future, six }:
 
 buildPythonApplication rec {
   pname = "proselint";
@@ -13,7 +13,7 @@ buildPythonApplication rec {
 
   propagatedBuildInputs = [ click future six ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A linter for prose";
     homepage = "http://proselint.com";
     license = licenses.bsd3;
diff --git a/pkgs/tools/text/qgrep/default.nix b/pkgs/tools/text/qgrep/default.nix
index 30873e89d1b..032e9474128 100644
--- a/pkgs/tools/text/qgrep/default.nix
+++ b/pkgs/tools/text/qgrep/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, CoreServices, CoreFoundation, fetchpatch }:
+{ lib, stdenv, fetchFromGitHub, CoreServices, CoreFoundation, fetchpatch }:
 
 stdenv.mkDerivation rec {
   version = "1.1";
@@ -12,25 +12,25 @@ stdenv.mkDerivation rec {
     fetchSubmodules = true;
   };
 
-  patches = stdenv.lib.optionals stdenv.isDarwin [
+  patches = lib.optionals stdenv.isDarwin [
     (fetchpatch {
       url = "https://github.com/zeux/qgrep/commit/21c4d1a5ab0f0bdaa0b5ca993c1315c041418cc6.patch";
       sha256 = "0wpxzrd9pmhgbgby17vb8279xwvkxfdd99gvv7r74indgdxqg7v8";
     })
   ];
 
-  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ CoreServices CoreFoundation ];
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices CoreFoundation ];
 
-  postPatch = stdenv.lib.optionalString stdenv.isAarch64 ''
+  postPatch = lib.optionalString stdenv.isAarch64 ''
     substituteInPlace Makefile \
       --replace "-msse2" "" --replace "-DUSE_SSE2" ""
   '';
 
-  installPhase = '' 
+  installPhase = ''
     install -Dm755 qgrep $out/bin/qgrep
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Fast regular expression grep for source code with incremental index updates";
     homepage = "https://github.com/zeux/qgrep";
     license = licenses.mit;
diff --git a/pkgs/tools/text/qprint/default.nix b/pkgs/tools/text/qprint/default.nix
index d616d15ad75..e2621ab1876 100644
--- a/pkgs/tools/text/qprint/default.nix
+++ b/pkgs/tools/text/qprint/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv }:
+{ fetchurl, lib, stdenv }:
 
 stdenv.mkDerivation rec {
   name = "qprint-1.1";
@@ -19,10 +19,10 @@ stdenv.mkDerivation rec {
 
   meta = {
     homepage = "http://www.fourmilab.ch/webtools/qprint/";
-    license = stdenv.lib.licenses.publicDomain;
+    license = lib.licenses.publicDomain;
     description = "Encode and decode Quoted-Printable files";
-    maintainers = [ stdenv.lib.maintainers.tv ];
-    platforms = stdenv.lib.platforms.all;
+    maintainers = [ lib.maintainers.tv ];
+    platforms = lib.platforms.all;
   };
 
 }
diff --git a/pkgs/tools/text/qshowdiff/default.nix b/pkgs/tools/text/qshowdiff/default.nix
index bb2eeee8a9e..251427f03c5 100644
--- a/pkgs/tools/text/qshowdiff/default.nix
+++ b/pkgs/tools/text/qshowdiff/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, qt4, perl, pkgconfig }:
+{lib, stdenv, fetchurl, qt4, perl, pkg-config }:
 
 stdenv.mkDerivation rec {
   pname = "qshowdiff";
@@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "027959xbzvi5c2w9y1x122sr5i26k9mvp43banz2wln6gd860n1a";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ qt4 perl ];
 
   configurePhase = ''
@@ -20,6 +20,6 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "http://qshowdiff.danfis.cz/";
     description = "Colourful diff viewer";
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
   };
 }
diff --git a/pkgs/tools/text/reckon/Gemfile.lock b/pkgs/tools/text/reckon/Gemfile.lock
index 94f0f8f506c..b1bfe4aaa8b 100644
--- a/pkgs/tools/text/reckon/Gemfile.lock
+++ b/pkgs/tools/text/reckon/Gemfile.lock
@@ -2,14 +2,12 @@ GEM
   remote: https://rubygems.org/
   specs:
     chronic (0.10.2)
-    fastercsv (1.5.5)
-    highline (1.7.8)
-    reckon (0.4.4)
+    highline (2.0.3)
+    rchardet (1.8.0)
+    reckon (0.7.1)
       chronic (>= 0.3.0)
-      fastercsv (>= 1.5.1)
       highline (>= 1.5.2)
-      terminal-table (>= 1.4.2)
-    terminal-table (1.6.0)
+      rchardet (>= 1.8.0)
 
 PLATFORMS
   ruby
@@ -18,4 +16,4 @@ DEPENDENCIES
   reckon
 
 BUNDLED WITH
-   2.1.4
+   1.17.2
diff --git a/pkgs/tools/text/reckon/default.nix b/pkgs/tools/text/reckon/default.nix
index 261149229b6..3af64e39ed1 100644
--- a/pkgs/tools/text/reckon/default.nix
+++ b/pkgs/tools/text/reckon/default.nix
@@ -4,9 +4,9 @@ stdenv.mkDerivation rec {
   pname = "reckon";
   version = (import ./gemset.nix).reckon.version;
 
-  phases = [ "installPhase" ];
+  dontUnpack = true;
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
   installPhase = let
     env = bundlerEnv {
@@ -15,8 +15,10 @@ stdenv.mkDerivation rec {
       gemdir = ./.;
     };
   in ''
+    runHook preInstall
     mkdir -p $out/bin
     makeWrapper ${env}/bin/reckon $out/bin/reckon
+    runHook postInstall
   '';
 
   passthru.updateScript = bundlerUpdateScript "reckon";
diff --git a/pkgs/tools/text/reckon/gemset.nix b/pkgs/tools/text/reckon/gemset.nix
index e1e4a43188d..09a4e704d08 100644
--- a/pkgs/tools/text/reckon/gemset.nix
+++ b/pkgs/tools/text/reckon/gemset.nix
@@ -1,5 +1,7 @@
 {
   chronic = {
+    groups = ["default"];
+    platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
       sha256 = "1hrdkn4g8x7dlzxwb1rfgr8kw3bp4ywg5l4y4i9c2g5cwv62yvvn";
@@ -7,36 +9,35 @@
     };
     version = "0.10.2";
   };
-  fastercsv = {
-    source = {
-      remotes = ["https://rubygems.org"];
-      sha256 = "1df3vfgw5wg0s405z0pj0rfcvnl9q6wak7ka8gn0xqg4cag1k66h";
-      type = "gem";
-    };
-    version = "1.5.5";
-  };
   highline = {
+    groups = ["default"];
+    platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1nf5lgdn6ni2lpfdn4gk3gi47fmnca2bdirabbjbz1fk9w4p8lkr";
+      sha256 = "0yclf57n2j3cw8144ania99h1zinf8q3f5zrhqa754j6gl95rp9d";
       type = "gem";
     };
-    version = "1.7.8";
+    version = "2.0.3";
   };
-  reckon = {
+  rchardet = {
+    groups = ["default"];
+    platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1p6w8w7vpl8fq4yfggrxbv6ph76psg7l5b4q29a8zvfbzzx6a0xw";
+      sha256 = "1isj1b3ywgg2m1vdlnr41lpvpm3dbyarf1lla4dfibfmad9csfk9";
       type = "gem";
     };
-    version = "0.4.4";
+    version = "1.8.0";
   };
-  terminal-table = {
+  reckon = {
+    dependencies = ["chronic" "highline" "rchardet"];
+    groups = ["default"];
+    platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0hbmzfr17ji5ws5x5z3kypmb5irwwss7q7kkad0gs005ibqrxv0a";
+      sha256 = "0hsmzjxj1f5ma816gag1b3bdjbynhj2szgar955fcs3gbbzv4sk7";
       type = "gem";
     };
-    version = "1.6.0";
+    version = "0.7.1";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/text/recode/default.nix b/pkgs/tools/text/recode/default.nix
index b6503f88848..9b77c9d8b70 100644
--- a/pkgs/tools/text/recode/default.nix
+++ b/pkgs/tools/text/recode/default.nix
@@ -1,13 +1,13 @@
-{ stdenv, fetchurl, python3, perl, intltool, flex, texinfo, libiconv, libintl }:
+{ lib, stdenv, fetchurl, python3, perl, intltool, flex, texinfo, libiconv, libintl }:
 
 stdenv.mkDerivation rec {
   pname = "recode";
-  version = "3.7.7";
+  version = "3.7.8";
 
   # 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 = "1yrqgw74qrdmy82lxd1cxlfclrf2fqi0qp7afjmfc6b7f0xzcih9";
+    sha256 = "19yg20z1smj9kag1axgvc4s4kd6jmw75h0pa8xqxl3xqqyn5rdsg";
   };
 
   nativeBuildInputs = [ python3 python3.pkgs.cython perl intltool flex texinfo libiconv ];
@@ -18,8 +18,8 @@ stdenv.mkDerivation rec {
   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 ];
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ jcumming ];
   };
 }
diff --git a/pkgs/tools/text/replace/default.nix b/pkgs/tools/text/replace/default.nix
index 009c3dcd8c5..a0873d1c8d2 100644
--- a/pkgs/tools/text/replace/default.nix
+++ b/pkgs/tools/text/replace/default.nix
@@ -1,11 +1,12 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
-stdenv.mkDerivation {
-  name = "replace-2.24";
+stdenv.mkDerivation rec {
+  pname = "replace";
+  version = "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";
+    url = "http://hpux.connect.org.uk/ftp/hpux/Users/replace-${version}/replace-${version}-src-11.31.tar.gz";
+    sha256 = "18hkwhaz25s6209n5mpx9hmkyznlzygqj488p2l7nvp9zrlxb9sf";
   };
 
   outputs = [ "out" "man" ];
@@ -24,6 +25,6 @@ stdenv.mkDerivation {
   meta = {
     homepage = "https://replace.richardlloyd.org.uk/";
     description = "A tool to replace verbatim strings";
-    platforms = stdenv.lib.platforms.unix;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/text/rgxg/default.nix b/pkgs/tools/text/rgxg/default.nix
new file mode 100644
index 00000000000..8e4d991e7bf
--- /dev/null
+++ b/pkgs/tools/text/rgxg/default.nix
@@ -0,0 +1,18 @@
+{ lib, stdenv, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "rgxg";
+  version = "0.1.2";
+
+  src = fetchzip {
+    url = "https://github.com/rgxg/rgxg/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "050jxc3qhfrm9fdbzd67hlsqlp4qk1fa20q1g2v919sh7s6v77si";
+  };
+
+  meta = with lib; {
+    description = "A C library and a command-line tool to generate (extended) regular expressions";
+    license = licenses.zlib;
+    maintainers = with maintainers; [ hloeffler ];
+    homepage = "https://rgxg.github.io/";
+  };
+}
diff --git a/pkgs/tools/text/ripgrep-all/default.nix b/pkgs/tools/text/ripgrep-all/default.nix
index 8da7a54ebb2..0fc39b8da28 100644
--- a/pkgs/tools/text/ripgrep-all/default.nix
+++ b/pkgs/tools/text/ripgrep-all/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchFromGitHub, rustPlatform, makeWrapper, ffmpeg_3
+{ stdenv, lib, fetchFromGitHub, rustPlatform, makeWrapper, ffmpeg
 , pandoc, poppler_utils, ripgrep, Security, imagemagick, tesseract
 }:
 
@@ -13,13 +13,13 @@ rustPlatform.buildRustPackage rec {
     sha256 = "1wjpgi7m3lxybllkr3r60zaphp02ykq2syq72q9ail2760cjcir6";
   };
 
-  cargoSha256 = "0arwxqrpxdws4q1pnqzqkp1yv5aas08lkzh1vcgmf26j58sycniy";
+  cargoSha256 = "1l71xj5crfb51wfp2bdvdqp1l8kg182n5d6w23lq2wjszaqcj7cw";
   nativeBuildInputs = [ makeWrapper ];
   buildInputs = lib.optional stdenv.isDarwin Security;
 
   postInstall = ''
     wrapProgram $out/bin/rga \
-      --prefix PATH ":" "${lib.makeBinPath [ ffmpeg_3 pandoc poppler_utils ripgrep imagemagick tesseract ]}"
+      --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
@@ -46,7 +46,7 @@ rustPlatform.buildRustPackage rec {
 
   doInstallCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with 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.
@@ -58,5 +58,6 @@ rustPlatform.buildRustPackage rec {
     homepage = "https://github.com/phiresky/ripgrep-all";
     license = with licenses; [ agpl3Plus ];
     maintainers = with maintainers; [ zaninime ma27 ];
+    mainProgram = "rga";
   };
 }
diff --git a/pkgs/tools/text/ripgrep/default.nix b/pkgs/tools/text/ripgrep/default.nix
index 9a72e023d6d..3fa202135f5 100644
--- a/pkgs/tools/text/ripgrep/default.nix
+++ b/pkgs/tools/text/ripgrep/default.nix
@@ -1,43 +1,56 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , rustPlatform
 , asciidoctor
 , installShellFiles
+, pkg-config
 , Security
 , withPCRE2 ? true
-, pcre2 ? null
+, pcre2
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "ripgrep";
-  version = "12.1.1";
+  version = "13.0.0";
 
   src = fetchFromGitHub {
     owner = "BurntSushi";
     repo = pname;
     rev = version;
-    sha256 = "1hqps7l5qrjh9f914r5i6kmcz6f1yb951nv4lby0cjnp5l253kps";
+    sha256 = "0pdcjzfi0fclbzmmf701fdizb95iw427vy3m1svy6gdn2zwj3ldr";
   };
 
-  cargoSha256 = "03wf9r2csi6jpa7v5sw5lpxkrk4wfzwmzx7k3991q3bdjzcwnnwp";
+  cargoSha256 = "1kfdgh8dra4jxgcdb0lln5wwrimz0dpp33bq3h7jgs8ngaq2a9wp";
 
-  cargoBuildFlags = stdenv.lib.optional withPCRE2 "--features pcre2";
+  cargoBuildFlags = lib.optional withPCRE2 "--features pcre2";
 
-  nativeBuildInputs = [ asciidoctor installShellFiles ];
-  buildInputs = (stdenv.lib.optional withPCRE2 pcre2)
-  ++ (stdenv.lib.optional stdenv.isDarwin Security);
+  nativeBuildInputs = [ asciidoctor installShellFiles ]
+    ++ lib.optional withPCRE2 pkg-config;
+  buildInputs = lib.optional withPCRE2 pcre2
+    ++ lib.optional stdenv.isDarwin Security;
 
   preFixup = ''
     installManPage $releaseDir/build/ripgrep-*/out/rg.1
 
     installShellCompletion $releaseDir/build/ripgrep-*/out/rg.{bash,fish}
-    installShellCompletion --zsh "$src/complete/_rg"
+    installShellCompletion --zsh complete/_rg
   '';
 
-  meta = with stdenv.lib; {
+  doInstallCheck = true;
+  installCheckPhase = ''
+    file="$(mktemp)"
+    echo "abc\nbcd\ncde" > "$file"
+    $out/bin/rg -N 'bcd' "$file"
+    $out/bin/rg -N 'cd' "$file"
+  '' + lib.optionalString withPCRE2 ''
+    echo '(a(aa)aa)' | $out/bin/rg -P '\((a*|(?R))*\)'
+  '';
+
+  meta = with 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 zowoq ];
+    mainProgram = "rg";
   };
 }
diff --git a/pkgs/tools/text/robodoc/default.nix b/pkgs/tools/text/robodoc/default.nix
new file mode 100644
index 00000000000..e30e8739797
--- /dev/null
+++ b/pkgs/tools/text/robodoc/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "robodoc";
+  version = "4.99.44";
+
+  src = fetchFromGitHub {
+    owner = "gumpu";
+    repo = "ROBODoc";
+    rev = "v${version}";
+    sha256 = "l3prSdaGhOvXmZfCPbsZJNocO7y20zJjLQpajRTJOqE=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/gumpu/ROBODoc";
+    description = "Documentation Extraction Tool";
+    longDescription = ''
+      ROBODoc is program documentation tool. The idea is to include for every
+      function or procedure a standard header containing all sorts of
+      information about the procedure or function. ROBODoc extracts these
+      headers from the source file and puts them in a separate
+      autodocs-file. ROBODoc thus allows you to include the program
+      documentation in the source code and avoid having to maintain two separate
+      documents. Or as Petteri puts it: "robodoc is very useful - especially for
+      programmers who don't like writing documents with Word or some other
+      strange tool."
+
+      ROBODoc can format the headers in a number of different formats: HTML,
+      RTF, LaTeX, or XML DocBook. In HTML mode it can generate cross links
+      between headers. You can even include parts of your source code.
+
+      ROBODoc works with many programming languages: For instance C, Pascal,
+      Shell Scripts, Assembler, COBOL, Occam, Postscript, Forth, Tcl/Tk, C++,
+      Java -- basically any program in which you can use remarks/comments.
+    '';
+    license = with licenses; gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = with platforms; all;
+  };
+}
diff --git a/pkgs/tools/text/rpl/default.nix b/pkgs/tools/text/rpl/default.nix
index 7ac3790f8a9..97a30211621 100644
--- a/pkgs/tools/text/rpl/default.nix
+++ b/pkgs/tools/text/rpl/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pythonPackages }:
+{ lib, fetchFromGitHub, pythonPackages }:
 
 pythonPackages.buildPythonApplication rec {
   pname = "rpl";
@@ -14,7 +14,7 @@ pythonPackages.buildPythonApplication rec {
     sha256 = "1xhpgcmq91ivy9ijfyz5ilg51m7fz8ar2077r7gq246j8gbf8ggr";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Replace strings in files";
     homepage    = "https://github.com/kcoyner/rpl";
     license     = licenses.gpl2;
diff --git a/pkgs/tools/text/rs/default.nix b/pkgs/tools/text/rs/default.nix
index bd141f491d4..9aca92922a5 100644
--- a/pkgs/tools/text/rs/default.nix
+++ b/pkgs/tools/text/rs/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libbsd }:
+{ lib, stdenv, fetchurl, libbsd }:
 
 stdenv.mkDerivation rec {
   pname = "rs";
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
     install -Dm 644 rs.1 -t $out/share/man/man1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Reshape a data array from standard input";
     longDescription = ''
       rs reads the standard input, interpreting each line as a row of blank-
diff --git a/pkgs/tools/text/rst2html5/default.nix b/pkgs/tools/text/rst2html5/default.nix
index d20ce99dd74..c9e8b046986 100644
--- a/pkgs/tools/text/rst2html5/default.nix
+++ b/pkgs/tools/text/rst2html5/default.nix
@@ -1,19 +1,22 @@
-{ stdenv, fetchurl, pythonPackages }:
+{ lib, python3Packages }:
 
-pythonPackages.buildPythonPackage rec {
+let
   pname = "rst2html5";
-  version = "1.9.4";
+  version = "1.10.6";
+  format = "wheel";
+in python3Packages.buildPythonPackage {
+  inherit pname version format;
 
-  src = fetchurl {
-    url = "mirror://pypi/${builtins.substring 0 1 pname}/${pname}/${pname}-${version}.tar.gz";
-    sha256 = "d044589d30eeaf7336986078b7bd175510fd649a212b01a457d7806b279e6c73";
+  src = python3Packages.fetchPypi {
+    inherit pname version format;
+    sha256 = "sha256-jmToDFLQODqgTycBp2J8LyoJ1Zxho9w1VdhFMzvDFkg=";
   };
 
-  propagatedBuildInputs = with pythonPackages;
+  propagatedBuildInputs = with python3Packages;
   [ docutils genshi pygments beautifulsoup4 ];
 
-  meta = with stdenv.lib;{
-    homepage = "https://bitbucket.org/andre_felipe_dias/rst2html5";
+  meta = with lib;{
+    homepage = "https://pypi.org/project/rst2html5/";
     description = "Converts ReSTructuredText to (X)HTML5";
     license = licenses.mit;
     maintainers = with maintainers; [ AndersonTorres ];
diff --git a/pkgs/tools/text/ruby-zoom/gemset.nix b/pkgs/tools/text/ruby-zoom/gemset.nix
index f4c637aadf8..19584787d90 100644
--- a/pkgs/tools/text/ruby-zoom/gemset.nix
+++ b/pkgs/tools/text/ruby-zoom/gemset.nix
@@ -61,4 +61,4 @@
     };
     version = "1.0.0";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/text/ruplacer/default.nix b/pkgs/tools/text/ruplacer/default.nix
index 7ebf739414a..2f9249711ed 100644
--- a/pkgs/tools/text/ruplacer/default.nix
+++ b/pkgs/tools/text/ruplacer/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
 
 rustPlatform.buildRustPackage rec {
   pname = "ruplacer";
@@ -11,14 +11,14 @@ rustPlatform.buildRustPackage rec {
     sha256 = "0yj753d9wsnp4s5a71ph241jym5rfz3161a1v3qxfc4w23v86j1q";
   };
 
-  cargoSha256 = "0wrv4k63pc1v0apmxmmci9qaykcv9ig3nfxy6id5caqrckp73cr4";
+  cargoSha256 = "0z1i1yfj1wdzbzapnvfr9ngn9z30xwlkrfhz52npbirysy1al5xk";
 
-  buildInputs = (stdenv.lib.optional stdenv.isDarwin Security);
+  buildInputs = (lib.optional stdenv.isDarwin Security);
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Find and replace text in source files";
     homepage = "https://github.com/TankerHQ/ruplacer";
     license = [ licenses.bsd3 ];
-    maintainers = with maintainers; [ filalex77 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/text/schema2ldif/default.nix b/pkgs/tools/text/schema2ldif/default.nix
index 5df4e90ff1a..84196ae1119 100644
--- a/pkgs/tools/text/schema2ldif/default.nix
+++ b/pkgs/tools/text/schema2ldif/default.nix
@@ -1,4 +1,6 @@
-{ stdenv, fetchurl, makeWrapper, perlPackages }: stdenv.mkDerivation rec {
+{ lib, stdenv, fetchurl, makeWrapper, perlPackages }:
+
+stdenv.mkDerivation rec {
   pname = "schema2ldif";
   version = "1.3";
 
@@ -21,7 +23,7 @@
        --prefix PERL5PATH : "${perlPackages.makePerlPath [ perlPackages.GetoptLong ]}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Utilities to manage schema in .schema and .ldif format";
     homepage = "https://www.fusiondirectory.org/schema2ldif-project-and-components/";
     license = licenses.bsd3;
diff --git a/pkgs/tools/text/sd/default.nix b/pkgs/tools/text/sd/default.nix
index 1fa508b1ef6..009150062db 100644
--- a/pkgs/tools/text/sd/default.nix
+++ b/pkgs/tools/text/sd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform, Security
+{ lib, stdenv, fetchFromGitHub, rustPlatform, installShellFiles, Security
 }:
 
 rustPlatform.buildRustPackage rec {
@@ -12,14 +12,23 @@ rustPlatform.buildRustPackage rec {
     sha256 = "0c5bsqs6c55x4j640vhzlmbiylhp5agr7lx0jrwcjazfyvxihc01";
   };
 
-  cargoSha256 = "1mksmdp1wnsjd8gw1g3l16a24fk05xa9mxygc0qklr41bqf8kw8b";
+  cargoSha256 = "1iwgy9zzdxay6hb9pz47jchy03jrsy5csxijlq4i228qhqnvq1lr";
 
-  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ Security ];
+  nativeBuildInputs = [ installShellFiles ];
 
-  meta = with stdenv.lib; {
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  preFixup = ''
+    installManPage $releaseDir/build/sd-*/out/sd.1
+
+    installShellCompletion $releaseDir/build/sd-*/out/sd.{bash,fish}
+    installShellCompletion --zsh $releaseDir/build/sd-*/out/_sd
+  '';
+
+  meta = with lib; {
     description = "Intuitive find & replace CLI (sed alternative)";
     homepage = "https://github.com/chmln/sd";
     license = licenses.mit;
-    maintainers = with maintainers; [ amar1729 filalex77 ];
+    maintainers = with maintainers; [ amar1729 Br1ght0ne ];
   };
 }
diff --git a/pkgs/tools/text/sgml/jade/default.nix b/pkgs/tools/text/sgml/jade/default.nix
index f4110ed2105..338520b4df2 100644
--- a/pkgs/tools/text/sgml/jade/default.nix
+++ b/pkgs/tools/text/sgml/jade/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, gnum4 }:
+{ lib, stdenv, fetchurl, gnum4 }:
 
 stdenv.mkDerivation rec {
   name = "jade-${version}-${debpatch}";
@@ -33,7 +33,7 @@ stdenv.mkDerivation rec {
     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 ];
+    platforms = with lib.platforms; linux;
+    maintainers = with lib.maintainers; [ e-user ];
   };
 }
diff --git a/pkgs/tools/text/sgml/openjade/default.nix b/pkgs/tools/text/sgml/openjade/default.nix
index eee5d005c05..785ef320596 100644
--- a/pkgs/tools/text/sgml/openjade/default.nix
+++ b/pkgs/tools/text/sgml/openjade/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, opensp, perl }:
+{ lib, stdenv, fetchurl, opensp, perl }:
 
 stdenv.mkDerivation rec {
   name = "openjade-1.3.2";
@@ -19,8 +19,8 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "An implementation of DSSSL, an ISO standard for formatting SGML (and XML) documents";
-    license = stdenv.lib.licenses.mit;
+    license = lib.licenses.mit;
     homepage = "http://openjade.sourceforge.net/";
-    platforms = stdenv.lib.platforms.linux;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/text/sgml/opensp/default.nix b/pkgs/tools/text/sgml/opensp/default.nix
index 9880564d969..1c9131d29dc 100644
--- a/pkgs/tools/text/sgml/opensp/default.nix
+++ b/pkgs/tools/text/sgml/opensp/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, xmlto, docbook_xml_dtd_412
+{ lib, stdenv, fetchurl, fetchpatch, xmlto, docbook_xml_dtd_412
 , libxslt, docbook_xsl, autoconf, automake, gettext, libiconv, libtool}:
 
 stdenv.mkDerivation {
@@ -20,7 +20,7 @@ stdenv.mkDerivation {
       sha256 = "04q14s8qsad0bkjmj067dn831i0r6v7742rafdlnbfm5y249m2q6";
     })
   ];
-  
+
   setupHook = ./setup-hook.sh;
 
   postFixup = ''
@@ -32,7 +32,7 @@ stdenv.mkDerivation {
   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 ];
+  nativeBuildInputs = lib.optionals stdenv.isCygwin [ autoconf automake libtool ];
 
   buildInputs = [ xmlto docbook_xml_dtd_412 libxslt docbook_xsl gettext libiconv ];
 
@@ -40,8 +40,8 @@ stdenv.mkDerivation {
 
   meta = {
     description = "A suite of SGML/XML processing tools";
-    license = stdenv.lib.licenses.mit;
+    license = lib.licenses.mit;
     homepage = "http://openjade.sourceforge.net/";
-    platforms = stdenv.lib.platforms.unix;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/text/shfmt/default.nix b/pkgs/tools/text/shfmt/default.nix
index ec58cbdd1a9..29a5a157a67 100644
--- a/pkgs/tools/text/shfmt/default.nix
+++ b/pkgs/tools/text/shfmt/default.nix
@@ -1,29 +1,28 @@
-{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, scdoc }:
 
 buildGoModule rec {
   pname = "shfmt";
-  version = "3.1.2";
+  version = "3.3.0";
 
   src = fetchFromGitHub {
     owner = "mvdan";
     repo = "sh";
     rev = "v${version}";
-    sha256 = "03zgi0rlra3gz8cbqwmhpjxsg5048anfc6ccd2w50fjhx6farsnv";
+    sha256 = "sha256-pD1nkbBw5NBCyuhn2DYop2AR+1T8p6/zTa6FeWiya7Q=";
   };
 
-  vendorSha256 = "1jq2x4yxshsy4ahp7nrry8dc9cyjj46mljs447rq57sgix4ndpq8";
+  vendorSha256 = "sha256-euJYStN21xFYosouWYXpHN3MWCKR4NT8z6OSonM0HW8=";
 
   subPackages = [ "cmd/shfmt" ];
 
   buildFlagsArray = [ "-ldflags=-s -w -X main.version=${version}" ];
 
-  patches = [
-    # fix failing test on go 1.15, remove with > 3.1.2
-    (fetchpatch {
-      url = "https://github.com/mvdan/sh/commit/88956f97dae1f268af6c030bf2ba60762ebb488a.patch";
-      sha256 = "1zg8i7kklr12zjkaxh8djd2bzkdx8klgfj271r2wivkc2x61shgv";
-    })
-  ];
+  nativeBuildInputs = [ installShellFiles scdoc ];
+
+  postBuild = ''
+    scdoc < cmd/shfmt/shfmt.1.scd > shfmt.1
+    installManPage shfmt.1
+  '';
 
   meta = with lib; {
     homepage = "https://github.com/mvdan/sh";
@@ -33,6 +32,6 @@ buildGoModule rec {
       You can feed it standard input, any number of files or any number of directories to recurse into.
     '';
     license = licenses.bsd3;
-    maintainers = with maintainers; [ zowoq ];
+    maintainers = with maintainers; [ zowoq SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/text/shocco/default.nix b/pkgs/tools/text/shocco/default.nix
index 65adfc29b95..11d8194bb70 100644
--- a/pkgs/tools/text/shocco/default.nix
+++ b/pkgs/tools/text/shocco/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, perlPackages, pythonPackages }:
+{ lib, stdenv, fetchFromGitHub, perlPackages, pythonPackages }:
 
 stdenv.mkDerivation rec {
   pname = "shocco";
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ perlPackages.TextMarkdown pythonPackages.pygments ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A quick-and-dirty, literate-programming-style documentation generator for / in POSIX shell";
     homepage = "https://rtomayko.github.io/shocco/";
     license = licenses.mit;
diff --git a/pkgs/tools/text/sift/default.nix b/pkgs/tools/text/sift/default.nix
index 5a36de5f720..dc025f17a78 100644
--- a/pkgs/tools/text/sift/default.nix
+++ b/pkgs/tools/text/sift/default.nix
@@ -17,7 +17,7 @@ buildGoPackage rec {
   goDeps = ./deps.nix;
 
   meta = with lib; {
-    description = "sift is a fast and powerful alternative to grep";
+    description = "A fast and powerful alternative to grep";
     homepage = "https://sift-tool.org";
     maintainers = [ maintainers.carlsverre ];
     license = licenses.gpl3;
diff --git a/pkgs/tools/text/silver-searcher/default.nix b/pkgs/tools/text/silver-searcher/default.nix
index 51003694203..8cd67b99263 100644
--- a/pkgs/tools/text/silver-searcher/default.nix
+++ b/pkgs/tools/text/silver-searcher/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, pcre, zlib, lzma}:
+{lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, pcre, zlib, xz}:
 
 stdenv.mkDerivation rec {
   pname = "silver-searcher";
@@ -13,12 +13,12 @@ stdenv.mkDerivation rec {
 
   patches = [ ./bash-completion.patch ];
 
-  NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isLinux "-lgcc_s";
+  NIX_LDFLAGS = lib.optionalString stdenv.isLinux "-lgcc_s";
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
-  buildInputs = [ pcre zlib lzma ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ pcre zlib xz ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/ggreer/the_silver_searcher/";
     description = "A code-searching tool similar to ack, but faster";
     maintainers = with maintainers; [ madjar ];
diff --git a/pkgs/tools/text/snippetpixie/default.nix b/pkgs/tools/text/snippetpixie/default.nix
index 00261507746..6cd6bdda0d9 100644
--- a/pkgs/tools/text/snippetpixie/default.nix
+++ b/pkgs/tools/text/snippetpixie/default.nix
@@ -1,10 +1,10 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 , nix-update-script
 , meson
 , ninja
 , vala
-, pkgconfig
+, pkg-config
 , wrapGAppsHook
 , appstream
 , desktop-file-utils
@@ -19,26 +19,25 @@
 , ibus
 , json-glib
 , pantheon
-, libwnck3
 , xorg
 }:
 
 stdenv.mkDerivation rec {
   pname = "snippetpixie";
-  version = "1.3.3";
+  version = "1.5.2";
 
   src = fetchFromGitHub {
     owner = "bytepixie";
     repo = pname;
     rev = version;
-    sha256 = "0ml57j6jagqvjlpgn1bcyx08h71kcxalh69y03y2lj84x5ib8qz3";
+    sha256 = "173fm9h7lnhhbg5qbjz40g0fy60dwd2l55mdcc1j8dh73vz96pfr";
   };
 
   nativeBuildInputs = [
     meson
     ninja
     vala
-    pkgconfig
+    pkg-config
     wrapGAppsHook
     appstream
     desktop-file-utils
@@ -55,7 +54,6 @@ stdenv.mkDerivation rec {
     dbus
     ibus
     json-glib
-    libwnck3
     xorg.libXtst
     pantheon.granite
     pantheon.elementary-gtk-theme
@@ -75,7 +73,7 @@ stdenv.mkDerivation rec {
     };
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Your little expandable text snippet helper";
     longDescription = ''
       Your little expandable text snippet helper.
@@ -83,6 +81,8 @@ stdenv.mkDerivation rec {
       Save your often used text snippets and then expand them whenever you type their abbreviation.
 
       For example:- "spr`" expands to "Snippet Pixie rules!"
+
+      For non-accessible applications such as browsers and Electron apps, there's a shortcut (default is Ctrl+`) for opening a search window that pastes the selected snippet.
     '';
     homepage = "https://www.snippetpixie.com";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/text/source-highlight/default.nix b/pkgs/tools/text/source-highlight/default.nix
index 7052d9e5a44..6e1a7b24b59 100644
--- a/pkgs/tools/text/source-highlight/default.nix
+++ b/pkgs/tools/text/source-highlight/default.nix
@@ -1,32 +1,39 @@
-{ stdenv, fetchurl, boost }:
+{ lib, stdenv, fetchurl, boost }:
 
-let
-  name = "source-highlight";
+stdenv.mkDerivation rec {
+  pname = "source-highlight";
   version = "3.1.9";
-in
-stdenv.mkDerivation {
-  name = "${name}-${version}";
 
   src = fetchurl {
-    url = "mirror://gnu/src-highlite/${name}-${version}.tar.gz";
+    url = "mirror://gnu/src-highlite/${pname}-${version}.tar.gz";
     sha256 = "148w47k3zswbxvhg83z38ifi85f9dqcpg7icvvw1cm6bg21x4zrs";
   };
 
+  # source-highlight uses it's own binary to generate documentation.
+  # During cross-compilation, that binary was built for the target
+  # platform architecture, so it can't run on the build host.
+  patchPhase = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    substituteInPlace Makefile.in --replace "src doc tests" "src tests"
+  '';
+
+  strictDeps = true;
   buildInputs = [ boost ];
 
   configureFlags = [ "--with-boost=${boost.out}" ];
 
   enableParallelBuilding = false;
 
-  meta = {
+  outputs = [ "out" "doc" "dev" ];
+
+  meta = with lib; {
     description = "Source code renderer with syntax highlighting";
+    longDescription = ''
+      GNU Source-highlight, given a source file, produces a document
+      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.
-      '';
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ SuperSandro2000 ];
   };
 }
diff --git a/pkgs/tools/text/tab/default.nix b/pkgs/tools/text/tab/default.nix
index f7796c8a329..096e0b04c69 100644
--- a/pkgs/tools/text/tab/default.nix
+++ b/pkgs/tools/text/tab/default.nix
@@ -1,19 +1,23 @@
-{ stdenv, fetchFromBitbucket, python2 }:
+{ lib, stdenv, fetchFromBitbucket, python3 }:
 
 stdenv.mkDerivation rec {
-  version = "7.2";
+  version = "8.0";
   pname = "tab";
 
   src = fetchFromBitbucket {
     owner = "tkatchev";
     repo = pname;
     rev = version;
-    sha256 = "1bm15lw0vp901dj2vsqx6yixmn7ls3brrzh1w6zgd1ksjzlm5aax";
+    sha256 = "sha256-RcDvghTiqIdH79khwDIo8PhvmcObmix8WBrHToLwcw4=";
   };
 
-  nativeBuildInputs = [ python2 ];
+  checkInputs = [ python3 ];
 
-  doCheck = true;
+  doCheck = !stdenv.isDarwin;
+
+  preCheck = ''
+    substituteInPlace Makefile --replace "python2 go2.py" "python go.py"
+  '';
 
   checkTarget = "test";
 
@@ -26,11 +30,11 @@ stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Programming language/shell calculator";
     homepage    = "https://tkatchev.bitbucket.io/tab/";
     license     = licenses.boost;
     maintainers = with maintainers; [ mstarzyk ];
-    platforms   = with platforms; linux;
+    platforms   = with platforms; unix;
   };
 }
diff --git a/pkgs/tools/text/transifex-client/default.nix b/pkgs/tools/text/transifex-client/default.nix
index ac10564c9f7..93c2e645309 100644
--- a/pkgs/tools/text/transifex-client/default.nix
+++ b/pkgs/tools/text/transifex-client/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildPythonApplication, fetchPypi
+{ lib, buildPythonApplication, fetchPypi
 , python-slugify, requests, urllib3, six, setuptools }:
 
 buildPythonApplication rec {
@@ -23,10 +23,10 @@ buildPythonApplication rec {
   # Requires external resources
   doCheck = false;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.transifex.com/";
     license = licenses.gpl2;
     description = "Transifex translation service client";
-    maintainers = [ maintainers.etu ];
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/tools/text/txt2tags/default.nix b/pkgs/tools/text/txt2tags/default.nix
index f70ad1710e2..eb299caade9 100644
--- a/pkgs/tools/text/txt2tags/default.nix
+++ b/pkgs/tools/text/txt2tags/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, python }:
+{ lib, stdenv, fetchurl, python }:
 
 stdenv.mkDerivation rec {
   version = "2.6";
@@ -28,8 +28,8 @@ stdenv.mkDerivation rec {
   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;
+    license  = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ kovirobi ];
+    platforms = with lib.platforms; unix;
   };
 }
diff --git a/pkgs/tools/text/ucg/default.nix b/pkgs/tools/text/ucg/default.nix
new file mode 100644
index 00000000000..d81b5a14f09
--- /dev/null
+++ b/pkgs/tools/text/ucg/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv
+, fetchFromGitHub
+, pkg-config
+, autoreconfHook
+, pcre
+, nixosTests
+}:
+
+let
+  pname = "ucg";
+  version = "20190225";
+in stdenv.mkDerivation {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "gvansickle";
+    repo = pname;
+    rev = "c3a67632f1e3f332bfb102f0db167f34a2e42da7";
+    sha256 = "sha256-/wU1PmI4ejlv7gZzZNasgROYXFiDiIxE9BFoCo6+G5Y=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ pcre ];
+
+  meta = with lib; {
+    homepage = "https://github.com/gvansickle/ucg/";
+    description = "Grep-like tool for searching large bodies of source code";
+    longDescription = ''
+      UniversalCodeGrep (ucg) is an extremely fast grep-like tool specialized
+      for searching large bodies of source code. It is intended to be largely
+      command-line compatible with Ack, to some extent with ag, and where
+      appropriate with grep. Search patterns are specified as PCRE regexes.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = with platforms; unix;
+  };
+
+  passthru.tests = { inherit (nixosTests) ucg; };
+}
diff --git a/pkgs/tools/text/ugrep/default.nix b/pkgs/tools/text/ugrep/default.nix
index 3e225ec3567..17503829e7a 100644
--- a/pkgs/tools/text/ugrep/default.nix
+++ b/pkgs/tools/text/ugrep/default.nix
@@ -1,19 +1,35 @@
-{ stdenv, fetchFromGitHub, boost, bzip2, lz4, pcre2, xz, zlib }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, boost
+, bzip2
+, lz4
+, pcre2
+, xz
+, zlib
+}:
 
 stdenv.mkDerivation rec {
   pname = "ugrep";
-  version = "2.5.3";
+  version = "3.3";
 
   src = fetchFromGitHub {
     owner = "Genivia";
     repo = pname;
     rev = "v${version}";
-    sha256 = "16ly1dz8wxnjk6kc88dl2x0ijmzw5v87fhai9fnardwfmycn7ivc";
+    sha256 = "0qk8rzsll69pf220m6n41giyk3faqvwagml7i2xwgp7pcax607nl";
   };
 
-  buildInputs = [ boost bzip2 lz4 pcre2 xz zlib ];
+  buildInputs = [
+    boost
+    bzip2
+    lz4
+    pcre2
+    xz
+    zlib
+  ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Ultra fast grep with interactive query UI";
     homepage = "https://github.com/Genivia/ugrep";
     maintainers = with maintainers; [ numkem ];
diff --git a/pkgs/tools/text/uni2ascii/default.nix b/pkgs/tools/text/uni2ascii/default.nix
index d6b1215caf3..e2bda04d13f 100644
--- a/pkgs/tools/text/uni2ascii/default.nix
+++ b/pkgs/tools/text/uni2ascii/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   name = "uni2ascii-4.18";
@@ -8,11 +8,11 @@ stdenv.mkDerivation rec {
   };
 
   meta = {
-    license = stdenv.lib.licenses.gpl3;
+    license = lib.licenses.gpl3;
     homepage = "http://billposer.org/Software/uni2ascii.html";
     description = "Converts between UTF-8 and many 7-bit ASCII equivalents and back";
 
-    longDescription = '' 
+    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
@@ -33,7 +33,7 @@ stdenv.mkDerivation rec {
     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;
+    maintainers = with lib.maintainers; [ goibhniu ];
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/text/unoconv/default.nix b/pkgs/tools/text/unoconv/default.nix
index dc9412d3c0e..9f3375c7e41 100644
--- a/pkgs/tools/text/unoconv/default.nix
+++ b/pkgs/tools/text/unoconv/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python3, libreoffice-unwrapped, asciidoc, makeWrapper
+{ lib, stdenv, fetchFromGitHub, python3, libreoffice-unwrapped, asciidoc, makeWrapper
 # whether to install odt2pdf/odt2doc/... symlinks to unoconv
 , installSymlinks ? true
 }:
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
     sha256 = "1akx64686in8j8arl6vsgp2n3bv770q48pfv283c6fz6wf9p8fvr";
   };
 
-  buildInputs = [ asciidoc makeWrapper ];
+  nativeBuildInputs = [ asciidoc makeWrapper ];
 
   preBuild = ''
     makeFlags=prefix="$out"
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
     make install-links prefix="$out"
   '' else "");
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Convert between any document format supported by LibreOffice/OpenOffice";
     homepage = "http://dag.wieers.com/home-made/unoconv/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/text/unrtf/default.nix b/pkgs/tools/text/unrtf/default.nix
index 752d576701e..3357404a7d3 100644
--- a/pkgs/tools/text/unrtf/default.nix
+++ b/pkgs/tools/text/unrtf/default.nix
@@ -1,22 +1,14 @@
-{ stdenv, fetchurl, fetchpatch, autoconf, automake, libiconv }:
+{ lib, stdenv, fetchurl, autoconf, automake, libiconv }:
 
 stdenv.mkDerivation rec {
   pname = "unrtf";
-  version = "0.21.9";
+  version = "0.21.10";
 
   src = fetchurl {
-    url = "https://www.gnu.org/software/unrtf/${pname}-${version}.tar.gz";
-    sha256 = "1pcdzf2h1prn393dkvg93v80vh38q0v817xnbwrlwxbdz4k7i8r2";
+    url = "https://ftp.gnu.org/gnu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1bil6z4niydz9gqm2j861dkxmqnpc8m7hvidsjbzz7x63whj17xl";
   };
 
-  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 ];
@@ -25,7 +17,7 @@ stdenv.mkDerivation rec {
 
   outputs = [ "out" "man" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A converter from Rich Text Format to other formats";
     longDescription = ''
       UnRTF converts documents in Rich Text Format to other
diff --git a/pkgs/tools/text/untex/default.nix b/pkgs/tools/text/untex/default.nix
index 829c4da3849..55cf01d698f 100644
--- a/pkgs/tools/text/untex/default.nix
+++ b/pkgs/tools/text/untex/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "untex";
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
     mkdir -p $out/bin $out/share/man/man1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A utility which removes LaTeX commands from input";
     homepage = "https://www.ctan.org/pkg/untex";
     license = licenses.gpl1;
diff --git a/pkgs/tools/text/uwc/default.nix b/pkgs/tools/text/uwc/default.nix
new file mode 100644
index 00000000000..14fe74723a3
--- /dev/null
+++ b/pkgs/tools/text/uwc/default.nix
@@ -0,0 +1,24 @@
+{ rustPlatform, lib, fetchFromGitLab }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "uwc";
+  version = "1.0.4";
+
+  src = fetchFromGitLab {
+    owner = "dead10ck";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1ywqq9hrrm3frvd2sswknxygjlxi195kcy7g7phwq63j7hkyrn50";
+  };
+
+  cargoSha256 = "04pslga3ff766cpb73n6ivzmqfa0hm19gcla8iyv6p59ddsajh3q";
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Like wc, but unicode-aware, and with per-line mode";
+    homepage = "https://gitlab.com/dead10ck/uwc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ShamrockLee ];
+  };
+}
diff --git a/pkgs/tools/text/vale/default.nix b/pkgs/tools/text/vale/default.nix
index 69390b4d3d3..257b11933b9 100644
--- a/pkgs/tools/text/vale/default.nix
+++ b/pkgs/tools/text/vale/default.nix
@@ -1,22 +1,20 @@
-{ stdenv, buildGoModule, fetchFromGitHub }:
+{ lib, buildGoModule, fetchFromGitHub }:
 
 buildGoModule rec {
   pname = "vale";
-  version = "2.3.3";
+  version = "2.10.4";
 
-  subPackages = [ "." ];
+  subPackages = [ "cmd/vale" ];
   outputs = [ "out" "data" ];
 
   src = fetchFromGitHub {
     owner  = "errata-ai";
     repo   = "vale";
     rev    = "v${version}";
-    sha256 = "13b565l87nm3gpxxhw1bpjx7yqcgf5124k3wh7r149z38xyqc3wk";
+    sha256 = "0gw7b6gvzp2f7la1mb74bg92nd8zk5fiajsihcqpni2a79js1s6y";
   };
 
-  vendorSha256 = null;
-
-  doCheck = false;
+  vendorSha256 = "15r97mpsailsa4ja6mh5wrjcjacppm0vwma9q6znsa2f1x2apc6y";
 
   postInstall = ''
     mkdir -p $data/share/vale
@@ -25,8 +23,8 @@ buildGoModule rec {
 
   buildFlagsArray = [ "-ldflags=-s -w -X main.version=${version}" ];
 
-  meta = with stdenv.lib; {
-    homepage = "https://errata-ai.gitbook.io/vale/";
+  meta = with lib; {
+    homepage = "https://docs.errata.ai/vale/about";
     description = "A syntax-aware linter for prose built with speed and extensibility in mind";
     license = licenses.mit;
     maintainers = [ maintainers.marsam ];
diff --git a/pkgs/tools/text/vgrep/default.nix b/pkgs/tools/text/vgrep/default.nix
new file mode 100644
index 00000000000..edd0416b0ef
--- /dev/null
+++ b/pkgs/tools/text/vgrep/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub, go-md2man, installShellFiles }:
+
+buildGoModule rec {
+  pname = "vgrep";
+  version = "2.5.1";
+
+  src = fetchFromGitHub {
+    owner = "vrothberg";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "06rnmg6ljj4f1g602wdp2wy9v0m1m0sj6jl6wywyjl8grjqc3vac";
+  };
+
+  vendorSha256 = null;
+
+  buildFlagsArray = [ "-ldflags=-s -w -X main.version=${version}" ];
+
+  nativeBuildInputs = [ go-md2man installShellFiles ];
+
+  postBuild = ''
+    sed -i '/SHELL= /d' Makefile
+    make docs
+    installManPage docs/*.[1-9]
+  '';
+
+  meta = with lib; {
+    description = "User-friendly pager for grep/git-grep/ripgrep";
+    homepage = "https://github.com/vrothberg/vgrep";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/pkgs/tools/text/wdiff/default.nix b/pkgs/tools/text/wdiff/default.nix
index bec7ba8825d..510cf18369e 100644
--- a/pkgs/tools/text/wdiff/default.nix
+++ b/pkgs/tools/text/wdiff/default.nix
@@ -1,22 +1,28 @@
-{ stdenv, fetchurl, texinfo, which }:
+{ lib, stdenv, fetchurl, texinfo, which }:
 
 stdenv.mkDerivation rec {
-  name = "wdiff-1.2.2";
+  pname = "wdiff";
+  version = "1.2.2";
 
   src = fetchurl {
-    url = "mirror://gnu/wdiff/${name}.tar.gz";
+    url = "mirror://gnu/wdiff/${pname}-${version}.tar.gz";
     sha256 = "0sxgg0ms5lhi4aqqvz1rj4s77yi9wymfm3l3gbjfd1qchy66kzrl";
   };
 
+  # for makeinfo
+  nativeBuildInputs = [ texinfo ];
+
   buildInputs = [ texinfo ];
 
   checkInputs = [ which ];
 
-  meta = {
+  strictDeps = true;
+
+  meta = with lib; {
     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;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ eelco SuperSandro2000 ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/text/wgetpaste/default.nix b/pkgs/tools/text/wgetpaste/default.nix
index 9180573541d..a3a7a8bd54a 100644
--- a/pkgs/tools/text/wgetpaste/default.nix
+++ b/pkgs/tools/text/wgetpaste/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchurl, wget, bash }:
+{ lib, stdenv, fetchurl, wget, bash }:
 
 stdenv.mkDerivation rec {
-  version = "2.29";
+  version = "2.30";
   pname = "wgetpaste";
 
   src = fetchurl {
     url = "http://wgetpaste.zlin.dk/${pname}-${version}.tar.bz2";
-    sha256 = "1rp0wxr3zy7y2xp3azaadfghrx7g0m138f9qg6icjxkkz4vj9r22";
+    sha256 = "14k5i6j6f34hcf9gdb9cnvfwscn0ys2dgd73ci421wj9zzqkbv73";
   };
   # currently zsh-autocompletion support is not installed
 
@@ -23,8 +23,8 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.publicDomain;
+    maintainers = with lib.maintainers; [ qknight domenkozar ];
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/text/wrap/default.nix b/pkgs/tools/text/wrap/default.nix
new file mode 100644
index 00000000000..e228f946a8c
--- /dev/null
+++ b/pkgs/tools/text/wrap/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch, makeWrapper, courier-prime }:
+
+buildGoModule rec {
+  pname = "wrap";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "Wraparound";
+    repo = "wrap";
+    rev = "v${version}";
+    sha256 = "0scf7v83p40r9k7k5v41rwiy9yyanfv3jm6jxs9bspxpywgjrk77";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  vendorSha256 = "03q5a5lm8zj1523gxkbc0y6a3mjj1z2h7nrr2qcz8nlghvp4cfaz";
+
+  patches = [
+    (fetchpatch {
+      name = "courier-prime-variants.patch";
+      url = "https://github.com/Wraparound/wrap/commit/b72c280b6eddba9ec7b3507c1f143eb28a85c9c1.patch";
+      sha256 = "1d9v0agfd7mgd17k4a8l6vr2kyswyfsyq3933dz56pgs5d3jric5";
+    })
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/wrap --prefix XDG_DATA_DIRS : ${courier-prime}/share/
+  '';
+
+  meta = with lib; {
+    description = "A Fountain export tool with some extras";
+    homepage = "https://github.com/Wraparound/wrap";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.austinbutler ];
+  };
+}
diff --git a/pkgs/tools/text/xidel/default.nix b/pkgs/tools/text/xidel/default.nix
index fabfdd85710..0996cf944eb 100644
--- a/pkgs/tools/text/xidel/default.nix
+++ b/pkgs/tools/text/xidel/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, dpkg }:
+{ lib, stdenv, fetchurl, dpkg }:
 
 stdenv.mkDerivation rec {
   pname = "xidel";
@@ -37,7 +37,7 @@ stdenv.mkDerivation rec {
     patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$out/bin/xidel"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/text/xml/basex/default.nix b/pkgs/tools/text/xml/basex/default.nix
index 4dcaed16bb8..30482196322 100644
--- a/pkgs/tools/text/xml/basex/default.nix
+++ b/pkgs/tools/text/xml/basex/default.nix
@@ -1,15 +1,16 @@
-{ stdenv, fetchurl, unzip, jre, coreutils, makeDesktopItem }:
+{ lib, stdenv, fetchurl, unzip, jre, coreutils, makeDesktopItem }:
 
 stdenv.mkDerivation rec {
   pname = "basex";
-  version = "8.6.6";
+  version = "9.4.3";
 
   src = fetchurl {
-    url = "http://files.basex.org/releases/${version}/BaseX866.zip";
-    sha256 = "1kws6swisdaa17yhijjvkh2ikwz9rd5cw8mdjvkqw6vlcp1nq6m4";
+    url = "http://files.basex.org/releases/${version}/BaseX${builtins.replaceStrings ["."] [""] version}.zip";
+    hash = "sha256-IZhRg2JcYQXQKU/lYZpLLcsSdjZZO+toY5yvk+RKUCY=";
   };
 
-  buildInputs = [ unzip jre ];
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [ jre ];
 
   desktopItem = makeDesktopItem {
     name = "basex";
@@ -25,23 +26,15 @@ stdenv.mkDerivation rec {
   dontBuild = true;
 
   installPhase = ''
-    mkdir -p "$out"
-    cp -r * "$out"
-
     # Remove Windows batch files (unclutter $out/bin)
-    rm -f "$out"/bin/*.bat
+    rm ./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/"
+    mkdir -p "$out/share/basex" "$out/share/applications"
 
-    # Remove empty directories
-    rmdir "$out/repo"
-    rmdir "$out/data"
+    cp -R bin etc lib webapp src BaseX.jar "$out"
+    cp -R readme.txt webapp "$out/share/basex"
 
     # Install desktop file
-    mkdir -p "$out/share/applications"
     cp "$desktopItem"/share/applications/* "$out/share/applications/"
 
     # Use substitutions instead of wrapper scripts
@@ -56,7 +49,7 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "XML database and XPath/XQuery processor";
     longDescription = ''
       BaseX is a very fast and light-weight, yet powerful XML database and
@@ -65,7 +58,7 @@ stdenv.mkDerivation rec {
       highly interactive front-end (basexgui). Apart from two local standalone
       modes, BaseX offers a client/server architecture.
     '';
-    homepage = "http://basex.org/";
+    homepage = "https://basex.org/";
     license = licenses.bsd3;
     platforms = platforms.linux;
     maintainers = [ maintainers.bjornfor ];
diff --git a/pkgs/tools/text/xml/html-xml-utils/default.nix b/pkgs/tools/text/xml/html-xml-utils/default.nix
index d4bd40a1199..96aa01abe6d 100644
--- a/pkgs/tools/text/xml/html-xml-utils/default.nix
+++ b/pkgs/tools/text/xml/html-xml-utils/default.nix
@@ -1,17 +1,17 @@
-{ stdenv, fetchurl, curl, libiconv }:
+{ lib, stdenv, fetchurl, curl, libiconv }:
 
 stdenv.mkDerivation rec {
   pname = "html-xml-utils";
-  version = "7.9";
+  version = "8.0";
 
   src = fetchurl {
     url = "https://www.w3.org/Tools/HTML-XML-utils/${pname}-${version}.tar.gz";
-    sha256 = "0gs3xvdbzhk5k12i95p5d4fgkkaldnlv45sch7pnncb0lrpcjsnq";
+    sha256 = "sha256-dJBZkGwzHCx/us7uAkZiRaI3uRvUCN/485bQc0oGCuI=";
   };
 
   buildInputs = [curl libiconv];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Utilities for manipulating HTML and XML files";
     homepage = "http://www.w3.org/Tools/HTML-XML-utils/";
     license = licenses.w3c;
diff --git a/pkgs/tools/text/xml/jing-trang/default.nix b/pkgs/tools/text/xml/jing-trang/default.nix
index dcf83c736cc..542a4709efe 100644
--- a/pkgs/tools/text/xml/jing-trang/default.nix
+++ b/pkgs/tools/text/xml/jing-trang/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, jre_headless, jdk, ant, saxon }:
+{ lib, stdenv, fetchFromGitHub, jre_headless, jdk, ant, saxon }:
 
 stdenv.mkDerivation {
   pname = "jing-trang";
@@ -32,7 +32,7 @@ stdenv.mkDerivation {
     chmod +x "$out"/bin/*
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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".
diff --git a/pkgs/tools/text/xml/rnv/default.nix b/pkgs/tools/text/xml/rnv/default.nix
index 2bc1b6dddda..1ee3355d105 100644
--- a/pkgs/tools/text/xml/rnv/default.nix
+++ b/pkgs/tools/text/xml/rnv/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, expat }:
+{ lib, stdenv, fetchurl, expat }:
 
 stdenv.mkDerivation rec {
   pname = "rnv";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ expat ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Relax NG Compact Syntax validator";
     homepage = "http://www.davidashen.net/rnv.html";
     license = licenses.bsd3;
diff --git a/pkgs/tools/text/xml/rxp/default.nix b/pkgs/tools/text/xml/rxp/default.nix
index c0e2ea1c4e2..5940bc6d60f 100644
--- a/pkgs/tools/text/xml/rxp/default.nix
+++ b/pkgs/tools/text/xml/rxp/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl} :
+{lib, stdenv, fetchurl} :
 
 stdenv.mkDerivation rec {
   pname = "rxp";
@@ -10,9 +10,9 @@ stdenv.mkDerivation rec {
   };
 
   meta = {
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = 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;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/text/xml/xml2/default.nix b/pkgs/tools/text/xml/xml2/default.nix
index 8c341855e68..4c312250bf6 100644
--- a/pkgs/tools/text/xml/xml2/default.nix
+++ b/pkgs/tools/text/xml/xml2/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, libxml2 }:
+{ lib, stdenv, fetchurl, pkg-config, libxml2 }:
 
 stdenv.mkDerivation {
   name = "xml2-0.5";
@@ -8,10 +8,10 @@ stdenv.mkDerivation {
     sha256 = "01cps980m99y99cnmvydihga9zh3pvdsqag2fi1n6k2x7rfkl873";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libxml2 ];
 
-  meta = with stdenv.lib; {
+  meta = with 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;
diff --git a/pkgs/tools/text/xml/xmldiff/default.nix b/pkgs/tools/text/xml/xmldiff/default.nix
new file mode 100644
index 00000000000..5814435e111
--- /dev/null
+++ b/pkgs/tools/text/xml/xmldiff/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, lxml
+, six
+}:
+
+buildPythonApplication rec {
+  pname = "xmldiff";
+  version = "2.4";
+
+  src = fetchFromGitHub {
+    owner = "Shoobx";
+    repo = pname;
+    rev = version;
+    hash = "sha256-xqudHYfwOce2C0pcFzId0JDIIC6R5bllmVKsH+CvTdE=";
+  };
+
+  buildInputs = [
+    lxml
+    six
+  ];
+
+  meta = with lib; {
+    homepage = "https://xmldiff.readthedocs.io/en/stable/";
+    description = "A library and command line utility for diffing xml";
+    longDescription = ''
+      xmldiff is a library and a command-line utility for making diffs out of
+      XML. This may seem like something that doesn't need a dedicated utility,
+      but change detection in hierarchical data is very different from change
+      detection in flat data. XML type formats are also not only used for
+      computer readable data, it is also often used as a format for hierarchical
+      data that can be rendered into human readable formats. A traditional diff
+      on such a format would tell you line by line the differences, but this
+      would not be be readable by a human. xmldiff provides tools to make human
+      readable diffs in those situations.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres ];
+  };
+}
diff --git a/pkgs/tools/text/xml/xmlformat/default.nix b/pkgs/tools/text/xml/xmlformat/default.nix
index 8dfec26e811..380baa906c2 100644
--- a/pkgs/tools/text/xml/xmlformat/default.nix
+++ b/pkgs/tools/text/xml/xmlformat/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl }:
+{ lib, stdenv, fetchurl, perl }:
 stdenv.mkDerivation rec {
   pname = "xmlformat";
   version = "1.04";
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/text/xml/xmloscopy/default.nix b/pkgs/tools/text/xml/xmloscopy/default.nix
index 2cd7a580ee3..c915e2c7fc5 100644
--- a/pkgs/tools/text/xml/xmloscopy/default.nix
+++ b/pkgs/tools/text/xml/xmloscopy/default.nix
@@ -43,7 +43,7 @@ stdenv.mkDerivation rec {
       --set PATH "${spath}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "wtf is my docbook broken?";
     homepage = "https://github.com/grahamc/xmloscopy";
     license = licenses.mit;
diff --git a/pkgs/tools/text/xml/xmlstarlet/default.nix b/pkgs/tools/text/xml/xmlstarlet/default.nix
index 7d3471f9561..e179c3153e1 100644
--- a/pkgs/tools/text/xml/xmlstarlet/default.nix
+++ b/pkgs/tools/text/xml/xmlstarlet/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, fetchurl, pkgconfig, libxml2, libxslt }:
+{ lib, stdenv, fetchurl, pkg-config, libxml2, libxslt }:
 
 stdenv.mkDerivation rec {
   name = "xmlstarlet-1.6.1";
-  
+
   src = fetchurl {
     url = "mirror://sourceforge/xmlstar/${name}.tar.gz";
     sha256 = "1jp737nvfcf6wyb54fla868yrr39kcbijijmjpyk4lrpyg23in0m";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libxml2 libxslt ];
 
   preConfigure =
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.mit;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/text/xml/xpf/default.nix b/pkgs/tools/text/xml/xpf/default.nix
index 6999a4a64d0..29170394d1e 100644
--- a/pkgs/tools/text/xml/xpf/default.nix
+++ b/pkgs/tools/text/xml/xpf/default.nix
@@ -1,20 +1,20 @@
-{stdenv, fetchurl, python2, libxml2}:
+{lib, 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;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/text/xsv/default.nix b/pkgs/tools/text/xsv/default.nix
index b17dba7a127..303b38d65c2 100644
--- a/pkgs/tools/text/xsv/default.nix
+++ b/pkgs/tools/text/xsv/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform, Security }:
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
 
 rustPlatform.buildRustPackage rec {
   pname = "xsv";
@@ -11,11 +11,11 @@ rustPlatform.buildRustPackage rec {
     sha256 = "17v1nw36mrarrd5yv4xd3mpc1d7lvhd5786mqkzyyraf78pjg045";
   };
 
-  cargoSha256 = "1q59nvklh5r2mrsz656z6js3j2l6rqyhfz6l0yq28df5kyahk91b";
+  cargoSha256 = "1bh60zgflaa5n914irkr4bpq3m4h2ngcj6bp5xx1qj112dwgvmyb";
 
-  buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
+  buildInputs = lib.optional stdenv.isDarwin Security;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A fast CSV toolkit written in Rust";
     homepage = "https://github.com/BurntSushi/xsv";
     license = with licenses; [ unlicense /* or */ mit ];
diff --git a/pkgs/tools/text/xurls/default.nix b/pkgs/tools/text/xurls/default.nix
index 6c8e5520d74..fa5418b4581 100644
--- a/pkgs/tools/text/xurls/default.nix
+++ b/pkgs/tools/text/xurls/default.nix
@@ -1,4 +1,4 @@
-{ buildGoPackage, stdenv, fetchFromGitHub }:
+{ buildGoPackage, lib, fetchFromGitHub }:
 
 buildGoPackage rec {
   version = "2.2.0";
@@ -14,7 +14,7 @@ buildGoPackage rec {
   goPackagePath = "mvdan.cc/xurls/v2";
   subPackages = [ "cmd/xurls" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Extract urls from text";
     homepage = "https://github.com/mvdan/xurls";
     maintainers = with maintainers; [ koral ];
diff --git a/pkgs/tools/text/yaml-merge/default.nix b/pkgs/tools/text/yaml-merge/default.nix
index b91d24e1137..7c4ecc49df5 100644
--- a/pkgs/tools/text/yaml-merge/default.nix
+++ b/pkgs/tools/text/yaml-merge/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, pythonPackages }:
+{ lib, stdenv, fetchFromGitHub, pythonPackages }:
 
 stdenv.mkDerivation {
   name= "yaml-merge-2016-02-16";
@@ -18,11 +18,11 @@ stdenv.mkDerivation {
     wrapPythonPrograms
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Merge YAML data files";
     homepage = "https://github.com/abbradar/yaml-merge";
     license = licenses.bsd2;
-    platforms = platforms.linux;
+    platforms = platforms.unix;
     maintainers = with maintainers; [ abbradar ];
   };
 }
diff --git a/pkgs/tools/text/zimreader/default.nix b/pkgs/tools/text/zimreader/default.nix
deleted file mode 100644
index 0b947ee5db3..00000000000
--- a/pkgs/tools/text/zimreader/default.nix
+++ /dev/null
@@ -1,38 +0,0 @@
-{ 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/pkgs/tools/text/zimwriterfs/default.nix b/pkgs/tools/text/zimwriterfs/default.nix
index 8362280c2fa..9a7e495df2b 100644
--- a/pkgs/tools/text/zimwriterfs/default.nix
+++ b/pkgs/tools/text/zimwriterfs/default.nix
@@ -1,15 +1,15 @@
-{ stdenv
+{ lib, stdenv
 , fetchFromGitHub
 
 , autoconf
 , automake
 , libtool
-, pkgconfig
+, pkg-config
 
 , file
 , icu
 , gumbo
-, lzma
+, xz
 , xapian
 , zimlib
 , zlib
@@ -26,8 +26,8 @@ stdenv.mkDerivation rec {
     sha256 = "1vkrrq929a8s3m5rri1lg0l2vd0mc9n2fsb2z1g88k4n4j2l6f19";
   };
 
-  nativeBuildInputs = [ automake autoconf libtool pkgconfig ];
-  buildInputs = [ file icu gumbo lzma zimlib zlib xapian ];
+  nativeBuildInputs = [ automake autoconf libtool pkg-config ];
+  buildInputs = [ file icu gumbo xz zimlib zlib xapian ];
   setSourceRoot = ''
     sourceRoot=$(echo */zimwriterfs)
   '';
@@ -36,8 +36,8 @@ stdenv.mkDerivation rec {
   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 ];
+    maintainers = with lib.maintainers; [ robbinch ];
+    license = lib.licenses.gpl3;
+    platforms = with lib.platforms; [ linux ];
   };
 }
diff --git a/pkgs/tools/text/zoekt/default.nix b/pkgs/tools/text/zoekt/default.nix
new file mode 100644
index 00000000000..cb270f69ad1
--- /dev/null
+++ b/pkgs/tools/text/zoekt/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, git
+}:
+buildGoModule {
+  pname = "zoekt";
+  version = "unstable-2021-03-17";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "zoekt";
+    rev = "d92b3b80e582e735b2459413ee7d9dbbf294d629";
+    sha256 = "JdORh6bRdHsAYwsmdKY0OUavXfu3HsPQFkQjRBkcMBo=";
+  };
+
+  vendorSha256 = "d+Xvl6fleMO0frP9qr5tZgkzsnH5lPELwmEQEspD22M=";
+
+  checkInputs = [
+    git
+  ];
+
+  meta = with lib; {
+    description = "Fast trigram based code search";
+    homepage = "https://github.com/google/zoekt";
+    license = licenses.asl20;
+    maintainers = teams.determinatesystems.members;
+  };
+}
diff --git a/pkgs/tools/text/zstxtns-utils/default.nix b/pkgs/tools/text/zstxtns-utils/default.nix
new file mode 100644
index 00000000000..362f2fca84d
--- /dev/null
+++ b/pkgs/tools/text/zstxtns-utils/default.nix
@@ -0,0 +1,39 @@
+{ coreutils
+, fetchurl
+, gnugrep
+, lib
+, makeWrapper
+, moreutils
+, stdenvNoCC
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "zstxtns-utils";
+  version = "0.0.3";
+
+  src = fetchurl {
+    url = "https://ytrizja.de/distfiles/zstxtns-utils-${version}.tar.gz";
+    sha256 = "I/Gm7vHUr29NClYWQ1kwu8HrNZpdLXfE/nutTNoqcdU=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D -t $out/bin zstxtns-merge zstxtns-unmerge
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/zstxtns-merge --set PATH "${lib.makeBinPath [coreutils gnugrep moreutils]}"
+    wrapProgram $out/bin/zstxtns-unmerge --set PATH "${lib.makeBinPath [coreutils gnugrep]}"
+  '';
+
+  meta = with lib; {
+    description = "utilities to deal with text based name service databases";
+    homepage = "https://ytrizja.de/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ zseri ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/tools/typesetting/asciidoc/default.nix b/pkgs/tools/typesetting/asciidoc/default.nix
index 136c25f73b1..ce3b142fbc5 100644
--- a/pkgs/tools/typesetting/asciidoc/default.nix
+++ b/pkgs/tools/typesetting/asciidoc/default.nix
@@ -1,5 +1,5 @@
-{ fetchurl, stdenv, python2
-
+{ fetchurl, lib, stdenv, python3
+, fetchFromGitHub, autoreconfHook
 , enableStandardFeatures ? false
 , sourceHighlight ? null
 , highlight ? null
@@ -136,6 +136,7 @@ let
     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";
@@ -144,17 +145,22 @@ let
 in
 
 stdenv.mkDerivation rec {
-  name = "asciidoc-8.6.9";
+  pname = "asciidoc";
+  version = "9.1.0";
 
-  src = fetchurl {
-    url = "mirror://sourceforge/asciidoc/${name}.tar.gz";
-    sha256 = "1w71nk527lq504njmaf0vzr93pgahkgzzxzglrq6bay8cw2rvnvq";
+  # Note: a substitution to improve reproducibility should be updated once 10.0.0 is
+  # released. See the comment in `patchPhase` for more information.
+  src = fetchFromGitHub {
+    owner = "asciidoc";
+    repo = "asciidoc-py3";
+    rev = version;
+    sha256 = "1clf1axkns23wfmh48xfspzsnw04pjh4mq1pshpzvj0cwxhz0yaq";
   };
 
-  buildInputs = [ python2 unzip ];
+  nativeBuildInputs = [ python3 unzip autoreconfHook ];
 
   # install filters early, so their shebangs are patched too
-  patchPhase = with stdenv.lib; ''
+  postPatch = with lib; ''
     mkdir -p "$out/etc/asciidoc/filters"
     mkdir -p "$out/etc/asciidoc/backends"
   '' + optionalString _enableDitaaFilter ''
@@ -212,7 +218,7 @@ stdenv.mkDerivation rec {
     # 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 ''
+  '' + (if enableStandardFeatures then ''
     sed -e "s|dot|${graphviz}/bin/dot|g" \
         -e "s|neato|${graphviz}/bin/neato|g" \
         -e "s|twopi|${graphviz}/bin/twopi|g" \
@@ -222,7 +228,8 @@ stdenv.mkDerivation rec {
 
     sed -e "s|run('latex|run('${texlive}/bin/latex|g" \
         -e "s|cmd = 'dvipng'|cmd = '${texlive}/bin/dvipng'|g" \
-        -i "filters/latex/latex2png.py"
+        -e "s|cmd = 'dvisvgm'|cmd = '${texlive}/bin/dvisvgm'|g" \
+        -i "filters/latex/latex2img.py"
 
     sed -e "s|run('abc2ly|run('${lilypond}/bin/abc2ly|g" \
         -e "s|run('lilypond|run('${lilypond}/bin/lilypond|g" \
@@ -239,7 +246,7 @@ stdenv.mkDerivation rec {
     # 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 ]}')|" \
+    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='${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'|" \
@@ -249,19 +256,29 @@ stdenv.mkDerivation rec {
         -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
+  '' else ''
+    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')|" \
+        -e "s|^XSLTPROC =.*|XSLTPROC = '${libxslt.bin}/bin/xsltproc'|" \
+        -e "s|^XMLLINT =.*|XMLLINT = '${libxml2.bin}/bin/xmllint'|" \
+        -i a2x.py
+  '') + ''
+    patchShebangs .
 
-    sed -i -e "s,/etc/vim,,g" Makefile.in
+    # Note: this substitution will not work in the planned 10.0.0 release:
+    #
+    # https://github.com/asciidoc/asciidoc-py3/commit/dfffda23381014481cd13e8e9d8f131e1f93f08a
+    #
+    # Update this substitution to:
+    #
+    # --replace "python3 -m asciidoc.a2x" "python3 -m asciidoc.a2x -a revdate=01/01/1980"
+    substituteInPlace Makefile.in \
+      --replace "python3 a2x.py" "python3 a2x.py -a revdate=01/01/1980"
   '';
 
   preInstall = "mkdir -p $out/etc/vim";
-  makeFlags = stdenv.lib.optional stdenv.isCygwin "DESTDIR=/.";
+  makeFlags = lib.optional stdenv.isCygwin "DESTDIR=/.";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Text-based document generation system";
     longDescription = ''
       AsciiDoc is a text document format for writing notes, documentation,
diff --git a/pkgs/tools/typesetting/asciidoctor/Gemfile b/pkgs/tools/typesetting/asciidoctor/Gemfile
index f9329a80a81..702dabee2e0 100644
--- a/pkgs/tools/typesetting/asciidoctor/Gemfile
+++ b/pkgs/tools/typesetting/asciidoctor/Gemfile
@@ -4,6 +4,7 @@ gem 'asciidoctor-diagram'
 gem 'asciidoctor-pdf'
 gem 'asciidoctor-epub3'
 gem 'asciidoctor-mathematical'
+gem 'asciidoctor-revealjs'
 gem 'coderay'
 gem 'pygments.rb'
 gem 'rouge'
diff --git a/pkgs/tools/typesetting/asciidoctor/Gemfile.lock b/pkgs/tools/typesetting/asciidoctor/Gemfile.lock
index c928e954875..3240f65167e 100644
--- a/pkgs/tools/typesetting/asciidoctor/Gemfile.lock
+++ b/pkgs/tools/typesetting/asciidoctor/Gemfile.lock
@@ -1,83 +1,96 @@
 GEM
   remote: https://rubygems.org/
   specs:
-    Ascii85 (1.0.3)
-    addressable (2.6.0)
-      public_suffix (>= 2.0.2, < 4.0)
+    Ascii85 (1.1.0)
+    addressable (2.7.0)
+      public_suffix (>= 2.0.2, < 5.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)
+    asciidoctor (2.0.15)
+    asciidoctor-diagram (2.1.2)
+      asciidoctor (>= 1.5.7, < 3.x)
+      asciidoctor-diagram-ditaamini (~> 1.0.0)
+      asciidoctor-diagram-plantuml (~> 1.2021)
+      rexml
+    asciidoctor-diagram-ditaamini (1.0.0)
+    asciidoctor-diagram-plantuml (1.2021.7)
+    asciidoctor-epub3 (1.5.1)
+      asciidoctor (>= 1.5.6, < 3.0.0)
+      gepub (~> 1.0.0)
+      mime-types (~> 3.0)
+    asciidoctor-mathematical (0.3.5)
+      asciidoctor (~> 2.0)
+      asciimath (~> 2.0)
+      mathematical (~> 1.6.0)
+    asciidoctor-pdf (1.6.0)
+      asciidoctor (~> 2.0)
+      concurrent-ruby (~> 1.1)
+      prawn (~> 2.4.0)
+      prawn-icon (~> 3.0.0)
+      prawn-svg (~> 0.32.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)
+      treetop (~> 1.6.0)
+    asciidoctor-revealjs (4.1.0)
+      asciidoctor (>= 2.0.0, < 3.0.0)
+      concurrent-ruby (~> 1.0)
+      thread_safe (~> 0.3.5)
+    asciimath (2.0.2)
+    coderay (1.1.3)
+    concurrent-ruby (1.1.9)
+    css_parser (1.9.0)
       addressable
-    gepub (1.0.4)
-      nokogiri (>= 1.8.2, < 1.11)
-      rubyzip (>= 1.1.1)
+    gepub (1.0.13)
+      nokogiri (>= 1.8.2, < 1.12)
+      rubyzip (> 1.1.1, < 2.4)
     hashery (2.1.2)
-    i18n (1.6.0)
+    i18n (1.8.10)
       concurrent-ruby (~> 1.0)
-    mathematical (1.6.12)
+    mathematical (1.6.14)
       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)
+    mime-types (3.3.1)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2021.0225)
+    mini_portile2 (2.5.3)
+    nokogiri (1.11.7)
+      mini_portile2 (~> 2.5.0)
+      racc (~> 1.4)
+    pdf-core (0.9.0)
+    pdf-reader (2.5.0)
+      Ascii85 (~> 1.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 (2.4.0)
+      pdf-core (~> 0.9.0)
+      ttfunk (~> 1.7)
+    prawn-icon (3.0.0)
       prawn (>= 1.1.0, < 3.0.0)
-    prawn-svg (0.29.1)
+    prawn-svg (0.32.0)
       css_parser (~> 1.6)
       prawn (>= 0.11.1, < 3)
+      rexml (~> 3.2)
     prawn-table (0.2.2)
       prawn (>= 1.3.0, < 3.0.0)
-    prawn-templates (0.1.1)
+    prawn-templates (0.1.2)
       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)
+    public_suffix (4.0.6)
+    pygments.rb (2.2.0)
+    racc (1.5.2)
+    rexml (3.2.5)
+    rouge (3.26.0)
+    ruby-enum (0.9.0)
       i18n
     ruby-rc4 (0.1.5)
-    rubyzip (1.2.3)
+    rubyzip (2.3.0)
     safe_yaml (1.0.5)
     thread_safe (0.3.6)
-    treetop (1.5.3)
+    treetop (1.6.11)
       polyglot (~> 0.3)
-    ttfunk (1.5.1)
+    ttfunk (1.7.0)
 
 PLATFORMS
   ruby
@@ -88,6 +101,7 @@ DEPENDENCIES
   asciidoctor-epub3
   asciidoctor-mathematical
   asciidoctor-pdf
+  asciidoctor-revealjs
   coderay
   pygments.rb
   rouge
diff --git a/pkgs/tools/typesetting/asciidoctor/default.nix b/pkgs/tools/typesetting/asciidoctor/default.nix
index f875cc26311..73fb46d2e60 100644
--- a/pkgs/tools/typesetting/asciidoctor/default.nix
+++ b/pkgs/tools/typesetting/asciidoctor/default.nix
@@ -1,6 +1,6 @@
 { lib, bundlerApp, makeWrapper,
   # Optional dependencies, can be null
-  epubcheck, kindlegen,
+  epubcheck,
   bundlerUpdateScript
 }:
 
@@ -12,16 +12,15 @@ let
     exes = [
       "asciidoctor"
       "asciidoctor-pdf"
-      "asciidoctor-safe"
       "asciidoctor-epub3"
+      "asciidoctor-revealjs"
     ];
 
     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"}
+          ${lib.optionalString (epubcheck != null) "--set EPUBCHECK ${epubcheck}/bin/epubcheck"}
       '';
 
     passthru = {
diff --git a/pkgs/tools/typesetting/asciidoctor/gemset.nix b/pkgs/tools/typesetting/asciidoctor/gemset.nix
index 02700962eb2..6fe57ff4856 100644
--- a/pkgs/tools/typesetting/asciidoctor/gemset.nix
+++ b/pkgs/tools/typesetting/asciidoctor/gemset.nix
@@ -5,10 +5,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0bcm2hchn897xjhqj9zzsxf3n9xhddymj4lsclz508f4vw3av46l";
+      sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
       type = "gem";
     };
-    version = "2.6.0";
+    version = "2.7.0";
   };
   afm = {
     groups = ["default"];
@@ -25,84 +25,125 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0658m37jjjn6drzqg1gk4p6c205mgp7g1jh2d00n4ngghgmz5qvs";
+      sha256 = "1ds4v9xgsyvijnlflak4dzf1qwmda9yd5bv8jwsb56nngd399rlw";
       type = "gem";
     };
-    version = "1.0.3";
+    version = "1.1.0";
   };
   asciidoctor = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1b2ajs3sabl0s27r7lhwkacw0yn0zfk4jpmidg9l8lzp2qlgjgbz";
+      sha256 = "0k3lijm4dmiz977bfmpclk5glj5jwv7bidamwwwywm60ywb0n4n4";
       type = "gem";
     };
-    version = "2.0.10";
+    version = "2.0.15";
   };
   asciidoctor-diagram = {
-    dependencies = ["asciidoctor"];
+    dependencies = ["asciidoctor" "asciidoctor-diagram-ditaamini" "asciidoctor-diagram-plantuml" "rexml"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "095ar1hj96mi9vxnjjdkj7yzc3lp4wjxh4qsijx9inqflbcw7x71";
+      sha256 = "09ci775f7y7d6spn0fl5wfmfyxianjp4z0p3fwcrzajy63f381v9";
       type = "gem";
     };
-    version = "1.5.18";
+    version = "2.1.2";
+  };
+  asciidoctor-diagram-ditaamini = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1frnjz0j00v5hqp5macgnn6jq77jcpjy2l6hqmn5jn5ds7bmi2rl";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  asciidoctor-diagram-plantuml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kcxwbaancxfq08fr7syg8mxsi97jiczxyp4an2x0ymq3mkss0k8";
+      type = "gem";
+    };
+    version = "1.2021.7";
   };
   asciidoctor-epub3 = {
-    dependencies = ["asciidoctor" "concurrent-ruby" "gepub" "thread_safe"];
+    dependencies = ["asciidoctor" "gepub" "mime-types"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "056yp0z64b1fhhkzz2kaiqsd11gpbgx2d1yjgq7cqma9c70bbxa5";
+      sha256 = "05lylv2k18vcnf3647n47zdqxpa70bg16znzn252ymp8say25zzg";
       type = "gem";
     };
-    version = "1.5.0.alpha.9";
+    version = "1.5.1";
   };
   asciidoctor-mathematical = {
-    dependencies = ["asciidoctor" "mathematical" "ruby-enum"];
+    dependencies = ["asciidoctor" "asciimath" "mathematical"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1n6qhfp6xc5jlqkscr9g7zzp9f2cv28jzcqzawhl8vjgcny7i6j3";
+      sha256 = "1lxfq7qn3ql642pva6jh3h1abm9j9daxg5icfn1h73k6cjsmcisp";
       type = "gem";
     };
-    version = "0.3.0";
+    version = "0.3.5";
   };
   asciidoctor-pdf = {
-    dependencies = ["asciidoctor" "concurrent-ruby" "prawn" "prawn-icon" "prawn-svg" "prawn-table" "prawn-templates" "safe_yaml" "thread_safe" "treetop"];
+    dependencies = ["asciidoctor" "concurrent-ruby" "prawn" "prawn-icon" "prawn-svg" "prawn-table" "prawn-templates" "safe_yaml" "treetop"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "19rgi43abhkyv85r2gnwqq6kxwsn29hhv4clnnmln58d7s589n0j";
+      sha256 = "0sxfz3qp2j76jlab7fb1d1ylbf0h2nnbkhg019qqch5wkd4k1iw9";
       type = "gem";
     };
-    version = "1.5.0.alpha.18";
+    version = "1.6.0";
+  };
+  asciidoctor-revealjs = {
+    dependencies = ["asciidoctor" "concurrent-ruby" "thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03vmbcc3x059h17ry4qwk1p0yar9wgh87l2qssi307gy45cjw2mq";
+      type = "gem";
+    };
+    version = "4.1.0";
+  };
+  asciimath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yq9av7rh493xqmx4cq3fjl0c6d8njxp53qw4hg2d3xkyn2lyfc5";
+      type = "gem";
+    };
+    version = "2.0.2";
   };
   coderay = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y";
+      sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw";
       type = "gem";
     };
-    version = "1.1.2";
+    version = "1.1.3";
   };
   concurrent-ruby = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1x07r23s7836cpp5z9yrlbpljcxpax14yw4fy4bnp6crhr6x24an";
+      sha256 = "0nwad3211p7yv9sda31jmbyw6sdafzmdi2i2niaz6f0wk5nq9h0f";
       type = "gem";
     };
-    version = "1.1.5";
+    version = "1.1.9";
   };
   css_parser = {
     dependencies = ["addressable"];
@@ -110,10 +151,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1y4vc018b5mzp7winw4pbb22jk0dpxp22pzzxq7w0rgvfxzi89pd";
+      sha256 = "0xs4ind9xd099rb52b73pch8ha143dl8bhivqsbba4wrvxpbx751";
       type = "gem";
     };
-    version = "1.7.0";
+    version = "1.9.0";
   };
   gepub = {
     dependencies = ["nokogiri" "rubyzip"];
@@ -121,10 +162,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1kg2h0mscb2hq6l3wjzq5fp5vw4552nglq8n9pawm7bzacf1gzyf";
+      sha256 = "01q33rkvqrhxqm8zgkhgcqhrqdfzgxswxfgiagdjxw67qdn1pids";
       type = "gem";
     };
-    version = "1.0.4";
+    version = "1.0.13";
   };
   hashery = {
     groups = ["default"];
@@ -142,10 +183,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1hfxnlyr618s25xpafw9mypa82qppjccbh292c4l3bj36az7f6wl";
+      sha256 = "0g2fnag935zn2ggm5cn6k4s4xvv53v2givj1j90szmvavlpya96a";
       type = "gem";
     };
-    version = "1.6.0";
+    version = "1.8.10";
   };
   mathematical = {
     dependencies = ["ruby-enum"];
@@ -153,51 +194,62 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "19f9icaixg60wl8dvcxp6glbm5vpx2rsyx53sfk2rvwnzgsr42qh";
+      sha256 = "05mn68gxhfa37qsnzsmdqaa005hf511j5lga76qsrad2gcnhan1b";
       type = "gem";
     };
-    version = "1.6.12";
+    version = "1.6.14";
   };
-  mini_portile2 = {
+  mime-types = {
+    dependencies = ["mime-types-data"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
+      sha256 = "1zj12l9qk62anvk9bjvandpa6vy4xslil15wl6wlivyf51z773vh";
       type = "gem";
     };
-    version = "2.4.0";
+    version = "3.3.1";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1phcq7z0zpipwd7y4fbqmlaqghv07fjjgrx99mwq3z3n0yvy7fmi";
+      type = "gem";
+    };
+    version = "3.2021.0225";
   };
-  multi_json = {
+  mini_portile2 = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
+      sha256 = "1ad0mli9rc0f17zw4ibp24dbj1y39zkykijsjmnzl4gwpg5s0j6k";
       type = "gem";
     };
-    version = "1.13.1";
+    version = "2.5.3";
   };
   nokogiri = {
-    dependencies = ["mini_portile2"];
+    dependencies = ["mini_portile2" "racc"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "02bjydih0j515szfv9mls195cvpyidh6ixm7dwbl3s2sbaxxk5s4";
+      sha256 = "1vrn31385ix5k9b0yalnlzv360isv6dincbcvi8psllnwz4sjxj9";
       type = "gem";
     };
-    version = "1.10.3";
+    version = "1.11.7";
   };
   pdf-core = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "19llwch2wfg51glb0kff0drfp3n6nb9vim4zlvzckxysksvxpby1";
+      sha256 = "1fz0yj4zrlii2j08kaw11j769s373ayz8jrdhxwwjzmm28pqndjg";
       type = "gem";
     };
-    version = "0.7.0";
+    version = "0.9.0";
   };
   pdf-reader = {
     dependencies = ["Ascii85" "afm" "hashery" "ruby-rc4" "ttfunk"];
@@ -205,10 +257,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0aas2f5clgwpgryywrh4gihdi10afx3kbyfs1n31cinri02psd43";
+      sha256 = "14cxj3ra9nnn334qpm2vsx9s0zk3095s8ih6cwcp47h3hv03c73y";
       type = "gem";
     };
-    version = "2.2.0";
+    version = "2.5.0";
   };
   polyglot = {
     groups = ["default"];
@@ -226,10 +278,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1qdjf1v6sfl44g3rqxlg8k4jrzkwaxgvh2l4xws97a8f3xv4na4m";
+      sha256 = "1g9avv2rprsjisdk137s9ljr05r7ajhm78hxa1vjsv0jyx22f1l2";
       type = "gem";
     };
-    version = "2.2.2";
+    version = "2.4.0";
   };
   prawn-icon = {
     dependencies = ["prawn"];
@@ -237,21 +289,21 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1nc810wdpa93z162yzjgvf7mdanfxm4bjwinjjxx5smq6wdvhdqi";
+      sha256 = "1xdnjik5zinnkjavmybbh2s52wzcpb8hzaqckiv0mxp0vs0x9j6s";
       type = "gem";
     };
-    version = "2.3.0";
+    version = "3.0.0";
   };
   prawn-svg = {
-    dependencies = ["css_parser" "prawn"];
+    dependencies = ["css_parser" "prawn" "rexml"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1wwfv6lw2diywgjp15pd3awpr8g7xkjfi10jzhmvziikakzsz6gj";
+      sha256 = "0mbxzw7r7hv43db9422flc24ib9d8bdy1nasbni2h998jc5a5lb6";
       type = "gem";
     };
-    version = "0.29.1";
+    version = "0.32.0";
   };
   prawn-table = {
     dependencies = ["prawn"];
@@ -270,41 +322,60 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1gs894sj9zdlwx59h3rk4p0l3y8r18p22zhnfiyx9lngsa56gcrj";
+      sha256 = "1w9irn3rllm992c6j7fsx81gg539i7yy8zfddyw7q53hnlys0yhi";
       type = "gem";
     };
-    version = "0.1.1";
+    version = "0.1.2";
   };
   public_suffix = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0g9ds2ffzljl6jjmkjffwxc1z6lh5nkqqmhhkxjk71q5ggv0rkpm";
+      sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
       type = "gem";
     };
-    version = "3.1.1";
+    version = "4.0.6";
   };
   "pygments.rb" = {
-    dependencies = ["multi_json"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0lbvnwvz770ambm4d6lxgc2097rydn5rcc5d6986bnkzyxfqqjnv";
+      sha256 = "1mshqjh8v0v8k29f8annqfr4qlgkp39nbwx3sgm69aymv4skfddb";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g";
+      type = "gem";
+    };
+    version = "1.5.2";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
       type = "gem";
     };
-    version = "1.2.1";
+    version = "3.2.5";
   };
   rouge = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0yfhazlhjc4abgzhkgq8zqmdphvkh52211widkl4zhsbhqh8wg2q";
+      sha256 = "0b4b300i3m4m4kw7w1n9wgxwy16zccnb7271miksyzd0wq5b9pm3";
       type = "gem";
     };
-    version = "3.5.1";
+    version = "3.26.0";
   };
   ruby-enum = {
     dependencies = ["i18n"];
@@ -312,10 +383,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0h62avini866kxpjzqxlqnajma3yvj0y25l6hn9h2mv5pp6fcrhx";
+      sha256 = "1pys90hxylhyg969iw9lz3qai5lblf8xwbdg1g5aj52731a9k83p";
       type = "gem";
     };
-    version = "0.7.2";
+    version = "0.9.0";
   };
   ruby-rc4 = {
     groups = ["default"];
@@ -332,10 +403,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1w9gw28ly3zyqydnm8phxchf4ymyjl2r7zf7c12z8kla10cpmhlc";
+      sha256 = "0590m2pr9i209pp5z4mx0nb1961ishdiqb28995hw1nln1d1b5ji";
       type = "gem";
     };
-    version = "1.2.3";
+    version = "2.3.0";
   };
   safe_yaml = {
     groups = ["default"];
@@ -363,19 +434,19 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0wpl5z33796nz2ah44waflrd1girbra281d9i3m9nz4ylg1ljg5b";
+      sha256 = "0697qz1akblf8r3wi0s2dsjh468hfsd57fb0mrp93z35y2ni6bhh";
       type = "gem";
     };
-    version = "1.5.3";
+    version = "1.6.11";
   };
   ttfunk = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1mgrnqla5n51v4ivn844albsajkck7k6lviphfqa8470r46c58cd";
+      sha256 = "15iaxz9iak5643bq2bc0jkbjv8w2zn649lxgvh5wg48q9d4blw13";
       type = "gem";
     };
-    version = "1.5.1";
+    version = "1.7.0";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/typesetting/asciidoctorj/default.nix b/pkgs/tools/typesetting/asciidoctorj/default.nix
index c518ddeaf39..6a3b43dc8d1 100644
--- a/pkgs/tools/typesetting/asciidoctorj/default.nix
+++ b/pkgs/tools/typesetting/asciidoctorj/default.nix
@@ -1,12 +1,12 @@
-{ stdenv, fetchzip, jdk, makeWrapper }:
+{ lib, stdenv, fetchzip, jdk, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "asciidoctorj";
-  version = "2.4.0";
+  version = "2.4.2";
 
   src = fetchzip {
     url = "http://dl.bintray.com/asciidoctor/maven/org/asciidoctor/${pname}/${version}/${pname}-${version}-bin.zip";
-    sha256 = "1bp26x5mhbl25s9djlq6yani1vaqrgbi5mjljhwhj97iapwsd0yb";
+    sha256 = "1b4ivyzpg9p3idk48nfvgpz18qlxyycswkaab31j3dp1mniwvjla";
   };
 
   nativeBuildInputs = [ makeWrapper ];
@@ -18,14 +18,12 @@ stdenv.mkDerivation rec {
       --prefix JAVA_HOME : ${jdk}
   '';
 
-  meta = with stdenv.lib; {
-    description = ''
-      AsciidoctorJ is the official library for running Asciidoctor on the JVM.
-    '';
+  meta = with lib; {
+    description = "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 
+      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/";
@@ -33,4 +31,4 @@ stdenv.mkDerivation rec {
     platforms = platforms.all;
     maintainers = with maintainers; [ moaxcp ];
   };
-} 
+}
diff --git a/pkgs/tools/typesetting/bibclean/default.nix b/pkgs/tools/typesetting/bibclean/default.nix
index d0e2c79c0bc..8c7e123acf7 100644
--- a/pkgs/tools/typesetting/bibclean/default.nix
+++ b/pkgs/tools/typesetting/bibclean/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchurl }:
 
 stdenv.mkDerivation rec {
   pname = "bibclean";
@@ -17,10 +17,11 @@ stdenv.mkDerivation rec {
     mkdir -p $out/bin $out/share/man/man1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Prettyprint and syntax check BibTeX and Scribe bibliography data base files";
     homepage = "http://ftp.math.utah.edu/pub/bibclean";
     license = licenses.gpl2;
+    platforms = platforms.all;
     maintainers = with maintainers; [ dtzWill ];
   };
 }
diff --git a/pkgs/tools/typesetting/biber/default.nix b/pkgs/tools/typesetting/biber/default.nix
index 449208e9d5d..992da3578e5 100644
--- a/pkgs/tools/typesetting/biber/default.nix
+++ b/pkgs/tools/typesetting/biber/default.nix
@@ -1,7 +1,21 @@
-{ stdenv, fetchpatch, perlPackages, shortenPerlShebang, texlive }:
+{ lib, stdenv, fetchurl, fetchpatch, perlPackages, shortenPerlShebang, texlive }:
 
 let
-  biberSource = stdenv.lib.head (builtins.filter (p: p.tlType == "source") texlive.biber.pkgs);
+  biberSource = lib.head (builtins.filter (p: p.tlType == "source") texlive.biber.pkgs);
+
+  # perl 5.32.0 ships with U:C 1.27
+  UnicodeCollate_1_29 = perlPackages.buildPerlPackage rec {
+    pname = "Unicode-Collate";
+    version = "1.29";
+    src = fetchurl {
+      url = "mirror://cpan/authors/id/S/SA/SADAHIRO/${pname}-${version}.tar.gz";
+      sha256 = "0dr4k10fgbsczh4sz7w8d0nnba38r6jrg87cm3gw4xxgn55fzj7l";
+    };
+    meta = {
+      description = "Unicode Collation Algorithm";
+      license = perlPackages.perl.meta.license;
+    };
+  };
 in
 
 perlPackages.buildPerlModule {
@@ -16,18 +30,18 @@ perlPackages.buildPerlModule {
     DateTime DateTimeFormatBuilder DateTimeCalendarJulian
     ExtUtilsLibBuilder FileSlurper FileWhich IPCRun3 LogLog4perl LWPProtocolHttps ListAllUtils
     ListMoreUtils MozillaCA ParseRecDescent IOString ReadonlyXS RegexpCommon TextBibTeX
-    UnicodeLineBreak URI XMLLibXMLSimple XMLLibXSLT XMLWriter
+    UnicodeCollate_1_29 UnicodeLineBreak URI XMLLibXMLSimple XMLLibXSLT XMLWriter
     ClassAccessor TextCSV TextCSV_XS TextRoman DataUniqid LinguaTranslit SortKey
     TestDifferences
     PerlIOutf8_strict
   ];
-  nativeBuildInputs = stdenv.lib.optional stdenv.isDarwin shortenPerlShebang;
+  nativeBuildInputs = lib.optional stdenv.isDarwin shortenPerlShebang;
 
-  postInstall = stdenv.lib.optionalString stdenv.isDarwin ''
+  postInstall = lib.optionalString stdenv.isDarwin ''
     shortenPerlShebang $out/bin/biber
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Backend for BibLaTeX";
     license = with licenses; [ artistic1 gpl1Plus ];
     platforms = platforms.unix;
diff --git a/pkgs/tools/typesetting/biblatex-check/default.nix b/pkgs/tools/typesetting/biblatex-check/default.nix
index bad56066002..63bf7cf1d71 100644
--- a/pkgs/tools/typesetting/biblatex-check/default.nix
+++ b/pkgs/tools/typesetting/biblatex-check/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, python }:
+{ lib, stdenv, fetchFromGitHub, python3 }:
 
 stdenv.mkDerivation {
   pname = "biblatex-check";
@@ -11,13 +11,15 @@ stdenv.mkDerivation {
     sha256 = "1bq0yqckhssazwkivipdjmn1jpsf301i4ppyl88qhc5igx39wg25";
   };
 
-  buildInputs = [ python ];
+  buildInputs = [ python3 ];
+
+  strictDeps = true;
 
   installPhase = ''
     install -Dm755 biblatex_check.py $out/bin/biblatex-check
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Python2/3 script for checking BibLatex .bib files";
     homepage = "https://github.com/Pezmc/BibLatex-Check";
     license = licenses.mit;
diff --git a/pkgs/tools/typesetting/djvu2pdf/default.nix b/pkgs/tools/typesetting/djvu2pdf/default.nix
index 4e76fb87a6b..e6c8f80f9d2 100644
--- a/pkgs/tools/typesetting/djvu2pdf/default.nix
+++ b/pkgs/tools/typesetting/djvu2pdf/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, makeWrapper, fetchurl, djvulibre, ghostscript, which }:
+{ lib, stdenv, makeWrapper, fetchurl, djvulibre, ghostscript, which }:
 
 stdenv.mkDerivation rec {
   version = "0.9.2";
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
   installPhase = ''
     mkdir -p $out/bin
     cp -p djvu2pdf $out/bin
-    wrapProgram $out/bin/djvu2pdf --prefix PATH : ${stdenv.lib.makeBinPath [ ghostscript djvulibre which ]}
+    wrapProgram $out/bin/djvu2pdf --prefix PATH : ${lib.makeBinPath [ ghostscript djvulibre which ]}
 
     mkdir -p $out/man/man1
     cp -p djvu2pdf.1.gz $out/man/man1
@@ -22,9 +22,8 @@ stdenv.mkDerivation rec {
 
   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;
+    homepage = "https://0x2a.at/site/projects/djvu2pdf/";
+    license = lib.licenses.gpl1Only;
+    platforms = lib.platforms.all;
   };
 }
diff --git a/pkgs/tools/typesetting/docbook2odf/default.nix b/pkgs/tools/typesetting/docbook2odf/default.nix
index d846d9394b2..affa12c4019 100644
--- a/pkgs/tools/typesetting/docbook2odf/default.nix
+++ b/pkgs/tools/typesetting/docbook2odf/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perlPackages, makeWrapper, zip, libxslt }:
+{ lib, stdenv, fetchurl, perlPackages, makeWrapper, zip, libxslt }:
 
 stdenv.mkDerivation rec {
   name = "docbook2odf-0.244";
@@ -8,7 +8,8 @@ stdenv.mkDerivation rec {
     sha256 = "10k44g0qqa37k30pfj8vz95j6zdzz0nmnqjq1lyahfs2h4glzgwb";
   };
 
-  buildInputs = [ perlPackages.perl makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perlPackages.perl ];
 
   installPhase = ''
     mkdir -p "$out/bin/"
@@ -26,11 +27,11 @@ stdenv.mkDerivation rec {
     sed -i "s|/usr/share/docbook2odf|$out/share/docbook2odf|" "$out/bin/docbook2odf"
 
     wrapProgram "$out/bin/docbook2odf" \
-      --prefix PATH : "${stdenv.lib.makeBinPath [ zip libxslt ]}" \
+      --prefix PATH : "${lib.makeBinPath [ zip libxslt ]}" \
       --prefix PERL5PATH : "${perlPackages.makePerlPath [ perlPackages.PerlMagick ]}"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Convert DocBook to OpenDocument Format (ODF)";
     longDescription = ''
       Docbook2odf is a toolkit that automaticaly converts DocBook to OASIS
diff --git a/pkgs/tools/typesetting/docbook2x/default.nix b/pkgs/tools/typesetting/docbook2x/default.nix
index a36da7a2b6a..4b9e571c0ad 100644
--- a/pkgs/tools/typesetting/docbook2x/default.nix
+++ b/pkgs/tools/typesetting/docbook2x/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, texinfo, perlPackages
+{ fetchurl, lib, stdenv, texinfo, perlPackages
 , groff, libxml2, libxslt, gnused, libiconv, opensp
 , docbook_xml_dtd_43
 , makeWrapper }:
@@ -15,7 +15,8 @@ stdenv.mkDerivation rec {
   # writes its output to stdout instead of creating a file.
   patches = [ ./db2x_texixml-to-stdout.patch ];
 
-  buildInputs = [ texinfo groff libxml2 libxslt makeWrapper opensp libiconv ]
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ texinfo groff libxml2 libxslt opensp libiconv ]
     ++ (with perlPackages; [ perl XMLSAX XMLParser XMLNamespaceSupport ]);
 
   postConfigure = ''
@@ -44,7 +45,7 @@ stdenv.mkDerivation rec {
       "${gnused}/bin"
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     longDescription = ''
       docbook2X is a software package that converts DocBook documents
       into the traditional Unix man page format and the GNU Texinfo
diff --git a/pkgs/tools/typesetting/docbookrx/default.nix b/pkgs/tools/typesetting/docbookrx/default.nix
index 6bfb0188a3a..a41276ea432 100644
--- a/pkgs/tools/typesetting/docbookrx/default.nix
+++ b/pkgs/tools/typesetting/docbookrx/default.nix
@@ -48,7 +48,7 @@ in stdenv.mkDerivation {
   '';
 
   meta = with lib; {
-    description = "(An early version of) a DocBook to AsciiDoc converter written in Ruby.";
+    description = "(An early version of) a DocBook to AsciiDoc converter written in Ruby";
     homepage = "https://asciidoctor.org/";
     license = licenses.mit;
     maintainers = with maintainers; [ ];
diff --git a/pkgs/tools/typesetting/docbookrx/gemset.nix b/pkgs/tools/typesetting/docbookrx/gemset.nix
index 33a58845b22..bd756b996bb 100644
--- a/pkgs/tools/typesetting/docbookrx/gemset.nix
+++ b/pkgs/tools/typesetting/docbookrx/gemset.nix
@@ -20,4 +20,4 @@
     };
     version = "1.8.5";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/typesetting/fop/default.nix b/pkgs/tools/typesetting/fop/default.nix
index d5dea2c6dc6..1c5e7b0079d 100644
--- a/pkgs/tools/typesetting/fop/default.nix
+++ b/pkgs/tools/typesetting/fop/default.nix
@@ -1,23 +1,26 @@
-{ fetchurl, stdenv, ant, jdk, runtimeShell }:
+{ fetchurl, lib, stdenv, ant, jdk, runtimeShell }:
 
 stdenv.mkDerivation rec {
   pname = "fop";
-  version = "2.1";
+  version = "2.6";
 
   src = fetchurl {
     url = "mirror://apache/xmlgraphics/fop/source/${pname}-${version}-src.tar.gz";
-    sha256 = "165rx13q47l6qc29ppr7sg1z26vw830s3rkklj5ap7wgvy0ivbz5";
+    sha256 = "145qph3c0m4bmb342qxq1hwsg594lndmfs9ga1v7pk53s34sckq8";
   };
 
   buildInputs = [ ant jdk ];
 
-  buildPhase = "ant";
+  # build only the "package" target, which generates the fop command.
+  buildPhase = ''
+     export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8"
+     ant -f fop/build.xml package
+  '';
 
   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/
+    cp fop/build/*.jar fop/lib/*.jar $out/lib/
+    cp -r README fop/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.
@@ -29,7 +32,7 @@ stdenv.mkDerivation rec {
     chmod a+x $out/bin/fop
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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
diff --git a/pkgs/tools/typesetting/git-latexdiff/default.nix b/pkgs/tools/typesetting/git-latexdiff/default.nix
index d969ca8fec6..0bc8b7e073e 100644
--- a/pkgs/tools/typesetting/git-latexdiff/default.nix
+++ b/pkgs/tools/typesetting/git-latexdiff/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitLab, git, bash }:
+{ lib, stdenv, fetchFromGitLab, git, bash }:
 
 stdenv.mkDerivation rec {
   version = "1.3.0";
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
     chmod +x $prefix/bin/git-latexdiff
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "View diff on LaTeX source files on the generated PDF files";
     homepage = "https://gitlab.com/git-latexdiff/git-latexdiff";
     maintainers = [ ];
diff --git a/pkgs/tools/typesetting/halibut/default.nix b/pkgs/tools/typesetting/halibut/default.nix
index d2779df0c94..d077ef823ff 100644
--- a/pkgs/tools/typesetting/halibut/default.nix
+++ b/pkgs/tools/typesetting/halibut/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, perl}:
+{lib, stdenv, fetchurl, perl}:
 
 stdenv.mkDerivation rec {
   name = "halibut-1.2";
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
     make install
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Documentation production system for software manuals";
     homepage = "https://www.chiark.greenend.org.uk/~sgtatham/halibut/";
     license = licenses.mit;
diff --git a/pkgs/tools/typesetting/hevea/default.nix b/pkgs/tools/typesetting/hevea/default.nix
index f3f634eb944..ad6427e5622 100644
--- a/pkgs/tools/typesetting/hevea/default.nix
+++ b/pkgs/tools/typesetting/hevea/default.nix
@@ -1,18 +1,18 @@
-{ stdenv, fetchurl, ocamlPackages }:
+{ lib, stdenv, fetchurl, ocamlPackages }:
 
 stdenv.mkDerivation rec {
-  name = "hevea-2.34";
+  name = "hevea-2.35";
 
   src = fetchurl {
     url = "http://pauillac.inria.fr/~maranget/hevea/distri/${name}.tar.gz";
-    sha256 = "1pzyszxw90klpcmhjqrjfc8cw6c0gm4w2blim8ydyxb6rq6qml1s";
+    sha256 = "sha256-8Ym62l0+WzWFXf39tbJwyZT8eiNmsBJQ12E1mtZsnss=";
   };
 
   buildInputs = with ocamlPackages; [ ocaml ocamlbuild ];
 
   makeFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A quite complete and fast LATEX to HTML translator";
     homepage = "http://pauillac.inria.fr/~maranget/hevea/";
     license = licenses.qpl;
diff --git a/pkgs/tools/typesetting/htmldoc/default.nix b/pkgs/tools/typesetting/htmldoc/default.nix
index ae6e2e9006e..aaea9090b72 100644
--- a/pkgs/tools/typesetting/htmldoc/default.nix
+++ b/pkgs/tools/typesetting/htmldoc/default.nix
@@ -1,29 +1,26 @@
-{ stdenv, fetchurl
-
-, SystemConfiguration ? null, Foundation ? null
-}:
-
-assert stdenv.isDarwin -> SystemConfiguration != null
-                       && Foundation != null;
+{ lib, stdenv, fetchFromGitHub, zlib, libpng, libjpeg, SystemConfiguration, Foundation, pkg-config }:
 
 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";
+  version = "1.9.12";
+  src = fetchFromGitHub {
+    owner = "michaelrsweet";
+    repo = "htmldoc";
+    rev = "v${version}";
+    sha256 = "1dqima0g3j301wwzjxdhzk5pvfj724rl615gf8ssxxajfnid1gl0";
   };
-  buildInputs = with stdenv;
-       lib.optional isDarwin SystemConfiguration
-    ++ lib.optional isDarwin Foundation;
 
-  meta = with stdenv.lib; {
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ zlib libpng libjpeg ]
+    ++ lib.optionals stdenv.isDarwin [ Foundation SystemConfiguration ];
+
+  meta = with lib; {
     description = "Converts HTML files to PostScript and PDF";
     homepage    = "https://michaelrsweet.github.io/htmldoc";
-    license     = licenses.gpl2;
+    changelog   = "https://github.com/michaelrsweet/htmldoc/releases/tag/v${version}";
+    license     = licenses.gpl2Only;
     maintainers = with maintainers; [ shanemikel ];
-    platforms   = with platforms; linux ++ darwin;
+    platforms   = platforms.unix;
 
     longDescription = ''
       HTMLDOC is a program that reads HTML source files or web pages and
diff --git a/pkgs/tools/typesetting/kindlegen/default.nix b/pkgs/tools/typesetting/kindlegen/default.nix
deleted file mode 100644
index 709e9400534..00000000000
--- a/pkgs/tools/typesetting/kindlegen/default.nix
+++ /dev/null
@@ -1,51 +0,0 @@
-{ 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/pkgs/tools/typesetting/kramdown-asciidoc/default.nix b/pkgs/tools/typesetting/kramdown-asciidoc/default.nix
index 3b54eb637d2..aa1d68e708a 100644
--- a/pkgs/tools/typesetting/kramdown-asciidoc/default.nix
+++ b/pkgs/tools/typesetting/kramdown-asciidoc/default.nix
@@ -1,6 +1,6 @@
 { lib, bundlerApp, makeWrapper,
   # Optional dependencies, can be null
-  epubcheck, kindlegen,
+  epubcheck,
   bundlerUpdateScript
 }:
 
@@ -17,8 +17,7 @@ let
 
     # postBuild = ''
     #     wrapProgram "$out/bin/asciidoctor-epub3" \
-    #       ${lib.optionalString (epubcheck != null) "--set EPUBCHECK ${epubcheck}/bin/epubcheck"} \
-    #       ${lib.optionalString (kindlegen != null) "--set KINDLEGEN ${kindlegen}/bin/kindlegen"}
+    #       ${lib.optionalString (epubcheck != null) "--set EPUBCHECK ${epubcheck}/bin/epubcheck"}
     #   '';
 
     # passthru = {
@@ -26,7 +25,7 @@ let
     # };
 
     meta = with lib; {
-      description = "A kramdown extension for converting Markdown documents to AsciiDoc.";
+      description = "A kramdown extension for converting Markdown documents to AsciiDoc";
       homepage = "https://asciidoctor.org/";
       license = licenses.mit;
       maintainers = with maintainers; [ ];
diff --git a/pkgs/tools/typesetting/kramdown-asciidoc/gemset.nix b/pkgs/tools/typesetting/kramdown-asciidoc/gemset.nix
index 8a0ffda9e78..0ade973304d 100644
--- a/pkgs/tools/typesetting/kramdown-asciidoc/gemset.nix
+++ b/pkgs/tools/typesetting/kramdown-asciidoc/gemset.nix
@@ -20,4 +20,4 @@
     };
     version = "1.0.1";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/typesetting/lout/CVE-2019-19917-and-CVE-2019-19918.patch b/pkgs/tools/typesetting/lout/CVE-2019-19917-and-CVE-2019-19918.patch
new file mode 100644
index 00000000000..b146822c9c5
--- /dev/null
+++ b/pkgs/tools/typesetting/lout/CVE-2019-19917-and-CVE-2019-19918.patch
@@ -0,0 +1,95 @@
+--- a/externs.h
++++ b/externs.h
+@@ -260,6 +260,9 @@ If you're compiling this, you've got the
+ /*                      that can appear correctly on one page.  Can be       */
+ /*                      increased to any small positive integer.             */
+ /*                                                                           */
++/*  MAX_FORMAT          The maximum number of characters for sscanf formats  */
++/*                      for splitting strings with tab-delimited fields.     */
++/*                                                                           */
+ /*****************************************************************************/
+ 
+ #define	MAX_FULL_LENGTH	8388607	/* 2**23 - 1, about 148 metres */
+@@ -275,6 +278,7 @@ If you're compiling this, you've got the
+ #define	MAX_LEX_STACK	20
+ #define	MAX_CHARS	256
+ #define MAX_HCOPIES	3
++#define MAX_FORMAT	100
+ 
+ /*****************************************************************************/
+ /*                                                                           */
+--- a/z02.c
++++ b/z02.c
+@@ -378,7 +378,7 @@ static void srcnext(void)
+   if( blksize != 0 && chpt < limit )
+   { debugcond0(DLA, DD, stack_free <= 1, "srcnext: transferring.");
+     col = buf;
+-    while( chtbl[(*--col = *--limit)] != NEWLINE );
++    while( col > mem_block && chtbl[(*--col = *--limit)] != NEWLINE );
+     frst = col + 1;  limit++;  blksize = 0;
+   }
+ 
+--- a/z33.c
++++ b/z33.c
+@@ -847,6 +847,7 @@ BOOLEAN DbRetrieve(OBJECT db, BOOLEAN ga
+ BOOLEAN DbRetrieveNext(OBJECT db, BOOLEAN *gall, OBJECT *sym, FULL_CHAR *tag,
+   FULL_CHAR *seq, FILE_NUM *dfnum, long *dfpos, int *dlnum, long *cont)
+ { FULL_CHAR line[MAX_BUFF], *cline, fname[MAX_BUFF]; int symnum;
++  char format[MAX_FORMAT];
+   ifdebug(DPP, D, ProfileOn("DbRetrieveNext"));
+   debug2(DBS, DD, "DbRetrieveNext( %s, %ld )", string(db), *cont);
+   assert(reading(db), "DbRetrieveNext: not reading");
+@@ -858,6 +859,8 @@ BOOLEAN DbRetrieveNext(OBJECT db, BOOLEA
+     return FALSE;
+   }
+ 
++  sprintf(format, "%%d&%%%d[^\t]\t%%%d[^\t]\t%%*[^\t]\t%%ld\t%%d\t%%%d[^\n\f]", MAX_BUFF-1, MAX_BUFF-1, MAX_BUFF-1);
++
+   if( in_memory(db) )
+   {
+     /* get next entry from internal database */
+@@ -868,7 +871,7 @@ BOOLEAN DbRetrieveNext(OBJECT db, BOOLEA
+     }
+     cline = (FULL_CHAR *) db_lines(db)[*cont];
+     *gall = (cline[0] == '0' ? 1 : 0);
+-    sscanf((char *)&cline[*gall], "%d&%[^\t]\t%[^\t]\t%*[^\t]\t%ld\t%d\t%[^\n\f]",
++    sscanf((char *)&cline[*gall], format,
+       &symnum, tag, seq, dfpos, dlnum, fname);
+     *cont = *cont + 1;
+   }
+@@ -882,7 +885,7 @@ BOOLEAN DbRetrieveNext(OBJECT db, BOOLEA
+       return FALSE;
+     }
+     *gall = (line[0] == '0' ? 1 : 0);
+-    sscanf((char *)&line[*gall], "%d&%[^\t]\t%[^\t]\t%*[^\t]\t%ld\t%d\t%[^\n\f]",
++    sscanf((char *)&line[*gall], format,
+       &symnum, tag, seq, dfpos, dlnum, fname);
+     *cont = ftell(db_filep(db));
+   }
+--- a/z39.c
++++ b/z39.c
+@@ -79,11 +79,13 @@ int strcollcmp(char *a, char *b)
+ int strcollcmp(char *a, char *b)
+ { char a1[MAX_BUFF], a2[MAX_BUFF], a3[MAX_BUFF];
+   char b1[MAX_BUFF], b2[MAX_BUFF], b3[MAX_BUFF];
++  char format[MAX_FORMAT];
+   int order;
++  sprintf(format, "%%%d[^\t]\t%%%d[^\t]\t%%%d[^\t]", MAX_BUFF-1, MAX_BUFF-1, MAX_BUFF-1);
+   a1[0] = a2[0] = a3[0] = '\0';
+-  sscanf(a, "%[^\t]\t%[^\t]\t%[^\t]", a1, a2, a3);
++  sscanf(a, format, a1, a2, a3);
+   b1[0] = b2[0] = b3[0] = '\0';
+-  sscanf(b, "%[^\t]\t%[^\t]\t%[^\t]", b1, b2, b3);
++  sscanf(b, format, b1, b2, b3);
+   order = strcoll(a1, b1);
+   if( order == 0 )
+   {
+@@ -251,7 +253,7 @@ FULL_CHAR *StringQuotedWord(OBJECT x)
+   *q++ = CH_QUOTE;
+   for( p = string(x);  *p != '\0';  p++ )
+   { 
+-    for( r = (FULL_CHAR *) quoted_string[*p];  *r != '\0';  *q++ = *r++ );
++    for( r = (FULL_CHAR *) quoted_string[*p];  *r != '\0' && q < &buff[MAX_BUFF-2];  *q++ = *r++ );
+   }
+   *q++ = CH_QUOTE;
+   *q++ = '\0';
diff --git a/pkgs/tools/typesetting/lout/default.nix b/pkgs/tools/typesetting/lout/default.nix
index d86c4908f21..4737c5d7409 100644
--- a/pkgs/tools/typesetting/lout/default.nix
+++ b/pkgs/tools/typesetting/lout/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, ghostscript}:
+{lib, stdenv, fetchurl, ghostscript}:
 
 stdenv.mkDerivation rec {
   name = "lout-3.40";
@@ -14,6 +14,11 @@ stdenv.mkDerivation rec {
     sha256 = "1gb8vb1wl7ikn269dd1c7ihqhkyrwk19jwx5kd0rdvbk6g7g25ix";
   };
 
+  patches = [
+    # https://build.opensuse.org/request/show/843612
+    ./CVE-2019-19917-and-CVE-2019-19918.patch
+  ];
+
   buildInputs = [ ghostscript ];
   builder = ./builder.sh;
 
@@ -44,9 +49,9 @@ stdenv.mkDerivation rec {
     # Wiki: https://sourceforge.net/p/lout/wiki/
     homepage = "https://savannah.nongnu.org/projects/lout/";
 
-    license = stdenv.lib.licenses.gpl3Plus;
+    license = lib.licenses.gpl3Plus;
 
-    platforms = stdenv.lib.platforms.all;
+    platforms = lib.platforms.all;
     maintainers = [ ];
   };
 }
diff --git a/pkgs/tools/typesetting/lowdown/default.nix b/pkgs/tools/typesetting/lowdown/default.nix
index aa7a8598d66..640bf49fc16 100644
--- a/pkgs/tools/typesetting/lowdown/default.nix
+++ b/pkgs/tools/typesetting/lowdown/default.nix
@@ -1,25 +1,51 @@
-{ stdenv, fetchurl, which }:
+{ lib, stdenv, fetchurl, fixDarwinDylibNames, which }:
 
 stdenv.mkDerivation rec {
   pname = "lowdown";
-  version = "0.7.3";
+  version = "0.8.5";
 
-  outputs = [ "out" "dev" ];
+  outputs = [ "out" "lib" "dev" "man" ];
 
   src = fetchurl {
     url = "https://kristaps.bsd.lv/lowdown/snapshots/lowdown-${version}.tar.gz";
-    sha512 = "14mx22aqr9cmin4cyhrclhm0hly1i21j2dmsikfp1c87wl2kpn9xgxnix5r0iqh5dwjxdh591rfh21xjp0l11m0nl5wkpnn7wmq7g6b";
+    sha512 = "0gvrjxvizpxm5xvw8v2jygmx244wdl9n75qxz4chqbzkwshk4gwscz38p7sq9qlsbq8jmnv4l095a9dl9b836kym38hh1bvzmdiflar";
   };
 
-  nativeBuildInputs = [ which ];
+  nativeBuildInputs = [ which ]
+    ++ lib.optionals stdenv.isDarwin [ fixDarwinDylibNames ];
+
+  preConfigure = lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) ''
+    echo 'HAVE_SANDBOX_INIT=0' > configure.local
+  '';
 
   configurePhase = ''
+    runHook preConfigure
     ./configure PREFIX=''${!outputDev} \
                 BINDIR=''${!outputBin}/bin \
-                MANDIR=''${!outputBin}/share/man
+                LIBDIR=''${!outputLib}/lib \
+                MANDIR=''${!outputMan}/share/man
+    runHook postConfigure
   '';
 
-  meta = with stdenv.lib; {
+  # Fix lib extension so that fixDarwinDylibNames detects it
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    mv $lib/lib/liblowdown.{so,dylib}
+  '';
+
+  patches = lib.optional (!stdenv.hostPlatform.isStatic) ./shared.patch;
+
+  doInstallCheck = stdenv.hostPlatform == stdenv.buildPlatform;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    echo '# TEST' > test.md
+    $out/bin/lowdown test.md
+    runHook postInstallCheck
+  '';
+
+  doCheck = stdenv.hostPlatform == stdenv.buildPlatform;
+  checkTarget = "regress";
+
+  meta = with lib; {
     homepage = "https://kristaps.bsd.lv/lowdown/";
     description = "Simple markdown translator";
     license = licenses.isc;
@@ -27,4 +53,3 @@ stdenv.mkDerivation rec {
     platforms = platforms.unix;
   };
 }
-
diff --git a/pkgs/tools/typesetting/lowdown/shared.patch b/pkgs/tools/typesetting/lowdown/shared.patch
new file mode 100644
index 00000000000..ed9f266b3f9
--- /dev/null
+++ b/pkgs/tools/typesetting/lowdown/shared.patch
@@ -0,0 +1,41 @@
+diff --git a/Makefile b/Makefile
+index 955f737..2c9532c 100644
+--- a/Makefile
++++ b/Makefile
+@@ -80,7 +80,7 @@ REGRESS_ARGS	+= "--parse-no-autolink"
+ REGRESS_ARGS	+= "--parse-no-cmark"
+ REGRESS_ARGS	+= "--parse-no-deflists"
+ 
+-all: lowdown lowdown-diff lowdown.pc
++all: lowdown lowdown-diff liblowdown.so lowdown.pc
+ 
+ www: $(HTMLS) $(PDFS) $(THUMBS) lowdown.tar.gz lowdown.tar.gz.sha512
+ 
+@@ -101,6 +101,9 @@ lowdown-diff: lowdown
+ liblowdown.a: $(OBJS) $(COMPAT_OBJS)
+ 	$(AR) rs $@ $(OBJS) $(COMPAT_OBJS)
+ 
++liblowdown.so: $(OBJS) $(COMPAT_OBJS)
++	$(CC) -shared -o $@ $(OBJS) $(COMPAT_OBJS) $(LDFLAGS)
++
+ install: all
+ 	mkdir -p $(DESTDIR)$(BINDIR)
+ 	mkdir -p $(DESTDIR)$(LIBDIR)/pkgconfig
+@@ -111,7 +114,7 @@ install: all
+ 	$(INSTALL_DATA) lowdown.pc $(DESTDIR)$(LIBDIR)/pkgconfig
+ 	$(INSTALL_PROGRAM) lowdown $(DESTDIR)$(BINDIR)
+ 	$(INSTALL_PROGRAM) lowdown-diff $(DESTDIR)$(BINDIR)
+-	$(INSTALL_LIB) liblowdown.a $(DESTDIR)$(LIBDIR)
++	$(INSTALL_LIB) liblowdown.so $(DESTDIR)$(LIBDIR)
+ 	$(INSTALL_DATA) lowdown.h $(DESTDIR)$(INCLUDEDIR)
+ 	for f in $(MANS) ; do \
+ 		name=`basename $$f .html` ; \
+@@ -199,7 +202,7 @@ main.o: lowdown.h
+ 
+ clean:
+ 	rm -f $(OBJS) $(COMPAT_OBJS) main.o
+-	rm -f lowdown lowdown-diff liblowdown.a lowdown.pc
++	rm -f lowdown lowdown-diff liblowdown.so lowdown.pc
+ 	rm -f index.xml diff.xml diff.diff.xml README.xml lowdown.tar.gz.sha512 lowdown.tar.gz
+ 	rm -f $(PDFS) $(HTMLS) $(THUMBS)
+ 
diff --git a/pkgs/tools/typesetting/mmark/default.nix b/pkgs/tools/typesetting/mmark/default.nix
index be7d4c95833..bc5ddcc9d75 100644
--- a/pkgs/tools/typesetting/mmark/default.nix
+++ b/pkgs/tools/typesetting/mmark/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "mmark";
@@ -19,8 +19,8 @@ buildGoPackage rec {
   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;
+    license = with lib.licenses; bsd2;
+    maintainers = with lib.maintainers; [ yrashk ];
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/typesetting/multimarkdown/default.nix b/pkgs/tools/typesetting/multimarkdown/default.nix
index 5043eb681e8..6dfbc82af31 100644
--- a/pkgs/tools/typesetting/multimarkdown/default.nix
+++ b/pkgs/tools/typesetting/multimarkdown/default.nix
@@ -1,25 +1,34 @@
-{ stdenv, fetchgit, perl }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, perl
+, pkg-config
+}:
 
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "multimarkdown";
-  version = "4.7.1";
+  version = "6.6.0";
 
-  src = fetchgit {
-    url = "https://github.com/fletcher/MultiMarkdown-4.git";
-    fetchSubmodules = true;
-    rev = "dd060247518715ef2b52be22b8f49d0e6d2c3a8b";
-    sha256 = "11f246r30q2fx4xw7valhqjj4mc4ydj5fv5f2kbl5h93y69q0bw7";
+  src = fetchFromGitHub {
+    owner = "fletcher";
+    repo = "MultiMarkdown-6";
+    rev = version;
+    hash = "sha256-emJbY0wucoc/GdjlILoeqjwuwuPpTjXTqZN0gUKOyLg=";
   };
 
-  preBuild = ''
-    substituteInPlace enumsToPerl.pl --replace "/usr/bin/perl" "${perl}/bin/perl"
+  postPatch = ''
+    patchShebangs tools/enumsToPerl.pl
   '';
 
-  buildInputs = [ stdenv ];
-  checkPhase = "make test-all";
-  installPhase = "make pkg-install prefix='' DESTDIR=$out; make pkg-install-scripts prefix='' DESTDIR=$out";
+  nativeBuildInputs = [
+    cmake
+    perl
+    pkg-config
+  ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
+    homepage = "https://fletcher.github.io/MultiMarkdown-6/introduction.html";
     description = "A derivative of Markdown that adds new syntax features";
     longDescription = ''
       MultiMarkdown is a lightweight markup language created by
@@ -30,23 +39,20 @@ stdenv.mkDerivation {
 
       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.)
+      - 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 ];
+    license = with licenses; [ mit ];
     platforms = platforms.all;
-    maintainers = with stdenv.lib.maintainers; [ lowfatcomputing ];
+    maintainers = with maintainers; [ AndersonTorres ];
   };
 }
diff --git a/pkgs/tools/typesetting/odpdown/default.nix b/pkgs/tools/typesetting/odpdown/default.nix
index 4b85a252c13..7b20d230b9f 100644
--- a/pkgs/tools/typesetting/odpdown/default.nix
+++ b/pkgs/tools/typesetting/odpdown/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pythonPackages, libreoffice }:
+{ lib, fetchurl, pythonPackages, libreoffice }:
 
 pythonPackages.buildPythonApplication rec {
 
@@ -16,7 +16,7 @@ pythonPackages.buildPythonApplication rec {
     nose
   ];
 
-  meta = with stdenv.lib; {
+  meta = with 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";
diff --git a/pkgs/tools/typesetting/pdf2djvu/default.nix b/pkgs/tools/typesetting/pdf2djvu/default.nix
index c3ddb219ab8..33f8481bc1a 100644
--- a/pkgs/tools/typesetting/pdf2djvu/default.nix
+++ b/pkgs/tools/typesetting/pdf2djvu/default.nix
@@ -1,10 +1,11 @@
 { stdenv
 , lib
 , fetchFromGitHub
+, fetchpatch
 , autoreconfHook
 , gettext
 , libtool
-, pkgconfig
+, pkg-config
 , djvulibre
 , exiv2
 , fontconfig
@@ -25,7 +26,16 @@ stdenv.mkDerivation rec {
     sha256 = "1igabfy3fd7qndihmkfk9incc15pjxpxh2cn5pfw5fxfwrpjrarn";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  patches = [
+    # Not included in 0.9.17.1, but will be in the next version.
+    (fetchpatch {
+      name = "no-poppler-splash.patch";
+      url = "https://github.com/jwilk/pdf2djvu/commit/2ec7eee57a47bbfd296badaa03dc20bf71b50201.patch";
+      sha256 = "03kap7k2j29r16qgl781cxpswzg3r2yn513cqycgl0vax2xj3gly";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
 
   buildInputs = [
     djvulibre
@@ -52,11 +62,10 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with 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/pkgs/tools/typesetting/pdf2htmlEX/add-glib-cmake.patch b/pkgs/tools/typesetting/pdf2htmlEX/add-glib-cmake.patch
deleted file mode 100644
index 8e1d9dfc191..00000000000
--- a/pkgs/tools/typesetting/pdf2htmlEX/add-glib-cmake.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-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/pkgs/tools/typesetting/pdf2htmlEX/default.nix b/pkgs/tools/typesetting/pdf2htmlEX/default.nix
deleted file mode 100644
index dee6ec3c6ff..00000000000
--- a/pkgs/tools/typesetting/pdf2htmlEX/default.nix
+++ /dev/null
@@ -1,48 +0,0 @@
-{ 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/pkgs/tools/typesetting/pdf2odt/default.nix b/pkgs/tools/typesetting/pdf2odt/default.nix
index 879597f91da..6b64ee46609 100644
--- a/pkgs/tools/typesetting/pdf2odt/default.nix
+++ b/pkgs/tools/typesetting/pdf2odt/default.nix
@@ -38,12 +38,11 @@ in stdenv.mkDerivation rec {
       --prefix PATH : ${path}
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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/pkgs/tools/typesetting/pdfchain/default.nix b/pkgs/tools/typesetting/pdfchain/default.nix
new file mode 100644
index 00000000000..09122d60bc0
--- /dev/null
+++ b/pkgs/tools/typesetting/pdfchain/default.nix
@@ -0,0 +1,56 @@
+{ lib, stdenv, fetchurl, fetchpatch
+, autoconf, gtkmm3, glib, pdftk, pkg-config, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pdfchain";
+  version = "0.4.4.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-Hu4Pk9voyc75+f5OwKEOCkXKjN5nzWzv+izmyEN1Lz0=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config wrapGAppsHook autoconf
+  ];
+
+  buildInputs = [
+    gtkmm3 pdftk glib
+  ];
+
+  patches = let
+    fetchDebianPatch = {name, sha256}: fetchpatch {
+      url = "https://salsa.debian.org/debian/pdfchain/raw/2d29107756a3194fb522bdea8e9b9e393b15a8f3/debian/patches/${name}";
+      inherit name sha256;
+    };
+  in
+  [
+    (fetchDebianPatch {
+      name = "fix_crash_on_startup";
+      sha256 = "sha256-1UyMHHGrmUIFhY53ILdMMsyocSIbcV6CKQ7sLVNhNQw=";
+    })
+    (fetchDebianPatch {
+      name = "fix_desktop_file";
+      sha256 = "sha256-L6lhUs7GqVN1XOQO6bbz6BT29n4upsJtlHCAIGzk1Bw=";
+    })
+    (fetchDebianPatch {
+      name = "fix_spelling";
+      sha256 = "sha256-sOUUslPfcOo2K3zuaLcux+CNdgfWM0phsfe6g4GUFes=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace src/constant.h \
+        --replace '"pdftk"' '"${pdftk}/bin/pdftk"' \
+        --replace "/usr/share" "$out/share"
+  '';
+
+  meta = with lib; {
+    description = "A graphical user interface for the PDF Toolkit (PDFtk)";
+    homepage = "https://pdfchain.sourceforge.io";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ hqurve ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/typesetting/pdfgrep/default.nix b/pkgs/tools/typesetting/pdfgrep/default.nix
index e445cf78d7a..3c1fca9a7c9 100644
--- a/pkgs/tools/typesetting/pdfgrep/default.nix
+++ b/pkgs/tools/typesetting/pdfgrep/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, poppler, libgcrypt, pcre, asciidoc }:
+{ lib, stdenv, fetchurl, pkg-config, poppler, libgcrypt, pcre, asciidoc }:
 
 stdenv.mkDerivation rec {
   pname = "pdfgrep";
@@ -15,14 +15,14 @@ stdenv.mkDerivation rec {
     done
   '';
 
-  nativeBuildInputs = [ pkgconfig asciidoc ];
+  nativeBuildInputs = [ pkg-config 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;
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ qknight fpletz ];
+    platforms = with lib.platforms; unix;
   };
 }
diff --git a/pkgs/tools/typesetting/pdfsandwich/default.nix b/pkgs/tools/typesetting/pdfsandwich/default.nix
index 12fcf8a71a2..755ac6bb32a 100644
--- a/pkgs/tools/typesetting/pdfsandwich/default.nix
+++ b/pkgs/tools/typesetting/pdfsandwich/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, ocaml, makeWrapper, fetchsvn, ghostscript, imagemagick, perl, poppler_utils, tesseract, unpaper }:
+{ lib, stdenv, ocaml, makeWrapper, fetchsvn, ghostscript, imagemagick, perl, poppler_utils, tesseract, unpaper }:
 
 stdenv.mkDerivation {
   version = "0.1.7";
@@ -10,17 +10,18 @@ stdenv.mkDerivation {
     sha256 = "1420c33divch087xrr61lvyf975bapqkgjqaighl581i69nlzsm6";
   };
 
-  buildInputs = [ ocaml perl makeWrapper];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ ocaml perl ];
   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 ]}
+    wrapProgram $out/bin/pdfsandwich --prefix PATH : ${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; {
+meta = with lib; {
     description = "OCR tool for scanned PDFs";
     homepage = "http://www.tobias-elze.de/pdfsandwich/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/typesetting/pdftk/default.nix b/pkgs/tools/typesetting/pdftk/default.nix
index b30d6269c34..c1f04616729 100644
--- a/pkgs/tools/typesetting/pdftk/default.nix
+++ b/pkgs/tools/typesetting/pdftk/default.nix
@@ -1,21 +1,21 @@
-{ stdenv, fetchFromGitLab, gradle_5, jre, perl, writeText, runtimeShell }:
+{ lib, stdenv, fetchFromGitLab, gradle, jre, perl, writeText, runtimeShell }:
 
 let
   pname = "pdftk";
-  version = "3.0.8";
+  version = "3.2.1";
 
   src = fetchFromGitLab {
     owner = "pdftk-java";
     repo = "pdftk";
     rev = "v${version}";
-    sha256 = "1bj4a9g5mbxd859mmawzs0mpm0jw7ap4n1imcwkwz142r9x1g6rk";
+    sha256 = "056db8rjczdfkq7fm3bv5g15y042rc9hb4zh5qccjrdw630vk9y4";
   };
 
   deps = stdenv.mkDerivation {
     pname = "${pname}-deps";
     inherit src version;
 
-    nativeBuildInputs = [ gradle_5 perl ];
+    nativeBuildInputs = [ gradle perl ];
 
     buildPhase = ''
       export GRADLE_USER_HOME=$(mktemp -d)
@@ -32,7 +32,7 @@ let
 
     outputHashAlgo = "sha256";
     outputHashMode = "recursive";
-    outputHash = "12b7lw1zpj69pv4bpbrm6pi0ip02ay3dfj3vcy2jyikfbwdb3qcz";
+    outputHash = "0p59myc5m3ds7fh0zdz3n7l7hx6dj8bpyqxzlhdrqybsyxwpw4w3";
   };
 
   # Point to our local deps repo
@@ -65,7 +65,7 @@ let
 in stdenv.mkDerivation rec {
   inherit pname version src;
 
-  nativeBuildInputs = [ gradle_5 ];
+  nativeBuildInputs = [ gradle ];
 
   buildPhase = ''
     export GRADLE_USER_HOME=$(mktemp -d)
@@ -74,22 +74,22 @@ in stdenv.mkDerivation rec {
 
   installPhase = ''
     mkdir -p $out/{bin,share/pdftk,share/man/man1}
-    cp build/libs/pdftk.jar $out/share/pdftk
+    cp build/libs/pdftk-all.jar $out/share/pdftk
 
     cat  << EOF > $out/bin/pdftk
     #!${runtimeShell}
-    exec ${jre}/bin/java -jar "$out/share/pdftk/pdftk.jar" "\$@"
+    exec ${jre}/bin/java -jar "$out/share/pdftk/pdftk-all.jar" "\$@"
     EOF
     chmod a+x "$out/bin/pdftk"
 
     cp ${src}/pdftk.1 $out/share/man/man1
   '';
 
-  meta = {
+  meta = with lib; {
     description = "Command-line tool for working with PDFs";
     homepage = "https://gitlab.com/pdftk-java/pdftk";
-    license = stdenv.lib.licenses.gpl2;
-    maintainers = with stdenv.lib.maintainers; [ raskin averelld ];
-    platforms = stdenv.lib.platforms.unix;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ raskin averelld ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/typesetting/pdftk/legacy.nix b/pkgs/tools/typesetting/pdftk/legacy.nix
index b3edd7d5450..3c4d042097f 100644
--- a/pkgs/tools/typesetting/pdftk/legacy.nix
+++ b/pkgs/tools/typesetting/pdftk/legacy.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, gcj, unzip }:
+{ fetchurl, lib, stdenv, gcj, unzip }:
 
 stdenv.mkDerivation {
   name = "pdftk-2.02";
@@ -35,8 +35,9 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [raskin];
+    platforms = with lib.platforms; linux;
+    broken = true; # Broken on Hydra since 2020-08-24
   };
 }
diff --git a/pkgs/tools/typesetting/psutils/default.nix b/pkgs/tools/typesetting/psutils/default.nix
index 72c72d1b3ba..fe3223ae6c9 100644
--- a/pkgs/tools/typesetting/psutils/default.nix
+++ b/pkgs/tools/typesetting/psutils/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, perl }:
+{ lib, stdenv, fetchurl, perl }:
 
 stdenv.mkDerivation {
   name = "psutils-17";
@@ -18,7 +18,7 @@ stdenv.mkDerivation {
     mkdir -p $out/bin $out/share/man/man1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Collection of useful utilities for manipulating PS documents";
     homepage = "http://knackered.knackered.org/angus/psutils/";
     license = licenses.bsd3;
diff --git a/pkgs/tools/typesetting/rubber/default.nix b/pkgs/tools/typesetting/rubber/default.nix
index a9ac2690b66..c09ae04e3a1 100644
--- a/pkgs/tools/typesetting/rubber/default.nix
+++ b/pkgs/tools/typesetting/rubber/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, python3Packages, texinfo }:
+{ fetchurl, lib, stdenv, python3Packages, texinfo }:
 
 python3Packages.buildPythonApplication rec {
   pname = "rubber";
@@ -9,22 +9,22 @@ python3Packages.buildPythonApplication rec {
     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
+  # I'm sure there is a better way to pass these parameters to the build script...
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace 'pdf  = True' 'pdf = False' \
+      --replace '$base/man'   'share/man' \
+      --replace '$base/info'  'share/info' \
+      --replace '$base/share' 'share'
   '';
 
-  # the check scripts forces python2. If we need to use python3 at some point, we should use
-  # the correct python
+  nativeBuildInputs = [ texinfo ];
+
   checkPhase = ''
-    sed -i 's|python=python3|python=${python3Packages.python.interpreter}|' tests/run.sh
     cd tests && ${stdenv.shell} run.sh
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Wrapper for LaTeX and friends";
     longDescription = ''
       Rubber is a program whose purpose is to handle all tasks related
diff --git a/pkgs/tools/typesetting/satysfi/default.nix b/pkgs/tools/typesetting/satysfi/default.nix
index 7a4b8010f04..d18c7fc270e 100644
--- a/pkgs/tools/typesetting/satysfi/default.nix
+++ b/pkgs/tools/typesetting/satysfi/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchzip, fetchFromGitHub, ruby, dune, ocamlPackages
+{ lib, stdenv, fetchFromGitHub, ruby, dune_2, ocamlPackages
 , ipaexfont, junicode, lmodern, lmmath
 }:
 let
@@ -6,8 +6,8 @@ let
     src = fetchFromGitHub {
       owner = "gfngfn";
       repo = "camlpdf";
-      rev = "v2.2.2+satysfi";
-      sha256 = "1dkyibjd8qb9fzljlzdsfdhb798vc9m8xqkd7295fm6bcfpr5r5k";
+      rev = "v2.3.1+satysfi";
+      sha256 = "1s8wcqdkl1alvfcj67lhn3qdz8ikvd1v64f4q6bi4c0qj9lmp30k";
     };
   });
   otfm = ocamlPackages.otfm.overrideAttrs (o: {
@@ -18,23 +18,29 @@ let
       sha256 = "0y8s0ij1vp1s4h5y1hn3ns76fzki2ba5ysqdib33akdav9krbj8p";
     };
   });
-  yojson = ocamlPackages.yojson.overrideAttrs (o: {
+  yojson-with-position = ocamlPackages.buildDunePackage {
+    pname = "yojson-with-position";
+    version = "1.4.2";
     src = fetchFromGitHub {
       owner = "gfngfn";
-      repo = "yojson";
-      rev = "v1.4.1+satysfi";
-      sha256 = "06lajzycwmvc6s26cf40s9xn001cjxrpxijgfha3s4f4rpybb1mp";
+      repo = "yojson-with-position";
+      rev = "v1.4.2+satysfi";
+      sha256 = "17s5xrnpim54d1apy972b5l08bph4c0m5kzbndk600fl0vnlirnl";
     };
-  });
+    useDune2 = true;
+    nativeBuildInputs = [ ocamlPackages.cppo ];
+    propagatedBuildInputs = [ ocamlPackages.biniou ];
+    inherit (ocamlPackages.yojson) meta;
+  };
 in
   stdenv.mkDerivation rec {
     pname = "satysfi";
-    version = "0.0.4";
+    version = "0.0.6";
     src = fetchFromGitHub {
       owner = "gfngfn";
       repo = "SATySFi";
       rev = "v${version}";
-      sha256 = "0ilvgixglklqwavf8p9mcbrjq6cjfm9pk4kqx163c0irh0lh0adv";
+      sha256 = "1wdmcz2b7v37msmsvjvbyj7x5a80qfws8a7w72q0g5959pw5fdxj";
       fetchSubmodules = true;
     };
 
@@ -44,11 +50,11 @@ in
       $out/share/satysfi
     '';
 
-    nativeBuildInputs = [ ruby dune ];
+    nativeBuildInputs = [ ruby dune_2 ];
 
-    buildInputs = [ camlpdf otfm ] ++ (with ocamlPackages; [
-      ocaml findlib menhir
-      batteries camlimages core_kernel ppx_deriving uutf yojson omd cppo re
+    buildInputs = [ camlpdf otfm yojson-with-position ] ++ (with ocamlPackages; [
+      ocaml findlib menhir menhirLib
+      batteries camlimages core_kernel ppx_deriving uutf omd cppo re
     ]);
 
     installPhase = ''
@@ -61,10 +67,11 @@ in
       cp -r lib-satysfi/dist/ $out/share/satysfi/
     '';
 
-    meta = with stdenv.lib; {
+    meta = with lib; {
       homepage = "https://github.com/gfngfn/SATySFi";
       description = "A statically-typed, functional typesetting system";
-      license = licenses.lgpl3;
+      changelog = "https://github.com/gfngfn/SATySFi/blob/v${version}/CHANGELOG.md";
+      license = licenses.lgpl3Only;
       maintainers = [ maintainers.mt-caret maintainers.marsam ];
       platforms = platforms.all;
     };
diff --git a/pkgs/tools/typesetting/scdoc/default.nix b/pkgs/tools/typesetting/scdoc/default.nix
index 5b6cf5e22f2..1e6c86c1992 100644
--- a/pkgs/tools/typesetting/scdoc/default.nix
+++ b/pkgs/tools/typesetting/scdoc/default.nix
@@ -1,12 +1,14 @@
-{ stdenv, fetchurl }:
+{ lib, stdenv, fetchFromSourcehut }:
 
 stdenv.mkDerivation rec {
   pname = "scdoc";
-  version = "1.11.0";
+  version = "1.11.1";
 
-  src = fetchurl {
-    url = "https://git.sr.ht/~sircmpwn/scdoc/archive/${version}.tar.gz";
-    sha256 = "17cjh3lcfppyl2mzpanylla93gdgdv5spc8jldshvayzizhfghwa";
+  src = fetchFromSourcehut {
+    owner = "~sircmpwn";
+    repo = pname;
+    rev = version;
+    sha256 = "1g37j847j3h4a4qbbfbr6vvsxpifj9v25jgv25nd71d1n0dxlhvk";
   };
 
   postPatch = ''
@@ -17,7 +19,7 @@ stdenv.mkDerivation rec {
 
   doCheck = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A simple man page generator";
     longDescription = ''
       scdoc is a simple man page generator written for POSIX systems written in
diff --git a/pkgs/tools/typesetting/sile/default.nix b/pkgs/tools/typesetting/sile/default.nix
index d61e97857c5..92062b8eac8 100644
--- a/pkgs/tools/typesetting/sile/default.nix
+++ b/pkgs/tools/typesetting/sile/default.nix
@@ -1,4 +1,4 @@
-{ stdenv
+{ lib, stdenv
 , darwin
 , fetchurl
 , makeWrapper
@@ -30,6 +30,7 @@ let
     luarepl
     luasec
     luasocket
+    luautf8
     penlight
     stdlib
     vstruct
@@ -38,11 +39,11 @@ in
 
 stdenv.mkDerivation rec {
   pname = "sile";
-  version = "0.10.10";
+  version = "0.10.15";
 
   src = fetchurl {
     url = "https://github.com/sile-typesetter/sile/releases/download/v${version}/${pname}-${version}.tar.xz";
-    sha256 = "0m7yyvw8ypz89rfx8nm70mf87l357w5qac73pmfgl84f24cbxh7g";
+    sha256 = "0p1w3s6j34qi93aycqmqggfm277n90z90nlmm1j3qizxxwq5gda9";
   };
 
   configureFlags = [
@@ -63,17 +64,17 @@ stdenv.mkDerivation rec {
     libiconv
     luaEnv
   ]
-  ++ stdenv.lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.AppKit
+  ++ lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.AppKit
   ;
   checkInputs = [
     poppler_utils
   ];
 
-  preConfigure = stdenv.lib.optionalString stdenv.isDarwin ''
+  preConfigure = lib.optionalString stdenv.isDarwin ''
     sed -i -e 's|@import AppKit;|#import <AppKit/AppKit.h>|' src/macfonts.m
   '';
 
-  NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isDarwin "-framework AppKit";
+  NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-framework AppKit";
 
   FONTCONFIG_FILE = makeFontsConf {
     fontDirectories = [
@@ -85,7 +86,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  preBuild = stdenv.lib.optionalString stdenv.cc.isClang ''
+  preBuild = lib.optionalString stdenv.cc.isClang ''
     substituteInPlace libtexpdf/dpxutil.c \
       --replace "ASSERT(ht && ht->table && iter);" "ASSERT(ht && iter);"
   '';
@@ -95,7 +96,7 @@ stdenv.mkDerivation rec {
 
   outputs = [ "out" "doc" "man" "dev" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A typesetting system";
     longDescription = ''
       SILE is a typesetting system; its job is to produce beautiful
@@ -109,6 +110,7 @@ stdenv.mkDerivation rec {
     '';
     homepage = "https://sile-typesetter.org/";
     platforms = platforms.unix;
+    broken = stdenv.isDarwin;   # https://github.com/NixOS/nixpkgs/issues/23018
     maintainers = with maintainers; [ doronbehar alerque ];
     license = licenses.mit;
   };
diff --git a/pkgs/tools/typesetting/skribilo/default.nix b/pkgs/tools/typesetting/skribilo/default.nix
index 813a464b770..e80c4326651 100644
--- a/pkgs/tools/typesetting/skribilo/default.nix
+++ b/pkgs/tools/typesetting/skribilo/default.nix
@@ -1,55 +1,75 @@
-{ 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 {
+{ lib
+, stdenv
+, fetchurl
+, gettext
+, ghostscript
+, guile
+, guile-lib
+, guile-reader
+, imagemagick
+, makeWrapper
+, pkg-config
+, ploticus
+, transfig
+, enableEmacs ? false, emacs
+, enableLout ? true, lout
+, enableTex ? true, tex
+}:
 
+let
+  inherit (lib) optional;
+in stdenv.mkDerivation rec{
   pname = "skribilo";
-  version = "0.9.4";
+  version = "0.9.5";
 
   src = fetchurl {
     url = "http://download.savannah.nongnu.org/releases/skribilo/${pname}-${version}.tar.gz";
-    sha256 = "06ywnfjfa9sxrzdszb5sryzg266380g519cm64kq62sskzl7zmnf";
+    sha256 = "sha256-AIJqIcRjT7C0EO6J60gGjERdgAglh0ZU49U9XKPwvwk=";
   };
 
-  nativeBuildInputs = [ pkgconfig makeWrapper ];
-
-  buildInputs = [ gettext guile ploticus imagemagick ghostscript transfig ]
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+  ];
+  buildInputs = [
+    gettext
+    ghostscript
+    guile
+    guile-lib
+    guile-reader
+    imagemagick
+    ploticus
+    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"
-  '';
+  postInstall =
+    let
+      guileVersion = lib.versions.majorMinor guile.version;
+    in
+    ''
+      wrapProgram $out/bin/skribilo \
+        --prefix GUILE_LOAD_PATH : "$out/share/guile/site/${guileVersion}:$GUILE_LOAD_PATH" \
+        --prefix GUILE_LOAD_COMPILED_PATH : "$out/lib/guile/${guileVersion}/site-ccache:$GUILE_LOAD_COMPILED_PATH"
+    '';
 
-  meta = {
+  meta = with lib; {
+    homepage = "https://www.nongnu.org/skribilo/";
     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.
+      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.
+      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;
diff --git a/pkgs/tools/typesetting/sshlatex/default.nix b/pkgs/tools/typesetting/sshlatex/default.nix
index 26af2258946..8a5b4811d77 100644
--- a/pkgs/tools/typesetting/sshlatex/default.nix
+++ b/pkgs/tools/typesetting/sshlatex/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, inotify-tools, openssh, perl, gnutar, bash, makeWrapper }:
+{ lib, stdenv, fetchFromGitHub, inotify-tools, openssh, perl, gnutar, bash, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "sshlatex";
@@ -11,17 +11,17 @@ stdenv.mkDerivation rec {
     sha256 = "0kaah8is74zba9373xccmsxmnnn6kh0isr4qpg21x3qhdzhlxl7q";
   };
 
-  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ makeWrapper ];
 
   installPhase = let
-    binPath = stdenv.lib.makeBinPath [ openssh perl gnutar bash inotify-tools ];
+    binPath = 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; {
+  meta = with 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
@@ -31,8 +31,8 @@ stdenv.mkDerivation rec {
       purely local setting.
     '';
     homepage = "https://github.com/iblech/sshlatex";
-    license = stdenv.lib.licenses.gpl3Plus;  # actually dual-licensed gpl3Plus | lppl13cplus
-    platforms = stdenv.lib.platforms.all;
+    license = lib.licenses.gpl3Plus;  # actually dual-licensed gpl3Plus | lppl13cplus
+    platforms = lib.platforms.all;
     maintainers = [ maintainers.iblech ];
   };
 }
diff --git a/pkgs/tools/typesetting/tectonic/default.nix b/pkgs/tools/typesetting/tectonic/default.nix
index 3b9c0581eca..9cbf9ac7e2f 100644
--- a/pkgs/tools/typesetting/tectonic/default.nix
+++ b/pkgs/tools/typesetting/tectonic/default.nix
@@ -1,31 +1,54 @@
-{ stdenv, fetchFromGitHub, rustPlatform
-, darwin, fontconfig, harfbuzz, openssl, pkgconfig }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, darwin
+, fontconfig
+, harfbuzz
+, openssl
+, pkg-config
+, makeWrapper
+, biber
+}:
 
 rustPlatform.buildRustPackage rec {
   pname = "tectonic";
-  version = "0.1.12";
+  version = "0.7.0";
 
   src = fetchFromGitHub {
     owner = "tectonic-typesetting";
     repo = "tectonic";
-    rev = "v${version}";
-    sha256 = "0dycv135bkpf71iwlwh8rwwvn287d605nl7v8mjxlrsayiivdmn9";
+    rev = "tectonic@${version}";
+    fetchSubmodules = true;
+    sha256 = "sha256-CMvT9DouwERhDtBsLDesxN/QgEEfXLgtJaQLjq+SzOI=";
   };
 
-  cargoSha256 = "1axrf7d01gmhvrap13rydfvwcsg0lk1zw7z1i7zzm898bc7c02qn";
+  cargoSha256 = "sha256-zGsb49yt6SRFfvNHZY+RpjihGpV9ziLsg9BII7WTX2Y=";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config makeWrapper ];
 
   buildInputs = [ fontconfig harfbuzz openssl ]
-    ++ stdenv.lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ ApplicationServices Cocoa Foundation ]);
+    ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ ApplicationServices Cocoa Foundation ]);
 
-  # tests fail due to read-only nix store
-  doCheck = false;
+  # Tectonic runs biber when it detects it needs to run it, see:
+  # https://github.com/tectonic-typesetting/tectonic/releases/tag/tectonic%400.7.0
+  postInstall = ''
+    wrapProgram $out/bin/tectonic \
+      --prefix PATH "${lib.getBin biber}/bin"
+  '' + lib.optionalString stdenv.isLinux ''
+    substituteInPlace dist/appimage/tectonic.desktop \
+      --replace Exec=tectonic Exec=$out/bin/tectonic
+    install -D dist/appimage/tectonic.desktop -t $out/share/applications/
+    install -D dist/appimage/tectonic.svg -t $out/share/icons/hicolor/scalable/apps/
+  '';
 
-  meta = with stdenv.lib; {
+  doCheck = true;
+
+  meta = with lib; {
     description = "Modernized, complete, self-contained TeX/LaTeX engine, powered by XeTeX and TeXLive";
     homepage = "https://tectonic-typesetting.github.io/";
+    changelog = "https://github.com/tectonic-typesetting/tectonic/blob/tectonic@${version}/CHANGELOG.md";
     license = with licenses; [ mit ];
-    maintainers = [ maintainers.lluchs ];
+    maintainers = [ maintainers.lluchs maintainers.doronbehar ];
   };
 }
diff --git a/pkgs/tools/typesetting/ted/default.nix b/pkgs/tools/typesetting/ted/default.nix
index 25e9dce242f..bd21ad4c437 100644
--- a/pkgs/tools/typesetting/ted/default.nix
+++ b/pkgs/tools/typesetting/ted/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, zlib, pcre, xorg, libjpeg, libtiff, libpng, gtk2, libpaper, makeWrapper, ghostscript }:
+{ lib, stdenv, fetchurl, pkg-config, zlib, pcre, xorg, libjpeg, libtiff, libpng, gtk2, libpaper, makeWrapper, ghostscript }:
 
 stdenv.mkDerivation rec {
   pname = "ted";
@@ -49,7 +49,7 @@ stdenv.mkDerivation rec {
     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 ]}
+        makeWrapper "$PWD/$f" "$out/bin/$f" --prefix PATH : $out/bin:${lib.makeBinPath [ ghostscript ]}
     done
     popd
 
@@ -58,10 +58,11 @@ stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  buildInputs = [ pkgconfig zlib pcre xorg.xlibsWrapper xorg.libXpm libjpeg libtiff libpng gtk2 libpaper makeWrapper ];
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [ zlib pcre xorg.xlibsWrapper xorg.libXpm libjpeg libtiff libpng gtk2 libpaper ];
 
-  meta = with stdenv.lib; {
-    description = "Ted, an easy rich text processor";
+  meta = with lib; {
+    description = "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
diff --git a/pkgs/tools/typesetting/tex/auctex/default.nix b/pkgs/tools/typesetting/tex/auctex/default.nix
index ccb5dcc5190..f19ddaebdfa 100644
--- a/pkgs/tools/typesetting/tex/auctex/default.nix
+++ b/pkgs/tools/typesetting/tex/auctex/default.nix
@@ -1,22 +1,24 @@
-{ stdenv, fetchurl, emacs, texlive, ghostscript }:
- 
-let auctex = stdenv.mkDerivation ( rec {
-  version = "12.2";
+{ lib, stdenv, fetchurl, emacs, texlive, ghostscript }:
 
+let auctex = stdenv.mkDerivation ( rec {
   # Make this a valid tex(live-new) package;
   # the pkgs attribute is provided with a hack below.
   pname = "auctex";
+  version = "12.3";
   tlType = "run";
 
-
   outputs = [ "out" "tex" ];
 
   src = fetchurl {
     url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
-    sha256 = "14vqs08mkfzc91jg7kabs9sdn74vywj8a29gyrfa3ivnm9c7jrsr";
+    hash = "sha256-L9T+MLaUV8knf+IE0+g8hHK89QDI/kqBDXREBhdMqd0=";
   };
 
-  buildInputs = [ emacs texlive.combined.scheme-basic ghostscript ];
+  buildInputs = [
+    emacs
+    ghostscript
+    texlive.combined.scheme-basic
+  ];
 
   preConfigure = ''
     mkdir -p "$tex"
@@ -27,11 +29,11 @@ let auctex = stdenv.mkDerivation ( rec {
     "--with-texmf-dir=\${tex}"
   ];
 
-  meta = {
-    description = "Extensible package for writing and formatting TeX files in GNU Emacs and XEmacs";
+  meta = with lib; {
     homepage = "https://www.gnu.org/software/auctex";
-    platforms = stdenv.lib.platforms.unix;
-    license = stdenv.lib.licenses.gpl3;
+    description = "Extensible package for writing and formatting TeX files in GNU Emacs and XEmacs";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
   };
 });
 
diff --git a/pkgs/tools/typesetting/tex/dblatex/default.nix b/pkgs/tools/typesetting/tex/dblatex/default.nix
index 5fde58251e0..dbd4fed1474 100644
--- a/pkgs/tools/typesetting/tex/dblatex/default.nix
+++ b/pkgs/tools/typesetting/tex/dblatex/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl, python2, libxslt, texlive
-, enableAllFeatures ? false, imagemagick ? null, transfig ? null, inkscape_0 ? null, fontconfig ? null, ghostscript ? null
+{ lib, stdenv, fetchurl, python3, 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
@@ -16,26 +16,27 @@
 assert enableAllFeatures ->
   imagemagick != null &&
   transfig != null &&
-  inkscape_0 != null &&
+  inkscape != null &&
   fontconfig != null &&
   ghostscript != null;
 
 stdenv.mkDerivation rec {
-  name = "dblatex-0.3.11";
+  pname = "dblatex";
+  version = "0.3.12";
 
   src = fetchurl {
-    url = "mirror://sourceforge/dblatex/${name}.tar.bz2";
-    sha256 = "0rp1bc2lgisigscq1i7zxfd2qdaxxxld6khbcxss4pq7fpi9fzkv";
+    url = "mirror://sourceforge/dblatex/${pname}3-${version}.tar.bz2";
+    sha256 = "0yd09nypswy3q4scri1dg7dr99d7gd6r2dwx0xm81l9f4y32gs0n";
   };
 
-  buildInputs = [ python2 libxslt tex ]
-    ++ stdenv.lib.optionals enableAllFeatures [ imagemagick transfig ];
+  buildInputs = [ python3 libxslt tex ]
+    ++ 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 ''
+  '' + 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' \
@@ -47,7 +48,7 @@ stdenv.mkDerivation rec {
             -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_0}/bin/inkscape|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' \
@@ -58,7 +59,7 @@ stdenv.mkDerivation rec {
   dontBuild = true;
 
   installPhase = ''
-    ${python2.interpreter} ./setup.py install --prefix="$out" --use-python-path --verbose
+    ${python3.interpreter} ./setup.py install --prefix="$out" --use-python-path --verbose
   '';
 
   passthru = { inherit tex; };
@@ -66,7 +67,7 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/typesetting/tex/latexrun/default.nix b/pkgs/tools/typesetting/tex/latexrun/default.nix
index 392edfc3a2f..3a163a5682d 100644
--- a/pkgs/tools/typesetting/tex/latexrun/default.nix
+++ b/pkgs/tools/typesetting/tex/latexrun/default.nix
@@ -1,4 +1,4 @@
-{ stdenvNoCC, fetchFromGitHub, python3 }:
+{ lib, stdenvNoCC, fetchFromGitHub, python3 }:
 
 stdenvNoCC.mkDerivation {
   pname = "latexrun";
@@ -19,7 +19,7 @@ stdenvNoCC.mkDerivation {
     chmod +x $out/bin/latexrun
   '';
 
-  meta = with stdenvNoCC.lib; {
+  meta = with lib; {
     description = "A 21st century LaTeX wrapper";
     homepage = "https://github.com/aclements/latexrun";
     license = licenses.mit;
diff --git a/pkgs/tools/typesetting/tex/lkproof/default.nix b/pkgs/tools/typesetting/tex/lkproof/default.nix
index 39029635beb..4f896ef32ba 100644
--- a/pkgs/tools/typesetting/tex/lkproof/default.nix
+++ b/pkgs/tools/typesetting/tex/lkproof/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, unzip}:
+{lib, stdenv, fetchurl, unzip}:
 
 stdenv.mkDerivation {
   name = "lkproof-3.1";
@@ -8,14 +8,14 @@ stdenv.mkDerivation {
     sha256 = "1qjkjhpc4rm62qxn18r83zdlwnj1wvnkcpdiqlv7w4bakh0gvjly";
   };
 
-  buildInputs = [ unzip ];
+  nativeBuildInputs = [ 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; {
+  meta = with lib; {
     platforms = platforms.unix;
     license = licenses.gpl1Plus;
   };
diff --git a/pkgs/tools/typesetting/tex/mftrace/default.nix b/pkgs/tools/typesetting/tex/mftrace/default.nix
new file mode 100644
index 00000000000..627b0843658
--- /dev/null
+++ b/pkgs/tools/typesetting/tex/mftrace/default.nix
@@ -0,0 +1,63 @@
+{ stdenv
+, fetchFromGitHub
+, lib
+, makeWrapper
+, autoreconfHook
+, buildEnv
+, python3
+, fontforge
+, potrace
+, texlive
+}:
+
+/*
+  To use with a texlive distribution, ensure that the desired fonts and
+  the packages kpathsea, t1utils, metafont are available at runtime.
+
+  Possible overrides:
+  - potrace = autotrace
+  - fontforge = ghostscript (limited functionality)
+  - fontforge = null (limited functionality)
+*/
+
+let self = stdenv.mkDerivation rec {
+  pname = "mftrace";
+  version = "1.2.20";
+
+  # https://lilypond.org/download/sources/mftrace/mftrace-1.2.20.tar.gz
+  # is incomplete, fetch repo and use autoconf instead
+  # see https://github.com/hanwen/mftrace/issues/13
+  src = fetchFromGitHub {
+    owner = "hanwen";
+    repo = "mftrace";
+    rev = "release/${version}";
+    sha256 = "02ik25aczkbi10jrjlnxby3fmixxrwm2k5r4fkfif3bjfym7nqbc";
+  };
+
+  nativeBuildInputs = [ makeWrapper autoreconfHook python3 potrace ];
+
+  buildInputs = [ fontforge potrace ];
+
+  postInstall = ''
+    wrapProgram $out/bin/mftrace --prefix PATH : ${lib.makeBinPath buildInputs}
+  '';
+
+  # experimental texlive.combine support
+  # (note that only the bin/ folder will be combined into texlive)
+  passthru.tlType = "bin";
+  passthru.pkgs = [ self ] ++
+    (with texlive; kpathsea.pkgs ++ t1utils.pkgs ++ metafont.pkgs);
+
+  meta = with lib; {
+    description = "Scalable PostScript Fonts for MetaFont";
+    longDescription = ''
+      mftrace is a small Python program that lets you trace a TeX bitmap
+      font into a PFA or PFB font (A PostScript Type1 Scalable Font) or
+      TTF (TrueType) font.
+    '';
+    homepage = "https://lilypond.org/mftrace/";
+    license = with licenses; [ gpl2Only mit ];
+    maintainers = with maintainers; [ xworld21 ];
+    platforms = platforms.all;
+  };
+}; in self
diff --git a/pkgs/tools/typesetting/tex/nix/default.nix b/pkgs/tools/typesetting/tex/nix/default.nix
index 4ee45bf4bc8..fbb6fdb0fe0 100644
--- a/pkgs/tools/typesetting/tex/nix/default.nix
+++ b/pkgs/tools/typesetting/tex/nix/default.nix
@@ -77,7 +77,7 @@ rec {
             in if fn != null then [{key = fn;}] ++ xs
                else xs;
 
-        in pkgs.lib.fold foundDeps [] deps;
+        in pkgs.lib.foldr foundDeps [] deps;
     };
 
 
diff --git a/pkgs/tools/typesetting/tex/nix/run-latex.sh b/pkgs/tools/typesetting/tex/nix/run-latex.sh
index 7a5767f9c06..3f8a16580ea 100644
--- a/pkgs/tools/typesetting/tex/nix/run-latex.sh
+++ b/pkgs/tools/typesetting/tex/nix/run-latex.sh
@@ -41,7 +41,11 @@ showError() {
     exit 1
 }
 
+pass=0
+
 runLaTeX() {
+    ((pass=pass+1))
+    echo "PASS $pass..."
     if ! $latex $latexFlags $rootName >$tmpFile 2>&1; then showError; fi
     runNeeded=
     if fgrep -q \
@@ -51,6 +55,7 @@ runLaTeX() {
         "$tmpFile"; then
         runNeeded=1
     fi
+    echo
 }
 
 echo
@@ -61,10 +66,7 @@ if test -n "$copySources"; then
 fi
 
 
-echo "PASS 1..."
 runLaTeX
-echo
-
 
 for auxFile in $(find . -name "*.aux"); do
     # Run bibtex to process all bibliographies.  There may be several
@@ -89,11 +91,8 @@ for auxFile in $(find . -name "*.aux"); do
     fi
 done
 
-
 if test "$runNeeded"; then
-    echo "PASS 2..."
     runLaTeX
-    echo
 fi
 
 
@@ -105,20 +104,18 @@ if test -f $rootNameBase.idx; then
     makeindex $makeindexFlags $rootNameBase.idx
     runNeeded=1
     echo
-fi    
-
+fi
 
-if test "$runNeeded"; then
-    echo "PASS 3..."
+# We check that pass is less than 2 to catch situations where the document is
+# simple enough (no bibtex, etc.) so that it would otherwise require only one
+# pass but also contains a ToC.
+# In essence this check ensures that we do at least two passes on all documents.
+if test "$runNeeded" = 1 -o "$pass" -lt 2 ; then
     runLaTeX
-    echo
 fi
 
-
 if test "$runNeeded"; then
-    echo "PASS 4..."
     runLaTeX
-    echo
 fi
 
 
diff --git a/pkgs/tools/typesetting/tex/pgf/1.x.nix b/pkgs/tools/typesetting/tex/pgf/1.x.nix
index dc13ea33178..efaf0e0fe1b 100644
--- a/pkgs/tools/typesetting/tex/pgf/1.x.nix
+++ b/pkgs/tools/typesetting/tex/pgf/1.x.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation {
   name = "pgf-1.18";
@@ -15,7 +15,7 @@ stdenv.mkDerivation {
     cp -prd * $out/share/texmf-nix
   ";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     branch = "1";
     platforms = platforms.unix;
     license = licenses.gpl2;
diff --git a/pkgs/tools/typesetting/tex/pgf/2.x.nix b/pkgs/tools/typesetting/tex/pgf/2.x.nix
index 00b92935bab..9661ec3324b 100644
--- a/pkgs/tools/typesetting/tex/pgf/2.x.nix
+++ b/pkgs/tools/typesetting/tex/pgf/2.x.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl}:
+{lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation {
   name = "pgf-2.00";
@@ -15,7 +15,7 @@ stdenv.mkDerivation {
     cp -prd * $out/share/texmf-nix
   ";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     branch = "2";
     platforms = platforms.unix;
     license = licenses.gpl2;
diff --git a/pkgs/tools/typesetting/tex/pgf/3.x.nix b/pkgs/tools/typesetting/tex/pgf/3.x.nix
index a9ff54e4c11..b33f05d34a7 100644
--- a/pkgs/tools/typesetting/tex/pgf/3.x.nix
+++ b/pkgs/tools/typesetting/tex/pgf/3.x.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, unzip}:
+{lib, stdenv, fetchurl, unzip}:
 
 stdenv.mkDerivation {
   name = "pgf-3.00";
@@ -8,7 +8,7 @@ stdenv.mkDerivation {
     sha256 = "0kj769hyp4z2zmdv3f8xv443wcfqn5nkkbzxzqgfxjizlz81aav7";
   };
 
-  buildInputs = [ unzip ];
+  nativeBuildInputs = [ unzip ];
 
   # Multiple files problem
   unpackPhase = ''
@@ -24,7 +24,7 @@ stdenv.mkDerivation {
     cp -prd * $out/share/texmf-nix
   ";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     branch = "3";
     platforms = platforms.unix;
     license = licenses.gpl2;
diff --git a/pkgs/tools/typesetting/tex/pgfplots/default.nix b/pkgs/tools/typesetting/tex/pgfplots/default.nix
index 998f61786db..fe928615eb4 100644
--- a/pkgs/tools/typesetting/tex/pgfplots/default.nix
+++ b/pkgs/tools/typesetting/tex/pgfplots/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, unzip}:
+{lib, stdenv, fetchurl, unzip}:
 
 stdenv.mkDerivation {
   name = "pgfplots-1.5.1";
@@ -8,7 +8,7 @@ stdenv.mkDerivation {
     sha256 = "1xajrmq35i0qlsfwydy5zzg6f1jg88hqqh5b3xsmglzrarnllbdi";
   };
 
-  buildInputs = [ unzip ];
+  nativeBuildInputs = [ unzip ];
 
   unpackPhase = "unzip $src";
 
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
     cp -prd * $out/share/texmf-nix
   ";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "TeX package to draw plots directly in TeX in two and three dimensions";
     homepage = "http://pgfplots.sourceforge.net";
     platforms = platforms.unix;
diff --git a/pkgs/tools/typesetting/tex/pplatex/default.nix b/pkgs/tools/typesetting/tex/pplatex/default.nix
index 01777f3dd42..1a0293255d8 100644
--- a/pkgs/tools/typesetting/tex/pplatex/default.nix
+++ b/pkgs/tools/typesetting/tex/pplatex/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig, pcre }:
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, pcre }:
 
 stdenv.mkDerivation {
   pname = "pplatex";
@@ -11,7 +11,7 @@ stdenv.mkDerivation {
     sha256 = "0wrkkbz6b6x91650nm8gccz7xghlp7b1i31fxwalz9xw3py9xygb";
   };
 
-  nativeBuildInputs = [ cmake pkgconfig ];
+  nativeBuildInputs = [ cmake pkg-config ];
 
   buildInputs = [ pcre ];
 
@@ -21,7 +21,7 @@ stdenv.mkDerivation {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description =
       "A tool to reformat the output of latex and friends into readable messages";
     homepage = "https://github.com/stefanhepp/pplatex";
diff --git a/pkgs/tools/typesetting/tex/tetex/default.nix b/pkgs/tools/typesetting/tex/tetex/default.nix
index 021927702ff..0f6bf5d0d55 100644
--- a/pkgs/tools/typesetting/tex/tetex/default.nix
+++ b/pkgs/tools/typesetting/tex/tetex/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, flex, bison, zlib, libpng, ncurses, ed, automake }:
+{ lib, stdenv, fetchurl, flex, bison, zlib, libpng, ncurses, ed, automake }:
 
 stdenv.mkDerivation {
   name = "tetex-3.0";
@@ -18,7 +18,7 @@ stdenv.mkDerivation {
   hardeningDisable = [ "format" ];
 
   # fixes "error: conflicting types for 'calloc'", etc.
-  preBuild = stdenv.lib.optionalString stdenv.isDarwin ''
+  preBuild = lib.optionalString stdenv.isDarwin ''
     sed -i 57d texk/kpathsea/c-std.h
   '';
 
@@ -35,7 +35,7 @@ stdenv.mkDerivation {
       "--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";
+    ++ lib.optional stdenv.isDarwin "--without-gsftopk";
 
   postUnpack = ''
     mkdir -p $out/share/texmf
@@ -45,7 +45,7 @@ stdenv.mkDerivation {
     substituteInPlace ./tetex-src-3.0/configure --replace /usr/bin/install $(type -P install)
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description  = "A full-featured (La)TeX distribution";
     homepage     = "http://www.tug.org/tetex/";
     maintainers  = with maintainers; [ lovek323 ];
diff --git a/pkgs/tools/typesetting/tex/tex-match/default.nix b/pkgs/tools/typesetting/tex/tex-match/default.nix
new file mode 100644
index 00000000000..65bfcd02d78
--- /dev/null
+++ b/pkgs/tools/typesetting/tex/tex-match/default.nix
@@ -0,0 +1,27 @@
+{ rustPlatform, fetchFromGitHub, gtk3, pkg-config, glib, lib }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tex-match";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "zoeyfyi";
+    repo = "TeX-Match";
+    rev = "v${version}";
+    sha256 = "1yb81j7mbqqb8jcn78dx4ydp7ncbzvaczkli6cqay5jf5j6dbk1z";
+  };
+
+  nativeBuildInputs = [ pkg-config glib ];
+
+  buildInputs = [ gtk3 ];
+
+  cargoSha256 = "13ihwrckpsb4j1ai923vh151frw0yriwg9yylj9lk0ycps51y1sn";
+
+  meta = with lib; {
+    description = "Search through over 1000 different LaTeX symbols by sketching. A desktop version of detexify";
+    homepage = "https://tex-match.zoey.fyi/";
+    license = licenses.mit;
+    maintainers = [ maintainers.bootstrap-prime ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/typesetting/tex/texlive/UPGRADING.md b/pkgs/tools/typesetting/tex/texlive/UPGRADING.md
index 71c42917394..86e650afd46 100644
--- a/pkgs/tools/typesetting/tex/texlive/UPGRADING.md
+++ b/pkgs/tools/typesetting/tex/texlive/UPGRADING.md
@@ -35,13 +35,18 @@ See https://tug.org/texlive/acquire-mirror.html for instructions.
 
 
 ```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
+curl -L https://texlive.info/tlnet-archive/$YEAR/$MONTH/$DAY/tlnet/tlpkg/texlive.tlpdb.xz \
+         | xzcat | sed -rn -f ./tl2nix.sed | uniq > ./pkgs.nix
 ```
 
-This will download a current snapshot of the CTAN package database `texlive.tlpdb.xz`
+This will download the daily snapshot of the CTAN package database `texlive.tlpdb.xz`
 and regenerate all of the sha512 hashes for the current upstream distribution in `pkgs.nix`.
 
+Use the url
+
+https://ftp.math.utah.edu/pub/tex/historic/systems/texlive/$YEAR/tlnet-final/tlpkg/texlive.tlpdb.xz
+
+for the final TeX Live release.
 
 ### Build packages locally and generate fix hashes
 
diff --git a/pkgs/tools/typesetting/tex/texlive/bin.nix b/pkgs/tools/typesetting/tex/texlive/bin.nix
index 1a71ae04d49..05c1644c8c7 100644
--- a/pkgs/tools/typesetting/tex/texlive/bin.nix
+++ b/pkgs/tools/typesetting/tex/texlive/bin.nix
@@ -1,10 +1,10 @@
-{ stdenv, fetchurl, fetchpatch, patchutils
+{ lib, stdenv, fetchurl
 , 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
+, perl, perlPackages, python3Packages, pkg-config
+, libpaper, graphite2, zziplib, harfbuzz, potrace, gmp, mpfr
+, brotli, cairo, pixman, xorg, clisp, biber, woff2, xxHash
 , makeWrapper, shortenPerlShebang
 }:
 
@@ -14,82 +14,24 @@
 let
   withSystemLibs = map (libname: "--with-system-${libname}");
 
-  year = "2019";
+  year = "2021";
   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"
+        "http://ftp.math.utah.edu/pub/tex/historic/systems/texlive/${year}/texlive-${year}0325-source.tar.xz"
+              "ftp://tug.ctan.org/pub/tex/historic/systems/texlive/${year}/texlive-${year}0325-source.tar.xz"
       ];
-      sha256 = "1dfps39q6bdr1zsbp9p74mvalmy3bycihv19sb9c6kg30kprz8nj";
+      sha256 = "0jsq1p66l46k2qq0gbqmx25flj2nprsz4wrd1ybn286p11kdkvvs";
     };
 
-    prePatch = 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&pathrev=52959";
-        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&pathrev=52959";
-        sha256 = "0iq2cmwvf2lxy32sygrafwqgcwvvbdnvxm5l3mrg9cb2a1g06380";
-      };
-    in ''
+    prePatch = ''
       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
     '';
 
-    patches = [
-      # poppler 0.84 compat fixups, use 0.83 files otherwise
-      ./poppler84.patch
-
-      (fetchpatch {
-        name = "texlive-poppler-0.86.patch";
-        url = "https://git.archlinux.org/svntogit/packages.git/plain/trunk/texlive-poppler-0.86.patch?h=packages/texlive-bin&id=60244e41bb6f1501e8ed1fc9e6b7ba8d3f283398";
-        sha256 = "0pdvhaqc3zgz7hp0x3a4qs0nh26fkvgmr6w1cjljqhp1nyiw2f1l";
-      })
-
-      # Needed for ghostscript>=9.50
-      (fetchpatch {
-        name = "xdvipdfm-fix.patch";
-        url = "https://www.tug.org/svn/texlive/trunk/Build/source/texk/dvipdfm-x/spc_dvips.c?view=patch&r1=52765&r2=52764&pathrev=52765";
-        sha256 = "0qvrc7yxhbl5f4g340z8aql388bwib0m2gxd473skbmviy5bjr3f";
-        stripLen = 2;
-      })
-    ];
-
-    # 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"
@@ -99,9 +41,8 @@ let
     ]
       ++ withSystemLibs [
       # see "from TL tree" vs. "Using installed"  in configure output
-      "zziplib" "xpdf" "poppler" "mpfr" "gmp"
+      "zziplib" "mpfr" "gmp"
       "pixman" "potrace" "gd" "freetype2" "libpng" "libpaper" "zlib"
-        # beware: xpdf means to use stuff from poppler :-/
     ];
 
     # clean broken links to stuff not built
@@ -111,6 +52,8 @@ let
       done
     '';
   };
+
+  withLuaJIT = !(stdenv.hostPlatform.isPower && stdenv.hostPlatform.is64bit);
 in rec { # un-indented
 
 inherit (common) cleanBrokenLinks;
@@ -121,13 +64,13 @@ core = stdenv.mkDerivation rec {
   pname = "texlive-bin";
   inherit version;
 
-  inherit (common) src patches prePatch preAutoreconf postAutoreconf;
+  inherit (common) src prePatch;
 
   outputs = [ "out" "doc" ];
 
-  nativeBuildInputs = [ pkgconfig autoreconfHook ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [
-    /*teckit*/ zziplib poppler mpfr gmp
+    /*teckit*/ zziplib mpfr gmp
     pixman gd freetype libpng libpaper zlib
     perl
   ];
@@ -136,7 +79,7 @@ core = stdenv.mkDerivation rec {
 
   preConfigure = ''
     rm -r libs/{cairo,freetype2,gd,gmp,graphite2,harfbuzz,icu,libpaper,libpng} \
-      libs/{mpfr,pixman,poppler,xpdf,zlib,zziplib}
+      libs/{lua53,luajit,mpfr,pixman,zlib,zziplib}
     mkdir WorkDir
     cd WorkDir
   '';
@@ -144,13 +87,13 @@ core = stdenv.mkDerivation rec {
 
   configureFlags = common.configureFlags
     ++ [ "--without-x" ] # disable xdvik and xpdfopen
-    ++ map (what: "--disable-${what}") ([
+    ++ map (what: "--disable-${what}") [
+      "chktex"
       "dvisvgm" "dvipng" # ghostscript dependency
-      "luatex" "luajittex" "mp" "pmp" "upmp" "mf" # cairo would bring in X and more
+      "luatex" "luajittex" "luahbtex" "luajithbtex"
+      "mp" "pmp" "upmp" "mf" "mflua" "mfluajit" # 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;
 
@@ -193,28 +136,25 @@ core = stdenv.mkDerivation rec {
     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; {
+  meta = with 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 ];
+    license     = lib.licenses.gpl2;
+    maintainers = with maintainers; [ veprbl lovek323 raskin jwiegley ];
     platforms   = platforms.all;
   };
 };
 
 
-inherit (core-big) metafont metapost luatex xetex;
+inherit (core-big) metafont mflua metapost luatex luahbtex luajittex xetex;
 core-big = stdenv.mkDerivation { #TODO: upmendex
   pname = "texlive-core-big.bin";
   inherit version;
 
-  inherit (common) src patches prePatch preAutoreconf postAutoreconf;
+  inherit (common) src prePatch;
 
   hardeningDisable = [ "format" ];
 
@@ -224,21 +164,20 @@ core-big = stdenv.mkDerivation { #TODO: upmendex
   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"
+      ([ "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"
-      ];
+      ] ++ lib.optionals (!withLuaJIT) [ "luajittex" "luajithbtex" "mfluajit" ]);
 
   configureScript = ":";
 
   # we use static libtexlua, because it's only used by a single binary
-  postConfigure = ''
+  postConfigure = let
+    luajit = lib.optionalString withLuaJIT ",luajit";
+  in ''
     mkdir ./WorkDir && cd ./WorkDir
-    for path in libs/{teckit,lua53} texk/web2c; do
+    for path in libs/{pplib,teckit,lua53${luajit}} texk/web2c; do
       (
-        if [[ "$path" =~ "libs/lua5" ]]; then
+        if [[ "$path" =~ "libs/lua" ]]; then
           extraConfig="--enable-static --disable-shared"
         else
           extraConfig=""
@@ -246,6 +185,12 @@ core-big = stdenv.mkDerivation { #TODO: upmendex
 
         mkdir -p "$path" && cd "$path"
         "../../../$path/configure" $configureFlags $extraConfig
+
+        if [[ "$path" =~ "libs/pplib" ]]; then
+          # TODO: revert for texlive 2022
+          # ../../../texk/web2c/luatexdir/luamd5/md5lib.c:197:10: fatal error: 'utilsha.h' file not found
+          make ''${enableParallelBuilding:+-j''${NIX_BUILD_CORES} -l''${NIX_BUILD_CORES}}
+        fi
       )
     done
   '';
@@ -257,54 +202,66 @@ core-big = stdenv.mkDerivation { #TODO: upmendex
 
   # now distribute stuff into outputs, roughly as upstream TL
   # (uninteresting stuff remains in $out, typically duplicates from `core`)
-  outputs = [ "out" "metafont" "metapost" "luatex" "xetex" ];
+  outputs = [
+    "out"
+    "metafont"
+    "mflua"
+    "metapost"
+    "luatex"
+    "luahbtex"
+    "luajittex"
+    "xetex"
+  ];
   postInstall = ''
     for output in $outputs; do
       mkdir -p "''${!output}/bin"
     done
 
     mv "$out/bin"/{inimf,mf,mf-nowin} "$metafont/bin/"
+    mv "$out/bin"/mflua{,-nowin} "$mflua/bin/"
     mv "$out/bin"/{*tomp,mfplain,*mpost} "$metapost/bin/"
-    mv "$out/bin"/{luatex,texlua*} "$luatex/bin/"
+    mv "$out/bin"/{luatex,texlua,texluac} "$luatex/bin/"
+    mv "$out/bin"/luahbtex "$luahbtex/bin/"
     mv "$out/bin"/xetex "$xetex/bin/"
-  '';
+  '' + lib.optionalString withLuaJIT ''
+    mv "$out/bin"/mfluajit{,-nowin} "$mflua/bin/"
+    mv "$out/bin"/{luajittex,luajithbtex,texluajit,texluajitc} "$luajittex/bin/"
+  '' ;
 };
 
 
-dvisvgm = stdenv.mkDerivation {
-  pname = "texlive-dvisvgm.bin";
+chktex = stdenv.mkDerivation {
+  pname = "texlive-chktex.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 = [ pkg-config ];
+  buildInputs = [ core/*kpathsea*/ ];
 
-  nativeBuildInputs = [ pkgconfig ];
-  # TODO: dvisvgm still uses vendored dependencies
-  buildInputs = [ core/*kpathsea*/ ghostscript zlib freetype /*potrace xxHash*/ ];
+  preConfigure = "cd texk/chktex";
 
-  preConfigure = "cd texk/dvisvgm";
+  configureFlags = common.configureFlags
+    ++ [ "--with-system-kpathsea" ];
 
-  # configure script has a bug: it refers to $HAVE_LIBGS but sets $have_libgs
-  # TODO: remove for texlive 2020?
-  HAVE_LIBGS = 1;
+  enableParallelBuilding = true;
+};
+
+
+dvisvgm = stdenv.mkDerivation rec {
+  pname = "texlive-dvisvgm.bin";
+  inherit version;
+
+  inherit (common) src;
+
+  preConfigure = "cd texk/dvisvgm";
 
   configureFlags = common.configureFlags
     ++ [ "--with-system-kpathsea" ];
 
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ core brotli ghostscript zlib freetype woff2 potrace xxHash ];
+
   enableParallelBuilding = true;
 };
 
@@ -315,17 +272,8 @@ dvipng = stdenv.mkDerivation {
 
   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/";
-    })
-  ];
+  nativeBuildInputs = [ perl pkg-config makeWrapper ];
+  buildInputs = [ core/*kpathsea*/ zlib libpng freetype gd ghostscript ];
 
   preConfigure = ''
     cd texk/dvipng
@@ -335,12 +283,9 @@ dvipng = stdenv.mkDerivation {
   configureFlags = common.configureFlags
     ++ [ "--with-system-kpathsea" "--with-gs=yes" "--disable-debug" ];
 
-  enableParallelBuilding = true;
+  GS="${ghostscript}/bin/gs";
 
-  # I didn't manage to hardcode gs location by configureFlags
-  postInstall = ''
-    wrapProgram "$out/bin/dvipng" --prefix PATH : '${ghostscript}/bin'
-  '';
+  enableParallelBuilding = true;
 };
 
 
@@ -348,11 +293,11 @@ latexindent = perlPackages.buildPerlPackage rec {
   pname = "latexindent";
   inherit (src) version;
 
-  src = stdenv.lib.head (builtins.filter (p: p.tlType == "run") texlive.latexindent.pkgs);
+  src = lib.head (builtins.filter (p: p.tlType == "run") texlive.latexindent.pkgs);
 
   outputs = [ "out" ];
 
-  nativeBuildInputs = stdenv.lib.optional stdenv.isDarwin shortenPerlShebang;
+  nativeBuildInputs = lib.optional stdenv.isDarwin shortenPerlShebang;
   propagatedBuildInputs = with perlPackages; [ FileHomeDir LogDispatch LogLog4perl UnicodeLineBreak YAMLTiny ];
 
   postPatch = ''
@@ -364,24 +309,24 @@ latexindent = perlPackages.buildPerlPackage rec {
   preConfigure = ''
     touch Makefile.PL
   '';
-  buildPhase = ":";
+  dontBuild = true;
   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 ''
+  '' + lib.optionalString stdenv.isDarwin ''
     shortenPerlShebang "$out"/bin/latexindent
   '';
 };
 
 
-pygmentex = python2Packages.buildPythonApplication rec {
+pygmentex = python3Packages.buildPythonApplication rec {
   pname = "pygmentex";
   inherit (src) version;
 
-  src = stdenv.lib.head (builtins.filter (p: p.tlType == "run") texlive.pygmentex.pkgs);
+  src = lib.head (builtins.filter (p: p.tlType == "run") texlive.pygmentex.pkgs);
 
-  propagatedBuildInputs = with python2Packages; [ pygments chardet ];
+  propagatedBuildInputs = with python3Packages; [ pygments chardet ];
 
   dontBuild = true;
 
@@ -395,7 +340,7 @@ pygmentex = python2Packages.buildPythonApplication rec {
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://www.ctan.org/pkg/pygmentex";
     description = "Auxiliary tool for typesetting code listings in LaTeX documents using Pygments";
     longDescription = ''
@@ -415,7 +360,7 @@ pygmentex = python2Packages.buildPythonApplication rec {
 texlinks = stdenv.mkDerivation rec {
   name = "texlinks.sh";
 
-  src = stdenv.lib.head (builtins.filter (p: p.tlType == "run") texlive.texlive-scripts-extra.pkgs);
+  src = lib.head (builtins.filter (p: p.tlType == "run") texlive.texlive-scripts-extra.pkgs);
 
   dontBuild = true;
   doCheck = false;
@@ -441,7 +386,7 @@ bibtex8 = stdenv.mkDerivation {
 
   inherit (common) src;
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ core/*kpathsea*/ icu ];
 
   preConfigure = "cd texk/bibtex-x";
@@ -459,7 +404,7 @@ xdvi = stdenv.mkDerivation {
 
   inherit (common) src;
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ core/*kpathsea*/ freetype ghostscript ]
     ++ (with xorg; [ libX11 libXaw libXi libXpm libXmu libXaw libXext libXfixes ]);
 
@@ -479,7 +424,7 @@ xdvi = stdenv.mkDerivation {
 
 } # un-indented
 
-// stdenv.lib.optionalAttrs (!stdenv.isDarwin) # see #20062
+// lib.optionalAttrs (!clisp.meta.broken) # broken on aarch64 and darwin (#20062)
 {
 
 xindy = stdenv.mkDerivation {
@@ -500,7 +445,7 @@ xindy = stdenv.mkDerivation {
   '';
 
   nativeBuildInputs = [
-    pkgconfig perl
+    pkg-config perl
     (texlive.combine { inherit (texlive) scheme-basic cyrillic ec; })
   ];
   buildInputs = [ clisp libiconv ];
diff --git a/pkgs/tools/typesetting/tex/texlive/combine.nix b/pkgs/tools/typesetting/tex/texlive/combine.nix
index fb3e6668a47..1367d651a09 100644
--- a/pkgs/tools/typesetting/tex/texlive/combine.nix
+++ b/pkgs/tools/typesetting/tex/texlive/combine.nix
@@ -2,10 +2,12 @@ params: with params;
 # combine =
 args@{
   pkgFilter ? (pkg: pkg.tlType == "run" || pkg.tlType == "bin" || pkg.pname == "core")
-, extraName ? "combined", ...
+, extraName ? "combined"
+, extraVersion ? ""
+, ...
 }:
 let
-  pkgSet = removeAttrs args [ "pkgFilter" "extraName" ] // {
+  pkgSet = removeAttrs args [ "pkgFilter" "extraName" "extraVersion" ] // {
     # include a fake "core" package
     core.pkgs = [
       (bin.core.out // { pname = "core"; tlType = "bin"; })
@@ -27,23 +29,17 @@ let
       [ "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 pkgNeedsPython splitBin.wrong) python3
       ++ 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);
+  uniqueStrings = list: lib.sort (a: b: a < b) (lib.unique list);
 
   mkUniqueOutPaths = pkgs: uniqueStrings
     (map (p: p.outPath) (builtins.filter lib.isDerivation pkgs));
 
-in buildEnv {
-  name = "texlive-${extraName}-${bin.texliveYear}";
+in (buildEnv {
+  name = "texlive-${extraName}-${bin.texliveYear}${extraVersion}";
 
   extraPrefix = "/share/texmf";
 
@@ -54,7 +50,11 @@ in buildEnv {
     "/tex/generic/config" # make it a real directory for scheme-infraonly
   ];
 
-  buildInputs = [ makeWrapper ] ++ pkgList.extraInputs;
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = pkgList.extraInputs;
+
+  # This is set primarily to help find-tarballs.nix to do its job
+  passthru.packages = pkgList.all;
 
   postBuild = ''
     cd "$out"
@@ -121,25 +121,49 @@ in buildEnv {
       mkdir $out/share/texmf-local
     )
   '' +
-    # now filter hyphenation patterns, in a hacky way ATM
+    # now filter hyphenation patterns and formats
   (let
-    pnames = uniqueStrings (map (p: p.pname) pkgList.splitBin.wrong);
+    hyphens = lib.filter (p: p.hasHyphens or false && p.tlType == "run") pkgList.splitBin.wrong;
+    hyphenPNames = uniqueStrings (map (p: p.pname) hyphens);
+    formats = lib.filter (p: p.hasFormats or false && p.tlType == "run") pkgList.splitBin.wrong;
+    formatPNames = uniqueStrings (map (p: p.pname) formats);
+    # sed expression that prints the lines in /start/,/end/ except for /end/
+    section = start: end: "/${start}/,/${end}/{ /${start}/p; /${end}/!p; };\n";
     script =
       writeText "hyphens.sed" (
+        # document how the file was generated (for language.dat)
+        "1{ s/^(% Generated by .*)$/\\1, modified by texlive.combine/; p; }\n"
         # pick up the header
-        "1,/^% from/p;"
+        + "2,/^% from/{ /^% from/!p; };\n"
         # pick up all sections matching packages that we combine
-        + lib.concatMapStrings (pname: "/^% from ${pname}:$/,/^%/p;\n") pnames
+        + lib.concatMapStrings (pname: section "^% from ${pname}:$" "^% from|^%%% No changes may be made beyond this point.$") hyphenPNames
+        # pick up the footer (for language.def)
+        + "/^%%% No changes may be made beyond this point.$/,$p;\n"
+      );
+    scriptLua =
+      writeText "hyphens.lua.sed" (
+        "1{ s/^(-- Generated by .*)$/\\1, modified by texlive.combine/; p; }\n"
+        + "2,/^-- END of language.us.lua/p;\n"
+        + lib.concatMapStrings (pname: section "^-- from ${pname}:$" "^}$|^-- from") hyphenPNames
+        + "$p;\n"
+      );
+    fmtutilSed =
+      writeText "fmtutil.sed" (
+        "1{ s/^(# Generated by .*)$/\\1, modified by texlive.combine/; p; }\n"
+        + "2,/^# from/{ /^# from/!p; };\n"
+        + lib.concatMapStrings (pname: section "^# from ${pname}:$" "^# from") formatPNames
       );
   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
+      for fname in language.{dat,def}; do
+        [[ -e "$fname" ]] && sed -E -n -f '${script}' -i "$fname"
       done
+      [[ -e language.dat.lua ]] && sed -E -n -f '${scriptLua}' -i language.dat.lua
+    )
+    (
+      cd ./share/texmf/web2c/
+      [[ -e fmtutil.cnf ]] && sed -E -n -f '${fmtutilSed}' -i fmtutil.cnf
     )
   '') +
 
@@ -201,7 +225,7 @@ in buildEnv {
 
     perl `type -P mktexlsr.pl` ./share/texmf
     ${bin.texlinks} "$out/bin" && wrapBin
-    (perl `type -P fmtutil.pl` --sys --all || true) | grep '^fmtutil' # too verbose
+    perl `type -P fmtutil.pl` --sys --all | grep '^fmtutil' # too verbose
     #${bin.texlinks} "$out/bin" && wrapBin # do we need to regenerate format links?
 
     # Disable unavailable map files
@@ -277,6 +301,6 @@ in buildEnv {
   ''
     + bin.cleanBrokenLinks
   ;
-}
+}).overrideAttrs (_: { allowSubstitutes = true; })
 # 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/pkgs/tools/typesetting/tex/texlive/default.nix b/pkgs/tools/typesetting/tex/texlive/default.nix
index a2651c63e1d..4497cdfbed2 100644
--- a/pkgs/tools/typesetting/tex/texlive/default.nix
+++ b/pkgs/tools/typesetting/tex/texlive/default.nix
@@ -3,15 +3,15 @@
   - current html: https://nixos.org/nixpkgs/manual/#sec-language-texlive
 */
 { stdenv, lib, fetchurl, runCommand, writeText, buildEnv
-, callPackage, ghostscriptX, harfbuzz, poppler_min
-, makeWrapper, python, ruby, perl
+, callPackage, ghostscriptX, harfbuzz
+, makeWrapper, python3, ruby, perl
 , useFixedHashes ? true
 , recurseIntoAttrs
+, fetchpatch
 }:
 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;
@@ -25,7 +25,7 @@ let
   # 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;
+      stdenv python3 ruby perl;
     ghostscript = ghostscriptX; # could be without X, probably, but we use X above
   };
 
@@ -57,6 +57,37 @@ let
       collection-plaingeneric = orig.collection-plaingeneric // {
         deps = orig.collection-plaingeneric.deps // { inherit (tl) xdvi; };
       };
+
+      texdoc = orig.texdoc // {
+        # build Data.tlpdb.lua (part of the 'tlType == "run"' package)
+        postUnpack = let
+          # commit that ensures reproducibility of Data.tlpdb.lua
+          # remove on the next texdoc update
+          reproPatch = fetchpatch {
+            name = "make-data-tlpdb-lua-reproducible.patch";
+            url = "https://github.com/TeX-Live/texdoc/commit/82aff83d5453a887c1117b9e771a98bddd8a605a.patch";
+            sha256 = "0y04y468i7db4p5bsyyhgzip8q4fi1756x9a15ndha9xfnasbf44";
+            stripLen = 2;
+            extraPrefix = "scripts/texdoc/";
+          };
+        in ''
+          if [[ -f "$out"/scripts/texdoc/texdoc.tlu ]]; then
+            patch -p1 -d "$out" < "${reproPatch}"
+
+            unxz --stdout "${tlpdb}" > texlive.tlpdb
+
+            # create dummy doc file to ensure that texdoc does not return an error
+            mkdir -p support/texdoc
+            touch support/texdoc/NEWS
+
+            TEXMFCNF="${bin.core}"/share/texmf-dist/web2c TEXMF="$out" TEXDOCS=. TEXMFVAR=. \
+              "${bin.luatex}"/bin/texlua "$out"/scripts/texdoc/texdoc.tlu \
+              -c texlive_tlpdb=texlive.tlpdb -lM texdoc
+
+            cp texdoc/cache-tlpdb.lua "$out"/scripts/texdoc/Data.tlpdb.lua
+          fi
+        '';
+      };
     }); # overrides
 
     # tl =
@@ -66,7 +97,7 @@ let
 
   flatDeps = pname: attrs:
     let
-      version = attrs.version or bin.texliveYear;
+      version = attrs.version or (builtins.toString attrs.revision);
       mkPkgV = tlType: let
         pkg = attrs // {
           sha512 = attrs.sha512.${tlType};
@@ -78,8 +109,13 @@ let
       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"; }
+            # the fake derivations are used for filtering of hyphenation patterns and formats
+          else {
+            inherit pname version;
+            tlType = "run";
+            hasFormats = attrs.hasFormats or false;
+            hasHyphens = attrs.hasHyphens or false;
+          }
         )]
         ++ lib.optional (attrs.sha512 ? doc) (mkPkgV "doc")
         ++ lib.optional (attrs.sha512 ? source) (mkPkgV "source")
@@ -88,6 +124,22 @@ let
         ++ combinePkgs (attrs.deps or {});
     };
 
+  snapshot = {
+    year = "2021";
+    month = "04";
+    day = "08";
+  };
+
+  tlpdb = fetchurl {
+    # use the same mirror(s) as urlPrefixes below
+    urls = [
+      #"http://ftp.math.utah.edu/pub/tex/historic/systems/texlive/2019/tlnet-final/tlpkg/texlive.tlpdb.xz"
+      #"ftp://tug.org/texlive/historic/2019/tlnet-final/tlpkg/texlive.tlpdb.xz"
+      "https://texlive.info/tlnet-archive/${snapshot.year}/${snapshot.month}/${snapshot.day}/tlnet/tlpkg/texlive.tlpdb.xz"
+    ];
+    sha512 = "1dsj4bza84g2f2z0w31yil3iwcnggcyg9f1xxwmp6ljk5xlzyr39cb556prx9691zbwpbrwbb5hnbqxqlnwsivgk0pmbl9mbjbk9cz0";
+  };
+
   # create a derivation that contains an unpacked upstream TL package
   mkPkg = { pname, tlType, revision, version, sha512, postUnpack ? "", stripPrefix ? 1, ... }@args:
     let
@@ -97,15 +149,7 @@ let
       fixedHash = fixedHashes.${tlName} or null; # be graceful about missing hashes
 
       urls = args.urls or (if args ? url then [ args.url ] else
-        lib.concatMap
-          (up: [
-            # Only ~11% of packages in texlive 2019 have revisions, so
-            # the number of requests is nearly doubled if we lookup
-            # the name with revision
-            # "${up}/${urlName}.r${toString revision}.tar.xz"
-            "${up}/${urlName}.tar.xz" # TODO To be removed for texlive 2020?
-          ])
-          urlPrefixes);
+        map (up: "${up}/${urlName}.r${toString revision}.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
@@ -114,42 +158,23 @@ let
       # (https://tug.org/historic/).
       urlPrefixes = args.urlPrefixes or [
         # tlnet-final snapshot
-        "http://ftp.math.utah.edu/pub/tex/historic/systems/texlive/2019/tlnet-final/archive"
-        "ftp://tug.org/texlive/historic/2019/tlnet-final/archive"
+        #"http://ftp.math.utah.edu/pub/tex/historic/systems/texlive/2019/tlnet-final/archive"
+        #"ftp://tug.org/texlive/historic/2019/tlnet-final/archive"
 
         # Daily snapshots hosted by one of the texlive release managers
-        #https://texlive.info/tlnet-archive/2019/10/19/tlnet/archive
+        "https://texlive.info/tlnet-archive/${snapshot.year}/${snapshot.month}/${snapshot.day}/tlnet/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;
+    in runCommand "texlive-${tlName}"
+      ( {
+          src = fetchurl { inherit urls sha512; };
+          inherit stripPrefix;
+          # metadata for texlive.combine
+          passthru = {
+            inherit pname tlType version;
+            hasFormats = args.hasFormats or false;
+            hasHyphens = args.hasHyphens or false;
+          };
         } // lib.optionalAttrs (fixedHash != null) {
           outputHash = fixedHash;
           outputHashAlgo = "sha1";
@@ -158,7 +183,10 @@ let
       )
       ( ''
           mkdir "$out"
-        '' + unpackCmd "'${src}'"
+          tar -xf "$src" \
+          --strip-components="$stripPrefix" \
+          -C "$out" --anchored --exclude=tlpkg --keep-old-files
+        '' + postUnpack
       );
 
   # combine a set of TL packages into a single TL meta-package
@@ -177,13 +205,12 @@ in
           addMetaAttrs rec {
             description = "TeX Live environment for ${pname}";
             platforms = lib.platforms.all;
-            hydraPlatforms = lib.optionals
-              (!lib.elem pname ["scheme-infraonly"]) platforms;
             maintainers = with lib.maintainers;  [ veprbl ];
           }
           (combine {
             ${pname} = attrs;
             extraName = "combined" + lib.removePrefix "scheme" pname;
+            extraVersion = ".${snapshot.year}${snapshot.month}${snapshot.day}";
           })
         )
         { inherit (tl)
diff --git a/pkgs/tools/typesetting/tex/texlive/dvisvgm-fix.patch b/pkgs/tools/typesetting/tex/texlive/dvisvgm-fix.patch
deleted file mode 100644
index 0e927e24fd0..00000000000
--- a/pkgs/tools/typesetting/tex/texlive/dvisvgm-fix.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-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/pkgs/tools/typesetting/tex/texlive/fixedHashes.nix b/pkgs/tools/typesetting/tex/texlive/fixedHashes.nix
index e7ea017ac16..d7182086f9a 100644
--- a/pkgs/tools/typesetting/tex/texlive/fixedHashes.nix
+++ b/pkgs/tools/typesetting/tex/texlive/fixedHashes.nix
@@ -3,175 +3,179 @@
 "amsfonts.doc-3.04"="ch872rwfiar58praz8f880rcspy4mjxa";
 "amsfonts.source-3.04"="vjiw3vdxv44nl4yvaxqfy4b78girpjs7";
 "bibtex-0.99d"="ybimfc49fzmgpy88wagy0z55sdsshr50";
-"bibtex.doc-0.99d"="z85q61ajdnn1h1rljqf3cmz76j7wk7ch";
-"kpathsea-2019"="3dwfnpn4fjynpbiqpyz789jagrpd0jn6";
-"kpathsea.doc-2019"="kg6w07wj29r4xzyhi36jkph8rf07rvyi";
-"cm-2019"="5xrqls79s3drpagj8j3ihqzkll10605w";
-"cm.doc-2019"="36wag31jc0lrgncaxhcspiaqpwnw7xvy";
+"bibtex.doc-0.99d"="jbk7qsya6x0l8c3bvnf3dzp59hak4alq";
+"kpathsea-58622"="9d0ldcy58xcyd2b8hckkl14518bw5p5s";
+"kpathsea.doc-58622"="l0s26mhn17liv00kggh0x4kb02i044a3";
+"cm-57963"="5xrqls79s3drpagj8j3ihqzkll10605w";
+"cm.doc-57963"="zkdw4jhvmz2gd3zgazhx548lrj1a4lws";
 "colorprofiles-20181105"="9rs3wkarffy7hf7c9kymzacy20znvcqf";
 "colorprofiles.doc-20181105"="v1asppz0kqvfg85skaiisphh2z4y6mbh";
-"dvipdfmx-2019"="riw7c3haw76xk10jsncph76s5lvdwvra";
-"dvipdfmx.doc-2019"="svzp1hjzcz10d3z68bnmgxg0pr7vlvpq";
-"glyphlist-2019"="i4nay4q38l3367hlc93rhkgxvrkcmyjb";
-"dvips-2019"="92wx71n0k4ia02l5m44xkmw5z1q22pbg";
-"dvips.doc-2019"="7l2814ciknicz1fr7z5xagym05v38sn2";
+"dvipdfmx-58645"="2a9i7p590z9v716a235rb52yxvzkyr2p";
+"dvipdfmx.doc-58645"="icyrpqvnwznpzgw6vp2k6pdvad1hy2lp";
+"glyphlist-54074"="i4nay4q38l3367hlc93rhkgxvrkcmyjb";
+"dvips-57972"="3mixrkqhlx0d7lkcvm3z1yh3z5gmjhiq";
+"dvips.doc-57972"="36fjspl0a9dlih2r5jqymhp96h81z37q";
 "ec-1.0"="kjq23jms9m9h5af2ri4bxd65w82lli3v";
 "ec.doc-1.0"="a8mvwdx6s8swxhagcc1p36dsy335fhby";
-"enctex-2019"="j6lf040j733q0aj90wvx2vwq0x61zwdm";
-"enctex.doc-2019"="p2pad1ncy8izfag44p0pndyvgckfngvv";
-"etex-2019"="mdrs8yrrjf03pcndsr5azzxz7lvk08jp";
-"etex.doc-2019"="xdmkddsi3lykqy5hm03xamxsmmwplmnb";
+"enctex-34957"="j6lf040j733q0aj90wvx2vwq0x61zwdm";
+"enctex.doc-34957"="p2pad1ncy8izfag44p0pndyvgckfngvv";
+"etex-56291"="mdrs8yrrjf03pcndsr5azzxz7lvk08jp";
+"etex.doc-56291"="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"="k2s28hx5mq78ikd8383v0s8gvcbav9f5";
-"hyph-utf8-2019"="2p5nhs05nj1wkihyf08yfvvhj5w2l91v";
-"hyph-utf8.doc-2019"="gnsa3x6b0vnzxm27xplvmxxvhghp41l6";
-"hyph-utf8.source-2019"="jqzgwpvs62p4j2i2rr7hi9ai38gx1x70";
-"hyphen-base-2019"="zxb1681z3wrg8waaq8nkwimlydv603wy";
-"hyphenex-2019"="1ak1ymbmsfx7z8kh09jzkr3a4dvkrfjw";
-"hyphenex.source-2019"="n4rvv61jcw6s91mydy65qq90clva5zrs";
+"graphics-def-58539"="8zfx2iisxpsx0arxxhpbs8wp1x69rxfs";
+"graphics-def.doc-58539"="a0kws0r8a2624wl1ph0i63b5593h6y99";
+"hyph-utf8-58619"="iv6hq9jb4bldmdipjxc7gija6mmd4nb0";
+"hyph-utf8.doc-58619"="xxzpsbz4hgizhg7jdwrq41l5mmdhc23i";
+"hyph-utf8.source-58619"="c8z88ky9r4d4rvnsbnq1jfcjxjgfxmv3";
+"hyphen-base-58630"="aix2l8fcl4r9wpggrrck7qs832c9ywqk";
+"hyphenex-57387"="5d1fyhzq5zpxj1p0smrk3c1z9nw3yzgg";
+"hyphenex.source-57387"="js2q0pjhyskdkc71zjkr0wqbva8i8x3p";
 "ifplatform-0.4a"="sfnfrx7iqg6kikiqd44yx8004l2mqkza";
 "ifplatform.doc-0.4a"="sab580hpgp0nw6gq5li9vvv3x5gxp50b";
 "ifplatform.source-0.4a"="nkwc32c56f1s585rr18r54ib1xa9hn4z";
-"iftex-1.0c"="v7pwnklpnllkwc86nxsl55h27kxnvh5q";
-"iftex.doc-1.0c"="vz4qalfr34r2pqqiz7grp7ayqxxbsp2c";
-"knuth-lib-2019"="cvjgvw8rwhmr98sz0y3azsyawzswcv3n";
-"knuth-local-2019"="g5vihblw8w8p8k8s14nakk959vpdgnh4";
+"iftex-1.0d"="hnrm1vi2gwwl7b45i0sglk0yi8ziiqy5";
+"iftex.doc-1.0d"="0kk8byzsjwajb12yglvaif7msy8kpj7i";
+"knuth-lib-57963"="7fv2zxbgi2bn3vxgfj072mg5jh158zp3";
+"knuth-local-57963"="3qlxj0kh5k7mqbfz2mq74857bwrjxmmh";
 "lua-alt-getopt-0.7.0"="s2qkgq8dv65ib6chsah4xcargxh26bml";
 "lua-alt-getopt.doc-0.7.0"="xv8zqch612n2ww2pnpfranafcf7jhl96";
-"luatex-2019"="cyv130m5b93raz9qyqb23g2069cvfqz6";
-"luatex.doc-2019"="swr1fbr2ndjrmq1yma7xh5q35g6fvpy9";
-"plain-3.141592653"="my32apfgd55b14vf8bsldaqwdd931gcg";
-"tex-ini-files-2019"="831h7dslin8dnan7llz8mki6zibqfglj";
-"tex-ini-files.doc-2019"="pqfrqdqmlbhmcpjycpf644v4vg0qw7ic";
-"unicode-data-1.11"="6w4q13ps09d7z12jk8dxjmpp1xz9s9xn";
-"unicode-data.doc-1.11"="22b5gc53qq2szb0774dvn1np24crsc6b";
-"makeindex-2019"="yzy90d3n087yrdsawabd0bn7iwz3m1i6";
-"makeindex.doc-2019"="ygvhwf55z6f9ix5jny8im72qwva5w560";
+"luahbtex.doc-57972"="gbmcspvgx5dnm60kydiqwdv7gvwjkvzi";
+"luatex-58702"="kqr6nzj6qjbmfhfhpfypxc2qx1dlj96h";
+"luatex.doc-58702"="d3y285q35sqp8dmd7ylhbjx4f9q3njzj";
+"plain-3.141592653"="7656rww13pgcvcarad6n6jdl1315p399";
+"tex-ini-files-40533"="831h7dslin8dnan7llz8mki6zibqfglj";
+"tex-ini-files.doc-40533"="pqfrqdqmlbhmcpjycpf644v4vg0qw7ic";
+"unicode-data-1.14"="l3va6jrpqxc96kl6idaqgnhhzx9cwcnk";
+"unicode-data.doc-1.14"="jrwxwchmf7m8qrarf1d4dzg5jpqn0r66";
+"makeindex-52851"="yzy90d3n087yrdsawabd0bn7iwz3m1i6";
+"makeindex.doc-52851"="ygvhwf55z6f9ix5jny8im72qwva5w560";
 "mflogo-2.0"="mnn3p5gn5h9yi4inkllswxn142j31mz4";
 "mflogo.doc-2.0"="rdirf33m53y719b35aby2d98v1i0jhh5";
 "mflogo.source-2.0"="hl5rzcmk83lpc5rxcvy31kzm6qbwx3g5";
-"mfware-2019"="7mwvvyrb9cz2d3k5jl8r1fl238m3gl6n";
-"mfware.doc-2019"="px98kdlpy9a8j5wwr41bj26sy7v0ydhj";
-"modes-4.1"="ymnjslxj4y3c9kv1bqjbmrvhf1395jd0";
-"modes.doc-4.1"="14qd1hvm8v18ald1cifwmvjs864qbpqb";
-"pdftex-2019"="jlscd5nj9rdhdhczjah0vmarhrqdv9z2";
-"pdftex.doc-2019"="0sa1yfhh85q63d1jrisvj7fcqha1r6g2";
-"dehyph-2019"="dwnq2aajr29sdydc45056na079ph8gc6";
-"tex.doc-3.14159265"="d5y0rralm0m78rzsdhhsyc6qc3dhgf1a";
-"texlive-common.doc-2019"="amx0fzzmrb3p1cd6ianbl8vync5kl47m";
-"texlive-docindex.doc-2019"="bw11wjaqjjahs4x0hnakfvmvrjmjckkb";
-"texlive-en.doc-2019"="y88n496gb2lbbwp2qxnyz7pcvcxf7mf3";
-"texlive-scripts-2019"="bfrfpyq7vslyai013v3ddyzlib90bg3n";
-"texlive-scripts.doc-2019"="dwcx7ga1fyh2xl8rg79n05kd49ndhmav";
-"tlshell-2019"="4zdv4d320b19sicsn86b25pgncsfqqh0";
-"tlshell.doc-2019"="yps67a47kr5r3ljhd18kq35bhn2qjj3y";
-"updmap-map-2019"="blygk27vcmpm0n1hn848a9zjxg62ynnx";
-"aaai-named-2019"="3lh28gvljcszn9vhzgsb6fp93m7n4d1d";
-"aichej-2019"="rmm8q17dvb470lyarcvgbpgip24a4fxb";
-"ajl-2019"="j0z05x267dbbw5r8s0ybvlj0hwky6sg5";
+"mfware-57972"="7mwvvyrb9cz2d3k5jl8r1fl238m3gl6n";
+"mfware.doc-57972"="1gywjmyvdp5l925k9fvnd5h1w2pmzyj7";
+"modes-4.2"="wd0kik99kf8r6h0ddfb74hrfkiajrb1g";
+"modes.doc-4.2"="zs48h22mggw31g7sbykzzdsjzx4kg3xm";
+"pdftex-57973"="jlscd5nj9rdhdhczjah0vmarhrqdv9z2";
+"pdftex.doc-57973"="795k9m0c29s3wv3fjhw73zx81bwz3z98";
+"dehyph-48599"="dwnq2aajr29sdydc45056na079ph8gc6";
+"tex.doc-3.141592653"="wg2czmd4ii2b2srn1bfq6zgsm1m508p0";
+"texlive-common.doc-58055"="c3gi08560s2lr8c7ih7h25p4fyl852d8";
+"texlive-docindex.doc-58780"="bw11wjaqjjahs4x0hnakfvmvrjmjckkb";
+"texlive-en.doc-58572"="qyys3p34z9qcnmwxlgdfppvmy94xvabl";
+"texlive-scripts-58791"="nx7agd300r1yy7g18v60ksmyxldlyvnp";
+"texlive-scripts.doc-58791"="9xqk6wv9cyijm1q5knnjlxi2xv5b0hwk";
+"tlshell-58792"="fj8yx6k5z5jd0kw6a1cwbn578b2mqbl8";
+"tlshell.doc-58792"="yps67a47kr5r3ljhd18kq35bhn2qjj3y";
+"aaai-named-52470"="3lh28gvljcszn9vhzgsb6fp93m7n4d1d";
+"aichej-15878"="rmm8q17dvb470lyarcvgbpgip24a4fxb";
+"ajl-34016"="j0z05x267dbbw5r8s0ybvlj0hwky6sg5";
 "amsrefs-2.14"="crmn3pm2zy2fcr5d82dwwwxjm42na6j3";
 "amsrefs.doc-2.14"="r45n92fihia786v5nsab5vgjvwgmij6d";
 "amsrefs.source-2.14"="k1rzn2d509i2nkfwclpbpir3q6a41ya9";
-"annotate-2019"="ialyl5d9w1gip0k9n3kjf83w6991bdcc";
+"annotate-52824"="ialyl5d9w1gip0k9n3kjf83w6991bdcc";
 "apacite-6.03"="sj9k6bnr8qhfddlzk7wd0daf12458yi9";
 "apacite.doc-6.03"="cbhyw6lwyg7mnx8h421y0hxf3h5m6n4y";
 "apacite.source-6.03"="cby7n3f9rzm83736nm4rn1m77km3lr9y";
-"apalike2-2019"="vf25kvilm8g379d8c5mkzv749nd9p8ap";
-"archaeologie-2.4.4"="jbgj35snc3xs2wincdpmj0gjnbk2lmd9";
-"archaeologie.doc-2.4.4"="1wpp72bvsgvg48zgnk500a6jxiq85b2v";
-"archaeologie.source-2.4.4"="s711i7khx26mjkzaiy0ki990yab4nx69";
-"authordate-2019"="d2bswrn2prjx106g6qyxs0sdhxxr0wfh";
-"authordate.doc-2019"="0p505jmjdgvy26acbbgmkw9cp008kzl1";
-"beebe-2019"="h8z9if6vab76a9aa0a5z920j2mvcz6hp";
-"besjournals-2019"="n3ljrkamca5v9w0rk3m38nqw86s1izc8";
-"besjournals.doc-2019"="3swy1ix6cxbp87hjlaf3x4ws4kg8sz77";
+"apalike2-54080"="vf25kvilm8g379d8c5mkzv749nd9p8ap";
+"archaeologie-2.4.5"="s5r653hgvq14sy4g4jg6yylfdfd9a857";
+"archaeologie.doc-2.4.5"="s8sycgiz1p9ijzsqpnjq68iqlrrd3z14";
+"archaeologie.source-2.4.5"="6azzb6zrv4xcrqc89a0f23inxgicin0c";
+"authordate-52564"="d2bswrn2prjx106g6qyxs0sdhxxr0wfh";
+"authordate.doc-52564"="0p505jmjdgvy26acbbgmkw9cp008kzl1";
+"beebe-58697"="1vprhdr8b2cnm0aylklbr81s43bihwcp";
+"besjournals-45662"="n3ljrkamca5v9w0rk3m38nqw86s1izc8";
+"besjournals.doc-45662"="3swy1ix6cxbp87hjlaf3x4ws4kg8sz77";
 "bestpapers-1.0"="15nq2m32h0giv41k6dslrw28han015aq";
 "bestpapers.doc-1.0"="mmlnsl83sil5zbdhwq16b6025sxdh9s6";
-"bib2gls-2.1"="vfm4vn7h93awqnr1fqpq0g63i5xk9ash";
-"bib2gls.doc-2.1"="6csr6s6isja89hbh6cybb58jscgqhpsy";
-"bib2gls.source-2.1"="5iawp2yg5swj36mb87x5h89hc6rrm47x";
+"bib2gls-2.7"="kgiw7xkmfmg7n4d2jbvb8d4cv5g77djq";
+"bib2gls.doc-2.7"="21wmffrl60n5p15c2ip5v4c612yflxkd";
+"bib2gls.source-2.7"="mhcwmipmy51887r810ydxs4dkh3zppmy";
 "bibarts-2.2"="w813f5qw2kbsmlhcwxsg62na06bp0p0r";
 "bibarts.doc-2.2"="xrv6r5iwpdyrjzqzanvgw2dy07xgkgb0";
 "bibarts.source-2.2"="c4js97f9wx1ndh8isk3fgg6lp1rhrrmb";
-"biber.doc-2.14"="dh15vwnvr1a3x2qkg3inkj6v7mr54sd6";
-"biber.source-2.14"="gq0k1xk380k1sl6q9878xg7rxl9vywac";
+"biber.doc-2.16"="283hs3rvg9m38yk97pvajyzwkgyv38j9";
+"biber.source-2.16"="nbbnd4gdmkw2y15wigqrjxv1b2xvsdbg";
 "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.14"="3miz9jhhbv5scw2jmrah14y7rwn11jf4";
-"biblatex.doc-3.14"="rf2d8iiwsilsf56lfpi39xg36439114a";
-"etoolbox-2.5h"="vkv8mqbzjsyh51cqk0d40gl48cj1zcmf";
-"etoolbox.doc-2.5h"="9rj773kv9ia8v5brs2aw8f4xrgg6r053";
-"kvoptions-3.13"="jnr335l6nr52608i08zza9z1qi7drnnx";
-"kvoptions.doc-3.13"="w77jdi8gdsjzlhzwscnjvhpp0l27dh06";
-"kvoptions.source-3.13"="ab0dw2aayx34kgshcjv0k4hx4zr9ar72";
+"biblatex-3.16"="1y6ynai1zf5mx9106yhka418lhki79v6";
+"biblatex.doc-3.16"="5papwbpfnyfrimwh18p0nsnpajfkb6px";
+"etoolbox-2.5k"="1b2h9kr3gk2by5n0dswnq3z1hf68q5lm";
+"etoolbox.doc-2.5k"="51558shd94h5lrary13dznhss225wrfd";
+"kvoptions-3.14"="vplbvmnl37ypgrdqcn0mycsnwr5z1ha4";
+"kvoptions.doc-3.14"="2avi8y8yglncwa87vs41akaxlvbcjgbi";
+"kvoptions.source-3.14"="rl5bv5ip88w4251w0hf2wk5p8nzl9lwj";
 "logreq-1.0"="4kl4g8kjy4zch0rdn8aj2mr5yxpssdc0";
 "logreq.doc-1.0"="8s7ly9p9m270mhhh16gv5p71r10cpnzv";
-"pdftexcmds-0.31"="hxac5ylr8zlwlaq0ap8dbly3rz892z6d";
-"pdftexcmds.doc-0.31"="69mrbhhvrq1q69ap9vad2f0hjy7mf9c3";
-"pdftexcmds.source-0.31"="v1c5nbfzz7g72ryj030sbnk7f3y7igg7";
+"pdftexcmds-0.33"="pa208jqk3rvps51niwccdmnx3c0zhlc2";
+"pdftexcmds.doc-0.33"="3nbk8p285nzhw2vqaa31xnhr7cxflqqb";
+"pdftexcmds.source-0.33"="gzwymkn5xcy2fkvhn4qsny7cm6fx4hrf";
 "url-3.4"="vf34zjwlv43kcw53sdla9052x7x0kn7y";
 "url.doc-3.4"="ii3z3l7xkmrkxb8dkgk6lcqyb34niirc";
 "biblatex-abnt-3.4"="ryrk1n85x197ff723jla7vrcv4jkb2fv";
 "biblatex-abnt.doc-3.4"="i1b7mjmy8din75dzaqb407n5byavjwzy";
+"biblatex-ajc2020unofficial-0.2.0"="kiiyd9fswfrwzgl79h06a4izzsa0m1ns";
+"biblatex-ajc2020unofficial.doc-0.2.0"="bqqpysk5gxxy0mvyghz126zh4rbqlxqx";
 "biblatex-anonymous-2.6.2"="yv83qimx8n31f00csmlxxlmymxsq1ngf";
 "biblatex-anonymous.doc-2.6.2"="s3g5ndv0alcpi8jmslrashcg4slb96hz";
-"biblatex-apa-9.6"="2g68sdqx9psqbkcbn9zy2xbjk33sjppn";
-"biblatex-apa.doc-9.6"="ldllah271jz816nccaybyg9k6p2v3j4w";
-"biblatex-apa6-8.3"="df6vxwgcky269dr65v1xi4a4ycxxrppx";
-"biblatex-apa6.doc-8.3"="bmrj18hdb2ls5s7n52148g95fi25v9n7";
+"biblatex-apa-9.14"="1hv74dv3bqgafga8mmckmx7davj7f2l5";
+"biblatex-apa.doc-9.14"="nx2dj10pvvqmxzrm80cssba35v5hcy32";
+"biblatex-apa6-8.5"="byr40jxzifn0kpnksclsn8gz2am6h4w5";
+"biblatex-apa6.doc-8.5"="bkm3wh8c227wfl8f3899ra3swwavv7fh";
 "biblatex-archaeology-2.2"="4f3a6ma209x4902fw43xhhs9wkk741hn";
 "biblatex-archaeology.doc-2.2"="n8377bbiwq09fszgq2lq7i3qkzr32jbi";
 "biblatex-archaeology.source-2.2"="c6316rahqfyxqkb546gpljvqj8jncccx";
 "biblatex-arthistory-bonn-1.2"="298lp84p62rlsin8y7spz0ig2g8wla3b";
 "biblatex-arthistory-bonn.doc-1.2"="bkssng4czmqvimlv8f2bdh4sxdrag13i";
-"biblatex-bath-3.2"="lphjk5j7fyqqhni5ddh7l2s5qm81x5kp";
-"biblatex-bath.doc-3.2"="i06vx63xdykw9z20hyfnv358i5fywybq";
-"biblatex-bath.source-3.2"="rz1ckg5cqcxdyi4928r5fxbm47aiqgsj";
+"biblatex-bath-4.0"="04wgqz6s9qal2pg2li291nkn5p16zv6v";
+"biblatex-bath.doc-4.0"="ygd05m4f5gjc9yvhary19jnfklzv9iy4";
+"biblatex-bath.source-4.0"="ymsxcycg2jchikapk6nqqdwknwrl0bx0";
 "biblatex-bookinarticle-1.3.1a"="bnx6iravlnrkkyqb3ah21p0ikq00ab57";
 "biblatex-bookinarticle.doc-1.3.1a"="6shjhb1lajkivsh3mrr2whli5hcsb8b4";
-"biblatex-bookinother-2.3.2"="88v9r4l153lzbkz6ss0r1nfbhh45yqgf";
-"biblatex-bookinother.doc-2.3.2"="pbxlk3azrd21zcsnc7f1sfqpq44632qv";
+"biblatex-bookinother-2.3.3"="lcqqnr0za3jf3h3yr0kbffwnxpg7ww9k";
+"biblatex-bookinother.doc-2.3.3"="wz5w9vgr3c19kd5x6fic9sx3qs6lz0vy";
 "biblatex-bwl-0.02"="0a11hlav9gsavdisyjckvnrxkkb4134w";
 "biblatex-bwl.doc-0.02"="b7ddxvcabp9qd88mzb6dxvw7sz8dnqfq";
-"biblatex-caspervector-0.3.4"="5rgdqdckgrl9pbk2d3q4cr0g6j2gb0mf";
-"biblatex-caspervector.doc-0.3.4"="2n8fhy903ydzz24kqc491qd7x0hrypjv";
-"biblatex-chem-1.1y"="fizmglf8yy4zn0kqbng2d5c7i9migvjs";
-"biblatex-chem.doc-1.1y"="xl7fq05fa16ayzpxpjjqjdkkdxb0jj6x";
-"biblatex-chicago-1.0rc5"="0m7wf9glvcqm20cfn6xgpciz6nvg8vib";
-"biblatex-chicago.doc-1.0rc5"="zr7fqjvzg0i8nmzldwsidq8r58xcbhlx";
+"biblatex-caspervector-0.3.5"="lfrll315pr653wb5cp3263na44g2m8lh";
+"biblatex-caspervector.doc-0.3.5"="jdq7pdz08pzhrzd4ym6i8fws90a4bhfh";
+"biblatex-chem-1.1z"="lrk5pn8lihal829bvncmcvswpy86bgvj";
+"biblatex-chem.doc-1.1z"="dv8kdrfpypwy067bli57gl3rd9wb91hr";
+"biblatex-chicago-2.1"="4rm94ng8vz4sd37g7cnf4yjgc03x7l61";
+"biblatex-chicago.doc-2.1"="3mj4x64f6h7sky4s2yqg3dvh4y4kqbw4";
 "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.8c"="7m6l4jagryik9vfbsgblvg8c7ivzbcln";
-"biblatex-ext.doc-0.8c"="7i5s76fxxnc6l5zrfbdm2kb26xl8rf67";
+"biblatex-ext-0.12"="ppbwvlki0rgcjq9d1ypiwcpr9g62zqmq";
+"biblatex-ext.doc-0.12"="bw9mqrm7qpbx3yzx6jh0hjvhd9b16m3z";
 "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.18"="xp5b370133fs6dsr8xzw9xfnyxf1hxfa";
-"biblatex-gost.doc-1.18"="jldlsx5faynps1m7zfc94asbcd7473x2";
+"biblatex-gb7714-2015-1.0x"="fm4gcbb9bis4y77cfmvph2za02snm1j6";
+"biblatex-gb7714-2015.doc-1.0x"="5fxv6gsf6fsik5frsybagpg2m6wwwx79";
+"biblatex-german-legal-002"="wfjfph758mzj742z6gmg8dbrh6snmgw4";
+"biblatex-german-legal.doc-002"="ds43kijns6a8qjirib258w4nvm46nb54";
+"biblatex-gost-1.21"="ix95xf69yj6b48w761q1i5wvyc0x5lqa";
+"biblatex-gost.doc-1.21"="bn90k270bs89314iss1rv9sbiiyk5vq3";
 "biblatex-historian-0.4"="xp6r6a37ibm9fhdc95b2v3x5kgyz26c8";
 "biblatex-historian.doc-0.4"="6280kicfk2n0hwp03pyhl29ljdg911hb";
-"biblatex-ieee-1.3b"="c9xvvwp0csvicxg2lv7lfsyszza26r0q";
-"biblatex-ieee.doc-1.3b"="8426p4jfhm4kswblmmc20s131sdlprp5";
+"biblatex-ieee-1.3e"="zlryry7wpvvlpn6lvsyb5xwm7psq4jrr";
+"biblatex-ieee.doc-1.3e"="ipcvmv5rvssbc4wbnw7bxqxw0rqwfr5y";
 "biblatex-ijsra-0.1"="179hh36v47xfagjwp5vj3hczc18jkrgf";
 "biblatex-ijsra.doc-0.1"="x3js5mb545xapavsqq4phml7zqiswiki";
-"biblatex-iso690-0.3.3"="sxgb0zhcib9kgk12p3dph0w5915b5vag";
-"biblatex-iso690.doc-0.3.3"="x2fp9x7nyyk09ck9dqaigjdqvh4qchpn";
-"biblatex-jura2-0.3"="rp45sjnc0n79x8qkigpjajc7crfxcnvg";
-"biblatex-jura2.doc-0.3"="wss54malzwr4b6scmd8a5ij3dmkbgdwx";
-"biblatex-juradiss-0.1g"="0smwgi3vg97aiy6w8ya68zmaz711drlp";
-"biblatex-juradiss.doc-0.1g"="d4dp9hld95b70k8b5qxlmvcgcsxpv0g8";
+"biblatex-iso690-0.4"="f4hhfkq9hg3m1s3vcxddqqsi1wfhy4c7";
+"biblatex-iso690.doc-0.4"="mn63yqr0r3jrx7ds6myzx9gix3gl4ppx";
+"biblatex-jura2-0.4"="gwij6q3c9z10d9jlndb3x9avi26wiywm";
+"biblatex-jura2.doc-0.4"="9s1w54g9sh8j3i3z4bnsm0rp8g8kazxs";
+"biblatex-juradiss-0.23"="f9z0md8rgzixjxp78p1bb96pr71f7bls";
+"biblatex-juradiss.doc-0.23"="zspyq2lkxh56cq2ldcskhiwmab549r69";
+"biblatex-license-0.1"="r076ckpwly451hvj16rgprxsjp8masab";
+"biblatex-license.doc-0.1"="l91aqvq0r3414498xfrp80jwypwshb3j";
 "biblatex-lni-0.5"="hqp4whkb7d4h71kdc8gvqjrrr12f6dda";
 "biblatex-lni.doc-0.5"="z9pj0sxkl3ld3hq89bnlllx1522rv3kn";
 "biblatex-luh-ipw-0.3"="83gar343q3h1h96h8lzs2bmsp1ba82n0";
@@ -186,8 +190,8 @@
 "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-nature-1.3d"="vqvnb88jb6rwsdxigpcs2mr03p8d3npj";
+"biblatex-nature.doc-1.3d"="yvc82f9vdh7kh6x444gz7h3bzm8cq15w";
 "biblatex-nejm-0.5.0"="vybm8b0dqd5xyw3x6wp5xmq3dvl4by1k";
 "biblatex-nejm.doc-0.5.0"="6ppfzm4xdys6akhzc300kfh31jg49hlf";
 "biblatex-nejm.source-0.5.0"="q9s7ml5f366r7v1130brjvx20c4bpy6y";
@@ -195,41 +199,49 @@
 "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.1"="nlc115k2ciss7450vlbksrav7y3wrvqm";
-"biblatex-oxref.doc-2.0.1"="2q3cb51zp8iaaps2m2m7lw1ffzm0jzlz";
-"biblatex-oxref.source-2.0.1"="dyyjar6l7fzw2glggr3xzszcmmigbkpl";
-"biblatex-philosophy-1.9.8a"="kha09gq8n5db4fxh2w6s5690vms39hlw";
-"biblatex-philosophy.doc-1.9.8a"="3m8nl72q1q3hfv3xxdj978pmxjvn43s2";
-"biblatex-philosophy.source-1.9.8a"="3102fdih2bxplhadmwvi09lns9agflcz";
+"biblatex-oxref-2.2"="nmnl6kak235xwv1nhsxs0aln3dw654bz";
+"biblatex-oxref.doc-2.2"="p6dwicdcn1wniwlji7bhg16babx179r6";
+"biblatex-oxref.source-2.2"="wi8a83vmwcgqvk49xarg6sycsp7fz38s";
+"biblatex-philosophy-1.9.8c"="n2nkfafqbs1rmij23q45ry0gww43s6c4";
+"biblatex-philosophy.doc-1.9.8c"="lsllrjkqva40nfz6bxmgiklh2sc6rzs0";
+"biblatex-philosophy.source-1.9.8c"="j2sp7vlflcfgj7r4cwdr0xys52gnf3c6";
 "biblatex-phys-1.1b"="w0pxnyvy531qn79ahihx1iim8snhlyn7";
 "biblatex-phys.doc-1.1b"="jxa3qi102kdamzn9yc0bqrck650wib7b";
-"biblatex-publist-1.16"="jz1rnnnqx61jc88ksl536sldn2sc066j";
-"biblatex-publist.doc-1.16"="yikna45mkm4k222s7kpgs827q28al3vf";
+"biblatex-publist-1.21"="m4ca3llqdjm9n5w2r7vy5g3fldzzynkr";
+"biblatex-publist.doc-1.21"="gqbkq5880gn9maswfdvsfkbgh9y93j9a";
 "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-sbl-0.12"="c20vk47abw6af6h8xwx2193kck6vsby9";
+"biblatex-sbl.doc-0.12"="3d0pwf6w0gcnrkg1d6pqaqi0rkbidl5b";
 "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-software-1.2-3"="xw45p93s5r99w1fj0ykbzirpgvpccvyb";
+"biblatex-software.doc-1.2-3"="zx86j66l0l1ygqc39ykdf3j4bkz86l9d";
+"biblatex-software.source-1.2-3"="vv4qgzbghn93cxlhvk2md69mj16m06w9";
 "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-trad-0.5"="cqmqlc92pav8ggy23dmkramc8kn5jcbg";
+"biblatex-trad.doc-0.5"="bgkn896cgkvj9m7rvb5pqqspqma7s44l";
 "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";
+"biblatex-unified-1.00"="ks0l3ggiidbwhsnvfxzck8m8ji42zx63";
+"biblatex-unified.doc-1.00"="8x3k2cn8srdw8j359xinicb47dvbmr6l";
+"biblatex-vancouver-0.1"="1ml0897m983ym5gzw58q2kscx106xdd1";
+"biblatex-vancouver.doc-0.1"="k5j8nx2xgp3i85s0sczblaj1in2yq11q";
+"biblatex2bibitem-0.2.0"="wllvyb15idz442hmnkz4kbdbp7qc64zv";
+"biblatex2bibitem.doc-0.2.0"="fymi4mzi8z1f1i4hjh928v8cajfyblgp";
+"biblist-17116"="b565jl60ysccd5qkzgidjb188i509y9l";
+"biblist.doc-17116"="50kjqxwhdncn09c7cx0abkcihvhfzzpl";
+"bibtexperllibs-1.6"="prnsdd72d808kfrkv2s4c9flzs7dqq25";
+"bibtexperllibs.source-1.6"="idmidg8svnznmhzsg0qb2104bw4d9yhs";
 "bibtopic-1.1a"="r3rbv97qik2ikmkp3vx6srw7qf5v704c";
 "bibtopic.doc-1.1a"="anrfs022bvwbfwsm05hxl10zgwckidn6";
 "bibtopic.source-1.1a"="s32v3bwk7a1aqfkmp1scaf812x6ra9rx";
@@ -239,23 +251,23 @@
 "bibunits-2.2"="vkahqz7zjn0g4dkpffvg8rfhjlynvmnf";
 "bibunits.doc-2.2"="d6xcf9xdkabjg3jrnyklla7kpbylrg61";
 "bibunits.source-2.2"="1hxc8yqjpri8pn512pfvcq7b2m9qnwib";
-"biolett-bst-2019"="c2iw962bwa5815qk2sbhhqjd7z4ygmns";
-"biolett-bst.doc-2019"="7w39z3hdps980l2g1yqbzy8384w4vbqr";
+"biolett-bst-42217"="c2iw962bwa5815qk2sbhhqjd7z4ygmns";
+"biolett-bst.doc-42217"="7w39z3hdps980l2g1yqbzy8384w4vbqr";
 "bookdb-0.2"="b4mqk50dn86zf30w2z8953ms8m8v9lrs";
 "bookdb.doc-0.2"="y5sdn2fijycnyx9is1cqc5vx6zkyav62";
-"breakcites-2019"="cvqm5ljgdl47idyjvfs2hg98xmkscfj9";
-"breakcites.doc-2019"="jjqimy63648q6n4mzlwrd7p723m09cbw";
-"cell-2019"="qlg2sy9fj9cv6c8jbdmwzysadl8fhw8b";
-"cell.doc-2019"="61a0456g9i76nxwhpv18fw532nimk2l4";
+"breakcites-21014"="cvqm5ljgdl47idyjvfs2hg98xmkscfj9";
+"breakcites.doc-21014"="jjqimy63648q6n4mzlwrd7p723m09cbw";
+"cell-42428"="qlg2sy9fj9cv6c8jbdmwzysadl8fhw8b";
+"cell.doc-42428"="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";
-"chicagoa-2019"="7ka9kkyvy1w4s0xipgr6f49lajd78nzn";
+"chicago-15878"="k9y76g5a4nfy88igklw08n27zvnnap2b";
+"chicago-annote-15878"="nyasy7sal5vikd1jysdvhg0ym7hs6q0p";
+"chicago-annote.doc-15878"="8qhd3kj016s9laavhg1wvimy4325zz0g";
+"chicagoa-52567"="7ka9kkyvy1w4s0xipgr6f49lajd78nzn";
 "chscite-2.9999"="yc7v9v66md3dy5k2gjswzh58xzxdhwp4";
 "chscite.doc-2.9999"="fbcykh46rifs4kvn728sav04fnshr6br";
 "chscite.source-2.9999"="vsii846cdlrd9fdmf4npwy8jxh0fcafb";
@@ -266,12 +278,12 @@
 "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"="v9xa953rly8mc854mfq4zzavwpvswkid";
-"amsmath.doc-2019"="1ql51mqama6f0r7q58npmcy8zns5nk81";
-"amsmath.source-2019"="2crzrkgbi131v1db2zz8ysfbgjminxc5";
+"amscls-2.20.6"="m5zwmxar85gyv6pd1bjr4wm3plpjw566";
+"amscls.doc-2.20.6"="63ggqvhkqm7s5kwka5ys9292i9scxnjf";
+"amscls.source-2.20.6"="bzksjmshkzxdxc8mh86yx6cl8sb4w9q6";
+"amsmath-56514"="gl23v3yd7q2lcd9fjdnbni1y2hqw54px";
+"amsmath.doc-56514"="2x5rg53gv1s4mlyjmdr583ssy1clzg6m";
+"amsmath.source-56514"="720p54x5jha7ay8n0nap77kj5xnbcam4";
 "atbegshi-1.19"="rd12v7qnwk6mig4vcr1xziqrji613i8m";
 "atbegshi.doc-1.19"="qpmwwvq8lzm95iipc1bqmff8z1fjwr20";
 "atbegshi.source-1.19"="h4ah2l0qz9yh9y4sj51ai95n5ynd65bd";
@@ -281,26 +293,26 @@
 "auxhook-1.6"="xac68wvfhmds8251pc9ii7rjlak9ya27";
 "auxhook.doc-1.6"="gmg6905gsw51mvqwpksajw3p8yjag16c";
 "auxhook.source-1.6"="d0f1ia58xllmkg796dvky2b4mv86p7yd";
-"babel-3.41"="sirs099z46wsbmc4lq8xwc8anxkz0klq";
-"babel.doc-3.41"="6dj92yi6jjfl0yaxylzz89q1v5n2c0lb";
-"babel.source-3.41"="g6sdds3bcvw4v2nd97p5n2dldvrs30b8";
+"babel-3.56"="cin8hn6wrmk577hn8wq3dpxh8426zhxy";
+"babel.doc-3.56"="h48skznpr10l4a3qndqv1pgs9f1d6331";
+"babel.source-3.56"="nnvc50xf1igagmm2g2cqmzs7yjgjfzvp";
 "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";
+"babelbib-1.34"="f59py6xcjdpkdrn7gs3ik7ci2b091vrh";
+"babelbib.doc-1.34"="3ajzfn5k7i3ywhhgpx55dvph91amlqsa";
 "bigintcalc-1.5"="3ivnkj1qyviffssxymdjy0nagrkh95yp";
 "bigintcalc.doc-1.5"="hmfcvfzcyal8sz74ywhcqx3ydhmywgnm";
 "bigintcalc.source-1.5"="jlaf6n169xxpipzg2d83dclk05v72h74";
 "bitset-1.3"="nw1h1rrc82r2saka495mncrd6vn54dj6";
 "bitset.doc-1.3"="srlljjm4s7sfkclndy4ziwcgm3r6mpjb";
 "bitset.source-1.3"="1fc9dp30lpgicd4c3cj0vkqy4j01lzkq";
-"bookmark-1.28"="bpz7mvymqhww5nimmwnsmyfr39374cm9";
-"bookmark.doc-1.28"="briagq8yzmxjx9ridrrwql99a1pk6lv7";
-"bookmark.source-1.28"="2h3yqzjr5z2jfy53r45403cfli8ch6g1";
-"carlisle-2019"="wlkxgqdq20dlbinabdia2n1af9nhz5vm";
-"carlisle.doc-2019"="i2mg4zqlcsipqcz4wa9y9p89nnfzvavf";
-"carlisle.source-2019"="bvla3z6fd0m46k365s2fsbpb5ypvb3rv";
+"bookmark-1.29"="m0fqwisbqakdvza2bnr7clwz5nhi9wlw";
+"bookmark.doc-1.29"="vr3fyr67n83j9pcj5piyy3z88n13m9ya";
+"bookmark.source-1.29"="vfkirhdggrclpxvcjv1bk6bz89zy1m6y";
+"carlisle-56753"="7cp342lr12vvr9zy0g84l5jy0aj241v5";
+"carlisle.doc-56753"="0wbnc5y0vvwd9208z2ylwfffaqr3i88p";
+"carlisle.source-56753"="bvla3z6fd0m46k365s2fsbpb5ypvb3rv";
 "colortbl-1.0e"="v55k9b9db0gy7fhqp0lg3isy4v9slphm";
 "colortbl.doc-1.0e"="445wygx49bhlsyqm9czmp4npksgxxs01";
 "colortbl.source-1.0e"="jbxzz8nx1gxm642yr63am3nz9f3sqq5b";
@@ -310,32 +322,38 @@
 "etexcmds-1.7"="5ihd653q0sbq1q40hd9pvwxj73j099iq";
 "etexcmds.doc-1.7"="h35i02fn3bim95f50bvq50pwiymjdpag";
 "etexcmds.source-1.7"="dkiaxggiyzx1w07brj8zgqn7f1s4vs4h";
-"fancyhdr-3.10"="0jn1ivsf29hmmclhxbl1fc2gmglgwcq8";
-"fancyhdr.doc-3.10"="dndsyllh1bb96p5acr7dics7831g4pax";
-"fancyhdr.source-3.10"="xg41mjxhd1vajr1n1s8vzvggkf4zi9lz";
+"fancyhdr-4.0.1"="xk1q6p8d8s7bckh0sfrh5x5daaj8qsjg";
+"fancyhdr.doc-4.0.1"="y9sc7d2jic4nnqclr52av2rdgfq4fg7m";
+"fancyhdr.source-4.0.1"="24f2hv3qhvr7xgc6b3q5arcyhsqihnc1";
+"firstaid-1.0j"="4fkmvxmkkbna6x9x9b1mw48zw4dlj6pp";
+"firstaid.doc-1.0j"="6g9vrr42bdalrsjc81sl6962lb15sis3";
+"firstaid.source-1.0j"="hf1b4ln4lw2k1aj7kgj320zh0lgxvkcr";
 "fix2col-0.04"="4lr11c6qqbsmm3jixayn7jlyikh65b83";
 "fix2col.doc-0.04"="k9hlwbz12vqc446y1ydy045j7c29yzng";
 "fix2col.source-0.04"="524zn5yfy3zwy70m11vch4ri5xwrgi0p";
 "geometry-5.9"="lh2ipfx1nhgq622jg0d63h34pcmf9w62";
 "geometry.doc-5.9"="lbicfnq1a337hyqqv9a8gka58d9na7pf";
 "geometry.source-5.9"="7clx1fs5q3w4qy58x4iicybgjm0985hw";
-"graphics-2019"="a3v0hbvmdjv6g6q5261gp2bpfqcqsmy9";
-"graphics.doc-2019"="d6rkw4xhxq19s8yvxxdn20kvvgg187iz";
-"graphics.source-2019"="0gxgf08csyxj8zjlkvlq8kp7jp1rc6z3";
-"graphics-cfg-2019"="j73na78ajl4n50wn2is5wvw7mf27da86";
-"graphics-cfg.doc-2019"="nzdjyk00lx0xhflm04d2kmyn5ya2v487";
+"graphics-56514"="vrbps04ijp3mfn7q097n3cwprhaqv8k2";
+"graphics.doc-56514"="y748ygwssmq48hlb4rx6i7fxx9chvrxn";
+"graphics.source-56514"="ig68pkabrdsdfpzzl144p9r50iig4iq2";
+"graphics-cfg-41448"="j73na78ajl4n50wn2is5wvw7mf27da86";
+"graphics-cfg.doc-41448"="nzdjyk00lx0xhflm04d2kmyn5ya2v487";
 "gettitlestring-1.6"="a4i7kyl19gyxdjkmmmrq7cwsjz92mapc";
 "gettitlestring.doc-1.6"="hrn7918v2qlw7xlcsslms56w33wcfag1";
 "gettitlestring.source-1.6"="lskbp47gqwb0gydcbq2dva1wskr9isjp";
 "grfext-1.3"="ds9vw8yvxaazr9jwfx7s4pldwpqkmynn";
 "grfext.doc-1.3"="zdbrsf2a9y0g128nl2j124b2qyn9japz";
 "grfext.source-1.3"="zig714i8cp2ibvchcigj4h7pvls2xw4v";
+"hopatch-1.4"="lp72821hqi9bhrldni1056wp7kg6valp";
+"hopatch.doc-1.4"="rx61jfcnn581l2078xaw7bslk953g7cd";
+"hopatch.source-1.4"="c140sgy5nbx9s6jhx6qd13b6hs83mkbn";
 "hycolor-1.10"="fpks9kvhjvqs20wq3ay8i5fhy9vf0r15";
 "hycolor.doc-1.10"="fmls09bj0wgl6bx5djbyimqd7dhyfcjs";
 "hycolor.source-1.10"="pdsx5dzxqw064s62bllxw2r27102p689";
-"hyperref-7.00d"="h93ya61rcia87phjmq8g7zgfbb6sf3mf";
-"hyperref.doc-7.00d"="d14njcv06hr30b01g0cbxypzwjfp6jny";
-"hyperref.source-7.00d"="9ppj94hdgr47v99fb1b8yd5h964wqix2";
+"hyperref-7.00k"="dpncl7i5ima1xzjfyha59m0zrcch10a1";
+"hyperref.doc-7.00k"="f4h96xqly1gjspi3zdxx7izps1q1yy08";
+"hyperref.source-7.00k"="9068hchhckdfingjn3iyf2lg331b8z9c";
 "intcalc-1.3"="3qbzf5d01w7jk4ffnn3h254vf0n4qqhj";
 "intcalc.doc-1.3"="g6yv27w5qs315nywq85qmicvawyp6wp4";
 "intcalc.source-1.3"="mz1j4jmq5i376ldqik3c9ayl94d78cyc";
@@ -348,9 +366,9 @@
 "letltxmacro-1.6"="1hik240za8h6rs8yz8x6f5vnzanmr79x";
 "letltxmacro.doc-1.6"="yjy1hvgprhi7n60dpgm847k65zz91v5m";
 "letltxmacro.source-1.6"="m8q4jdw8fxwff5yrdg4rq3kmf0a05zg9";
-"ltxcmds-1.24"="aw3bpld6wq939h9b4a57xsi82nv7y0jg";
-"ltxcmds.doc-1.24"="yw90x0ni4sjf3i0f0f6dza0rxy4xqlq0";
-"ltxcmds.source-1.24"="gvwjdbmvdsvzn18gs8br619ndfjfg059";
+"ltxcmds-1.25"="gyfgkyx4ds7mq4dkr2813nz4f2nwzhnf";
+"ltxcmds.doc-1.25"="hcgnp0dh8xiip47i9cxvbq9hplp2ngj9";
+"ltxcmds.source-1.25"="pyzd96nldhdlzv2h05vaz43pm9h1c89d";
 "pdfescape-1.15"="4150ga4j3q8q8g73k2f263arfdav6mpd";
 "pdfescape.doc-1.15"="rdc2ws2iy75nympsdis3y6wfillzn8rd";
 "pdfescape.source-1.15"="dji9isdc78x365cg06il8pmi7cl985yr";
@@ -366,70 +384,78 @@
 "stringenc-1.12"="mmjk31qhflv57x6gpwdipcxz2i2x8fx1";
 "stringenc.doc-1.12"="7cnk13y2ilryc5pccp0l0aj6gd1386n8";
 "stringenc.source-1.12"="x2qlpjnp9jaygakbvw30wlg9sh8xyr08";
-"l3backend-2019"="z6wh5cqir7icbih4kni4259m6sib8kyy";
-"l3backend.doc-2019"="j59ndgc7d7y9mdh6fwdxlqgj9a1dg8if";
-"l3backend.source-2019"="y2jdzx8mfir676arj2qwb3yqnc8ghlcg";
-"l3kernel-2019"="8fyf0y5q84vxzwa2k0g7npig0z51c40j";
-"l3kernel.doc-2019"="snvn093p1vv9s2qawdx2py071cz1gmrc";
-"l3kernel.source-2019"="dzkgibl62dlyf31q5qz353drqal9j0md";
-"latex-2020-02-02-PL5"="zk5q743mvp8bqq11y72g0h29ff9wjc4v";
-"latex.doc-2020-02-02-PL5"="l8f0d3bzyqlxv7q9abp39s1r1w0lql13";
-"latex.source-2020-02-02-PL5"="g4va39aywmz200pnvnl55699js6bzkkl";
-"latex-fonts-2019"="pw97wy7b4hhzm28r0wl44lacn7nx41ia";
-"latex-fonts.doc-2019"="mv9ivpdxgyjj92fq9141bsw5s306mg83";
-"latexconfig-2019"="p0p0bmn0xa6pny05y862pnviafrjhr7i";
-"latex-bin.doc-2019"="wcsdzg8gg1f2c5j5n73pj109ah474jr9";
-"lm-2.004"="ci5dpznkzlal3bkn0dcd2m5i05aws66g";
-"lm.doc-2.004"="w3g5xn4pfqhri4glpbh66rs8d6nbrd02";
-"lm.source-2.004"="bw69srvx8mprnj8d5f48bq3mg1ysfk1n";
-"luaotfload-3.12"="ackv6b8wkvqxpsiihkal9cqand8hii8w";
-"luaotfload.doc-3.12"="wxi9k0jcksi4vaf6xxhdblbmcql8y06c";
-"luaotfload.source-3.12"="6gn5jrfg8f082s56abjw86ss54x1lg13";
-"lualibs-2.70"="m5gqykaxhmj5g03x8wrkr0klind62ymp";
-"lualibs.doc-2.70"="vg9ab9js8xywziah3qv2v9zxg75ck0hx";
-"lualibs.source-2.70"="5z8xq8kwx7sd9pva0y3mmgxgxq7n5wp8";
-"ltxmisc-2019"="lf6x6jbl1d3i77wb0dg7lmy26qxk7h8x";
-"mfnfss-2019"="52p8xnxca0ypcxbbjakx42mljjwv5jjj";
-"mfnfss.doc-2019"="0c2hn0h964j1c0kzn0aq19cvff0n87hs";
-"mfnfss.source-2019"="829y6cng0z45bdsb2vdrs4wkq2pp0cxz";
-"mptopdf-2019"="s1gykljbmzqqpdhipyxnsz4cmmpxmm96";
-"mptopdf.doc-2019"="1ykld5gmmg25mr3i0bbf0piscpd5v4xv";
+"zapfding-31835"="6prjnqim0yrvzj1ary8i5761byqi0ca9";
+"l3backend-58509"="3ccqr5bhd5rj6r2x3wczq19faxnqdnqa";
+"l3backend.doc-58509"="h84x01ff60chwzsqvrlvcvhgnjhx8d96";
+"l3backend.source-58509"="vl09wc9bxzabf0figs6yysqx1pirfgfs";
+"l3kernel-57789"="rhpra0zbsa53frlxm0w61ya4dz6w0z39";
+"l3kernel.doc-57789"="7a7hiqsm79g2784iyiilyhdglc5rb3vc";
+"l3kernel.source-57789"="8wf5y5ncxyhisn9zysk0m1s5m3wiai3l";
+"l3packages-58296"="f89jdw85g201493hiz1q9k44252m6ram";
+"l3packages.doc-58296"="39fchna3mhqikshsg95x2r7ybz5nx7f7";
+"l3packages.source-58296"="xibrz1840iwm2cm2a47irqvw90hfp0x6";
+"latex-2020-10-01-PL4"="85wa2sw72nzh6lwf47pwjzmd4zypjd6d";
+"latex.doc-2020-10-01-PL4"="ddgjcjhlyqs4v336h0rxlq3bpfki985j";
+"latex.source-2020-10-01-PL4"="igvlaq2pg82a4cf66yrdi5cpc9glrpzx";
+"latex-fonts-28888"="pw97wy7b4hhzm28r0wl44lacn7nx41ia";
+"latex-fonts.doc-28888"="mv9ivpdxgyjj92fq9141bsw5s306mg83";
+"latexconfig-53525"="p0p0bmn0xa6pny05y862pnviafrjhr7i";
+"latex-bin.doc-57972"="s1vj36h9s8nsdvn30h2agvg1l7c18i9x";
+"everyshi-4.00"="z9jwa1p2n1463ssx82dzdnj6wy69l856";
+"everyshi.doc-4.00"="hk1m31wikxs1b66sjmh8vkjd0js50c6v";
+"everyshi.source-4.00"="lz9d57cvr57z25j3263ddyiv9xvq9h8d";
+"lm-2.005"="9fjqjbdpbkzkgi0rlm3zhhbhs647s00v";
+"lm.doc-2.005"="38k2pryqy5sy8yff86dkxisaigim6h2z";
+"luaotfload-3.17"="v7vj49icybjinrd27cxavmxld5r1ia7a";
+"luaotfload.doc-3.17"="hf8814qwpr54icwkfn7m1gpy8009r3b1";
+"luaotfload.source-3.17"="423i6lpfcs4f8y3hlh0fk7ihmpwkbz20";
+"lualibs-2.73"="jcdwmmdkg2kbvnvybfyskf1k10wnxc6k";
+"lualibs.doc-2.73"="mvdgcbmrwamdn0ddqx866v94grdm5abn";
+"lualibs.source-2.73"="5ambrmj82026wa0ginan4sjgfxhzm87r";
+"ltxmisc-21927"="lf6x6jbl1d3i77wb0dg7lmy26qxk7h8x";
+"mfnfss-46036"="52p8xnxca0ypcxbbjakx42mljjwv5jjj";
+"mfnfss.doc-46036"="0c2hn0h964j1c0kzn0aq19cvff0n87hs";
+"mfnfss.source-46036"="829y6cng0z45bdsb2vdrs4wkq2pp0cxz";
+"mptopdf-57347"="s1gykljbmzqqpdhipyxnsz4cmmpxmm96";
+"mptopdf.doc-57347"="5lrz8b6a6k130gkh0skg72y1m1cjpzwq";
 "natbib-8.31b"="c4fyqph06vxqm37z88r31q84xz5imcnj";
 "natbib.doc-8.31b"="fsg1kcjvbp5hfn9h8lwhygnil9wr7awg";
 "natbib.source-8.31b"="c4b7bqivps74v8286lf4j36p551jhnzj";
-"oberdiek-2019"="ys692jj87xpwi8wccf894rl1cddag1qg";
-"oberdiek.doc-2019"="8gvg7cd988yszmbc6y4n9427hzxmi4q3";
-"oberdiek.source-2019"="2j2ybm3kipln69ar01hw0zjwj8ihy26j";
+"oberdiek-56291"="hh8lv79mk91rpmmg4dghwhxf0dn5bspr";
+"oberdiek.doc-56291"="flbpbinnhlmzdkn70zlg1zllrrgr8wf6";
+"oberdiek.source-56291"="xgj6s1953j85qhyhx0cf3lhijv51c2km";
 "grffile-2.1"="syj6z9xmjbkjwn9fvk88bh5z0jsxqhfh";
 "grffile.doc-2.1"="lbm6cjskdpf47d9imp0ina431wagj5aw";
 "grffile.source-2.1"="a5pp25fmbhj3zb33hx18pcfc2i14gjcm";
 "infwarerr-1.5"="75sarxc1v1ycj4rj6hikd7i0wx6b2w65";
 "infwarerr.doc-1.5"="s0g9m590r3jq0r9d3lidi6pd8paydimk";
 "infwarerr.source-1.5"="idalazzzcx2mh2b23q9sk7amwsk3f1wr";
-"pslatex-2019"="7apd53ad70mr9pf8ja87iz4cfm41qs9p";
-"pslatex.source-2019"="cqc3yah7p9cgbbsj6var19b4xzyqj01l";
-"psnfss-9.2a"="a4gfps30ywrjdah9m5dknsv5yl80h0gz";
-"psnfss.doc-9.2a"="pbiaqsf1gqrwic9pf499k89aw757wr9m";
-"psnfss.source-9.2a"="vi285d52bbvq01x4yan9md3cck4dc1lh";
-"symbol-2019"="3w7a6aib8mdrap257pxjw8x39lck4nyc";
-"zapfding-2019"="6prjnqim0yrvzj1ary8i5761byqi0ca9";
-"pspicture-2019"="siqi85kfmyg91cf7nggs71jh38g2aicl";
-"pspicture.doc-2019"="h26v6akzzgg6hn4ay096fvg2qw6l2ww8";
-"pspicture.source-2019"="fclpkng5q7dhd1vfzv2031r4l3f3vh5y";
-"tools-2019"="3xlv7ifks3rvkdcwmldwnb8bh8xci852";
-"tools.doc-2019"="qrxixpd7fch0l0d17qwp7x3v44klsvsd";
-"tools.source-2019"="4s2cd0zvswd0k9lhplfp325pmax11svc";
+"pagesel-1.10"="a3bipby43s0bnbbycdap5js574jfn3yd";
+"pagesel.doc-1.10"="qz26gbs5mn6z4raxlwi6adm7g4mxps7h";
+"pagesel.source-1.10"="y2qqg5hjld7rvfvfnmj1mgshwzfzh9mj";
+"pslatex-1.3"="4zn88wal7mb97pphhns3ipazpiz60g0n";
+"pslatex.source-1.3"="cqc3yah7p9cgbbsj6var19b4xzyqj01l";
+"psnfss-9.3"="xcfg32llsp1zwclhdwmyp7ll4vn013fr";
+"psnfss.doc-9.3"="p1psj7zb6i3jykmmh8ia3y9d94mdx72s";
+"psnfss.source-9.3"="rv9p5ih5nhsmafdvx99ndbch07yj071c";
+"symbol-31835"="3w7a6aib8mdrap257pxjw8x39lck4nyc";
+"pspicture-15878"="siqi85kfmyg91cf7nggs71jh38g2aicl";
+"pspicture.doc-15878"="h26v6akzzgg6hn4ay096fvg2qw6l2ww8";
+"pspicture.source-15878"="fclpkng5q7dhd1vfzv2031r4l3f3vh5y";
+"tools-56514"="k94mh7vvdfnkzcd4sz4ra52byb6n2crs";
+"tools.doc-56514"="r5fnxcyk8rjqyid8i4ymhxr4lynrdrcs";
+"tools.source-56514"="yl31ix955ds02gf84492pzf9a4zjd5di";
 "collref-2.0c"="xxcnjj8qnbb06zkmh5kqysdm6k5yf4z4";
 "collref.doc-2.0c"="5a9ns23lv1n780ll3kp969dhi0mx93gb";
 "collref.source-2.0c"="7msfby8bxs89i87jiibpbnp97byjs6p5";
-"compactbib-2019"="5365y0lxziirnp7rraxwbcksrky9hr1m";
-"crossrefware-2019"="qb2vwvcmvb0xmsj75vxgd7fn26c5npmf";
-"crossrefware.doc-2019"="69qdw8b3xrqnydxih94sjpj7pd8jpy5x";
+"compactbib-15878"="5365y0lxziirnp7rraxwbcksrky9hr1m";
+"crossrefware-47861"="qb2vwvcmvb0xmsj75vxgd7fn26c5npmf";
+"crossrefware.doc-47861"="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";
+"din1505-19441"="dc7lv2c8zid1c6pklllsiac390hx0v4c";
+"din1505.doc-19441"="fhdc3badjmz3zylmgahy34fbzjgkss0m";
 "dk-bib-0.6"="yvbpqypgxkh6i47yvkk0cp7qsfy083gr";
 "dk-bib.doc-0.6"="px69q4pi9444kwmw6fpmajvdwl8ivw9i";
 "dk-bib.source-0.6"="1jmv0pg8x913y6y0xjb888s0zg91iw1l";
@@ -438,39 +464,39 @@
 "doipubmed.source-1.01"="mz2ld43x7sp8np0qmcs86p5lc09nl4dr";
 "ecobiblatex-1.0"="ikxp3jlzlsnc7jh7vcxcfq8wvpd5r8ll";
 "ecobiblatex.doc-1.0"="y5hifg3r0xkgv6zklw7l9j7shl87fnf0";
-"econ-bst-2.7"="nwrbh3mhghbh8iljj66yanpv2r5wyfpf";
-"econ-bst.doc-2.7"="kxndjrjizaqcr2z76cq8irmyipndxmwc";
-"economic-2019"="xw85nd7v6i1d2ma0airnc7bwf1fdsipp";
-"economic.doc-2019"="pv3irnv3gj70q22ac3kr858hac50vrbz";
-"fbs-2019"="h6ghp5i14cqy46hzp9i481c8gvk2ddza";
-"figbib-2019"="imp65i6ddqyw5xck7k6gzb976glq9xj8";
-"figbib.doc-2019"="6v3sj56vg039mrm7kk71wdjhp04h1rf6";
+"econ-bst-2.8"="942nshsxan2vlsdrxzrj2idn6w5g09i6";
+"econ-bst.doc-2.8"="wzs32mgk5h8cvdsf3s52pgkxch1ynypa";
+"economic-32639"="xw85nd7v6i1d2ma0airnc7bwf1fdsipp";
+"economic.doc-32639"="pv3irnv3gj70q22ac3kr858hac50vrbz";
+"fbs-15878"="h6ghp5i14cqy46hzp9i481c8gvk2ddza";
+"figbib-19388"="imp65i6ddqyw5xck7k6gzb976glq9xj8";
+"figbib.doc-19388"="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.2"="64nmdcypvq55k0allph65jnybivny2jh";
-"gbt7714.doc-1.1.2"="0vxkd2xl3ldv1vw06bclcm037m995hb6";
-"gbt7714.source-1.1.2"="fcb1x2zz5pb21xnnq9bl450wz4gygqfa";
+"gbt7714-2.1"="d72pw49b373nj1rrl3phvcmnyjcx4772";
+"gbt7714.doc-2.1"="rpvsgxsm3j492qsyadxnchk8hbasm6ch";
+"gbt7714.source-2.1"="0ndyqhqkrrqc8mvfga8hrm8dhzd6clcz";
 "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";
+"harvmac-15878"="30iiq3zikvmyy87j98knxbc9iak232bb";
+"harvmac.doc-15878"="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";
+"icite-1.3a"="pci3xglq0l93bp7zicyp82xf7wnqm0qd";
+"icite.doc-1.3a"="8f1w2r4m5bw4zflqqjp04n48axm653ik";
+"icite.source-1.3a"="6ifix61qncaxmf04miqm2gzcssb09syd";
 "ietfbibs.doc-1.0.0"="mqqb9qjrk1lg7w85w8jbhizmh1qh4zqa";
 "ijqc-1.2"="ry2ydiqc71zjfkb46l4fvlxa1h6wnq1c";
 "ijqc.doc-1.2"="zz9ai19qd2rxvpw5kx1k1rd3ndndjv6v";
-"inlinebib-2019"="gkr44f3f9m92bx42gcvwgzclbjya5gdm";
-"inlinebib.doc-2019"="bpfx7h4w0zqr7xdxn51glllzf20qj24y";
+"inlinebib-22018"="gkr44f3f9m92bx42gcvwgzclbjya5gdm";
+"inlinebib.doc-22018"="bpfx7h4w0zqr7xdxn51glllzf20qj24y";
 "iopart-num-2.1"="92jbzj605pi9chj3ymfxm9ii2dh62haz";
 "iopart-num.doc-2.1"="smix69mc1n89q45nw3rl18lasn2c2kwa";
 "is-bst-2.03"="cyhqhj4jmhm2f1wv24dvv2nvh3xag114";
@@ -501,8 +527,8 @@
 "multibibliography-1.03"="3svp5l6al4k7adk99d6fcy7m54qbfbqy";
 "multibibliography.doc-1.03"="1bl112qsviy7jzhm1qdvn42x0lvcnjkd";
 "multibibliography.source-1.03"="65bvyr4gr7sdwhsraq9rmbv16d4fi6qc";
-"munich-2019"="0a6hgpvjyd8hzvmrf5bjc6rniwj39bx8";
-"munich.doc-2019"="22c6rhm479c1gg7df9mzza2vl7jgb3ij";
+"munich-15878"="0a6hgpvjyd8hzvmrf5bjc6rniwj39bx8";
+"munich.doc-15878"="22c6rhm479c1gg7df9mzza2vl7jgb3ij";
 "nar-3.19"="iaann8dbnvignc32m1wnlz4j77i7ngx8";
 "nmbib-1.04"="mbz1wjyaxsx3cn4wymvz4w9wf10580da";
 "nmbib.doc-1.04"="s6bbxc8lyp7kbrpsi0i4jrvda00260ks";
@@ -510,25 +536,25 @@
 "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";
-"plainyr-2019"="nxim123jmj05q71s0mhf06djsn36damc";
+"notex-bst-42361"="x4042ry48i6p1qr2l4yv0d52x4wmjarg";
+"oscola-1.7"="fi1rcwnsdb74grgsvv0553plqz0nk8bn";
+"oscola.doc-1.7"="yy7as7z897x520hbs5a3cha3nsg7wm8d";
+"perception-48861"="xpljy8xycf22akdj5dzzzmcb34zx8d1z";
+"perception.doc-48861"="sn4m1gc1s04h1crw3gbaahbxa6b76npy";
+"plainyr-52783"="nxim123jmj05q71s0mhf06djsn36damc";
 "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";
+"sort-by-letters-27128"="4m8cm6rnhgsc40liy2yhfc4r76zpdnsq";
+"sort-by-letters.doc-27128"="3z4kw7hvnjmp7hlfjw2gchraw69zyx09";
 "splitbib-1.17"="az1n021wdajs8dc0q93wgfb1r0jcr2h2";
 "splitbib.doc-1.17"="qsb89h2ch89qhbxir7f90xx5sqvgm1px";
 "splitbib.source-1.17"="c9m7hp7fh86qj53qwaqxh8xj8yf3gxdy";
-"turabian-formatting-2019"="dcm9mzg25w818sqjfhd7ih3azvydv0qy";
-"turabian-formatting.doc-2019"="2qhbgk9x91k0r4ar0hc3jydw1raaf3z0";
+"turabian-formatting-58561"="57qvb9ss73rxayiqln4vmyps0nkfd6rd";
+"turabian-formatting.doc-58561"="fy2w6ighw6x0yqfp0y2z6by52s19c1fl";
 "uni-wtal-ger-0.2"="i4nr7hq5gym5rcs2pc43qclci7jy9y4m";
 "uni-wtal-ger.doc-0.2"="a4r7w5m71h1kfgzxgpmb84hndnhrxhhy";
 "uni-wtal-lin-0.2"="8cdd4qcy3i5bvf25nn89kdaqph3a6fan";
@@ -539,10 +565,10 @@
 "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";
+"vak-23431"="7ar45am5q9mhv8liz1zvix9wgcwqgjhl";
+"vak.doc-23431"="sr1gi7csll74iw13j24r1hdwn3gql9ak";
+"windycity-57577"="rxqr98lq37q331n4mmh1nshyyf1n4cmj";
+"windycity.doc-57577"="dj7sxgxj29xnh2bbi58xzrhbj74jxqra";
 "xcite-16383.99998"="wvb8mc5cp8s32hvi76gby25nk3n887jd";
 "xcite.doc-16383.99998"="h07vrlm1107k8a8mjv4f8p0s69k5d08p";
 "xcite.source-16383.99998"="kllh0w903i2jybhciiy925rs186klrh2";
@@ -550,17 +576,17 @@
 "zootaxa-bst.doc-1.0"="bx9v8rj2nlbdapknqk8wigrq9jdfjggn";
 "a2ping-2.84p"="6lndjb87fbdxxvs14s9plg6p0avxnsf7";
 "a2ping.doc-2.84p"="i79dh9x0k85xl1cn33j110g62mh4a297";
-"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";
+"adhocfilelist-29349"="l8ayz7mqaa5lma2bvqb2brc879y0viij";
+"adhocfilelist.doc-29349"="gm20nhwq88s1cmch3pcgkqnyahb5gnri";
+"adhocfilelist.source-29349"="3qx23im0z07cnk2bd5vrskl153zxy6ff";
+"arara-6.1.0"="ifkdj4nzvpi0ghsd5q9i6p9rgnb43m6a";
+"arara.doc-6.1.0"="f8swvswxiygc4jb6is2diddhc4s954lx";
+"arara.source-6.1.0"="l9jm2g72kn1bfw08v9j0l2cd9wnxv41j";
+"asymptote-2.70"="1rsa2yqg8j68icg1w324iy928ylrkwcb";
+"asymptote.doc-2.70"="sqj9ihis956yayha0sj2l6mmnq01j4d8";
 "bibtex8-3.71"="sri58vnydvfpv947gmlxd1s3c2056fp1";
 "bibtex8.doc-3.71"="d5gk5h3a5milfx9lb1bcyzc6y5pz3d2c";
-"bibtexu.doc-2019"="djmr91p0ig74imwgym82lpm81jp3csgb";
+"bibtexu.doc-52851"="djmr91p0ig74imwgym82lpm81jp3csgb";
 "bundledoc-3.4"="3r6cx7n6wy995jd9hpg2n4qkbhwmnyfi";
 "bundledoc.doc-3.4"="cd59kzd2v9pq2d058jx5pxkcjhbvbrr1";
 "checklistings-1.0"="a2gvh85pcmrc82wq4h6n9ycqj86z9f8d";
@@ -584,258 +610,268 @@
 "ctanify.doc-1.9.1"="dfah3y6kn3r18mjj39p13mq7y6zpalqb";
 "ctanupload-1.2c"="jmvh3rrdy0hyvdxz55gydlgsh7xzp4vv";
 "ctanupload.doc-1.2c"="38wlhcxvvpbk01sj6vhwjs9mccw1xs14";
-"ctie.doc-1.1"="zz696bci66pc2p1pkwa0ddrh7fn7q6gp";
-"cweb-3.64c"="7c0j5c5lz6yw8l1qwijkbwmp8qyhg0i6";
-"cweb.doc-3.64c"="6cqyvsghj3jl5gl3fzvs1npblvr8x0ha";
-"de-macro-1.3"="mscrdz5y4zdxszz37dnh6kw4hmwm185q";
-"de-macro.doc-1.3"="hdmn9ds4kiqsalhx5r2l4adv19ijf5f2";
-"detex.doc-2019"="31rk8b2n2f655y674w1ghp1gp0ba9r3g";
+"ctie.doc-1.1"="08fyf9gb04jsy5gcwilpg84jgzd71ins";
+"cweb-57972"="cqx0j3ki42fxywk4ikpfp9f290m1hnhz";
+"cweb.doc-57972"="hfn37yhf16yhvvh44m4b379xjs180cv5";
+"de-macro-1.4"="v1qasn8wjqi7mr9q0p0kqv2w7bhxf4md";
+"de-macro.doc-1.4"="r5smyw0q3djlrxd8vf48cj1dzzy9cwxf";
+"detex.doc-57972"="1iimjgirxh9rid26wrk81iqh7g3jjk5f";
 "dtl.doc-0.6.1"="8jshhykhf7smf4s9ngv2jlhbih126xwz";
 "dtxgen-1.08"="n3cwjwkf92c5zgbs7hmc9fgrwjvwky9i";
 "dtxgen.doc-1.08"="87sb4lz077jgnzpya1y1qyzakwd5j00x";
 "dvi2tty.doc-6.0.0"="zrffg69y6ix300909k1zpjp2s9kl2d15";
-"dviasm-2019"="h75pj818zxcgsi92grzfzrd63wz0rg8y";
-"dviasm.doc-2019"="1f7bcls1cz8z6k22b8l3hh6v0dfn3b6v";
-"dvicopy.doc-1.5"="szvfihzbpfvz66w6v96nygkf7pnfa38v";
-"dvidvi.doc-2019"="hz3ynxfbxw3w8ravgb3hhw3yglb0gxzh";
+"dviasm-56373"="nn7cb25lgakifq0465af8rxcl6372l03";
+"dviasm.doc-56373"="k3dyqivnf16bmbdpqlcc9i4pwnark6h8";
+"dvicopy.doc-1.5"="5z7bgqawqldca4j3c12dc26784cj5ii3";
+"dvidvi.doc-52851"="hz3ynxfbxw3w8ravgb3hhw3yglb0gxzh";
 "dviinfox-1.04"="zjbfw4kzwfqnvlwzvjibsgim855fc30c";
 "dviinfox.doc-1.04"="1n52la52nchv27j82lisrh8q7wygx6lp";
-"dviljk.doc-2019"="sj8yggxdk8a4y3k1ssr1szzb1m91050q";
-"dviout-util.doc-2019"="g20rq0qgf4va4icrg830k9r9h2by1cj9";
-"dvipng.doc-1.15"="8pjhad23qghwyvp5l8qcd6d07dx9zjj4";
-"dvipos.doc-2019"="6m8fym7ky0a7xy6pmn0aklh5jg0ppbzx";
-"dvisvgm.doc-2.8.1"="a97bmkml7sl4pvz4ma2ajbq5kfpbnb4i";
+"dviljk.doc-52851"="sj8yggxdk8a4y3k1ssr1szzb1m91050q";
+"dviout-util.doc-52851"="g20rq0qgf4va4icrg830k9r9h2by1cj9";
+"dvipng.doc-1.17"="6qck54jh65gml230b2rb87lcq6y0gvgh";
+"dvipos.doc-52851"="6m8fym7ky0a7xy6pmn0aklh5jg0ppbzx";
+"dvisvgm.doc-2.11"="5sy769alfv97nz32ayn3jnbbv214g6jz";
 "findhyph-3.4"="4kc8qj2hs4hf7h25xb031fy5m9j8jygv";
 "findhyph.doc-3.4"="ivpfnjybcl80xzda2jlrplaglqhf9adc";
 "fragmaster-1.6"="r6wbba0qjxr5shfrf5ia8984dcrijpir";
 "fragmaster.doc-1.6"="vwmmc7jmhxfvblz3fpdj0saxjs75bgia";
+"git-latexdiff-1.6.0"="q4b590rk01xis5g2nk8skfp9ifigrgsh";
+"git-latexdiff.doc-1.6.0"="c62p00iqp80a9k24syw6dfynbm33an3g";
+"gsftopk-1.19.2"="s7f70s4jyd5rnif4gwrli43k0pmfhhw9";
+"gsftopk.doc-1.19.2"="k2s28hx5mq78ikd8383v0s8gvcbav9f5";
 "hook-pre-commit-pkg.doc-1.1.2"="0rf4zqwdix7npi9g6nlcpp95mdpxana5";
 "installfont-1.7"="ds2zbs2f6kasda98jn1k8i0ym5168ax8";
 "installfont.doc-1.7"="jmwwjkliwr7wl1gyx8fzpyslscsnlqlx";
 "ketcindy-20191225.0"="c4wr13x0p4gzbzdnjbq9l4jlalxayzn6";
 "ketcindy.doc-20191225.0"="q4sbjwwvkc9cdvwgsn1m5m6wil99z1md";
-"lacheck.doc-2019"="bnhws6g9ddrf6pf76i8p4r3razpiylp1";
+"lacheck.doc-54070"="6phk49bmf9n4s8m38dp0ryjd22bgdcjb";
 "latex-git-log-1.0.0"="qj0jib59wmz1l6gpk7q0zb5b29fpqk51";
-"latex-git-log.doc-1.0.0"="76p2fx8gzajsjbrv24dzy7znwv3ybahp";
+"latex-git-log.doc-1.0.0"="d4qhflvp1isk5z5yrknbjcps4ixabhcs";
 "latex-papersize-1.63"="qiqs3ayqsaivrqcm5mi68jrnbr0f9j8i";
 "latex-papersize.doc-1.63"="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";
+"latex2nemeth-1.0.2"="98hr8kv95134psvibf43j4jgshixra16";
+"latex2nemeth.doc-1.0.2"="jzy9jr0bwxg90lm7w5cwi0p040wxn236";
+"latexdiff-1.3.1.1"="maq80g01dlrs186ag253issysy9jd24f";
+"latexdiff.doc-1.3.1.1"="0fks08hh9z03bcyax837dn7rlf3xliq6";
 "latexfileversion-0.3"="79yrcgv4lj33pavgn48ycvsd9a1x49s3";
 "latexfileversion.doc-0.3"="c6n7z8c3lzrhk2g1fn4v05l2y6299sr8";
-"latexindent-3.7.1"="q4ir39azl49h758n2nrnfnpwv4jyj41g";
-"latexindent.doc-3.7.1"="vzf97xlc626l1r171k8753m5xv5493cw";
-"latexmk-4.67"="afwh2sz4hxms5x88hii02n3xg2r6sz9x";
-"latexmk.doc-4.67"="iirnda6pw7hnz1zshb50f5lfkb78r0rg";
-"latexmk.source-4.67"="m32pbzkr0my5gv38jw54bancbk66r15c";
+"latexindent-3.9.2"="zdcq8lnfjfjyd7dppb7pwa9dv2p69sjy";
+"latexindent.doc-3.9.2"="n8bhh59h4a1v3kzb5kmdk8fingaw7rn6";
+"latexmk-4.70b"="21lwd164g7z57rz6w2kjfgzm2km1hwff";
+"latexmk.doc-4.70b"="39gnyyhwbmpwnz82215icd78jms1na3q";
+"latexmk.source-4.70b"="a6zcqynkxjfrlldpg1js76ffbh2i6m3p";
 "latexpand-1.6"="did3i2gjfqllqckvnb09n9n8iy16yrmh";
 "latexpand.doc-1.6"="4mrnh6mqwv6f3is1cz5f6pp710amqnx7";
+"light-latex-make-0.2.0"="pazkrw4bvc1d8mvxx381rnwwqr4sgasm";
+"light-latex-make.doc-0.2.0"="wdkfy0imk1af0w1mml3d97liabbjv300";
 "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";
-"luajittex.doc-2019"="9qdg6g1m69rfylrs7h0x017kry5qx9y8";
-"make4ht-0.3d"="3l79g21iwl5abdqzd2vah2n5yzz1ywpm";
-"make4ht.doc-0.3d"="7gqgh0na3ilglahk2l5cmn4vybr2swl6";
+"ltximg-2.0"="a1kyxnvrdp9kbgq7s2r8b8k0pkjmdqkm";
+"ltximg.doc-2.0"="ilmv3b66w7671wa7s3h12c7cm2arbak7";
+"luajittex.doc-57972"="kg7z5qmgwdnmgl46ck3s62qxcfyb4lyx";
+"make4ht-0.3g"="bl3dgdww9iq93wphnbn37ixc7mhyil2h";
+"make4ht.doc-0.3g"="i1wd9hlbwg5lg6v28pcyhj6brxfw13g8";
 "match_parens-1.43"="hahwx0ca506ykknc9plsnrfg6fsb5rs4";
 "match_parens.doc-1.43"="1h445p7nl5n70rskvq4d10b15kb8058k";
-"mflua-2019"="zicmiqdsbqz7ddgmbwjcay8q5q4jyzqj";
-"metafont-2.7182818"="51bwj1md9dckcakmb2icmb3f5pyxx3rq";
-"metafont.doc-2.7182818"="xsxkdw4d44gm0x20g7dfpvh64yr438cx";
+"mflua-54074"="zicmiqdsbqz7ddgmbwjcay8q5q4jyzqj";
+"metafont-2.71828182"="51bwj1md9dckcakmb2icmb3f5pyxx3rq";
+"metafont.doc-2.71828182"="809kdckalk6kixkh3hqcsjyfjfam9b6h";
 "mkjobtexmf-0.8"="raq7ql17c3fdqqpaqbd53r0dg7kjrvh2";
 "mkjobtexmf.doc-0.8"="3cgxbgxpha9139jfz4v3478ny7yv3xm1";
 "mkjobtexmf.source-0.8"="dky5rv3xrbjqj7pg8spdjsllggpq61k9";
-"patgen.doc-2.3"="1p6bnifmajisixh6m0mar8lmzr3rd7s6";
+"patgen.doc-2.4"="cl45bg0yq5m0xqwwpq0h209kj6rv90is";
 "pdfbook2-1.4"="5d9ygxiff1hlzjb4lp55f6611x0939lq";
 "pdfbook2.doc-1.4"="ic3xl30b2qprsxyx892bd10smcz7nq7y";
-"pdfcrop-1.37"="mr2zg2ji7gqm14zq5xsf8wk081fbdwdn";
-"pdfcrop.doc-1.37"="28jgvjwk6v7dvldqgqd4ry32ccd8avgn";
+"pdfcrop-1.40"="ac5w5qdg0hfb5a75ziq9qi2rbzzm5z62";
+"pdfcrop.doc-1.40"="wxah72mp14rhziw8wmw1d1s41c6mjd19";
 "pdfjam-3.03"="8vh7hia6anrhmp5w2aibq12yd0p3y6fp";
 "pdfjam.doc-3.03"="5q7wazmr6rz1mnjln28ryakv7x0q40nb";
 "pdflatexpicscale-0.32"="sc7xcy0agdg458w49n72q6sd8sk8zqn4";
 "pdflatexpicscale.doc-0.32"="ria6cfi0nvviddn0gmylwcjw53v6ryqy";
 "pdftex-quiet-1.1.0"="3cx8zd0q9z19d1xhhc8rd640ifwsrjxc";
 "pdftex-quiet.doc-1.1.0"="84mb3zp9h3jnl179kc6svsd52pmx13pd";
-"pdftosrc.doc-2019"="36xyfv7hir7g1w680042p7cgdw1hg9jj";
-"pdfxup-1.51"="xjnx4dmxnaq1x174slm9ara0xpx75yqf";
-"pdfxup.doc-1.51"="zk3vwjjvvxazyfa9868hj3xamvqdahvh";
+"pdftosrc.doc-57972"="wbpmp9d306ckj3azix169xjm9isf8gkh";
+"pdfxup-2.00"="mza819bgnq201y9pqkjb06ky44kjc6kw";
+"pdfxup.doc-2.00"="xjwqzajjp6hayyxldqnb6n1gczx1rqlw";
 "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";
+"pkfix-helper-1.6"="vjir8pv43abgpf5djbfpf0vbwinrf3gb";
+"pkfix-helper.doc-1.6"="gkgpxfz7iypg1xiswn4p843pa2v8dkzl";
 "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"="wcnxmbn8wqi39abb356wmhgwrpmxvidm";
+"seetexk.doc-57972"="r0yp9ffrpjja0w2w1qlzs77wh965rgj7";
+"spix-1.1.0"="73qaq9y7hi67hsndah7qnxn5970s4jzg";
+"spix.doc-1.1.0"="08xbscwq5prsc085zfkj3fnpfaf3idwl";
 "srcredact-1.0"="dzxdwnn9l06gngyvaarf10h6ws8aa73y";
 "srcredact.doc-1.0"="m028dd5fqv2x9xcxq7vhdsaz2xcyxwl1";
 "sty2dtx-2.3"="irvwyxk3ggfbc8p4b8s70v5704lqmsib";
 "sty2dtx.doc-2.3"="s9qzsp01129wgi8qfh0ljxkaj9jvdr65";
-"synctex.doc-2019"="wk9fbvv3gdqzyh12gxa05zbd88l5zh65";
-"tex4ebook-0.3a"="cycqa4cwssq4nxy4k6nplfq4y2p38r0a";
-"tex4ebook.doc-0.3a"="ksyz5aca4fb6jikxy49kpcjq8ralwqrk";
+"synctex.doc-54074"="wk9fbvv3gdqzyh12gxa05zbd88l5zh65";
+"tex4ebook-0.3c"="s2d0w5089zd6xai6qhj8cksijbrgk2bl";
+"tex4ebook.doc-0.3c"="z54xmjb89jfz1j06gmzrli0f13kr4095";
 "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";
+"texdef-1.9"="jc5hxmivzlsr1cklddvxmv3zxcyq5j6v";
+"texdef.doc-1.9"="gp2xj30b1whqvg24jjyvba456w48dq0i";
+"texdef.source-1.9"="028z9c2lxpkwx2dvdgxhp16qxrj0vjir";
 "texdiff-0.4"="83vghxcac89m0kji1rr4ry3fy55im9sa";
 "texdiff.doc-0.4"="r9wsmivjyiwdnav7qc35kydk9b8pbcz8";
 "texdirflatten-1.3"="135358h2mb608wg3ni93rrsvvqgxm4ya";
 "texdirflatten.doc-1.3"="n9jxdwjiylvwy6n55vgci9a32qi10xhl";
-"texdoc-3.2.1"="kwb7sxrxq7fn56flnsfama9y1ndd4g60";
-"texdoc.doc-3.2.1"="rw85cxx84pqccx87rpxcy9mj9am41agf";
-"texdoctk-0.6.0"="48ix4zaj1k1v3i997rvl1kg0mc8a9g5s";
+"texdoc-3.3"="zybis3ds27vzr62qsvkmph787jb12msz";
+"texdoc.doc-3.3"="ri2jcsh0ja8wmjs9y9692m0zc0z8gxvi";
+"texdoctk-0.6.0"="p6c2lakbnbg1wdc7i4iavscn9k0xamw5";
 "texdoctk.doc-0.6.0"="xfl4g9m6d9nbn4f9hgxj58jg9g4laa7l";
-"texfot-1.38"="3qdqa7pywvk3f5rgdhn9806bfcfgr9dk";
-"texfot.doc-1.38"="06n4pipdm912xri2cpbv8vdlqja8fzk1";
-"texlive-scripts-extra-2019"="prm2z9007xv13q0ny18rcq11f73c8vxi";
-"texlive-scripts-extra.doc-2019"="3qjmdf6iw8b5jfn7rls97pf1mpbjz1kg";
-"texliveonfly-2019"="8csnp69s8i4bs18r18qqr2cmkqhgx437";
-"texliveonfly.doc-2019"="ic6vdfmbvl34zjqrn0lvp59armsin54n";
-"texloganalyser-0.9"="8dlsnkjvsic0xyaxjwixrgm4pf40snpz";
-"texloganalyser.doc-0.9"="yh3y429s0fbkjai3kmh3z1q4f1pja6g3";
+"texfot-1.40"="h5l0m8p439v0j8c4dpx9wql4my29bri8";
+"texfot.doc-1.40"="svihfvh53hc42dr5b613h52fvkpkixj2";
+"texlive-scripts-extra-54744"="prm2z9007xv13q0ny18rcq11f73c8vxi";
+"texlive-scripts-extra.doc-54744"="smy9j2bvwmz9dm9s9v8fsvlcc27279nm";
+"texliveonfly-55777"="8csnp69s8i4bs18r18qqr2cmkqhgx437";
+"texliveonfly.doc-55777"="ic6vdfmbvl34zjqrn0lvp59armsin54n";
+"texloganalyser-0.11"="xsbl0y7fkjhbpavx9g10bl3zhkk4zqcv";
+"texloganalyser.doc-0.11"="i6mk318pdkma4xmfa3rsl1xiyqhx8f9i";
 "texosquery-1.7"="bls961qcx9s6fwhhjqsx20wczk10qhbz";
 "texosquery.doc-1.7"="8dr8ayinwjayi9vynaw0m6q9rrk31nas";
 "texosquery.source-1.7"="bpv9sr00x6vv90zclfjsl838kd6zcb76";
-"texplate-1.0.2"="971i0gazlyzkhxmic7zxzcjsdf8qypds";
-"texplate.doc-1.0.2"="g40znzhxn766zchxk2mhy1xy7hrsbfh4";
-"texplate.source-1.0.2"="crzcqnd6sn914bzkqkjp4d4dgic4lg0d";
-"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"="s255ics89hxsf04fkcz1ahfz130q9y3x";
+"texplate-1.0.3"="qwc9286zs7yhw0y19zici7ij8nvsjijm";
+"texplate.doc-1.0.3"="9d0a9zxzjd5dhjy5i215b7fypqmbzv5l";
+"texplate.source-1.0.3"="aaslsxscr12j99xsjaq09rqhxq6jr8a0";
+"texware.doc-57972"="f95gr03s8p65mc103gid4synigindg76";
+"tie.doc-2.4"="68d4mmysa0k8zfw4x8nxiyq30ajkx0mx";
+"tlcockpit-1.2"="0c2p37yr8qncfamfn96wd57bvm87nhs9";
+"tlcockpit.doc-1.2"="nxadh1w5c1g1n2vhrvqfgsx701znkc6x";
+"tlcockpit.source-1.2"="aqjlazcsv4yiz4zfrxb5zdw573wmhaba";
+"tpic2pdftex.doc-52851"="s255ics89hxsf04fkcz1ahfz130q9y3x";
 "typeoutfileinfo-0.31"="vjs333wmdxb9s1vd215af0vryplvb8hl";
 "typeoutfileinfo.doc-0.31"="qdrwm9hi7qk7hxzcz0grv7cfl4r9k4v6";
-"web.doc-4.5"="sdmcsfyc18z4ldyiajpv5fqhfbb1gzgq";
-"xindex-0.20"="3q02wc79c03aig5dic70s09c9hjvj3va";
-"xindex.doc-0.20"="b1czyhbjxmfz1lshjgqdmjs73f4nvv0m";
-"xindy-2.5.1"="rp60v85lrsbllzkwvhhz5sprxalf6kxp";
-"xindy.doc-2.5.1"="akx5bx8m387zsaxd7v6xh97nglbzd9k6";
+"web.doc-4.5"="c8yi707dacmc6a751s87254wb6avj9as";
+"xindex-0.28"="5wmxpzvpz1dyn8im2fz4asybkbc13dzz";
+"xindex.doc-0.28"="l71h3aa6c8jgy4ar35lf7ciq8q59nc85";
+"xindy-2.5.1"="h2fphqpbm4cqqamzwdgplj1j5g531r4v";
+"xindy.doc-2.5.1"="c0vyg2jz54hi23m1ys081mmmymgh3ah4";
 "xpdfopen.doc-0.86"="p7h2jmrh1c2n964pv2gfqqi36paf7c1d";
-"context-2019"="1a004zz4xs83m9jgy16k6q552lpn9dr6";
-"context.doc-2019"="zc8knfsrllnfggxxsgyijjzx59vjdscm";
+"context-58167"="if7cs06gavsmqrfpmq73bdp23icfa5ck";
+"context.doc-58167"="lvcq4fkcxqrwk59c6hd6a3qck6slq9s6";
 "lm-math-1.959"="j995x0y357lac8mn1kzn9v8p3v995bz7";
 "lm-math.doc-1.959"="bgfq2c4l1shm9453822cnmq7yq6hlknq";
-"manfnt-font-2019"="isk7hkf6lfg41mjli9sgn77kvn6fkl96";
-"metapost-2019"="6hm4z5b1yw7qdhnk5zvr0li679rvfvi0";
-"metapost.doc-2019"="3x54j33i3p3m3pf84805w011yr6v896j";
+"manfnt-font-45777"="isk7hkf6lfg41mjli9sgn77kvn6fkl96";
+"metapost-57972"="6hm4z5b1yw7qdhnk5zvr0li679rvfvi0";
+"metapost.doc-57972"="2xml7biqp6arvl4liyj6rbhyq5gc358a";
 "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";
-"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";
+"stmaryrd-22027"="shivgpyz8sa63sqkmpgqvw1v1iyc0g35";
+"stmaryrd.doc-22027"="r91xmqmmm6i6jka78qyaiilas94xc5hi";
+"stmaryrd.source-22027"="ch2gj89jxrqysjsl24s40za3y5z03yan";
+"xetex-57972"="5mai30qjzqsc5hdmzavbsgchlarv6gfh";
+"xetex.doc-57972"="z3vkncv076qiz497zk05gjh3q52143n4";
+"xetexconfig-45845"="2wjm3wl2975pd1d3ql2qd3yhhdh3gvmp";
+"context-account-47085"="85lpl8g1by9mvqnmxy6v9iasvgmjnazr";
+"context-account.doc-47085"="lms208c3s9clga2ymi1j2i5whyz2dffy";
+"context-algorithmic-47085"="zvjfp5dzy3saz67hcfl2n1haxjdkavml";
+"context-algorithmic.doc-47085"="gsckrj1g30x8lq52cil2z9bq7zf5vaba";
+"context-animation-47085"="lg4cn50cshxd9qg2i7hd54lcgsy8zwyz";
+"context-animation.doc-47085"="lazsfqd8djbbkn4byqrgl93nnvygm8xd";
+"context-annotation-47085"="vgnpr8wv2l93qcwifsyslyanyd9hp1vz";
+"context-annotation.doc-47085"="05lrbacq308akhvdbdpwlwg9b0dhsghp";
+"context-bnf-47085"="pzpk8q0zc179zbpj2l9w5fw3r8gmhq82";
+"context-bnf.doc-47085"="jyvr2yk2shkzj122v53khmxx4skbasn0";
+"context-chromato-47085"="721l06z298fqfaj6rcz9sh66jshq447s";
+"context-chromato.doc-47085"="lwbqab6vnyipsjq0xlfgl15iag6h27nj";
+"context-cmscbf-47085"="nwk7dqb2kxbj9y6ijlpa3ack1an9d5f8";
+"context-cmscbf.doc-47085"="s09578i62xh352zmd1rssg0rd1qjpc7q";
+"context-cmttbf-47085"="dgrblidva7k2q8yvmkdb0kg2n4bzln1k";
+"context-cmttbf.doc-47085"="fp7blzzh8p24bpab0vnlyc336kildj4b";
+"context-construction-plan-47085"="b42ncfcmywfwwnvzy2z58pig0spz39g2";
+"context-construction-plan.doc-47085"="x76mm90ba9lwvjb3dkhmbv6ajc93444z";
+"context-cyrillicnumbers-47085"="iwzzhbrrkf377k54rfbna7zfbhdal6g6";
+"context-cyrillicnumbers.doc-47085"="4q6ba2gxc5apykkirfjhyn29n387ifq1";
+"context-degrade-47085"="d7fvjlrj0gya4ycpy01b3xw96cqpgmw7";
+"context-degrade.doc-47085"="nkal1h165g0mnf0h677b22c7r5q89sbp";
+"context-fancybreak-47085"="dkqfx16sjcxdl8a50al6x87rhwbrz61z";
+"context-fancybreak.doc-47085"="vqgypbxyr7ay3qasrnfsxsvnzg1rddfc";
+"context-filter-55718"="2zc3825f0qs66xbmafhl2p826cx3l7h0";
+"context-filter.doc-55718"="bdw1fapc6dy9wm79c2r456nlvyxr30kx";
+"context-french-54215"="f44vj4in9b4kry17a7cw7ad11ygmnvkr";
+"context-french.doc-54215"="pnndx81zpi4625r2bpk3nyz7x1md9l6v";
+"context-fullpage-47085"="cjfrxynfxahlz5pc60jq27fprlg9jwac";
+"context-fullpage.doc-47085"="4xh4v0zq3wqdaf25jnjpkl73d72h5100";
+"context-gantt-47085"="v50p405xz9ddwlqb0q1hi9m8wbx0c01g";
+"context-gantt.doc-47085"="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"="pj34rsrf7mpqp86w4ngfnrm02z6as5db";
-"context-letter.doc-2019"="04r700y20myaazp6pm52438lcdgxhir0";
-"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";
+"context-gnuplot-47085"="21gc0nq12aps3d3333yxll6xllnlw0x2";
+"context-gnuplot.doc-47085"="53y32f428jh6lii2zcl4csh8yzfs2ij5";
+"context-handlecsv-51306"="zpdagxljjxskjqd1fpzkba1dn0vxilnm";
+"context-handlecsv.doc-51306"="bc0dzhw5dwjidgscqgwlnfs2xdnapdyz";
+"context-inifile-47085"="fmf14m6wz9ya4lxy3w6mxjzqk491jdd4";
+"context-inifile.doc-47085"="acx93f08cc2z4x4jwwchd8njnkil3bfq";
+"context-layout-47085"="438mv86y37wbxdv9js2s3clnkl7866ff";
+"context-layout.doc-47085"="adh7d3hmcjqqgh69nr8agxznzwijkggk";
+"context-letter-56073"="9yb59mbbs9sby1wbg3c1wxysd17hqymf";
+"context-letter.doc-56073"="s8i0hpk9qfkabfgrvziapw843v9l55pp";
+"context-lettrine-47085"="wmfy4c9c13jj525hmrf742kzkiqqmwgk";
+"context-lettrine.doc-47085"="xf4mr1w0z7ybcas306959nmgxih59082";
+"context-mathsets-47085"="5gxx8rbkp1znjh8ycd0k8nflhjcm25kw";
+"context-mathsets.doc-47085"="jjc6lkfrw2a84n4cwvpdnn92wv59pvis";
+"context-notes-zh-cn.doc-23171"="x85l6d8ydz6nw51z8ak3a7cvpc6c45lz";
+"context-rst-47085"="5mwhydc35iywmkdz759sdpz53wkqa64x";
+"context-rst.doc-47085"="c8khxkv5vs9wzfb6l7116iglnwng98gd";
+"context-ruby-47085"="jrwrrwhcvb4bbia0g2lnl6rr0yydh6ix";
+"context-ruby.doc-47085"="s8s9kmgim38l2x08a6cq2n9jjz9hbw6p";
+"context-simplefonts-47085"="5h1qrkcjlkdbd5rc888xrp2nfksyf7x5";
+"context-simplefonts.doc-47085"="xfdzrvfp6kr1abbnsja6grxnvcnbj2wl";
+"context-simpleslides-47085"="idd4q63cvh7qqiv5wzkq3xgrxwhm9z87";
+"context-simpleslides.doc-47085"="smx89kphvq9qjl4mzd2nd2j3nasv6vfj";
+"context-title-47085"="ywgzzyzyvd02qwffkzxpymwhpb548g3k";
+"context-title.doc-47085"="d3m29w07jmdkxhb3g8254ry27j3y5qri";
+"context-transliterator-47085"="q0klk1fqlky9drg0ak4xlcn3xpsi4kyr";
+"context-transliterator.doc-47085"="xik3slvbsnrmjcjd9ypmwxhbslyank86";
+"context-typearea-47085"="ck1fbjmlyq93id8a15nrn81cd10jlcib";
+"context-typearea.doc-47085"="yvf0njazm748j5d40dsyk9l3p4is0g8x";
+"context-typescripts-47085"="q33whgk69qflc06i9q8jpb5lnwvdbhr5";
+"context-typescripts.doc-47085"="gxsm980lz4ddjnnj61yj4yv2vdnck1x9";
+"context-vim-58082"="5b0bk35x5ng4f7p6flnmaa7vfkxn35fh";
+"context-vim.doc-58082"="wlhn239qfi2g45909wbck779a19jgi7d";
+"context-visualcounter-47085"="sh6jnhkfbi4rpw34zw489148rgwsb14r";
+"context-visualcounter.doc-47085"="hbainxhhkx26imhab5kl4k1f7ljhifqv";
+"context-visualcounter.source-47085"="7wbyascsdwh2m9hpwm3c7sd0q5940fd1";
+"jmn-45751"="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";
+"academicons-1.9.0"="lmsffq22z1m2lkq1xr3595z4zc11p2c5";
+"academicons.doc-1.9.0"="whzkxl5xfcd404afasyrk0jzml6giqmk";
+"accanthis-32089"="3ai0zz1fwlq9v25dsfz63if6i7wgrhp3";
+"accanthis.doc-32089"="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.041"="y8m0is3cmjrc0mnkpih70nf48mw4y2bd";
-"algolrevived.doc-1.041"="339ipcjms83912r3n1ix70106c1ndvwk";
+"aesupp-1"="39bvzid3ikay6dgdsy33nwcfjr73146k";
+"aesupp.doc-1"="4lryjai2f2jlk55hl42b6pgl45j7np3b";
+"aesupp.source-1"="r16cllryd2scwcjf6nw3i3bdxrmf8d5q";
+"alegreya-54512"="g97xv22dfmdfhyn4yqz67rj42mkp35qj";
+"alegreya.doc-54512"="ds3p6fvf6bdrzf9clxksrcl9r3lbbknx";
+"alfaslabone-0.0.1"="q13lgalx5mzdx6vjzl5cwjyx9jdrbfsj";
+"alfaslabone.doc-0.0.1"="j1j5y3vvfibs10jag9sbfb1714falvls";
+"algolrevived-1.052"="9bhf3s32fk8p0vfw81c05jcpcbjmmsrm";
+"algolrevived.doc-1.052"="vcfri2j0bl3bs2lvf3ykz9ydrva030kk";
 "allrunes-2.1.1"="yxijvmvgjl2q05v667fmqisbyd7xsjpr";
 "allrunes.doc-2.1.1"="b0sc4d9kla5sg792zvwqjzszz17w19iv";
 "allrunes.source-2.1.1"="n986ppx466mparm30mlv7cn5mmjh74sy";
-"almendra-2019"="bg7ciwcjc1dlqw9nxwlmqqvn9nkd228a";
-"almendra.doc-2019"="1c428ph2c2zjx1ks145ydd7vbaqgvsjq";
+"almendra-56035"="jwk6aqznr0b5qnc0g8f2wq9246080l7h";
+"almendra.doc-56035"="lp3pgbn9azv12hmr1q5fgdrsyam7k0qz";
 "almfixed-0.92"="kcaraz14gg5k8ws8zkrjfvvn22njv759";
 "almfixed.doc-0.92"="34f4a82gsr0vq47bp9wbdd4wkhhr984j";
 "anonymouspro-2.2"="kzf7kf4bc5cl8vw0k5m34hv7pj566w1n";
@@ -845,14 +881,18 @@
 "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";
+"archaic-38005"="jvj1s2dcgkwgi9ywg48vw7i14gmlmq7n";
+"archaic.doc-38005"="mb0z3xq325y48yv0bx4xsz8x5f790c60";
+"archaic.source-38005"="j05dan5d8xxzg43iay4v76vbcdscc6zn";
+"archivo-0.0.2"="6cklwzyrf0b5pwakna7qgfwl6f1rgz4v";
+"archivo.doc-0.0.2"="s7qhxip5n0iwgx8c10lg1c5blkvby4x8";
+"arev-15878"="xc3i2264d5w0ijv10n6ka53311bgnib0";
+"arev.doc-15878"="s39jgnizjbpnh1czr3ck5yd32bxks476";
+"arev.source-15878"="msk58av5fwg6hi4mzpz8abgzigqyskf2";
+"arimo-42880"="1z5ij30qfbd4y2c0292aai2dsg87n1rm";
+"arimo.doc-42880"="2fr1vjv5386lvixzs8idr0wyf9ghlg1f";
+"arvo-57213"="jz4jq6bin6pnwz643z576hdcvldvkbv6";
+"arvo.doc-57213"="macfnskh7cjjcxsr1mhh8d74kzw67wcz";
 "asapsym-1.0"="gbn04lk9k66wj689vna4kgxq8gddhwca";
 "asapsym.doc-1.0"="qfbaary485cs3q5azl6d650z53kd9s73";
 "asapsym.source-1.0"="g9m2vwmd438fwfczm8xwhv4wdp2aj114";
@@ -863,8 +903,10 @@
 "aspectratio.doc-2.0"="xv7z3aa40dn6fzchrhqwg03356r2znjf";
 "astro-2.20"="isnx9q009wchs33xq4bphi4cp4cnb2m9";
 "astro.doc-2.20"="xa1szbc33k2yyahgwy294mgiiyi5yiy4";
-"augie-2019"="w863x04n1ks9jkmaw8fm4hd6a1390s3x";
-"augie.doc-2019"="dlmy9i2fh0db4aghd8dqsv9227cqk4d9";
+"atkinson-57624"="np7g8vknrgcppbdwdd76gd7k8i3wad7v";
+"atkinson.doc-57624"="sk8fmy92pj5djsip6234cv1878ys5sgz";
+"augie-18948"="w863x04n1ks9jkmaw8fm4hd6a1390s3x";
+"augie.doc-18948"="dlmy9i2fh0db4aghd8dqsv9227cqk4d9";
 "auncial-new-2.0"="nnaar0yvi6r1fynyzxmqhw7mnify474d";
 "auncial-new.doc-2.0"="jvyica87kxg5gm3zb8kmka9ja87f28si";
 "auncial-new.source-2.0"="hfdl71c7lx3lpb9rkwfz5vpaq0s19bh6";
@@ -873,34 +915,34 @@
 "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";
+"barcodes-15878"="8j88bc82j5a0xhm46671mj0k439zm5da";
+"barcodes.doc-15878"="7729a4f9hn4qzx2cndyxv04wwpchpjax";
+"barcodes.source-15878"="yh5ci4axi82ps6hbm6f0a08alrnapxiv";
 "baskervald-1.016"="igfnj3pwvb6443c531va9kzylizxm9vs";
 "baskervald.doc-1.016"="mq8ms68crhv6afh9ld6scyx2xn2ik6jk";
 "baskervald.source-1.016"="7y8d5vqbd1bp3gri0rhzk3cb12cwchr1";
-"baskervaldx-1.073"="gc777hl6iqpxp64ynh81bcwx0bg2c2i2";
-"baskervaldx.doc-1.073"="cjcy5fzwj9b6ry8w5ym1s67hxibghxzg";
-"baskervillef-1.050"="z4a0v222vfjwsp7saanxscc8dhi1xg4x";
-"baskervillef.doc-1.050"="hmkjfv0rz8anmwb86ccn5yr7fkgfvvhp";
+"baskervaldx-1.076"="hv5ycdbvsgrajd2waycsl0ail4vj9kh2";
+"baskervaldx.doc-1.076"="km1ycjnk0sksv73rl38dfx0jlrvdin5n";
+"baskervillef-1.051"="5mb4w2c9i85hi0vdn3nkakrhbzin59ma";
+"baskervillef.doc-1.051"="7000j6d5p3ar92imfm53ss57xm63r17k";
 "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";
+"bbm-15878"="ayg703c4frfpv9mhahz36f9zs11y9vxc";
+"bbm.doc-15878"="bzfab62k5j167p5qzs79gps14hbpq7nq";
+"bbm-macros-17224"="lbvpxxa0rzhl0z0081s6wfdvmx3vlhv4";
+"bbm-macros.doc-17224"="ncijdxbxfk9xkrnvvsk937ji5nd60z1s";
+"bbm-macros.source-17224"="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";
+"bbold-type1-33143"="00rizb6fky3rsyn1id4p1dik8963bhwr";
+"bbold-type1.doc-33143"="lnpyln41q3qdsmzdkini0q1wqx7v2n7h";
+"belleek-18651"="8y1nbwn46cgyzfyd3and8aws7mqclsfa";
+"belleek.doc-18651"="8d258516ak2b5va5smkfc87ipyj329f9";
+"belleek.source-18651"="n6fypvkn7cq1c1l7jqvjb6cfjyqrq0wv";
+"bera-20031"="mq0j1sn7fg1qk7qd7x1l4ixqddyp3rjg";
+"bera.doc-20031"="6iv3gc8kfqcw909sa4x7msc7dsxndy8i";
 "berenisadf-1.004"="2ci0vxfqyc18anpy68r6anbdz76nrf2b";
 "berenisadf.doc-1.004"="00vx76lkvv0vf68a7sck05ls3l5va5gj";
 "beuron-1.3"="c04r71cvsva6yr9gvj1jrmix7q8n1i94";
@@ -908,36 +950,38 @@
 "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";
+"bitter-56026"="v844qmmw2336gglg1lvfzmzb799gjbq8";
+"bitter.doc-56026"="nl5n897n92mnwwswpb5p1p4jlpqf5740";
+"blacklettert1-15878"="hzd441k3wi58rrysk0h48yklnp5i776p";
+"blacklettert1.doc-15878"="8n61621w6273ik991i2asvsm4w8xlimx";
+"blacklettert1.source-15878"="ir0cn80nw9jgchx4kisv9j27gpgykhvc";
 "boisik-0.5"="xz0hk8fwnrwnydy9dglm93c4gzrqpz87";
 "boisik.doc-0.5"="wsssy9bh8wi35x67ifgnj9wrjx0vpmvy";
-"bookhands-2019"="6dgc2p6zs8hxjx4b3xa317ni1pglza7c";
-"bookhands.doc-2019"="l8mlzpwi0bh220ag4ip8qzxq6vxz9s5g";
-"bookhands.source-2019"="xx98dvqz312dbb4fm57fmh3yp3krq7wj";
+"bookhands-46480"="6dgc2p6zs8hxjx4b3xa317ni1pglza7c";
+"bookhands.doc-46480"="l8mlzpwi0bh220ag4ip8qzxq6vxz9s5g";
+"bookhands.source-46480"="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"="vh9wbjwwqbw8rckikpr08ngglq96va6r";
-"cabin.doc-2019"="x3gjf38wb2g121iiz5f753vsfpnsnxgg";
-"caladea-2019"="1rb8sq2yh4hizlcjp8zd68ayb7cx6275";
-"caladea.doc-2019"="9qr79slzxmnnvvh2iy310ypqj9g11s4b";
-"calligra-2019"="cisw7fvdys863szqvsxzm164vina8al3";
-"calligra.doc-2019"="36bzakyiw9awp36v7c6dyb3vwl01shb0";
+"braille-20655"="slk0qzcahb3qkmq91jcrm5gakcwa7czv";
+"braille.doc-20655"="00dv14s64fm8g5jy8b30dx813a304nlh";
+"brushscr-28363"="342p5p6h8v377mnbrv1f56kicbbjfcdx";
+"brushscr.doc-28363"="hikb5s9iv60pfq2kjdbfiq1216d3rabk";
+"cabin-55907"="w65bzixchj3mdz8z2l0dkmqa9kjzcy9p";
+"cabin.doc-55907"="p0gqqmr9g08mgc6xjzhzxh9wjdg8gbpx";
+"caladea-34991"="1rb8sq2yh4hizlcjp8zd68ayb7cx6275";
+"caladea.doc-34991"="9qr79slzxmnnvvh2iy310ypqj9g11s4b";
+"calligra-15878"="cisw7fvdys863szqvsxzm164vina8al3";
+"calligra.doc-15878"="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";
+"carlito-35002"="7v0571swhiw0pbsqcb1a4sj7izdincb0";
+"carlito.doc-35002"="bs67zjydc9fcigiaaf9y9lm05lkgw68a";
+"carolmin-ps-15878"="rx6y9nb8l3cslla44c422jzwjlqw7ilz";
+"carolmin-ps.doc-15878"="hq8477r3q2cg2laafi8ryvjan90wxjcg";
+"cascadia-code-0.0.1"="m0xyvyrmprl5nbqa4lvqlnwha5pkigs5";
+"cascadia-code.doc-0.0.1"="4p2m5vm8lr2983gvj9jssa09nn77hrb9";
 "ccicons-1.6"="g89dzfgas16vgx8ydp43ihina82z8df8";
 "ccicons.doc-1.6"="sphr2i8d6yf8xz5rkr0ib5ji6x6w428l";
 "ccicons.source-1.6"="1rkyqlpvm3v01cswmjmycayxh0kbgin6";
@@ -946,85 +990,93 @@
 "cfr-lm-1.5"="7y9qg3jnq6xnlq0f1wqm6493qax92cc3";
 "cfr-lm.doc-1.5"="cfshavfcmpkig5p9kypglmrs55rl5lsb";
 "cfr-lm.source-1.5"="nglav2q22aybb23snhm6x17dxz3976sc";
-"cherokee-2019"="hmmaav3k7vd1rh6rm26l2nal48r1wxz3";
-"cherokee.doc-2019"="zaq092r56asdcf62a7zscfp4zp7a5lwq";
+"charissil-5.0"="cca3i6y7d4kbcdxw8nhpsifzdamhc7gs";
+"charissil.doc-5.0"="1kb1gm8vrjxa45q7pm7cvwysf32h7yni";
+"cherokee-21046"="hmmaav3k7vd1rh6rm26l2nal48r1wxz3";
+"cherokee.doc-21046"="zaq092r56asdcf62a7zscfp4zp7a5lwq";
 "chivo-2.1"="0xrf456zk0yvgw2v6rss6rzlzpb0qkmk";
 "chivo.doc-2.1"="w9p59bx5wdz963lcdqvwc7v50pm1a8da";
 "chivo.source-2.1"="mqwg3ryb1lfam2ii20dn6m6j7pahqqxr";
-"cinzel-2019"="g6w1yxjm4bb49qdhgwrrmnj535za01kp";
-"cinzel.doc-2019"="4kj5zj40jq8dm7br7xb9vr2nwwqjl530";
-"clara-2019"="z7c5lggc4dy39dczhiql9sl48n6v5wjq";
-"clara.doc-2019"="r7x0a5q7l021a6i6skr34f1s5000ggz3";
-"clearsans-2019"="zp2572jdcnzq8b32pxzsmlyqxvsmj0mn";
-"clearsans.doc-2019"="6f9lri3fq95h9hgbady7fbgfk9msy7s5";
+"cinzel-54512"="g6w1yxjm4bb49qdhgwrrmnj535za01kp";
+"cinzel.doc-54512"="4kj5zj40jq8dm7br7xb9vr2nwwqjl530";
+"clara-54512"="z7c5lggc4dy39dczhiql9sl48n6v5wjq";
+"clara.doc-54512"="r7x0a5q7l021a6i6skr34f1s5000ggz3";
+"clearsans-54512"="zp2572jdcnzq8b32pxzsmlyqxvsmj0mn";
+"clearsans.doc-54512"="6f9lri3fq95h9hgbady7fbgfk9msy7s5";
 "cm-lgc-0.5"="wnmmrhnlldps15r2v360bdvlfyjd1fpn";
 "cm-lgc.doc-0.5"="wb18g3w86wfb7fv2iaaxm0j2amrws9yf";
-"cm-mf-extra-bold-2019"="87n4wnhy5wylwl1qw8i0nq4jj7jfr5fs";
+"cm-mf-extra-bold-54512"="87n4wnhy5wylwl1qw8i0nq4jj7jfr5fs";
 "cm-unicode-0.7.0"="wmmgwafdisxnkgdh571y2mlcybjlnvf6";
 "cm-unicode.doc-0.7.0"="6nykmggl860gvrzr1v9xahvl6gpy7phg";
+"cmathbb-1.0"="xsxjimwahlhbhzk9fq5zrh6v8axcmhhz";
+"cmathbb.doc-1.0"="a7fvfpvia4ybway7apcbc9hs6mkaydqf";
 "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";
+"cmexb-54074"="jxb62ixs1vqaqscv1ixg27vv1p7na0p1";
+"cmexb.doc-54074"="92888gd06jfx2q4xd01n45c1yyhnp03l";
+"cmll-17964"="bipbbgh6jc5r1imk467r5pvj4m62a85k";
+"cmll.doc-17964"="k2sshj6rp40m29fm29jd7jy492gcrwcf";
+"cmll.source-17964"="lbaw2209cz5ymklza36486jzfpq1cqc5";
+"cmpica-15878"="z5mc7yl40mzwk5bcjs3lb1ifqsr7x4s1";
+"cmpica.doc-15878"="9bl7bhpb9dhp58p9hxay8xka0nz2cg2l";
+"cmsrb-4.0"="sbnwa4gqj1y9pah89qlnivsnn5g4b2ih";
+"cmsrb.doc-4.0"="mn4vnkf8sczwx73219r664vkrz0iwyb0";
 "cmtiup-2.1"="k6sk5isdzms460hm17lkx5b6p6p9wz1g";
 "cmtiup.doc-2.1"="ycj4il7cxfnigs8sxxwga045g9v8rv8h";
-"cmupint-1.0"="xd29mvn7b5zjhc0c4gcxd4jyly8z26k8";
-"cmupint.doc-1.0"="10c0xi5bx5bgphjnnmrn98msgkpsn90v";
-"cochineal-1.060"="751kycpxzxwiymcfriw76saip30bvrzi";
-"cochineal.doc-1.060"="fcsv271lx4fz17ls2axs716lz0b30rdw";
-"coelacanth-0.005"="hxkgs2wa2r2vvdh2gh93j5qzjwqvr2yf";
-"coelacanth.doc-0.005"="wkqrbq8j6ibzvw8fjig7s7v8bhhblpp1";
+"cmupint-1.1"="y3vd4gx3bm5432xbhp6kd6fgvgxb24id";
+"cmupint.doc-1.1"="jh5gh9ca5gwvjc0zpbb8wzlbi7kzfmf6";
+"cochineal-1.066"="nqvc3r3rvl2b8jg5iyl2iys8xdippmxq";
+"cochineal.doc-1.066"="v35n3000808gmsks4w1gwbpr65n6yx8j";
+"coelacanth-0.005"="qbhn9dh24pnw2bzsjgv2inr1fyh26qka";
+"coelacanth.doc-0.005"="dbx6zwlbflq60b3zgkff1aj284bl77i3";
 "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";
+"comicneue-1.2"="cfr1kqc912hb1lm6n6ks4jh7xqbwwhk3";
+"comicneue.doc-1.2"="h793ar1xgvf5l95z029vxysls2ypl884";
+"concmath-fonts-17218"="875viaxzrrljcarkg11cb830fmq5321f";
+"concmath-fonts.doc-17218"="q2wyl5cw03rbk4602vg18jrxg3j133lj";
 "cookingsymbols-1.1"="qhjzkivpxbk3rk6pricxsxpdk7c40rxc";
 "cookingsymbols.doc-1.1"="8l7yii9vvmaxfnf0h2snis7476k18mlc";
 "cookingsymbols.source-1.1"="z7r8n2lhgaqzgpx0jz8xq4sd4zzigbs9";
-"cormorantgaramond-3.601"="vbg959xc9v03xkb6yymi6vkr0qq8lkai";
-"cormorantgaramond.doc-3.601"="jvvyll846n42py13zb3c832brfcbq9nm";
+"cormorantgaramond-3.601"="xqgifhi42dx6dbcbx72kdchyzk07f4d7";
+"cormorantgaramond.doc-3.601"="amjjqgdd9ng92mhiph56pflx2l7ggx3w";
 "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"="hw8fac0b3762dbrc71xnzwys5429ih5x";
-"crimsonpro.doc-2019"="1vxxf4zr3rmknnxjq51myq954s2w8mab";
-"cryst-2019"="56jlp0hk9vrfxbhlfjnpim398ggxccjg";
-"cryst.doc-2019"="qazhz2hzgpqlghbg67fnmf8adba1wl5d";
-"cuprum-2019"="lb84z2x4ab6q22wj6vh0m2rqnfqr5cgm";
-"cuprum.doc-2019"="88iiq2wn37gz4bqawpsb0q8a0nrdpr62";
+"courier-scaled-24940"="qrm6a468azlw2s89v7j992wxs2mkqfv9";
+"courier-scaled.doc-24940"="1bwlrdxpl1fj4f9ml688ybimig5ylxwv";
+"courierten-55436"="zc995z33ykbgfhmsry87a3fsn8xlb9zz";
+"courierten.doc-55436"="n3qgxqvpavn06yif3czxjk3075glzd1b";
+"crimson-54512"="wwvxgknvkd3ycswpp9wnlp9dlkilj7wz";
+"crimson.doc-54512"="wnxfzc5llkk38ky7bf8hkn7zsdawpr2x";
+"crimsonpro-54512"="hw8fac0b3762dbrc71xnzwys5429ih5x";
+"crimsonpro.doc-54512"="1vxxf4zr3rmknnxjq51myq954s2w8mab";
+"cryst-15878"="56jlp0hk9vrfxbhlfjnpim398ggxccjg";
+"cryst.doc-15878"="qazhz2hzgpqlghbg67fnmf8adba1wl5d";
+"cuprum-49909"="lb84z2x4ab6q22wj6vh0m2rqnfqr5cgm";
+"cuprum.doc-49909"="88iiq2wn37gz4bqawpsb0q8a0nrdpr62";
 "cyklop-0.915"="5ksv3v36mc6557jckr5gk22pbqr30wnr";
 "cyklop.doc-0.915"="d85643zgnh0r0j53gfpi84qsx4694xpv";
-"dancers-2019"="qlpshkppzr84rr3smqpwch5j11klm3a7";
+"dancers-13293"="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";
+"dice-28501"="916yfiq60a1qz7d0jn1jd9slck7rjwy1";
+"dice.doc-28501"="rfkm493k3g4slyjsy6bcgljxjsy88z76";
+"dictsym-20031"="lc5sz8d50hirk5yqg9baj2vhj4f7cf8x";
+"dictsym.doc-20031"="d13rhwg29k9gd4ymlipbp5ink908sdnn";
 "dingbat-1.0"="9yc0zy6qlxi9zmpyi3wd5irgq89shanr";
 "dingbat.doc-1.0"="z4km9f9xrw1n44ylh16872lzq8r4zvy4";
 "dingbat.source-1.0"="rq7v2cny05d4f8bkxbs2z6kj36q5bwfd";
-"domitian-1.0c"="5x9pl6afi69x5qwxx6ydbgxcz04d2ady";
-"domitian.doc-1.0c"="17nr4x6h43zbkja2cdbs43di23hmrylf";
+"domitian-1.0.1"="h6nmi8210w114mrgbzbjq57s2ii8dmcp";
+"domitian.doc-1.0.1"="qcnjkq47z176kgl8980098zidn3r6ida";
 "doublestroke-1.111"="z58ah73655dsas48b432ahkkags5n8wv";
 "doublestroke.doc-1.111"="403diym6rx34bwmrh63zaka3xdhzs2dp";
+"doulossil-0.1"="xd9sgg9nj1977hc9svbd5qp0vxc9sx03";
+"doulossil.doc-0.1"="1aysxh73wks623xr7x6dj14n1r0f0xp2";
 "dozenal-7.2"="6d1mbaf4l9yk7admwg05a6ix98cq5h97";
 "dozenal.doc-7.2"="5qfx3qa1dnadw5qc1fxq156xhh9wrjws";
 "dozenal.source-7.2"="w7i42zvkj2ln8z9m4r8p5371jbjn56kp";
@@ -1036,104 +1088,111 @@
 "dsserif-1.01"="n3yxb7dh1amaxgyxlhlyyvg23hjdns2n";
 "dsserif.doc-1.01"="84pcbmflmwkfzclm3ygbdrm817l4dbdp";
 "dsserif.source-1.01"="yawadjy2742rvvkp232zadkjsij8ja3m";
-"duerer-2019"="vbldf1vbzs3if3mp2lcl65afgiqa54j4";
-"duerer.doc-2019"="75dd80vmi5wx804zkrq48z12y3alihqc";
+"duerer-20741"="vbldf1vbzs3if3mp2lcl65afgiqa54j4";
+"duerer.doc-20741"="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"="xdx1sm7ckl1rlq2cmbz26c1zh0rsjjy7";
-"ebgaramond.doc-2019"="c31jlfc5qvkxv4acz5cx7is5db7kgknf";
+"ean-20851"="m0gkapni85n6zw1armbn1y770n8aj0rm";
+"ean.doc-20851"="1b7rkp30r8k0dgk9clz71jp8dlsvhrqc";
+"ebgaramond-54721"="fxf69dhligq556cggd9gz5vsjf5cbchv";
+"ebgaramond.doc-54721"="nkhb81wpx51kkfqg2g2mw9vy4dhnzj7h";
 "ebgaramond-maths-1.2"="7xa6g5hnnl2ry0v3gf0s33p6l3qqn3ds";
 "ebgaramond-maths.doc-1.2"="2l73rdm7kwy43k9z4fwnxlvd7prca25a";
-"ecc-2019"="0g013kqml9jfkqq94v7zi46mhrwdzdck";
-"ecc.doc-2019"="v9al4v4j1qlrc9w7ph6ww1h1mc6flqsz";
+"ecc-15878"="0g013kqml9jfkqq94v7zi46mhrwdzdck";
+"ecc.doc-15878"="v9al4v4j1qlrc9w7ph6ww1h1mc6flqsz";
 "eco-1.3"="7ycccps2kab77rr3cpwsbpi2cpl40kl7";
 "eco.doc-1.3"="1r1jxijx9wk6q2124xjwrmsjps7446fp";
 "eco.source-1.3"="4kcml0rm4pkg827qpfvhywnzrrx5p7dz";
-"eiad-2019"="m3n9a3rawxsj5gm64vggw7xvrq4cy4ry";
-"eiad.doc-2019"="z3wss8sc5vnawaqkz7kagwm1gv4l1czv";
+"eczar-0.1"="rnk4ahis52ivhpbyl6n75kdbbvcv06bf";
+"eczar.doc-0.1"="4k1sdkibfnis7gb2xp5caadk50ic7v75";
+"eiad-15878"="m3n9a3rawxsj5gm64vggw7xvrq4cy4ry";
+"eiad.doc-15878"="z3wss8sc5vnawaqkz7kagwm1gv4l1czv";
 "eiad-ltx-1.0"="0zq83567n75h8zxlag2qas2q8li6vyqn";
 "eiad-ltx.doc-1.0"="7kymr597yg8j8291gy7jz16a89aqmqny";
 "eiad-ltx.source-1.0"="illi6i1hp4lmx7ylxazrmmzi89ymh9cs";
+"ektype-tanka-0.2"="rqd2g9ibqc83vxsi040pxn97bxxv8qvr";
+"ektype-tanka.doc-0.2"="0q47s8q2bpdxc1dd11pf46iicyvy3lx9";
 "electrum-1.005-b"="6hdyjv1dakcj5zxn6p8rrksdvc7jl0sb";
 "electrum.doc-1.005-b"="c11jl0zjq8nva5nl96p9qyq3nrvgx0zn";
 "electrum.source-1.005-b"="67i1gwyiwwarncpbnj47fmws4dc42bii";
-"elvish-2019"="wp858zclk17yrhpf1yrgd3c4srh07vcj";
-"elvish.doc-2019"="mwgvj8fzb806dsjcx01zs6lhdygx35r8";
+"elvish-15878"="wp858zclk17yrhpf1yrgd3c4srh07vcj";
+"elvish.doc-15878"="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.102"="kzzq304wj0n0sb75g9hfvsx5bs4bfivl";
-"erewhon.doc-1.102"="l2kxka3aavzs0kfr0r9v2vcz9fwwg43l";
-"erewhon-math-0.41"="vmm8kk4pi2j79vfszgvmg38bnsp5b0pd";
-"erewhon-math.doc-0.41"="58m32lqczivydwphh9v8yc8k16h02cw2";
-"esrelation-2019"="zhs9fa75r0wr060cfsk4gmmvn06mywmy";
-"esrelation.doc-2019"="08i1bczpz8sccj5lf32axfl3c5ix1sri";
-"esrelation.source-2019"="r1ylhybcbbxjkyvs07m6csmqgz14rrcv";
+"erewhon-1.115"="4pfa8lybdjfb1q21imsfvhsby9iyx5nb";
+"erewhon.doc-1.115"="7n0gz74gl7s50fxypsjydxbn9lx2khbr";
+"erewhon-math-0.45"="hx56393y3qvz6xhdkm1sqlnzk1bs8fgy";
+"erewhon-math.doc-0.45"="q1yyga9zqywjf4ic103h5clx6sap79dg";
+"esrelation-37236"="zhs9fa75r0wr060cfsk4gmmvn06mywmy";
+"esrelation.doc-37236"="08i1bczpz8sccj5lf32axfl3c5ix1sri";
+"esrelation.source-37236"="r1ylhybcbbxjkyvs07m6csmqgz14rrcv";
 "esstix-1.0"="0ddmfrgh39pwcd2n8rggma4pqwgamp7s";
 "esstix.doc-1.0"="5pf3r0xhssrgkp779n06a63yjb5cdg6a";
 "esvect-1.3"="dd9wb3zgs99s93z0jig2z5pwccxh3vvk";
 "esvect.doc-1.3"="c9x8najv8ihx22n1kfd9hbqba40ilz3x";
 "esvect.source-1.3"="170376cm3v7mzlh5909qyzw6y18m5rjm";
-"etbb-1.001"="11jkhz4x2y4f26ccv5x8vs4612q7axrp";
-"etbb.doc-1.001"="jpijr3bpib9bh4fyq8fw89fgfvbqqfdj";
+"etbb-1.051"="dy8w22hbxmmfz7krnj85qsh6i6l5cx8w";
+"etbb.doc-1.051"="sz630vnzl7rlyvrs5l14436mmyzzqgia";
 "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";
+"euxm-54074"="pb3kg627b3skhbi0prgik6y9n9zgk8s0";
+"fbb-1.16"="fj9qhal40mhidcypy6gkiw5yxlzarkcb";
+"fbb.doc-1.16"="wlawnph3igcrbhkrfjhd3ghg3mlclshb";
 "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";
+"fetamont-43812"="4b0n4awl8k1zz1pn0pnc2hic5shsyb2h";
+"fetamont.doc-43812"="vq97fpky2mf9p09zwqvk6vkl5k9swkbb";
+"fetamont.source-43812"="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.3"="fl4cbr4kka8yvq31dl7iiqylp5s8kqvm";
-"firamath.doc-0.3.3"="9higy6zhahbmfaa9w6js7958kqf6v085";
+"fira-4.3"="7djxip2p87v4bjjnlqigzyia0cdwp1yl";
+"fira.doc-4.3"="llsvxv1afxxlkxxwyk9mrq32bnz4hjml";
+"firamath-0.3.4"="jcqr18y6256nz7pj740yimvqj6f1rwng";
+"firamath.doc-0.3.4"="mbzsrizx3rh5gq4j8aqq7jgfcri0xhf1";
 "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";
+"foekfont-15878"="wha0shrvr3lv9ll9d3gv60mcav605vcc";
+"foekfont.doc-15878"="n91sl0xzglqfbdyb9mzv7wav3y4zv9sx";
+"fonetika-21326"="firgrcsksy4jdk632aqfwlaki3xxgmak";
+"fonetika.doc-21326"="ahz61pg6qnn2dpi3c9iz2kh2f4fvywbl";
 "fontawesome-4.6.3.2"="0n13dha58d0w511pzzckcq51fal6zxgl";
 "fontawesome.doc-4.6.3.2"="x7hzlyxv5k2zjz5lk8hy15pnvbhhhijj";
-"fontawesome5-5.12.0.1"="0pkgqsb8ygiyiiqnjbv5zykzrxl162ly";
-"fontawesome5.doc-5.12.0.1"="9d4c1rzxmxqhs084r3kqrx1r19gavpsc";
-"fontmfizz-2019"="rkf93c9imj2wd7aps85m6450zbd9p3yl";
-"fontmfizz.doc-2019"="y70dshapwj7xp7h9b6sbjipv6v9k02wg";
-"fonts-churchslavonic-1.1"="3d67nxsgrrv480997rlbrzz5siyb2gvj";
-"fonts-churchslavonic.doc-1.1"="arcilr5n1w0rg97zkxy162kx21ygns31";
-"forum-2019"="px3s2xc2djz1r9vlpb9w6yvs1lzbjvmi";
-"forum.doc-2019"="g6n07nh8q33w9l3ljb1gklabd35fbl28";
-"fourier-2.1"="b736sz2f40q7f1nnj55d62wkgzg229hl";
-"fourier.doc-2.1"="jm2f857hz9q4n80a6w6a3lygnlxdi99y";
-"fouriernc-2019"="9pxp21fllg7yh9jfa8nzpy6ifa3w6y18";
-"fouriernc.doc-2019"="dn9wfy53asfp1bbxnfa9nxvnfy3z9nn1";
-"frcursive-2019"="fs9aw12gfd5gs55fhqxg2p06c50i9s1v";
-"frcursive.doc-2019"="r0bj4g91m2w3yl8q8kim6ldm4d8lyziy";
+"fontawesome5-5.13.0"="1aif8izj40a35ajy3kk7jh1y81r8vv32";
+"fontawesome5.doc-5.13.0"="ag4vgqas7ji3q4ahz05jxpfvvzxijc96";
+"fontmfizz-43546"="rkf93c9imj2wd7aps85m6450zbd9p3yl";
+"fontmfizz.doc-43546"="y70dshapwj7xp7h9b6sbjipv6v9k02wg";
+"fonts-churchslavonic-2.2"="dv81dap48xibffaaqz9lv3vn9k4lqp99";
+"fonts-churchslavonic.doc-2.2"="av2wni5sdkp83fd61c3hdzddscz11i8r";
+"forum-56025"="mgaad8q8g47k4x60vvfrwn7asni9hrf4";
+"forum.doc-56025"="w0qr0r8hr149nn075f8d0rjp4nfn01p8";
+"fourier-2.2"="ghdri86l3nlrnqm057sif3w4yjsqzhbz";
+"fourier.doc-2.2"="p9qmlb4xkdc321gv3iwypqabrkw8mnh7";
+"fouriernc-29646"="9pxp21fllg7yh9jfa8nzpy6ifa3w6y18";
+"fouriernc.doc-29646"="dn9wfy53asfp1bbxnfa9nxvnfy3z9nn1";
+"frcursive-24559"="fs9aw12gfd5gs55fhqxg2p06c50i9s1v";
+"frcursive.doc-24559"="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"="mr7aafbkhy8z5iy5qc0l7pmpqbvnzq4n";
-"garamond-math.doc-2019"="agb1azq7b7c5gpvz4nwxb29lg7pzqg9y";
-"genealogy-2019"="hdl046d3paihjmlkh2q3crfj1n88fsyv";
-"genealogy.doc-2019"="7115cwa2l6nsnyijcdik7kw513q3a41h";
+"frimurer-1"="fh6b7ag1zzzggi6xzb6by04hwhhl2k4x";
+"frimurer.doc-1"="vghsyznfdxa6ab2irz1gppr57sbc6b6p";
+"frimurer.source-1"="ixvp583gb0qlfi28hxy52hzbivnz77k8";
+"garamond-libre-1.4"="sjc7j87aq5vi8zgxiigg9hslvgq43fwv";
+"garamond-libre.doc-1.4"="k0m63fxp3f8fhyjachi19la5kz7wgz3d";
+"garamond-math-52820"="mr7aafbkhy8z5iy5qc0l7pmpqbvnzq4n";
+"garamond-math.doc-52820"="agb1azq7b7c5gpvz4nwxb29lg7pzqg9y";
+"genealogy-25112"="hdl046d3paihjmlkh2q3crfj1n88fsyv";
+"genealogy.doc-25112"="7115cwa2l6nsnyijcdik7kw513q3a41h";
 "gentium-tug-1.1.1"="gdd212mv253371hvn1bxlr2q863qzy3m";
 "gentium-tug.doc-1.1.1"="02avjmn2f3hlr18688rn12y1f5qc68ff";
 "gentium-tug.source-1.1.1"="k50zhzwymzygzqf7xywv4bzz47vw5hxs";
@@ -1143,128 +1202,142 @@
 "gfsbodoni.doc-1.01"="cbw698q7jmg09k301zwbnnqig853c14i";
 "gfscomplutum-1.0"="bic1cr1c3dii9nlfmhlgsm6rpj3g0im7";
 "gfscomplutum.doc-1.0"="ddz279xl7glgi201dizr2gdkcgiy77qz";
-"gfsdidot-2019"="j0mg1pn4n9dfy9hdia5v88hds4j2h2d2";
-"gfsdidot.doc-2019"="xrnlqx0gkb79g50mwzsmi9g6ib1pa92y";
+"gfsdidot-54080"="j0mg1pn4n9dfy9hdia5v88hds4j2h2d2";
+"gfsdidot.doc-54080"="xrnlqx0gkb79g50mwzsmi9g6ib1pa92y";
 "gfsdidotclassic-001.001"="mv8li5kjf7gd779h7ap57qm6wz7m69mf";
 "gfsdidotclassic.doc-001.001"="1z68ixilpnx61pjs5spbmay6861sqc8z";
-"gfsneohellenic-2019"="az5rq4d44zysnvcqlky0hr5qb7bh3nza";
-"gfsneohellenic.doc-2019"="04y313wjm59sgg4xlnili0kfw3dwljp9";
+"gfsneohellenic-54080"="az5rq4d44zysnvcqlky0hr5qb7bh3nza";
+"gfsneohellenic.doc-54080"="04y313wjm59sgg4xlnili0kfw3dwljp9";
 "gfsneohellenicmath-1.0.1"="w946ahij7k25dk2dhvwpcrlcxpdndsl2";
 "gfsneohellenicmath.doc-1.0.1"="djwb6m03rymqc84dcgv531lq4wx8qx5n";
 "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";
+"gillius-32068"="fw49hi1cvp9zknv23xccgffkxyqwimqv";
+"gillius.doc-32068"="dhkvy2y5v117xzm4lan27k7q2rcdvs5p";
+"gnu-freefont-29349"="1zqn27grz5h290g4fk4q8kd9pf4l05ag";
+"gnu-freefont.doc-29349"="3saxb0d0h7dn8a1f7l8ax0dj5ic8piib";
+"gnu-freefont.source-29349"="716drmmfwyq7pabpgagk0zwkj77lrhda";
+"gofonts-54512"="gd9n6q1il2jfwz6hjp5hag2gkpr2mhl5";
+"gofonts.doc-54512"="4r2jm1373lkk3j89i9clb528dj04lmly";
+"gothic-49869"="p88xyzda6r94ibzxlv1r7kkb7mc99h68";
+"gothic.doc-49869"="wrpx52hq1g5dhi38sjj7dxi2y7gh1201";
+"gothic.source-49869"="6gh7hma17066gk20ri4qjvml8d424c1h";
+"greenpoint-15878"="qlqfkgcn8gc1hy7gmfajqliriilf68ck";
+"greenpoint.doc-15878"="xf889ii8gmck30vlpwkfp7d9242ivffr";
+"grotesq-35859"="rqv47whzwig31vfd8581ncd87ja7pb82";
+"grotesq.doc-35859"="rim68sz4x0r1m6j69zryv98gfgvpkbz0";
+"gudea-0.0.1"="5pp223vvpcdqm8ypnm1jpi46i9p04jcy";
+"gudea.doc-0.0.1"="gmn455nvhhpkr3l1rzgi2yx85y17djyv";
 "hacm-0.1"="jvhbypj31pcc0imgwlmzpv8nmb1n9dxk";
 "hacm.doc-0.1"="0dys4q83mfgxlwrz16fsm2cx2vgcn5ly";
-"hands-2019"="570kl4m7mximvq87lfqa6fim30hmjjqz";
+"hands-13293"="570kl4m7mximvq87lfqa6fim30hmjjqz";
 "heuristica-1.092"="9y69nm9nw275afi7qzdlm6rr207rq1xd";
 "heuristica.doc-1.092"="kyhkr5x04gs4k2pqgnhysgdg9wk96s1h";
-"hfbright-2019"="j8vk71r5c8iyhfmfwqspj1c4iczl2p0f";
-"hfbright.doc-2019"="wqqxw523sh1yjl0hnh31902wap7xcjwm";
+"hfbright-29349"="j8vk71r5c8iyhfmfwqspj1c4iczl2p0f";
+"hfbright.doc-29349"="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";
+"hindmadurai-0.0.1"="p51ilgj92map420hac4c2xhwzdw46jsj";
+"hindmadurai.doc-0.0.1"="9gpq48c0l768kmppj58fl6865sbjlhvz";
+"ibarra-55820"="zm9m981v0x0mppmcr64fhnk22qr0dn40";
+"ibarra.doc-55820"="h9cndsg3q17n275ah59cf93m1is22ad8";
+"ifsym-24868"="qy3w8h8slb44vg4s7q7ddb9db2fd9s06";
+"ifsym.doc-24868"="wpnp4ykxz7qa1ycwzkfpp5sjrs49np12";
+"imfellenglish-38547"="y1vkapnwlqxwb3via4yhpszgfmlyqa9q";
+"imfellenglish.doc-38547"="g7r6rv584d412gqassqba30jfg3i1490";
 "inconsolata-1.121"="wk0j1458yhq5r1zl03qlb3gbzm0dwfb3";
 "inconsolata.doc-1.121"="iyjsfc6sgi4g6k3vljlmdjr6arvm09bn";
-"initials-2019"="sd0v18xidrmnllf1ihmgk02jz3v2qw8j";
-"initials.doc-2019"="6nhvprdk8nd8gxmhq2hb8s41rpjwmv4g";
+"initials-54080"="sd0v18xidrmnllf1ihmgk02jz3v2qw8j";
+"initials.doc-54080"="6nhvprdk8nd8gxmhq2hb8s41rpjwmv4g";
 "inriafonts-1.0"="v2z21gr8glh8557carc8405d39h9yxyq";
 "inriafonts.doc-1.0"="dq2aix14cqch32dywqyka5ci8qn31ayw";
+"inter-57213"="217klka90d7inpzwvjv0cmrfrmgylpjs";
+"inter.doc-57213"="a2rnff5s05lc06k48mcidc1biyczvnyf";
 "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";
+"jablantile-16364"="7fh0mnp320r5b8740vs3z19dg1l0i4ds";
+"jablantile.doc-16364"="yml29hq7xcawh3zkd6b32dbsk0aj024q";
 "jamtimes-1.12"="mdyyd5fy4hhi74rpc5hb7bmrxwdsk9k9";
 "jamtimes.doc-1.12"="c9849k8v23lrfrchf00yvrvq5q7g1gq0";
+"josefin-57152"="18lrkgv2giwpm43g71ygmd77nr4s4df4";
+"josefin.doc-57152"="zg0p38v21kscdcr20xn6g4a4vx4r7ylc";
 "junicode-1.0.2"="2vg9bfcpawwij52yxai93fb276v351wy";
 "junicode.doc-1.0.2"="49dyn91fjdhs7yzc6j7y9ihnxkc9wpml";
-"kixfont-2019"="b9z3zajxsqs84zh5k15rx3jgkwwgwa40";
-"kixfont.doc-2019"="xp8ai67z856fmkzcssavksidg7n7j2yj";
+"kixfont-18488"="b9z3zajxsqs84zh5k15rx3jgkwwgwa40";
+"kixfont.doc-18488"="xp8ai67z856fmkzcssavksidg7n7j2yj";
 "kpfonts-3.33"="rsl5v8zsm8pblyjryw3f14svxjzhnchm";
 "kpfonts.doc-3.33"="rr7q8ww1nkpzqy29xmxhsyizszf59mqx";
 "kpfonts.source-3.33"="448xjy1djbz9l9wbhmq7r6fpgvsn9dyy";
+"kpfonts-otf-0.35"="iyczbphywkcslakdz2cma4q1mqiy4b45";
+"kpfonts-otf.doc-0.35"="kdlysi6gmavm0mvaxdj50sqq65kya2l5";
 "kurier-0.995b"="dadp8vkzvblj60424k75bchravcr0338";
 "kurier.doc-0.995b"="a4hw3w7qg492qnf4kivjsdfxqyrq669b";
 "lato-3.3"="5cl837pwnp1zd7h8w5j7cwqpvf6pmik6";
 "lato.doc-3.3"="fjxgmfdin3rrl6dn338f9ss9729napxr";
-"lexend-1.0.2"="yxc49nzfvzm0nxpckvd11ka2d2pq8gaa";
-"lexend.doc-1.0.2"="pynssyl75a7i5ri8qfqrp8y9j962bvvp";
+"lexend-1.1.0.70"="5hrva48vpgfqxym4wb3ykq8czk8gkvhs";
+"lexend.doc-1.1.0.70"="zc8ra5shn7nhy6k1rvapfmi35h35jnc1";
 "lfb-1.0"="kqspj6w9i4bzbxcngqdfk8rnw33j0yyd";
 "lfb.doc-1.0"="ikbhi6ahzxlplvizphmpimf9ah2ninqg";
-"libertine-5.3.0"="m2qrzjjvix37zk9fzmr9drjk9y9rcz15";
-"libertine.doc-5.3.0"="6wajsgwacz6j2hf134gpd31dnplbqngk";
-"fontaxes-1.0d"="aaqzfxbcd9fdggw8lmj6syc1ff00m43p";
-"fontaxes.doc-1.0d"="q1qsz0gigyg3x462k337crqng7njvakk";
-"fontaxes.source-1.0d"="6xacssljffql809gpbhl8qdrs944v6cs";
-"mweights-2019"="6rwqdlv6x82pskdga8yzzz61yfxgvzpq";
-"mweights.doc-2019"="zkki0s268s1a23zm962ymbxl3gi7mzix";
-"xkeyval-2.7a"="nznhb9srbfg7ifdi2mlkqbdcsq6329a4";
-"xkeyval.doc-2.7a"="k84lpc1h5d71qcb2k5rm5fnn04pv8czc";
-"xkeyval.source-2.7a"="9g5vvb4y71qryhdbjwjyxhh2w86cch0f";
+"libertine-5.3.0"="xs46n4q5hv8n321ai81358spg2r3y6n6";
+"libertine.doc-5.3.0"="jlnf3pmkj1yxhgfppdxhrv5qn9lsivg9";
+"fontaxes-1.0e"="27hpaxcvnnw00g8g74snij3pzssk1xa2";
+"fontaxes.doc-1.0e"="39pckgyrm5w4nj3z5l4vl7ypizxbn7k9";
+"fontaxes.source-1.0e"="4cgxjx83a87dpmandkb36j4pjvmypvg7";
+"mweights-53520"="6rwqdlv6x82pskdga8yzzz61yfxgvzpq";
+"mweights.doc-53520"="zkki0s268s1a23zm962ymbxl3gi7mzix";
+"xkeyval-2.8"="42rn633ggns36f6cxy4alii7mspfq0b2";
+"xkeyval.doc-2.8"="sa7qsydnwsl5s5yr0gdnmiv125j1163y";
+"xkeyval.source-2.8"="wsj7l9nya5753423srdk6dxzza8b0mf5";
 "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.24"="7damv0p9n249i4xsrvkm0p6zpsrbha5f";
-"libertinus-otf.doc-0.24"="d8v43mn6h7xq0x1c8y7gr7r2m7mbqfl3";
-"libertinus-type1-2019"="ikagqjrlcp82q9ym2hvknz8l0rm13jpx";
-"libertinus-type1.doc-2019"="zvg1ciy3pyjwknyi1s6j2c9zgsf1d5aj";
-"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"="3xd6aiixdpfjq96q9yf0jrdamyhng7is";
-"librecaslon.doc-2019"="88agnbh5q6f3l4pl78hk2l56w84gqqqp";
-"librefranklin-2019"="rb1fxs903zc5nnvhkza1dy8wn3j5j9ik";
-"librefranklin.doc-2019"="25nnnvx6gqjkbfl8bp0fiqdkr74dqb61";
+"libertinus-0.02"="hvyjkdpyb4i742jrp38jvihki874ynzy";
+"libertinus.doc-0.02"="00qv91migs6yq98sq8yzvgxyn2nfmnf2";
+"libertinus-fonts-7.040"="ms3pd16y9m57qr0cy7wj0diyvp0xczss";
+"libertinus-fonts.doc-7.040"="8binqqhkclivajvchkv0abz7k83d5v8f";
+"libertinus-otf-0.28"="a94l5s996h8qdf7wa2rvsjp04cr7d4yd";
+"libertinus-otf.doc-0.28"="sql0fnsk6k97vsx22smb32crqmn8c2vq";
+"libertinus-type1-57754"="alnbi8kk5q97jp3lhlvp3ydj1c2h6fsz";
+"libertinus-type1.doc-57754"="135mvv91v5v6p1c33q5nff38716g62fl";
+"libertinust1math-1.2.2"="pc8wfs8px04bnsgwkhbi46gs6synmvs1";
+"libertinust1math.doc-1.2.2"="v094dws0m9cv01iamdpirrwlvmdsf665";
+"librebaskerville-56018"="n7ld6vxki5zh7svbpgzl239y3gb9h2xn";
+"librebaskerville.doc-56018"="31pv0p1g3za88z7br5zx2jfhvpaij6m7";
+"librebodoni-39375"="1znd7g37rmm1qsv35dd9kvkmkfj4d3w5";
+"librebodoni.doc-39375"="hzihx71p9ggdp2pxrjvck7lhx2mrgdmj";
+"librecaslon-56003"="nd68dagix0k3fnssygsn1ghb6nf15qfn";
+"librecaslon.doc-56003"="sv1i8sfnqd073n6vrlajw509azn32yhf";
+"librefranklin-54512"="rb1fxs903zc5nnvhkza1dy8wn3j5j9ik";
+"librefranklin.doc-54512"="25nnnvx6gqjkbfl8bp0fiqdkr74dqb61";
 "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"="034xndbaadw3kssnpam8sxmh3cx38c7z";
-"linguisticspro.doc-2019"="pc4glvhi0xsy43qx70c91byyc7f3m1n4";
-"lobster2-2019"="lx95j46k68gz8jbcxam8a3xy4jgxy9jk";
-"lobster2.doc-2019"="psr2bid2fjynzfvwb4s86biamv1r6q9l";
-"logix-1.02"="gkv9as6m4zddjpb56kf4v2kzd6966lrs";
-"logix.doc-1.02"="f89pvvnz7zxk8j9yl0b1hx5qkix0fc56";
+"linearA-15878"="fs5s95s31qczmlr0m3dk16c7gl4kpn3z";
+"linearA.doc-15878"="6b5jz6pfmv5f88gkwj5642jvd35ga3gm";
+"linearA.source-15878"="zdfpl9gwgrxwvs9ymj3vngfxdc23vv0q";
+"linguisticspro-54512"="034xndbaadw3kssnpam8sxmh3cx38c7z";
+"linguisticspro.doc-54512"="pc4glvhi0xsy43qx70c91byyc7f3m1n4";
+"lobster2-56019"="zn660hm4k3qcf6qixrian248zngnl70j";
+"lobster2.doc-56019"="q66bcdlbc5zb7pgq1wmpmrbc49ld5y5x";
+"logix-1.08"="6xhmmnnzkiyxvghzbrcky60885m7fwr7";
+"logix.doc-1.08"="4rgj31zlh52nd4za1q4vxz1vx15cfv61";
 "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";
+"ly1-47848"="ry7x1505pv1szprb9fi2x21s97m23ln2";
+"ly1.doc-47848"="iw3amhkw5vjcmrq43cwqg653nyc3ks1p";
+"magra-0.0.1"="wrcmmmbnb3h0pm8k76pz3q6qck3wiafg";
+"magra.doc-0.0.1"="m5giv23xgkx0h84a5j90jzxv7mlaihbl";
+"marcellus-56016"="qp4g991zc71fcii4mj70rw8ywkjmg14b";
+"marcellus.doc-56016"="8v3dhdlkq24vykk6lq67nfn7ppmxrkvk";
+"mathabx-15878"="qgy1qqn1bk43nk938d7bvbyj75v4fz57";
+"mathabx.doc-15878"="q0n88v61h3bqf0vvldd1lb03d6i1z8mc";
+"mathabx-type1-21129"="z96jirmwabbav354qlyphhjvxnsgjqxl";
+"mathabx-type1.doc-21129"="yq8n84cpw8kqvqivham4pqxq1740z36w";
 "mathdesign-2.31"="30x7w3a7v1654a9n5mcj5kdak8i2qxw2";
 "mathdesign.doc-2.31"="sgp7bi4m5480jvsdj9n2pq933cfjkiqr";
 "mdputu-1.2"="6wr48jgiyfprwwrla53qshm2817zrmm2";
@@ -1272,116 +1345,127 @@
 "mdsymbol-0.5"="hjaz8ph3zrnl7x0545k3937yl5a0ghqh";
 "mdsymbol.doc-0.5"="g8m1964gq8gnn3cc3ij1iqhc4akwmc3q";
 "mdsymbol.source-0.5"="7hy2zpaw41c46i7kd4m65lhzgbpkn5xv";
-"merriweather-2019"="d816wypw36p0wmyqkk4z7kyqqs586klb";
-"merriweather.doc-2019"="jzgrh95z11msb6m0yhbcjfxlnil40pwh";
+"merriweather-56365"="112s3drbic1y4b29why5dqk8y1nsby6d";
+"merriweather.doc-56365"="16sp2c11hyllpc2fn55yim0rdp9p7kyr";
 "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";
+"mintspirit-32069"="wc4wyi1dfc7ql5sdcyycyqxjfir4g97r";
+"mintspirit.doc-32069"="w1ld9009591p4inkky5jfppjaiy0ja8s";
+"missaali-2.0"="96x2m5d8absim9r2hlmliy779s9vs9j5";
+"missaali.doc-2.0"="shxd513vi0qhbb9ddlhfamg6z21qi98z";
+"mlmodern-1.2"="0vrr6vqzzsiajmpr47dyxhcmicacwq1f";
+"mlmodern.doc-1.2"="skad815qs9a4na4hx1ikl9ms9g7y1sw3";
 "mnsymbol-1.4"="gmjs2ra3yb01bxw90gjdri3p6n7kbc6l";
 "mnsymbol.doc-1.4"="7ngazrr147x9gdadm651fv9hjr1f87i2";
 "mnsymbol.source-1.4"="7bf82bljx9w783jg3kibc5rn2l9j0ym2";
 "montserrat-1.03"="0jfqmisw57gkaz06kv0iq8ncfn9cj5hw";
 "montserrat.doc-1.03"="0hb2s3xrsawiza8qn21hwkji1sxxi4xz";
-"mpfonts-2019"="ar90vvz924ppxyfbqa3g7j7q9l4ddah2";
-"mpfonts.doc-2019"="kyij6dba277ysdwyd74bfybqi2bgm436";
-"newcomputermodern-1.001"="f9dpjcd93y7wmjs04w3n59a6aqirc6x0";
-"newcomputermodern.doc-1.001"="i1sg20z95l87fkxh5338lpdvzacl15nv";
-"newpx-1.410"="c6i4d9bdcv9j67pzsmwanv6jyc5vlgyv";
-"newpx.doc-1.410"="y8k4lqn8v37l9xfkbcflgkq9wqgfjrab";
-"newtx-1.624"="lm25bm9qazk8kxs1hsgl891pc0dfr1w6";
-"newtx.doc-1.624"="pq7ffhhw4ya9mqakrxrscjv79l0pi445";
-"kastrup-2019"="qdr5cacl37ans3zd5jlzwr2356xxgswy";
-"kastrup.doc-2019"="mvq3abnsjmzb3kv4c2z116apbzgfh2dw";
-"kastrup.source-2019"="13vj32k48f0ahs5694zrsvk953kxjrwc";
-"newtxsf-1.051"="k228m8b49w8pxij91bgw6xb8ikwa5q6b";
-"newtxsf.doc-1.051"="4mn23hq7waqwd7n1b6p67pjgbck0vlaa";
+"mpfonts-54512"="ar90vvz924ppxyfbqa3g7j7q9l4ddah2";
+"mpfonts.doc-54512"="kyij6dba277ysdwyd74bfybqi2bgm436";
+"newcomputermodern-3.02"="7bc96w8rmrrw01hsyf0xwvcywmvashmc";
+"newcomputermodern.doc-3.02"="jlhyrg5qd8c33jsb7899czmn9bp22cnm";
+"newpx-1.414"="dhhrp4ylaz6xk7z0n19lbp5506nkx7zb";
+"newpx.doc-1.414"="3kvjf9vzmbhmcsrkcqzp9yk6v32l9wgq";
+"newtx-1.642"="wg2j8h9igz4ch532q4csazvs412ymsjb";
+"newtx.doc-1.642"="p8x17blpzh4xc50v0nwhjw3ax9wb3ic0";
+"kastrup-15878"="qdr5cacl37ans3zd5jlzwr2356xxgswy";
+"kastrup.doc-15878"="mvq3abnsjmzb3kv4c2z116apbzgfh2dw";
+"kastrup.source-15878"="13vj32k48f0ahs5694zrsvk953kxjrwc";
+"newtxsf-1.053"="hzxr78pc8bvqx1lmz5qqazaxnscw4zwz";
+"newtxsf.doc-1.053"="4yq9cdx50c88gi84l1cxilihs2xw88sw";
 "newtxtt-1.056"="chh34kv4xssw395m003j4pdnmw62b63v";
 "newtxtt.doc-1.056"="k4bq1vqqb394n6yx35qapgx846cp54lg";
-"niceframe-type1-2019"="0kr9sg5vnawjrd2aw8vbf8mg975sifl1";
-"niceframe-type1.doc-2019"="12bn96xfs68zy9sfxi5q67mnaqkl1v2a";
+"niceframe-type1-44671"="0kr9sg5vnawjrd2aw8vbf8mg975sifl1";
+"niceframe-type1.doc-44671"="12bn96xfs68zy9sfxi5q67mnaqkl1v2a";
 "nimbus15-1.013"="9k2ck6b5lj3n5fjlpmwxs589mf9ph02y";
 "nimbus15.doc-1.013"="pb7vyh76yjs5ywb1hcwpxid9gzdq082q";
-"fontools-2019"="pfxfsgr6xjhxn0pbbssrsizibxmc8n23";
-"fontools.doc-2019"="6mbjf48hhn84gsdrg2wns8z45h60kk47";
+"fontools-58747"="4y719xzq79r8h09i5x52s0l8kxa53p3x";
+"fontools.doc-58747"="kdk0snq2hqcmv6j9si7jkx55nf7q3ma7";
 "nkarta-0.2"="g55hn51ys8zd7in6c6z46mwva577s6qd";
 "nkarta.doc-0.2"="59na8icxp6l11jk6nsp53c1y5gqyjsff";
 "nkarta.source-0.2"="jqh4ghyi8ry5w9x909w3kscg9p6m1279";
-"noto-2019"="sx5x2lf2y4c0rxhzrqc6l8hdk29agykq";
-"noto.doc-2019"="ws089havhd1gi0rs7mvdh6nb0f1npbxl";
+"noto-54512"="sx5x2lf2y4c0rxhzrqc6l8hdk29agykq";
+"noto.doc-54512"="ws089havhd1gi0rs7mvdh6nb0f1npbxl";
 "noto-emoji-2019-11-19-unicode12"="4hgmkcwhy0air6pw59331ydfxbjj0fxv";
 "noto-emoji.doc-2019-11-19-unicode12"="viyj6daza3fqvdsj101l75v32v9xkv8x";
+"notomath-1.02"="82i6a43z09zmn5rxgyxpwiakb1rxr4z6";
+"notomath.doc-1.02"="d1jm948b38gr7m3wfpdjhh7idf97p11v";
+"nunito-0.0.1"="0q3czq86802h415shhlbf4zchl8bh2ba";
+"nunito.doc-0.0.1"="w3sh4bxjvy1bs35lsf3iqgj9dynvcb82";
 "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";
+"ocherokee-25689"="1fg65c5gpjsx8vv9vsdg8szagf1xmg6a";
+"ocherokee.doc-25689"="p9lx15xl112908b004y0y6nlfxzgam24";
+"ocr-b-20852"="q1id788vglvlc7lsfr35gvzf0xmgr22n";
+"ocr-b.doc-20852"="lgwx91waimda6cdr05fi2jdwh4x18fqf";
+"ocr-b-outline-20969"="b8hhnggqxzs8285f55ixpwcpd7hb2dym";
+"ocr-b-outline.doc-20969"="bl1m2hny1zvs3wy4i4pndd2vxq7jhd9j";
+"ocr-b-outline.source-20969"="pf5dql2llykwb6x5a2s3scg4kc5r2f77";
+"ogham-24876"="22q1nc2fd6vv7hr7l4iryxi5bp6hqfnb";
+"ogham.doc-24876"="awnlhhzp2ch289lpnwybhz1k3zqwqq5d";
+"oinuit-28668"="n4di43fhkw1zcmy9xgxn7g4wl23qinyi";
+"oinuit.doc-28668"="s5hi4bk5yc19fb5lhmnc2vvxpr3ahd2k";
+"oinuit.source-28668"="caij5pbyylnhlhx149kl2h5sj4qda57z";
 "old-arrows-2.0"="7s0s5g2vif8hkzj768a0zgg46xjh57y6";
 "old-arrows.doc-2.0"="n9ly98pmz304gymkiafs3fncs9qq29mb";
 "oldlatin-1.00"="dw53za52apri5agrh2jpxrw0qvnk1mbd";
 "oldlatin.doc-1.00"="ngf614psg11qa2gmda30c6an4f371lda";
-"oldstandard-2.5"="mlwzzs29s5bf8hym5748wsldj2w092rd";
-"oldstandard.doc-2.5"="27gcl81jba7gyi9m28jcyxnphk8ivjdl";
+"oldstandard-2.6"="95xqbrjzizc2qhjaw30zi0x2h7w77cqm";
+"oldstandard.doc-2.6"="dmgzhqgqk0h11ix5y0gs4ci7r73cfawc";
 "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";
+"orkhun-15878"="fmazxvhmc0r0m96ms6a234wj139g00iy";
+"orkhun.doc-15878"="mgamvmayvdi43vxfqmxgbgzfahpn3d2l";
+"oswald-57253"="rajfni01q60wwf2vjvahqhndykkjx8cj";
+"oswald.doc-57253"="qxvy0gzc4nz345qvg2k8441lh86jqc1g";
+"overlock-56079"="ml25rmi7bi6q1yag7sj91zjmq49rmznd";
+"overlock.doc-56079"="vcm3nk33hlydpv1yaz2gw9038mk6gbcz";
+"pacioli-24947"="ka7a174yd3q3mymkbfyqbi7hhzpbhgvv";
+"pacioli.doc-24947"="5pzk9mjcdlzcnxwfkba4hzn23bzlhfh9";
+"pacioli.source-24947"="wwvfswngg0rrng6f3xck0f4qyg5m3shk";
+"paratype-32859"="877hrpz9vdgw6hsi6zf9d44bwnqjd6cb";
+"paratype.doc-32859"="12a3wq98sk2sb66rd08sx3f3vqvyqsr3";
 "phaistos-1.0"="5vv58ibkgjmpih67p2qgm9vdiqh4ag6m";
 "phaistos.doc-1.0"="z69jyiz7nm44yg9qy5vfhrzwby903g3s";
 "phaistos.source-1.0"="clhmyfpd5l1zx29352smmnyhal3lpa5q";
-"phonetic-2019"="1ha5wc46jqc3r9ziq7wmx0va8svybyjk";
-"phonetic.doc-2019"="xa7kxz7lh1sqmb6x9n4sh7bjpr9mvzqp";
+"phonetic-56468"="1ha5wc46jqc3r9ziq7wmx0va8svybyjk";
+"phonetic.doc-56468"="zyqpk97ipcmi1898h6dxc7vhynblwzqs";
 "pigpen-0.2"="d6rr06gpzr27134dqh8rv6h6g4i9hg4x";
 "pigpen.doc-0.2"="gqnp68lkhnnyh1ib0sa34cxjg52jj0rs";
-"playfair-2019"="70y4jv653pcwv0s6rnmjz271saz179vn";
-"playfair.doc-2019"="v7jcyickh5fflqx8h2b7s307sx9zcg2l";
-"plex-2019"="clbqiqsl3i6y337mlkrda8nk0wf15nsq";
-"plex.doc-2019"="yf6z2wd095cln6lcg885b8qx6grnkr1z";
+"playfair-56005"="k691vzvmarxn1d8fz2d5hkn177yr89df";
+"playfair.doc-56005"="931mlzpd1mp93dmwdlzfzf7na4cxaiyx";
+"plex-54512"="clbqiqsl3i6y337mlkrda8nk0wf15nsq";
+"plex.doc-54512"="yf6z2wd095cln6lcg885b8qx6grnkr1z";
 "plex-otf-0.07a"="2k3j1snsf3d414k4pjq56d9b1vn2vh1x";
 "plex-otf.doc-0.07a"="z6clw20q3nfwzn087f3c3ifc4g2yr4kp";
-"poiretone-2019"="isnd3cmsm0ps7dh40sjqiwa9vrpc1d19";
-"poiretone.doc-2019"="k2g9vk6snvf66n1g6x2d4hd2d1z6cghm";
+"plimsoll-1"="di983hrdafxqnqf406bgrph743kslqmk";
+"plimsoll.doc-1"="9rz48f3k6b03lvd585g8g50vn6f8xz1p";
+"plimsoll.source-1"="11ypgr9wnihsggwp3jrwr93yf93hjfvj";
+"poiretone-56070"="isnd3cmsm0ps7dh40sjqiwa9vrpc1d19";
+"poiretone.doc-56070"="k2g9vk6snvf66n1g6x2d4hd2d1z6cghm";
 "poltawski-1.101"="ipqjw12syp38hj1pw4b9g03kx07l40vn";
 "poltawski.doc-1.101"="g3shi2lp499x96az1f77y5bf8mhrgzl2";
-"prodint-2019"="vgqm1rmgqqvn7d4akab3x7jqz89kb0hq";
-"prodint.doc-2019"="fclf35r9hmfq76bvxwz5df0q18zms1sm";
-"punk-2019"="1bqwz8g3apk49mhg7m63qsynrxjxg76x";
-"punk.doc-2019"="1gc59v1xvh9sls0nr2ypmifripdspd1l";
+"prodint-21893"="vgqm1rmgqqvn7d4akab3x7jqz89kb0hq";
+"prodint.doc-21893"="fclf35r9hmfq76bvxwz5df0q18zms1sm";
+"punk-27388"="1bqwz8g3apk49mhg7m63qsynrxjxg76x";
+"punk.doc-27388"="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";
-"qualitype-2019"="g25g7rmvwsrn41da05wmx9r1qbzh2xaj";
-"qualitype.doc-2019"="nm2vc0k5x3h5vks67zqak7p1i0qd6bqi";
-"quattrocento-2019"="isv4srm4yxgrn89hsx8if1224x6mbmai";
-"quattrocento.doc-2019"="qcz3715r89gpj53jcy69rzimbcqlzw2z";
+"qualitype-54512"="g25g7rmvwsrn41da05wmx9r1qbzh2xaj";
+"qualitype.doc-54512"="nm2vc0k5x3h5vks67zqak7p1i0qd6bqi";
+"quattrocento-56020"="9avifkc1mi6q3ia38624gwkrazgpmsl7";
+"quattrocento.doc-56020"="cpq31smkrbm84d5cgchbrihjilvskc30";
 "raleway-1.4"="qyqkxw2r0kjdc5ccq6ixlsjgv75gcmhv";
 "raleway.doc-1.4"="kw13y1533fwj7lgjc986ydb97plij1vh";
-"recycle-2019"="4fgfdk09nzljd5a6vz52nvv8b23xk8rw";
-"recycle.doc-2019"="3wazkwncn9gh1lpcax4hb8x38jr6ynxd";
-"roboto-2019"="whybwc6p6bzqhwdafwnjkvn8grf2yrq4";
-"roboto.doc-2019"="85mmkpnfgwann7dxrzphg39hswnlpnqn";
+"recycle-15878"="4fgfdk09nzljd5a6vz52nvv8b23xk8rw";
+"recycle.doc-15878"="3wazkwncn9gh1lpcax4hb8x38jr6ynxd";
+"roboto-54512"="whybwc6p6bzqhwdafwnjkvn8grf2yrq4";
+"roboto.doc-54512"="85mmkpnfgwann7dxrzphg39hswnlpnqn";
 "romande-1.008-v7-sc"="v5sf9cqkvd7wmbrrb48dffi59m048kal";
 "romande.doc-1.008-v7-sc"="bf5a3jzcqr74l7qp2im80r9x73rk3asy";
 "romande.source-1.008-v7-sc"="g2p0didwlqqf9gsdzrhmh0f9543wdwwz";
@@ -1390,47 +1474,51 @@
 "rosario.source-2.1"="pyzgnc976vz8grb6dx3cwzkgxv2i11i8";
 "rsfso-1.02"="3n75qwpji7z995wb2r3dqwrszkw6m61m";
 "rsfso.doc-1.02"="vga3jyv3s730mgx97mqw92igvvypbyb4";
-"sansmathaccent-2019"="s26h8qfkc1qkh8afc3wj5wg8rxqzbc1w";
-"sansmathaccent.doc-2019"="4rvf51yh5fg1sfkr1arxqbdyf81i9ln7";
-"sansmathfonts-2019"="90f8gdxlqiqx6aw1nx0hfbmkrs6aw331";
-"sansmathfonts.doc-2019"="wcnhx85h99brrisdz8yb0m34mv5qsvd9";
+"sansmathaccent-53628"="s26h8qfkc1qkh8afc3wj5wg8rxqzbc1w";
+"sansmathaccent.doc-53628"="4rvf51yh5fg1sfkr1arxqbdyf81i9ln7";
+"sansmathfonts-51356"="90f8gdxlqiqx6aw1nx0hfbmkrs6aw331";
+"sansmathfonts.doc-51356"="wcnhx85h99brrisdz8yb0m34mv5qsvd9";
 "sauter-2.4"="flw49y2l5355jpvq7f3q3vannwcfni3f";
-"sauterfonts-2019"="kciqmij0w173na214ix5yhngc18likch";
-"sauterfonts.doc-2019"="x2lc53r2wnwrjfainmngafdsg39zyf48";
-"sauterfonts.source-2019"="kfi5301zd7pwmnr1fhqc6kfni0nr5d4m";
-"scholax-1.021"="3y176kc0bywnpmfkm8m90r04bj845cl3";
-"scholax.doc-1.021"="48xfsicb5fmwn4bj6nfwp0ldpzfqqgyx";
+"sauterfonts-15878"="kciqmij0w173na214ix5yhngc18likch";
+"sauterfonts.doc-15878"="x2lc53r2wnwrjfainmngafdsg39zyf48";
+"sauterfonts.source-15878"="kfi5301zd7pwmnr1fhqc6kfni0nr5d4m";
+"scholax-1.030"="zjh09ryiii8704yvy0bvmjii3q2m4vxv";
+"scholax.doc-1.030"="hp453hjav1bj0an3a8a8gvz1grmq1c54";
 "schulschriften-4"="3g5c3l5mnpp3a6472ayj0iykriini807";
 "schulschriften.doc-4"="ad6v7vnksqfglwb18via23p45xm2hr81";
-"semaphor-2019"="rb37ln7zq51ck9k6g0wj1cx1q02x2i35";
-"semaphor.doc-2019"="5lc0796kh9slmk1hrm3720mcnqjlqrcv";
+"semaphor-18651"="rb37ln7zq51ck9k6g0wj1cx1q02x2i35";
+"semaphor.doc-18651"="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";
+"sourcesanspro-2.8"="axl11355zgfdm0xgscjnks9i18smp49q";
+"sourcesanspro.doc-2.8"="iyk2jh81qg0bq9j0zi8g35mypd0zcll7";
 "sourceserifpro-1.4"="zxfp95p1ah6yv6n7p0bdsvnmrpm42kjl";
 "sourceserifpro.doc-1.4"="qg32lg4s8ba732ac5z3gzc6i7iy0mdls";
+"spectral-57296"="s16pqm20px7mjdqdvgq2ikifrbimcm83";
+"spectral.doc-57296"="zayb8fwvv08a4wbvvk5z3jmp0x6pb8sw";
 "starfont-1.2"="phdad9yy6nvcxi7ym1chdvz0vvb309ag";
 "starfont.doc-1.2"="96h183mv5rmxmnkgy6766519cz5nff6g";
-"staves-2019"="9vcnfl7q4czfhyl3zxadig3nzdxg900r";
-"staves.doc-2019"="rn25a0syl0d0n89jp09906y30679mr7v";
-"staves.source-2019"="2vby0srv43ikzb1br9wgnsyxmgqpfrv3";
-"step-2.0.3"="v0amk44nny3vi305zpbwl0w16sfcafr6";
-"step.doc-2.0.3"="ahh0r2mdrkavizsw1wqb2npfy6vfjrf3";
-"stickstoo-1.033"="k0kj2930hby7wkrxlal4wr7ajagm9lnd";
-"stickstoo.doc-1.033"="mn4pm8hwyl39h1v7xkvhd8dghkbnwlk3";
+"staves-15878"="9vcnfl7q4czfhyl3zxadig3nzdxg900r";
+"staves.doc-15878"="rn25a0syl0d0n89jp09906y30679mr7v";
+"staves.source-15878"="2vby0srv43ikzb1br9wgnsyxmgqpfrv3";
+"step-2.0.5"="nr1cw7y05s41v9ndh46l6yi7g9j9ich4";
+"step.doc-2.0.5"="ym39n0yndkc213b0mckbwbvp9nwm8qk8";
+"stepgreek-3.0b1"="w7245whipp7l165zrl18q578bi9rmvc2";
+"stepgreek.doc-3.0b1"="h631y9sxkkq9wwj28z3cpk0h8307ksp8";
+"stickstoo-1.034"="1s3rabdgy9m5brnp0ldpinhsr7d1v6ay";
+"stickstoo.doc-1.034"="2ca34j220kgnmx9nmnvrm6wravidazhw";
 "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";
+"stix2-otf-2.12"="ralamika1qnpmxphmgcx279l1nrr3ch7";
+"stix2-otf.doc-2.12"="2yzr1cj3l93phil3wnlww1iddz884f4n";
+"stix2-type1-2.0.2"="s0xh2qz3wrin8ajy6lzjb3bf1plw13v8";
+"stix2-type1.doc-2.0.2"="kw4qdl2zdnnsca05i25vdbai5ha61jsa";
+"stix2-type1.source-2.0.2"="yk64i2hkhmqirc9xcw9fkzf07909z1k0";
 "superiors-1.06"="gw1aw7hc05xzywylps60lzgwif3gli7i";
 "superiors.doc-1.06"="m2ppyah3wrk61cvq149bsvdgrjww94yk";
 "svrsymbols-2.0b"="wgq0gxpls40hwxlbxw65ykap0zkw8y1d";
@@ -1446,22 +1534,22 @@
 "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";
+"theanodidot-54512"="wq3wrhkk66z3q327fq4mdv0lw8wghm4d";
+"theanodidot.doc-54512"="6c7za0972a3x9cqa4gmj9c42bz9k7hqp";
+"theanomodern-54512"="2mv2fh328c75bffssj0l8dgdkaq519lv";
+"theanomodern.doc-54512"="qs48kz3hqbh0wv36m5ph30za13wmss3x";
+"theanooldstyle-54512"="ww6kab8p4jm1wsvlsn7hydl2fa1s3nnf";
+"theanooldstyle.doc-54512"="pn7xnn9dq4i2b1wdrn2qqzx7dx9cqrcz";
+"tinos-42882"="c1b84zg78hqp8fm15cgr59qrksqd5prp";
+"tinos.doc-42882"="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";
-"twemoji-colr-0.5.0"="addwkmmr7gywrzsrk5xclaiqz9215ml0";
-"twemoji-colr.doc-0.5.0"="k2374m9pp0xsc1vb2jrdym961ch9g6ns";
+"twemoji-colr-0.5.1"="2vzfrpljxnijw6ds3z2a0ak3jgsccri8";
+"twemoji-colr.doc-0.5.1"="k6mjhjkxlrm0s7zjf49w36gk5cam45pq";
 "txfontsb-1.1.1"="f8012p25mf8n4zj4nkmgpvgf54jb9i52";
 "txfontsb.doc-1.1.1"="r3xzad7mqh97g9firmqvb57bn44xa8cf";
 "txfontsb.source-1.1.1"="4zypgg4dchni1zh8sx4wh4sb5fdh8x98";
@@ -1473,8 +1561,8 @@
 "universa-2.1"="1hdi5bjzg9w8ipll8d3hdjxr23adcg16";
 "universa.doc-2.1"="pxdcwsm75lji29nggdy53wv4y96ixqjh";
 "universa.source-2.1"="adayns5x3p33i2apy5q7582ahl9kr5wq";
-"universalis-2019"="fwhl8bzgbw53ka6j71zbpc2fxsb20896";
-"universalis.doc-2019"="4w17vpjjhk2wwmc4m6z2n67814fdlrdx";
+"universalis-33860"="fwhl8bzgbw53ka6j71zbpc2fxsb20896";
+"universalis.doc-33860"="4w17vpjjhk2wwmc4m6z2n67814fdlrdx";
 "uppunctlm-0.1"="snyyw4gj0736fqykkf94fhkp9d31ml9q";
 "uppunctlm.doc-0.1"="h6cblhxd6xb6nnp3szb0fwv1r7pdwg99";
 "urwchancal-1"="kk9r6rk48qqq9s8l4k42fgj6c84912bw";
@@ -1482,12 +1570,12 @@
 "venturisadf-1.005"="nnn3pq2sx0rayjhhsh2pyavkf7c4i7jw";
 "venturisadf.doc-1.005"="gjzclw11zah2cpmgjdpknflrfsaahq9h";
 "venturisadf.source-1.005"="6yz4vcq9mzzm52ca19kcvgj8fg7js28g";
-"wsuipa-2019"="h05k2wwr89dak3ifgvjgjw0zyvlkyyjz";
-"wsuipa.doc-2019"="nrlpxbqgccmccncqa3xx8l3zlbalkcvm";
-"xcharter-1.205"="aafczy0cy4hzlm2vp6a4z13n81c3xdpy";
-"xcharter.doc-1.205"="f47pl0h1yqqibd5fqkyripdhp5fd2d5x";
-"xits-1.301"="p6p15xy3v136llbzrxhiyiqqjxjx9gzz";
-"xits.doc-1.301"="3qdj5y0g77l89xp1nijqr8kckm0257lg";
+"wsuipa-25469"="h05k2wwr89dak3ifgvjgjw0zyvlkyyjz";
+"wsuipa.doc-25469"="nrlpxbqgccmccncqa3xx8l3zlbalkcvm";
+"xcharter-1.216"="dhlax11idmxycjh9lcjdg2x14a48yi9c";
+"xcharter.doc-1.216"="nfc4a592qy84xh3rl76yzarihix6l8gk";
+"xits-1.302"="p0s2ycdklzp3nwp8ix7zfq30hp2wfgwj";
+"xits.doc-1.302"="avh0lr47xhdnfqpcxbjxlcp9q7q1mi59";
 "yfonts-1.4"="i2aacxlhsnkbgfb9i8p0sdwb57qv6gb6";
 "yfonts.doc-1.4"="lw30qiavn4l0ikg3hckps3swjch3wd6s";
 "yfonts.source-1.4"="rcvacgid92pk4m2mqy158gr20jax4835";
@@ -1497,14 +1585,14 @@
 "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";
+"avantgar-31835"="6x48hsg7wdw4qmf0pyqvb7zmqpn6izqr";
+"bookman-31835"="r9bkd40g0hwcbjhfa2n637i0qyk6ahyf";
+"charter-15878"="1iha6fak3i1mwa6pa6fps80vzik65a4c";
+"charter.doc-15878"="fvn827jh9gfdbs6gnnm83s2yialawz7l";
+"cm-super-15878"="wqamwks565frzn4nf6pq9skasdx5jbmy";
+"cm-super.doc-15878"="246p6vn62gq68n7bnxh1iz258gn3wi85";
+"cmextra-57866"="kqywbrwmg5w0xj0r0qffh1y9z9hlvlaf";
+"courier-35058"="f3rhv0jy01gfhn1rdnai7693y2xy90d4";
 "euro-1.1"="mpzw5yyqlyb864cqx4wczdnbln4sv4b2";
 "euro.doc-1.1"="82srlwf5vlsmfpwn0l7c7j4wd9fmvbqa";
 "euro.source-1.1"="v5w06s1hfni20mg1flnwgpkr5m49vqvf";
@@ -1515,32 +1603,32 @@
 "fpl-1.003"="m1b15fm8wc0lm0x9mbryz69x2dkczkmp";
 "fpl.doc-1.003"="bjc01f8vs5f3qj07my033203rn1na269";
 "fpl.source-1.003"="6rv41z6xg652nkli0flj3102na8k7k0d";
-"helvetic-2019"="q4xi3bdpp7195sqlkbfgnnccq879v86f";
+"helvetic-31835"="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";
-"palatino-2019"="xp5kg58y1lzsqba3bv9dz4f8rqi3xysd";
-"ncntrsbk-2019"="r2sgybivplsnj8iqwd62wr0ixhlc8x13";
-"pxfonts-2019"="9lxhr2mzcx8qkbhqgqx3y8a4pyhfad5a";
-"pxfonts.doc-2019"="q0zqikbb5d4d8wma6xspga1k20bjx8dz";
-"rsfs-2019"="c6wq6zd58x1dqi2l6p4ljkj3p30lfh1y";
-"rsfs.doc-2019"="2rq51dizzivym4mjl4x7lhw7mg6xmcgy";
+"palatino-31835"="xp5kg58y1lzsqba3bv9dz4f8rqi3xysd";
+"ncntrsbk-31835"="r2sgybivplsnj8iqwd62wr0ixhlc8x13";
+"pxfonts-15878"="9lxhr2mzcx8qkbhqgqx3y8a4pyhfad5a";
+"pxfonts.doc-15878"="q0zqikbb5d4d8wma6xspga1k20bjx8dz";
+"rsfs-15878"="c6wq6zd58x1dqi2l6p4ljkj3p30lfh1y";
+"rsfs.doc-15878"="2rq51dizzivym4mjl4x7lhw7mg6xmcgy";
 "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";
+"tex-gyre-math-41264"="z84v3wzsjwjx7b6wnwnpqmz7xy5v2bic";
+"tex-gyre-math.doc-41264"="41g7sn49g1kxa1dmy5vrv0fzk3rd4915";
+"tex-gyre-math.source-41264"="0wkvmjwxy9ws1h9j1rn0j57dah6z9jvm";
+"times-35058"="jjlr4lksbyjb8z2v21yy9ig0w6x246vk";
 "tipa-1.3"="h92fnvz5cv34vdyrpq52pn79z9lq6s0l";
 "tipa.doc-1.3"="s923q6n8h73f74y77cf171xj9w3mrd69";
-"txfonts-2019"="5fbs9mb86nll7k3j9d37p0bfa08b8nb1";
-"txfonts.doc-2019"="80fli8zzv88yh6rbv99dzsihxbrhmxkp";
-"utopia-2019"="cq5h07i2v6n1d5l4x2gjb0qn7594w5f9";
-"utopia.doc-2019"="sla3qhf9ks0020wq82iv1d3mivpbx79v";
+"txfonts-15878"="5fbs9mb86nll7k3j9d37p0bfa08b8nb1";
+"txfonts.doc-15878"="80fli8zzv88yh6rbv99dzsihxbrhmxkp";
+"utopia-15878"="cq5h07i2v6n1d5l4x2gjb0qn7594w5f9";
+"utopia.doc-15878"="sla3qhf9ks0020wq82iv1d3mivpbx79v";
 "wasy-2.5"="04vral6cxg9d9yqvm6b1hypgybrasbpc";
 "wasy.doc-2.5"="04z8v3n1qqsig0yg0qnisbrly6zkf2gw";
 "wasy-type1-001.002"="9nrxjm30l4lw800p9vq7kzw7fiviybsv";
@@ -1548,11 +1636,14 @@
 "wasysym-2.4"="s0vrrk3zl383akayli6rnqma3r3xbqih";
 "wasysym.doc-2.4"="pvkpxwgdwjhqilk6lnvkzwhf8srbnyhl";
 "wasysym.source-2.4"="y43dlzdnavkbazaq47hcm1dympkwqiya";
-"zapfchan-2019"="4saylq91v4il4ch3cp3lw7dv8x6sf296";
+"zapfchan-31835"="4saylq91v4il4ch3cp3lw7dv8x6sf296";
 "accfonts-0.25"="vnff63f9g4z5bsgrila75lr6lhdl3jhn";
 "accfonts.doc-0.25"="5v97adjwkwxpy4dgw6qiankxfrlz67ab";
-"afm2pl-2019"="vpay128xrpp8jkhyz6kjah0r4vgm2d4y";
-"afm2pl.doc-2019"="4kms0bi8801giwdiyk5d0l7q0rdsvqi0";
+"afm2pl-54074"="vpay128xrpp8jkhyz6kjah0r4vgm2d4y";
+"afm2pl.doc-54074"="4kms0bi8801giwdiyk5d0l7q0rdsvqi0";
+"albatross-0.3.0"="r8krwh8gj7d1gri6hqb7llqf99l63yr8";
+"albatross.doc-0.3.0"="mndw3kz8ghb7ld2hx8ac84y4b4zi14q0";
+"albatross.source-0.3.0"="ja07276rkc6zbfj9m88gmvrq4l4gwfpi";
 "dosepsbin-1.2"="f00pl9rcgapb03h76g4578za2p0awqh9";
 "dosepsbin.doc-1.2"="41pqpdppqi9658cacc0zhg72cp1pa00x";
 "dosepsbin.source-1.2"="0g1nbmyry93ikcgqhcyg48agnabnzpsk";
@@ -1562,53 +1653,53 @@
 "fontinst-1.933"="4ybgkvxvi1xy6jyw9cc8w3c51kmsmbd6";
 "fontinst.doc-1.933"="az11s0n9q3s68v02y4h2hx00fx8r5hxd";
 "fontinst.source-1.933"="cvbp2ml5kiq35qjnyzbpi8p7h1n5m2l6";
-"fontware.doc-2019"="2lq4pwncc80f0lh0x7s2a2c9kz9wjprn";
-"lcdftypetools.doc-2019"="c6agyhm6yaqg7gfnahfy124cdkln32cl";
+"fontware.doc-57972"="r20lpx0dy3lc7lrz7dzdsyid5h40j648";
+"lcdftypetools.doc-52851"="c6agyhm6yaqg7gfnahfy124cdkln32cl";
 "metatype1.source-0.56"="infq9kahz9ljr5kk338xbww0g4ifg8cq";
-"mf2pt1-2.5a"="d57jv2y04fsln3q3znw2qi16j7dfq3ap";
-"mf2pt1.doc-2.5a"="gc2i9fp30877ycz5l3wgphwlg9kpfqp7";
+"mf2pt1-2.6"="c0pp9hwb6xn5ka9is576ml3cy7dkliff";
+"mf2pt1.doc-2.6"="ml4dcrc2qy0d6wkdqf0gg60719hcm3a1";
 "ps2eps-1.68"="ja294cdv9aagllqxjbckv50b13swxlvj";
 "ps2eps.doc-1.68"="00q5228fgcsw6rbadprynz6zdjc6y2j6";
-"ps2pk.doc-2019"="k23d42q6071yrh1jnzxdw7yx19nbk5ac";
+"ps2pk.doc-52851"="k23d42q6071yrh1jnzxdw7yx19nbk5ac";
 "psutils-p17"="g8ci3q98i9cvpw1s7l3mqsv39wqx3gac";
 "psutils.doc-p17"="6zkafw71fx43y9y5ywycmclwldd3skiw";
-"t1utils.doc-2019"="7qnzwx98z6pjw9k3zrjk5pmix9amlhs7";
-"ttfutils-2019"="hzj3dljvfr9ypzpjgpwxadxf225yi8zj";
-"ttfutils.doc-2019"="nwcnj5ss2fnxspr2q7jka8himc2v5rzi";
-"aleph.doc-2019"="p1zcyzl5na5ladrrh54m8q3926kwdw6l";
+"t1utils.doc-57972"="wp2nq73hxfpn17h4m322i0czyxq7616g";
+"ttfutils-57972"="hzj3dljvfr9ypzpjgpwxadxf225yi8zj";
+"ttfutils.doc-57972"="klki66wy23byskpncy19gax2ycsp1h6s";
+"aleph.doc-57972"="lrnjqxzdjxysc9wd9kr62alr4pbz93gx";
+"lambda-45756"="ykxajgkmkbqp7l79c4bcm5qg4xnyilxp";
 "antomega-0.8"="jxriw18jifvf24fz8nqql5izp67p8z5a";
 "antomega.doc-0.8"="q9jb5ks7gfxg5gjhkpng5bl0wwbwp2ph";
 "antomega.source-0.8"="l2gs7sapppwxiy712i8vkwfmmc96ch1s";
-"omega-2019"="0v7wvg0vkrwbarcxfnp8k6w09j86y1pv";
-"omega.doc-2019"="zily3hjd30g14zrvj67hdp8nkxk9l5g2";
-"lambda-2019"="ykxajgkmkbqp7l79c4bcm5qg4xnyilxp";
+"omega-33046"="0v7wvg0vkrwbarcxfnp8k6w09j86y1pv";
+"omega.doc-33046"="zily3hjd30g14zrvj67hdp8nkxk9l5g2";
 "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";
+"eplain-3.11"="qn75j5ylrpq7n758wgspr9bgisd8bnlz";
+"eplain.doc-3.11"="81yx3sj0nzw7l8q0xxf2cyqkvipfcg9m";
+"eplain.source-3.11"="fn1f737csi8474xf9dis8azwbh3478sq";
+"jadetex-3.13"="nzij63zrphdvv457fn1b7yl1cghrig5d";
 "jadetex.doc-3.13"="ix7992xnb7xb1789n6d48dv98imfc4m2";
 "jadetex.source-3.13"="3716mhagkrr60rjj9whznfh3v5qwvyv9";
-"cyrillic-2019"="zax5fp5a3p2zd3bhbpng70sydjxm9i1p";
-"cyrillic.doc-2019"="3risjsh9kgr6pk9d0f082a5ipq1827f9";
-"cyrillic.source-2019"="cmq6669b4zjhvhxn0lxq35h4b606yhkb";
-"cyrillic-bin-2019"="5mgqkf2kgqwx6fpdcvc8v99y6lc2cc2x";
-"cyrillic-bin.doc-2019"="hc8x4l1yd2cjqzvjdhsg3jbz8xnmq1gc";
-"passivetex-2019"="arr43134jllipw1jl9cbrgnnk1gav4d9";
-"ulem-2019"="d8shv0p8kmjd0rii3qljds7bd4jia6c1";
-"ulem.doc-2019"="3sdwrmm0gj0h8qq3ynarqf6vmk46v623";
+"cyrillic-47350"="zax5fp5a3p2zd3bhbpng70sydjxm9i1p";
+"cyrillic.doc-47350"="3risjsh9kgr6pk9d0f082a5ipq1827f9";
+"cyrillic.source-47350"="cmq6669b4zjhvhxn0lxq35h4b606yhkb";
+"cyrillic-bin-53559"="5mgqkf2kgqwx6fpdcvc8v99y6lc2cc2x";
+"cyrillic-bin.doc-53559"="hc8x4l1yd2cjqzvjdhsg3jbz8xnmq1gc";
+"passivetex-15878"="arr43134jllipw1jl9cbrgnnk1gav4d9";
+"ulem-53365"="d8shv0p8kmjd0rii3qljds7bd4jia6c1";
+"ulem.doc-53365"="3sdwrmm0gj0h8qq3ynarqf6vmk46v623";
 "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"="y9lv0rasy872n5vbaqlq5adcjfnalcfz";
-"otibet-2019"="66pn5bmsfw3d7l1prcr8p5v6w93lqfrm";
-"otibet.doc-2019"="i308lrxhgqi1gpsh5b5961xisbb9i3si";
-"otibet.source-2019"="hspwgiv9bs4ncmy1yi02jw8ghw2lxcpm";
+"omegaware.doc-57972"="xb4bkq29x4n2sv97bkk1kkqm20w7qxcx";
+"otibet-45777"="66pn5bmsfw3d7l1prcr8p5v6w93lqfrm";
+"otibet.doc-45777"="i308lrxhgqi1gpsh5b5961xisbb9i3si";
+"otibet.source-45777"="hspwgiv9bs4ncmy1yi02jw8ghw2lxcpm";
 "psizzl-0.35"="qx0mhll90g0l0aqzfsjqbn43gxfincyp";
 "psizzl.doc-0.35"="pd8v22iq76j5gkkv9k286yz9i71j8xcn";
 "psizzl.source-0.35"="9i1m36bp80bif8k74q7572j311xxbjlq";
@@ -1619,23 +1710,23 @@
 "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";
+"xmltexconfig-45845"="bm9ibaf0skn5g3ykwpn8gyg8hr80v59v";
+"bartel-chess-fonts-20619"="2mdy450109a2lz95qv50y6wxhhif4nr5";
+"bartel-chess-fonts.doc-20619"="xj41i6y3ssxdpqy3j60pdx2scsf3qx35";
 "chess-1.2"="j9hxdp5kz4dv6wwgy6azrw6yjhdq7384";
 "chess.doc-1.2"="n9xxs3zgzz1vhl7y1d8qxk4cj8fglhpx";
 "chess-problem-diagrams-1.15"="yiqgdwhfqypmf5i21s0r48614jzl16gi";
 "chess-problem-diagrams.doc-1.15"="aw911cwfw6nix4s2597w1nxa5sb7gf1j";
 "chess-problem-diagrams.source-1.15"="4jflmd6p2dxlh63dmc4d96c0qga3hcgk";
-"chessboard-1.8"="mpdarc678ndb3qhx72fbkfr5di3mp05f";
-"chessboard.doc-1.8"="9s4g0f3q9dbv521rqxgwf6v4sk9l1mrl";
-"chessboard.source-1.8"="hkh4fq04v2zmw4fwjnkcswhiq46pn3wh";
+"chessboard-1.9"="366wmw6jypbcg0dd3p6blwf1rzja917a";
+"chessboard.doc-1.9"="khnp39nrlnmca5sdy0q2n7f1gr0f3wpj";
+"chessboard.source-1.9"="9hi3xxi5iablrhcpkrc7gwa0axwmbipc";
 "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";
+"crossword-1.10"="468f516bid782g4626jqaiz2f4mjbrba";
+"crossword.doc-1.10"="p13jlddsa4j9mv6vw93hdaf1qswly7l5";
+"crossword.source-1.10"="ya7v7fhf9fykzh3lvl4v0cl1zrjrjyfa";
 "crosswrd-3.0"="66h0iyrwlpkjnasfa6yrc9wsia5cabj6";
 "crosswrd.doc-3.0"="2zik63fs6fqan2z5nxhwz081zpxg04y8";
 "crosswrd.source-3.0"="mi1kqgw3qcy4bj60pz8wl6ym6rf1i8z9";
@@ -1644,20 +1735,20 @@
 "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";
+"go-28628"="an0cdspxjbbirkz0isbyvknics2pmkmg";
+"go.doc-28628"="17frpsmqhyai4y23xb2zm9qsl18xmynf";
+"go.source-28628"="lw82s14fw0y1yfdhvmmhwy0msyawbcal";
 "hanoi-20120101"="ini1mf0dqm44vabqlqqiw52wpcx3qimh";
-"havannah-2019"="ypcxnwirfyjp28wypyz8gp6zysb26cn7";
-"havannah.doc-2019"="4spiw588y9cw8vvr2b81qp0q61kfbjjf";
-"havannah.source-2019"="jkbnv839cn0i9dnl2v0v9djp630cdzdk";
+"havannah-36348"="ypcxnwirfyjp28wypyz8gp6zysb26cn7";
+"havannah.doc-36348"="4spiw588y9cw8vvr2b81qp0q61kfbjjf";
+"havannah.source-36348"="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";
+"horoscop-1.01"="bmr14l8aq6wrxs3lf5ic3rfxr72krhsn";
+"horoscop.doc-1.01"="s4rhpszv9k8ayg2p734s5xhqi8kj7l9n";
+"horoscop.source-1.01"="1lxpnardb0sagmna2g9yxmkzr51whr5s";
 "jigsaw-0.1a"="vgmyhbyk2w98cw1ib5kfipsvnppmzdfk";
 "jigsaw.doc-0.1a"="wkl0n9cdf2bqamgwk8kw0b7cggfkjkmz";
 "labyrinth-1.0"="yafwn22imcs3827ilqkwh5kggfsvsk0s";
@@ -1666,18 +1757,24 @@
 "logicpuzzle.doc-2.5"="snzhcidhpnkjwbrb25lb9g18bc13bl5w";
 "musikui-1"="888sbpw1xvg39606w7xl7qy1f32n9vpc";
 "musikui.doc-1"="v9fa4l7bl6d4dcvcqz6nbpmz3js0jbvm";
+"nimsticks-1.1"="7vlx62bxfwrjva5gw3ghli91hk34lfn8";
+"nimsticks.doc-1.1"="ajzb6jb0whvhbdr9xcgd4mzs6x724da1";
+"nimsticks.source-1.1"="yw4h4jrh1flb6bgxv9287ckd01pc60cp";
 "onedown-1.4"="v4434vhkwq56himsgwymcjjm3812cn94";
 "onedown.doc-1.4"="sbz59m5fjy7gbgk8fgp3j2f8pj5dkq4j";
 "onedown.source-1.4"="a57mbsn5qc5qx4swvysy5m82qvnzcdyh";
-"othello-2019"="fp9s19jk73qrplyhjnicv8q066a98jli";
-"othello.doc-2019"="q1dqp0zdi9ixxchxnlk60zwfyszbx0ry";
+"othello-15878"="fp9s19jk73qrplyhjnicv8q066a98jli";
+"othello.doc-15878"="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";
+"realtranspose-1.1"="pkzqw0yhk215ddxwj6sjdss531vxdi0p";
+"realtranspose.doc-1.1"="cwxhdxg5gc939jifir67vin798qrcvb9";
+"realtranspose.source-1.1"="ynbps4pnm2ll3iqkhbqhsflpx0wsydk6";
+"reverxii.doc-24976"="2w8l7rs761h556il3d875k0sc86xll98";
 "rubik-5.0"="9wi8kxm1rfbqdmgd08bkfmmcrxh6qglv";
 "rubik.doc-5.0"="byp3r482d99yvd7wj0gw7sy8azki6srs";
 "rubik.source-5.0"="p25x3gpqgyq4hsvgksdspy16w6h593kr";
@@ -1688,8 +1785,8 @@
 "sgame.doc-2.15"="pm7psgqwg5prx0qfj6wh234raqw849wa";
 "skak-1.5.3"="0wa6kcvgwqz6cnjrf64x03hlbd7yppax";
 "skak.doc-1.5.3"="p8p72b9f2jll6hym1fzrymj7c122z42w";
-"skaknew-2019"="8by6yv9rgn4zbzlq0szcm4yvg8pqfaf6";
-"skaknew.doc-2019"="0p383qca6f0f56skhgvjcwprpb04gldj";
+"skaknew-20031"="8by6yv9rgn4zbzlq0szcm4yvg8pqfaf6";
+"skaknew.doc-20031"="0p383qca6f0f56skhgvjcwprpb04gldj";
 "soup-1.0.2"="6h4bpg774dpkaxg69k7cyr7pwffk490m";
 "soup.doc-1.0.2"="w67szbnb93rzkm2mznmid3cy5rxzghbs";
 "soup.source-1.0.2"="zna9fyn7n1p5rh2a9fqyvbvsj5pdc3vc";
@@ -1706,9 +1803,9 @@
 "xskak.source-1.5"="5z0q23fhwbxrz4jkfpc9ishdjnxn9k4m";
 "adtrees-1.1"="252iwghr89frhrnm3njrz1l0i1qsjq3q";
 "adtrees.doc-1.1"="4x26n2q1pwdxmwd1v15jp6mbrwwl9l7z";
-"bibleref-1.24"="nrzlxpr6dhr68yv7cxjpwidj0qmq8inr";
-"bibleref.doc-1.24"="30vxl5hvjx1bryz1y6wqpswngpwl89x7";
-"bibleref.source-1.24"="chcdsv415crk4h65vkycifd76n6d5srk";
+"bibleref-1.25"="yxh497yp2dqfy79xwsdbra3ajzf3lc16";
+"bibleref.doc-1.25"="dxbjr449ppxpacbj19dmm8jaklz2drdb";
+"bibleref.source-1.25"="0sflmvg5vbhkcc1cipviv1p1w1vy2wjc";
 "bibleref-lds-1.0"="adlzl3qk74vn1z0zdqn9cm6xqbwd8j6x";
 "bibleref-lds.doc-1.0"="cxvgzvgkicpnam43l53vfw9za8gigszv";
 "bibleref-lds.source-1.0"="8ndhf2vnjjii0xywr848janqh7xzdhn3";
@@ -1717,8 +1814,8 @@
 "bibleref-mouth.source-1.0"="drlwpv0xvyrb259ipq71p68929cmp6ka";
 "bibleref-parse-1.1"="ddxzanvw07cnj984ylsmjybwvyl41sg3";
 "bibleref-parse.doc-1.1"="jcsy831ih2d4scdsydj4m9mzlyahqlip";
-"covington-2.4"="l51kr389xhpiqw96kc6zhljb905y61qf";
-"covington.doc-2.4"="61xskdysxqxfyfsvjsc4s3vl08wczlmh";
+"covington-2.5"="qbjrq2akqpc1h5xkqv93hbfp0sjyghym";
+"covington.doc-2.5"="nfif3arnmkhfjnxm9fk1mjgsvm7ccf3q";
 "diadia-1.1"="p95dkjaf17pn4qm3syrd2wm4680qxa86";
 "diadia.doc-1.1"="s8q9nnwajrravg7418bldainfxpm874j";
 "dramatist-1.2e"="r8ldaql5igwpsv1bm35jgcgpnlr817m1";
@@ -1745,16 +1842,16 @@
 "eledmac.source-1.24.12"="kiqy5wz8qyzxxszhf6k37ricjh13asca";
 "expex-5.1b"="xl0jyizia4cwch1z399dl0r5xz4anxgy";
 "expex.doc-5.1b"="a903i8yj7kqr49jf3f40rrf74j4bn1cb";
-"gb4e-2019"="bzbpagrikdh6z5pbs416l090s559v7i5";
-"gb4e.doc-2019"="72mcbwb79gj584p24lpxbvvqj3pbr77x";
+"gb4e-19216"="bzbpagrikdh6z5pbs416l090s559v7i5";
+"gb4e.doc-19216"="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";
+"juraabbrev-15878"="mb4ikhwg3fjpdrsf8azzvy964gihs0ja";
+"juraabbrev.doc-15878"="i9w4ykaf8q152pc6zag4wykdlfvnkl0l";
+"juraabbrev.source-15878"="9ixz4m7y6cslk2977n0nh792nhqa6l6s";
 "juramisc-0.91"="w2nzviyg6498v4x8vqqp8kc9p2cr2fyb";
 "juramisc.doc-0.91"="0yczb9jcva6i9wvkdpwfd0l9c522krnc";
 "jurarsp-0.52"="bwldii418vmf3b37gnm56f65bzyjrfhj";
@@ -1767,8 +1864,8 @@
 "lexikon.doc-1.0c"="52hidkd52nx6dz7ga1lipv6r9l3kcnnh";
 "lexref-1.1a"="4av5iad393sb2vqplzfra63wl1g3pwpd";
 "lexref.doc-1.1a"="3nzknrs8c80yxhw9hf0qpzgx3lpj4hsg";
-"ling-macros-2019"="166zs29qcy5bs1ml9bl5q4ydvx15yhlz";
-"ling-macros.doc-2019"="7b31g3wp6vks8b3h01pf2ifnqgr1r1rn";
+"ling-macros-42268"="166zs29qcy5bs1ml9bl5q4ydvx15yhlz";
+"ling-macros.doc-42268"="7b31g3wp6vks8b3h01pf2ifnqgr1r1rn";
 "linguex-4.3"="srm8cr4dr0s29ydpvwf2mhm5gplgv18q";
 "linguex.doc-4.3"="w7jgr0hkj6m368p6x2l3b37m9px04b4f";
 "liturg-1.0"="73vvqhnk6ll3ibzl2gk7znkfm57k0286";
@@ -1777,48 +1874,51 @@
 "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";
+"nnext-0.0"="iaw7jnqig0pl9kzz2l1hrb1xgyzh1ng5";
+"nnext.doc-0.0"="2jdmhvjl1gl5jv8r4nyf40fjd8y9ha41";
+"nnext.source-0.0"="z5nx3gszv8s8zn1jf37ndb95bw564bmj";
+"parallel-15878"="d8gik6iva6h6l2imix4bxb5w9p8j87ka";
+"parallel.doc-15878"="n3dww00ms1a2m3v6fflm637hiazdrqrs";
+"parallel.source-15878"="vkx4q8liyqx0n70dpq6pqv515x1gbr7f";
+"parrun-15878"="3b2gnwqll6qf6x5f6gzh9ym1vsba6522";
+"parrun.doc-15878"="8v8338i5c6lcdgcdcwhfkb0d5brc3n2z";
+"parrun.source-15878"="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.141"="c8c6v3qgn0c4j1nr01xjljwnv8zaabxi";
-"poemscol.doc-3.141"="xxm7iqr2w99whqkai71da46m4avhbm03";
-"poemscol.source-3.141"="2p6xg20ig5z9w6g9ccvzybhn6z00ni8z";
+"plari-15878"="nhdf38fv3h24zqq0bzwax05bfvrzmx5z";
+"plari.doc-15878"="i09il1b9f8cchmhc9pj6ndngyym5vd4w";
+"plari.source-15878"="5n2x3k1mf9palhxxlqpqkffd3ms3zrfz";
+"play-15878"="r6ryb6v6svlfv9i9j6r2a7ciks2k53bv";
+"play.doc-15878"="b5kjgd2gvgz5228m98l3lhaawmdfp40h";
+"play.source-15878"="jk04llsraw9d9gl5grvr019rjnkha1h3";
+"poemscol-3.1415926"="rbzrrl2hp6z6cdh8q1846bpcxpfii7hb";
+"poemscol.doc-3.1415926"="fxgqcxh3pm74jx5fcpn7nd5ng3s7wj2q";
+"poemscol.source-3.1415926"="2821zah2libsq6sm7dca6rqnzv8f9z1n";
 "poetry-2.2"="2wypw6n5s3x2ml6dkk9khlp2672ipn21";
 "poetry.doc-2.2"="fslir5ibkqqdqlk4qsy094w3gz8dgj9j";
 "poetry.source-2.2"="jwly1fzi8kzgkvlnfc23yyy5bajd4rcz";
 "poetrytex-3.0.1"="a7a68naj2vngygl078qcy6qpyvgjqp87";
 "poetrytex.doc-3.0.1"="d7vp6y5vm8sw1vq3j723ksvivdk3v2a2";
 "poetrytex.source-3.0.1"="v4ynl1n0sgg2n5g0ya2ncm7k1fibfmgg";
-"qobitree-2019"="jxxsb3s665887m15a2v9q4ybdzc86x9k";
-"qobitree.doc-2019"="xi15qg62q42sgh4115gp2mcnv7nriwiz";
+"qobitree-15878"="jxxsb3s665887m15a2v9q4ybdzc86x9k";
+"qobitree.doc-15878"="xi15qg62q42sgh4115gp2mcnv7nriwiz";
 "qtree-3.1b"="d2wip0zniiihfnm77v0rzd95f4zvf9dp";
 "qtree.doc-3.1b"="pzpwi4bdw8sxhmyyx16g59nmi0zj8ijg";
-"reledmac-2.32.4"="5z5b3fqgyqhzf5gnv04ix9bn5y0b95l0";
-"reledmac.doc-2.32.4"="91g8qsqb3z1qslb6mp19ra1fz4pgj63s";
-"reledmac.source-2.32.4"="ybawm599f3j9plsyqrpk09y7qpx2gffd";
+"reledmac-2.37.2"="1al9yjm90gxnn35y0236mblihivknvix";
+"reledmac.doc-2.37.2"="jir8d789vhd5pnzz514yn53zpicjngkx";
+"reledmac.source-2.37.2"="a4j9013r2z8h0ziis9yfwcsbii0h7axy";
 "rrgtrees-1.1"="gijgmkpg84730ywfcangcf301kff14n5";
 "rrgtrees.doc-1.1"="l557gafpfn0vm4ajcaynvqf14axn1rrq";
 "rrgtrees.source-1.1"="al765qzv8rz1gd9dw672j29q1i27gf2y";
-"rtklage-2019"="j7v1rhi19ly8i5h2j306nvhnhp3wjx8p";
-"rtklage.doc-2019"="02dpc8m2pyxqmpvlls86k2gy0yp8gqyp";
+"rtklage-15878"="j7v1rhi19ly8i5h2j306nvhnhp3wjx8p";
+"rtklage.doc-15878"="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";
+"sides-15878"="4by0j8k8xj6baip7kdvjr5x3srvz4wbf";
+"sides.doc-15878"="7kcin18x8z42axnrmlqldkzqqbvsjzvl";
 "stage-1.01"="jl9zysnd3ji20yn23nifnqp8db9dcpvk";
 "stage.doc-1.01"="ffsgwdyyz5p24vd5lpb7sz2l8xzn98mk";
 "stage.source-1.01"="qf4hhfzpws1friwg89vq0sg25xp3jfwh";
@@ -1840,28 +1940,28 @@
 "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";
+"amiri-0.113"="adni51ibb0ncr4mq0iyw8n7l3i26xc96";
+"amiri.doc-0.113"="ns0vc8azw67pbp4ji5fhnb9cykyv1hkw";
 "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";
+"arabluatex-1.20"="d4sy69qxbzzvf8bw06sbza3w10kc6j41";
+"arabluatex.doc-1.20"="g79wb4gdmam96xwy99p13zvy85lrclqp";
+"arabluatex.source-1.20"="ccjykbnix38qi79my24y6af95vp90p1d";
 "arabtex-3.17"="fr7avfkwpdbx619kq7h1y31bx4nmkp5v";
 "arabtex.doc-3.17"="b5ng3w5g40m9c3x87nih862msx5nw292";
-"bidi-35.11"="i591q2r2gn7f5bxac3jnv1zpdv3igdwb";
-"bidi.doc-35.11"="g7iqspvwb11j1vdr4grv522lqhnz65yr";
-"bidi.source-35.11"="fj13w1zcvygq3zrwkd89y7la1nvw5b10";
+"bidi-36.3"="y2ak5p1n7zr5bwf73l27flhmk88z4z6f";
+"bidi.doc-36.3"="rfmpd089lv9ncssl7jz7z7zbc66wakmc";
+"bidi.source-36.3"="zr7wr35cs4byxqad31ayp4jw9pygmj7z";
 "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";
+"hvarabic-0.01"="66c7491ff4zaq9wg8n6m4k9dmi1lwvn9";
+"hvarabic.doc-0.01"="pqb9h9w5nw001cjpwxmd4pysg5f5z2xd";
 "imsproc-0.1"="ylf3kd1bc5rafzfyil4y7wxp6vd9nsm3";
 "imsproc.doc-0.1"="3kv8qk7pnfg2w7xm3lqcimi8vhx8jwf8";
 "kurdishlipsum-1.1"="8frakqhm5sfw4f9j514zh63la69nwnnr";
@@ -1873,197 +1973,264 @@
 "na-box.doc-1.0"="7s4wcsg6khlv2lgakqgph9livd38fil9";
 "persian-bib-0.9"="sakc18mdqnzymfvgkwsxvrjd9b5a7dqm";
 "persian-bib.doc-0.9"="q8vjf93qjdkm6qz099464mwdl4w4gjqi";
+"quran-1.81"="wl9rf9gszbgdkxyw3b5nsvg30n99ghrk";
+"quran.doc-1.81"="inrl5aligv0i1nsdr83xi77d8d7z9nyb";
 "sexam-1"="jlh6d5mzxqbnkn6yy963fnhc6rmggigl";
 "sexam.doc-1"="532l18ix2czx5r80ar4g7mqgdij4r5xx";
 "simurgh-0.01b"="n8bv87n12x5xv3h41487vyqpbigv3qkc";
 "simurgh.doc-0.01b"="z3qq4jx25qyxqmnfbpsdsayi59fkaff6";
+"texnegar-0.1e"="y3p8hjqik59ghy3rmm631q0n8w3kvz3c";
+"texnegar.doc-0.1e"="iid5b6qi935k83m0zx4xk3j77v3s1g70";
+"texnegar.source-0.1e"="d5qmlzswr3lwhncxm5rdwm9jd3a9w1hl";
 "tram-0.2"="7wcas9syxfvm8pc7wnp817zd9y4q941l";
 "tram.doc-0.2"="ppbq1g4k1swjv7y9qkqhcr0m25knssk5";
-"xepersian-22.8"="yszbfqn23qc4fhfxaryil11hq9hqkm1k";
-"xepersian.doc-22.8"="nrbarrbknnwjhij7p1g4qd3qv955241f";
-"xepersian.source-22.8"="n0mh6d4lxkfs1y8ln205jfpp9kwkcsak";
-"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";
+"xepersian-23.1"="mh90ip22b6gvwlgzvqjwm627ry1w5qyw";
+"xepersian.doc-23.1"="3h3gpv46vrjbxa8z22dqbs9bj6kqqb1h";
+"xepersian.source-23.1"="rdbcm72pjmdc7jwzy71pbbwj4qyz62i1";
+"xepersian-hm-1.1a"="rk613k655f9qqd6wz45b9ri269m9wqhj";
+"xepersian-hm.doc-1.1a"="r6mjv96j87z6m4hz24lyxgmfdh2ji9gm";
+"xepersian-hm.source-1.1a"="h1jshzla05j2zxpqp9c477vjy6y56cy7";
+"arphic-15878"="zfax00567h7mdlfkpxihy379cwqmy8ng";
+"arphic.doc-15878"="55lcjk7s78qa39dqd0wj0za5f6hcnkxd";
+"arphic-ttf-42675"="s5kckgwzz84bm3px9cmnw2zgvmaq27yh";
+"arphic-ttf.doc-42675"="s7y95hay8ygbb1viv250vkzf0wbm9s3b";
+"asymptote-by-example-zh-cn.doc-15878"="czm77scbklkpdjgk93w1g8ilchpx3vpr";
+"asymptote-faq-zh-cn.doc-15878"="yzyywm1hv1hs9ngddhdgk7frrpnrbsr8";
+"asymptote-manual-zh-cn.doc-15878"="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";
+"adobemapping-51787"="xcyk94x5n58vxnbw1j1wrkdizmwi6i74";
+"c90-54074"="jfyd605szid7j3a757fihxhlvaqvprdd";
+"c90.doc-54074"="1v14l7vqrdbc6nhg2k2gshq7p7cqzyk7";
+"c90.source-54074"="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-20200115.0"="baj3qgypvxrqvv1jba83h9rk91k3m0pg";
-"cjk-gs-integrate.doc-20200115.0"="n0sp50qg0p14df2qi4brl2cjv07lnggj";
-"cjk-gs-integrate.source-20200115.0"="scgfp18nqkcghsvw99khhw5x11zv693p";
+"garuda-c90-37677"="d9m07vl6glf3zjb44whqb3flsirwwcx1";
+"garuda-c90.source-37677"="rjy95hqlvbds6pn29r26kh8sshxnd21a";
+"fonts-tlwg-0.7.2"="62z2gg973bjm1b8byn4y6dr4s1jx8nf9";
+"fonts-tlwg.doc-0.7.2"="xc4wi0yfws579n2z42wssk8cg7m0ildc";
+"fonts-tlwg.source-0.7.2"="q2cjjk7ayzd38z130qnwqq6kz42n0x0i";
+"norasi-c90-37675"="d0972qmh7nk9isx54d46f7jscg6mwcrz";
+"norasi-c90.source-37675"="f0z1ppqy8szazpnwmg2ml8cgasdf5ivs";
+"uhc-16791"="viphfgiqfb1w9kb8103znmzy09n6i45n";
+"uhc.doc-16791"="hp3z13z2yxkrgr7z3qa8pyf4d98rd37z";
+"wadalab-42428"="cpc689ywzaqil8xz78nkzwx30qmqixh5";
+"wadalab.doc-42428"="9gjsw3c2hlxnc1wxvky9mmqi6dyq4i9j";
+"cjk-gs-integrate-20201206.0"="0llgl1xwswii91q704aj23r13xqfdcbf";
+"cjk-gs-integrate.doc-20201206.0"="8z9x8jgv4zw2nvb4v1k3k5cyl0xc337h";
+"cjk-gs-integrate.source-20201206.0"="scgfp18nqkcghsvw99khhw5x11zv693p";
 "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"="grwdzh1216qgniky55qv2r62r0rd65jg";
-"dnp-2019"="jf1zsbg60d074ksrz0xk9ihybbabda1f";
+"dnp-54074"="jf1zsbg60d074ksrz0xk9ihybbabda1f";
 "fixjfm-0.8"="r24s5c53wvxaacm4fmnmp10nl8096nlf";
 "fixjfm.doc-0.8"="inhixa1d1hr6s2473qp0hfchvcn84y45";
-"jfmutil-1.2.3"="grbbd61lx3b8nicqs2yxf3p131abr6bz";
-"jfmutil.doc-1.2.3"="4p1fz7gk04dnzjxvcmzc2gn3h3d7dv80";
+"jfmutil-1.3.1"="jwkdkj88h71dlwrh3rkvai7izbd6vhay";
+"jfmutil.doc-1.3.1"="iyfjshb9mpkvbcl6idb1ig1v1svxiwrk";
 "pxtatescale-0.4"="psd9rlxh4i4rqxgii61r2s43sqy3kibx";
 "pxtatescale.doc-0.4"="bfd49446kr82v3h06mq5hsm1ji2jwzck";
-"xcjk2uni-0.8"="sy7lqifnwc11sf0rzfj208rmlzmv9v2x";
-"xcjk2uni.doc-0.8"="03y9sam560xbp0px56glih05gagz050m";
-"xcjk2uni.source-0.8"="f9g23l42ry05xb3b73hf0vnbi6yg9wyr";
+"xcjk2uni-1.0"="d0p3wv968s8fmphawm91mph641nnb42j";
+"xcjk2uni.doc-1.0"="r25dksqp0cbmvj8912p0b1ydvywn4sz9";
+"xcjk2uni.source-1.0"="r4rlcadgrylpzdds14c0nf5y94yclhm8";
 "zxjafont-1.2"="jpj2xg53gz5k86p1aqc0czgbi2pp8yab";
 "zxjafont.doc-1.2"="8z7k507pgb7g4998rw2l53a1kydmp3xk";
-"ctex-2.4.16"="6g9cw6bbdrzpi6mq8is84qn3pwqc6dsn";
-"ctex.doc-2.4.16"="s7dcd31263b08w2yj86k24k68hbnv1lk";
-"ctex.source-2.4.16"="9cnkch1830v3n2fi6p5n8rjzi390yblc";
-"ms-2019"="1pl0q5d2rmp29raq2icpn03lfa7hynv9";
-"ms.doc-2019"="xwl23v3xbp7kahsh1d5lgjazbbbn91hm";
-"ms.source-2019"="9bmd1famkcmas9g2bb9mi0z6yjrlrqh7";
-"zhnumber-2.7"="p4mgbi2yl3p41xz7hxx2hdp1h4bvqym3";
-"zhnumber.doc-2.7"="7d4ff3ir4qp94ym2636463a369h29b0p";
-"zhnumber.source-2.7"="x2w9f8g02id3g450vhpqwp5nlphnsypj";
-"ctex-faq.doc-2019"="vjxcdrg7i6p9fgrgzfvykibjghpigrz3";
+"ctex-2.5.6"="pj0in9g9hyb9j1ik00k508zpzzqhd9x1";
+"ctex.doc-2.5.6"="xaykgqrkw6pi65mmkhnx1dqp36q7biwq";
+"ctex.source-2.5.6"="6ibbs70r9scz3vmlbcb323jk79fw99js";
+"beamer-3.62"="0dw0xsw0zi6bw8ibc3dyi6afjq8wygfk";
+"beamer.doc-3.62"="qxvvxwic302l46lfc206xh0wm5g2lwds";
+"pgf-3.1.8b"="hs9cw6pfxzc0cb77fyn1gs94l92jbs3l";
+"pgf.doc-3.1.8b"="is2s49v1mshmpwplajvx27mg9pz1z2gp";
+"pgf.source-3.1.8b"="axqhmadpaw4srzqcj65lg69dxjr0m45y";
+"fp-2.1d"="lxyxf8jkbgrkk43qbnr2s3ns19ihgmw5";
+"fp.doc-2.1d"="ih2kq6xp1nd5gs9bc9vhd34qa7jcj093";
+"ms-57473"="hl4w3vlawjyx92px0fp9mx8hs82q76ma";
+"ms.doc-57473"="36489y9m4b1jjbwsnj4222ci0vyy0cmm";
+"ms.source-57473"="zadiyqnszmpcxv29fihby7iks8ff8ndb";
+"xcolor-2.12"="d4hv07lqr1p36mkph8s45w93ykk2i0jg";
+"xcolor.doc-2.12"="50k9wrkrb7gaf8dhpq4gbsbyfpbm6dz6";
+"xcolor.source-2.12"="zgpsq8x4n6m23a9d1m5m06davpxv76id";
+"translator-1.12c"="ssck8ka8cgzvvgzy85ss6nlh51vp0pwc";
+"translator.doc-1.12c"="2zr5cvx3xagazcbgs04246cqaznqk6p9";
+"everyhook-1.2"="ndig4g0nsbqla2i2p1n6skjjxsr3qjhv";
+"everyhook.doc-1.2"="690qpw68wri4cr4ahv1xfqibm3flc5mr";
+"everyhook.source-1.2"="rvh60i8j1gbyal0pjpdgld9l5g20zilf";
 "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";
+"fontspec-2.7i"="vhqnyrgqlsg46f6wjpx5q1i4iisfgfnp";
+"fontspec.doc-2.7i"="9wl29gf9zhxp2bq6wvjl7sx4v5vdvfqy";
+"fontspec.source-2.7i"="yrl2big2r8zvflzawy8myggn8ahavz57";
+"euenc-0.1h"="fxp7k516ws4khaccirjxi8xszlif27y0";
+"euenc.doc-0.1h"="28lmb3y1m8dhl0n2r1gprmkrpxfmq134";
+"euenc.source-0.1h"="amsw2lpbcm2grnfch6cag6hyn957acv6";
+"xunicode-0.981"="ybvkdgz4sdl4nixzgz2rbmqfz7hwajv4";
+"xunicode.doc-0.981"="lydvg50dcpp0lk3m9niwdyf1vra61mgf";
+"luatexja-20210319.0"="vjvd2351hfw4ywaki5cwvzyvimd135ji";
+"luatexja.doc-20210319.0"="75x159pmavxg02f112yrf824ic821xjp";
+"luatexja.source-20210319.0"="yp79bqa3qy5zfzl6hzkk2mlyyk6brqh9";
+"luatexbase-1.3"="hjzprkfxz8i905ffdzfad0myg2ym4vg4";
+"luatexbase.doc-1.3"="3rnbzrql8m9ss0pk1yydy4v9acrk3qq0";
+"luatexbase.source-1.3"="v5x5csbgplvah43m8lbjky2nmfk2s3fp";
+"ctablestack-1.0"="cavlzn944q3fhha3i4kf8bgvm2y5zpdh";
+"ctablestack.doc-1.0"="g2d4fq9nl422i3i0skmlrydx6d3ks8cq";
+"ctablestack.source-1.0"="bqrksg21vxxki14v7sadnh35070f2vdy";
+"platex-tools-57729"="aa12libw6lj496qbnwr2rczb63243sj9";
+"platex-tools.doc-57729"="8bx09ch2yzl9lbj1qdcdbdji4yk0ngiv";
+"svn-prov-3.1862"="d5py1m0kjdzdx371fpvi66l80p92xp4i";
+"svn-prov.doc-3.1862"="kz3zma1cmbi2kxvn560vzl71n0pj5bvj";
+"svn-prov.source-3.1862"="xz3g6ljh9fk8vfla8c3asbzraqymnca4";
+"uplatex-57972"="xmk1pk5ck677acr534phb917ndhfxrwm";
+"uplatex.doc-57972"="9xhsqvqlpc1w3a7v70cbngqciypxccsc";
+"uplatex.source-57972"="jafq9dy7s19lhnzlbf13qrkdqdvcbjxs";
+"latex-base-dev-2021-05-01_pre-release_2"="rxrsbiy4j4i7lhfdfxis5wrbp724g6wg";
+"latex-base-dev.doc-2021-05-01_pre-release_2"="y2jqx7a8j5w49lp0fl52chpq7s4fhw5j";
+"latex-base-dev.source-2021-05-01_pre-release_2"="sg6kxfzdg7qk4cbdarbb6nh9wsdxspdq";
+"platex-57972"="6j25hw0pclda0nv6vzxh3h7n5pagljff";
+"platex.doc-57972"="1272xi3rpygxa4p0hmyraamri3n8q7b1";
+"platex.source-57972"="222g5xxj41aq3yn17dwdpb7i4x2dirch";
+"ptex.doc-57972"="bxq3agvnpadiii63nd4mzwz3x97i6z92";
+"ptex-base-56487"="25h63rcankqnc0phq3sr0dkxd57ws9vk";
+"ptex-base.doc-56487"="y0mqw72x8di4z9k0z9mnznw3sqyr34rs";
+"ptex-fonts-46940"="iqch8gk4nianpr01y03nl0zwp49bw1b4";
+"ptex-fonts.doc-46940"="ln071z7k84vqpdf72ngcn7s24hpkhazc";
+"uptex.doc-57972"="ia4psw870n0x76bygg3jsgmxryw4mrya";
+"uptex-base-56832"="ailz7gb71drgy7glh81731lnydbpkmwc";
+"uptex-base.doc-56832"="dsfdb6gnflgz1bdqv4dfm914scr7gxpk";
+"uptex-fonts-54045"="dlh3qw9bz67kldx14fqd7f9fb9gcgcah";
+"uptex-fonts.doc-54045"="fx7gncl6m75n5pi7y00qprwmvgp978n4";
+"xecjk-3.8.6"="3jp1b8rf5ncm0wm7gcwh9n1ccnncyyws";
+"xecjk.doc-3.8.6"="q82p0svfc3m40rg63frhijslapvch7zs";
+"xecjk.source-3.8.6"="h75n0pid7fhjhwl589nzhljya2wck3zn";
+"xpinyin-2.9"="1m2kq41z483px431dxn4w33kjqm50hcc";
+"xpinyin.doc-2.9"="dal70z1n0yv7j7k62rdzyj26ijnfsngj";
+"xpinyin.source-2.9"="13njiqkx26j9q98hcz4aklsr3wwlzj6l";
+"zhmetrics-r206"="2li2anrf74242blfd59cxfyn13iwmfxs";
+"zhmetrics.doc-r206"="njh801caaxkfyw5nsfv3q36gkcql14pj";
+"zhmetrics.source-r206"="ls3gazkf44sdal0f0k8n46ml2fgigfsm";
+"zhmetrics-uptex-1.0"="d3r2n6ndjd8zsmlq4hgm1x3gvyvrfnc1";
+"zhmetrics-uptex.doc-1.0"="qqzvr4mf5fg5r8bg6j87yk94nznhrscl";
+"zhnumber-2.8"="s59rjf8x0clsdb8zc8a689bd9fdz199f";
+"zhnumber.doc-2.8"="n51wjppbhl8njhyh28b456gd14507mwl";
+"zhnumber.source-2.8"="fi0gjxssiyvdqib93gyya54jdj3dm3m1";
+"ctex-faq.doc-15878"="vjxcdrg7i6p9fgrgzfvykibjghpigrz3";
+"fduthesis-0.7e"="2fnpghx8zi0g62hkh8rsf1p3yr49rkg8";
+"fduthesis.doc-0.7e"="h0595l673dhl5wxpsnc6yd0ga9cgj4mm";
+"fduthesis.source-0.7e"="40fiw5f3xjz72rmls35aqwyvy58v5q1m";
+"hyphen-chinese-58652"="0y3spz5k8inrr78a2fsqr2g5wcj081fp";
+"impatient-cn.doc-2020"="8k1gcnqs5gghbarikj17ykh4vgahpqbw";
+"install-latex-guide-zh-cn.doc-2021.2.1"="65xcpzjsb2l4rn77x1hvy1v8ly8h8m4p";
 "latex-notes-zh-cn.doc-1.20"="qx777fwi8k06qvknnll3crc1j0yvraxs";
-"lshort-chinese.doc-6.01"="8x6ywzqcixiznmqd4d86gib8iii9mfv7";
-"nanicolle-2.01"="9rpch3hn0y8gbxa4wpiyj4gady989ip9";
-"nanicolle.doc-2.01"="30rgdanih3dpmylr5byma5r7yymwb332";
+"lshort-chinese.doc-6.02"="67pcgs0daq1ns0kpk1bml43d5zsgwbl1";
+"nanicolle-2.03y"="5rvjbz93d55qcywbg7dkh231bsc82xzq";
+"nanicolle.doc-2.03y"="mqmmdchqbviyvf9yrldi832wxxwvv8mi";
 "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";
+"pgfornament-han-54191"="906lp285f9mscdc9p40j40zl26ifvbh7";
+"pgfornament-han.doc-54191"="77f050rip24vfjcbylda57chh16n4vfy";
+"qyxf-book-3.1.0"="lik9idqmk4knwcxxcjq7ikk5mlmx04r1";
+"qyxf-book.doc-3.1.0"="hk95p2hadjid72c01l3j22c2ql1zc0pk";
+"texlive-zh-cn.doc-54490"="n9ggsbqa36114fyiwwwxc0g3gjj7hlm0";
 "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";
-"zhspacing-2019"="p7w7cisgid16ndk1mipdmpn5v7nc1kzf";
-"zhspacing.doc-2019"="kjnyalnxmb2f0kj8w52nvm97a9m1dfsa";
+"zhlipsum-1.2.0"="6k0zvvxyd7cl8w9w41sf5fyaw499fk5a";
+"zhlipsum.doc-1.2.0"="w902mfaj6jd9llypk8mpldrqliwp8lb1";
+"zhlipsum.source-1.2.0"="lwr47ka88vcnixpj0s8yi2jcvbcsfhp5";
+"zhspacing-41145"="p7w7cisgid16ndk1mipdmpn5v7nc1kzf";
+"zhspacing.doc-41145"="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-russian-1.3m"="45wh2zj7i47dlprkf8f3lh70vshggrr6";
+"babel-russian.doc-1.3m"="b8warwk39s2javg6d5jhgkg2bv5d279y";
+"babel-russian.source-1.3m"="31nl55d006ajphcvpb8xkhv80460hxzp";
 "babel-serbian-2.0a"="qz0klmzp380x2sn97v6ca1hjpir9fxmk";
 "babel-serbian.doc-2.0a"="5s29smlmhqrx68ra2k6mqvw5lffclbb7";
 "babel-serbian.source-2.0a"="6gp84lpbncbd2775nfac1zg86034a7i9";
 "babel-serbianc-3.0a"="rxrc15zajz0g5gzczw5k7kid3g3fisxm";
 "babel-serbianc.doc-3.0a"="bid4np071hjbaplxq8pvxggwifky0y8d";
 "babel-serbianc.source-3.0a"="wa836abk9b2z4r5zxfzyj6z3d6wzfvjm";
-"babel-ukrainian-1.4c"="zkrzqv0a32c8dm30bin1axbkd1i7fxlm";
-"babel-ukrainian.doc-1.4c"="vj7acrkzm3cdby2aczcancag1y6swvl0";
-"babel-ukrainian.source-1.4c"="yh5qaricqrn5lmvrz9vdycbr5y2lpmr2";
+"babel-ukrainian-1.4e"="v4xihfkgfn5dr5lncrk0rrchwviakhjr";
+"babel-ukrainian.doc-1.4e"="gdyd3xlx328rpb68mcdvhbdvk9xfv6x1";
+"babel-ukrainian.source-1.4e"="5ir7vrg6inyzrph1za72cdlqml2c0nrs";
 "churchslavonic-0.2.1"="5pgxy858w0nr769mn4g6832fc0687vfp";
 "churchslavonic.doc-0.2.1"="pz4wqhar8vfzyy8aw4szas78hqs018lw";
-"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";
+"hyphen-churchslavonic-58609"="rqvkjdq3d885w875nmjppgbsjryzm219";
+"cmcyr-39273"="ba4hsn5a22k73rhiaip6dv560wk5sxv1";
+"cmcyr.doc-39273"="1j63xbl85z8izha2jl2klagny3hk5wf3";
+"cyrplain-45692"="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";
+"eskd-15878"="63ack7kfjg5gf6xv76yfla2z0k9cxzv7";
+"eskd.doc-15878"="g3wsmrvwfz2lm30w2fys9md9nqv5k8jq";
+"eskd.source-15878"="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";
+"gost-1.2l"="zi0spr9mfkb7614db7sllcdvszp5i1fd";
+"gost.doc-1.2l"="cacamlxjq0cdbf6hsmz7rbjnqprypsj3";
+"gost.source-1.2l"="qrpn9sfsnd29k3ifsz330sdy6466s5i1";
+"hyphen-belarusian-58652"="b68ndw66wjbfzszngfh6ap5w6l5pbx94";
+"hyphen-bulgarian-58685"="ajyx5jdbnv28xyfax1pxkli0zcgrwpw9";
+"hyphen-mongolian-58652"="i8743jhpnls80lpvr5z1b8vrxrwn08vh";
+"hyphen-russian-58609"="rq74qi9km5vnlnw0pkck6w67gv5qqsaw";
 "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";
+"hyphen-serbian-1.0a"="asv8n6dxr7rinn451qdj3j0hq5pw0515";
+"hyphen-ukrainian-58652"="fzjs5a9ny9wl3bisyxj8pdfqwpi9ggvc";
+"ukrhyph-21081"="l60kvxf1mii3imnl0swqskcrz0bizb5v";
+"ukrhyph.doc-21081"="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";
+"lhcyr-31795"="3nj4zxpcahn2ryz47v7nh4k05j1lv6di";
+"lhcyr.source-31795"="kvid1h3vgbzmpn65sdjs0b8dspm5xvyh";
+"lshort-bulgarian.doc-15878"="r2yc6zzq44wddndp762a3hg78ihv013l";
 "lshort-mongol.doc-4.26"="5pj0i8wxlyd35sd3z7npwypicklc0nl3";
-"lshort-russian.doc-2019"="d2sgyyi8aic1j35fqrniim2bcpgk4q0a";
+"lshort-russian.doc-55643"="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-54080"="bzgl9s6zv9fqpg5m9gicxmpscw7m3z1d";
+"cbfonts.doc-54080"="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";
+"numnameru-44895"="c3fn4n2asbh2lqrn9y44g6yxad9f7469";
+"numnameru.doc-44895"="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"="ma7sgiv7vs6hn079dja88y9mxlqvqz3l";
-"serbian-lig.doc-2019"="5g0vzcvnixv1l624fkwny623ylcd1lx5";
-"t2-2019"="ihwn58py69fx1fx2bjqwyg8caiwwlpy6";
-"t2.doc-2019"="gsqrf898i59wsxcm8b06qfrasfw335r4";
-"texlive-ru.doc-2019"="rqajnqrdlq0n42kkkgp49c8si4bsfgd4";
-"texlive-sr.doc-2019"="2igvdhhhfksk0360cl4vmx1z27xbn8fh";
+"russ-25209"="981kkq2xmx0r6k095308270hjvmdsm3h";
+"russ.doc-25209"="878fl0cyka7jj5cvdvq19fvlfic3izi9";
+"serbian-apostrophe-23799"="q4n9k2fn70hxcf9chy6a5jw07pq2cllp";
+"serbian-apostrophe.doc-23799"="0yxbbv3xz0jf63g0kvq5dbdv2myc4rks";
+"serbian-date-lat-23446"="3s5yc0xcg6fsaisn7aq0nv16fj69wmws";
+"serbian-date-lat.doc-23446"="pa9rvzpbczmfm4w0977xx05c5sbl6mxg";
+"serbian-def-cyr-23734"="k46ahhqbdg23mx4ld0953dnsws1imhwm";
+"serbian-def-cyr.doc-23734"="zl8x855zmhry6n754l5x9fz8hjn27bls";
+"serbian-lig-53127"="ma7sgiv7vs6hn079dja88y9mxlqvqz3l";
+"serbian-lig.doc-53127"="5g0vzcvnixv1l624fkwny623ylcd1lx5";
+"t2-47870"="ihwn58py69fx1fx2bjqwyg8caiwwlpy6";
+"t2.doc-47870"="gsqrf898i59wsxcm8b06qfrasfw335r4";
+"texlive-ru.doc-58426"="lmadilyvb5n1kqcl3md67jrlbp1j6fkr";
+"texlive-sr.doc-54594"="jrw83yqirmpvyn2mycav8dv82qsp58yj";
 "xecyrmongolian-1.0"="4rvsdnk1gbf9vrchlibyj93dzpdv1idn";
 "xecyrmongolian.doc-1.0"="c7pwfb8v7gv115m3igbsr233ms6cyvp3";
 "xecyrmongolian.source-1.0"="f3wj75g0zwivr3xld918hmpcyl6vs6j8";
@@ -2073,97 +2240,98 @@
 "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"="jmvm7398s7cspfy1xhv4p4dwy9igb5g9";
+"cnbwp-32550"="whwdam81dc6g8pq664mrmnbxz4f0iwdj";
+"cnbwp.doc-32550"="qv1fxhmq1pig9rq3swhvwlwpm4lmwrjy";
+"cs-41553"="ks76xw08rrkrcxg7rv72w18glx2vncfk";
+"csbulletin-54433"="yc0z0nyy6mmlwrn711j3gkpm5afa6ljx";
+"csbulletin.doc-54433"="andx6r2719a1pfg044bclvha66vrcc1z";
+"cslatex-57972"="4gf3lz23hvrqgqbvpnq2wc3bwrb2jdkh";
+"cslatex.doc-57972"="dm5igdwbqzbya4p7bjsfsawbl1ywamzv";
+"cslatex.source-57972"="fmrx0y2xnxcdczhbqyrh7w70wh7mrccq";
+"csplain-Mar._2021"="cdwmcx5x38dz526nqaiaqj6lvs74rncw";
 "luatex85-1.4"="ka3px4aiyi8gq487i085s31y9l95jzp1";
 "luatex85.doc-1.4"="ac2agmy9dkavln2vnd63fmavv7xnkdrw";
 "luatex85.source-1.4"="wpm4dw7j6fikz3dqa4zk3r5avg4isxr8";
-"cstex.doc-2019"="j79hy3j4ycqdplybfzyvn96g94gds3mw";
-"hyphen-czech-2019"="qkh3d1nadwn280p26vx73lw1mm04hyag";
-"hyphen-slovak-2019"="hd7bxmv96ilfpaccvm8fn9rhllriv1h0";
+"cstex.doc-58354"="pdlnmgvblcf8kxpjck7pb4wq2r3gdciz";
+"hyphen-czech-58609"="4lmcwq9yfkwn19q1h02cfdks257ayafh";
+"hyphen-slovak-58609"="0f7nnjxmh30rngkqqzfm85m2dmnxm1k0";
 "lshort-czech.doc-4.27"="2z8dygvm9ilvahsx005zb7z5ss8hxbsf";
-"lshort-slovak.doc-2019"="qnj433q5hfg9cpy0z281zq17z7dr5vh9";
-"texlive-cz.doc-2019"="4pfpprl68pd6cdfb3lzmxjn8d74lpgz2";
-"vlna.doc-2019"="f3wz8jy4vbrb3bhk9ly7fdkipwfqixbc";
+"lshort-slovak.doc-15878"="qnj433q5hfg9cpy0z281zq17z7dr5vh9";
+"texlive-cz.doc-54496"="cpk8nbi6hb193lwb1bfmg98qp75khp2d";
+"vlna.doc-54074"="f3wz8jy4vbrb3bhk9ly7fdkipwfqixbc";
 "MemoirChapStyles.doc-1.7e"="r54d4g3nh30k5x99nfphvzg7k1jxrijn";
 "Type1fonts.doc-2.14"="jgjs1127jqdrrgnkv3r8p1wirc8lb2gl";
-"amscls-doc.doc-2019"="4hsr68pmd3v06fnxiynmp4xpgik6v8g2";
+"amiweb2c-guide.doc-1.0"="w9jm6mjivcml5swz9v14jrc7amyzkw3p";
+"amscls-doc.doc-46110"="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";
+"around-the-bend.doc-15878"="a6jilpw0nw27vlj1shnhxfv92yn86ys2";
+"ascii-chart.doc-20536"="9x2srgi2sjd6zjjz27p6hs1w9sj73bcx";
+"biblatex-cheatsheet.doc-44685"="vcmb6x1w0cfgvyx0hl8fsv1nh2ffhg6g";
+"components-of-TeX.doc-15878"="7sc5ryfj785jifvw9b44yni2ifmssr7f";
+"comprehensive.doc-13.0"="c4y3bgj3r97vy17qbdakmdcmcvm7xbqw";
+"dickimaw.doc-32925"="jqva0skw6ivc4ikc8m7awd7pgfaxgci7";
+"docsurvey.doc-57362"="xdh4p4sw3hdgnik9l76blfczvfda4ws5";
 "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";
+"first-latex-doc.doc-15878"="8vcday36pq5hlr075kjk6hb82ypazjd9";
+"forest-quickstart.doc-55688"="g08gcf8sk0kkn6jifvx355slh3lvbr6l";
+"gentle.doc-15878"="mpxhsl7g4za410b65awmbb5zlc58h24n";
+"guide-to-latex.doc-45712"="8lw0kcinfq2yd6vkbd531zakby60k2wf";
 "happy4th.doc-20120102"="svmy37c032cvip73n4b98c8kh4hvnh9g";
-"hyphen-english-2019"="9hjwbxk2jphca1g8b561gpfhqm9g95s4";
-"impatient.doc-2019"="k5gz1ihjchagbwmr4g3l0rbdm470nn42";
+"hyphen-english-58609"="6v8rhjy3pajym7ffgmzq3rfcvhkgllkn";
+"impatient.doc-2020"="k5gz1ihjchagbwmr4g3l0rbdm470nn42";
 "intro-scientific.doc-5th_edition"="qx170vpq4ahipljnmhkvbrxv1xdbbii6";
-"knuth.doc-2019"="2w5hzwaxcl1i2pp3ms0kshmza0p5nqi6";
-"knuth.source-2019"="6dr6qqw0ih676vxc0rj6qgjc0zpac89p";
+"knuth-errata.doc-58682"="j6din2w33ghgz7a10la5w480b3lii31l";
+"knuth-pdf.doc-1.1"="ch4x6j13x8gp37phd1zwp258k2ykag02";
 "l2tabu-english.doc-1.8.5.7"="j7m684bvmpv1jaa6s856dj9aknrwlqiq";
-"latex-brochure.doc-2019"="azp69yf9xkksqan9n096wabgxlk9hgsn";
+"latex-brochure.doc-40612"="azp69yf9xkksqan9n096wabgxlk9hgsn";
 "latex-course.doc-2"="km59hhadaad0hlpa07rqmx91036h123r";
-"latex-doc-ptr.doc-2019"="1dsc8ym34nlj315aln3npfibx37n9c3z";
-"latex-graphics-companion.doc-2019"="70mixdsyyx6jf6dc46qp5kgyx9qwkma2";
+"latex-doc-ptr.doc-57311"="2ckpyrc8nls1jxlpnpg4g9rnw91djc2y";
+"latex-graphics-companion.doc-29235"="70mixdsyyx6jf6dc46qp5kgyx9qwkma2";
 "latex-refsheet.doc-1.2"="9gvmiiqg78xn8348cymz3wfzi45mf8xz";
-"latex-veryshortguide.doc-2019"="mil8qpv4ka19wym6cqz3r5np3n7nzw5r";
-"latex-web-companion.doc-2019"="wzj6qw8bhwr82ipsph640ya62mpj6k3r";
-"latex2e-help-texinfo.doc-2019"="jmg3aygadzdj3jvdsd26rvg9ipjbwq7d";
+"latex-veryshortguide.doc-0.7"="dv3ikj9drgivpsapvl9jpkbww3h839ya";
+"latex-web-companion.doc-29349"="wzj6qw8bhwr82ipsph640ya62mpj6k3r";
+"latex2e-help-texinfo.doc-57213"="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";
+"lshort-english.doc-6.4"="yjrqmrmxrzynpadsdaja2shqyivd05cz";
 "macros2e-0.4a"="5kjjl3wkq04kshrlrrz4qqb4m61mz4lf";
 "macros2e.doc-0.4a"="9rgjs3scm8wavsbgljxy7rpgdwy3nsl7";
-"math-e.doc-2019"="jl3c0l594dii8wjylbc9nmaw6bqkmxvy";
-"math-into-latex-4.doc-2019"="0k2w8mjvn4h6jplrks9mxj6m1bnfmlz0";
+"math-into-latex-4.doc-44131"="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";
+"memdesign.doc-48664"="92v86h91snhrnssghhllvr0h05cacpm4";
+"metafont-beginners.doc-29803"="7ql41977dp698l2fjlq2xyf221y6xn2f";
+"metapost-examples.doc-15878"="ljbvw9v7xilmkzmifm1vx18dfvqlw6k6";
+"patgen2-tutorial.doc-16490"="3wv4sk7yw0mpy0rsd1j04m8mqsbi465n";
+"pictexsum.doc-24965"="mcxxxznqh0a94sip9vpdbjv5nv83j66s";
+"plain-doc.doc-28424"="5bqxdfbl4fvgvw42033vg9w3kjn7pn49";
 "short-math-guide.doc-2.0"="34mdd47c63946iz86c2r0g2jx11q4mhc";
-"simplified-latex.doc-2019"="mmxjkyv4x0am911mkxmjs1l5ql5z19h9";
-"svg-inkscape.doc-2019"="l8vizn8al3rzgxxamdfqm6hsrh46xm8m";
-"tabulars-e.doc-1.0"="3vrlw3x3h5k0awnns1q06bwzl3ff6mpw";
+"simplified-latex.doc-20620"="mmxjkyv4x0am911mkxmjs1l5ql5z19h9";
+"startlatex2e.doc-56809"="hd5dhdc0klww7vhrn0q0d77lr3frlcw3";
+"svg-inkscape.doc-32199"="l8vizn8al3rzgxxamdfqm6hsrh46xm8m";
 "tamethebeast.doc-1.4"="14cs89g2l3bn3xhfrhrw9pfdf65c2xcy";
 "tds.doc-1.1"="fmmdgblpf26x9ajn16g024sn5sbwwy0s";
 "tex-font-errors-cheatsheet.doc-0.1"="4a38bjpzdbj91msw8kaxmk3c6qahq1r5";
+"tex-nutshell.doc-0.6"="63x33mvz12vg7srrhcdbq8jbcz611zla";
 "tex-overview.doc-0.2"="bj9pak1z31fwblcv5bj2imd4p33bi79s";
 "tex-refs.doc-0.4.8"="ad80b3r5rgj7n4m2hc5r6ccjczikff3v";
-"texbytopic.doc-2019"="vcr4rwfg8m85mrlsp0hg3ic0gmd0zcdw";
+"texbytopic.doc-15878"="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"="4ljbfwhzmwq71nfgqfkijqa27hsd3y2i";
+"titlepages.doc-19457"="g0fvssp703yk3c2icdb8qgalxikm0xq9";
+"tlc2.doc-26096"="k8qb9ak5wx7k4c4j5g5i681di8cc8p5s";
+"tlmgrbasics.doc-56221"="cp4cwr8k9sjq58mm67qf23swal2jqaah";
+"undergradmath.doc-57286"="58rd10vaavwf003gq73yk82hlxzmvcva";
+"visualfaq.doc-38647"="mdskjr2m6y0ljhczhqmfm50xsv8x4k1m";
+"webguide.doc-25813"="xbp0q21rqfq5gmckdfkc671kbr6gj1n8";
+"xetexref.doc-56291"="4ljbfwhzmwq71nfgqfkijqa27hsd3y2i";
 "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-albanian-1.0d"="yqrwj8mb7773j1svwl5chhxg15rqskxh";
+"babel-albanian.doc-1.0d"="fpsfzmk847y3c6q5jq42dqz4sfm54yvs";
+"babel-albanian.source-1.0d"="xii1mv9hbv4f7xd1c13rxn53v99bjxnw";
 "babel-bosnian-1.1"="l6pdr8hm15swhzxx5ly2rd24jnscsyiz";
 "babel-bosnian.doc-1.1"="gahvgi7r3rs553pi00l1q33k3bz59pqa";
 "babel-bosnian.source-1.1"="idi2fhr3wfq31pz63d3fi0zkjm58gzxi";
@@ -2173,18 +2341,18 @@
 "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-danish-1.3s"="nwah0savjlvkk3q4f20hzw026pfd8rmy";
+"babel-danish.doc-1.3s"="q3mv2kx9b526span0xkmsj2mgqx615lq";
+"babel-danish.source-1.3s"="g0wrjd3n0pfmy4xzqbpv2mjm66wlzbym";
+"babel-dutch-3.8j"="4x9m1a08si80i831sgbgjnaa88bfvafp";
+"babel-dutch.doc-3.8j"="l3pigzhgp2jlb9dir38vnbkgkb0ji1xf";
+"babel-dutch.source-3.8j"="cx1l3xndvpvjins8f1rz4z3pqq86rwi9";
 "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-finnish-1.3s"="wsh1av6jah69rsdz5pgy1mbfblvlfv3i";
+"babel-finnish.doc-1.3s"="i4fbbjfa0bcb4b7yb2hsk9jr19np7ixk";
+"babel-finnish.source-1.3s"="5ycx90jfzs1y0skk0c9r2qlix87hq0xv";
 "babel-friulan-1.3"="xjbsgl2xyfqfrdyv83c6g5h2qnjzw7vf";
 "babel-friulan.doc-1.3"="m4n4fysx9qxf13c39jm4xq624y6jkagd";
 "babel-friulan.source-1.3"="yf6xqza856qdbxdysw08v707h0pcj7sq";
@@ -2205,9 +2373,9 @@
 "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-macedonian-39587"="y443c0n5dygb6pf923kwj4fv8y991gg7";
+"babel-macedonian.doc-39587"="gk8d4ijhz5dhnlv9jdc6v48fm9zfcai6";
+"babel-macedonian.source-39587"="jfr605jrv1sywgpkhi05v6n6s96vfyq2";
 "babel-norsk-2.0i"="3a2xqwwyj2pv7ndgaxk11wvb7qanc9qk";
 "babel-norsk.doc-2.0i"="dhi39fgchh0ll1hl2si5qgygi2qsg8bj";
 "babel-norsk.source-2.0i"="qyx1rcxw0zghnc8wrh94yr9i5jkh142k";
@@ -2217,89 +2385,95 @@
 "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-romanian-1.2m"="3llj7gmcw97x5spxf6j6qnag8xq011qv";
+"babel-romanian.doc-1.2m"="8y24zvykyn1nkdhmx0zw7jvmq09b2vbd";
+"babel-romanian.source-1.2m"="7dygndckqg9a0mk6lm788n1iqnhnh2qm";
+"babel-romansh-30286"="2k6ik89i06j3l29bl8yp7dbm79qgzcb3";
+"babel-romansh.doc-30286"="risjnmxysc7r7va4f3mapz7kvxi01xc9";
+"babel-romansh.source-30286"="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-slovenian-1.2n"="k9mwn2rv7dwm6cinhmhgp7xbkjf9c9rg";
+"babel-slovenian.doc-1.2n"="frkal3wzi4svfdfh7hwrfs4j34wfxbnv";
+"babel-slovenian.source-1.2n"="4rqpsks512vp6dkxnxhd0qp8hdsdd4kv";
+"babel-swedish-2.3e"="cm247dcxa00d3fwnfga09pkixp3q69sh";
+"babel-swedish.doc-2.3e"="zj7qbwmxql2v4zy1ax5xrfvwyjwnycpv";
+"babel-swedish.source-2.3e"="wbx3jh5cy31lwjyf4qqb0gryysy88pqg";
 "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";
+"finbib-15878"="aja1ihjvva3aa86xi1f8d563xvlcj5mb";
 "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";
+"hulipsum-1.1"="1glcsnk30qpbxcd522vi4ddnhk3zdqym";
+"hulipsum.doc-1.1"="py5pklwmr7i1w63rhkysxw5s312i22fn";
+"hulipsum.source-1.1"="m7il2x4h4zwivgzxq9zzlc57xdd64m54";
+"hyphen-croatian-58652"="xfaba9fc5nc5d6akg9dbzanhs5ik03j0";
+"hyphen-danish-58652"="cc3hb52djljnrsgvv799hb0iwi4by441";
+"hyphen-dutch-1.1"="6aab3qr3i70ky09w256l8rdpkr1hs40r";
+"hyphen-estonian-58652"="z0z3kj73bc54sbhwnaills2ck8a4grb4";
+"hyphen-finnish-58652"="klp5hh931n7lhh607sh8apdna27rn5vg";
+"hyphen-friulan-58652"="kdi4b0wkraiv1h35ll25lnr5bbqii38i";
+"hyphen-hungarian-58652"="8bl805dn05g0bwkwyh2xcih8nh67vkfc";
+"hyphen-hungarian.doc-58652"="ycdkj87kpnvaxc5szx0vcacy8rg6i7lj";
+"hyphen-icelandic-58652"="35qvciy9gvnsva5iwxvrbwblcbwyr4fa";
+"hyphen-irish-58609"="6xh0w7ch63zrrima22k2gqc28n11wigg";
+"hyphen-kurmanji-58652"="inifz54iax8z7hw7zvalp5zcc31dr3nz";
+"hyphen-latin-3.1"="wvhrxyl61wpl04izij0g7464phxhygic";
+"hyphen-latvian-58652"="livlv0vqfzrppski6i8m437q0fc12scn";
+"hyphen-lithuanian-58652"="bfdnrgdz8cb239apy8136asp6fakcppn";
+"hyphen-macedonian-58652"="2gridvcfsj4l3sdsfcwsjh52qb4hl5mw";
+"hyphen-norwegian-58609"="8zyqcrxlbi88mlw8qjcg8ssng98dzv42";
+"hyphen-occitan-58652"="4bxv588sldpqy12m8b8yzy04pxlw5wpq";
+"hyphen-piedmontese-58652"="6m6d7h8g2dlxv68pqq9d057mz7y8l865";
+"hyphen-romanian-58652"="hp1fdvm0b9rk4lk6cfr0qzilz94vcn0s";
+"hyphen-romansh-58652"="dsskfiivm7191gpl79017x20xrkqmbyy";
+"hyphen-slovenian-58652"="81kfnmpf3mc4wa6fir8dxac6ly3iiwph";
+"hyphen-swedish-58652"="zs6knrma5ngdr03fmhjc9qy25225yryj";
+"hyphen-turkish-58652"="bqwi6m8j33p54dii3i6a7hvs07swlsvs";
+"hyphen-turkish.source-58652"="4xv9azgkq91m4afsp9kvsq0f9ajxqfvl";
+"hyphen-uppersorbian-58609"="vfms8wd9mx5sx0phc8l56k3rmlas9rh9";
+"hyphen-welsh-58652"="r7k8sgvxdd3bnclyprwj3idpf06j09gc";
+"lithuanian-46039"="p7vd2rv8md0a1gnyd9jj1ill09dfxmk1";
+"lithuanian.doc-46039"="x4nf13nhkbrn2cnn9gi06zavch8hjr4r";
 "lshort-dutch.doc-1.3"="rswbmzd9fkb0bwbc054pb0raa8zv2lfx";
 "lshort-estonian.doc-5.05"="2xqk5n14f2lizqdisir199mark4y5v2k";
-"lshort-finnish.doc-2019"="5jp8rkaw7qvrv8mpdnbmhg0m53566n8c";
+"lshort-finnish.doc-15878"="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";
+"rojud-1.2"="z3b1grijbh986rpa49fncmfwj3lkjmcs";
+"rojud.doc-1.2"="xv1iy0filv53va4r8f99710ahb8cd0h1";
+"swebib-15878"="5z0719m62712flc3ylrnp5223gbsk98n";
+"swebib.doc-15878"="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";
+"aeguill-15878"="2qlipazg1v8pj58aym9zwqqzfvprw29f";
+"aeguill.doc-15878"="q4gvvin01hkwmcc2llrkd61pr6dsmwp8";
+"annee-scolaire-1.6"="r0kwlnx1bhflkj35dwz9malgjhjhf3fy";
+"annee-scolaire.doc-1.6"="3rc70b93ciiw5r7mq5rpfd933ccbvh7p";
+"annee-scolaire.source-1.6"="jbl0zrqvrndbvpdn52lm212b95bv9k86";
+"apprendre-a-programmer-en-tex.doc-57179"="x4qrlzv0s9prq4hjb20kn0dcff7xmgzv";
 "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.5g"="mph80ppj24amr2jb3ki5lb0q0ny3j83g";
-"babel-french.doc-3.5g"="7slh9h3z1rbhixxgc5d3kvm9s30f9jqf";
-"babel-french.source-3.5g"="i2cadr2nn2i72r1a8cbvvx5fbhq2xqbq";
+"babel-french-3.5l"="sl1vn19njwbvy86dsx3xcixvc5kx925r";
+"babel-french.doc-3.5l"="mh277xcfj2lql9dpqfwr5ms75fslk290";
+"babel-french.source-3.5l"="rrgl05jg8dsdn292cz2pwr6mm765ca8g";
 "basque-book-1.20"="6gmya3w1jnv20p9zyn3b8b095csb45cj";
 "basque-book.doc-1.20"="njw9j7s7mlx35ckjg0z404fizyxpn74n";
 "basque-book.source-1.20"="wydda9ij2ibwnhd8b0pg48bf2f1g969f";
@@ -2316,59 +2490,65 @@
 "droit-fr.doc-1.2"="ss2xw9f26frzv9m2xvwbmvgagdhabc69";
 "e-french-6.11"="y1yab7pd915kbnwi20zair37a9haf2is";
 "e-french.doc-6.11"="9dcj407a8vn2j4h3q54s2wrbj5fiawm1";
-"epslatex-fr.doc-2019"="7kqdhx5drijbah1yl3vrwax3cnxg5zdk";
+"epslatex-fr.doc-19440"="7kqdhx5drijbah1yl3vrwax3cnxg5zdk";
+"expose-expl3-dunkerque-2019.doc-1.2"="bd5qbhbkk8dvbcl434mird26c7dgy3js";
 "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";
+"formation-latex-ul.doc-2020.10"="lwwcc5rjbnqccskh19scmf6zsy85a4ra";
+"formation-latex-ul.source-2020.10"="hc8lyb7812bzqfaps76jk8fjyfsfbfn0";
+"frenchmath-1.5"="9farb3by3rv5q3i791d52aizc1z9h57q";
+"frenchmath.doc-1.5"="z4y6qbx3nc5rnqizjfk3rwsmzia6cgf5";
+"frenchmath.source-1.5"="sz9288008axr9di9bnrkkjcf9pmzm0pi";
+"frletter-15878"="4vqb93fvw2jmyxv1f269f6icnk4wbwpl";
+"frletter.doc-15878"="pg2pg5gsjpp0iyzapm6k1m4p95fkbi4h";
+"frpseudocode-0.3.0"="d088q642bl3bnaz4lfla7sr73rg916l4";
+"frpseudocode.doc-0.3.0"="f8dypi9jx2yc1xmp4jd0hsjrfg9wpsnp";
+"hyphen-basque-58652"="a4067hkbl5wnwyphjqd9b6gmqdpqy78y";
+"hyphen-basque.source-58652"="vq3bxdrcsgdmiqfjxfcy9w5jihxf78qf";
+"hyphen-french-58652"="vg6420n45z9g8h587j0gg1y7vmm4732v";
+"impatient-fr.doc-2020"="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";
+"latex2e-help-texinfo-fr.doc-57275"="7ifzcfqj7hsdliym14msbjvjimh2r2y5";
 "lshort-french.doc-5.01fr-0"="33vkjmz23zk2jrzyw99zri58jm0cpxax";
 "mafr-1.0"="vl6jgzlqqyn70cndvj91nnkmcxas15j8";
 "mafr.doc-1.0"="v44yahqn2gnnfbnf1ayqr96va6y49aij";
+"matapli-1.1"="z7rrjrqpg55jvva8dhflvvq4qxfmkv83";
+"matapli.doc-1.1"="wrc78syycn2i4vpqdlfbyw3l91hym0g5";
+"profcollege-0.98"="mmaksdp7rilyaa36fhq0dvy3827ci3f4";
+"profcollege.doc-0.98"="cfvvspn4s8f3kypgqskax2ybsc4ki267";
 "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";
+"texlive-fr.doc-58579"="zl3s2iahkv179vx5r2rpvsklwispayh8";
+"translation-array-fr.doc-24344"="yia92yfpyrwv26vh12kks8arbsda05z4";
+"translation-dcolumn-fr.doc-24345"="acapy2zx06rsxwg810avmphyjjxca6gi";
+"translation-natbib-fr.doc-25105"="8yvcb3s928s5lldgy65idpfw23pb46z2";
+"translation-tabbing-fr.doc-24228"="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";
+"apalike-german-54080"="hyclqnv85va4qmrr89zz8fhsfyqkqx3z";
+"apalike-german.doc-54080"="gqfzgv3kxzskvw0j6n23vsrs8b70vavv";
+"babel-german-2.13"="49ppqr4pq0cxhfh6slp1hksbb33z4nyd";
+"babel-german.doc-2.13"="4kvyx13cjidacidys46nqypsnhcs1lix";
+"babel-german.source-2.13"="nanhfc2zxlrabv2486yf1flm1gs9lxcf";
 "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";
+"dehyph-exptl-0.7"="jxsyyxrvgnrp9wh1hs5cpps42lg00mbl";
+"dehyph-exptl.doc-0.7"="7rqw83a7rjdiwav4hvc7l4g618g3yj4p";
 "dhua-0.11"="4n8cvm61marrsbxd7308xw089j0q2wlj";
 "dhua.doc-0.11"="kisr6kymm9v5kk9nfxi0ckdf6k8mhr91";
 "dhua.source-0.11"="a9ap1rwrqqwh394c6hjqx5nlw070iwp6";
-"einfuehrung.doc-2019"="x668r5llhw28bqdr3k32yynf3720bdna";
-"einfuehrung2.doc-2019"="mwzp79i9w8ci8dxpnk4z4k6l9akj1qf8";
+"dtk-bibliography.doc-2021-01"="k5imw7ij0kdicmqipk5f9njhinb8cxr6";
 "etdipa.doc-2.6"="cid5wjvbs4hl5lwczp1s1wbdwxfwr24n";
 "etoolbox-de.doc-1"="z53x50c71bvipgvgklp42n1yb50fq8gx";
 "fifinddo-info.doc-1.1b"="d7l7nsb4aj2b7nin8whkif0m5pcv11py";
@@ -2376,123 +2556,121 @@
 "german-2.5e"="mwin3zb743v74c97aizyiy86zj1pmdi2";
 "german.doc-2.5e"="invdh78rq8chiirzdlvijssdah8hsyk2";
 "german.source-2.5e"="zs1qxbd8r3bfyq77vaak9srxjxxn213v";
-"germbib-2019"="g11ayb7d5hj8s77kn9zvkvgfhdb0f4nf";
-"germbib.doc-2019"="vskc1hanqpmdm6p0v2np2slblpy8cf70";
+"germbib-15878"="g11ayb7d5hj8s77kn9zvkvgfhdb0f4nf";
+"germbib.doc-15878"="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";
+"hausarbeit-jura-2.1.0"="8j8q1xphy3dq2iz56p4p686ld2n9hs1s";
+"hausarbeit-jura.doc-2.1.0"="z4jxmrsysgbkdgqnnqw4qkg8al95qgkv";
+"hausarbeit-jura.source-2.1.0"="9666vwqnxpa5yc5z1v949rzwb7z0mdvj";
+"hyphen-german-58652"="4x92isgn5wglmhz2f15gyb3i07gc6iqv";
+"koma-script-examples.doc-47523"="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";
+"latexcheat-de.doc-35702"="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";
+"quran-de-0.2"="ff9jx5anj2mzsqkqqjblqzignl01iry3";
+"quran-de.doc-0.2"="zncdmrlmzcnmcw7jnl6vr1cgh5v59cjg";
 "r_und_s-1.3i"="8vn7cjc42dvny30pkgp768yy87z9d2b8";
 "r_und_s.doc-1.3i"="pk63m1jl1yzz2xqiwynpph3nrlri1hkl";
-"schulmathematik-1.0"="pcp55pv0qb3x102ln1j2b4skpf57imrg";
-"schulmathematik.doc-1.0"="5kcizhqbdl9s696rzcdmdfbbg3yvxvpz";
-"templates-fenn.doc-2019"="yy9rn7m9r0paxvya3icnbqwccpjkkbij";
-"templates-sommer.doc-2019"="6n6saza6xd8mjys1ckfy0362sdya4616";
+"schulmathematik-1.1"="80jw085z3w9wchjnwhk180fmn4abgq82";
+"schulmathematik.doc-1.1"="yj5f6phsnrzb2zpy2lf8j77d3kdlfddc";
+"templates-fenn.doc-15878"="yy9rn7m9r0paxvya3icnbqwccpjkkbij";
+"templates-sommer.doc-15878"="6n6saza6xd8mjys1ckfy0362sdya4616";
 "termcal-de-2.0"="pql7q4dqaqgg0arqgg7l8iz4hwxrxd7x";
 "termcal-de.doc-2.0"="fpjnpzi59rrqg44j513w4d6f9cqi7ik0";
 "termcal-de.source-2.0"="myc9fjxig0z3dirj1brla1q70ryrczrr";
-"texlive-de.doc-2019"="6h0bib93hy99z40gbmr5vgacwkyxs5df";
+"texlive-de.doc-58648"="g1d98sq8c3s0a9xwh1mpgcnflyjp94j6";
 "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";
+"translation-arsclassica-de.doc-23803"="xayn50bvfkyf5fh93426fg2m6mmvpdwc";
+"translation-biblatex-de.doc-3.15a"="7zywqngwjg4k5za1l6v7r3xw4rcvh8yf";
+"translation-chemsym-de.doc-23804"="khd057lr5p42wqz3p6n58d2z25jdknrp";
+"translation-ecv-de.doc-24754"="7yrn8n7071yasf0lpswz8dis0vkjg33g";
+"translation-enumitem-de.doc-24196"="8c46h1y6mpz736w2nh01jkh96n0ar2jx";
+"translation-europecv-de.doc-23840"="541qkhphqn2f3bba6prrf2npqxl022ah";
+"translation-filecontents-de.doc-24010"="9c59fnc6krcsswc3hsd4aimzfvycqp59";
+"translation-moreverb-de.doc-23957"="1j0hyf240k1q27li0dnnw0cs4mi2j86w";
+"udesoftec-1.7.1"="7b8lzicjalp3cgls7lfjav3bpfpxswfb";
+"udesoftec.doc-1.7.1"="5qbbj42a6cq2zjqlk7krzcxmqrxxbifx";
+"udesoftec.source-1.7.1"="9691mzdw7rax33x6mqxrxcb3vvyhawq1";
 "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.9i"="mj3i3mi693lhnbn85nd05mvxj8ad8y8q";
-"babel-greek.doc-1.9i"="lj68xjlmlyz970j3siiqjj3d20vwlqw0";
-"babel-greek.source-1.9i"="vnk8wla7j3q5b94n1cqdgn07l8m6jzb3";
+"babel-greek-1.10"="17bc657ll0aacq85s967yypmalya2krv";
+"babel-greek.doc-1.10"="3h72jkrqpa3jjw1091gix8rvwgwy78j2";
+"babel-greek.source-1.10"="yhx2b0dnjfy591xj1c2qw24hf7npwqii";
 "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.14"="xp10w6afjjg4yk14yygm42f9f88q25pr";
-"greek-fontenc.doc-0.14"="8642xbsipyvv2i7gkmy6va7zwanbw4kr";
-"greek-fontenc.source-0.14"="8vlvm5a6b1s1p7qwf9x6zwf6ya3lpvdn";
+"greek-fontenc-2.0"="qcxq329yb8malcjbjc39rdylna76qvy8";
+"greek-fontenc.doc-2.0"="884sj5a8wq4vkjhsr9nnqzjjckhg59ah";
+"greek-fontenc.source-2.0"="2sjrw0m2an6m9gyrzx9dy0zj22yxjnlc";
 "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";
+"greektex-28327"="zmms6d4vix6nzw6jc06iir73wj9swvir";
+"greektex.doc-28327"="p5f90xphw0ck7p6iw2gz6anki05v2b9y";
+"greektonoi-39419"="agnjlz6cdb3figh8g8kfnqah4ppzqqci";
+"greektonoi.doc-39419"="8mh04p3y9jizn5zdm63vr50nzk0rjcyv";
+"hyphen-ancientgreek-58652"="byr3wv40xc83pckkrbjgsz5lgpai72l7";
+"hyphen-greek-5"="kfiy4x85sxayg6418fq4xbdxkzaqk3g6";
 "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-1.1"="h3xb4hv0wvvx2v94v6v01mzmgmd0prak";
-"kerkis.doc-1.1"="ydgx0hcbc49n9zpba234mf9wnfb28iac";
-"levy-2019"="isfhykz3fkajjygnpl7psd2n9n9lzfwy";
-"levy.doc-2019"="y92455xr0yq62ppxd650vvxaknkb5qym";
-"lgreek-2019"="64pdy6vj1q7sg23xg31pw0mfznahcvzw";
-"lgreek.doc-2019"="iwa1xfg3sawwblifpgkc3na1r3hld02r";
+"kerkis-1.11"="4fdpjk9w3idk6gnj6m4hwrlqcxgwwl32";
+"kerkis.doc-1.11"="h0vmj6xbqzl50158pn1djgpkpzc2hy59";
+"levy-21750"="isfhykz3fkajjygnpl7psd2n9n9lzfwy";
+"levy.doc-21750"="y92455xr0yq62ppxd650vvxaknkb5qym";
+"lgreek-21818"="64pdy6vj1q7sg23xg31pw0mfznahcvzw";
+"lgreek.doc-21818"="iwa1xfg3sawwblifpgkc3na1r3hld02r";
 "mkgrkindex-2.0"="v5hb36lspx6xyzzpm8ryprr7mwwpcrm5";
 "mkgrkindex.doc-2.0"="mfpkm8mm8n0nqhzgnm70yjy16lzjvvhd";
-"teubner-4.8"="7h0mh95kwrp8l3im9fq4m4my65hxcwpd";
-"teubner.doc-4.8"="w0ygcfsjgrw6r5z49ciwxfwyxzpf6gfg";
-"teubner.source-4.8"="l0syr53r8jk5cjh3lx8bf279hlgwsps1";
+"teubner-5.4"="8g3543b6hs7c8nnfvppk9fzskw46mcg9";
+"teubner.doc-5.4"="1630zxsvnhjcfp6jwjpkbq6vv4q1wyzq";
+"teubner.source-5.4"="r1gy61lbnzdrkxwafxhprd4bgb0jbi1f";
 "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.03"="a9w6f2zp1ql8987c0pak294xnn6ihlfb";
-"babel-italian.doc-1.4.03"="vgbc4bbxy99nsa6c27hq12hdysx6qw8h";
-"babel-italian.source-1.4.03"="5zh6p0aylh4qgz168h9yzk951f7mdx46";
+"yannisgr-22613"="0pjpl0qghjh6qdgy7snalxyxw6ca6cwk";
+"yannisgr.doc-22613"="jx7mj6aw24ff9k4qcr51kdlk7xwpiflc";
+"amsldoc-it.doc-45662"="3xqg4bjhsk0r27g7absrq84nwy6zy265";
+"amsmath-it.doc-22930"="mrz7iav2jpify9h3vz703x863km3vb9r";
+"amsthdoc-it.doc-45662"="bpi907wji0gimbc22s86vg3fwv6fkpsq";
+"antanilipsum-0.8.1"="xs57fn5s9vqxy5d4vdnrkahsr2hw7gsk";
+"antanilipsum.doc-0.8.1"="0i3f9szqj3mkwdabl3rv6vlhcmyp760i";
+"antanilipsum.source-0.8.1"="gx0qxfv9x2a61lgskxjhqh2gcbhl0vb9";
+"babel-italian-1.4.04"="kdy10mhrd33inhg65a5n54ails7vgajg";
+"babel-italian.doc-1.4.04"="p3y3vccyihrkr4h1fgdismzxz19y57yw";
+"babel-italian.source-1.4.04"="wldaqvmicvdid53jg4mryg9fsl79yfjv";
 "codicefiscaleitaliano-1.2"="gqzlc6agkwysk75lzdxbkz4azawzyrjh";
 "codicefiscaleitaliano.doc-1.2"="c7spaihgf2fdimihsg5cf7xn5bczkw97";
 "codicefiscaleitaliano.source-1.2"="vxi0halq6yx9gwd0vkcmjx6am7dnjjg1";
-"fancyhdr-it.doc-2019"="nl2xsg3mppyni8ns9zij452dkkw4ayj0";
+"fancyhdr-it.doc-21912"="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";
+"hyphen-italian-4.8g"="wpzx9zdasrv68604ldnmiz4szkcxkk9k";
 "itnumpar-1.0"="39ydhr855c2sb1xwfd12v61pphzmbc7g";
 "itnumpar.doc-1.0"="2qdpfrsffqfqvd42nn8yhicp8p3vvzk5";
 "itnumpar.source-1.0"="xd2bbq62fn23gbii6147m3n1c16pcgjb";
@@ -2501,35 +2679,35 @@
 "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";
-"verifica-1.2"="dwgpgq7r4r6s6glysghbd8b2s3gazjmm";
-"verifica.doc-1.2"="73f23nps62hryhdl9q6gndblnc3vvbw9";
-"verifica.source-1.2"="glz0p5kfvk6h83icf4dbvg67pkg6k2xp";
+"lshort-italian.doc-6.2"="r33gvxp6z6qzn1hfl3zcc0356514clmi";
+"psfrag-italian.doc-15878"="xb8qlcz7f0za963yybhjvbyjq37z516f";
+"texlive-it.doc-58653"="157hmx719qrgsy7723wgcmafb013k7h7";
+"verifica-1.3"="dm0n4wlbvx5621ldhj516pvlidqiigkn";
+"verifica.doc-1.3"="2pfdvki7wk8fhah50knvh01yq721yw30";
+"verifica.source-1.3"="n6qmhmpx4f2nhjinfqh1z3h370lx40mj";
 "ascmac-2.1"="5fiwx48hj22yr2f0x9q37jgwpvr7ixrm";
 "ascmac.doc-2.1"="nmfb4d9b21bsr7nqg5bgprxakj82ryy3";
 "ascmac.source-2.1"="9d6l1w7c7g8g88vfxxflrqhvmnf0miad";
-"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";
+"babel-japanese-57733"="rpvw9g08l38mnmavd9mq9xckmbaky9ah";
+"babel-japanese.doc-57733"="28b08rnpyswdl254fj2xnksrkaapsb21";
+"babel-japanese.source-57733"="4akcq7klpblwll9p7c7d7vhb8r2ra48h";
+"bxbase-1.2"="cmpmcxr25044s63nagvkzb6zv8giyqh7";
+"bxbase.doc-1.2"="na2vh2jak4zvmibrpkis6jr21ly00904";
 "bxcjkjatype-0.3"="94n8gv2433510cq05vl97zrna0gyya1z";
 "bxcjkjatype.doc-0.3"="z6rarps2vgxp061w0q8amki68j51yqlx";
 "bxghost-0.3.0"="fmg8agh5563jny9106kxzn6ac0y9ypcc";
 "bxghost.doc-0.3.0"="ybrg38lhjrc3jfadkn3h9vacy2zwhycb";
-"bxjaholiday-1.0.0"="w9mdw9zrcrrf988z2vd314bn0dqr4pd0";
-"bxjaholiday.doc-1.0.0"="yq903l1in5hwp20wj9i2kz4qmx3y0aqs";
+"bxjaholiday-1.1.0"="sqraclljhkpsgq4h9zvy3in7g6j85rrg";
+"bxjaholiday.doc-1.1.0"="d3cgw8izvja5vk7xhdy54rflgcs6n3in";
 "bxjalipsum-0.3a"="d6svafibkkjc5p3hjzrc8ibb2fwmm05c";
 "bxjalipsum.doc-0.3a"="srwc07mapyqn9hq6hy26gxaj6khy9ffh";
 "bxjaprnind-0.3b"="8pfq18sbkvqzb2may5j4n8xadgjb8a9l";
 "bxjaprnind.doc-0.3b"="1vsxn97w48hn05il79byfms5w6749xpc";
 "bxjatoucs-0.2"="hmb6rpwihwgfi7sq1zpf7yw12ibr17kw";
 "bxjatoucs.doc-0.2"="4nkg3si0bwryyyh0wpqnvkrmxmbnlin3";
-"bxjscls-1.9k"="vzkpvjj8xgrakz1ymlx9463lr4grryxp";
-"bxjscls.doc-1.9k"="0xkh21275na2fpapv6yy97f805y3zbxm";
-"bxjscls.source-1.9k"="6a7zjg0ysczcrq9893984rqbl0cp5b9l";
+"bxjscls-2.5"="029q2i57xzf5vgsa02kks2vic3q6hha7";
+"bxjscls.doc-2.5"="9lq0jf4v2griph2g3km06p27sw7hqz7r";
+"bxjscls.source-2.5"="b4rz2j1i2h60bvygmc28wp3jy9bay238";
 "bxorigcapt-0.3"="lbrfjjqsjm4n5b7byyrhm1akbmxxap6d";
 "bxorigcapt.doc-0.3"="grspvjmbrcjq91wgi6l3a73y5l7nnl4m";
 "bxwareki-0.6"="rgw2day3m4vr0k6d2mbhrpy8anmzklc1";
@@ -2538,124 +2716,101 @@
 "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";
-"haranoaji-20200215"="31jqnd042v9gxvfvqrkziz3y4gc2nnj1";
-"haranoaji.doc-20200215"="1sprh04p4sy5qm33bv4izf2zm4jkhibp";
-"haranoaji-extra-20200215"="w9bbr0p06n3s1cq8ac5rd20gvz5r2r7a";
-"haranoaji-extra.doc-20200215"="c5clkk0895208ksssx4cprq91kh9z0ax";
+"gckanbun-1.2"="ar3jk8jsw8i2hngzp2dyd14l1r0mcjia";
+"gckanbun.doc-1.2"="jn34wm4nhv9367vzrzyag8bfdg2rcpr9";
+"gentombow-56665"="9i576fvl59r1gna7w5b76skw7hvbziv8";
+"gentombow.doc-56665"="qn40cv4xa1ah7khfpk4368sxqhr2yjqn";
+"haranoaji-20210130"="ylf23apm0i8idai95rgnirwdnqfna5hn";
+"haranoaji.doc-20210130"="5h27mpr4wwp1zgqwdyl4h0xb5fnix1av";
+"haranoaji-extra-20210130"="pksx6gjdxd31xy8qp5lkjmi5fkr0hdxh";
+"haranoaji-extra.doc-20210130"="f5511sw37ak58jazxzsd0nczwa254rnp";
 "ifptex-2.0"="vd33lyik4nfippj7dax3k8rbkpacc3c3";
 "ifptex.doc-2.0"="ii033xhz4lx24hwzmkqgff5w13q38fny";
 "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"="xc8g9s8mryypwm9ikz0y131h2fqmgnhf";
-"jlreq.doc-2019"="s50ldmnqi8rjrckwwm5c3arvkyxdy2i1";
-"jlreq.source-2019"="ha1jdqcvb80wgmvrigbi4bz2clapl2qm";
-"jsclasses-2019"="qvvp434pbrxy75sr38xbja21gk23rjc8";
-"jsclasses.doc-2019"="bxlfrfg24hsj5dybpzgplpcm8wyar72m";
-"jsclasses.source-2019"="r5s5kdcj8z7z3kkdj1qiiym1dmv73qzf";
-"lshort-japanese.doc-2019"="5b8svqq4w1ipn3737s73pk969s8yv63d";
-"luatexja-20200301.0"="n3b2sc32fp1y92wadshbskcsc9fxf5n8";
-"luatexja.doc-20200301.0"="mwhy39lvgd24i46pa9nffc5nm21lqw1g";
-"luatexja.source-20200301.0"="7ig9a56yvvyl03p32n5gfq4fkldic8m1";
-"luatexbase-1.3"="hjzprkfxz8i905ffdzfad0myg2ym4vg4";
-"luatexbase.doc-1.3"="3rnbzrql8m9ss0pk1yydy4v9acrk3qq0";
-"luatexbase.source-1.3"="v5x5csbgplvah43m8lbjky2nmfk2s3fp";
-"ctablestack-1.0"="cavlzn944q3fhha3i4kf8bgvm2y5zpdh";
-"ctablestack.doc-1.0"="g2d4fq9nl422i3i0skmlrydx6d3ks8cq";
-"ctablestack.source-1.0"="bqrksg21vxxki14v7sadnh35070f2vdy";
-"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"="acazzn4mp15ki3sf28pqvhwnk6z6ind8";
-"platex.doc-2019"="s5dg3nmj99mh7xdjl79mp6zyzj0fnhgb";
-"platex.source-2019"="6bm05n38ja00h5hrsx7aml6xb68yi4af";
-"latex-base-dev-2020-10-01_pre-release_4"="sn2xhnjjdv9lp5f118ngwqfw76x03sw0";
-"latex-base-dev.doc-2020-10-01_pre-release_4"="76lrb1brgggjxr9fp8mmsfk92vkh2qfd";
-"latex-base-dev.source-2020-10-01_pre-release_4"="5p66bw1szjlyasb7l1bjib53f5s33fkr";
-"ptex.doc-2019"="zy4jrdz4ji2jf4457nx4j48r7g8g2bzl";
-"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";
+"ipaex-52032"="pxy5kyyznzddkci3pzdb7fla8gsfsqm5";
+"ipaex.doc-52032"="bv4h64z9gnd6jf3mx85b45dqxalicjcl";
+"japanese-otf-1.7b8"="lfmgwq314glhgy5pxjnfsnrhw3rxyq89";
+"japanese-otf.doc-1.7b8"="b1j34w3286splmlsshl5w59lsj0fccvq";
+"japanese-otf.source-1.7b8"="913dx9d29szxr89bfmc77kcn3k5wj79x";
+"japanese-otf-uptex-0.26"="3ckjzz5j3xbrkggjszwrw8iqrmb5k4cy";
+"japanese-otf-uptex.doc-0.26"="34404k1jv5ibhc08fqvmxncvclfbwy7a";
+"japanese-otf-uptex.source-0.26"="s71xnfr7py2v1f7xrzlwiw2h8ps7pn7a";
+"jlreq-58472"="g8sa7ki6v76j1wjh4ghdj9jbcdcjrkpd";
+"jlreq.doc-58472"="lcirqbpvfnimmwqamsz22id5qn5snkmd";
+"jlreq.source-58472"="w4gwx9z1h9a8qwsnjnci4xw73v2j18bz";
+"jlreq-deluxe-0.4.0"="5856y49i2vliffb1gwgad1sr331iz925";
+"jlreq-deluxe.doc-0.4.0"="992yssqszsfl0qps7r22wvzcrc51np2b";
+"jsclasses-56608"="bq7m6pjhh3mh3z3mvklgr14wnpixcl21";
+"jsclasses.doc-56608"="jfla9xn8wymcf6m1hf85yqi6l4nmwqwc";
+"jsclasses.source-56608"="skfshlzg14lrx40lhxp5vw21wz5f7m56";
+"lshort-japanese.doc-36207"="5b8svqq4w1ipn3737s73pk969s8yv63d";
+"mendex-doc.doc-50268"="vp31541i0l4rfkijbng5zj0q4cmbdz19";
+"mendex-doc.source-50268"="2w1ibgiylpczrzp9xhl7lidn8y2yhnn6";
+"morisawa-46946"="41dcbs61zpdhqnc6qbzcfkq0nrfgfirl";
+"morisawa.doc-46946"="cy0li43jphfx3x8x2ddf57f040s8ygim";
+"morisawa.source-46946"="jhdr4xfya5m21376a8cmnzz4xfr8qh9i";
+"pbibtex-base-40986"="nix33k8m51bymsgnmfz69mwpllkk9rhq";
+"pbibtex-base.doc-40986"="vgmw5w68b5y2rhwsjssm3bx4dn96ix7n";
 "platexcheat.doc-3.1"="khwx5x4r6aydzhd5rkv7h9lf58l27494";
-"plautopatch-0.9e"="1qdfzh5x094y9kkn4wd035yqkqkd6smw";
-"plautopatch.doc-0.9e"="j1j509az6sm5fi61h136ml3d0aivb6mq";
-"ptex-fontmaps-20200217.0"="xi0xpizlahvb5ingkq4d4qazkh1lp1k6";
-"ptex-fontmaps.doc-20200217.0"="c2asq6r15z67wy364zsadjxlhznxykyz";
-"ptex-fontmaps.source-20200217.0"="9ihj3bwyp0ngy115ylcc2dbp7xp40xgq";
-"baekmuk-2.2"="5rhc42dabpd99i92hkdmkjzgr3jqhg16";
-"baekmuk.doc-2.2"="4syhh948m1jw14xlhq6dbpdw5p5p198h";
-"ptex-manual.doc-2019"="hqb15pmvw7m12wj9557mjgvi9idgkm69";
-"ptex2pdf-20200119.0"="nvz64jf5zmlmrnv1h985qlzhxxi2420v";
-"ptex2pdf.doc-20200119.0"="6vgrh59xk6xzjjxvyd58by4q4il9fq13";
+"plautopatch-0.9n"="v0bd97ln794xvwhq8vdl3hi6cbqks708";
+"plautopatch.doc-0.9n"="n92y48b37w1n0dj07q3lxni0c28q6815";
+"ptex-fontmaps-20201227.0"="vfr2ryj599njmkx4iibb1i6crjcaz1lv";
+"ptex-fontmaps.doc-20201227.0"="ir2hb9xa03wfn6kl06rml0xv9066x2ac";
+"ptex-fontmaps.source-20201227.0"="9ihj3bwyp0ngy115ylcc2dbp7xp40xgq";
+"ptex-manual.doc-57128"="yqn4cbbrdi468hj4s7bl5wycnzcgds1d";
+"ptex2pdf-20200520.0"="n51vdwpxcdyb0w3bxi3d9i2b6gh8j3ij";
+"ptex2pdf.doc-20200520.0"="xy5gdmv5jh3mlabwk74hcj1b2g9qrv8f";
 "pxbase-1.1b"="92jsnxmiqmpy56dhdjaark80zsbb5vxa";
 "pxbase.doc-1.1b"="n5ns9b3vpa52b78hhgbvg0114faw0dgi";
-"pxchfon-1.7b"="8yvw30119hdpafxm7d2rwbcj4z4dz1sa";
-"pxchfon.doc-1.7b"="h57si3wyz2pnlp7rsdwmc86y8smw5571";
+"pxchfon-1.7e"="c05axsnaw9n2gghs2l3yvnw4i9b8bj0k";
+"pxchfon.doc-1.7e"="4pimmbvbbjnrpmnh11y75rk0ahj3d7lz";
 "pxcjkcat-1.1"="i368i8r85baiimnwh2rfqd0hfrklw8hs";
 "pxcjkcat.doc-1.1"="hcxxg9rg6d64hwysf6nlvfhv8h360168";
-"pxjahyper-0.4a"="wc6kv0s8glnfn95k1bb5l2lihm6400xp";
-"pxjahyper.doc-0.4a"="1xzxscgsl9y9ajvd9kq8d37lpmqb02vv";
-"pxjodel-0.2a"="wrzn5vf0h8di7zyzw15fqmnjrn8y0569";
-"pxjodel.doc-0.2a"="hihxv3km086xxnwbxfpg6a455r1g1snm";
-"pxrubrica-1.3c"="p6ych4fz68bzhg7nmb0456jr32qhg20g";
-"pxrubrica.doc-1.3c"="mn4xnfbybrmq49w2r11q18k8q4q7mark";
-"pxrubrica.source-1.3c"="5w4m8vac151lxkp76llm5ycvi7818vps";
+"pxjahyper-0.7b"="aic3wmr9y2wmbfmq3qz7l90v86jn1qrk";
+"pxjahyper.doc-0.7b"="yl7hbay6yyi4xm4kx8fi3x8lhmw16kd6";
+"pxjodel-0.3"="81408a28dnm6qxf1fvdzl9892bjgw16d";
+"pxjodel.doc-0.3"="9gpcf45l044gd9z8pqvag7apcnfy407c";
+"pxrubrica-1.3d"="hf3yknd05zdmra907l5jciah3qpsw7bp";
+"pxrubrica.doc-1.3d"="129f964d7ya9bybf7f347pph201ps388";
+"pxrubrica.source-1.3d"="bkazka916yi75nj9xgj0ma5xnpxwzib4";
 "pxufont-0.6"="88rvij6qa4d901vnmhahn1dmik47xjr2";
 "pxufont.doc-0.6"="vvrjjns1nfgk36wlywiayk6v02a0h8q0";
-"texlive-ja.doc-2019"="c9x1ai4v27mnmwkxbc4963a00i1qsjfg";
-"uplatex-2019"="ikvhcfp3hyvygch7yx9hj2wn1bhvdjrp";
-"uplatex.doc-2019"="2xzxvkb9qv7wcy0mwm82nijdbfqdch6x";
-"uplatex.source-2019"="wjfimibwb9xhriya2161vxxgwngsy79b";
-"uptex.doc-1.20"="r3zb6b4yszgz9p9w6kwzf9kvb35pcc8g";
-"uptex-base-2019"="dhh84zlmy5qh9848mx5yylmps2x5dhfj";
-"uptex-base.doc-2019"="02jcxdjr8w76l067z88n0dybw5mqik1p";
-"uptex-base.source-2019"="dv52z5ilfxmcrb9420sbw6b8gl2av9x3";
-"uptex-fonts-2019"="g3qnaahn4gp4yc4zlg2n6687bzq738kq";
-"uptex-fonts.doc-2019"="ji8zv1haadkqgrsvnvyp71xx01nhlvql";
+"texlive-ja.doc-58581"="v6d9imh79dghzn7z80lrr5bkvgm5bx6p";
 "zxjafbfont-0.2"="gqmmwcbw81z91mwqf731jk0mgdfiw8d5";
 "zxjafbfont.doc-0.2"="0901rpw6rd2wivh0fsqnna6gywc6j8hh";
 "zxjatype-0.7"="8wfcvfci8mj8ikqpfa1s4km4c46i3hb5";
 "zxjatype.doc-0.7"="qp9vrpjyjxma8bi3yhkdbbxv0db2l0mr";
-"cjk-ko-1.8"="bzihr3wa6c0rp7jrj89483w2xlapj6jv";
-"cjk-ko.doc-1.8"="avb0cwq3p97yj94gsfwj29bwdixv2lyg";
-"kotex-oblivoir-2.1.8"="wq598w1jbvbczmznn97basmrybz42zxq";
-"kotex-oblivoir.doc-2.1.8"="inqj292cqra8rxpa11vwkpjx7wcpx3zr";
+"baekmuk-2.2.1"="yrs4d6j382fxfn4ncmp27af5xjrv3xs4";
+"baekmuk.doc-2.2.1"="wprw23q0ksga33zysqi5478xpi5izqsr";
+"cjk-ko-1.9"="84cm9zzimh4nplwb35hy7xdbiaxdavnl";
+"cjk-ko.doc-1.9"="3b5kvk4dyirr87j6a1f7lp0q5m5k78q4";
+"kotex-oblivoir-3.0.1"="056bd28dyh0s19634hb0cd86q8q9r5zb";
+"kotex-oblivoir.doc-3.0.1"="6h9x7zkk6wz4i9v5gqbiz75wj9zp6pal";
 "kotex-utf-2.1.2"="x3j8gcy8ylvgpiwyrwrgl8wjj9gdrp63";
 "kotex-utf.doc-2.1.2"="r61iwnwwvwh1999l4ylczvz0d6l9ff1f";
-"memoir-3.7j"="bx30l6xwv8mzaaa1jv6fsh70zyriwsak";
-"memoir.doc-3.7j"="65m20g7z8qlsmx9nk1wa1420sq2jv2bn";
-"memoir.source-3.7j"="3iy8whms1mm43kd5yp358mfbjp3f7d5r";
+"memoir-3.7o"="9wk9mabw6yi13xz6dk73cyf7qxcis0b2";
+"memoir.doc-3.7o"="zbncsaqw0lx20348hpmkj4cxr86zhksa";
+"memoir.source-3.7o"="xg01124jnwjsmvj2zng0gj9ynh1vzyvp";
 "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";
+"lshort-korean.doc-58468"="l4sjin8iv3445al6kj4qkh3hpc255rgx";
 "nanumtype1-3.0"="b1wscjlknaslwhpaxxfi8w2drxg1m770";
 "nanumtype1.doc-3.0"="4jpi6pmfq42sbcfzl403niskxg6qnxfp";
-"pmhanguljamo-0.3.2"="b3iyzkvlc77xnzsi4w9bh9jsimwqvxk5";
-"pmhanguljamo.doc-0.3.2"="vv53qjsfpcv461yf0z1j5y88zp73mv14";
-"unfonts-core-2019"="grx8hl97r9gx2abhhwlwpa425yww7w0k";
-"unfonts-core.doc-2019"="icc501j6sh5ix6v72v7lpb0him7viih3";
-"unfonts-extra-2019"="ib9sxr60ylsw9vyvr3wxya8xhq6hv0ix";
-"unfonts-extra.doc-2019"="2r7sls3pa7a3fq9q74dlzhp7yjbwdsni";
+"pmhanguljamo-0.3.4"="dzcgp4dkvgnxp6q7w3nh07agr5ayf0d8";
+"pmhanguljamo.doc-0.3.4"="knal9x0irb95h7as9zhki8fscsggh49l";
+"unfonts-core-56291"="grx8hl97r9gx2abhhwlwpa425yww7w0k";
+"unfonts-core.doc-56291"="icc501j6sh5ix6v72v7lpb0him7viih3";
+"unfonts-extra-56291"="ib9sxr60ylsw9vyvr3wxya8xhq6hv0ix";
+"unfonts-extra.doc-56291"="2r7sls3pa7a3fq9q74dlzhp7yjbwdsni";
+"aalok-0.2"="9sz8pdql2ffdba7c12lfdd15aza6qwk8";
+"aalok.doc-0.2"="pdav0mazy94cfpr590pf1ikg9s5l455g";
+"aalok.source-0.2"="p7rc2vj5c4bc7yxvpiwn31h3mzvp5a48";
+"akshar-0.2"="vnkiyx83qd6ykba2mpwbhz2nsdsqdg3g";
+"akshar.doc-0.2"="spz4nshzx9pn3s8vnwv12iabxpx22pdb";
+"akshar.source-0.2"="nfn416llwic635ywd9zyn5w252hsw53g";
 "amsldoc-vn.doc-2.0"="09zv7q83wc6zg9an9b1x1nvsnqx8bpcr";
 "aramaic-serto-1.0"="mcxkjm533zpz4srgqqbd1asax309lhmk";
 "aramaic-serto.doc-1.0"="2717wqsb2bzap0cjgw8d1rsryjyil57n";
@@ -2679,53 +2834,57 @@
 "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-sorbian-1.0i"="b4iwsh01n71p4lmhgbxq5kc7ggri2r2m";
+"babel-sorbian.doc-1.0i"="lx17vb84nc80v8f84v049crzswpzfkj2";
+"babel-sorbian.source-1.0i"="dbsyszdm9nfwn29y5yjlzv5dpj722sgc";
 "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";
+"bangtex-55475"="cn3ss5r73gr19dbjlrnvb7icfpbb2aig";
+"bangtex.doc-55475"="7dwz3jgliyn649ns4iqmgjnqn80bv3xr";
+"bengali-55475"="xv6b2ya4hn8bhhfwmi7sziq9qwmhx6qb";
+"bengali.doc-55475"="f6c5pyzrih551k2p50vqy9jfx4ar3svx";
+"bengali.source-55475"="s77yi86avqzhp5lin4dwhbavb41g4q0n";
+"burmese-25185"="gymkq1rr5pmwaaid3dpks3f8ngz3525f";
+"burmese.doc-25185"="yirjf8crgj2a89451jh8iv66qhdqdrr7";
+"burmese.source-25185"="ixz9y2ck9awijs6w9rz005nkvl613811";
+"chhaya-0.2"="lxplhiai9bfxqvpcxlcmllgm1ana0fdr";
+"chhaya.doc-0.2"="xx2hs716bv8jpxfrz00c8zqx9r6ik605";
+"chhaya.source-0.2"="0rw2yfhqgfi49zgn37rqf7m6lqyjv0hw";
 "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";
+"ctib-15878"="gdfzyzhwfcwi275xdrvah86459bsfxx7";
+"ctib.doc-15878"="jy7r4mkpncfmy0djcxvpcvkwjaqxv7s5";
+"ctib.source-15878"="3pfn4qglvw3wjjw4f3jlk5vzq3ci4zj6";
+"ebong-55475"="mhlr9r7i2zf3rm905m527hbnydppaiar";
+"ebong.doc-55475"="pqr96lyawpif4fzp0izw8j0506gnf06f";
 "ethiop-0.7"="fd4kynb70wkja5fxhi10n52mff3s2a8q";
 "ethiop.doc-0.7"="cabq6vprpklsmzi68af6nb4qiwbrwmzf";
 "ethiop.source-0.7"="yv6pwmbkvahpy2h4vnijnqag2rv09k5l";
-"ethiop-t1-2019"="f73j35aqlr29gmh9k00d3s0jzkmk6zq3";
-"ethiop-t1.doc-2019"="92ly98mz1iim1gfh4cm8hjwc17j9kjhl";
+"ethiop-t1-15878"="f73j35aqlr29gmh9k00d3s0jzkmk6zq3";
+"ethiop-t1.doc-15878"="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";
+"hindawi-latex-template.doc-1.0"="pkpg5znsws69jrbjypn09ywy4cng16z4";
+"hyphen-afrikaans-58609"="w3h8j43k50xhwwkf656jbrqlc3rx9v43";
+"hyphen-armenian-58652"="q4b008aqp98gl2g2v5by33imzv97w1z0";
+"hyphen-armenian.source-58652"="0b2gny5672fkb5sd8vb2g3fapx9pl7z2";
+"hyphen-coptic-58652"="hd3cc568q639yj5w1gsf2qd78m04pg57";
+"hyphen-esperanto-58652"="1ipyszpd850mwl2xwkp9hp1516azcwjn";
+"hyphen-ethiopic-58652"="zjp5lahyv02w6c5gqw133l84xzbk19nq";
+"hyphen-ethiopic.source-58652"="9gkipr8pk2mb77s168has3sfgrs7cg1i";
+"hyphen-georgian-58652"="498igs0sfjxd8zlcb8k7kb44c54iacra";
+"hyphen-indic-58652"="vifra7d45c7f02jkfyhymgqqlh375grc";
+"hyphen-indonesian-58609"="5f125q2si90bwa7lxlflnpc820vgki3s";
+"hyphen-interlingua-58609"="gajw8lrnij0pys803lr814qk7xy1qx4y";
+"hyphen-sanskrit-58652"="ivvz3rhzgc4ghc4l8biniics69wif8i3";
+"hyphen-sanskrit.doc-58652"="pjfnjwbksv532x7idr41hvs874f5p97h";
+"hyphen-thai-58652"="fpvq523safkjz16s9i9h24f53p0mdpwq";
+"hyphen-turkmen-58652"="lqcsiy4y08ddkawxv28g1iicz37pn6gx";
+"hyphen-turkmen.source-58652"="c7md4qrdh7hms3vzkpcams5hwl8qy953";
 "latex-mr.doc-1.0"="vwb062hbn3371czg99plccbvxw1a7gjh";
 "latexbangla-0.2"="6ix7rfgj51z585jry3i1g68x4wvm4xxz";
 "latexbangla.doc-0.2"="iw79gb4sk4hys6xbc8j86lpzyji8h7r9";
@@ -2733,22 +2892,28 @@
 "latino-sine-flexione.doc-1.2"="hnb3gr9lz8wfqgz3g1shzb9s85r4dn9h";
 "lshort-thai.doc-1.32"="iwmnm7z7b3r8km4i3afq8hz0f2vy9dl2";
 "lshort-vietnamese.doc-4.00"="2y25jrim204g4q916rf1hhkavl7fi6vx";
+"marathi-1.6.2"="aqqbkzhf42c8rcb9balmg2i03bybiz52";
+"marathi.doc-1.6.2"="b1p6bv5b6nzy7j4jkrxhicr9vsn79vdd";
+"marathi.source-1.6.2"="mkv3d5dmgz9xh66h6gj8jjmvnl1ld949";
 "ntheorem-vn.doc-1.203"="ys9g749d9f2nbq55ckyrjrr4mg9yywni";
 "padauk-3.002"="dwdgm603clk71s9gcjx9ghzwlkh6k2gd";
 "padauk.doc-3.002"="zarib60py4ddx2axyrm695pkikxih70z";
-"quran-ur.doc-0.1"="8nc81g4wfrd6q1xcm6fqiqkq8xwkaiym";
+"quran-bn-0.1"="1zmb114h7yx6jfcscjl6axdq0wgsk51k";
+"quran-bn.doc-0.1"="zg3j20ajp1c5frcvbngg24nr0qhnikrj";
+"quran-ur-0.21"="83h5jv6v5rpq5a61ca590fp9nlikps9g";
+"quran-ur.doc-0.21"="1xvyl3mc7rbf37b5fgd6ywmbbxxvm10n";
 "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";
+"sanskrit-t1-55475"="lwnbgg4flg35ndf7p0iii468sf6avylv";
+"sanskrit-t1.doc-55475"="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";
+"thaispec-2021.03.01"="slxmdz2c6xq4z94gyp3iw33iddvd55f5";
+"thaispec.doc-2021.03.01"="gchip0yy0n668s9i9mplzgdicrwvwvid";
+"thaispec.source-2021.03.01"="qx5m53rk752nb2apblgk6v3vabgn8332";
+"unicode-alphabets-54236"="r0ylcchj98nn4vmd6dnxvx20applp72p";
+"unicode-alphabets.doc-54236"="zr075sprvlpddzcaxyb0lg0dg90p089g";
 "velthuis-2.17.1"="x0zig7csm0nnq7m2n1qqdys57jz38b9h";
 "velthuis.doc-2.17.1"="mcclyvyb9d4hrak5naw2d76a8g9lhqak";
 "xetex-devanagari-0.5"="v4gi0agfvxz808s3mapzf2ylxhv5n8a7";
@@ -2756,8 +2921,8 @@
 "vntex-3.2"="vzdcn6z7knkzsj8gxwj8zda00dq6w8is";
 "vntex.doc-3.2"="5ix8dldkd2qmmbwn731ii4ffng7d3fgr";
 "vntex.source-3.2"="72m9wqbqrsam0b6a15lqq4yq5hbcx0kj";
-"wnri-2019"="z6010l0pydl50vy5jnrg5fh2xki5fi6a";
-"wnri.doc-2019"="clpx7kcx1hp0qy30v5nlfz10kd5hmqcl";
+"wnri-22459"="z6010l0pydl50vy5jnrg5fh2xki5fi6a";
+"wnri.doc-22459"="clpx7kcx1hp0qy30v5nlfz10kd5hmqcl";
 "wnri-latex-1.0b"="y9n4dac8cbzm2gwhcfan32rbv3dyhr0s";
 "wnri-latex.doc-1.0b"="f1m11fnp49h90f3djiml0awlxqcnxkdp";
 "wnri-latex.source-1.0b"="zd4smslq18sp693fgay24m503v01v3bk";
@@ -2766,42 +2931,42 @@
 "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";
+"cc-pl-1.02.3"="imax9b80sa48n769mgj3warj6c8r0g9n";
+"cc-pl.doc-1.02.3"="mw9069bzf38n43f9ch9qqby0lc5mzvw3";
+"gustlib-54074"="x6dscxji10p04msr31f3vsaf6pfpzhsg";
+"gustlib.doc-54074"="07x28ysinfhv15jlkpyfsv7cjyzwbdg7";
+"gustprog.doc-54074"="v1mb66z2nc7vwhy2yg5rk699mvqkpqs3";
+"hyphen-polish-3.0b"="c3944h2grk64vzp4kk49fn1j38l1s9b1";
+"lshort-polish.doc-55643"="7fr1g9j932xjam26nnf6b6zc47m1i9g8";
+"mex-1.05a"="z7m8kmw19bg4yw3p99fvpvhhclkj5ff2";
+"mex.doc-1.05a"="k9qns3567wxk7j2wvv78067lnlcfq1f8";
+"mex.source-1.05a"="kf6k037zqvlad7sm8z4a2gkg2xlf01j3";
+"pl-1.09a"="i3r76ngymf518pcs8jzx4l6xdgw1afk0";
+"pl.doc-1.09a"="1j9djajr93klh5k8hwz5zigh2qlc12zp";
+"utf8mex-15878"="d8314s7lhlafhspi1qf8hiqzx61n439a";
+"utf8mex.doc-15878"="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";
+"przechlewski-book-23552"="qid42vb23l6fzc6dgmx3bflwz7z0mdb5";
+"przechlewski-book.doc-23552"="23zvnv9pcvl5n68js39l4hrcli608qck";
+"qpxqtx-45797"="wxccyd4si0x6338hwmwdaxmjj3brm7p8";
+"qpxqtx.doc-45797"="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";
+"tex-virtual-academy-pl.doc-34177"="rr38v1syb2b4ji3psf47pmwr562zv59n";
+"texlive-pl.doc-58649"="m1j6mzdim3yqxh2dxdmfkxf75bqswlgd";
+"babel-portuges-1.2s"="ar3by0sm5nv2sprdl9dikq4qxv52kfl8";
+"babel-portuges.doc-1.2s"="lnn32yz6wvyvkly2kx8b223mal5kbl1l";
+"babel-portuges.source-1.2s"="dgv5yxnvfr417xz7393bykvcijvyv4ia";
+"beamer-tut-pt.doc-15878"="kxpy2m4hbwm3sfj7ix9x249df3dgmvfm";
+"cursolatex.doc-24139"="arfkwqkjw5kfv2rcfhkvxjq603wdsq3y";
 "feupphdteses-4.0"="696my85w1ngcar81vacyj8nr7m4dn0wd";
 "feupphdteses.doc-4.0"="9nm4793nyfp5v2rjd5297sbyw2b29bqi";
-"hyphen-portuguese-2019"="b29y4gyjll5mvaf2mh5i51qrfkqsxiyi";
+"hyphen-portuguese-58609"="5shwyqj6inhq7z3lip0zwdygsxmicqlg";
 "latex-via-exemplos.doc-0.5.6"="qv730qmznff38z28bcdpzmirvzngpg3p";
 "latexcheat-ptbr.doc-1.13"="qzgl6v54k07i6lc3ps84s9mj11j1qqqf";
 "lshort-portuguese.doc-5.01.0"="m3r2gbq4v09p9svs0mxsw3s3yc7has5y";
@@ -2811,54 +2976,50 @@
 "ordinalpt-2.1"="ds49jf4pvghzwn5nqwjbzz6dhp0cdn80";
 "ordinalpt.doc-2.1"="4hg5jx7bnx1j13s1mq8xscr3jfajl6by";
 "ordinalpt.source-2.1"="cc2f6xias35ac0c0kxan2cvcmyjq7l6k";
-"xypic-tut-pt.doc-2019"="2rj58kib26w8jnfzpd9bsm0nf2ladv4i";
+"xypic-tut-pt.doc-15878"="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";
+"hyphen-catalan-58609"="9k5zkr753b5sfnw88r77ks7vy7wd2rci";
+"hyphen-galician-58652"="46254jg1804xbs9qh6369qp1mj9j44hj";
+"hyphen-galician.source-58652"="jgmyy0n6c4ljqpl5ln9q1vpjq25y9q1p";
+"hyphen-spanish-5.0"="8isaivc77vl2cp5z2nwwwmqj0msgm5c6";
+"hyphen-spanish.doc-5.0"="kznsqnkm7dg2rdpisil38syyvs6fs0j6";
+"hyphen-spanish.source-5.0"="lia19yzmwyz4fsbnrca8al43hfc46i55";
 "l2tabu-spanish.doc-1.1"="rc7058j31za1cg1ik27b6gcgscir9bfk";
-"latex2e-help-texinfo-spanish.doc-2019"="zqfixpmcslcpjzg9f3rxcv6z1j7i5d3w";
+"latex2e-help-texinfo-spanish.doc-57213"="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";
+"texlive-es.doc-58221"="j43rpwalh1gjqa8v18qdk2q63l8h1j5r";
+"2up-1.3a"="rsqrw98f4vzfx8vbj35pws9xl2q4gp8s";
+"2up.doc-1.3a"="ir3nkw2344mn9k22d1mi28gjrgld4kkb";
+"ESIEEcv-15878"="w5zhmx6kk19kwf98gdm7rlp7l3i9k93y";
+"ESIEEcv.doc-15878"="4ci8yn36m2fz6v6n7iqb071291rl23zw";
+"ESIEEcv.source-15878"="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";
+"Tabbing-17022"="1ffaxfww9l073hvjvgp4vkxzfdmmgb8l";
+"Tabbing.doc-17022"="gyhcdih64zw18s44f5s1h8ccr2ndd0qs";
+"Tabbing.source-17022"="pifazcagjavajck7h6a0kyvnxxk90k8y";
 "a0poster-1.22b"="dkwb9gdxv3jxnw07ji0ydmpqa0fgy6mh";
 "a0poster.doc-1.22b"="bn6j9nsmcri2irby7njhbdlpgqqaic0x";
-"a4wide-2019"="lsss6h32r10x1v8k9wwdp7ind09y6x5h";
-"a4wide.doc-2019"="vb90v0v79l34fr86i7hzx787ndyq271w";
+"a4wide-20943"="lsss6h32r10x1v8k9wwdp7ind09y6x5h";
+"a4wide.doc-20943"="vb90v0v79l34fr86i7hzx787ndyq271w";
 "a5comb-4"="sc874hfilkfjjv1aw8qnf36v5jkhd6s2";
 "a5comb.doc-4"="gsp7dsbhk6r2q332apbqrx29mna85dhs";
-"abraces-1.-"="54c3kj96d3symq8nbzrns0pf1200jm5z";
-"abraces.doc-1.-"="78wfnwn3ni90izh9nyqhmjk6jyqrvax0";
+"abraces-2.0"="yi53lc7hjam1ng9dv38x9wx864r89gnp";
+"abraces.doc-2.0"="vkkvl732ql65gw216smhimjw8xp2qfj3";
 "abstract-1.2a"="qd0czw54z49h3mxnxlk6drblpbl47sln";
 "abstract.doc-1.2a"="qd4dggpq9076j7cma12mkhy238ni4w3z";
 "abstract.source-1.2a"="819fv5rryh634fmqic8fqagdfi9h04wj";
@@ -2868,17 +3029,14 @@
 "accsupp-0.6"="i0h4pn8qqkckrhmlfhyvk1caz2l68sc6";
 "accsupp.doc-0.6"="2p2rh18j02n4jk2g08fryx42r9kvm2bp";
 "accsupp.source-0.6"="zkcpasgn0nv8i285fwrb1y954s2n1yxv";
-"achemso-3.12a"="3psjpzbhsk0ynd3xiq0pqf4spk7klxl8";
-"achemso.doc-3.12a"="iqshwkgnwnj0p62g1aggpr2ydyzfpkf0";
-"achemso.source-3.12a"="v0v78aapbda91dcb71k5q2ld26x5ybci";
-"acro-2.11c"="5vaxlf3kd5221fbfm6zjl8iqkxaiiajg";
-"acro.doc-2.11c"="lc0m63ljlbw2bv0s361v20477mrmhgm8";
-"l3packages-2019"="vw1xghbhhfz1p59wf02w27fzj5wyp0f4";
-"l3packages.doc-2019"="3ghr4k7mdmxbbx3pnsxmyd6zmicj7gif";
-"l3packages.source-2019"="mh6211xd88np3cjb10q66lwvdnwm0dp0";
-"acronym-1.42"="38ldvv9il1973xdcc1rzk0ps7cgp6j21";
-"acronym.doc-1.42"="wskc0pdzcdh5h6vp23f0sdywq9i50y1x";
-"acronym.source-1.42"="1badmd32yvmr8g7m0i3fws1b2l6x6zrq";
+"achemso-3.13c"="d0av0yfq5rhq9b2ckwcaazyyvqk2q2i3";
+"achemso.doc-3.13c"="3g2bjllla7gknijql9238xc0fb00k0df";
+"achemso.source-3.13c"="699zbci0bbqw01ilyca8xxwr7m7180jm";
+"acro-3.5"="5dz3x2f6bm9rl93hswvjy0b74rm1501c";
+"acro.doc-3.5"="1cz3b26z10z4nd4fqq0ssc68djl2iqyi";
+"acronym-1.47"="6471snmy26zvq7gh9lswa4fg0zp94phd";
+"acronym.doc-1.47"="3z4ps2hfi959q7dazpjrj02icpbr69g9";
+"acronym.source-1.47"="2sbaifpka4p220fd9dlbvzbp92vg971w";
 "acroterm-0.1"="04m91cky6cj3jv546mdf6461bdg6sfkk";
 "acroterm.doc-0.1"="jnxcd65y58xrqg0cfg7y0m8yslbj7xi8";
 "acroterm.source-0.1"="w99kkypzq7c73rx4rv4m917c68vnan00";
@@ -2888,22 +3046,22 @@
 "actuarialsymbol-1.1"="c4m5inanc59g934zv5hfg26nc4209030";
 "actuarialsymbol.doc-1.1"="a3dbpjygc8033icdlyli8g47vbwx4xc1";
 "actuarialsymbol.source-1.1"="5p6w3cm9h63nxah663y5l4k7p811qxyv";
-"addfont-1"="16jk4kypw619n5fy7j0hvfiydk5k3mbk";
-"addfont.doc-1"="r6jy27nla35rjdsbcqfb7ckc7hfszngi";
+"addfont-1.1"="yyngixsqhm4lzzb9psgajj2bkkd2s16m";
+"addfont.doc-1.1"="c157yk6aizpy9lkvsbd0zxm1mi18q9y9";
 "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";
+"adjmulticol-1.2"="fd21wgsbpv4km7r24529cbja564ha0x0";
+"adjmulticol.doc-1.2"="73sv27k6y42306mfi8rglf53kz8an51d";
+"adjmulticol.source-1.2"="3bqrqpbh7y8k0a9wgib14v0k7pa63qyx";
+"adjustbox-1.3"="6xk50giqn497r2dh88nz6r91fr83b7fz";
+"adjustbox.doc-1.3"="qzzkgppkai6c29n2sdwgg019vy220s7p";
+"adjustbox.source-1.3"="nxaiqbdxwj21v7y53g5l1i8qnd1frxbk";
 "adrconv-1.4"="jm0wy6794p7idv2f1ryhsm2v9wr9d5ar";
 "adrconv.doc-1.4"="jyn0sjir5pp69zvlabyamihnlsav24z4";
 "adrconv.source-1.4"="v31vh22mrhxqq4h88rvj97a9n0wc9bmw";
-"advdate-2019"="f0awsj80hyiv2vkjizidk3na8yvfm6i4";
-"advdate.doc-2019"="0yx83g0jz771kjqq6rf07wlmzs4h68x3";
+"advdate-20538"="f0awsj80hyiv2vkjizidk3na8yvfm6i4";
+"advdate.doc-20538"="0yx83g0jz771kjqq6rf07wlmzs4h68x3";
 "akktex-0.3.2"="6mhzn5d98q6vmxp8vjbmb6i26x9zja3g";
 "akktex.doc-0.3.2"="z43q786v20515sgsp4dh5lii0pfa620r";
 "akletter-1.5i"="7i7x6692i5zicjsrp51cvx8sivm1arpw";
@@ -2917,24 +3075,22 @@
 "alphalph-2.6"="8bavlk3mbi1c7k1nh3hy1j5icrq8chfj";
 "alphalph.doc-2.6"="3lqasr06fpc44cd88c3y7xq9v8fs8p61";
 "alphalph.source-2.6"="1f1c5lq8nhn6liff0iwh4wh9cqi498wb";
-"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"="zkpbk2n7sisma690gb6ysdij6c3b726s";
-"animate.doc-2019"="nq6wxg5l8yd3kf4n91b2qnzyrjqnlbnj";
-"animate.source-2019"="2f4dqy5fj9p81skb8b10xl767399k03y";
+"animate-56583"="nsp8xdb9p3yazcbxvkymjf47j6hjy6s1";
+"animate.doc-56583"="6h4g623xklpyl4j3wsbpv57hqc0l9zvp";
+"animate.source-56583"="9gbzqi8vmy97rczriqwks53dpikk3dz6";
 "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";
+"anyfontsize-17050"="z7d08jdfvq55ls4va5f5iyixxyp6xjv6";
+"anyfontsize.doc-17050"="fxvax04n8dj9haksiqx0jddi47mb8q1n";
 "appendix-1.2c"="50wvmi5y3wgka55dnb2h9gmr70y48srs";
 "appendix.doc-1.2c"="b2xkv7kzx6vkhhr0figba931ma6q455b";
 "appendix.source-1.2c"="8xs50dfynih6q9zgydgp9p4vr67ad3p5";
@@ -2948,9 +3104,9 @@
 "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";
+"arraycols-1.1"="cfkhjyajfjgzp4826i0rnxbbc1yfxa20";
+"arraycols.doc-1.1"="m03wdi9flydgvs5f7450hj1i88ynm85i";
+"arraycols.source-1.1"="mh3g35c7dybg3r8npb1zc69vyzs2arva";
 "arrayjobx-1.04"="zxqamnkgiq8c9p1z3w89rlgqv61bp2n6";
 "arrayjobx.doc-1.04"="fyx7869qi432q3g06i3xyg92jqh29fbr";
 "arraysort-1.0"="h5gbw2lvn0zfvhz0s5lmc495yz49bdds";
@@ -2962,27 +3118,31 @@
 "asciilist-2.2b"="fvd111ywjyrwy897z4bmcby9ymnxcvcc";
 "asciilist.doc-2.2b"="i501s6jaq79nj93ckccihgkv4ca5pn7i";
 "asciilist.source-2.2b"="zqmygnlbfyz70y446mcdwpd9a3bszhl2";
-"askinclude-2.6"="6dvhdz8cczxzlimmlm96d88q2s03ang6";
-"askinclude.doc-2.6"="yqkskb8x60xpjm6n00igr54lk39hqmc3";
-"askinclude.source-2.6"="f3mwswcypj7vnj8cr42wcvry40qzyqmv";
-"assignment-2019"="f5a0sprx94bby245g2cfycrrazgp00k7";
-"assignment.doc-2019"="0d0cafwd56gqn5dacsq4fdgzz8jqks19";
+"askinclude-2.7"="nbmjzdp012vfp3bacig7s927dv809gfv";
+"askinclude.doc-2.7"="6d5srhwjkdz59qvff285fqfl3v9dlmng";
+"askinclude.source-2.7"="crcq42ba162v61fh3n6bi6rvsa8ap1z8";
+"assignment-20431"="f5a0sprx94bby245g2cfycrrazgp00k7";
+"assignment.doc-20431"="0d0cafwd56gqn5dacsq4fdgzz8jqks19";
 "assoccnt-0.8"="6bikcn3hf37rs2wp84f9h8nf81z86hr6";
 "assoccnt.doc-0.8"="xb17k2w0skjxh3cw3hag91m5cjxj1vz9";
-"atenddvi-1.4"="6ygnmbsi6bqj2z0vawx65snrkqlmbidg";
-"atenddvi.doc-1.4"="7hhrbjji7ibzcy65qp9xgxg2i87kar32";
-"atenddvi.source-1.4"="n8zj2xfx23h8n8bfs92kxkmdpl1drq0z";
+"association-matrix-1.0"="ia2sz5pjhb312fpd3wq4h3jlzx6p4mhq";
+"association-matrix.doc-1.0"="7yg14fhaggb07h6zj7wz4a1ml7wkz6im";
+"atenddvi-1.5"="mdd2z14rww1y98y7v1jsyq3hzrg2rf6i";
+"atenddvi.doc-1.5"="sk0j256ab9vz5lnn7v2dj7rwn5a1lnhh";
+"atenddvi.source-1.5"="x07x6lrj3ichjg83nphb044z99583c1c";
 "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";
+"aurl-41853"="8nnjg9zwrc6p5qy2mq32jirxz29wpa0c";
+"aurl.doc-41853"="13g1jz1510lipg3v2m4zpcz2pzi04fyc";
+"authoraftertitle-1.0"="7wliqivlz6fmz6szddzamm781qgd3r7h";
+"authoraftertitle.doc-1.0"="i7b4wwdfsw0ydra2pvvr4bnsfmwbjkdy";
 "authorarchive-1.1.1"="capg6s6r2w20kazk5dh2dqfbxl6246zh";
 "authorarchive.doc-1.1.1"="bzs7qr0gc2sgmsb39q4d46l4f5d55cp7";
-"authorindex-2019"="khcqpf8rh3cqb9fk2wl35lvp1fs3k2nw";
-"authorindex.doc-2019"="d1k8irgqp5vac8ggq66ivcxxgv8q410x";
+"authorindex-51757"="khcqpf8rh3cqb9fk2wl35lvp1fs3k2nw";
+"authorindex.doc-51757"="d1k8irgqp5vac8ggq66ivcxxgv8q410x";
+"autofancyhdr-0.1"="mh48zz2m9p97z2d0znxv7myxjkcfg0wg";
+"autofancyhdr.doc-0.1"="czkfsiazwf0ybhgknzabxjwq397pd0fk";
 "autonum-0.3.11"="z0mz6nrw3s9661lc5s983bj7qpfg9ns3";
 "autonum.doc-0.3.11"="ghxpr5ayzxq1w6v3wy0hqvkfy28n9slp";
 "autonum.source-0.3.11"="5fm5vfmi11jqdgqklj6zmc90vw3vqiqp";
@@ -2992,8 +3152,8 @@
 "avremu-0.1"="xk59ssazl5122hy7cw9h8l8ky47ac58m";
 "avremu.doc-0.1"="sp38mldllwslwxq2rvizcx1dcpfaava7";
 "avremu.source-0.1"="inwrrgrds8ympmhzgrk3m82x544x8nhi";
-"axessibility-3.0"="a43649gdk2b6sxv4vkrvk8lmw9vmcijy";
-"axessibility.doc-3.0"="wys2qwwj4aiwhxpgllayv7kw6pb32jnd";
+"axessibility-3.0"="21hz0f1kbq51g3s4s6pcc2wg869m3a39";
+"axessibility.doc-3.0"="9s7zwv0a8y52ddgv5wvyhgp9id55zz9v";
 "axessibility.source-3.0"="g8jxfyvj67bx306vkyryhfml2v535959";
 "background-2.1"="akcsb7n8iyy4zlcgfp0ikwb5awzdnh9d";
 "background.doc-2.1"="inm76hq9brwc39n6bhp9782766mmgwpx";
@@ -3007,33 +3167,36 @@
 "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";
+"beamer-rl-1.4b"="vp7k73cf2xppajwqaiwxhgbwsacvmd3n";
+"beamer-rl.doc-1.4b"="av5a5ww2xj6adh8lh305dv9y8cy736xl";
 "beamer2thesis-2.2"="64a0v9a7xr9yi4ffsbm98s058hkmq9wg";
 "beamer2thesis.doc-2.2"="5ypn90w572jlw04xi4vzk7pxxsf7ciwy";
+"beamerappendixnote-1.2.0"="vvcnya52knjsyjg7q72y5hck3mn4yayj";
+"beamerappendixnote.doc-1.2.0"="z671llyrbspkd3mhygsb45fhsgcxjy48";
+"beamerappendixnote.source-1.2.0"="fxgc3dhb0af88q84s2947dz58gwbj00s";
 "beameraudience-0.1"="3zc39f4qsyqi4204k4a5n9pksf6gk3xl";
 "beameraudience.doc-0.1"="wkgcr8dyl8ywxwpdc5h8p96dsw9l229y";
-"beamerauxtheme-1.01"="s3lirw6yl6ir8z6z9iq4pfrbwdcq7yp8";
-"beamerauxtheme.doc-1.01"="a76wy5dqlsv25w2f195jk385j25dk4wg";
+"beamerauxtheme-1.02a"="f6fs70zhyj9hiwpq17h593l71s2r2219";
+"beamerauxtheme.doc-1.02a"="zzja4whim0800pbryihqyqy3xhzwj8is";
 "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";
+"beamerdarkthemes-0.5.1"="kksw37ml5mq90c3nrl2fk1jn84ynizxz";
+"beamerdarkthemes.doc-0.5.1"="z3ijc965ygx8a2wqpizphjhmbxkvz1m0";
 "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-cuerna-42161"="vrgqfiwzbf1082zbj8pvn53dmx77qi4f";
+"beamertheme-cuerna.doc-42161"="jcxa5vs5g4nwgck7913jb2jnxccx2y3f";
+"beamertheme-cuerna.source-42161"="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.5"="fdc828c1rqx6dv1qdsnswlrbg8hv1s5y";
-"beamertheme-focus.doc-2.5"="gbbsmdhrpw8bxdmwj088hs5dk0gkjrzi";
+"beamertheme-focus-2.8.1"="rsyiviz20m0f8v699yv80rw4k4drbl3m";
+"beamertheme-focus.doc-2.8.1"="idhc1g1ja4y43gdnk3bd1387v6fw14d2";
 "beamertheme-light-1.0"="9vz0g593s4ykwasfky58jqq6h7a95p12";
 "beamertheme-light.doc-1.0"="dvyzvi4hl69xvvgbhdbp5ax2l3z68nck";
 "beamertheme-metropolis-1.2"="g062nnxl4v5951xq2xa4smkdjq6v2xpk";
@@ -3043,23 +3206,33 @@
 "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-pure-minimalistic-2.0.0"="5wsvlda1yasnisw6zx61g2qq63106a7a";
+"beamertheme-pure-minimalistic.doc-2.0.0"="a33m9xa1jqc650zrv6mrz9xdyfs14nyc";
+"beamertheme-saintpetersburg-45877"="jkhmvyc96zm66cmfjl1fvrnz86a81zbp";
+"beamertheme-saintpetersburg.doc-45877"="9msrd7ylkwfg6ijdx3rddcl143p17383";
+"beamertheme-saintpetersburg.source-45877"="16hmcal8wb74z1qdi5r46w36w3n87n6z";
 "beamertheme-upenn-bc-1.0"="i535al38gpn0j6mhixm5g6vnlj7gi957";
 "beamertheme-upenn-bc.doc-1.0"="s7wxbnlgqxwpabb06jc5nawxm40bnia7";
 "beamerthemejltree-1.1"="iqjiwv4v9vp84a3cjjmv5gxygyclw5c5";
+"beamerthemelalic-1.0"="qn1qm2cy585x1js22mns5kfav9a4d67m";
+"beamerthemelalic.doc-1.0"="rq3x8gm2w1bs4ci9blxsj0zbxlwp8hvm";
 "beamerthemenirma-0.1"="jix18byykz4n2mqcipf60pskfjlj3ini";
 "beamerthemenirma.doc-0.1"="llvppchvbd0zz9cl3lpswghs8hjm78rq";
-"bearwear-0.1"="v7iz5bjra8gshp9bv350kxkjj462r9cj";
-"bearwear.doc-0.1"="hzh2n85cajkb3saa3hjvl3xhbml0xvwd";
-"bearwear.source-0.1"="kfg81v58wgfnahrlh6srs7fj6ycgr5ch";
-"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";
+"beamerthemenord-0.2.0"="5yf01l6cjhjsjd6a7cr7fgb06q0zsam4";
+"beamerthemenord.doc-0.2.0"="g9zz702frvpvfsd4gsdrsmy7zmcmdnp5";
+"bearwear-0.2"="qhsma9q7ijwa5f044f2j3ycqf142yy5b";
+"bearwear.doc-0.2"="nw04s1cxs952521d77iw69lvjsgbz2pr";
+"bearwear.source-0.2"="g52pgqfvx9argj6pdigp3hq8ymxivnah";
+"beaulivre-58503"="2qb3mpxm0j03cwz53glcksj2ax78w84b";
+"beaulivre.doc-58503"="xv7aibyvfvcbmx8jpgnkhj2gzbbvghj3";
+"colorist-58434"="p3wm7g1rxillh9y6p9ll2df3f1h33w0g";
+"colorist.doc-58434"="71sys4ac5khgmkswqspyb78mjmby7v7w";
+"beton-15878"="0psc07yssk92pgrf4c9zvyr4k3ibbz3j";
+"beton.doc-15878"="9jpvnkmri3w4m9ik5d4l7mnlfpwxacg5";
+"beton.source-15878"="znwrdd877gdwmsiaxc9v8pczdw21wrb8";
+"bewerbung-1.2"="4zrcxx73cyavv3wm4dm50hvrmjw02s3f";
+"bewerbung.doc-1.2"="m6668z3ds3sgdvpr409jbyshsznqs4qp";
+"bewerbung.source-1.2"="5kmfflgw9nnl5gsigh08ww7f9k9zhmh9";
 "bez123-1.1b"="9lx6fqcskk9lj28vcfhfnkmjb9dhlqdh";
 "bez123.doc-1.1b"="s5s834dhxqlqc5i8dswvayhf62chrqbh";
 "bez123.source-1.1b"="fsc7gqwcbpfjlhn0bljq7l0jd8g6zapd";
@@ -3071,10 +3244,13 @@
 "bigfoot-2.1"="i4hdv09y0blcrbhk554ilzc70fv19242";
 "bigfoot.doc-2.1"="ixi0hkjrzg740q3pkp9lwrq43ab1f006";
 "bigfoot.source-2.1"="jp9h2p1j46ha7ksxvh3d6rmxr0832r1w";
-"bigints-2019"="6ig6fmxy6wj6k3yc4x9s7b18xbfxj4kp";
-"bigints.doc-2019"="jyxj3risms61j5aazx9hkxxfwbg6nyzr";
+"bigints-29803"="6ig6fmxy6wj6k3yc4x9s7b18xbfxj4kp";
+"bigints.doc-29803"="jyxj3risms61j5aazx9hkxxfwbg6nyzr";
 "biochemistry-colors-1.00"="fvz3nlqi6y12g5pcyh118l6vjbw5kz2i";
 "biochemistry-colors.doc-1.00"="r7n07xkk4ixxk9zhz3ffkg7kqsz0i8fc";
+"bithesis-1.0.1"="8wam0lyfcr3na06bsic1137si7pdk61y";
+"bithesis.doc-1.0.1"="wck5b80wr5nxiqdg3fy9j9vqlrrxg0vv";
+"bithesis.source-1.0.1"="iqkpvidqv1pkirh49g1is5a4bwmpkjf9";
 "bizcard-1.1"="l59w5wy3djx28g5yw2ywagi5am258bry";
 "bizcard.doc-1.1"="yallp1mh43m9224sqhzg85ylymiib9v2";
 "bizcard.source-1.1"="z70q003l3pmi9p0z0a99f2bz0lxkq2y9";
@@ -3083,8 +3259,8 @@
 "blindtext.source-2.0"="dr68k54p44vgwp3rw9d1khc733k4apah";
 "blkarray-0.07"="djcla33mmskp42qbf8qg053p34515x1a";
 "blkarray.doc-0.07"="7iy0ssb4spk30f5janvknnhl91csvmyk";
-"block-2019"="b75bd0f6imd8svp869g4j3q2q02pilpp";
-"block.doc-2019"="gza7j45w5qixk19px05wr4q67m4lzhkl";
+"block-17209"="b75bd0f6imd8svp869g4j3q2q02pilpp";
+"block.doc-17209"="gza7j45w5qixk19px05wr4q67m4lzhkl";
 "blowup-1.0"="zhslxr7v04yhkdssranpiwpql9z7xsrf";
 "blowup.doc-1.0"="paw88yvcal35rq5wpfxm5s9hlsyz6z86";
 "blowup.source-1.0"="kmbxfjca3pwppfhklyhg8k5ddkxg8r43";
@@ -3096,40 +3272,44 @@
 "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";
+"bookcover-3.3"="8jzphigwp2xys5h1hq3vgk8xx8hbl8bw";
+"bookcover.doc-3.3"="caki4lv0vkwnl12in3i2xa78avsba80l";
+"bookcover.source-3.3"="pr9g2yp4vqi3fgqwa7hgy3zmb3vr1f76";
 "bookest-1.1"="70j4zrqfn4cr0qg7dhdqainy3pxxilg0";
 "bookest.doc-1.1"="3cbqgyzvm6zvzib6jhgdyy7mcw5p75nc";
 "booklet-0.7b"="fkicb41vlz1m3spn6jf9g1dk28f22v7i";
 "booklet.doc-0.7b"="c8y8mxy7hv7qmp7a8bib37vi3xy2pfxx";
 "booklet.source-0.7b"="h46d62nvn4gnnj26bkd5h8m22s0jld8s";
+"bookshelf-0.5"="3dnqq00xpzl0w5ivggqx14a931gbrs7x";
+"bookshelf.doc-0.5"="jdbx79b2c0mcnjz7126lb4w2zpxx9ck8";
+"bookshelf.source-0.5"="6814jnc7bsk40fj46mn7i72i2p1wgpdk";
 "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";
+"boxedminipage-1.1"="94amgb6anrixzngmc6iz4752nihjxq7b";
+"boxedminipage.doc-1.1"="vwifjz4ndsc3vw7hzfcib0wrjjgq977s";
+"boxedminipage.source-1.1"="zik88vcqpmddr0nscymcf669j0bwkk34";
 "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";
+"braket-17127"="ck5gh00qn839wsxy2qili0184vswy0br";
+"braket.doc-17127"="mqckibrwr123hhda3fnbf8wrh1d16bxy";
 "breakurl-1.40"="lsl2j1iflzhwwapb03s5hg137rynjjhl";
 "breakurl.doc-1.40"="rjyrmhd32w912qg9wd4qxc9q46kg8qc3";
 "breakurl.source-1.40"="lpxb827p465qc14c38rk14jrzag7jfq6";
+"bubblesort-1.0"="i2z21xh8cmsldiv9cs6xr6shwlyqb48i";
+"bubblesort.doc-1.0"="s849r13af8zz7m6h12qdcj72j24wqbcv";
+"bubblesort.source-1.0"="ps2dm6k0y8k66gxsw97wp7saplgs7raa";
 "bullcntr-0.04"="w4fxp9fvpbg882yb855sl4b6w8fypiyy";
 "bullcntr.doc-0.04"="l1p8zz226qbnzmx4n78xhjsrc26z7jxw";
 "bullcntr.source-0.04"="6lw02qi8iyp3qph7yaycfm5p1q6l71r3";
-"bxcalc-1.0b"="87gn179ih5gfhbdig83kipyhaww8mhx0";
-"bxcalc.doc-1.0b"="9zpmdfhd3bp9iydcszn5pj79l5rpv342";
+"bxcalc-1.1"="zmqgp92kdip1cbs43hq1rwpfdflr7c68";
+"bxcalc.doc-1.1"="1zlvw9fd7zibh9cmnpk8l9ziwar6ns0l";
 "bxdpx-beamer-0.3"="q07kpnmln2v70w83z91vsk53c0i63x02";
 "bxdpx-beamer.doc-0.3"="8ynjsgbyifkvz27qp8j4nrfk3pryphdf";
 "bxdvidriver-0.2a"="f6ndmagn10ax4hpmlia649f7c14hjkgx";
@@ -3138,10 +3318,10 @@
 "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";
+"bxpapersize-0.5"="a39v65wwyrz0wfl845cvk1sbnki84l61";
+"bxpapersize.doc-0.5"="z915b4vspqsbzdvihvkppcmrc8j3758w";
+"bxpdfver-0.5a"="wzkn89ly0cham8r9lcsrcr45zpvwa8d0";
+"bxpdfver.doc-0.5a"="4b3kzzmc8n6pwcf1qlnzczpxw57a5ips";
 "bxtexlogo-0.4"="5czz5b638x3h3gpyb2n5si8py53gwl9v";
 "bxtexlogo.doc-0.4"="51msprgb7p49x3lhk4cr65ay7dpzq5d6";
 "calcage-0.90"="4yzr1l7jhng80xs4n1vavaks3d8cjr49";
@@ -3152,30 +3332,30 @@
 "calculator-2.0"="z44sdp5jlkqywi01c1x7ly2yvzkx1h9w";
 "calculator.doc-2.0"="dwb0bhngsn0xk56gnil8wbaj5dv7v0yr";
 "calculator.source-2.0"="3m4b364wkgfvxyc8y20rg8c7rh22rhyd";
-"calrsfs-2019"="cq6j9glbxrl31xwx7k5s8ayispn82vfx";
-"calrsfs.doc-2019"="avw2hw984yx1vsxayn96nzhgqcfpz90r";
+"calrsfs-17125"="cq6j9glbxrl31xwx7k5s8ayispn82vfx";
+"calrsfs.doc-17125"="avw2hw984yx1vsxayn96nzhgqcfpz90r";
 "cals-2.4.2"="0xq2pylhs1gl542s86wm23nynnfzk188";
 "cals.doc-2.4.2"="yq4wig26r1cadd3kxg5bfraig4axvyvd";
 "cals.source-2.4.2"="fshbdf6ljfy0c7kdcvz5kyinysplcj86";
-"calxxxx-yyyy-20.20a"="77wp5sxr7a9z2lhxa4cc3f20a3lc5fdz";
-"calxxxx-yyyy.doc-20.20a"="qpasnrbn64r5ha4sxkgrdfrljqjprjvf";
+"calxxxx-yyyy-20.21a"="hx11kvbi5kph8himmnr7cygyxrs92h6y";
+"calxxxx-yyyy.doc-20.21a"="rc1cp1b4mxrq8pbva644wgra1cvs45dn";
 "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";
+"canoniclayout-0.5"="vg54aawlapxdw0dp8s7jinkl16jd8n6h";
+"canoniclayout.doc-0.5"="cnf6kxlminyfh3k6qyj0lfgxrvxa19j5";
+"canoniclayout.source-0.5"="dhqxmnl78zscvl2wgyr9y5qr1fhmqajv";
+"capt-of-29803"="qmph3ai6555l904xk4q6sy4jml5l6nqb";
+"capt-of.doc-29803"="bpa4ll7afaz43ysz8m7q8fs8klvv4h4k";
+"capt-of.source-29803"="9rjjpf1v8qg3v8j27rn8x3b495lddicd";
 "captcont-2.0"="5s81zvby8iq2l0j4bkz99s56w0kvc5pf";
 "captcont.doc-2.0"="ivp30a2jxrnp8zivmdm61nn0i25kiarz";
 "captcont.source-2.0"="bgy7jzbckqnajp42hy4x31dvb01cjm7s";
-"captdef-2019"="gx42x6flbn7jdbrbqzsn8csgi07ij4k0";
-"captdef.doc-2019"="fykmdpzxx24x66iph3rrzj0sc755y4nh";
+"captdef-17353"="gx42x6flbn7jdbrbqzsn8csgi07ij4k0";
+"captdef.doc-17353"="fykmdpzxx24x66iph3rrzj0sc755y4nh";
 "carbohydrates-0.1"="x4rj3x70sfcdgq8sd8yv2486khxip4wz";
 "carbohydrates.doc-0.1"="lp5y1sx5s74px1x03366lpn676vhl6c9";
-"cases-2019"="5w83n62yi8pdchdqy0zkp1kv6vqv6ck0";
-"cases.doc-2019"="b9lgwvqfdznf98956xm0d3xgb434v8b7";
+"cases-3.2"="qnmps08pjcipmj0fghr6sjmkm5r6gx6s";
+"cases.doc-3.2"="kg8k67grlxq0cipm3mc3sj1k12pl5qy0";
 "casyl-2.0"="4px818jfrl4q6fs2p7sabq1pihzvnsw9";
 "casyl.doc-2.0"="dcw7gljkwgkgsv1l6g6680mawm0x8sby";
 "catchfile-1.8"="d5yb62s7q2pbznla8nifhaih623myzrs";
@@ -3194,9 +3374,9 @@
 "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";
+"cclicenses-15878"="scxyv1a4lh05mfgbs55rcg40vbfyvvij";
+"cclicenses.doc-15878"="17zr0mgalzfnpayvzym8hri1yfz8c6xa";
+"cclicenses.source-15878"="hgm5y1054596k129p6j4s86kv0m0ky76";
 "cd-1.4"="34nj75mgz2mzxjbmpik2kvqhmwdmbw71";
 "cd.doc-1.4"="i7230mqkczs0b3nczmf3gkv8z0bx61mc";
 "cd.source-1.4"="h5plih2dk6kk9klc7lwv5gpx88apljlj";
@@ -3206,28 +3386,31 @@
 "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";
+"cellprops-2.0"="i00p0s598n0m8840zy9lxs116na6plc6";
+"cellprops.doc-2.0"="4n052xl78fl4yb5f19i64zhrkl6v1n4n";
+"cellprops.source-2.0"="nbna05ay9zyxixiiqiyln2gy8lcyhcm6";
 "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";
+"centerlastline-1.0"="svlrrvv2sa6534pkbr8rzqiaw4jiz6av";
+"centerlastline.doc-1.0"="6b213204s814gvfsf40rmcfhcx14ncpa";
+"centerlastline.source-1.0"="35f4f2b8ccvz9k04c7n0nss2i9s1a3ll";
 "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";
+"changelog-2.4.0"="gxr8r8g0vzk509sqvxllh0zflba5fbni";
+"changelog.doc-2.4.0"="w1is1zgnbs7y7xa6qcmaf5rgc1w5bz0a";
 "changepage-1.0c"="s3dd0v3z0g8v74i6cnasyaa70wnqiimk";
 "changepage.doc-1.0c"="g63jqnyrkc74dd9ksi0s7pbxq7s4dzwb";
 "changepage.source-1.0c"="0ck3lyl2kzvm1182hmw88ni48paff7aq";
-"changes-3.2.1"="9cah9p1jvfmqmjgm5m72i3ahy4kaacpq";
-"changes.doc-3.2.1"="z7rc4i3ivf72bqd42jlg7r7aqrh7502z";
-"changes.source-3.2.1"="6pizd4vc5c9kb6639q9cq24yks4d5x4j";
+"changes-4.0.2"="zgzcy1cphdvibrj11dd31m5k1gfhcfwb";
+"changes.doc-4.0.2"="qbnh8gsgwcqsx81vzl7px699v8x4vkh8";
+"changes.source-4.0.2"="pw0msqw9p18z33vnn0wagg0f4ssd2k5z";
 "chappg-2.1b"="231kpsvxwdnmakq4mkca0nisqdl622n2";
 "chappg.doc-2.1b"="nhh2f6k2z5gh449b91fmxnvh359n9adw";
 "chappg.source-2.1b"="74f8nr6m6ssdqxynrxl2y4za3rmj9sd2";
@@ -3263,35 +3446,32 @@
 "circledsteps.doc-1.3"="b4q2r072dkzgfd75mj7av60a5v6fah1v";
 "classics-0.1a"="as59hrjhv6vnw9dr4pghhx8w7kmab8kf";
 "classics.doc-0.1a"="2gbi1lmx3chdd848ib2wbsx8bcmzg44a";
-"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";
+"classpack-1.19"="hdmx3wk4ji1l2rzyhrvsl4waiy3bmlpg";
+"classpack.doc-1.19"="dl6zzq4cqjc3xhc8m2y7fmz2jdgzl7pl";
+"classpack.source-1.19"="drsgpzskdxa2rjy94sx75sdkcvnwpwk2";
+"clefval-0.1"="kxn3k2szmgvw773f2x826f8vmf8zdrl1";
+"clefval.doc-0.1"="xgnkici53d8mlg38k7b0izwvx0xkn82s";
+"clefval.source-0.1"="qkjh9803i88540p477379yl95b1wyhgx";
 "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";
+"clock-15878"="bcsbr112z4np0wszh3dwv9h5l8w11bvd";
+"clock.doc-15878"="prj65yh580yg74pckacsr432rki2nsl6";
 "clrdblpg-1.0"="rw9bphdh47x4kpwzil4pxvlpks1s4hz0";
 "clrdblpg.doc-1.0"="0brjv2dy10l0gy3sx6vjw3f5xq9h67bw";
 "clrdblpg.source-1.0"="7pcjrddv97fdsljj752n5gh9mygyl1ph";
-"clrstrip-2019"="pi8803gja6wyaq33syigff4s9zgrszph";
-"clrstrip.doc-2019"="y5j0z26acrhmfbrl2xln47zfynqvrfck";
-"clrstrip.source-2019"="whsy1grs9pgfbz2glsl4hb7vda69cnib";
+"clrstrip-53537"="pi8803gja6wyaq33syigff4s9zgrszph";
+"clrstrip.doc-53537"="y5j0z26acrhmfbrl2xln47zfynqvrfck";
+"clrstrip.source-53537"="whsy1grs9pgfbz2glsl4hb7vda69cnib";
 "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";
+"cmdtrack-28910"="1jw2c4hx9xmalis8lkz7lr4b38h6srlq";
+"cmdtrack.doc-28910"="0fniwn5zccpkypjn9v5hjl0baxscpc8a";
+"cmdtrack.source-28910"="hlqnd8ar2w2wyjr7rxi6qbi3mw2ppgsn";
+"cmsd-18787"="4b40ccv8788hg71xh6sv12gnzyy2q4rb";
+"cmsd.doc-18787"="j3bvhldqzjqf1snv9pbg7k39sbwl2ccj";
 "cnltx-0.15"="adx1n60b5dg15r60pr87nj8i979l23sy";
 "cnltx.doc-0.15"="603b8mxzm4cwj03wxgx5j1byhydv96qp";
 "cntformats-0.7"="v6xl1mkldlf6265h96m2q0bylifxhl33";
@@ -3300,9 +3480,9 @@
 "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";
+"codepage-51502"="y9xv0i4lq1nh9nav86b5j34rws8lln53";
+"codepage.doc-51502"="sv2vn5f4kcgzbg52233drja6705lcgcl";
+"codepage.source-51502"="4955x5b5ddysnx8bksmwsqhj1jy83991";
 "codesection-0.1"="mnsfhjy6j2ypxiwmwx85w2k2zyw928pi";
 "codesection.doc-0.1"="s2kwd6brlwa42pvhpjasx84s87vmbz8j";
 "codesection.source-0.1"="j94xngba5c8r55idfqgy7ra3imzkmg8x";
@@ -3312,44 +3492,39 @@
 "collectbox-0.4b"="2kxzzkgkgcjw80ff9n2mjnnfpxaxcdhj";
 "collectbox.doc-0.4b"="2xgqgni67w7q4ad0jqy4vr9wki08kn1g";
 "collectbox.source-0.4b"="szy9gprjqnkx357dca60120lvaiyyy8f";
-"anysize-2019"="0phqi21d8qz3ifadzfzyfb04v10xc46n";
-"anysize.doc-2019"="4as0n5cw5g21j1wy094gdrbw8pzdm460";
-"attachfile2-2.11"="dc3b9mx6z10cv95vwi6a61cvlk5ca101";
+"anysize-15878"="0phqi21d8qz3ifadzfzyfb04v10xc46n";
+"anysize.doc-15878"="4as0n5cw5g21j1wy094gdrbw8pzdm460";
+"attachfile2-2.11"="fz9x75fk340ffzvsg4ishk0hjvgil8p3";
 "attachfile2.doc-2.11"="wcw202snsfgf6g607h8xga4lsq41gg1y";
 "attachfile2.source-2.11"="0cp1pzdkn692vyav1p969v2snpc3dsw0";
-"beamer-3.57"="p5nvgliaj010mp3ll25al5i59jsl465i";
-"beamer.doc-3.57"="810mwi012vlailxyqh88fqq5znnvlccx";
-"pgf-3.1.5b"="2050mqhy0yr879p6g0jhq4a3fi9yawr1";
-"pgf.doc-3.1.5b"="32l3zdg4k2i8l8wbwxqhgm7csd4ml7yq";
-"pgf.source-3.1.5b"="axqhmadpaw4srzqcj65lg69dxjr0m45y";
 "booktabs-1.61803398"="4hkipcli3lx2rfz6nyk95vzhrli76nfx";
 "booktabs.doc-1.61803398"="41kkvglc6cpp7rkyrc4957rw9viwwlc9";
 "booktabs.source-1.61803398"="fn9dc22vsdrrw19a8p47h0ysla6j6w22";
-"breqn-0.98i"="pzakmaixv1adgk3jhqgbw7d1jkcqmxpm";
-"breqn.doc-0.98i"="4qjc9b2kn0n74dsykirgb886w3hgyq96";
-"breqn.source-0.98i"="b0wb1y40jbhfx3ha7pifik5fpz6lxk3c";
-"caption-2019"="ank9flrryargxl9pj0959qnzklm9fniq";
-"caption.doc-2019"="02s6kp8h9hi5chbx03iim3p1bsq9hng8";
-"caption.source-2019"="xnshivm17p1gk3bb0r8mhib95j6mcywm";
+"breqn-0.98k"="zxlvpm3140isqldavaiq93i62wx9fvd5";
+"breqn.doc-0.98k"="rq5wmm3nkf8dn5ai2fc9vbrnahb1aym9";
+"breqn.source-0.98k"="d6zijlq7xzciyk3xn1v5pbly5wxhd63m";
+"caption-56771"="bjmm0mpsrkwvz5mzk9n6dqpn6smfcbya";
+"caption.doc-56771"="ck3gbg8qcdfji56xksflhl5664fdrvkb";
+"caption.source-56771"="lg7lv6j2mwfzxd04sgcvs62f762jimp3";
 "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";
+"cmap-1.0j"="576i3k2kyz947vm9yfwcl13pid3vdla2";
+"cmap.doc-1.0j"="93qcyi11nlxbqaycsv59b0b0x50i7k4v";
+"crop-1.10.2"="8g4mwi6zyw5pxcyza5jwpyh41xyvc6hs";
+"crop.doc-1.10.2"="77dh3wm92skq9s778fvn9wdc9x33xi4m";
+"crop.source-1.10.2"="6xhzr3a69yyqiff20sm393h6n7821v2m";
 "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";
+"eso-pic-3.0a"="5hkndcg8z7mq3hjd710hdm05sy15gpmn";
+"eso-pic.doc-3.0a"="5ls3fcmrl5v6dpi9qzympyvhdwqfiahi";
+"eso-pic.source-3.0a"="xz2ybhj1aw80mafgbn7lrj7g6mssr5g4";
 "euler-2.5"="32y9kxnr7zw4byr1zxsd2iqcfyzjvn42";
 "euler.doc-2.5"="g4bxh88pzc2872qk0w0sgapcaglal808";
 "euler.source-2.5"="8h1ahs9sbijdsc3xiv1rwv6k0vm9m858";
+"everysel-2.1"="3cckrnsvf7gk0f10zlpm0drsdnvbrh8n";
+"everysel.doc-2.1"="m6db8s78ndcb77q49g7fdwfyv4f74dlj";
+"everysel.source-2.1"="yxbk36ppzqqv507g0q0l4v0xzfy4z454";
 "extsizes-1.4a"="g3j8wf0886xf7ww65zi6h8gmc6x4mk3v";
 "extsizes.doc-1.4a"="xb8w2wf5i3lvcmppbklpp1hxc12acj5m";
 "fancybox-1.4"="xlk6adym8ans599d0hrs0x5nbaadkls3";
@@ -3357,96 +3532,92 @@
 "fancyref-0.9c"="0417hndq96cnldfbpc3hc1f7pyfqlscw";
 "fancyref.doc-0.9c"="wr3q5g6hjznnfcr9l5lvl8z07ixm1m8i";
 "fancyref.source-0.9c"="54cyla9pjr00km1djk4jc0h8ly50c8d0";
-"fancyvrb-3.5"="yva2c85f3kn51pnys6c25hb4ji9qnh7s";
-"fancyvrb.doc-3.5"="l7m134pqsqawzg76rb9dsp6hhvp89aji";
-"filehook-0.7"="8r8bqk7iabghr1qdna5ywa4r9f1ild5v";
-"filehook.doc-0.7"="1vilzkf0ymv1lkl5qgxkfpqvfxrkg31z";
-"filehook.source-0.7"="s6kwdhi9xv129ficzbhaiyn6f85b7g68";
+"fancyvrb-3.7"="8r16m2y70jzxim4ng30fvggkqsidysr2";
+"fancyvrb.doc-3.7"="rmfx84m7rapskdcn4mp205gcvm60n8q1";
+"filehook-0.8a"="yr1aaa45l23lavng9vnqk0bcqqyks5m7";
+"filehook.doc-0.8a"="mcz3zb712g7fgiqf9n7dh63rvca5nw0r";
+"filehook.source-0.8a"="d3dd5han0ncvs888ymamqvg2cnizm5v5";
 "float-1.3d"="dqksfsgqpc0vprkhfc6c9vfxlbrnn8sw";
 "float.doc-1.3d"="88hpzqh1011kwvwwm5bppb2gx6c9qqrv";
 "float.source-1.3d"="j1vp24g1lvwniahnd9vlw32c61cjswn9";
-"fontspec-2.7i"="vhqnyrgqlsg46f6wjpx5q1i4iisfgfnp";
-"fontspec.doc-2.7i"="9wl29gf9zhxp2bq6wvjl7sx4v5vdvfqy";
-"fontspec.source-2.7i"="yrl2big2r8zvflzawy8myggn8ahavz57";
-"xunicode-0.981"="ybvkdgz4sdl4nixzgz2rbmqfz7hwajv4";
-"xunicode.doc-0.981"="lydvg50dcpp0lk3m9niwdyf1vra61mgf";
-"footnotehyper-1.1a"="4hypxh0wdrybr4l8l491xx96v5f2mhiz";
-"footnotehyper.doc-1.1a"="l4ixap6zsq62fb63nm5hv9njmc0p3vmb";
-"footnotehyper.source-1.1a"="k3jhll47ppf1zi2rhxhsfnbhi092vm5v";
-"fp-2.1d"="lxyxf8jkbgrkk43qbnr2s3ns19ihgmw5";
-"fp.doc-2.1d"="ih2kq6xp1nd5gs9bc9vhd34qa7jcj093";
+"footnotehyper-1.1d"="vwi1wcxxxjxh66wmjviyfc8cizv2h48p";
+"footnotehyper.doc-1.1d"="pfcggq6810cvlgknlpdxwpvvy22j6csk";
+"footnotehyper.source-1.1d"="sz8bpag3amv7n9nyirv80jrfpvziih7c";
 "hologo-1.14"="3sz5m55pgy5adawf1qsnihw0mqf94hbk";
 "hologo.doc-1.14"="h7szzyb4hsbsa1inbyinazfvg87kn1da";
 "hologo.source-1.14"="8ijn8yd831dvsff40ksd8ak7fas85mgq";
 "index-4.1beta"="qbh9vs69mrp2czw492icb71wbx4nzshx";
 "index.doc-4.1beta"="l3476by3qz0r0cn3lcbw006ay5p11naz";
 "index.source-4.1beta"="0i38dyjh6278hxgkdzy0wvlcbn2w0k7n";
-"jknapltx-2019"="cvwv1bfgf5s8rnahghpy2pbb7kgwzqwp";
-"jknapltx.doc-2019"="cxdmxr63vm4sm8rv6bp9n3yyw5gqc7y3";
-"koma-script-3.29"="cm6r96yhwmmwcxg9q0xa8pchhxz10wn2";
-"l3experimental-2019"="8zl15x29f592faif8gm224085j5w7ljz";
-"l3experimental.doc-2019"="c6c7v530ak5h8qs11m9rbsr06pdkqwng";
-"l3experimental.source-2019"="2l7rzmdwzags9f30y9vi7s38a49w9qzg";
-"latexbug-1.0g"="fjk32p2lbq0bj54snnajz4j21x4dbqsr";
-"latexbug.doc-1.0g"="1s1j51jphz3wphi8idq8jpvi935ag683";
-"latexbug.source-1.0g"="lnghssyyyrc9y2nca730pchkyvjmbk40";
+"jknapltx-19440"="cvwv1bfgf5s8rnahghpy2pbb7kgwzqwp";
+"jknapltx.doc-19440"="cxdmxr63vm4sm8rv6bp9n3yyw5gqc7y3";
+"koma-script-3.33"="s96ab2rc9483sa0axvd3v4q6z17xaa0x";
+"l3experimental-57789"="g8hk8qs5my4g6ci6hz0sa0ibr7n19hgl";
+"l3experimental.doc-57789"="g3gs9jfh2a9l7v378kanz3mshd3jhs3q";
+"l3experimental.source-57789"="kaxhwk53xz5y6h8q52pi3ivbnqyq6wfq";
+"latexbug-1.0j"="2hvzz7cxyq24mscylmxn8y2dqsdcbgv2";
+"latexbug.doc-1.0j"="kiz30ji995p7nzbi4g1xfr1621jm1h5q";
+"latexbug.source-1.0j"="rjxgrbk8nx0dcf1srw2jcz55c6qwr7k6";
 "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.80"="qcmm9glcclflqf353cyj0hvymy9k81yp";
-"lwarp.doc-0.80"="7xp41iacs2w6b7x9mkkzw2692k575zis";
-"lwarp.source-0.80"="lpsg5x6jsszwlg2xvizsnj6cdlsw3jvq";
+"listings-1.8d"="ci87vjqba9nnwsgm8412749fg7fid33v";
+"listings.doc-1.8d"="jq29kbrz6bxs58iqhp76ail0kiy5s53r";
+"listings.source-1.8d"="0cz06d1v08369wgfnkddmzqi7258rsx0";
+"lwarp-0.895"="4aa4ky75hwrrqkqmk1l4rngriym8vdax";
+"lwarp.doc-0.895"="zpcz0sp4jvxr06bn70v5wi5hi3wjwhz3";
+"lwarp.source-0.895"="p98yd0hijyvsz6ij19kxkhrb11n1gm0r";
 "mathspec-0.2b"="kwvx81d4nlxj7vbr2n5zvgnfvkasg4y0";
 "mathspec.doc-0.2b"="rqykkdkfahnnnphcns26p19z9mr2mlgh";
-"mathtools-1.23"="sz6g5312qbq958v9sw4jcdyazqia53ka";
-"mathtools.doc-1.23"="cfavniflyk7hmkbkhccvyq5jhpjhwnm3";
-"mathtools.source-1.23"="6vly7yb9gcgjb3qfibgihfr4s2g5cbd2";
+"mathtools-1.26"="kms9438gym0n18hl31z7d6vix90napc3";
+"mathtools.doc-1.26"="dwjs0ps1md1b9b8mylqk63hgdmna0civ";
+"mathtools.source-1.26"="14z54fblj7d3cbav1xx4ijx8gy27y83s";
 "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.7d"="b41abl38422cr5brjfy0630iq9x9mj8z";
-"microtype.doc-2.7d"="9sl8bgxi48cda1kln3qqy9xpf6lfw2d2";
-"microtype.source-2.7d"="39b3miq2ypis8brg4q2wjjrw4jzggcy3";
+"microtype-2.8c"="lfl6mk4gzgz24qg078g2f1crc8w54i49";
+"microtype.doc-2.8c"="5176dwsvbxlazfnpnni7dx9l8b3n9zzj";
+"microtype.source-2.8c"="hkhb00d3yy7588fdnvrspz0i93jizn24";
 "newfloat-1.1l"="lbxyrzkqg5j3hgwjaw9gdm2h1cf381vz";
 "newfloat.doc-1.1l"="fkbi9h381inng5z9qdgnig25z0fxsb4p";
 "newfloat.source-1.1l"="p8lpx95dawyhvyd36nkppgilrflb79v1";
-"ntgclass-2.1d"="y8cgcs422bvbz798jxiliyzv0sllld5w";
-"ntgclass.doc-2.1d"="7s1fk4p4zhm9x4gph5zmd9vqjwj6zynp";
-"ntgclass.source-2.1d"="3m8mi9ms4mjnl5yk6ygk15a3751yhi0a";
-"parskip-2.0d"="ymzl3d3jfpqwr0xxqp8k2ixm1mbg0kaf";
-"parskip.doc-2.0d"="sp1wmxz801dnrc7yl46kpfn3w8c1jilv";
-"parskip.source-2.0d"="wvksyjs0yivnv2v1ydlq2bfg7rg5h7np";
+"ntgclass-2.1e"="zkss2080gby0mqd685h9ff8421j3nq21";
+"ntgclass.doc-2.1e"="d3ns0gma0fivb3phssvzx9b1c6zwfzpl";
+"ntgclass.source-2.1e"="i9d2yfcz7blz7c5gakqhycmmwhwykzgw";
+"parskip-2.0h"="mpszhyaf9p4wjjvvnr5l7xzjs2r51x1j";
+"parskip.doc-2.0h"="r5z89pafrb0h4g13ynjmkwinmdqipy2f";
+"parskip.source-2.0h"="3i9s9mgcz42qdcwhdsajlxjz4yv7xi1i";
 "pdflscape-0.12"="xhyfdrzcx5agnsmlgrr1hibq0pkzmmsz";
 "pdflscape.doc-0.12"="7z59wsjf9k7m6d47bclgf6iimhrhlrfl";
 "pdflscape.source-0.12"="9dmgmza1qbbr95mdi9k27vkr772g2w2s";
-"pdfpages-0.5q"="1bdik391lsmp7dz6d8arq1hdawj4qraf";
-"pdfpages.doc-0.5q"="9jdi9zs7hycixbdxld0m95b8935f4cqw";
-"pdfpages.source-0.5q"="f8nglq0jzz4n3lky57q6mmm2pdrydxf9";
-"polyglossia-1.47"="ybzl0dq2rxk033mm304m3lmi3s66v40c";
-"polyglossia.doc-1.47"="y0qqjsyamjmc9b1zd6lr4ba6xj7fpi2l";
-"polyglossia.source-1.47"="pjlhlizha6zyz9iv4wvpk5l6y9z9x88s";
-"makecmds-2019"="anpaqglvl5rmcy8r2q0ap8m117nsx89q";
-"makecmds.doc-2019"="39zxaxxqlmps1wd4rjy42a1hk027n06v";
-"makecmds.source-2019"="j4g888p0hniq7p6b30q1fb4qfw3qp7i6";
+"pdfmanagement-testphase-0.95c"="d10sf3di22akhqgamsdxahlr85hjxp8p";
+"pdfmanagement-testphase.doc-0.95c"="fnw5c33z7s0nnl907wsjcvadryfl3hs1";
+"pdfmanagement-testphase.source-0.95c"="wza6nvsaix43qljy4wdaw8affrpc9n85";
+"pdfpages-0.5t"="xvarpi4qrn25ia7h8mdkv0xn8nx68b71";
+"pdfpages.doc-0.5t"="5xigwnsba1xgl3yyan2xwfysxpz0ybsy";
+"pdfpages.source-0.5t"="90qnhk3sy88rr2rrvh2qagqrx8b4g071";
+"polyglossia-1.52"="n9g5zqm9mp17iyn29lvz27p11sn68mb7";
+"polyglossia.doc-1.52"="6dx3w1vyx3p0gbw712wyl0n5cn77f3xa";
+"polyglossia.source-1.52"="797hklcq9f3915g8lngn0bc9mjcpnacc";
+"makecmds-15878"="anpaqglvl5rmcy8r2q0ap8m117nsx89q";
+"makecmds.doc-15878"="39zxaxxqlmps1wd4rjy42a1hk027n06v";
+"makecmds.source-15878"="j4g888p0hniq7p6b30q1fb4qfw3qp7i6";
 "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";
+"ragged2e-3.0"="m0xrzzg743b60bzfw38y0s8c9p9jr2vg";
+"ragged2e.doc-3.0"="6yx2gi3mmwq1cskwlh8ydpa8yaw0x51m";
+"ragged2e.source-3.0"="if09g3gjifv77mdd45w65rq12547mkp3";
+"rcs-15878"="4lkd02hz1x9zkxnh247wmwy6n9pg4pyw";
+"rcs.doc-15878"="m1lw85b793n2nxywdi39fg438i6kif7x";
+"rcs.source-15878"="iw4nn20q54s2d4wdyby7n03ljcqrjmig";
 "sansmath-1.1"="yxyny4949h4hm4ajn673nzzw8wn8cba8";
 "sansmath.doc-1.1"="b8vzdmm1l2x7cyc15xzhmwjkszlsp2j3";
-"section-2019"="69anwmylbk95jbgr8645abp07ygv9f9g";
-"section.doc-2019"="ri1gsrpfp94rp0dc90djj1kgpka2p5gl";
+"section-20180"="69anwmylbk95jbgr8645abp07ygv9f9g";
+"section.doc-20180"="ri1gsrpfp94rp0dc90djj1kgpka2p5gl";
 "seminar-1.62"="z9nzymppz6hz3lxy0nliqvy5szq6jk4c";
 "seminar.doc-1.62"="23fz6p4ybl42rmr1m3fllg7qn1zbmfki";
 "sepnum-2.0"="x64bd0f3g1x0bcpdgd2lfspr13jyxvcf";
@@ -3461,16 +3632,14 @@
 "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";
+"typehtml-17134"="rk5lpbaikavkp0shg38cdk5b209wx3kh";
+"typehtml.doc-17134"="292x26pw24azh4zdwpy6sh3f1ksk8r2x";
+"typehtml.source-17134"="96p79dyy553b4mc01ihk7qgr11396drn";
 "ucharcat-0.03"="d445ic6gwl7d5d31s691vr63f4hn76dz";
 "ucharcat.doc-0.03"="ma6rz3djr9v3q5p8ffqyznjb91gjj5li";
 "ucharcat.source-0.03"="kh9cnzg1pn8c51bbph2amp5y1j85q38h";
-"underscore-2019"="b7kwk1zddr5a19mcw3yxrp9pffc604x0";
-"underscore.doc-2019"="gwqnbwqn6vjizs1xqnmbv8fmcrs274fr";
+"underscore-18261"="b7kwk1zddr5a19mcw3yxrp9pffc604x0";
+"underscore.doc-18261"="gwqnbwqn6vjizs1xqnmbv8fmcrs274fr";
 "unicode-math-0.8q"="p35257s5ldld4ya0xkvsxx11jrwxhg66";
 "unicode-math.doc-0.8q"="m9sy94l2v9qq966wlphf2ic8xfxdx81k";
 "unicode-math.source-0.8q"="1sydxxbljd69ds018c5hr8rk3cvb22qd";
@@ -3482,8 +3651,8 @@
 "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";
+"askmaps-0.2"="h7gsxw1m64s9ci55nf4c8xwr709jfcg6";
+"askmaps.doc-0.2"="06v8bsahhf9mmi3ln2zg8rj9nd0kpnbp";
 "asyfig-0.1c"="61q9dbbmirr3q1fncz10fpvqr68kj3zb";
 "asyfig.doc-0.1c"="1ynfgvq1hvwl8dflmf5vchv2xhmr8511";
 "asyfig.source-0.1c"="2403n3a1pa3gbrrs919rj56jcy4klyz0";
@@ -3494,9 +3663,9 @@
 "autoarea.doc-0.3a"="zh69glasmj251qwrw6pjrshprd6x4hsh";
 "bardiag-0.4a"="vh54valkzncvzlx8y58gzs3k5jq66s69";
 "bardiag.doc-0.4a"="576s5nnqvq13rjnnn4l2d1g1rnd64vvn";
-"beamerswitch-1.6.1"="7x0sr2v96b3bz02f99j3chcqwmadwyqa";
-"beamerswitch.doc-1.6.1"="yckpqwfm27h050ai4fkvcdbb2777r71d";
-"beamerswitch.source-1.6.1"="my4k810d0pxh52d2c09dhkcbp1lihsgc";
+"beamerswitch-1.7"="wa6xv124q0qnpx4a7i8slbbhvvad38i4";
+"beamerswitch.doc-1.7"="i191731mqn4ds48rmqg688afxa9b70am";
+"beamerswitch.source-1.7"="xwdacngvm25n0q3hyy5whxxrfyanmhnc";
 "binarytree-1.01"="xl1rqgn286y7hpv69bwja6c5rrbx29g9";
 "binarytree.doc-1.01"="7ihijqc33m3ydk77aw0qqqhf94yyrz21";
 "binarytree.source-1.01"="lk7v0gr502ck4z0d605z6mwkswqpmfyk";
@@ -3505,9 +3674,9 @@
 "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";
+"blox-2.51"="gy0crpqqx51xsqg48qj6w2zn03q16yrd";
+"blox.doc-2.51"="gd9ylc6j2smbi7bxnpfc3lr2ykb1apd3";
+"blox.source-2.51"="ckxfb299w0mqsbizvq04s65akfzsxjmm";
 "bodegraph-1.4"="h09jfqdgsgfbhakfxqbwz9wa9sdrwkip";
 "bodegraph.doc-1.4"="hwwfy0n7b2a54kywm1jq5nrs6fxbk1xd";
 "bondgraph-1.0"="xaviazf8k9kn6qckni79kxksf7r7mr00";
@@ -3522,26 +3691,26 @@
 "bxeepic.doc-0.2"="qkfwmg27v6ygkp3d9d1l18zrpribbx3q";
 "cachepic-1.0"="hr0pnmjxny590gzhqbwq9qiqd1vcpwrq";
 "cachepic.doc-1.0"="myyjxkc21qrwmvx2nvbg2smvzfzi5f5l";
-"callouts-2019"="i91ky84hjizrxkhb5k6281iq3fkifrsg";
-"callouts.doc-2019"="k4rca9nia095sgskhv0kzp1qqw0ydf8l";
+"callouts-44899"="i91ky84hjizrxkhb5k6281iq3fkifrsg";
+"callouts.doc-44899"="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.2"="af9csy1vch1pkpb5y0f3bqn26dh3fbgj";
-"circuit-macros.doc-9.2"="4b6r3b3iaf3y9bczs0yjli745pn4rrml";
-"circuitikz-1.0.1"="qgwgimjvm5h4y851sdk1hbpypkblix9x";
-"circuitikz.doc-1.0.1"="wra7lhr1667d2vgyx9acsdl57aan09gs";
+"chemfig-1.6a"="yq65mjrbkcb7di3h3gidwja30kbrvg32";
+"chemfig.doc-1.6a"="1dsdgdbcvwbhvx7dslb3zj3hn24n1j3a";
+"circuit-macros-9.5"="af9csy1vch1pkpb5y0f3bqn26dh3fbgj";
+"circuit-macros.doc-9.5"="a7ipgax8cs0bg1nwd5yzzhd9y5ffm8ag";
+"circuitikz-1.3.3"="nljcz0x08y4c2hb75k6lwpw2a40csakz";
+"circuitikz.doc-1.3.3"="gav2rmhidxv5b0i4rdhn250iyd3q35yr";
 "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.2.3"="0cglzcp85pn8k4xskblxjhcyask22srz";
-"curve2e.doc-2.2.3"="sw3iq90vbk761fpzg58ng6s2hv7ppzg8";
-"curve2e.source-2.2.3"="sc5ckkw72cg5gw26qfjqn45k005vbp4x";
+"curve2e-2.2.15"="47c76v0kykh74p6rypbvxzl29s1x58d7";
+"curve2e.doc-2.2.15"="xpng023wb86w2yzibizdf8sjabhmal6i";
+"curve2e.source-2.2.15"="0fyg1gjxb21sa15ym0fipriwapdi9j9d";
 "curves-1.55"="2cyy1kwxbvxpvxpvvsbh7nvh5q5l7n7b";
 "curves.doc-1.55"="jk4ma0hcrdg6lwy4l5238b9xzsb8lfrv";
 "curves.source-1.55"="q9l5hcsi0n14kkcim30yk6i6sxc5cmvw";
@@ -3551,20 +3720,22 @@
 "diagmac2.doc-2.1"="dfp1br71r19b0pzjzln61wjdn30qy0n7";
 "ditaa-0.9"="pbrv5kj46v258vy3dzlp1js4m0sp8wjj";
 "ditaa.doc-0.9"="db8d34zf2n19xlzljydai7vyz3p11wi2";
-"doc-pictex.doc-2019"="770vj0w7dzrw6n4jf1dfds5ngk11cf6m";
+"doc-pictex.doc-24927"="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";
+"dpcircling-1.0"="x7l784dw5d37jlws64l9x3ya6hgp9w1h";
+"dpcircling.doc-1.0"="fj0jxkgqs0n66z0rlyak490bddcbw6nw";
+"dratex-15878"="ydbymdy490gw405n0gn3amd771knss83";
+"dratex.doc-15878"="7z5sxm5li3by76x7sw9hq83gl34f6gkr";
 "drs-1.1b"="h9fz09xdgwgnbif1vxa1k7rxj8v9ri5h";
 "drs.doc-1.1b"="aq84i4xdklf4wcripj60cc9fd4w3zhhc";
 "duotenzor-1.00"="fx9ljkzzp09x8iajbwjlrzcjxf382k9x";
 "duotenzor.doc-1.00"="x6y62df7hjrp64r4w1qvdikqdg6ph8l2";
-"dynkin-diagrams-3.14159265358"="w0hkvn6lwjj4g8s78z96r3mbk7sg3h4d";
-"dynkin-diagrams.doc-3.14159265358"="jbi0ig2hhxmyidxbc63q6iwm93vzd4ab";
+"dynkin-diagrams-3.1415926535897932"="d07y65n2wrkpi2fkk5vk9dpghyw0vqnl";
+"dynkin-diagrams.doc-3.1415926535897932"="zf20f1ibnxrg06g2w29l56ansa8mi7ab";
 "ecgdraw-0.1"="py3xjb8hz3mdsh42hnjww7i4ndxgkwnc";
 "ecgdraw.doc-0.1"="a9ggi8ivc4wcnqv9gd28lhdw56w4zg8a";
 "ecgdraw.source-0.1"="77vlnnhs178s19gaa4n7wa82lcvyp0s1";
@@ -3573,8 +3744,8 @@
 "ellipse-1.0"="8whg820p9jrqn4nfb7lc3w8d1a2cyfvn";
 "ellipse.doc-1.0"="i9njlr8m3jb9pcrwqsbcjbsb26993p8n";
 "ellipse.source-1.0"="25xhi22s1cvkyzbjwchd50ixsx6awfk5";
-"endofproofwd-2019"="xn4xfhhr3k5cq53ab6rkjwvxqs877kq8";
-"endofproofwd.doc-2019"="q8zg1zy1909bsif59caj8rmmjj4g3v4i";
+"endofproofwd-55643"="ylgnygd6w1p658j90vqdgl5a9i95brxp";
+"endofproofwd.doc-55643"="jm7dscwzp5wwyw335jl293m10yszxxs5";
 "epspdf-0.6.5"="06n9z5fw1f71x4kb07na5bkr48fd5s5x";
 "epspdf.doc-0.6.5"="xc2psspim5kmyzwr4sksf81g16pcslq2";
 "epspdfconversion-0.61"="4dsfb50v8zqbx8nqlzlj712jiq9hchwz";
@@ -3582,13 +3753,15 @@
 "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";
+"euflag-0.8"="ddwdd62zjqapy5hfcc7aa9x82zzmva41";
+"euflag.doc-0.8"="9al82d8f73w4gfbj2p4zg32w1vkwkkkr";
+"euflag.source-0.8"="djgx9f4b3c43g8gk66wsmhlf4bsszff5";
 "fast-diagram-1.1"="sdzr4ya21gayk528rk4zli01l8ywnqm6";
 "fast-diagram.doc-1.1"="anbp06v1p1bczyiij9d2z0li6yski394";
 "fig4latex-0.2"="mwf75sk2i52q6j3gb4pjmw5rlyyihq5g";
 "fig4latex.doc-0.2"="c6qz809776x0rblq5d6l7xcy35bz540v";
+"figchild-1.0.0"="0mbxfg6z2abis6q7zb4n1q8l64jsdh2d";
+"figchild.doc-1.0.0"="xwszpncgw8phlbxvzv75s94v5rgar5lf";
 "fitbox-1.02"="1xc0jmbwwwx5qz9n1kdb7ckwqfp69624";
 "fitbox.doc-1.02"="w9pj3arymsl3p2yyis76xiyq8m5v47sd";
 "fitbox.source-1.02"="1vhaxc5s13fkpqgymjlfmp88m41hpm0x";
@@ -3601,16 +3774,28 @@
 "elocalloc-0.03"="mk2cs80z0gh4dx409y2n3h9cr8ls1la8";
 "elocalloc.doc-0.03"="0p4f0hwr11xvn57adggbbssn9iiynsyf";
 "elocalloc.source-0.03"="spa5lrwk7nikx08v1pgp0xrx4c2gbahk";
-"genealogytree-1.32"="qm4n5cdjzhn48x7bhr8dhzi1harh1hm2";
-"genealogytree.doc-1.32"="ic98gqb5i5cdaczqqwg4mjah7sywdwp4";
+"environ-0.3"="abj66v6h73l8sj7rll1v0czlx99j5z8k";
+"environ.doc-0.3"="rq5cywlfalfd6c2585ihs8mabnadp2n0";
+"environ.source-0.3"="r3bq7ppaqwidvilrf1hyniqfk1fdh4d8";
+"trimspaces-1.1"="cbpq1iybp4vqb3mrbi457gfrfiy4mx5r";
+"trimspaces.doc-1.1"="b2phanji8899yl7ihwrshdqixkmir62q";
+"trimspaces.source-1.1"="07ckjn7k7rwmvr2wji8y72rs9q3nwm0g";
+"inlinedef-1.0"="x9ayxzl60mwgv8w3ispv1xc3qxwylij4";
+"inlinedef.doc-1.0"="g5fqhrp1vf6pky2wq3bq1hd2h0jrml8w";
+"inlinedef.source-1.0"="c5qr2b5029bkpgqhahv4licfp89l0k9v";
+"pgfopts-2.1a"="r3hmv29kc7hfcmx1j2kirk27q4y2r5a9";
+"pgfopts.doc-2.1a"="qb2q273gcqw9p1wjzw8hq7z13f689zkg";
+"pgfopts.source-2.1a"="g9ya18k22lcd5f8aq3anl152d98h6b7z";
+"genealogytree-2.01"="q8fba5j3rwbxhvmxliaycxv2v79nyyla";
+"genealogytree.doc-2.01"="ahvajyv1yxgga47lv3px7s6xlajqri6s";
 "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.4"="0c1rl12r5h50ib3f62brpbs5g0m0swps";
-"gnuplottex.doc-0.9.4"="rklykx57diia7siy7692488q7dmh54ss";
-"gnuplottex.source-0.9.4"="h3c4nmwn9x3c4srljd03y1vpfvbngzmi";
+"gnuplottex-0.9.5"="zk6v716qmddad8da5dl1d8nm5xsli2a3";
+"gnuplottex.doc-0.9.5"="i7gzafn4a0cqpn7hav462lhbwgpmxkcg";
+"gnuplottex.source-0.9.5"="x8f5ik2wy273vxgmbykqhlx2yp5wpnga";
 "gradientframe-0.2"="x80zlqzx72n55qpazclikrafwzny8ss5";
 "gradientframe.doc-0.2"="pgy0vrx4nvys3wki3202r377nryd0r1h";
 "gradientframe.source-0.2"="10dx55zpi0j7xzdkry3dh41ax873mmmk";
@@ -3619,8 +3804,8 @@
 "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";
+"graphicxpsd-1.2"="wzg5nivinnigm98anjkpqkzxy5yy7g9s";
+"graphicxpsd.doc-1.2"="41hyvv7makf7nhamhwgjdvark6ydkdfk";
 "graphviz-0.94"="gicmf9qslgbamr7qkac4y3x0wajkbhw1";
 "graphviz.doc-0.94"="xxyyxpgr81jv00v48zv7vxkm9sa4hjsn";
 "graphviz.source-0.94"="kqv26abzy2ff31a3f0aval7lskvk5nql";
@@ -3629,41 +3814,41 @@
 "gtrlib-largetrees.source-1.2b"="knfqk3b14idsc57fj80ngw26xi7pcnwk";
 "harveyballs-1.1"="axddj0mvqck1gmg0b7s43q7gi9hm1327";
 "harveyballs.doc-1.1"="rpsz7hqyyp9h5sa0hxmxnlrs6na0imbn";
-"here-2019"="3jh68lc8arqbg7kb8ixc87i12qlrnh23";
-"here.doc-2019"="445zak4q5zdlbhvkb8gvkg20wpmwjmgs";
+"here-16135"="3jh68lc8arqbg7kb8ixc87i12qlrnh23";
+"here.doc-16135"="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";
+"hvfloat-2.19"="9dda1g87vmjw1mhckd425kbf0a491b0x";
+"hvfloat.doc-2.19"="rcbk3szwymcn660qfjgfavba0k8bw2bl";
 "istgame-2.0"="il4ycc7pxqvpyals4cvc2bkgvzc29vmc";
 "istgame.doc-2.0"="rr6wnw1csla45zv7kmcfizj72rfcgx05";
-"kblocks-1.0"="lrlcxbcx98bsjxwkr10w5wax3x4lmyjm";
-"kblocks.doc-1.0"="wkh5wnh52fw7qsw07nq8zvj28l921s05";
+"kblocks-2.0"="r1c2xqw9lfycgsc36iisprcas2vr5w24";
+"kblocks.doc-2.0"="sbbprirkbdrfs10fbyv84dqjqxbsjsg7";
 "knitting-3.0"="zggfcjvr02xigbnrhnz1cdlz9hqkcv5j";
 "knitting.doc-3.0"="40gp4l967is4ljnbh4k03w1a87r4n0py";
-"knittingpattern-2019"="8xvccf07iwn71kfnj9f3pnni3imwd9kb";
-"knittingpattern.doc-2019"="bq96pr4hd9mg70qqfwjynhix7ljabbk8";
-"ladder-2019"="wgw0drkb53daslzwsvg48dfznndrz6dp";
-"ladder.doc-2019"="32b2x9zydsp7b2zncs2lg6ldz5cs7gpa";
+"knittingpattern-17205"="8xvccf07iwn71kfnj9f3pnni3imwd9kb";
+"knittingpattern.doc-17205"="bq96pr4hd9mg70qqfwjynhix7ljabbk8";
+"ladder-44394"="wgw0drkb53daslzwsvg48dfznndrz6dp";
+"ladder.doc-44394"="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";
+"latex-make-2.4.2"="nazmg5gjqni54i0rk3giq13jnzn9w5ql";
+"latex-make.doc-2.4.2"="rz0xp76krcxvy654ji1f003c37g1pkmf";
+"latex-make.source-2.4.2"="bfddkj3bcb11lff9ypiswkcyaa2dbcf7";
 "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";
+"luamesh-0.6"="71l0qbnglfb0rvzrbk4m1m1m15lrfa67";
+"luamesh.doc-0.6"="idnacgwmyfk7chfwbfz236744xf9kc60";
+"luasseq-37877"="k07ymsxywmasi0nkdd2ldk164lf36z9d";
+"luasseq.doc-37877"="vnqisa721w2nx11wxb3zsk070b3dzm1b";
+"luasseq.source-37877"="341ldjdwdvjin4rq8ica4f69hb5kbwr1";
 "maker-1.0"="88vzniwk6x9fqhp4y3g32a1cj6nb57g3";
 "maker.doc-1.0"="5w3rag10kbzp8whk0hjrl1ic7iqrna8f";
 "makeshape-2.1"="y9d0868x2s8950zphcf6sdz3l7a1sw9s";
@@ -3671,35 +3856,41 @@
 "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";
+"mercatormap-1.02"="yfwmkx0xzyak9lw6gcwsz6by37pfa7rg";
+"mercatormap.doc-1.02"="mkkdvrwryxwm3p2xynmfilxm9xfv2nsh";
+"milsymb-1.02"="0kn7fxbn0magyklkqw0zph4ns4lv0c1s";
+"milsymb.doc-1.02"="5s65vp27mzshck2ral9r7grhsi7v70p7";
+"miniplot-17483"="3myl55b3q359l0aillyxg7pisii3llpj";
+"miniplot.doc-17483"="hi57wciv475ix91zl4rh30lv5pffns1p";
 "mkpic-1.02"="m0rzxyzpyjzial8vvd5nm2rny449ka5b";
 "mkpic.doc-1.02"="m0v80hkyq699sbmdbv5ydp75ccdh5yd3";
-"modiagram-0.3"="sbc0gqy5h9g3vvay1hg8nd8c8za52ns7";
-"modiagram.doc-0.3"="nxgyiv2d5sh787nmp4kjn0qlv88j77lm";
+"modiagram-0.3a"="zn4c83sdrwn9vkv6m1q15bsvwp01ycjm";
+"modiagram.doc-0.3a"="qy9zyvkyvs6r8jhchndbprhszbj69ycf";
 "neuralnetwork-1.0"="3scaqj2kvqri7x23chqymfkg534298ik";
 "neuralnetwork.doc-1.0"="xxsvv8bh5174ihqmaxgy5072z92glvhd";
+"nl-interval-1.0"="mxvk6j3l7cy7pd6z6v7802a2rkjfwifl";
+"nl-interval.doc-1.0"="m0hanp7zdpd770q90f97xbki0dlbi9p6";
 "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";
+"penrose-1.4"="s5qwx0ad5bavic2qrs63jx22y433pnf7";
+"penrose.doc-1.4"="d82pns7ycyg81qv6i61jyfnabwxmgqgl";
+"penrose.source-1.4"="fda5csd5xm2n13jcixcaz6r41shzzc05";
+"petri-nets-39165"="0yny9mc10syfx1a716sjw3768bf1a51z";
+"petri-nets.doc-39165"="3m0f4r65jhnq3la2qyp0xa7ra66iyahs";
 "pgf-blur-1.02"="30lr14qkrz1ah9kvgadknb9a7yyhv625";
 "pgf-blur.doc-1.02"="x4phrny12czndwvsrml45i6a5ymfncf0";
 "pgf-blur.source-1.02"="hdg79rv84byqmnyahvi65v3ca3h3j14r";
 "pgf-cmykshadings-1.2"="jpaxyzfgw5vgjhfpgqy7v4ddpq6nhks8";
 "pgf-cmykshadings.doc-1.2"="mk9nyxpnv0bbcg84i7ngz2vvf88dib77";
 "pgf-cmykshadings.source-1.2"="zd27bjqz9rxg1sdrzbbky56z2fdhhgv8";
+"pgf-pie-0.3"="l3lv4iydk6xi3x6krz4aqmly0y1949yk";
+"pgf-pie.doc-0.3"="v85y3l097agvjvmd71f6kxsa2wwd73gf";
 "pgf-soroban-1.1"="1l6ifq09crmg68d174y2ms66jjhgklql";
 "pgf-soroban.doc-1.1"="ajlhmwd0fgmamsgnnzr3s15z6irx579s";
-"pgf-spectra-1.0"="w2w6z4fj2g5z77i72q7l5fzrz3hbrb0p";
-"pgf-spectra.doc-1.0"="d9v7k3fbf4hl2yz91q8n5sccn7bfq2v3";
+"pgf-spectra-2.0.0"="6jn99k98c310r0n50migknaxdhjr6zxm";
+"pgf-spectra.doc-2.0.0"="y1pzg5rhvnqpjla0fzizv99mpff1x55h";
 "pgf-umlcd-0.2.1.1"="h2syv4fn0svppahm66gpwb4jnrl7jdl8";
 "pgf-umlcd.doc-0.2.1.1"="yn8vn90qgh34r1i91cg7k5n81v47i6ni";
 "pgf-umlsd-0.7"="f6lyf7ph9a6ayc082h8bd1hrwjx1jw2y";
@@ -3712,24 +3903,21 @@
 "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";
+"pgfmorepages-1.20"="kvnwv6rsijb2if9wal7a71ggxn3sh8q8";
+"pgfmorepages.doc-1.20"="fdzbkrwfy9cbhirhyvb2yfdb38z5jb4q";
+"pgfornament-1.2"="y4s27bm5bllkpvlqsd2v8i753jjzhlyx";
+"pgfornament.doc-1.2"="l2l2qmphza7jr6hqgbbp11ms19ssinh3";
+"pgfplots-1.17"="f5x1w97rgj20w1649cynsz2viyd5l9g1";
+"pgfplots.doc-1.17"="x6fpmdj6hgjzyykgz2cv05sk57z1zvxl";
+"pgfplots.source-1.17"="9jdvnlallwaimm0sydy79q1jrpwqm97s";
 "picinpar-1.2a"="wvxa8vjglc2v1k8dcszj32wx5jgmsm3w";
 "picinpar.doc-1.2a"="ix8d6091agdxivkq3pj0xv5afksr16xj";
-"pict2e-0.3c"="nzynzzmjd5v7yc48a04parddy83xcrz2";
-"pict2e.doc-0.3c"="zc7md0dvssdpj7dcw99dh7h2i231rbyx";
-"pict2e.source-0.3c"="zwmlz98xbvkljr202lzrp3bps8dwqgl3";
+"pict2e-0.4b"="zbvvgxa6s4wp3kji320n7xrss0qabd99";
+"pict2e.doc-0.4b"="nc4yi0yly80s0lcq9a3cimlwyvwisnac";
+"pict2e.source-0.4b"="zl1v9f75nkd7dsrch6yfp21y9pahv879";
 "pictex-1.1"="3wr03wxjs0nbpncsyzzz2flz5h383a30";
 "pictex.doc-1.1"="d96f4qc758wqc5pifjspr2cfhkj3j44q";
-"pictex2-2019"="fmvr7pqdpq2lnigzzbshgwmrjf03kj6h";
+"pictex2-15878"="fmvr7pqdpq2lnigzzbshgwmrjf03kj6h";
 "pinlabel-1.2"="5bshz2446a2c3mgc79b1znaw07n54cck";
 "pinlabel.doc-1.2"="a23kw5gn0cwsg5fzldlq5a9rj03wg1la";
 "pixelart-0.2.0"="hq6wmp9dgfzzqxwn11a3isf2jnzm2b7v";
@@ -3740,23 +3928,28 @@
 "postage-1.0"="7n4w4vhx3ck8pvfp69l95yn45f7qbmpp";
 "postage.doc-1.0"="h40jv63ikgmcd83xmvkz3vdc700j5myy";
 "postage.source-1.0"="x0f20a02h113a5z6cppvhrqcq2lmlh8c";
-"prerex-2019"="3m8z29a8bizcdk7k3xipr9x7bzac9ybn";
-"prerex.doc-2019"="d176668n20nwvh0i5r6y37zjlg0k6ic6";
+"prerex-54512"="3m8z29a8bizcdk7k3xipr9x7bzac9ybn";
+"prerex.doc-54512"="d176668n20nwvh0i5r6y37zjlg0k6ic6";
 "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";
+"puyotikz-1.0.1"="qx2rv06l811c34pni8rgkffirpc09fw8";
+"puyotikz.doc-1.0.1"="969cy9jzd8rfrm9sb5gcr9gsc1qxn23g";
 "pxpgfmark-0.2"="sy9cs1y4gf9xr7jfiyp8zkr1r8di00hc";
 "pxpgfmark.doc-0.2"="25vgpjc0zr0wjny4snksr3yzk908s2mq";
+"pxpic-1.2"="0rlp0ppw3q32i3c98705v91k0wg4bcbr";
+"pxpic.doc-1.2"="c4q4ddcrl28zdy1sny8q4458igvfa5vg";
+"pxpic.source-1.2"="j6h6y0if1ckpsb9bvf5p9mrghf32v5rz";
 "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";
+"quantikz-0.9.6"="86jvb52l8qr6p2zpha4qx1ncndza95q8";
+"quantikz.doc-0.9.6"="z5si2v60izbqix364z8xvhs3gz6s83vp";
 "randbild-0.2"="bkb9mlnckwhxirdsck7pzqki670mgns4";
 "randbild.doc-0.2"="v89kxn1iiw9spvinn8xcazp81w9a0nb3";
 "randbild.source-0.2"="la433aq038bqyjdv40rvdkinsiq7bf07";
@@ -3777,8 +3970,8 @@
 "schemabloc.doc-1.5"="2020d2ivq6qccq1s7fk161pmarznn6ss";
 "scratch-0.41"="r2i8n81lhrl9420xwj61v3rmv98f64fb";
 "scratch.doc-0.41"="rgs8yb5va24k7cl8h6f2813ff0ydkia7";
-"scratch3-0.14"="klj8v60bff3fr4pymifr0wcj9qgr7xv2";
-"scratch3.doc-0.14"="dzzlly4ygm0k69n92xpjfdknhg8h5c7i";
+"scratch3-0.18"="44zwdns5yssyglqr62nifmdnrp20y32z";
+"scratch3.doc-0.18"="0pix9ik5f8b8lydicf9yibcpg0fjy7w2";
 "scsnowman-1.2d"="vmlm0ilz9v7hxsz6111w8596xajzg2ly";
 "scsnowman.doc-1.2d"="l1svi3nmdzpfnad0w8dzxxzh8c4n2v9j";
 "setdeck-0.1"="jhxxygy339baxmfl252kjjyhw2zbhf8n";
@@ -3786,28 +3979,34 @@
 "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";
+"simpleoptics-1.1.1"="hd3442mvndh1y9qmk4g1c6jgy189927v";
+"simpleoptics.doc-1.1.1"="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";
+"spath3-2.4"="akif7y4qva1virp0cy3wnr5jvkklkl9a";
+"spath3.doc-2.4"="lisab3dnwyq9vqsl5rqfh4c6zkpydfpl";
+"spath3.source-2.4"="nv3j5wwwb6cynprvxm8wxvpbk1n00vlz";
 "spectralsequences-1.2.2"="yahjlarc3vgpzcmb2abr6nwyhqqj5c1j";
 "spectralsequences.doc-1.2.2"="by1zrk0y8nq05qf8csa2gvwl316zc1j4";
-"swimgraf-2019"="x77prbkrnadhj57fbh68hqsmrbk2qsis";
-"swimgraf.doc-2019"="hfrhqz5pj6g0mdyp1fbbfbnasph11pwi";
+"swimgraf-25446"="x77prbkrnadhj57fbh68hqsmrbk2qsis";
+"swimgraf.doc-25446"="hfrhqz5pj6g0mdyp1fbbfbnasph11pwi";
+"syntaxdi-0.8.2"="hkrwysi8yl9741hkdqjhhmhhwsjqji9q";
+"syntaxdi.doc-0.8.2"="zdnlrpza0hrf4pacrabdmv4n3xx16rb1";
 "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-3dplot-25087"="kl827mar9jlbjpwxl90z3fml8i3zabb9";
+"tikz-3dplot.doc-25087"="y736rbqkbjg7nnly25d0jl72z9gyx17w";
+"tikz-among-us-1.1.0"="d9n1f1a617n59l6h5790mzkv5arkrwzw";
+"tikz-among-us.doc-1.1.0"="m25gkpfpna507ij74x2x9fbxvw0frc3a";
 "tikz-bayesnet-0.1"="w9x9vf5hgmv18ljz0kx7rby1dig63539";
 "tikz-bayesnet.doc-0.1"="g7dkg4gg6729jbscb7cf3fsay2dfqv42";
+"tikz-bbox-0.1"="5raf1a9s9z0cddrrjx7wfgxzdlq0sb41";
+"tikz-bbox.doc-0.1"="km6msphm2zw1rynbvzi3gbmxhvsbzsw8";
 "tikz-cd-0.9f"="h74wx5r1jclma4zqd78wb3f5bmpfc2pw";
 "tikz-cd.doc-0.9f"="ig04n4ja9ajw1jf0bfv481agc71hjsv3";
 "tikz-dependency-1.2"="yqnd9843awmwy61pd310krnfhyf3867k";
@@ -3829,6 +4028,8 @@
 "tikz-karnaugh.doc-1.2"="4v7jmjk6kczigziblmaphpxl1xkr2ylp";
 "tikz-ladder-1.1"="ika5n5wsldxr4fk6qfjr6p9i94iydplp";
 "tikz-ladder.doc-1.1"="33yyhiz2knjssmpvz90n63n3dgh3g57g";
+"tikz-lake-fig-1.0"="xcf8mfj9jkcb8ixhqpvwlm815j55k2qr";
+"tikz-lake-fig.doc-1.0"="h7l2b1kx53il87miyamjw0x0k54df5bw";
 "tikz-layers-0.9"="fbjyhacy9k7yhpyfg8viqdfb9z5d4dy3";
 "tikz-layers.doc-0.9"="d3q51sfsprqfa0m0plhghgcb3j63fn60";
 "tikz-nef-0.1"="88fk1n97w3dpajkw85ww9mw93p3wmv3q";
@@ -3844,6 +4045,8 @@
 "tikz-page.source-1.0"="2x6hmyi5739qskj8wf1k1636kbzns9b7";
 "tikz-palattice-2.3"="l8q247mbkx3qyywwb6sif0if3jv5ykjk";
 "tikz-palattice.doc-2.3"="j7y3y3r0mgm8limkgfljmn3i8dcnj0m3";
+"tikz-planets-1.0.2"="ka4p4kxaxmzlk0pvik7sl09zwxw0sj6v";
+"tikz-planets.doc-1.0.2"="zw4aa62pfdl5h3mai4ndjqmmb2v56zs5";
 "tikz-qtree-1.2"="vl2jq8b492p7dznrx63mi2zxcpax8a1l";
 "tikz-qtree.doc-1.2"="01bkpz1f0pm7plpkh6a2kx3c93iwcfwa";
 "tikz-relay-1.2"="p4gb81p3j2226g1d7qiclv6d2cj52fq1";
@@ -3853,30 +4056,29 @@
 "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-trackschematic-0.5.1"="b8a2ljq13a1yg0dsa9icngsa2iiyanw0";
-"tikz-trackschematic.doc-0.5.1"="cif4841w92syf5xxwlw9njb7zlqdd0gr";
-"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.3"="b8aksqlfbkwm3fv278plpnrarhh8hvqb";
-"tikzducks.doc-1.3"="4n92qi1wmbk02fsmrfp6vzpx4s2fj45h";
+"tikz-trackschematic-0.6"="0dpci10miikxhmb9k3vkzzq30mmf9dxk";
+"tikz-trackschematic.doc-0.6"="4xiw69h4jb3xggwyak9l4387kfga7bhn";
+"tikz-truchet-50020"="h8p45wr3xhjslajpyyzr8zha6x52jyci";
+"tikz-truchet.doc-50020"="6nyandwvh9qj5z6pzh20417kl3gd3q68";
+"tikz-truchet.source-50020"="r5gpj9cmqj4njzzx820v7ka0v7chxy24";
+"tikzcodeblocks-0.13"="j0lqf17ys7miqzfy3f13vpkjk19j7vzy";
+"tikzcodeblocks.doc-0.13"="8m630gycw97jd889kzadiqmab6h1ngzg";
+"tikzducks-1.5"="gikyjz3fcj48az20ksklc1q8dw7v2zzs";
+"tikzducks.doc-1.5"="cyfi8a8hrmwfvk2vc3cnrbzl000mjw3r";
 "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";
+"tikzlings-0.5"="gw96ml7017p8m03ascn9m7fayhqs104k";
+"tikzlings.doc-0.5"="2ww0iq1hibgy2wl6ijq853bqfmyhvwr9";
+"tikzmark-1.10"="67hkmm2ijkqhvh4j78gwnfg10inzcdca";
+"tikzmark.doc-1.10"="r3333ggg3n75kyp34g17vgmh8gq33f19";
+"tikzmark.source-1.10"="7p7wb4l4pym4mg59xs54qzdsxi09a7id";
 "tikzmarmots-1.0"="d4603hm1maqsp6s2mpr3d9czb040x96q";
 "tikzmarmots.doc-1.0"="yqa28x78pg3513ni6xd11511pyqivkia";
-"tikzorbital-2019"="0jand3q2rnj1l71kiqc5wx9br6iqa8h6";
-"tikzorbital.doc-2019"="8w7za38r9lqh6hjyrx51mhxljlwbr13d";
+"tikzorbital-36439"="0jand3q2rnj1l71kiqc5wx9br6iqa8h6";
+"tikzorbital.doc-36439"="8w7za38r9lqh6hjyrx51mhxljlwbr13d";
+"tikzpackets-1.0"="i3009cdw6jnd3s71ywvf09yjns3zh9w2";
+"tikzpackets.doc-1.0"="nn65q1jhygbaq5karp9msk27fiqc7gn0";
 "tikzpagenodes-1.1"="bbppcjhxjza1vhld9n9kjdm5jf03by5f";
 "tikzpagenodes.doc-1.1"="qds77qax9drbdmnw93lsg9lzkd7kjmnj";
 "tikzpagenodes.source-1.1"="bm54xhdx003f6j5j2csj6272d6pqxbmd";
@@ -3894,30 +4096,30 @@
 "tikzsymbols-4.10c"="x1wdz62q9x6idd6893pbcm0d0k55b3j1";
 "tikzsymbols.doc-4.10c"="97p2haamz7kk8i970pa01x5gx1xmcrzh";
 "tikzsymbols.source-4.10c"="wllywv4fs2xfv3xvd92qkgm905yssplw";
-"timing-diagrams-2019"="89d8m3lh174y7p3xx2iqdkxnq71s7fzq";
-"timing-diagrams.doc-2019"="r8xz0yb362glmkcaadipa5v8jsf3w5py";
+"tikztosvg-0.2.0"="sqrd3iby30siip1whdin2k74r1il8078";
+"tikztosvg.doc-0.2.0"="k4mphf728hc7cl3s7rzwmcgza4vhq5w3";
+"tile-graphic-55325"="4b69a5fzrw3d7p41hbs3wb6z2xjbjwd2";
+"tile-graphic.doc-55325"="6rf8g43yhshj957h5hpgvqdwlg6gl4pw";
+"tile-graphic.source-55325"="ykbr7wimacjsgnplspan1i4xx8jz01a6";
+"timing-diagrams-31491"="89d8m3lh174y7p3xx2iqdkxnq71s7fzq";
+"timing-diagrams.doc-31491"="r8xz0yb362glmkcaadipa5v8jsf3w5py";
 "tipfr-1.5"="dd5jgd6y7rzspj6shr5mbqcbbzyncv2b";
 "tipfr.doc-1.5"="w5mslbn2d53wzdkaynxigaw4344psp9j";
-"tkz-base-3.02c"="rn3wqrrmhrqd3sylby0dj279zkpxw1p9";
-"tkz-base.doc-3.02c"="k2ad8vfxnf6fylix77hi3ssfirk9nldn";
-"tkz-berge-1.00c"="jgkikvl8nnvmhqkkqivl57zc175cp2kk";
-"tkz-berge.doc-1.00c"="dk8ip06kr5rijf38ljwz8ik46zfkg083";
-"tkz-doc-1.2c"="c3g1qykgrrsbl8yv1yb82fqlcfac86rx";
-"tkz-doc.doc-1.2c"="fda97y84cy38jndp32gj3yl1yv3dl0yl";
-"tkz-euclide-3.02c"="94ryxqd8hrhh64dhwr0292nbgrgli70a";
-"tkz-euclide.doc-3.02c"="i3kzk9df4sqa4k8lcfy1h0jd8hkrdwsi";
-"tkz-fct-1.2"="vk9mpsg0jvr9m7bz9ir7fkw864xq0ls0";
-"tkz-fct.doc-1.2"="dwwhwxzxb2019z9lin41ggw2ij9pp13g";
-"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-base-3.06c"="yddvv01pj1mpbzja1ind90dg1rzv01m3";
+"tkz-base.doc-3.06c"="daf1mpqgdp05qz0s4fnn6c073xy1ad3p";
+"tkz-berge-2.0"="jzv81k3fm5smg38sqhpqz7l8zqv34j25";
+"tkz-berge.doc-2.0"="ln936v6v5bapxhqs5vzcf88flqm849gy";
+"tkz-doc.doc-1.43c"="2fwqrhjbl0iwsk4z1mrkycbpgbiszzry";
+"tkz-euclide-3.06c"="cnrg4nv9ijhvy43qmalakq9162i733rp";
+"tkz-euclide.doc-3.06c"="2d7cqmngwrnk0pryfb0wq95v6wsahjbr";
+"tkz-fct-1.3c"="v0r886rf3b1yxc1dkbr2isf6ykqkya2g";
+"tkz-fct.doc-1.3c"="p79yk6b8h2f7pzxyh2547d2ax8np2vcb";
+"tkz-graph-2.0"="r0m2vnh14q5zfb7hxngwqvlgiajjv1il";
+"tkz-graph.doc-2.0"="4sb1mashz4j4d7q80qssh5yjw1bk4f9x";
 "tkz-orm-0.1.4"="kvjkkbbapnd2f03g4h48ic729s8yvn5z";
 "tkz-orm.doc-0.1.4"="20ccyjaxz59v4yvbrz18ql5dz05nqxj8";
-"tkz-tab-1.4e"="6l6g2sakss447slpcbvi6pybl8csvbhw";
-"tkz-tab.doc-1.4e"="2h8c23y9scrcqapb5s15digbnvcvynvh";
+"tkz-tab-2.12c"="039n2xx1sxi5570vq84dpbp1a9crmzqc";
+"tkz-tab.doc-2.12c"="q8qbxz33cyhly0ghrrrkskc5rzmvbh3w";
 "tqft-2.1"="jg1k2p45j027wivwykric03v8vgfgaaw";
 "tqft.doc-2.1"="0qc7pjywc0dwxkw750xsqb67f6cpzka2";
 "tqft.source-2.1"="2kasg0q4bb70r80kaxm5hykahynk7vbf";
@@ -3932,11 +4134,15 @@
 "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";
+"sauerj-15878"="9x0hghvh5wh6jljwpyf61c6pc4rl9jaa";
+"sauerj.doc-15878"="zk8dghf07j3ijvnr3zxw2bajqx49nbaj";
+"sauerj.source-15878"="j1bdzs9ky0ycfh00sdynswv2vfvx7nmh";
 "xifthen-1.4.0"="4d6x7yb6hdr4xg2dn572gwpfnykppsph";
 "xifthen.doc-1.4.0"="364kifdxmk5ak2flyqcfzjgv0dbsykax";
+"tzplot-1.0.1"="y6p1h8kx6ykr97gg4afgx9j3bgs9d9cj";
+"tzplot.doc-1.0.1"="2va8ca6g0f76hxm43v7iqk6nw9x8ka28";
+"utfsym-0.8.3"="xh468icpjaggal7grvpwsl4maaclihan";
+"utfsym.doc-0.8.3"="glys9xfrh02f7przb9bbcn3k29wa0why";
 "venndiagram-1.2"="pxwyrzjwbkkyhfm22v13p2mm5l9s2bqp";
 "venndiagram.doc-1.2"="xn6lk2l6vjwjirm9s0vmcsqna9q096zv";
 "venndiagram.source-1.2"="aj2hp4pyi0jhirjbsrv8cpajh42q64ai";
@@ -3949,9 +4155,12 @@
 "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";
+"color-edits-1.1"="p36qzdisyklnxg7qxfpfdqp157sifg8x";
+"color-edits.doc-1.1"="jmlvf1izvr4gaj32mfkgrwv6xmfvgw7q";
+"color-edits.source-1.1"="mlm9y14rzw6a7lpw6bbv62jnh1l8qrzp";
+"colordoc-18270"="sb31vsh0mzzd16vrf3gpvs9c50zcjbgx";
+"colordoc.doc-18270"="2sw71l3579qkh4z3hqirvv0y3d79sssh";
+"colordoc.source-18270"="3p7baf59n87p34sxwdm9lf761dmh8w0b";
 "colorinfo-0.3c"="x5wwpzhcm3ppfg6hh0dcr3rl7cjs23zn";
 "colorinfo.doc-0.3c"="ppz8wrqzph8cq5dggikgi0gphmg0y1hj";
 "coloring-0.2"="qdjj8va77wpin0pw6izv2lhjj0cm8zfd";
@@ -3988,8 +4197,10 @@
 "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";
+"concprog-18791"="fy8virjhfw7d1y1l0vg6fgzmxkc4f7gb";
+"concprog.doc-18791"="sm3fl60ymv5z649frky6xck3hd9rr8yb";
+"conditext-1.5"="d20ybvbjsp9w3wrkyib8i7axc7kfd0vc";
+"conditext.doc-1.5"="3glal9zw8s5cdz7am17g7ngsj6dfhbh8";
 "constants-1.0"="p22vxmnw3a68jgrwxzvs90x1ads7vy08";
 "constants.doc-1.0"="0d8avlpp7ra6jin7rq92vrpa6c97q5g4";
 "constants.source-1.0"="44ajza7nr171n3nlbj0lqqq7bld53i1a";
@@ -4002,9 +4213,9 @@
 "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";
+"conv-xkv-43558"="irm1jvqddc4a7jfl1qraxkii8gmmmh63";
+"conv-xkv.doc-43558"="vs1dc6np4zd01fkq95a0kqwm72h9snli";
+"conv-xkv.source-43558"="8gj6sqrsbxknfpvrfalflkrnhncjhbfz";
 "cooking-0.9b"="sp0gxpgc190gn2wngw7nqzay88hykl4x";
 "cooking.doc-0.9b"="15mncbdsswn8q6914ijlhzlg5ch6schl";
 "cooking.source-0.9b"="n6pvjf2lx012s5y29qc5mjkiz8dinkjr";
@@ -4051,13 +4262,13 @@
 "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.2j"="a8ii20nagxkr6657vwz3py2jjbqwa0lg";
-"csquotes.doc-5.2j"="928657z95scss0zv6bz8j8p79q63gz23";
+"crossreference-15878"="rghmvk4vfk0la5kygcm5wmnrrzxag6ff";
+"crossreference.doc-15878"="p589qj9h7vi563dgh5lp2l1gmpzfkyrm";
+"crossreference.source-15878"="pmqnkrcxkwjdsz7pfwmqpjgc2kykv9s6";
+"crossreftools-1.0"="ajn6w7b0nk4i3jhppd2ikmkmjj85c12p";
+"crossreftools.doc-1.0"="2khdwzgrmdnpidnf8qqhnw31mf208sp0";
+"csquotes-5.2l"="41vl5hp0bard1x2jaw3wnlcsa50d705m";
+"csquotes.doc-5.2l"="1mabf8g1p6lbmgkijynsrrpxqlawqk7i";
 "css-colors-1.02"="5ybcj58dl55v53z40fvb3mgc8hl93z8x";
 "css-colors.doc-1.02"="kyz6mh1pkrjvz4za7x7sgmig7zrrxk8b";
 "csvmerge-1.0"="r2srdy1zz8m0dkbpg1gaml9ln23q9rgy";
@@ -4071,21 +4282,21 @@
 "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";
+"currfile-0.7d"="msb94fkjy9acdkgdana9hrhz3l260nvp";
+"currfile.doc-0.7d"="l03cswk0j2z12hy8g8icbl4hzpzplsi6";
+"currfile.source-0.7d"="92mcrpc45584cdnzpfg9awzp19ni2s7n";
+"currvita-15878"="119xrbrr7d5i8xlvzf15azymj8znxy2r";
+"currvita.doc-15878"="fc8s69xdfiir0a8g7594l7y0m7b5qsiq";
+"currvita.source-15878"="2m1krjlgi5ihm32cfr3ayxmz324zpsxp";
 "cutwin-0.1"="q1c752nzdf2jw9agyb3aj6ishnk3yy7c";
 "cutwin.doc-0.1"="pawz3k75s1nws5nd0ilhgvy3g5ndfwvp";
 "cutwin.source-0.1"="c9aw3vjaxldf082z61m61d7p7rsaynfb";
-"cv-2019"="xpyr31xcphpydv1iyqaalwxfqhs99cg6";
-"cv.doc-2019"="f3xak6320ql3rmbj3fvjsgcsq4mp1vql";
+"cv-15878"="xpyr31xcphpydv1iyqaalwxfqhs99cg6";
+"cv.doc-15878"="f3xak6320ql3rmbj3fvjsgcsq4mp1vql";
 "cv4tw-0.2"="zw6g6n1l4mcnjdbpfx36h1l7ix8gj6sv";
 "cv4tw.doc-0.2"="49ghjsydw5i13nwglc69xmm1z0ypxlyd";
-"cweb-latex-2019"="w87x1irky7jm1ixvs8m2ig97pk07m19m";
-"cweb-latex.doc-2019"="r4xzcb98w8khj070k9q23ygmq84pxqd5";
+"cweb-latex-28878"="w87x1irky7jm1ixvs8m2ig97pk07m19m";
+"cweb-latex.doc-28878"="r4xzcb98w8khj070k9q23ygmq84pxqd5";
 "cyber-2.2"="qw2kap0b32i1zm67s9lz70mxc8v8smrs";
 "cyber.doc-2.2"="9fqzmqyaiclmpl947xwj5kjcp6fic9md";
 "cyber.source-2.2"="jkylpl3n1m87qch68sqm7njxgp8wv86p";
@@ -4098,9 +4309,9 @@
 "dashrule-1.3"="bqc33kv2bljifdybb0qn7wvx48rb9xgs";
 "dashrule.doc-1.3"="vxa8hx7khicjjdjd8p5frwrv4b41fv1x";
 "dashrule.source-1.3"="94ga7n7xpk7wm3j37gp8innc0c0irdz5";
-"dashundergaps-2.0g"="kvz9k92wfnc0z23l5rlsc2zzq49mz388";
-"dashundergaps.doc-2.0g"="il06w6m1rwz6fzgidwaq4qqnp19173np";
-"dashundergaps.source-2.0g"="6fsdvdm16b0dpchccnrbr8r8s7msqd4f";
+"dashundergaps-2.0h"="nlq1j7n1lrrx2wags0grzrr8pqzs2h6n";
+"dashundergaps.doc-2.0h"="pc74ml09vkyns4shpiiyhpvxrm8wh4c2";
+"dashundergaps.source-2.0h"="fwxf78dbp01m6kgx8rmdjwnsy6ak803y";
 "dataref-0.6"="s46my6g3mkk7d5g7fm90xxpn2d1h4gmv";
 "dataref.doc-0.6"="ap8c1b9ljp1zg3wpzfbp827kwqcjdp0j";
 "datatool-2.32"="hdkdqrf0g5jbi0ryk0bgiv71k3x98kl3";
@@ -4111,6 +4322,9 @@
 "xfor-1.05"="x2bs3y606v8f42ds7xp2kmllq0vmrnms";
 "xfor.doc-1.05"="lbgdf0qia743jdvlxqf7vm4w1pc77kar";
 "xfor.source-1.05"="pafv6fqj0nd5xm0wgmwavkmg97rw7dnm";
+"datax-1.1.1"="mb0p3kqk4c4brqmf42zhkj1kv5y71fmq";
+"datax.doc-1.1.1"="79vryqqph1k46k0429ldinwjdd1lcs9d";
+"datax.source-1.1.1"="3r08b1n40fww69p4yxn9li9bi67iqal3";
 "dateiliste-0.6"="s50fmah2lasy1vfkgkybbaynspnh0wb6";
 "dateiliste.doc-0.6"="frs8z7x6yf2l78g94dxx0w5nxchx7kdx";
 "dateiliste.source-0.6"="idazlpxank1dw1mjym4vcdlq0970i5gy";
@@ -4120,9 +4334,9 @@
 "datetime-2.60"="59y83sl151h396xz62kp975q9vplg195";
 "datetime.doc-2.60"="dzj8ihkcdv1hcxxi5vrqbv8ga05mx6l1";
 "datetime.source-2.60"="b5x1cfqxg3rlbmdzc1g18i76rk7m1323";
-"datetime2-1.5.5"="s48m4my1y6kfj43zyi7hm2v6y82j2b6q";
-"datetime2.doc-1.5.5"="bafnlgqaydnswir2sq6x8xqi7llil4vn";
-"datetime2.source-1.5.5"="idj2pmch8h2sfdqg7hg3rcc7b3dc1mc1";
+"datetime2-1.5.7"="yiwddqw00q7jyi82yf74izzfnlcjarq3";
+"datetime2.doc-1.5.7"="y8j71f4vbsjsbgy1c3lqw7c9djq585vh";
+"datetime2.source-1.5.7"="yb3ni1kvq6k63l56v7il393jz33mk26b";
 "datetime2-bahasai-1.01"="avsk4v66gfbscliygrhgk7jvfrv5vyrq";
 "datetime2-bahasai.doc-1.01"="km12sq45cjy831csfq3j0gvy6458j86h";
 "datetime2-bahasai.source-1.01"="y87vz4sib2zw70643lm50cfsknzxnydm";
@@ -4165,9 +4379,9 @@
 "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-french-1.03"="2nlq5rv292gl8gzwi9g2v3r8yvr3602w";
+"datetime2-french.doc-1.03"="94adprfzvln7xxv49gcdcng2ma28lm6r";
+"datetime2-french.source-1.03"="sfzsp07jb5ahflwrdy0fbhsapbbc9awx";
 "datetime2-galician-1.0"="jdzbi8dkc958r8fvpb5xqjmz7i5iiffz";
 "datetime2-galician.doc-1.0"="kanyn2kcrxp309crnj0wg3v34w93jndg";
 "datetime2-galician.source-1.0"="qjnph2vad7hl5d3jzzn58mz90jyvpgw2";
@@ -4210,9 +4424,9 @@
 "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-romanian-1.02"="qag8c3rf1mjb0s7sqdri548ixd9rb1hj";
+"datetime2-romanian.doc-1.02"="dd80f68mbdd455s8njq5046z7slh47xa";
+"datetime2-romanian.source-1.02"="2fzqjvhdqh2fzl1fbskrahs0pjyfyw1p";
 "datetime2-russian-1.1"="hmdzwgxk166nibagd4c1qsxi7y0404zn";
 "datetime2-russian.doc-1.1"="mhv8b0716ihi3lxgyzd481dyv6gkf303";
 "datetime2-russian.source-1.1"="8749wgrkq93h4z7lasrwb3b03z2nfzq1";
@@ -4251,44 +4465,49 @@
 "datetime2-welsh.source-1.1"="95qmsn3rm7bsavz4kg4xf0ygdmf70kqg";
 "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.3"="wnh1cc0hvk7lyh896mmsxcjsn24pi97w";
-"diagbox.doc-2.3"="3n73xzb7mla1rk8ri0ia9xg17q13r22y";
-"diagbox.source-2.3"="iczs18l4qfijgpb7fjqjj7w86m6smpn8";
+"decimal-23374"="a7xks9vjp0pa09i5dbwz78n28a8fg83d";
+"decimal.doc-23374"="ib5j82aqc5l2rkggx5s3i7h0vz81sw01";
+"decimal.source-23374"="znw0p5x4xyg8nbaa0840lw7i27bczkf8";
+"decorule-0.7"="h52pi0lxysb91xdpx1dkybv3k0y7gybh";
+"decorule.doc-0.7"="3ba4y00y09a16py659yg2wmba7bxxc83";
+"decorule.source-0.7"="sdm70by35wc4jbjwq1d2f1jq2njdgk41";
+"delimtxt-16549"="akp06kcf04g4dx2ph7bs5cg4byld136r";
+"delimtxt.doc-16549"="ddxva98pp4ar0bxdlpbh6v2rxlai5d1n";
+"delimtxt.source-16549"="j788dpwxgryml7ny68nzab9c3dy0322z";
+"denisbdoc-0.9.1"="5xkpr9mh5607qp6vvx2a5xnw35xn07h5";
+"denisbdoc.doc-0.9.1"="8xqm0s7gp4znh4b7c0c9xgs23nwj899y";
+"denisbdoc.source-0.9.1"="bkr6b5hiymlmpm2brdy2vdjjzz48kc4p";
+"diabetes-logbook-54810"="x5s8rl10s8fg10xwa8s972zay7ximns5";
+"diabetes-logbook.doc-54810"="kcpszp5n9np9v31iha2yhz31h5b5snnx";
+"diagbox-2.4"="2d44gh8w38gdb44amp3c5vj4calw00bh";
+"diagbox.doc-2.4"="847q422hmpar0wv6whir9j170s96wd05";
+"diagbox.source-2.4"="z5zh8cacxrxglwb8hsakr6did136nb4r";
 "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";
+"dialogl-28946"="qn4qmw5yrhvim6fdl2gff1vl0ca4dfs2";
+"dialogl.doc-28946"="bh2vp79kq5adw6smmn0kbkhgk27qqq71";
+"dialogl.source-28946"="zqjq4a7kp63s0m7aq57ragybmigrf05z";
+"dichokey-17192"="0gjqadln2d38gclhy9ggf3i8vcnf2bfm";
+"dichokey.doc-17192"="af0pz0ixx95k8abfhximgla5jjly9ddf";
+"dimnum-1.0.1"="rm8crnajl5cbzxs7i399rn4y5d6kkg44";
+"dimnum.doc-1.0.1"="vzg71a7hjmkkdzcnflg1zaxp7v5dj06d";
+"dimnum.source-1.0.1"="g7qhpkzz1fy1ymxkiibk00a7hkmhr8i0";
+"dinbrief-15878"="49584j24lg6vxazw8rqbhzcf0c7anbqy";
+"dinbrief.doc-15878"="i1dwsv81v87ll6wipvd7idsg8vym61k6";
+"dinbrief.source-15878"="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";
+"dlfltxb-17337"="ms6423aqc91c34fmxw8l47d5kbk9yc6b";
+"dlfltxb.doc-17337"="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";
+"doclicense-2.3.0"="6r8lr2qyx9z98x1p9dlym8i1nwy6kvd3";
+"doclicense.doc-2.3.0"="0z6y5vb2j8h6lx7515hhpz7j5gxl8zij";
+"doclicense.source-2.3.0"="dgiry6mlr4lpk6zs3mmk64l2f400frvj";
 "docmfp-1.2d"="5az4cgljj1gmc28z6kwy9g4h49gzkplf";
 "docmfp.doc-1.2d"="rn7s95z09ijvddynz2dda2lpqidzbbnw";
 "docmfp.source-1.2d"="c6swy2dkxzrprrl0zjbphcf15x6my5l2";
@@ -4301,8 +4520,10 @@
 "documentation-0.1"="kji3s9vf00jpl198nm49dxfxw8yh3xkh";
 "documentation.doc-0.1"="ir7a948d9yliinmb3y55vx8wa2zi4ada";
 "documentation.source-0.1"="gjlkrc2a087589g9lrk9sh8g4q0l03vq";
-"doi-2019"="x7wlmyfrj7vh3wmf1zjgpyraf2crh7q4";
-"doi.doc-2019"="h1si59g4nhzwixqsi11dzz1x9p8jv265";
+"docutils-56594"="3ylh872bbn7bjwdm9zw1w7iffjbygm9c";
+"docutils.doc-56594"="gf2wpavh0fipnib447z8zjyssm88s9r9";
+"doi-48634"="x7wlmyfrj7vh3wmf1zjgpyraf2crh7q4";
+"doi.doc-48634"="h1si59g4nhzwixqsi11dzz1x9p8jv265";
 "dotarrow-0.01a"="an0dsydrk9bfcahzi356nrfq9fw0i9fs";
 "dotarrow.doc-0.01a"="ay137znk96s545wq4sligy3q832m4g91";
 "dotarrow.source-0.01a"="g5krgdbp4bdfhk40s759qw2j6f7n6ss7";
@@ -4317,8 +4538,8 @@
 "dox-2.4"="vmv0sf0gjb0hgimhyyxah2n9z7kfc60r";
 "dox.doc-2.4"="mjc4chfbw9nnq06h6sr9v5q7mx0yf3w5";
 "dox.source-2.4"="6pwhbz64rwylp60nhay1ij6bls33aqcx";
-"dpfloat-2019"="lad2kjr2qljjmnrygdlhgqbhpj8cxqb2";
-"dpfloat.doc-2019"="j3mxi39ar6vsyz51w7dj3nsnrrcsqjpy";
+"dpfloat-17196"="lad2kjr2qljjmnrygdlhgqbhpj8cxqb2";
+"dpfloat.doc-17196"="j3mxi39ar6vsyz51w7dj3nsnrrcsqjpy";
 "dprogress-0.1"="6bz0iy8fa34famjb67k3q1xhsca311k3";
 "dprogress.doc-0.1"="9x4n68z2vp63dvhc4g30yar4z70xkxbb";
 "dprogress.source-0.1"="g0d00q6x7wagml9hphd9b2ddg7zn887a";
@@ -4330,18 +4551,18 @@
 "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.08f"="4v50smdv44x4fp57sjdjk4sl0jd8hmnc";
-"dtk.doc-2.08f"="3gr8dvcl3553c4i8z04666lscw69llyr";
+"draftwatermark-3.0"="3rnp6myad4ij6ikq9wwfdknjkxyqd04g";
+"draftwatermark.doc-3.0"="df3zzpkq6ixspdzpql1zmif2y78k5glf";
+"draftwatermark.source-3.0"="b7ngzwvmc8g8w3hc6ymk8r8h6kn1a4x5";
+"dtk-2.08h"="x0hk8li42r2m26kmmn5fz5kxjy4xi09c";
+"dtk.doc-2.08h"="6yxf7x6a5d8r7dnwipcxa87w2sgs8xz9";
 "dtxdescribe-1.02"="2bhwnkb5id2raigd4iywhf7da7c772zr";
 "dtxdescribe.doc-1.02"="2ygyzgrllyq4fa2xbf8fyrfk810w2ja9";
 "dtxdescribe.source-1.02"="39inl1ksgzd28sszdfjyyq80gscdc6xs";
 "dtxgallery.doc-1"="bpsakwyq6ihcw2ziqpjv8qh2a90s5mw9";
-"ducksay-2.5"="dyhjn1zfasgd7yzx1shbxcswj1zqz9md";
-"ducksay.doc-2.5"="8j27sx7khqa6jas9hnxvvm7hawvafiaz";
-"ducksay.source-2.5"="nd5z7dlyn7svr6msmc6hxhydnrrjv2r5";
+"ducksay-2.5a"="sg9xk4jc4ngsan1f0806w9ph5372qihk";
+"ducksay.doc-2.5a"="khw153wkf91llm5n87wkq5wqr3mgazy6";
+"ducksay.source-2.5a"="xsyz67f6rm0561r1lc128xn8091vxyva";
 "duckuments-0.5"="vdc247rsaliycjf37gn8lwihycrpgksp";
 "duckuments.doc-0.5"="7ia6rdsdhhnvf2jdxynz780virwl48p7";
 "duckuments.source-0.5"="ndcajqs2y2vmk0fzd25ayc4i9yq03qz2";
@@ -4352,15 +4573,21 @@
 "dynamicnumber.source-0.1.3"="1s5p8px5hk951cifga7as2cys5p9v9g8";
 "dynblocks-0.2b"="svrn2iyvz97vsdz7zf2npfjjmj1hiiwd";
 "dynblocks.doc-0.2b"="vbfwn0p5rpddhfbj5dzzg8y777i69s62";
-"ean13isbn-2019"="mc1jwh057knlvcn9rh4z55xf23cx3lnn";
-"ean13isbn.doc-2019"="bdnaafy3hkiz4prf7q3fkn00gsf1fw47";
+"ean13isbn-57514"="bw8467r85cglxc63sqjzkyfr1yhwa318";
+"ean13isbn.doc-57514"="7qpp7zyc1l29pficyg78629y85z6w197";
 "easy-0.99"="jb9dranvwd0ngzigpq8kla53wnd99fiz";
 "easy.doc-0.99"="m4hx4j5snaiip3mzz1hnakcqjdmhmy4z";
-"easy-todo-2019"="303p58si7jhry6gzkiqjcdhkgdxdj8yn";
-"easy-todo.doc-2019"="19xs0lb6swakg1f9ci5gfmmfbddcirvp";
+"easy-todo-32677"="303p58si7jhry6gzkiqjcdhkgdxdj8yn";
+"easy-todo.doc-32677"="19xs0lb6swakg1f9ci5gfmmfbddcirvp";
+"easybook-1.24g"="r2a3c446jydh15ir8d3h948dgip6kkdp";
+"easybook.doc-1.24g"="6y2hd2v20wy7nh9fj0i380x421nia50m";
+"easybook.source-1.24g"="zvsk8amph0yp1hmgv054gps4nc6zyf5v";
 "easyfig-1.2a"="l6pbmvwsjjnrpxl6d9v6askvk0fvqpyn";
 "easyfig.doc-1.2a"="glg4115m5lkacjxdq29my9a01xn5mj13";
 "easyfig.source-1.2a"="szidzjjq2h8aiqh995xcd37460xx5lbz";
+"easyfloats-1.0.0"="v2v3sm7d9dga3kpmr43jvi8p5s3xlbiw";
+"easyfloats.doc-1.0.0"="s385w8a59a9xncvv6rqclbiac11bsksk";
+"easyfloats.source-1.0.0"="08b3pa30hllhxb884hgmpby1zkz1n7bj";
 "easyformat-1.4.0"="x6ad1pxvbj09q2kypdg6z5js8q11a7k4";
 "easyformat.doc-1.4.0"="1g0wbnrc4snik4hbzldn9c015ry80n50";
 "easylist-1.3"="3mri8pvv7jc5lkqkmzh8h5a4x8agh702";
@@ -4374,12 +4601,17 @@
 "ecclesiastic-0.3"="mw0n2vbpdvh26xpjh29avdz7lf2jhhx5";
 "ecclesiastic.doc-0.3"="2qblfhxs7h9p9wnrx6m73drlgvwnk6ql";
 "ecclesiastic.source-0.3"="0cv2d5838jv4ra4slgvfp2fkl1v2kv7j";
+"econlipsum-0.8.2"="ipxvwmfm4z615j0fw84mwlarq9h77zjh";
+"econlipsum.doc-0.8.2"="c7k1nc8vnvn84wbzcm0qayy8rc3g7sss";
+"econlipsum.source-0.8.2"="alz8zs8874cmpbxrnk6h992pmrg9vx3i";
 "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";
+"edichokey-2.01y"="fba596rhvgbccbrmdjzdqhx3a3k8fd20";
+"edichokey.doc-2.01y"="8hir9vw34lrizkxivznzbwcypvxjssk4";
 "edmargin-1.2"="crg5k7p997nxfxjhlrv2wcmvb673g0ry";
 "edmargin.doc-1.2"="wfdkbmlhvmwcba9jkg3p83vsqj4k3dxh";
 "edmargin.source-1.2"="j439fzcg8r3rcwr9kadrlx9rp4wvxs9r";
@@ -4392,24 +4624,28 @@
 "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.10"="wz7jz9gjfv6qlfqg9c6j4ljsr86464bw";
-"elegantbook.doc-3.10"="yqyynhw3dpbzmr3zval1xwdgifg87cnd";
-"elegantnote-2.20"="mhbycimafrwq4kqnm83mgil533z1f4vf";
-"elegantnote.doc-2.20"="ln51l8wlqqyrg9p01kanpf2ahzxyrr2g";
-"elegantpaper-0.08"="wccij61cpjzcyw006hzhgdvv7i4kxfpk";
-"elegantpaper.doc-0.08"="mngv13z3srw192zl58fy7vrqn6i31sjg";
+"ehhline-1.1"="zvpll3g8lwzzc6pna6yz84g4vmchvr2p";
+"ehhline.doc-1.1"="in9l558n65w88wipl7rijrlz7m14ygdi";
+"einfart-58414"="wynf55xmjvnn0hsy4l6rfxfjvys905r4";
+"einfart.doc-58414"="cpzr04fnqljp1k85vc7z35b2p7903fcz";
+"minimalist-58395"="l855p35wwvmbnzhb8ws4ycds31jvyy1s";
+"minimalist.doc-58395"="wff8fp73ygsfp9dk1djpgad8i5rjgfkr";
+"elegantbook-3.11"="8b5ph3pghzqw6w87r3j7syv8wvbwi693";
+"elegantbook.doc-3.11"="4vpyymvj9yn902bz7rizay726icsrpx7";
+"elegantnote-2.30"="2j2whlfmm5nydbm7rinsrxpj7sxxf5nk";
+"elegantnote.doc-2.30"="b807hfa7p6zybw2mxrnc8ic2xpplq3p4";
+"elegantpaper-0.09"="r8jqan4yc8rcsxpi6lnxc4sfprijnh50";
+"elegantpaper.doc-0.09"="d3ax4aghz14cbkw2a9nc22if598r9fhr";
 "elements-0.3"="5jhgr3w0l71k6yyah71sns2cyib3w6rs";
 "elements.doc-0.3"="64ad2wwg0s9s56416gdw3y2k19qj3isl";
-"ellipsis-2019"="cnpqy3kavs6v3r35x6hp9cny47lp47vq";
-"ellipsis.doc-2019"="pl4c26az5319bjkqmp0byyjh6m2ghxnf";
-"ellipsis.source-2019"="s1vmh5xsvqrwhd0c4qqk4qw9pgmm62ms";
+"ellipsis-1.8"="r0sz3fsnxpphg5jrwpqr06l9j9qci49h";
+"ellipsis.doc-1.8"="wx7z1wwcsgqhs1gpgjy90mj3m0j4w47h";
+"ellipsis.source-1.8"="ics0hg4wsp162y5abmwdgv30fj67sjms";
 "elmath-1.2"="pljnyyb5wp8n5f7g5wp2hb0f7aizxwyd";
 "elmath.doc-1.2"="9rrybpg3pziqa42bkhblp14jjz6zgm2v";
 "elmath.source-1.2"="fnw5k3ck3nbphv71xqlyq6yisgq04xjc";
-"elpres-0.4a"="mqyj4aylv6lah36gxkqrdcl2a4jgvnlk";
-"elpres.doc-0.4a"="fs5jy5zzc8jg2v0gbvqr5nwdad9bmz21";
+"elpres-0.8"="sdk8wfvfm49xk250gv1bjsgl3r400kw1";
+"elpres.doc-0.8"="c6xzbksr0wacp0nriw1ws5jrb1db91sg";
 "elzcards-1.60"="nyzh9ppq7rch8s38spiddbvgbc3jlav3";
 "elzcards.doc-1.60"="xf2cc42ypl06p2kardrq1nf3bkr0xziv";
 "elzcards.source-1.60"="k346vzql960by6gqi3fcpfjdiq6ncc26";
@@ -4419,69 +4655,74 @@
 "embedall-2.0"="bkkkbm42s039l4hsy7a06fba7y76pcdh";
 "embedall.doc-2.0"="xifjdsbhrdr372svi21sq1wwl6jin2as";
 "embedall.source-2.0"="kmanpw0yvlllsc52f4wfhh7dpby80bnc";
-"embedfile-2.9"="qx8sz5b4h94g73qrwqxfdzq8prlhghsl";
-"embedfile.doc-2.9"="afjnsnmjbzkpsn8la5w1vgmpshm076q3";
-"embedfile.source-2.9"="l98vd4zxhb171kin1n23yay14vy5arzn";
-"embrac-0.9"="s9j4hhy7akf4c9w38igwkgw2vm7ilwm9";
-"embrac.doc-0.9"="qvh1i7n8g5l9xzvl8sh8wnl63ki1kpsc";
+"embedfile-2.11"="lmyii6clmd884g9f6205j11hps9ckw4p";
+"embedfile.doc-2.11"="9dr0hdvpp5g5cvq8q449cslixn0yzr4f";
+"embedfile.source-2.11"="4rz19s91zj46l9hmzgn8xkimwpjizxbs";
+"embrac-0.9a"="xgrpqldk849vwzs8bb0zprjba4vr5hgl";
+"embrac.doc-0.9a"="nyp3yczjp39bh3d7ngrvyn268jhfk2ng";
 "emptypage-1.2"="lbjvj1gf2jiy15yj86d6jxlhrk66zmrm";
 "emptypage.doc-1.2"="07fnrxjidk9b42610wx6696cah8p1zdi";
 "emptypage.source-1.2"="svha86185zhrvab827x8nbn02vlp027l";
-"emulateapj-2019"="2ywrmmrvlkygp6a86i56rn9bm6wzqqki";
-"emulateapj.doc-2019"="ij4q6ixvmmh8xwq7kgb0hzvhz5pcsy68";
+"emulateapj-28469"="2ywrmmrvlkygp6a86i56rn9bm6wzqqki";
+"emulateapj.doc-28469"="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"="h3pqrcr0w5lgxgyw0glmjshyz4jpi08k";
-"endnotes.doc-2019"="fdkg195aiaccnys9dnjyiklrsvkvmx4m";
+"endnotes-53319"="h3pqrcr0w5lgxgyw0glmjshyz4jpi08k";
+"endnotes.doc-53319"="fdkg195aiaccnys9dnjyiklrsvkvmx4m";
+"endnotes-hy-54758"="3l046f4h8qjd9vc8d6s20d2bn8fjhb9d";
+"endnotes-hy.doc-54758"="4yxl7kqaz73j6inrlrb15p6b9mpkda0j";
+"endnotes-hy.source-54758"="15h17rhifyp0yxqysjvhwks8183rskk1";
 "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.10b"="14hjscgb5k0pr21jg2bz75k7ys1ycgzz";
-"enotez.doc-0.10b"="x60vbpi6c6n6b0v3gmbq2sa3h6cml1sh";
+"enotez-0.10c"="qgbri1hhaq4yh7mnxcdwky11rww0ab6y";
+"enotez.doc-0.10c"="nmqm91i52qry6rm0rzlzqjxl18wmfpaj";
 "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";
+"envbig-15878"="9jl4id16g9bmsqwwdbcdp2925m5c381k";
+"envbig.doc-15878"="5302z09wsidh1fvnfs5d7zf3fzd9z967";
 "envlab-1.2"="iqf24bqqcnpp7kiysfb5dy4ksw2ni0pn";
 "envlab.doc-1.2"="5xscix7j6x6fbscw6hk22r4qz864y654";
 "envlab.source-1.2"="ndl09cfzl24rbp7rw71lcv2q6dn9pdih";
 "epigraph-1.5e"="hhz8zdnr7k77gpqvk82mbq7v1gmcq6ig";
 "epigraph.doc-1.5e"="xkmp3p36yicjy9f8ywy7s39i5spwwf78";
 "epigraph.source-1.5e"="s20xxdnwi3pc9d6sl5md0fyh7w8vnhbd";
-"epiolmec-2019"="hpmg6yy63c52078mqmp861418xi07rgk";
-"epiolmec.doc-2019"="vl11cbnw0avwvjf8ad01fziya1dzrbh8";
-"epiolmec.source-2019"="1b7as37h0ncqjvsypwc9wdzzjhs0sfhs";
-"eqell-2019"="24n6gsirzxiyv3avcm27hll6nwrybkk5";
-"eqell.doc-2019"="xwz1qv3l0345p2al1p02dc5k3f77k48h";
+"epigraph-keys-1.0"="dz1105qmdapxazcvjwmli1hp8wc3vrsp";
+"epigraph-keys.doc-1.0"="gvycf0wi4kjcld2sic2j09nwpm4vhcxr";
+"epiolmec-15878"="hpmg6yy63c52078mqmp861418xi07rgk";
+"epiolmec.doc-15878"="vl11cbnw0avwvjf8ad01fziya1dzrbh8";
+"epiolmec.source-15878"="1b7as37h0ncqjvsypwc9wdzzjhs0sfhs";
+"eq-pin2corr-1.0"="lcjcz5waz5n4l52052mm4xcmw8gjqa1n";
+"eq-pin2corr.doc-1.0"="k5pyaiw0a6gl3941bcr78ll9m5104fas";
+"eq-pin2corr.source-1.0"="9hi9zmpb70arkdf8sgdyr3fkr7abc6pr";
+"eqell-22931"="24n6gsirzxiyv3avcm27hll6nwrybkk5";
+"eqell.doc-22931"="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";
+"eqname-20678"="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.6"="kxphzlkm7yayqy1yf263c9bk85zz9hgi";
-"erw-l3.doc-0.1.6"="b7pk72671bq9gv3mjbf934nbp3lqcaby";
-"erw-l3.source-0.1.6"="6nbfzgfb9w00f52rg5pq03kvnm8ynnik";
+"erw-l3-3.1"="s7sivxpp0j267gxma49pbrxdmbs4f7pk";
+"erw-l3.doc-3.1"="7g7nahk60jdkzxa79fks5dxmynwqimh2";
+"erw-l3.source-3.1"="qhvqgnasnpiin8fms37rhcjyxf0hcd6w";
 "esami-2.5"="8b9bvz0jsn56nq9d27l05kfmwhggm6sw";
 "esami.doc-2.5"="y2n8zs9pk1a3zn1ag5sw4sm0kbaclqr2";
 "esdiff-1.2"="q26sgf5s4ans9qv984p9s04pginqby9z";
@@ -4492,34 +4733,31 @@
 "esint-1.2d"="74szrggzvcprs68hisb87p7nvj0i081h";
 "esint.doc-1.2d"="hjpca8jbf1aipkzs30al948hpclk6jy2";
 "esint.source-1.2d"="1mpxmf7kkdmglnz0l6nkcpbyy4k3kbqp";
-"esint-type1-2019"="0fwcq5cpsqzajzlp2rc9ffmcwg5fb5ja";
-"esint-type1.doc-2019"="vmamlk0v1w4ffks6cp9f0gg09rkr37vf";
+"esint-type1-15878"="0fwcq5cpsqzajzlp2rc9ffmcwg5fb5ja";
+"esint-type1.doc-15878"="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.09b"="ayn6dsc7550qxa7rxcqcp019nbfdsnfa";
-"etoc.doc-1.09b"="7if33hyz1027q1w1jfr2hi170map9d3d";
-"etoc.source-1.09b"="q1ivnwnc5dgz72fck2lzmdz6y18dgvpk";
+"etoc-1.09c"="bhd2fhjy5m6j8k0xb3hiirys8csvmwyg";
+"etoc.doc-1.09c"="5rl8ibswi4p9a8d9jmlavx5zwih05mkm";
+"etoc.source-1.09c"="18w9wy70s61yggkcxfrhfxsvjmbpr7hl";
 "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"="fmf2rbqmvglyydrw34ksz35dg3ya7v36";
-"europecv.doc-2019"="3pwjj21avp8rw3sfr8hr1gnz2blb4fzh";
-"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";
+"europasscv-56829"="5sjzgabngp49v4ghn8sv6dahbnnka7sd";
+"europasscv.doc-56829"="8racsqj1y0rr6r8x9hb0khb4k2g4dgw7";
+"europecv-57641"="51gzlqk28vhg99i196pdkvax366z4m56";
+"europecv.doc-57641"="9ra58061c14fabaifdg216h4xjcgv24z";
+"everypage-2.0b"="az5nzriphfs7imw4zi1g7m02qy14d0j7";
+"everypage.doc-2.0b"="fvd7wnl16rgkkkl95z24k7057np0jh54";
+"everypage.source-2.0b"="6q8da7fiji3x0wli9dncncg2kgx4wwkj";
+"exam-2.7"="51k4l25g664px41y845m9f1gcy0id8lz";
+"exam.doc-2.7"="a5w0cfmfz19icr3qhqfs502x5b7j688y";
 "exam-n-1.1.4"="nhyripks5spkljgi7js9mva03lgam717";
 "exam-n.doc-1.1.4"="s5zg21xsdrxmyr4v4fj9gjp5gkcm27wj";
 "exam-n.source-1.1.4"="yfj6g9n8q1i7x9037cmvghzyhm4i28rl";
@@ -4528,7 +4766,7 @@
 "examdesign-1.101"="58mxkjnnwz8z68lvxdc43gn14v6i9ysx";
 "examdesign.doc-1.101"="vr8j3mhp28h6d9zvcg6akfx9sx756zh0";
 "examdesign.source-1.101"="51c9vyfhwcp9vmhsrsvzd47q93ckw2f1";
-"example-2019"="rpbgsy66fj5nxcf2j2kg6mmkb46hq4ir";
+"example-33398"="rpbgsy66fj5nxcf2j2kg6mmkb46hq4ir";
 "examplep-0.04"="jnd218glfcwkbz8qprkac3nykm86lhsx";
 "examplep.doc-0.04"="lgm123fsn5wpdgbfx3kqm9h5q92qss83";
 "exceltex-0.5.1"="2zx6110fa87f5f3fabp4a163ybxd8mpv";
@@ -4542,9 +4780,12 @@
 "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";
+"exercises-1.1"="rkvmgr7ahzvi3hdskg4m3hxghxa9mzkh";
+"exercises.doc-1.1"="fz84yp1ykv7b2sspfp562305xdjz28hg";
+"exercises.source-1.1"="rdwlqw0b69q92rl6qn2k3pm8bg3mch7f";
+"exesheet-1.0"="9yvchdd3qmlr2dp30k8d4gbx8bkgnwm3";
+"exesheet.doc-1.0"="mgibzk9pksylasb5g35j73r7ydzzk37z";
+"exesheet.source-1.0"="6b6g6ijdakwvk0zscvq18h6n2wrbrabq";
 "exframe-3.4"="4ylpslzc9xy1anmf3955qv9c2qf6a2j8";
 "exframe.doc-3.4"="nnvszhbdyp6xc6kscdlsdrr1xzp60pjw";
 "exframe.source-3.4"="01lnli0q7sbbax9kzz5wil7gx6578h6d";
@@ -4568,11 +4809,11 @@
 "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";
+"factura-4.00"="3rn2gc3d7861614g9p38jkj4zdkaga1g";
+"factura.doc-4.00"="i9l8lg739x2y4cq91hq4x7smy3m64cjh";
+"factura.source-4.00"="0a47dflwg4xq6vswm89jyvb2ms0316jl";
+"fancyhandout-46411"="d1l30rd3z334px9zyw74l4x5vjyki6zi";
+"fancyhandout.doc-46411"="y4vl6xw99i4q8j9nr369isqzs9vl39z1";
 "fancylabel-1.1"="fvnw8s5y8rr4sfpff9ay2y1yqqgrwysk";
 "fancylabel.doc-1.1"="xsq1b17afxx971wfyrdgwnq2fkyqsxc7";
 "fancylabel.source-1.1"="rwq6gd28j5m49xv2h91sav2b5pf9cyvn";
@@ -4590,22 +4831,22 @@
 "fancytooltips-1.8"="92mbrk8gn6np54fx90qzcgkps3v6k54y";
 "fancytooltips.doc-1.8"="v90g2vxn8yqy9lvibqhldwm23cpvv53j";
 "fancytooltips.source-1.8"="cgj7harpp7wxh1fvh1wfx3pc0c34nhd5";
-"fbox-0.04"="jh3qscq1a545idv7l37yfvma12ww4fy0";
-"fbox.doc-0.04"="a76rv2z51nryzn49hq9hcwrk2vblfssc";
-"fcolumn-1.2"="7gnf966fnvfcw5m4gfcxlxhixarf8v2l";
-"fcolumn.doc-1.2"="w9hp3iibs2fzympchad93fwrjzz3mn15";
-"fcolumn.source-1.2"="cx5wmvjqckiw10xd2xi66mwvq85nhmmx";
+"fbox-0.05"="kbmlphchd664izvm0frraylr6rr31rkk";
+"fbox.doc-0.05"="yc0kh1lbmwa6281m6mwb6vbk5bvis6ay";
+"fcolumn-1.3"="33ajwdb7hmvbmb27qbrdb0h8jk9pskdi";
+"fcolumn.doc-1.3"="0di4myl6vdrb7c7lh012zpd26kvs9lxp";
+"fcolumn.source-1.3"="zjkdy0hs3i348liqyf7r8h3wj3zv9a93";
 "fetchcls-1.0"="hjmchh00z9pl5bhdxdb491f4grb4hvri";
 "fetchcls.doc-1.0"="2p0k1bx3y1b9b8lw2j25ybcaz1gwyyfa";
 "fetchcls.source-1.0"="xzc8psnl98xfsj7hy37f1qgln8hx25pn";
-"fewerfloatpages-1.0a"="f18hhill9s3ab3vrmcvvpzyl5jqxdxpi";
-"fewerfloatpages.doc-1.0a"="d6g966l36wbsyaqw26cpq3bzjln9vsvi";
-"fewerfloatpages.source-1.0a"="88x4v7p9yc5skms1zms5j3cx06lay8gm";
-"ffslides-2019"="v88vqphgndyc8bznnkpc17pcgc4f429f";
-"ffslides.doc-2019"="1378bj25gqxr8mhdwf99rw2q61kbakqd";
-"fgruler-1.0"="z5k7w4nncv381nbznr8c7bwq0a9k9l5m";
-"fgruler.doc-1.0"="rm6g865195d2lm97v9pbaim7jrgsnjyz";
-"fgruler.source-1.0"="67chz0f0pjn70xrxzmw7jvzgskjl9vlv";
+"fewerfloatpages-1.0b"="dj3wj1sgnqgmkma8mdfnar5yggnl0ygs";
+"fewerfloatpages.doc-1.0b"="6q4r04r60d92k9s3g0f7warakjrivg61";
+"fewerfloatpages.source-1.0b"="r5bv4ial8kng8xlasm48sgdc5jfdf5zh";
+"ffslides-38895"="v88vqphgndyc8bznnkpc17pcgc4f429f";
+"ffslides.doc-38895"="1378bj25gqxr8mhdwf99rw2q61kbakqd";
+"fgruler-1.3"="8cb0sximw14vln08pdri479bgqz072na";
+"fgruler.doc-1.3"="qzp1jn7pxsx90zszck96412hv7g2bbhy";
+"fgruler.source-1.3"="salx2na2qh9srcyzy4pxm95hzmby9vcx";
 "fibeamer-1.1.8"="9vdqi8fyrg6ixnia4qh18dyzbg1y0pdd";
 "fibeamer.doc-1.1.8"="blp94av9rfbpawsvgrlwq5p2ycgwz3bm";
 "fibeamer.source-1.1.8"="6s017bq2ca3g3ml50br5dwn14i9q3986";
@@ -4620,9 +4861,9 @@
 "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";
+"filedate-29529"="krqs9ry6gpmk5xi9a2ijkrd90y7v6q5h";
+"filedate.doc-29529"="dq7487rvj7vai1j80j9sgi7hsldg433m";
+"filedate.source-29529"="qq7zspqhd6zl4w5lyy9gxw927ph31sp4";
 "fileinfo-0.81a"="gbv2pynx74765fc966q0l4wpflxyi0cz";
 "fileinfo.doc-0.81a"="5y2xniw8nwg8iw11g49w04xl9fp4zyv3";
 "fileinfo.source-0.81a"="lgcw481ya8a6ag2gzd0g589sm3ndsqys";
@@ -4634,9 +4875,9 @@
 "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";
+"fithesis-0.3.51"="gcxrl7vq8zfs19kj35j2dlchmfy8gr80";
+"fithesis.doc-0.3.51"="nil8x9yx68ji17b1xw9lc8ig8m8dsvga";
+"fithesis.source-0.3.51"="q6mx4dlif4sp21xzsy9clyl8ci7pryp2";
 "fixcmex-1.1"="p0y657r350dcr3nnwq3i0ypw3vxb4ja8";
 "fixcmex.doc-1.1"="hi9qnwgbssbkxl45ni29zlkjysn0qmnj";
 "fixcmex.source-1.1"="7b3yc3sn3pqgfzkamp4rkgfman5wy28l";
@@ -4648,8 +4889,8 @@
 "fixmetodonotes-0.2.2"="8bzda1486sb6l1miw9fwc4gag8l86pld";
 "fixmetodonotes.doc-0.2.2"="kwvshr4l5r8zgjia62ac04bpc7cy5n8w";
 "fixmetodonotes.source-0.2.2"="c3v82mnqbxnz0b2yy1g5l9yfxh1y41vd";
-"fjodor-2019"="c6ya1a7zfddfil9y5f30af7d0jm8ikij";
-"fjodor.doc-2019"="2d9qhg8icr3q3ljp18wpy0wphq2rhdsi";
+"fjodor-53207"="c6ya1a7zfddfil9y5f30af7d0jm8ikij";
+"fjodor.doc-53207"="2d9qhg8icr3q3ljp18wpy0wphq2rhdsi";
 "flabels-1.0"="pphsynfbbj4vxl9g3rklfj0igp6pzliy";
 "flabels.doc-1.0"="hpsnqln41r0ybmv2vjycd0zrxi6mwrcx";
 "flabels.source-1.0"="2x4jjggfjxvqby3yv13k0y1cgcrd0jcq";
@@ -4665,9 +4906,9 @@
 "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";
+"flippdf-2.0b"="pff26pmbw5sgmgdm20schik2fvx2qch6";
+"flippdf.doc-2.0b"="kpkjnx6iwwjdg62s7nn0sz1kn6ph23ma";
+"flippdf.source-2.0b"="50zpnpjcak8bcaq09q49d5wai1pwrsng";
 "floatflt-1.31"="ppv98lki1x3s6xklksd69n5cr8vrd6pd";
 "floatflt.doc-1.31"="7n9r2sl31qx9jnw802mhykidjldhx4hl";
 "floatflt.source-1.31"="byz5ymxby208lx8am35lz229dibcn4ic";
@@ -4677,9 +4918,9 @@
 "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";
+"fmp-15878"="3m6zqb7jl5rn5zgy0dbys5r8y1sp20x5";
+"fmp.doc-15878"="3hvfiw6yizjkxnx5h7xlzfig11diglpm";
+"fmp.source-15878"="44cqcijnqc5235rjqsmkj4vhmrs9j7hq";
 "fmtcount-3.07"="zhm87ydajmphfm6hp2acvf0dbknldyvr";
 "fmtcount.doc-3.07"="9md72p30182mf6yp6x8c1jjrar73j9cg";
 "fmtcount.source-3.07"="hwq1ghmccx21k6f3sv5vyv8ikv6bxl4a";
@@ -4692,21 +4933,21 @@
 "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";
+"fnpara-25607"="bwgyxjk2k7p76mw5ahsf2b0nm464rvi6";
+"fnpara.doc-25607"="h92c0g634x7n1qcdv6vqp5pnw9ykba0y";
+"fnpct-1.0"="lhjh889ybv4z8azwljdpz76zvbsxvncn";
+"fnpct.doc-1.0"="98d65w8nik3655gva5jjl5gxwansywkj";
 "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";
-"fontsetup-1.002"="8nkvghhfrxfaca7iw88r4460z5fvlpkc";
-"fontsetup.doc-1.002"="s2l113cxvbbrpcsb2ympa7jivlm14a4s";
-"fontsize-0.1"="0an9sggd8hdginlv1cxs9489770q1j45";
-"fontsize.doc-0.1"="scl06w7gj8gkhds45xk96mdkgs0gpdkd";
-"fontsize.source-0.1"="4pvk1b0ryv7rnf2k6ncsj6c5rwhsw7wc";
+"fontsetup-1.009"="kjapn7b0jqg0965pyqwf1r4k4br3srgv";
+"fontsetup.doc-1.009"="n6fac1daq1mvrbgifja9l0q9pdxbc6w1";
+"fontsize-0.8.1"="10na0w0zc5lmlygflpzzl2c8rzakgrl8";
+"fontsize.doc-0.8.1"="g4p6dp4jj0scs48v3ag8n9kqy09y2ypq";
+"fontsize.source-0.8.1"="2y7d9wypdgkk8xjhx5ivyrsccpha35il";
 "fonttable-1.6c"="bljjiigal2igv0y004hwa9i1yc9i4b3d";
 "fonttable.doc-1.6c"="jssz79rldva4rmrziamjqi1krl4yijan";
 "fonttable.source-1.6c"="h3g6s458yvqsrlf0h7d8046ngi10698y";
@@ -4721,9 +4962,9 @@
 "footnoterange-1.0c"="488i0ahfgp8myja7i0z7cxn61wlqdb52";
 "footnoterange.doc-1.0c"="lvi0razyvdr1cll474cb4mkdyk62nz91";
 "footnoterange.source-1.0c"="6z89fiq5iffpdapn50jqagmcrgl10jby";
-"footnpag-2019"="ym18m0gmmk7800dd1c4vrar53q66hm7g";
-"footnpag.doc-2019"="8kar3xxxjlrsjascd28122y5rckyv5lf";
-"footnpag.source-2019"="51nmvyy96mjbr46ar058jb7jhpsqz17q";
+"footnpag-15878"="ym18m0gmmk7800dd1c4vrar53q66hm7g";
+"footnpag.doc-15878"="8kar3xxxjlrsjascd28122y5rckyv5lf";
+"footnpag.source-15878"="51nmvyy96mjbr46ar058jb7jhpsqz17q";
 "forarray-1.01"="682slfwbrz58fhqj0c07lv1xwab861ks";
 "forarray.doc-1.01"="i7v5q2pjc3sjmcv3mcpdi3sffm4qs4kb";
 "forarray.source-1.01"="q23rvw19x2rk8nv6yhgg76jxfs30qfys";
@@ -4741,17 +4982,20 @@
 "formular-1.0a"="1ccyslvhjbzqyqyk4m3zh761kw2v45xk";
 "formular.doc-1.0a"="lap9j51p3dsh02ym644576gnzm3a845i";
 "formular.source-1.0a"="v80wnhg3xsl24a6bbsj4xfn82cv7ajd8";
-"fragments-2019"="jjblkk9dj72nvr2gday7p509pnlpwy16";
-"fragments.doc-2019"="z8rmyhlpsv68qbnr6h3sy08gcy6shiac";
+"fragments-15878"="jjblkk9dj72nvr2gday7p509pnlpwy16";
+"fragments.doc-15878"="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";
+"frankenstein-15878"="ldv1sc8j6nxhd9cd95jf934pyz6s8lxs";
+"frankenstein.doc-15878"="j03cxxv0hw0c1j4afrfprgc2ia6nc5c9";
+"frankenstein.source-15878"="zc3nzdkbjrfgv241wj4xxlq6042xv9nb";
 "frege-1.3"="vczq96wx0icl69c5xqcqmfsy2wdw1ncn";
 "frege.doc-1.3"="h07nnplqxq2fyh6f0wh03jpism89ji0d";
+"froufrou-1.2"="7v7g5xw3q550wyg4ls80fflyl1lcx6q3";
+"froufrou.doc-1.2"="1vmkmq9nbgn6786zj027zlmy9lxx008h";
+"froufrou.source-1.2"="9n2ns02cqqkharia3bj3lk9pdkv5i74a";
 "ftcap-1.4"="7srhgl4z3zpicxv7aakm970xy2yxnpns";
 "ftcap.doc-1.4"="1y7r73w8r779pdchcgwmlvcd2sq8hyfj";
 "ftnxtra-0.1"="8iicyf847h3xf4jvn1y8nzyjk3dw7jng";
@@ -4768,25 +5012,25 @@
 "fundus-calligra-1.2"="5jn0qbj8zgi1c0166c2vdwzs1a5i8qm1";
 "fundus-calligra.doc-1.2"="dd87040kysj4av2sq7grslyjv0gx4rmd";
 "fundus-calligra.source-1.2"="s4s97ga289ncgv0rpd90b8i7qh4n7jfj";
-"fundus-cyr-2019"="fjyzn069q34z3ypaj0qwjq3f5zjm7y8k";
+"fundus-cyr-26019"="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";
+"fwlw-29803"="887p12xhlcgydw4pddr0npyvp4xr1azf";
+"fwlw.doc-29803"="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";
+"gauss-32934"="rm0hzy2h1msxkfp2lxm2k881y4iaw773";
+"gauss.doc-32934"="1d71g6781ar41gk3rjjy48bbkdkxx4id";
+"gcard-15878"="vrmrds4xh35bqjq4qaqj8rrvfd7fdykm";
+"gcard.doc-15878"="lxpbgqbbcldhlpwjkj531yh2bm3l2n3v";
 "gcite-1.0.1"="z7ha969s3ry7g9ibv521f2d6vr9lcxx7";
 "gcite.doc-1.0.1"="3bb2z8jbygadc7qzmjz024dqzphncy4f";
 "gcite.source-1.0.1"="v3fbj2j823jh4gy1vrc4f74qsdbfqnpa";
@@ -4815,15 +5059,15 @@
 "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";
+"gitver-1.3"="g29l771yh6kcwqmb719ilba7d4d2pk84";
+"gitver.doc-1.3"="yljhjx0nrp3vvh55i3zaswl5mwzdil5s";
 "globalvals-1.1"="cjs44i0mivi683bifs5icf9nk3jr7v8k";
 "globalvals.doc-1.1"="2pdq5ik88cr3z5x9j5jvqz1k6abkllm4";
 "gloss-1.5.2"="xacfn3b2z30pnj9lwh6mximrbsfvarfs";
 "gloss.doc-1.5.2"="4qial5a0p7ip784xgpqgkl6cmabd9hlq";
-"glossaries-4.45"="nw8b7c7zzrkxjwrgxn38xgwf3fkxl223";
-"glossaries.doc-4.45"="h6h684jjcjppk0k7jh6vnw9jkj16qi8b";
-"glossaries.source-4.45"="d1w2xfn501p0kyrdimrhj39fx0ms2g7p";
+"glossaries-4.46"="98jz6vs432yzrl7p9xxxg82mlvan3kqd";
+"glossaries.doc-4.46"="45hwssk4gbgbk0i21mpx6i9vqphniy2w";
+"glossaries.source-4.46"="xgcfsn8k1daf8db39zgflzg0il0hp132";
 "glossaries-danish-1.0"="hmaay0viwacnrz7bfz6xlpb03cmsphcc";
 "glossaries-danish.doc-1.0"="mxgh9b6vc63llhmfildmhkhjxd1s9kbq";
 "glossaries-danish.source-1.0"="s5ayfh10z40cpi9amn2d1wwpnby0qgaw";
@@ -4836,9 +5080,9 @@
 "glossaries-estonian-1.0"="3flqr7abc4hqy63p0bdl0bz0y04mq07s";
 "glossaries-estonian.doc-1.0"="dd2rrp43ix2hcwnrgcidfr8z0shsgdds";
 "glossaries-estonian.source-1.0"="8y8x5qqydmnvjf8nbbj8qj550kbvddg5";
-"glossaries-extra-1.43"="8c52kxd6al3blj6wyh2n0yl99zzv23bz";
-"glossaries-extra.doc-1.43"="5n435fcxbysbmwbqpj7dx0rp9iib4y5r";
-"glossaries-extra.source-1.43"="pjx2fh7klcy7si8lra3fjbnzmvmq1il9";
+"glossaries-extra-1.45"="mn40bwpsg1bl26jdlgl3v5cbp3240s8f";
+"glossaries-extra.doc-1.45"="ic32lsr85iyw5yxpsgwdg019yjv0b8ay";
+"glossaries-extra.source-1.45"="dqa4kk128s7z6vfv71zf1910lp33fhbv";
 "glossaries-finnish-1.0"="rq7ymhc4ispv4j1zpv5iy6mbn66wr3j4";
 "glossaries-finnish.doc-1.0"="f8rj41dbpqrdxbl7h94rxnbiqm77xcj4";
 "glossaries-finnish.source-1.0"="gnj8dlxpzapvi9yvzy04rhmrs5z7hmid";
@@ -4857,6 +5101,9 @@
 "glossaries-magyar-1.0"="fqbsz09snqw5j0zlail5bh3a13nmnhy1";
 "glossaries-magyar.doc-1.0"="zd4idxawfa6rm2j353dhyak90bq2jd5y";
 "glossaries-magyar.source-1.0"="s8xxg7bh6zgxq6rvzp5lv6sp6h8ywvr3";
+"glossaries-nynorsk-1.0"="vln36xzdfqnj5dpz4x9kqqfmgspajk7k";
+"glossaries-nynorsk.doc-1.0"="7qnj0sk8vbgi8sj3kkal7m39ibfs5fsf";
+"glossaries-nynorsk.source-1.0"="p5ybin8hdvpvd4mx7xpnd622m7c7y8aa";
 "glossaries-polish-1.0"="7alkf3zirdbg0mgv66grfaa6szhjy806";
 "glossaries-polish.doc-1.0"="hhzkv01s7m4f1cyib722liyaqchxs31r";
 "glossaries-polish.source-1.0"="6pkd4wg9srcd5m92mlaa1vniyh67ahvr";
@@ -4889,15 +5136,18 @@
 "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";
+"graphicx-psmin-1.2"="j5n5gycsp7vqnqgqsx5p47hg27yj16s6";
+"graphicx-psmin.doc-1.2"="my9qg42ilqhfzwcirmsmf8mjj1ck0j8h";
+"graphicx-psmin.source-1.2"="hxdpbsrnh9zd9aqg3l6vxbqy4iz8nw3y";
 "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";
+"graphpaper-1.0"="rgmcqd72bykipk8py9rpwffxjag3ci9b";
+"graphpaper.doc-1.0"="ca0qq1zsjfnx1c9ma42lw4iik0j19yqg";
+"graphpaper.source-1.0"="7w9rbx215ssxjv6291qazx61p9csz735";
+"grayhints-49052"="g0g3914m4qsplnykwnbfy3ik6svxbifq";
+"grayhints.doc-49052"="gayl01rd21rc9i5x6xnd376wm907qlz5";
+"grayhints.source-49052"="jimxcmdqgjndw6dqmwzb0ry84lwr59cy";
 "grfpaste-0.2"="wi95wbrs7k37di2dkqnix5h21p84cb1c";
 "grfpaste.doc-0.2"="7hn9vs80ksnpaa0aqdmbv7qzhrdxwr88";
 "grid-1.0"="hf1jfkwc5j27mhxi2skf3wjwq2y1ca0w";
@@ -4905,16 +5155,19 @@
 "grid.source-1.0"="pr4xl73p825jibzhj2h8i4f6f0lbrv2y";
 "grid-system-0.3.0"="a2b7690j7d03zk4d4yzdr2nwjm6bm7sw";
 "grid-system.doc-0.3.0"="qddlxnpnyjjjv1z1irzch3ypv2amlb9y";
+"gridpapers-1.0.2"="is89sm33vbklzjah2xq2mkadg4qsc8c3";
+"gridpapers.doc-1.0.2"="kfwzdl5y0gw3kanrkf3zram97xhlscgv";
+"gridpapers.source-1.0.2"="vi0r4mq2j9ria8s3gfppajqfys74cssy";
 "gridset-0.3"="9rs8ssnws7hv6ppyizsqgxip36yj3yp9";
 "gridset.doc-0.3"="l8z8l00qhabaxbrq979yrrkkvy5dxnwv";
 "gridset.source-0.3"="8rwfg7mylrv2cq277769k5h4al2mqz8l";
 "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";
+"guitlogo-1.0.0-alpha.4"="ymqlz298jrwsfq7l1j4ayisg0gcjd3ki";
+"guitlogo.doc-1.0.0-alpha.4"="mpzyviawaizp5aspkwr6kpnnjpl4qxxc";
+"guitlogo.source-1.0.0-alpha.4"="jb56079xdr5qnzpcasv9knhgpd5javab";
+"hackthefootline-46494"="kih3c9nczylrh74x0vc4m7g4bzahps5v";
+"hackthefootline.doc-46494"="vp6qn8s2g5d34v44anyr2jd5c0l5b4nb";
 "halloweenmath-0.11"="mz0f21y810b3vfcpm6z8fwcjbqwdapha";
 "halloweenmath.doc-0.11"="124kqyc9ls79pm11w1cjp1705p84l4pn";
 "halloweenmath.source-0.11"="j0ld7v0za7pvrl5qwarilnjwa8lw9r2b";
@@ -4934,23 +5187,28 @@
 "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";
+"hc-15878"="vibhz5h2dnzdkwrxgadrwy8crfaa505s";
+"hc.doc-15878"="mhva92gfr4jn40d4sdnh0331iy19a4vi";
+"hc.source-15878"="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";
+"highlightlatex-58392"="3kj48yh32h6pgpspj7087ir9rasqp8p3";
+"highlightlatex.doc-58392"="hjr1021fck2cjr1y9p32c9i0rcvvbgaz";
 "histogr-1.01"="lykdh22sggl9qgnr3shki4dpp6716iss";
 "histogr.doc-1.01"="dnc1n1fpnhyyah7gkkbzphbxkv7rbwcv";
 "histogr.source-1.01"="k1n6vsnwpayx81ygapkccaw8g3n2yb7c";
 "hitec-0.0beta"="c6fqbzcgn7hlaxpwfcz08c11j6a8i32r";
 "hitec.doc-0.0beta"="c635j2194izgji0aqily4ha7slkzghkl";
+"hitreport-1.0.0"="c9d7pgwx7nwd537hwhlqkz3q6rkgadc7";
+"hitreport.doc-1.0.0"="myrg5zm7szyg85kk79wq6czmxvz7ndgw";
+"hitreport.source-1.0.0"="2hlcm4g98zv46ycxc5a4b2iws28zs9az";
 "hletter-4.2"="mq30k7g1v6cwmcfyizfzy3hmbxa74p5g";
 "hletter.doc-4.2"="rz2hrha5xf10050hfnm05r6f4b3mx53z";
-"hobsub-2019"="cx2wdj7vb13012mibaxf3f9q8vxws8n5";
-"hobsub.doc-2019"="2fc3l968q2awmd9974h07c98f9r5hkdk";
+"hobsub-52810"="cx2wdj7vb13012mibaxf3f9q8vxws8n5";
+"hobsub.doc-52810"="2fc3l968q2awmd9974h07c98f9r5hkdk";
 "hpsdiss-1.0"="9hca9lq9r7zs3frqj6lk6hybkpgcdfmb";
 "hpsdiss.doc-1.0"="2mxarcx6cm2v2bsab8gr7ks1mj5danvl";
 "hpsdiss.source-1.0"="k3k828ddx8vv2sr8lw644ny3z5kcl59h";
@@ -4961,6 +5219,8 @@
 "hvindex.doc-0.04"="9r6a8mfj7y9kyc2dbc79vf86aw73n6l0";
 "hvqrurl-0.01a"="sjv5nl58p4f2dmcgrfdlka2z64ddljwd";
 "hvqrurl.doc-0.01a"="1hyqmdrglg2m72285vpszfx2v5mg4zby";
+"hypdestopt-2.7"="mpz4vxvr7ba0p2jlq5ginc5srzcv04mv";
+"hypdestopt.doc-2.7"="5r7xhnkas3fmc22843bpbk640l1rd95h";
 "hypdvips-3.03"="vpmmrcrilqybs4ifvd927jlkn5ip28c2";
 "hypdvips.doc-3.03"="flvlp7a268z3pzwh0jpl185k3yifzap0";
 "hyper-4.2d"="xpwylfxrx74x9aw96ridad40im7xanw1";
@@ -4971,9 +5231,9 @@
 "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";
+"hyperxmp-5.9"="9h79wa3bsc5p7ch7a42idsjdmskyzqgy";
+"hyperxmp.doc-5.9"="7hmrn0hhsi4s5p216hvrgdm3v7imc9j8";
+"hyperxmp.source-5.9"="20fwjc1fhgrfq70ihcqg2sms40jq5046";
 "hyphenat-2.3c"="wr2lhsafb13b0zira7190bx5s68fak45";
 "hyphenat.doc-2.3c"="z1sj3r1ny1lgixr2fcmsglz55b23f5lm";
 "hyphenat.source-2.3c"="x70g8xiz9ss4pw775lz82yncq0x7lxf1";
@@ -5005,8 +5265,8 @@
 "imakeidx-1.3e"="vgspaw7w4kjbm38vzdga08j12aaqf3ad";
 "imakeidx.doc-1.3e"="p39pl4z0xkr2029czqq9nkaxz3dwdypx";
 "imakeidx.source-1.3e"="cn51y6d129cc0kzw3yx3ybziwmxy9mbs";
-"import-6.0"="r52gkgjh1szydkybvydkb8khl71nxbng";
-"import.doc-6.0"="klm57iym1w8n6w205bpljzavmrzijp1w";
+"import-6.2"="y8dqd8lzb9my7qqrcilkd4aqc378y3wj";
+"import.doc-6.2"="8ckdw8i3p8g8svz47czhxzxhcdygxpcf";
 "incgraph-1.12"="n14gyn5g1am9dyfqvxyxrqsfxdkg39xv";
 "incgraph.doc-1.12"="sp235w68gh5k1d4xg2cxv7dadyjwqyiv";
 "indextools-1.5.1"="sb2fdlrh7xlfhd61g9n3h3s9if9n6wm0";
@@ -5014,33 +5274,30 @@
 "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";
 "inputenx-1.12"="8whv0r3zbj4ay09z2xr2dvcam8lm64x1";
 "inputenx.doc-1.12"="3pmxvaqzq3hgl7fr8m5g04lsjnrzkl47";
 "inputenx.source-1.12"="r7k27qlwzr1mnbirkgih5x4rcbyyi4fd";
 "inputtrc-0.3"="vmk80jzg9sllpw28csmhsyjd13amp567";
 "inputtrc.doc-0.3"="dl0qs37bjj4aam7ijfdg64fpl135k7b4";
 "inputtrc.source-0.3"="1nx2jv4m63gc83iy3qp46gxr3v6wyw6h";
-"interactiveworkbook-2019"="4a6mi66i2z1sjzxjddvwajpvxl6i2c6m";
-"interactiveworkbook.doc-2019"="ldph57php6irhdbj9w497xk31n5ggxbz";
+"interactiveworkbook-15878"="4a6mi66i2z1sjzxjddvwajpvxl6i2c6m";
+"interactiveworkbook.doc-15878"="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";
+"intopdf-0.4.0"="dg4nkx5hkv127pm20mb71kaqbn75vpwl";
+"intopdf.doc-0.4.0"="1pwkd0jpncayabw6y2zfcvq9mgb5l0r8";
+"intopdf.source-0.4.0"="3jnk8z67gqy7phipanga31y5fim380qf";
 "inversepath-0.2"="8csfwygw95dd5wrawwj7hs4gmpxhdwd8";
 "inversepath.doc-0.2"="b3z6dkfmk19n96dklslzszn7vfrnlcn4";
 "inversepath.source-0.2"="zpg2i1sqr76xvi6jn5vrgxvs44dlfx9z";
-"invoice-2019"="bjzw59mdvxqc2fyc5mpqg964a041zi2m";
-"invoice.doc-2019"="4g5fd3ry648n0i7nbkrl4c8ln7rdbpp0";
+"invoice-48359"="bjzw59mdvxqc2fyc5mpqg964a041zi2m";
+"invoice.doc-48359"="4g5fd3ry648n0i7nbkrl4c8ln7rdbpp0";
 "invoice-class-1.0"="0hyhlrisqlng2zcs0l62d84r9i4g1hv1";
 "invoice-class.doc-1.0"="psxy04bnhh1y2v63pz89j5p4bl6b1q0c";
-"invoice2-2019"="x6kdjp7i7rgy4qqs8q0f7hv8bdnbs3h7";
-"invoice2.doc-2019"="cjarambfqlfz664z498dpi142ik5l12l";
-"invoice2.source-2019"="km7fcfxzdd9y5lvwyg4m729asqm04pcp";
+"invoice2-46364"="x6kdjp7i7rgy4qqs8q0f7hv8bdnbs3h7";
+"invoice2.doc-46364"="cjarambfqlfz664z498dpi142ik5l12l";
+"invoice2.source-46364"="km7fcfxzdd9y5lvwyg4m729asqm04pcp";
 "iso-2.4"="p6yl8v4jyvzq5fh3qw31kgalhrv1qv22";
 "iso.doc-2.4"="xs5sw6aw59hr3xlk187dhwkg223vycsl";
 "iso.source-2.4"="vrgvl97kvsb6n82w4acm2wfjsqq00cxr";
@@ -5050,16 +5307,16 @@
 "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";
+"isodoc-1.12"="rah5kajws18hhdf5ym1d862f3vsrglv1";
+"isodoc.doc-1.12"="cvfdjwayraqs9v5hhprrqylc4qspyq9b";
+"isodoc.source-1.12"="pycpzpz115nw5a2majf566prrfjxpfkj";
 "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";
+"isorot-15878"="pzs5xd3c9n1m3r4m5g82702s0slq0kl8";
+"isorot.doc-15878"="760dh5j78kcgn2zxp6jhghmzxhyplavx";
+"isorot.source-15878"="35mi9l5bcbqmrixngyvb7g780ns0vjg5";
 "isotope-0.3"="paqbsfz0w4sl82imkw2zqsdwg3nlzd9c";
 "isotope.doc-0.3"="f5mylfd5fga3jy0fsdvw1z5kya7kcg6b";
 "isotope.source-0.3"="sc8npgj5397qvqwvfrz2bq51xj5840l4";
@@ -5068,10 +5325,10 @@
 "issuulinks.source-1.1"="hmn5nsszd3vf27863sbk647fgfh5gxmd";
 "iwhdp-0.50"="j4m15vz6ky21yk2m95kjz1is1z91vxxy";
 "iwhdp.doc-0.50"="wphgycl74db9mxr5gjc2m80rbzkcqk3l";
-"jlabels-2019"="fw5il0bzwm10lj1ly8fjic2hjiqxnr7d";
-"jlabels.doc-2019"="fndgg419y1rp47d5qifv0k304b5iymab";
-"jslectureplanner-1.9"="f94sm4q6an81qf3a91z7mlylkijag3l7";
-"jslectureplanner.doc-1.9"="f3gx2fmbmvzhwcpbl1yp735l3zs69mvg";
+"jlabels-24858"="fw5il0bzwm10lj1ly8fjic2hjiqxnr7d";
+"jlabels.doc-24858"="fndgg419y1rp47d5qifv0k304b5iymab";
+"jslectureplanner-1.12"="1g82c7aw484p3iqy1c9yw8d39g26q04r";
+"jslectureplanner.doc-1.12"="lx9m14da0gm8nlp6p6cx84ib5fxqi040";
 "jumplines-0.2"="acxl8nhlznvcwq20n01b41kamc5xmqdr";
 "jumplines.doc-0.2"="hjfl57a9hwdyf6lxl6ah0k7937r03jil";
 "jvlisting-0.7"="fi23ykvl6kw34qri5nz2k4mvgjqgbbyl";
@@ -5101,33 +5358,33 @@
 "keystroke.doc-1.6"="rlm1i14lgk00yj7hn6mp2njdmjanh1q0";
 "keyval2e-0.0.2"="cbm4pby81d33ldf01h348daihf05hwd6";
 "keyval2e.doc-0.0.2"="7d1mpnzh474k9pc293lh8v94fmy5x6gv";
-"keyvaltable-2.1"="xkfix0sk2nnjq7nr5x4vj1jxyav5hyg1";
-"keyvaltable.doc-2.1"="jjjgxbjwsadsdhd38nz22ky9dzz95yki";
-"keyvaltable.source-2.1"="kp7rzgg6p0mh8f8xwdgw60dppb7xyjcm";
-"kix-2019"="lzdrca007a0r5rsm8f14ljx6v8yyg8xz";
-"kix.doc-2019"="jallvk311vqcjc3wrkxqv03ckbc9k1gi";
-"knowledge-1.21"="1x9mi6w3mb3lzshkwkmxw3nh1y5brz5v";
-"knowledge.doc-1.21"="raaxfqi8bkbj1j3xawl7x9d1j7wrckj5";
-"knowledge.source-1.21"="11dhy195bi5q8lbp40kw0dp0lw90b2k5";
+"keyvaltable-2.2"="j29dmcw44wl8anbpw9inhwa32vnq7kn8";
+"keyvaltable.doc-2.2"="jxcs978k59f5j5v50115xyrl6q17xj0c";
+"keyvaltable.source-2.2"="whlw4ask4ny1navpryjslgiv3cis7nxb";
+"kix-21606"="lzdrca007a0r5rsm8f14ljx6v8yyg8xz";
+"kix.doc-21606"="jallvk311vqcjc3wrkxqv03ckbc9k1gi";
+"knowledge-1.25"="760vv8bwxp39ls3qzj2mq7gjqaahr9ir";
+"knowledge.doc-1.25"="8zzm7scr4hxr5ygp1s34db8qn4s1lrr8";
+"knowledge.source-1.25"="nq93xzwr4d6cg8wkr9h6mavsq6x5zvm3";
 "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-1.1.2"="aqpgslf7gl1hjqh0x88mj8a3zjqdf4k7";
+"komacv.doc-1.1.2"="2y5ldpx86rkvfg36w0hxy0dglymmgfyj";
+"komacv.source-1.1.2"="jrbnvv271a94lfnpj303598piaqqiih9";
 "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"="nymjvw7lg984ks8xfp166554k9ddpjdk";
-"l3build.doc-2019"="w423ibyr9z6sqc60inh1sx01qb5k03qg";
-"l3build.source-2019"="q9y8dmsd4lvr69qwlm6nks2wwivb5xh3";
-"labbook-2019"="x7i28cyfski7ssm9hv28zrlac3inky0c";
-"labbook.doc-2019"="5qs95wc8ms4162nwd7q4lvh7rc62s2h4";
-"labbook.source-2019"="rrybnds4laxyariqq5c2sh1zm9jzvk7f";
+"l3build-55426"="nayrp3fmcq8bz7by996g26g4jjlmc2ny";
+"l3build.doc-55426"="32j497j0gh0ds1hd3f4ld08iq3sa3cyp";
+"l3build.source-55426"="pdpplhwpd7g0c4wn26hz0qys4qqjds6v";
+"labbook-15878"="x7i28cyfski7ssm9hv28zrlac3inky0c";
+"labbook.doc-15878"="5qs95wc8ms4162nwd7q4lvh7rc62s2h4";
+"labbook.source-15878"="rrybnds4laxyariqq5c2sh1zm9jzvk7f";
 "labels-.13"="rxcv9zw5jal0kr4kw0vlswjc87clgh8p";
 "labels.doc-.13"="70hfinn9fsd8r14bk23fmdc0px7n4x5w";
 "labels.source-.13"="7hps59wlxkqqjm9432dg15ml63n44x3g";
@@ -5142,19 +5399,19 @@
 "lastpage-1.2m"="i37ji3jp95j287rx34q4yajih7w1riy4";
 "lastpage.doc-1.2m"="jc40pwdbysv03k1wx113f2q0j8xf54dr";
 "lastpage.source-1.2m"="gika2qk64lahh4l6c6pn76r5l57rspf8";
-"latex-amsmath-dev-2020-02-01_pre-release_1"="9xjsd2xrwrsb9773gcyhbdx6iy848f88";
-"latex-amsmath-dev.doc-2020-02-01_pre-release_1"="hhz4qwg94jm0z4dwz4fdzgwdz9wfzc7w";
-"latex-amsmath-dev.source-2020-02-01_pre-release_1"="1vbdbglb2n7b1xjsy23c4mk083r5vzdg";
-"latex-bin-dev.doc-2019"="82mrm2257yhmsfy0azcraw0b33w6z33h";
-"latex-graphics-dev-2020-10-01_pre-release_0"="isbv5gplj6ygqfm0l34f7am4l53ifv4j";
-"latex-graphics-dev.doc-2020-10-01_pre-release_0"="yz0v1q4w3blh3gf0pp573qq3wqkjb2sq";
-"latex-graphics-dev.source-2020-10-01_pre-release_0"="3j1xwzxszbxbvagi240vp12k2zpaaawz";
-"luahbtex.doc-2019"="008csxdvdaaqygzb7rvrhj6vwhwsx4lh";
-"latex-tds.doc-2019"="m38f5gncr9c56sg2cjs0mfgd57wik7pd";
-"latex-tds.source-2019"="xdigsidx76bs121jl0m42wavzf4y88qj";
-"latex-tools-dev-2020-10-01_pre-release_2"="ajsd6fzsaqrw326bn22v641b0ypy9cq6";
-"latex-tools-dev.doc-2020-10-01_pre-release_2"="r8a8zw5cnr46sjqzvz8qixmpib27a3d1";
-"latex-tools-dev.source-2020-10-01_pre-release_2"="mq8c5yhgxrcx52d65ac4mpxcm6agpjzy";
+"latex-amsmath-dev-2021-05-01_pre-release_0"="p6q4apm28gg02j85lhh3dp8ppwdc3sv3";
+"latex-amsmath-dev.doc-2021-05-01_pre-release_0"="81mlxa3lyggmff4zi0wb7lbhjlswhj07";
+"latex-amsmath-dev.source-2021-05-01_pre-release_0"="03r21wxncnrhm3jswd48x3mqva1caswg";
+"latex-bin-dev.doc-57981"="xwjjh57sqp9f2d6n8yy5gim24w6444b7";
+"latex-firstaid-dev-1.0k"="1p4rx2vzm04axd3hwp953prh23bp4rx6";
+"latex-firstaid-dev.doc-1.0k"="pg2iq8m7jw9yhz5874s5y09sa4i95z42";
+"latex-firstaid-dev.source-1.0k"="76dilvx77wrjndacgdl18y3yvx97rlv5";
+"latex-graphics-dev-2021-05-01_pre-release_0"="qvr5rcvddfgbsx4f2sxw8p0hc4ik7gv2";
+"latex-graphics-dev.doc-2021-05-01_pre-release_0"="m70dchwqxmhnd46jb2czvlgb1z9xqvx9";
+"latex-graphics-dev.source-2021-05-01_pre-release_0"="kym0hbfd9zjnk8xrd2xyy71waysyfs1y";
+"latex-tools-dev-2021-05-01_pre-release_1"="pbbzh0dx4a2v2r26ydcsf1dl752ymczy";
+"latex-tools-dev.doc-2021-05-01_pre-release_1"="g425mh6zp959m0mwl6wzfxbfi49nkzk4";
+"latex-tools-dev.source-2021-05-01_pre-release_1"="7imscv0gcblyq1gillf9pf7shzcb0zqi";
 "latex-uni8-0.03"="kh4gfpkynq6f2aqg9r3wfp4b75wd3zaz";
 "latex-uni8.doc-0.03"="qany361f2byfy4p1jsbwr4za45x5j74a";
 "latexcolors-0.1a"="0izwkzw8h2rqlgnl9dsn2zwm0z2wczch";
@@ -5163,9 +5420,9 @@
 "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";
+"latexgit-54811"="3yisqszxc6ss52ddbkjkq9d118f9l4z4";
+"latexgit.doc-54811"="smzhzypnyjwjrkxlhdghwmdvh8r3bka6";
+"latexgit.source-54811"="lmcfb2lgj8qrijjxa921z06hn9999251";
 "layouts-2.6d"="j5bph4p5drbgidk6k74k72n6ckzin1qq";
 "layouts.doc-2.6d"="4440l4n1kwphf99pkms09mk8ilbyd416";
 "layouts.source-2.6d"="hay5rjr1crxj98zqj1qm841dkxx55azg";
@@ -5183,25 +5440,31 @@
 "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";
+"leaflet-2.1a"="zlw7vvglq35pqcgydpzi70lw5p2k3bik";
+"leaflet.doc-2.1a"="jizzawdg24dcb08c1q0k8pffkrfql9gc";
+"leaflet.source-2.1a"="70m92az0j37y5yk5ci4z6ni4vlr8xxmz";
+"lebhart-58503"="xqk6l18kvvf0ybx3l4ps92z7jlf48rgc";
+"lebhart.doc-58503"="i2c3nkr9jny6f5gl3lnw7p4r9wdaslaz";
 "lectures-1.0.5"="vxrkqjn0y0lqgxp2c2ms8xxwhv8y7dmw";
 "lectures.doc-1.0.5"="93h48qv5h0c9g3v4ga95d3cmcml595qr";
-"leftidx-2019"="d2q1jibnbyjk72phsf6yj7nxj9l37fvh";
-"leftidx.doc-2019"="db75s45b0v3lqkw9dx09m7zs7zhmng7y";
-"leftidx.source-2019"="whmdclngd2dpahpsmz5s3rahk1bvf7sq";
+"lectureslides-0.1"="4nvmm5mqynac4rfrhi966gpzdx9gll82";
+"lectureslides.doc-0.1"="6h0xir1hpq15p6aglrfm9b1abmiwgpjb";
+"leftidx-15878"="d2q1jibnbyjk72phsf6yj7nxj9l37fvh";
+"leftidx.doc-15878"="db75s45b0v3lqkw9dx09m7zs7zhmng7y";
+"leftidx.source-15878"="whmdclngd2dpahpsmz5s3rahk1bvf7sq";
+"leftindex-0.1beta"="ih107j31yrnfc9xkbvmrg36dg5dy88hx";
+"leftindex.doc-0.1beta"="nsjdjdh45lr519mj0bm152ld28d09hda";
 "leipzig-2.3"="id8f54infbs9shqwa8hskvy7ddlhih4m";
 "leipzig.doc-2.3"="qgavhs4pkjnqngv80fap4kla1bn4jlvc";
 "leipzig.source-2.3"="9byfkxnccdl5yab8p64f72b16gyqi2vx";
 "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";
+"lettre-3.002"="f316v4xbin7m5bl72vmmj990ph9avd92";
+"lettre.doc-3.002"="ca6f1xfwz97c2k1291wc4wln9dk4bl1q";
+"lettrine-2.23"="94xvgqrb2xqp2vp9ingzcnzhsj1i1wjw";
+"lettrine.doc-2.23"="4a5z9v2nf7zbkprhnnvcqmn2ymdcd4nx";
+"lettrine.source-2.23"="7m5h453r7h8ksz1kg8mq8fmz386yqqj0";
 "lewis-0.1"="dc7cw320gc531z7m47z3pgby0zl5l6nj";
 "lewis.doc-0.1"="di515hv7q93g3mb76d9i4xdm7v35qabs";
 "lhelp-2.0"="47yixr326p1aaxdfbc8y8f051yk4blfs";
@@ -5218,9 +5481,9 @@
 "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";
+"lipsum-2.3"="m66whrdhffwba6cbi832fp0r7ni2x3ri";
+"lipsum.doc-2.3"="rshqgsq40z24hglx85s97yw0h3sr6057";
+"lipsum.source-2.3"="hqfckvzxqgs6xxz3xklc3fjpn0fn509f";
 "lisp-on-tex-2.0"="8a4xfpnjajjpck9c9i6qp72r08priknp";
 "lisp-on-tex.doc-2.0"="ppwjpd8djndd49xh2faspmpial9qy8b9";
 "listing-1.2"="y8ymrx2bxzhz1l0lkjb2nhk6j97q9v09";
@@ -5231,9 +5494,9 @@
 "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";
+"listliketab-15878"="8d6nwla5nj3m47r2nw7pqhv5kpc9dlmf";
+"listliketab.doc-15878"="7j02b3ng311y78pw6k0q4zjya5gs7zhz";
+"listliketab.source-15878"="vk9ar9i94brrf3csjh9ncp2r5z48glwc";
 "listofsymbols-0.2"="9xg173d0qs233kqf04vm7qdl7ajha3w2";
 "listofsymbols.doc-0.2"="4vhmgkz6wrk2ad9bnzdv3sv3ii1np14p";
 "listofsymbols.source-0.2"="4g49piirj1spdl9hg02n9m1c8b5ql1k5";
@@ -5245,14 +5508,11 @@
 "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";
+"logical-markup-utils-15878"="zbnw20yl4fjaj4vfmqa5zp4146yq2a84";
+"logical-markup-utils.doc-15878"="gwklf7w5nqlxiwy7avg5nwx514l2ryaz";
 "logpap-0.6"="dhd61y6riva220cjnb193v9cjbjz33bi";
 "logpap.doc-0.6"="pps9ipn239h1vw0d8p2jlzbkmcd12czb";
 "logpap.source-0.6"="6y6gv7qgh503f3n8zrpqddyghkdvzngh";
@@ -5266,8 +5526,8 @@
 "longnamefilelist.source-0.2"="3ph503yw35mliqir4k60hv3i8lah3q7v";
 "loops-1.3"="0f0xz58wdvx6cvkynx3xmyxm08x823jh";
 "loops.doc-1.3"="6v1ghg77l3nrab23by4cwqwr014jjwq6";
-"lsc-2019"="m875c3d6lpgh92sym2hav1n0lll6f7nz";
-"lsc.doc-2019"="ajdphikngmbihczhfyarwa94i9r3mg6p";
+"lsc-15878"="m875c3d6lpgh92sym2hav1n0lll6f7nz";
+"lsc.doc-15878"="ajdphikngmbihczhfyarwa94i9r3mg6p";
 "lstaddons-0.1"="n797dx657x03zpkhb1fc2ygd0ppb023g";
 "lstaddons.doc-0.1"="w57l66903jqsb827q96f05as16fr5wf2";
 "lstaddons.source-0.1"="35c9b9n0qi3rjl2gg9dr158v21rh5cq6";
@@ -5283,9 +5543,6 @@
 "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";
@@ -5295,6 +5552,8 @@
 "ltxtools.doc-0.0.1a"="hdmpfrkdycgs0qh3mcxgydcscilacfr0";
 "lua-check-hyphen-0.7a"="9lmqby4bc5pcfbfib7f45742x7jcxjmx";
 "lua-check-hyphen.doc-0.7a"="36n5ni2jzkydxwi4x4akv21109y0qmsy";
+"lua-physical-1.0.3"="47dm3cg17dziyiapaxhk4x75nhafsjcg";
+"lua-physical.doc-1.0.3"="i672n86lsxfy4dnf297j0i7f19m18nx4";
 "luatodonotes-0.5"="wxsysgg9ss4jqddkxbff6apfbd2840i1";
 "luatodonotes.doc-0.5"="w6d1nala52b88rhchzay618gd64nf2jf";
 "luatodonotes.source-0.5"="0i7332g3mmg7cpk3g6i6432xpq2jcivz";
@@ -5306,9 +5565,9 @@
 "magicnum-1.7"="9i8z8xih80aipni912f8ya9xsd52br84";
 "magicnum.doc-1.7"="q6m07x41lq3agmgb16y0q4kz8bx015l2";
 "magicnum.source-1.7"="gy4vhdgvbz1cwgxj8frx2zf825avg3sq";
-"mailing-2019"="4v4vxr5i84yphwj7ff6s3vi0n2wx1jaj";
-"mailing.doc-2019"="fw87jd6gkc88g5a5z17gm7fw3nk6pana";
-"mailing.source-2019"="1zmcm4sg1p3vlgb76yf7gz0ds1958s6b";
+"mailing-15878"="4v4vxr5i84yphwj7ff6s3vi0n2wx1jaj";
+"mailing.doc-15878"="fw87jd6gkc88g5a5z17gm7fw3nk6pana";
+"mailing.source-15878"="1zmcm4sg1p3vlgb76yf7gz0ds1958s6b";
 "mailmerge-1.0"="6zixn5f5rjq4fd65bbhkzwgijfhw262i";
 "mailmerge.doc-1.0"="wpim80lnxbf01an1ds6ksasm2271f54w";
 "mailmerge.source-1.0"="00r71m4cliyz9870yfxd5nl0b7b2px0r";
@@ -5323,38 +5582,39 @@
 "makecell-0.1e"="073c9wfpc83jhcbkmjlkpfbpmy082xyv";
 "makecell.doc-0.1e"="irl3sf564yjdnx538vbqbw6ji0x65m56";
 "makecell.source-0.1e"="qaw6f6hmvj4125v30wr0drnlq0piim3k";
-"makecirc-2019"="m4xbci3109krv6agm0nhvry9kd7wjs43";
-"makecirc.doc-2019"="w7jd6g686b8iqqbmyipml4c1rjry4bax";
+"makecirc-15878"="m4xbci3109krv6agm0nhvry9kd7wjs43";
+"makecirc.doc-15878"="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";
+"makeglos-15878"="6bgdfjbhxvfj2my954iinjp1xcxnyq4s";
+"makeglos.doc-15878"="g4w2560v1pxm38dj5dsb3irgijzh221g";
 "makerobust-2.0"="hx1305cr58cjaasg8l3z9p9d3pc49wv1";
 "makerobust.doc-2.0"="p6bmljy05xlknijnbfbyqz8v0af7m1wv";
 "mandi-2.7.5"="bgfn2zpydmyjpm0n2j78szn4nkkqnksh";
 "mandi.doc-2.7.5"="72r085a0f5nrashgm2xjf5p6ba35c9cd";
 "mandi.source-2.7.5"="baa7wn0s0z61x610jb45s48l31bf49cv";
-"manfnt-2019"="1nl2yh0i4qbxg0js1q4h566vbhh9szlr";
-"manfnt.source-2019"="3vzdqcfcmcmi75xgy4787fqacrsa12ay";
+"manfnt-54684"="1nl2yh0i4qbxg0js1q4h566vbhh9szlr";
+"manfnt.doc-54684"="vb7h8hwf2snbrmzsj1p517ark2by87ks";
+"manfnt.source-54684"="3vzdqcfcmcmi75xgy4787fqacrsa12ay";
 "manuscript-1.7"="h6a06qa8wdg942c9l85xk2drlc07k340";
 "manuscript.doc-1.7"="9lfydjsxnci0b6nfdmayjigm8gfvbiaf";
 "manuscript.source-1.7"="7s5sj7f198rxkggz1j96kk6fgr5s88ci";
-"manyind-2019"="2akaqcybgc3ia3f3cq8p54yhrj7krlfx";
-"manyind.doc-2019"="398kgdbdflmwqi38qcnbf3zgp08vskg3";
+"manyind-49874"="2akaqcybgc3ia3f3cq8p54yhrj7krlfx";
+"manyind.doc-49874"="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";
+"marginfix-1.2"="1cki548vhl8rdcsxpq7593fdmfmmlixh";
+"marginfix.doc-1.2"="2q8fw435qmgh3jqdrlisbgjk5m6yvsda";
+"marginfix.source-1.2"="0n923rs9k1skamk8n0w0573j8l69zm0f";
 "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";
+"markdown-2.9.0"="4v8mxa4746s8v3bv3siaw793vanym9np";
+"markdown.doc-2.9.0"="i98agf42k5fa81sis2mkq5bh4lrixbdv";
+"markdown.source-2.9.0"="hrkj7ajdmii0vvd1y49cd6a3q1rxwmq6";
 "mathalpha-1.13"="wig82v4kfp76z48x8ipcl3i6p97j41j4";
 "mathalpha.doc-1.13"="8zibbm7ga8nk6dcbdvgp3f4xw13r19ml";
 "mathastext-1.3w"="ni9zvlwrjncws3485ix1qpdiywnnqmpr";
@@ -5368,13 +5628,13 @@
 "mathfont-1.6"="nyjwlfahrkds5qlvgvmvr5xljhd0m6zc";
 "mathfont.doc-1.6"="4rx7sqkjhp31hysc8bz9nmiah1a4bsc5";
 "mathfont.source-1.6"="cw0bm3f3ykacs3mcxhdwnl6dj13qyaps";
-"maybemath-2019"="b7n8bgmz0vizghas19svaf1asi7633ck";
-"maybemath.doc-2019"="7scmh5q3xpjd6gdlq07kf59sn5bbflxc";
+"maybemath-15878"="b7n8bgmz0vizghas19svaf1asi7633ck";
+"maybemath.doc-15878"="7scmh5q3xpjd6gdlq07kf59sn5bbflxc";
 "mcaption-3.0"="bxgcc1lkr9p5ghd80mh2ixnc1g4g49f5";
 "mcaption.doc-3.0"="mzbfyspjjjq3mhm2m06jmf9fic78i6bm";
 "mcaption.source-3.0"="ix6v7ldrgqw2kyb8mxppiw47p1fsxj29";
-"mceinleger-2019"="n5kag86y4a1q3m4d2kgc1k4xbbchv1hk";
-"mceinleger.doc-2019"="g3ldzbnb7jl4ii7pvc518va6x8ahlrh1";
+"mceinleger-15878"="n5kag86y4a1q3m4d2kgc1k4xbbchv1hk";
+"mceinleger.doc-15878"="g3ldzbnb7jl4ii7pvc518va6x8ahlrh1";
 "mcexam-0.4"="3r3kn0mpzsx4p8scl2zf57sj54q6q6n8";
 "mcexam.doc-0.4"="c2hpirn5sl7m6cdf7mw66l7nrpcmz1i9";
 "mcite-1.6"="q16a807pfbxbcqyw1s5f3vrj0yym2z86";
@@ -5385,11 +5645,13 @@
 "mdframed-1.9b"="kc60c77k0qwqhdmpbk3r777k4q857jx1";
 "mdframed.doc-1.9b"="pr5d7iqc4akn0arxjl7ynqsl6dlh64sy";
 "mdframed.source-1.9b"="xnqih0l0zng5bmrjfrprr43k6l645kvi";
-"media9-1.05"="mv201h1h0cxm5lq3xlms4i191zqkllbh";
-"media9.doc-1.05"="jx37gfxihxmc7lgq9acsi7fjz7dlza1c";
-"media9.source-1.05"="5gsdjfrriq5c76pwmzwappghcbx0asnv";
-"medstarbeamer-2019"="vplzcqcrgag8dvin3yj0prlcm9gsb2yh";
-"medstarbeamer.doc-2019"="7i4skhq9pj4k3aswbzbpjqqgdj0s69gd";
+"media4svg-0.5"="2i5hs44v6zrx3l5jf6n8jvqhgyk25w2v";
+"media4svg.doc-0.5"="bss7aw8krydbannjv75phhn7x9jv2wbi";
+"media9-1.15"="z3x9hsfdyshasg0v2nk30kb7958ykmd9";
+"media9.doc-1.15"="qxj7bsjk832irbhz9zs6x370gxny10i5";
+"media9.source-1.15"="7xd138dvnp9k9wzd13mjgdzivypfhcri";
+"medstarbeamer-38828"="vplzcqcrgag8dvin3yj0prlcm9gsb2yh";
+"medstarbeamer.doc-38828"="7i4skhq9pj4k3aswbzbpjqqgdj0s69gd";
 "meetingmins-1.6"="d5x8znpkqcghi9lv4gby2l97smw6kddb";
 "meetingmins.doc-1.6"="mkxz4zi4a7rgq8sgwaqsc35n888gzs4g";
 "meetingmins.source-1.6"="5xridwnlmxkws7h293a1pg373mcb3gwv";
@@ -5398,20 +5660,25 @@
 "memory-1.2"="xbyqh88hgszrma77r32dzly4k928vwpd";
 "memory.doc-1.2"="97n5y37w8k1b1dghkjmdny2lgc2b0z4b";
 "memory.source-1.2"="xj785y1h8zncgikinri52ri4sp7av9cr";
-"mensa-tex-2019"="k0v2gr8sk5lxj658b62h6rnr3iwik4kk";
-"mensa-tex.doc-2019"="cbym06lj2jif90dpqddc2sl36glwlm6k";
+"mensa-tex-45997"="k0v2gr8sk5lxj658b62h6rnr3iwik4kk";
+"mensa-tex.doc-45997"="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";
+"menucard-0.1"="7k5mxiwycgzqq8ais9d99ss9dhir44x6";
+"menucard.doc-0.1"="lv3amrvqjpl36rc3wmrf6yg8dw9w7lw8";
+"menucard.source-0.1"="p3sy5yj4gljpasmsyjbi8ndlnjvm69jl";
+"menukeys-1.6.1"="wxn5c57h8z5aj5q2d6v5kv9fbk902g1w";
+"menukeys.doc-1.6.1"="8ijrwc0zfhv0cwvy3vk6cqlbd0yxwcmg";
+"menukeys.source-1.6.1"="1gm1gpzj7lply9qfyf00aralircg6gw0";
 "metalogox-1.00"="4xl37x2ng2chj7ds59rjkapvmk3fza5q";
 "metalogox.doc-1.00"="wk7qd75laf3wm5wqil70vsrcg1ch6q4n";
 "metalogox.source-1.00"="8yal3yny31s95vd72p10mybmkx7n11xy";
-"metastr-1.0"="zgxnrz7iw3zpmnzq0p046smwh2vn956q";
-"metastr.doc-1.0"="az3sfd2bg56l6ga0wzdbmzpb1c82b9ig";
-"metastr.source-1.0"="mjvy5i08fl91g6vg8i2wkhjwxi783qng";
+"metanorma-0.5.0"="lxfxrm0gny75rhwafmgim8g9gh3ihij5";
+"metanorma.doc-0.5.0"="cl9n1iq27ka2k556arggkl5dy6i8jrz9";
+"metastr-1.1.2"="mhbnzxgyzic8b12s99h1gfa8sivdc14m";
+"metastr.doc-1.1.2"="j3ilclww10wqrrm978q3yq5z3r5s9b4m";
+"metastr.source-1.1.2"="id0ha10mcax8rzrq1jrsqyw53g37wzam";
 "method-2.0b"="6lpy1619i1m75cvsi9c2vzjxbcs9ia5a";
 "method.doc-2.0b"="c54snw0hl1agj2fs4r3jqnk9gblxpvhp";
 "method.source-2.0b"="y3rnwdcn8d1zs9s74nsza1zscmfbskq5";
@@ -5429,6 +5696,9 @@
 "mi-solns.source-0.6"="3jlnn2himx44zdaw0pb0zks3gxmqfhqn";
 "midpage-1.1a"="k6zlxyg3y73s0npss5d14nizzzf6bl27";
 "midpage.doc-1.1a"="7rbxbq2sy6h6lk25kl4sn2hfr87kjhcx";
+"mindflow-58475"="86c49mnw9a8g77ha3qdzlq9pq7nxb75n";
+"mindflow.doc-58475"="clyqrw7pbvv5bsm7flc5gib4lglpij53";
+"mindflow.source-58475"="paxcshqj39mdp2lmikn3skq7xfgapx7n";
 "minibox-0.2a"="4fhpgzi7wc6jh7n8rf2n9s0cpvljwwc9";
 "minibox.doc-0.2a"="sviimirqdwfgk14my3w0zr2qycccckf4";
 "minibox.source-0.2a"="q704gpig53qmnbsvy9kcwl6nm161nak7";
@@ -5451,8 +5721,8 @@
 "minutes-1.8f"="c864pfgi1a853n93jddnndgsp325sr1i";
 "minutes.doc-1.8f"="z3z8rxzrkwz7k6756b654v6wclx4f6rb";
 "minutes.source-1.8f"="w4skq6nprvgxhvqrf4xa2afccr1hsz6g";
-"mla-paper-2019"="7rh7dh7mzybc5wzzbibh1lc10kyc99p8";
-"mla-paper.doc-2019"="3csgrsb6bh3sbqdzfx6y84i7ph8lwnhc";
+"mla-paper-54080"="7rh7dh7mzybc5wzzbibh1lc10kyc99p8";
+"mla-paper.doc-54080"="3csgrsb6bh3sbqdzfx6y84i7ph8lwnhc";
 "mleftright-1.2"="djj8n1rrxi3iyj5zxm4y5lwnbrzq3vb9";
 "mleftright.doc-1.2"="krkpm7kc85q5hgb0vzvvx8gxznpr79d5";
 "mleftright.source-1.2"="mfllc0rhh6x67pg9qxr5wpbhazzg75l9";
@@ -5464,27 +5734,27 @@
 "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";
+"moderncv-2.1.0"="cmjc8xaz3w2n3nqh3nwk0pkrgdqyard5";
+"moderncv.doc-2.1.0"="x2i8cz8q6hfyzcvnvybsc6m0vwxnsmfb";
 "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";
+"moderntimeline-0.11"="r8siv13syzymkgi776xkpd15cjck7d9z";
+"moderntimeline.doc-0.11"="3w6bq6jlai07bv7g2l8iaal13h00n82p";
+"moderntimeline.source-0.11"="hbfh2pm3hmjm701k25hfbk83zh2dzjzc";
 "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";
+"modular-44142"="gp555cnfp2izjp81bg1l1aij466vcfxr";
+"modular.doc-44142"="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";
+"moodle-0.9"="fx6h5w1yyhb867rsbaj7gc1ziy6qmb8p";
+"moodle.doc-0.9"="kcb3zacaswgyqqyqywybwv08qy90cm9g";
+"moodle.source-0.9"="182zigli9migk0dzl1v011aj2vj0qfbc";
 "moreenum-1.03"="q6a3sxik7whl9zif8j5bs1bgxcp611rr";
 "moreenum.doc-1.03"="f0vzqhha6bbsvwnsgq3ng5v4qg3vkbgr";
 "morefloats-1.0h"="dzx390854qkxvhcas8krahqfg2pkg93y";
@@ -5499,11 +5769,11 @@
 "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";
+"morewrites-49531"="phc3742cpyisr8i8b9r30w7x28kaydx5";
+"morewrites.doc-49531"="x9cccfv21238zfsfikbnap6a2fj2aymg";
+"morewrites.source-49531"="gg8427vc6r2im1y5n541imkgq909ds99";
+"movie15-26473"="c2vppl6yv82s4n3kqjfp75qby2rwfxkv";
+"movie15.doc-26473"="1kn8iwx5x1gc978p0gjj2rwy4ablkdvg";
 "mparhack-1.4"="5sq75r9p6laimfxiz9kl1j5cgplkzin7";
 "mparhack.doc-1.4"="6i835nghib094n03i095dc0p7zq30znm";
 "mparhack.source-1.4"="07xwzd4pvppkb7ywwzdrip3yk41d5wl0";
@@ -5515,25 +5785,25 @@
 "msg-0.51"="d74m4mhh3k9hmc4py38izy3n075f019r";
 "msg.doc-0.51"="3v872isrjh68l3j4i0bm86l2vk60vi7f";
 "msg.source-0.51"="gcmdjhil29pwakk8jdrf6zaxcp3w5ykw";
-"mslapa-2019"="xmci0mddxivrp23hxp50wnlyvl9kir04";
-"mslapa.doc-2019"="dpvra8ngic2ydqxs8y59zd0jffy2q4ai";
+"mslapa-54080"="xmci0mddxivrp23hxp50wnlyvl9kir04";
+"mslapa.doc-54080"="dpvra8ngic2ydqxs8y59zd0jffy2q4ai";
 "mtgreek-1.1+"="afbh9ydcsnf1k0c714ypmqrf0qjcas6a";
 "mtgreek.doc-1.1+"="pq9303jyrj7nq8rwgi5d7njbc2x3jn58";
 "mtgreek.source-1.1+"="6whrwjvzz5jrhirhgr7kymc3jczn2zmf";
-"multenum-2019"="f1d7s8hafvsk4dic8ss1cqdjqvn8dlih";
-"multenum.doc-2019"="w65nsjanh13fxbkwhiinwzyhq0ra2m54";
+"multenum-21775"="f1d7s8hafvsk4dic8ss1cqdjqvn8dlih";
+"multenum.doc-21775"="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";
+"multicap-15878"="9ja1cljsr31lw6rjvph8gi154z8bpl8j";
+"multicap.doc-15878"="z17yw0id2vdhckvirlrq3npkdpxk5hrf";
+"multicap.source-15878"="yv4rw5hjfj5fj0xyh2p3glmz0887x105";
+"multicolrule-1.3a"="i3cfrfyyj0xjvk27dmrakzlh5baz9jyg";
+"multicolrule.doc-1.3a"="f9s3709g2mi3il3g1ddg5px0d41aifbq";
+"multicolrule.source-1.3a"="sks1vf0hd08gni9s5fl3an5zln2gpakz";
 "multidef-1.10"="5wsklk9lvznmwisl7jyhiai2zz8iizhb";
 "multidef.doc-1.10"="sq7a72nhiyd5384dx9y6k1c72gl8ia2n";
 "multidef.source-1.10"="hx6fbjirp5gmpn9bglp0hcmmhdjn1rsb";
@@ -5546,9 +5816,9 @@
 "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";
+"multirow-2.8"="qzw0gw70s0gay2mid6g01vlx92iixcrc";
+"multirow.doc-2.8"="wbkp1z90fsh3fdpjp1qldhn5cbkysz26";
+"multirow.source-2.8"="gsafi052rxsv2bbcz3325wynbwrzyvl6";
 "mversion-1.0.1"="7vpmmb88cjk92m2a2hz10cijkxf44bmy";
 "mversion.doc-1.0.1"="a2fx7phvl0i1nyhb5h0w6ld1n9kvcgcv";
 "mversion.source-1.0.1"="zhbd3j6kxsdyznx9haqqh4vk7b8nrl09";
@@ -5558,24 +5828,26 @@
 "mycv-1.5.6"="am1khnlv1w5w9732q2azpsjqjp7xd96b";
 "mycv.doc-1.5.6"="gd3fqxrg0y28fw4093g50a9fl5qpb0l8";
 "mycv.source-1.5.6"="9jvb2232smja8fb39hlxnh813vlvs47v";
+"mylatex-56751"="yv3rfndf7x4cd2a9gx5fsg82v3gm0qy5";
+"mylatex.doc-56751"="sar6czcxp6cksy74rjnjxdycwwxlhgnf";
 "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.4"="7vf14i5aid38msdp6kxfmpczkbza48qa";
-"nameauth.doc-3.4"="b5hybqfylxwszjll75c651a8k5235kpx";
-"nameauth.source-3.4"="bb0bbr0635mpaiarr54dwmaaavfbk63h";
-"namespc-2019"="6f7x6ldx008l8w5ziahgwl42hb5bws4k";
-"namespc.doc-2019"="6aqpn007i8s488j4qi8xhbx9zsyvafbs";
-"namespc.source-2019"="s5ws2rny22j23bqy5cn2mz23qn91ssfj";
+"nameauth-3.6"="ks6jn6v63n41bvjn85qxvhzwz071r6c8";
+"nameauth.doc-3.6"="chla1jhfww0ja8mr88mwiyqzpn0c57ch";
+"nameauth.source-3.6"="qnhib1mpd6d0dvfafa2lbz6niylf3zn8";
+"namespc-15878"="6f7x6ldx008l8w5ziahgwl42hb5bws4k";
+"namespc.doc-15878"="6aqpn007i8s488j4qi8xhbx9zsyvafbs";
+"namespc.source-15878"="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";
+"nestquot-27323"="f9rwiwxi2xksi75wfwmsq9gmrj78scg4";
 "newcommand.doc-2.0"="cdy7kzxpazx56gc6a0s62nx1bq3x1kz3";
 "newenviron-1.0"="s27wb3f7q3qk5lv6ficrjs6kkxqal7hi";
 "newenviron.doc-1.0"="j20cd7xar8jxbx17dv9sqpsrck6cydd9";
@@ -5594,12 +5866,12 @@
 "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";
+"newverbs-1.6"="86kd0swkcac72304rrpv0addnd84gzxn";
+"newverbs.doc-1.6"="pqd2v0q56lisk99ninwx5r1d848ql0x7";
+"newverbs.source-1.6"="b4ysw67g6mp6wwc1r685qi23p9dh0c03";
 "nextpage-1.1a"="b7b41bpr8zk2z6m5il51q9vxb3c8h67j";
-"nfssext-cfr-2019"="isp9rw94ck4a9ckl4b5hd8ma3cmlkdwd";
-"nfssext-cfr.doc-2019"="si6j8b4314s0gbnjxwymqbzcajclqn2w";
+"nfssext-cfr-43640"="isp9rw94ck4a9ckl4b5hd8ma3cmlkdwd";
+"nfssext-cfr.doc-43640"="si6j8b4314s0gbnjxwymqbzcajclqn2w";
 "nicefilelist-0.7a"="crqgn906x51nq1d3z0s15f9kl29lbg3b";
 "nicefilelist.doc-0.7a"="a77wbb5ajkj4ab3dy1zzs3hchac77cwh";
 "nicefilelist.source-0.7a"="ng7drfgz7w69za7hmfzm4cv0m2awdx7l";
@@ -5609,9 +5881,9 @@
 "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";
+"nidanfloat-48295"="f9691yflmmv0ziyfj4a65b186gj0ppn3";
+"nidanfloat.doc-48295"="h468vsrcmc06awhvkg8f3bgmc7dwsgy1";
+"nidanfloat.source-48295"="x92x0jk3ab50yd3gyjgqyb21iq0v7g6h";
 "nlctdoc-1.07"="z0azj8lyhdf45sa4vy172qlzck58vvic";
 "nlctdoc.doc-1.07"="3axalhgmiz8f9rikjwbkhckw0hshnpyk";
 "noconflict-1.0"="df9gs1xx7gymaadn2ji4dzir36z6r897";
@@ -5623,9 +5895,9 @@
 "noitcrul.source-0.2"="b8s8g15qwdsxm7ywvgj9g6307ws3hg0d";
 "nolbreaks-1.2"="1603r89wi8sninjv541na8k2islfk4sc";
 "nolbreaks.doc-1.2"="g0nm3i09kzxqqcrycrz2cak05d8qlvqs";
-"nomencl-5.3"="n794jld9gxx4y47csqh974qbkg92g6db";
-"nomencl.doc-5.3"="lbagmc6yigwvnprjivdkbz4h3jq33li7";
-"nomencl.source-5.3"="0fg5mm5yzmyaba8fffi0fff4drzyinlb";
+"nomencl-5.5"="zxky0yrdmhjg6qs5l5l6wi36h3mszdpc";
+"nomencl.doc-5.5"="3rmvqb2q57mzdiydj7ggqnm62a2rhgnw";
+"nomencl.source-5.5"="dkyq9n1wb5cf9k331mfjd3n6hbz7l3rg";
 "nomentbl-0.4"="k74vk3a9kl3sbrkmpyav1snh0cd16np9";
 "nomentbl.doc-0.4"="k2ggwchfqa253i96whp2lh4s3p8vbysk";
 "nomentbl.source-0.4"="al9s24x1ivpw91bbnn9sqrjp3rb5h0ni";
@@ -5635,8 +5907,8 @@
 "nonumonpart-1"="a121f2i1n005xp51qn642vx30ij74zgs";
 "nonumonpart.doc-1"="wcbvd9c2cv5ydbma4xxb6g2b2bihi0lh";
 "nonumonpart.source-1"="j2jy48jw8hgcs830h187s9rg85kd3rfa";
-"nopageno-2019"="59l05x89jv7q4mm7k73i06rmv467iimz";
-"nopageno.doc-2019"="bn5vq6kzp69p03pfjx9s34ckf4h3q6iq";
+"nopageno-18128"="59l05x89jv7q4mm7k73i06rmv467iimz";
+"nopageno.doc-18128"="bn5vq6kzp69p03pfjx9s34ckf4h3q6iq";
 "normalcolor-r11"="jfpqlz85fphm063mb51q9q2s61fcbnmh";
 "normalcolor.doc-r11"="vz9557sxw9c6l8m66aaagcv39x1vkfzz";
 "normalcolor.source-r11"="vs4y1p0zarr6nppqadcdcp03lc6nd2zd";
@@ -5648,8 +5920,8 @@
 "notespages.source-0.8.1"="sskq21wj4vhqyq8xzhrbsh7p8c701r7x";
 "notestex-1.0"="innwzn87vplj094lxw9w48ck6s5hmb5v";
 "notestex.doc-1.0"="p4lyxlar4125y9x3pb6sd5ysdn7w3vqr";
-"notoccite-2019"="ifpkassfd9j5926gsnq00954clc52sbv";
-"notoccite.doc-2019"="5ggqh1mvc03xgyipc6c49ssmlaywh83f";
+"notoccite-18129"="ifpkassfd9j5926gsnq00954clc52sbv";
+"notoccite.doc-18129"="5ggqh1mvc03xgyipc6c49ssmlaywh83f";
 "nowidow-1.0"="hf3wjpkn1j2yksdl8mryssv6cxqjn3si";
 "nowidow.doc-1.0"="w1an9iayppa59h2iprjr515w8g72qkg5";
 "nowidow.source-1.0"="b6i3ypchipa228x0s6i66vrvf7zc3hgc";
@@ -5660,22 +5932,22 @@
 "ntheorem.source-1.33"="fc0wyfgjnckzqrd7lf3a4n6yvbhwaal8";
 "numberedblock-1.10"="x1wlbk0d8xbl0b3mx0bxgymc9jd3vv5y";
 "numberedblock.doc-1.10"="866z5if0xryr7mmi70any7p9l93f0d38";
-"numname-2019"="7gl7dp9c1wj7phv8ys39kxnarifbqfd2";
-"numname.doc-2019"="pfp7zzapdvlfbs9jd5vc2x977nxs3yfw";
+"numname-18130"="7gl7dp9c1wj7phv8ys39kxnarifbqfd2";
+"numname.doc-18130"="pfp7zzapdvlfbs9jd5vc2x977nxs3yfw";
 "numprint-1.39"="7fd6ja6vw3c7yg824y30xrqrmrk3qkwx";
 "numprint.doc-1.39"="bbfg2cyh8cykgl3zk9c53wk3q3vbb8pn";
 "numprint.source-1.39"="cr7xjw77r8h4bcjihxc68iraxd760gh2";
-"numspell-1.2"="xv0c8dxm8yncknrmarqy0nhjcqdaq8fv";
-"numspell.doc-1.2"="b6sfqk9wnbrg0l3p0hwff0nkskw13rcl";
+"numspell-1.4"="y1gvvz28ix791pp51bc2z4403bn9c1c0";
+"numspell.doc-1.4"="85l7d5arf6ss67lhzjj72fldlyz6isc4";
 "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.48"="7634zxbbk43ci8in9jjm1705har1kxbq";
-"ocgx2.doc-0.48"="qcq15rj8ma0ixmk22f1iv9mhbn7cravs";
-"ocr-latex-2019"="7mi6izsnwk6dksgmscyn45w72n1bgk2h";
-"ocr-latex.doc-2019"="9cz06542a64k4ns92qgkx1hzm5sd275w";
+"ocgx2-0.50"="882gc1lnwwqxawl84zl6db6v04qiwvcm";
+"ocgx2.doc-0.50"="9349xdahrqaz2riwqmfcz1s6zaf33bp2";
+"ocr-latex-15878"="7mi6izsnwk6dksgmscyn45w72n1bgk2h";
+"ocr-latex.doc-15878"="9cz06542a64k4ns92qgkx1hzm5sd275w";
 "octavo-1.2"="fpv1fcrym9gplxjs0zsrrv4iziizqzxy";
 "octavo.doc-1.2"="wcd4cj4ihgmm1d0i36l66bf8dpw5cm58";
 "octavo.source-1.2"="30dsp7266fzc2l2kn98pqwwv6sdb75hr";
@@ -5694,8 +5966,13 @@
 "optional.doc-2.2b"="jg81vzayz3a2pvlxhvyrx8j3w1sw65xg";
 "options-1.0"="5xy1cf8yq8awm7bspjj23nywhbs7ww67";
 "options.doc-1.0"="gy13y93wl0im19p5jc011fjnr49afgsp";
-"outline-2019"="m192v07lmcfzq3zbv87cbckz8jwanbha";
-"outline.doc-2019"="wcm9psb6ap1a5xy16fp91bwpxkhqxmh1";
+"orcidlink-1.0.3"="6dbw14c5hbwg7i81cwhcizhxqvj1y60c";
+"orcidlink.doc-1.0.3"="4bfjh8idb66hdq7k6sar6k59vl7nhdsm";
+"orcidlink.source-1.0.3"="7l1vki8k1l05zi81aavr0jk2f37xcbn7";
+"orientation-1.0"="lh00icyx7hxclgk9i252rh3xzcni9yrm";
+"orientation.doc-1.0"="zy79k6hyw6b6iqmf475vzx6m6ymghvwz";
+"outline-18360"="m192v07lmcfzq3zbv87cbckz8jwanbha";
+"outline.doc-18360"="wcm9psb6ap1a5xy16fp91bwpxkhqxmh1";
 "outliner-0.94"="24bsa0d5zxz2i50i4bz0b3zsc5v7hp8d";
 "outliner.doc-0.94"="qgvvmjxq75fq907z1ya4vkir6iq7sbmq";
 "outlines-1.1"="0yh26641p29qj71w6zsx1z6hsr663q1k";
@@ -5703,8 +5980,8 @@
 "outlining-0.1"="c5xzw92b42pfbxmzmwrbiy4r879d3ja2";
 "outlining.doc-0.1"="rgikl4vfy01hgv90nip0iwx808iazvfx";
 "outlining.source-0.1"="miidkl85jpy5y6a7n71vilxaissip8c0";
-"overlays-2.10"="gywmsz5lbrp1jz4lp21gdb1s01ggsdxf";
-"overlays.doc-2.10"="vyz8aa3j0hgh7yjw78y8ng5xnsy4qczz";
+"overlays-2.12"="mq6pdz8mkg2k68z73x5y37qd3741s2bz";
+"overlays.doc-2.12"="kmmi2q3v1c8xjxcp425ca7ns2pg71lfy";
 "overpic-1.3"="jh264pgfn17jgbmy06g3wb6vhqgifqik";
 "overpic.doc-1.3"="0158l132my7sn1nmgwxnzfkp2gxpnzm7";
 "overpic.source-1.3"="v5d34dvqfy5s3m77q444rc5naav55rig";
@@ -5728,9 +6005,9 @@
 "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";
+"papercdcase-15878"="dncf3im483zf3ix2ycp8d07bdpdqnfqd";
+"papercdcase.doc-15878"="cv4gkmg3rljv2j0pb0xjw6xzbqdii5cj";
+"papercdcase.source-15878"="qlbxx0dxb9vj7939sr3pl8cam98bc619";
 "papermas-1.0h"="xrl9ldvps0ffrygpgj501bvi4yb6cz2w";
 "papermas.doc-1.0h"="1p87yvwnn29mi2n2q4z1jsxfnq8gd73p";
 "papermas.source-1.0h"="6i3yx6ygswgf7yp1c0grv7gr6qc77r1l";
@@ -5740,25 +6017,25 @@
 "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";
+"parades-40042"="bkr92ffb7s3zzl845jjkj1777517dwk1";
+"parades.doc-40042"="sfmlhp1idjhvy6cldh2v2k5bl5lp7s58";
+"paresse-5.0.1"="jigr743az2xjrw1qsb15w2hcvi78xjl1";
+"paresse.doc-5.0.1"="r3k4iifg67gm7sxac4l4qzlx94sj5ai1";
+"paresse.source-5.0.1"="9kcjbh6pzglp4h72dxih81xkn0ah7102";
 "parnotes-3b"="42sal99phkqbw05k2d9x6by27iy7sc7j";
 "parnotes.doc-3b"="3hlfpf75qjahy1qzc8l3dl1n8pj323pm";
-"parsa-1.1"="xidmymf9dpzagbip87vik9svm11zbahq";
-"parsa.doc-1.1"="gf1lxfyl2p6m9jx30dyarhx1cqgs4jn9";
+"parsa-1.3"="iawcalgm3zpppbclhzn63i33bmnxk47c";
+"parsa.doc-1.3"="322amnin34r5p1r0rmg1phmgqbx4yj6h";
 "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-cours-1.9"="1kqwk3hwllkrlajh6l3k0y1xxpql7jp2";
+"pas-cours.doc-1.9"="6anwqql5pn34njc0ysqr408d34vvxalj";
 "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";
+"patch.source-42428"="6k92ah4ka1ljyxwgg9n91m5aj6nwvnq8";
 "patchcmd-1.05"="asi7jsa5gwd1i2k0arh2p24wprnqfb2h";
 "patchcmd.doc-1.05"="8nxwjfkxc3nbj39wfvqm8bkxm4qs1y66";
 "patchcmd.source-1.05"="bpb3vc5kdmhiwh0s6sjvxjshvmgr7hrs";
@@ -5771,6 +6048,9 @@
 "pax-0.1l"="iqmsy6p191p8bn2bs642zclq3q42n89p";
 "pax.doc-0.1l"="cjppdms9xlc6hsj0mk324ndpjqg2px93";
 "pax.source-0.1l"="harabcx553nchhf8hh9m3wqwic4l80fc";
+"pbalance-1.0.1"="fa64xh9irys681nlh0gn2fn4qgq2jwbw";
+"pbalance.doc-1.0.1"="75v4ijv45pzqrzwr1cm9bhgbmcw21824";
+"pbalance.source-1.0.1"="mb458ddplvcqcbsz916nxy5crd2i0ach";
 "pbox-1.2"="9y4p69w5nskv8j5i8a2pxmhswxz8nc50";
 "pbox.doc-1.2"="hjv8mqhlfa9ggqypr7nwzzf03rgm7cry";
 "pbox.source-1.2"="pk6hx6w8szi4dbb7irkr0wy3xwjjdpxg";
@@ -5789,14 +6069,13 @@
 "pdfcprot.source-1.7a"="95cr49yywd59mcyj7qvqkfc9bhj63hxh";
 "pdfmarginpar-0.92"="pra0y1df005b6br3n93zpi7wrvgk2h6d";
 "pdfmarginpar.doc-0.92"="0kc0dgfq3mmnwy3xs79gjmxkkmmfl5l4";
-"pdfoverlay-1.1"="y3y3cilmgla5nd49s5vhy8jsyfy79dk0";
-"pdfoverlay.doc-1.1"="0lrr1prxgpwa5zf8xp9ypa6ipw8mjkxk";
-"pdfoverlay.source-1.1"="7zk1x6k04drra2hwdawf9f8948aimr4v";
+"pdfoverlay-1.2a"="zajhpdd1vdmf72f7ch5122n98jn8f312";
+"pdfoverlay.doc-1.2a"="5x67ws2bacl9vl3lnvcamjibwwigkimv";
+"pdfoverlay.source-1.2a"="q4pag6s005bs4b5hykf4by4j46skc516";
 "pdfpagediff-1.4"="3nj0fki5pqm0i50fzacdvnnzhhf2b5a5";
 "pdfpagediff.doc-1.4"="8h093sqzw62ivh2csz6fhkbbkdg1na2h";
-"pdfpc-0.2"="v5jrbnn4lagxwj4lgw9g3znnp0a1q8rp";
-"pdfpc.doc-0.2"="2lc4z235rgzjxha7dqhnmn3bhs9x3947";
-"pdfpc.source-0.2"="083ybyfdwjkfzj85jials202mdhhv9n2";
+"pdfpc-0.6.0"="a1x8k67pkznhg0v9x9nsvvmyjxzfmsrk";
+"pdfpc.doc-0.6.0"="affrj9iz28cpkk6gsjiczs02qwwg58ln";
 "pdfpc-movie-1.0"="la1blfvhk9kwfy2q0sp6x1ybw5c2i7jh";
 "pdfpc-movie.doc-1.0"="5qc0gdmlgspl5696zvng96nbhgr0j0m4";
 "pdfpc-movie.source-1.0"="2d4v3bwnsws65w57arhbs2j5gvm3w5f4";
@@ -5807,12 +6086,12 @@
 "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";
+"pdfslide-15878"="78wynlp5vyc14zn93gwy73yyykk0yh0i";
+"pdfslide.doc-15878"="j8krgspjlvn4ja9dww3mc0g3zg7qhlmb";
+"pdfsync-20373"="xqg7my569gq36snly1kpii240byrpx7s";
+"pdfsync.doc-20373"="y6am07gh7iwgmgkwq7sg9z704waxgqai";
+"pdfwin-54074"="yfdlssqwsa253r0qzvy5xbgbgwpmmxpm";
+"pdfwin.doc-54074"="7k1kqy2rpr93q4nvdvwcrspqjbzz1h4i";
 "pdfx-1.6.3"="1inx9kkwqj831ikgplqvffk8f0a8s6gc";
 "pdfx.doc-1.6.3"="c1grn1ahiddzp95biymw47x04fv3y23k";
 "pdfx.source-1.6.3"="6jj6972hpnhn46bzfzp1r201pmfnx87i";
@@ -5821,9 +6100,9 @@
 "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";
+"permute-15878"="anxvxdpnmr31a50r7anwj21vci3dxvg0";
+"permute.doc-15878"="rz1569972rz72laqrxnkphxr3bdx1pxl";
+"permute.source-15878"="va01wn3pv0j0cxqmgh8cjricj4m2vjxv";
 "petiteannonce-1.0001"="xv2yjs519vz0inbcy7m2a201ysjl3gwj";
 "petiteannonce.doc-1.0001"="9xvfy2ivdmlamj4fr1q5i1mfh6diys8s";
 "phffullpagefigure-1.0"="hp51s42ycsary7n2qngls1bm6j6mi5ab";
@@ -5851,14 +6130,14 @@
 "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";
-"picture-1.5"="shfq20nv42wnpxdlmswka854qrgz5adp";
-"picture.doc-1.5"="mlhqxdlb1lq569jbkgkdmscahhbwrxmv";
-"picture.source-1.5"="s40j42wx4qnb6znx96ss2fsjg00gw880";
-"piff-2019"="xz2idyqgwg5y7r9ac0bykvfx533rd29p";
-"piff.doc-2019"="xwlsyrk4mczbchklsx5x8ip08zc5jk6a";
+"photo-18739"="d2rv82rm7jyd2fvgzs545kz32nb7fn6l";
+"photo.doc-18739"="1gn03gddjcbfmidsn9snhbr9nsmlbsmq";
+"photo.source-18739"="70n1vi9qla3kl592hgay45af9m078l58";
+"picture-1.6"="z9r12wc2iwp7basv33kdpkg114cwhxww";
+"picture.doc-1.6"="iy3lwfdgbqkhqfgx49h5978qbgwkfhv5";
+"picture.source-1.6"="0vd0z8k0mwa8zibwf6llarqj4j3f379x";
+"piff-21894"="xz2idyqgwg5y7r9ac0bykvfx533rd29p";
+"piff.doc-21894"="xwlsyrk4mczbchklsx5x8ip08zc5jk6a";
 "pkgloader-0.7.0"="15p6m1152qc334ljqhnzdagic2ylvpgs";
 "pkgloader.doc-0.7.0"="k6qdk7x5pr11qspbx9ggabp18n88hlmx";
 "plantslabels-1.0"="yi1s2470aj75chj1f5mi9961w9if1mpd";
@@ -5877,21 +6156,24 @@
 "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";
+"polytable-0.8.6"="ccn1r0s2nwbpxp5mmbasvnmbivcswhdj";
+"polytable.doc-0.8.6"="sy8gz8n84qky60r7kqpxariw0mj0nvbz";
+"polytable.source-0.8.6"="qiakbb7083n8cjzhp9dnnbx7d3ccp906";
+"postcards-21641"="zvcijbngj8m505fcx22y1hs7y5jmn1kc";
+"postcards.doc-21641"="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";
+"powerdot-1.6"="2ff609v2nwjjxfs7jb1imb4p7i39xf8g";
+"powerdot.doc-1.6"="l7c0y574ykjjw5c2mrbrg1cb2v4y1kc2";
+"powerdot.source-1.6"="ag13n15yh4vvlnsljrkdcp4p1g5x8jrj";
 "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";
+"prelim2e-2.00"="sbggpshfqbnkx6vxl8gldgswsnf0g7sa";
+"prelim2e.doc-2.00"="hjzx94h91zal4xqpdhvgq03in9pqxzzl";
+"prelim2e.source-2.00"="4979f2wp30xgi311nfvkivlcdkj2h0wb";
 "preprint-2011"="z8qdsshgjd3dav562qnyx4vh9gdyga27";
 "preprint.doc-2011"="78x9z1vyl7vpcv39nj167bawb4z8fsnf";
 "preprint.source-2011"="i09zkvcpvapyf2jj7yhabmyrpxyf0gp0";
@@ -5901,9 +6183,9 @@
 "prettyref-3.0"="a75q522ix098qzsnhxg9w12kwp62xgk2";
 "prettyref.doc-3.0"="vlnivj6n4wc0cf9l53352ph04wijswv7";
 "prettyref.source-3.0"="wm5367872id8pf7v2k6wbbqvbh5ysrv0";
-"preview-12.2"="j0hgpgmxn5cxfq5zs2q5a8915in16zy9";
-"preview.doc-12.2"="bygh3nzzr1v84dqldp6qhjmyqcbpx4r3";
-"preview.source-12.2"="c4pwp5f3x2dzfmbd8dp33ls800rniq5z";
+"preview-12.3"="6nij1k7lml3fwzl8qmwx8515cnsk53pd";
+"preview.doc-12.3"="9rgwn57grqwvw45jdca07k7jcj898aag";
+"preview.source-12.3"="xyak9iszf9hvfyiggz1gvl96ki862cw2";
 "printlen-1.1a"="fg8vfmr64nm31r8hycy81iqvqf6l9rim";
 "printlen.doc-1.1a"="95icr7kk7bkg56m6sy8g24if35pfhhwv";
 "probsoln-3.05"="qxvjb9csxhrh20qfk4xh264q4pvb5ghl";
@@ -5922,8 +6204,8 @@
 "properties.doc-0.2"="pdpdn0rbg28dq9qgry9w9j2wvzrl9sxx";
 "prosper-1.0h"="kwjg42wqipj8w4rmilmrpsl5spr8hzmp";
 "prosper.doc-1.0h"="9bfspx1labf3y4hhy7a7sv8ccfmqw4mx";
-"protex-2019"="ajf4lsibbzcr2ynvfpx2n4pnazfkng2k";
-"protex.doc-2019"="j9v7mdk5dnlhdrj5sl3afbvgqgpk0bbq";
+"protex-41633"="ajf4lsibbzcr2ynvfpx2n4pnazfkng2k";
+"protex.doc-41633"="j9v7mdk5dnlhdrj5sl3afbvgqgpk0bbq";
 "protocol-1.13"="2mpbqs6r1sl8x79dbkzgg0vh0xxs89pi";
 "protocol.doc-1.13"="fzvldl69vw5kxljg5jm4qwcar1k2zg8q";
 "protocol.source-1.13"="x52qwan5dahs53bdm8dm450h2ljr7lsp";
@@ -5932,42 +6214,42 @@
 "psfragx.source-1.1"="6ikq1jhicgf6109gdnd3ldng0ycy920w";
 "pstool-1.5e"="1niq51k7cvq7kqlxymixhrhrg811rs3q";
 "pstool.doc-1.5e"="y68jbyp1rzd3wkpwvg17kiz5fsfczmi0";
-"pstring-2019"="whkbcsicbqlvz1pwjfypnvwwbbwqpwfr";
-"pstring.doc-2019"="gf1pmfhczjrkjgpawxbk6zqrwindadnr";
+"pstring-42857"="whkbcsicbqlvz1pwjfypnvwwbbwqpwfr";
+"pstring.doc-42857"="gf1pmfhczjrkjgpawxbk6zqrwindadnr";
 "pxgreeks-1.0"="hdqmxzcwyd5llq80fakhjvx8whjxs8mr";
 "pxgreeks.doc-1.0"="hdm2s76j6vya85lid9lrkzhaj6bkvlda";
 "pxgreeks.source-1.0"="1i5jmxhyphz2mdhl742ydrzam336ix5w";
-"pygmentex-0.8"="bnyslpaj6qfdmak1k1bjyrk0jvflvg1l";
-"pygmentex.doc-0.8"="crqmqfjxlpwibbb9s7sp9qkafnk38f8c";
+"pygmentex-0.10"="v0g38cn50ybp08jqycwkj3gfb482mzx2";
+"pygmentex.doc-0.10"="3fsj110x7rzgmwrmv3g70y84g50c848n";
 "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";
+"qstest-15878"="girz5x7dqmr96mqyviwld4i06s1h4ldd";
+"qstest.doc-15878"="0w3r2f745k9kj4ig8yrq1w1l1dhdblcs";
+"qstest.source-15878"="z067nizm6rcjm6yz1141pxa7gm5yyfs1";
+"qsymbols-15878"="w1c7ni9qmy255nyg3hb0yf94p1b924n7";
+"qsymbols.doc-15878"="pfhp65iz5ybxccd7yjxg2rww0j9z2xhf";
+"qsymbols.source-15878"="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";
+"quotchap-1.3"="jn2r0lm9ky6k8y38p60fls6lvfqh8crl";
+"quotchap.doc-1.3"="9qibsdfc8gr5f56wk9lzfyj7si7mlcq0";
+"quotchap.source-1.3"="7h3yh4i3gfd48hzzrf0xj2adjb5hmb9n";
 "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.2"="wy1mkhb2d8fw1m9qnpxjvw104lh36rks";
-"ran_toks.doc-1.2"="w6g0w4da3lg7725bh13wph47qzfsippi";
-"ran_toks.source-1.2"="qm4h2n67hia3av9hch4941664b4r27gr";
-"randtext-2019"="bnb1sk549kzmljwjyb9gc45xr2ndckcz";
-"randtext.doc-2019"="9mpim50akqiqp54x6kpz8w4wdv9d12dp";
+"ran_toks-57520"="48w8b30295c0kmj16lxqqssclzwa9p6i";
+"ran_toks.doc-57520"="hgp0ba6w40zh0frwn1z6h3rdl1lgy22a";
+"ran_toks.source-57520"="g74zm3wg52imnsrxqzhfdpgcl565ni41";
+"randtext-15878"="bnb1sk549kzmljwjyb9gc45xr2ndckcz";
+"randtext.doc-15878"="9mpim50akqiqp54x6kpz8w4wdv9d12dp";
 "rccol-1.2c"="31w19kr365k8wkvkx91qqcw46fnl0sbk";
 "rccol.doc-1.2c"="80zx3h1b0wjw8qgv81kb4la3zd9hh9m6";
 "rccol.source-1.2c"="sqkkyhka856h4iirnvy4s8bdqlailgxa";
@@ -5977,6 +6259,8 @@
 "rcsinfo-1.11"="y7cymhiac6wvahhzkmsrkchrp2i5i9fn";
 "rcsinfo.doc-1.11"="v6wc6q5xv5rwbcgcvfrlkbk8lw3h4qz0";
 "rcsinfo.source-1.11"="86ss0sk5rzss6m4b5n96dwfd0vjh2acs";
+"readablecv-3.0"="dp6r4cyyn4i6gvq9x10id9c9mb6463jz";
+"readablecv.doc-3.0"="gz5af92whgks47bp8k8bif7hqx4mlr7p";
 "readarray-2.0"="6f0daia3lp0ipi8swprpgl1pzh44hwc9";
 "readarray.doc-2.0"="bgfhvri7xh8kq5y1qykhzhjrv0vcss2m";
 "realboxes-0.2"="frdrijzjm4yi20fddhxb6gp314qg6bsx";
@@ -5984,13 +6268,13 @@
 "realboxes.source-0.2"="2sj5y6k08cwcp8fs0ay7z7ik02is7vly";
 "recipe-0.9"="ya2zz3axlaax8f7qkz3rwkfwl6kc7hqw";
 "recipe.doc-0.9"="nrgg002rpx1gw16yx9pl4xfiyjg2lk16";
-"recipebook-2019"="z2m105warknssz9d0b5f0fg13mdjrwqv";
-"recipebook.doc-2019"="1w359b6rbd8cfvfa3z140hzsk7515m9m";
+"recipebook-37026"="z2m105warknssz9d0b5f0fg13mdjrwqv";
+"recipebook.doc-37026"="1w359b6rbd8cfvfa3z140hzsk7515m9m";
 "recipecard-2.0"="ywrn03f3hy5hyzszpghn9rnjkj9a3kqr";
 "recipecard.doc-2.0"="1g67mikrdxmhpn4xgpnlriapp4als1wx";
 "recipecard.source-2.0"="7g35xa8kbcsrxxmp9xxk3rgvas158m9h";
-"rectopma-2019"="j8pxsc46j0m799x9srd74d7q4jjxjdwv";
-"rectopma.doc-2019"="7h3v5rpkvxcmv1nj0wzxpgn4whs1gk4b";
+"rectopma-19980"="j8pxsc46j0m799x9srd74d7q4jjxjdwv";
+"rectopma.doc-19980"="7h3v5rpkvxcmv1nj0wzxpgn4whs1gk4b";
 "refcheck-1.9.1"="llb529mc4gj9wf4zzs7jz9p2qgngwxy6";
 "refcheck.doc-1.9.1"="hvcfjpx9g9wiaqr70vmrpkgqy4i7xikg";
 "refenums-1.1.2"="8zxc6yyp3c597ydikw4zc36ri5xhlpid";
@@ -6007,25 +6291,25 @@
 "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";
+"regexpatch-0.2f"="hhcywfsc4sp7vpv1ikncaphax7y47684";
+"regexpatch.doc-0.2f"="ama62fjpxjivrqb1crzyvac2q5vakkbd";
+"regexpatch.source-0.2f"="n8khaw6h3m6karhw5l394nvmijz26i30";
+"register-2.0"="1jaiqnzqsvdqg9mdbqw1z5hbm8crb65r";
+"register.doc-2.0"="p9j8dlw9jmvsph1b6z8m941rmj52w5wa";
+"register.source-2.0"="7hcssqiflls84k2596qs26m3w3jl3c0x";
 "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";
+"relenc-22050"="0ksy9dhzxf7dh2sgnais817krjdrnyip";
+"relenc.doc-22050"="w2s26knmf0pfnbvxbj3f2xmcvjf8mgkl";
+"relenc.source-22050"="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";
+"repltext-1.1"="mzzqdjgmzzal0yizvdncqim8b80rlhll";
+"repltext.doc-1.1"="j81qiaara7zdxi5dyxfqcmkf3cycc43n";
+"repltext.source-1.1"="wxy0rsiihw5f9xzaix6rlnqkiij3cggp";
 "returntogrid-0.2"="qvyji03hqf95f50pkv4jj773a8ryv694";
 "returntogrid.doc-0.2"="8s3dy7s20sl37qhayb7vz949k3nsz2k4";
 "rgltxdoc-1.3"="li2cq0q31dicm59lrnz5vkgxd4m2lksx";
@@ -6034,23 +6318,23 @@
 "rjlparshap-1.0"="584zbnkzrqjydg9hz42ayl9r806sd4cw";
 "rjlparshap.doc-1.0"="g4bkg84j236faakga1kl593bjw1p9wq6";
 "rjlparshap.source-1.0"="gys3kddji7j89c63a2kzz7z8xjdakpg5";
-"rlepsf-2019"="zvgnjwbrznazfy89cwbk9injrg0hk19b";
-"rlepsf.doc-2019"="q4jpki613c0b9kx9bxzqw3v7m5ggj4w9";
+"rlepsf-19082"="zvgnjwbrznazfy89cwbk9injrg0hk19b";
+"rlepsf.doc-19082"="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";
+"robustindex-49877"="sw1cp3wc1z9il2ysrxcyhwp47siik8lz";
+"robustindex.doc-49877"="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";
+"romanneg-20087"="7w6wmvkyzy4jzs8akhaswqjpv1lh9lxz";
+"romanneg.doc-20087"="m7rc0j7xbkly1zh63lrym8pzgp1g3ivh";
 "romannum-1.0b"="8l5hrx8svnn1pv9qd3c7y6gxy25fr5r8";
 "romannum.doc-1.0b"="1wlc0m18vg6vl8sgxvj4i3ca4kyfl9c0";
 "romannum.source-1.0b"="h9rkrds6v7b0pvgap090ja271k5jnc7h";
@@ -6061,8 +6345,8 @@
 "rotpages.doc-3.0"="fh2a3xcl4f5mq95d2ibsgmml6pq95cd1";
 "roundbox-0.2"="g1k35s2jqgfm0ih16zf59w470kzv450f";
 "roundbox.doc-0.2"="97dr0pg7689mm504pld75cmnd3vq61rb";
-"rterface-2019"="l7szd2dbrky3idmzkx724b1ks8d9crwm";
-"rterface.doc-2019"="3hkrf5qycaq84dawxyv5a829bv8vz0qg";
+"rterface-30084"="l7szd2dbrky3idmzkx724b1ks8d9crwm";
+"rterface.doc-30084"="3hkrf5qycaq84dawxyv5a829bv8vz0qg";
 "rtkinenc-1.0"="bgvb6v03sbayxss84awkaa98i1hza4rm";
 "rtkinenc.doc-1.0"="ggkmbwp3kxa1zs4c5f7v3r5lk5v8pdjr";
 "rtkinenc.source-1.0"="iavp7gzq742v267gf3hjq8vwi1ywqfbj";
@@ -6071,6 +6355,8 @@
 "rulercompass-1"="bhgf5s2zj8xdxg5jhh3c4wdfyv87p9j4";
 "rulercompass.doc-1"="bc9m9y239rjdnmbrj6s6rmqadmd32mvd";
 "rulercompass.source-1"="9l57jpav5vpsvsg42gw79mym778q7623";
+"runcode-1.0"="javlwy36s82j5dlr63zrnx790cgn5qwf";
+"runcode.doc-1.0"="f8n5d05jbkq4h0vfma2wl6gwj52lxfjr";
 "rvwrite-1.2"="fmxfnps659r2swx7gr9bdxcij2s7vdn5";
 "rvwrite.doc-1.2"="c1wrdxjnjn345siv4xivjxcw8gd5fi8p";
 "sanitize-umlaut-1.10"="nfavxvmfn7klbszd9zxvlbma32dmvmym";
@@ -6095,21 +6381,27 @@
 "schedule-1.20"="h730zhbkd5wwb6jmvjwaaifdn4sia6bj";
 "schedule.doc-1.20"="m45jrx0nks1q26j75h9s9f3zacdc433q";
 "schedule.source-1.20"="gsclgm1vyfv8gnb5lcrgjz35ipvi4wv8";
+"schooldocs-1.0"="78kvxzxhp8lq2pxhcbdzy3jydq7dj05f";
+"schooldocs.doc-1.0"="zsa4c28bnhyz5n1gnhp35fvpc9886qci";
+"schooldocs.source-1.0"="s2vbjcsgjg3zrdrs5r645lz1hgfm4q55";
 "scontents-1.9"="hh97r1s523a6v2ay9b704cqv744iny10";
 "scontents.doc-1.9"="34jdskkym5x8vmhwjkbfnvwdvk7x98pv";
 "scontents.source-1.9"="jx3mw5l964zggyczpxl8x30g8xcbbg21";
-"scrlttr2copy-0.1d"="jw87bnb7phfp7nmvp4gvbi6nhfwifqph";
-"scrlttr2copy.doc-0.1d"="6pfnhhnjm97ap2zbi5bjj011wqbr2yg4";
-"sdaps-1.9.8"="22qmi8xlyg3h67sw4w5dhspk0pfiyl8s";
-"sdaps.doc-1.9.8"="265rp59fr7b1ws33d3pc597rn480d1qm";
+"scrlayer-fancyhdr-0.2.1"="ia120za7k0rwq8qydlljdb2bklpiahh2";
+"scrlayer-fancyhdr.doc-0.2.1"="6zq9mxlll4v0yascd1izclvn33ryw9ws";
+"scrlayer-fancyhdr.source-0.2.1"="xkci6f36yhhif8p0i25h6z4khaifysrk";
+"scrlttr2copy-0.3a"="kgi950bw7jijqn93vzlvrdx9mkrv1sg8";
+"scrlttr2copy.doc-0.3a"="daf3y1bx8187h9270y4c13wrnxac23rj";
+"sdaps-1.9.8"="swij4rm5szzjh3pwqi7a2b3jzzmnxkwp";
+"sdaps.doc-1.9.8"="a6aif8szw295jihhn782lygi1k6sx1i4";
 "sdaps.source-1.9.8"="4h7km9vs0m0va5k8msmjwhxnqcl2lyca";
 "sdrt-1.0"="2pcbwfywj14n08187899xjdhrjr3zzlr";
 "sdrt.doc-1.0"="85y00dj8k3xd2dkd42rzwscq70rhhxny";
 "secdot-1.0"="xb2kkwqh8dwdly3pcd20k3w2y68avkg9";
 "secdot.doc-1.0"="ngfan1hhwcnppgfpvkm0y0a3bjab1fz3";
-"secnum-2019"="v0d0340lzkywygf6p9sfl31cyczf6dcd";
-"secnum.doc-2019"="4zxhvxfwiihagwp6pjg9mmim8k1n772h";
-"secnum.source-2019"="1kadpq20yaj2l8pljjy42scsj5hn1mpx";
+"secnum-53657"="v0d0340lzkywygf6p9sfl31cyczf6dcd";
+"secnum.doc-53657"="4zxhvxfwiihagwp6pjg9mmim8k1n772h";
+"secnum.source-53657"="1kadpq20yaj2l8pljjy42scsj5hn1mpx";
 "sectionbox-1.01"="mxhi294c4y7knbwiz1i0h4akmlgi0v6d";
 "sectionbox.doc-1.01"="2gapb7fvm8l7m021gp281j5vdq61s1if";
 "sectionbreak-0.1d"="gpda9n0rg3clldz9yck9fqxhz7gkcvjj";
@@ -6125,11 +6417,18 @@
 "selinput-1.6"="f4xcvq61azvc95rvijmiij8mhjq2ams8";
 "selinput.doc-1.6"="6pwfj1pn035vm2jb19sz1qjc523zirqm";
 "selinput.source-1.6"="hv4gdy52gpza79867li3img657779zq9";
+"semantex-0.463"="cg41r6nzzax6wpybk98syvhq86g54wl2";
+"semantex.doc-0.463"="3m1h2gc8h9ridydis9v6lnh1zq6cwffv";
+"semtex-0.45"="mb7w1wbpfwpjv9dcnzyfacw4p9612n76";
+"semtex.doc-0.45"="f0cwzvv4bsfn1jgvbyavr6455w5r684v";
 "semantic-2.0"="ky4ggvzl5171nda0329151c9vbaxs7gp";
 "semantic.doc-2.0"="b1hyb592d0xx35p5dqppyfgykg37xx4s";
 "semantic.source-2.0"="4fwjw0axn8d3ychsqmmdy6x73ckciv9p";
-"semantic-markup-2019"="8x44h8x0qlwz95gh7wmgcq59ldwx59s3";
-"semantic-markup.doc-2019"="24d8xyxdibsx9k7jqdcsidpssfbvi7qn";
+"semantic-markup-53607"="8x44h8x0qlwz95gh7wmgcq59ldwx59s3";
+"semantic-markup.doc-53607"="24d8xyxdibsx9k7jqdcsidpssfbvi7qn";
+"semesterplanner-1.0"="wcqxq4w4shlj7r87jn6ivjwa5nyj8wbm";
+"semesterplanner.doc-1.0"="ndfk7h5nxr18yamb5m0z8d1n5sd05xcj";
+"semesterplanner.source-1.0"="ininzdhnah46n0b5xi78lc3qq8bwy62k";
 "semioneside-0.41"="62v5zs95qqi1i0xpm2jmhcx9pa24jymn";
 "semioneside.doc-0.41"="2z2azzz07gj105jrarifhx3ldjc9v09a";
 "semioneside.source-0.41"="31d1fggm0km56jv6qr5yjv7da6y0ifsv";
@@ -6151,10 +6450,10 @@
 "sffms.doc-2.0"="kqfjz0yn615f068v6349lgdp72gw2wkk";
 "sffms.source-2.0"="h5sazi91347l3qdkn6ghw6ywyp5ddryh";
 "sfmath-0.8"="mkmjhc5jg8ylbjdzx3yal2r3spxv3npz";
-"shadethm-2019"="6d2vr8xkis6ah0032nrbpbh3rs29xh2r";
-"shadethm.doc-2019"="iv5jbkrj3gc4iajykq4bm6g1lvpvjk76";
-"shadow-2019"="xifs7y18wdkg1kj656swlvx7cpswmgma";
-"shadow.doc-2019"="ppc90h7d8qm8382lp2vzn5piy0mb7d4x";
+"shadethm-53350"="6d2vr8xkis6ah0032nrbpbh3rs29xh2r";
+"shadethm.doc-53350"="iv5jbkrj3gc4iajykq4bm6g1lvpvjk76";
+"shadow-20312"="xifs7y18wdkg1kj656swlvx7cpswmgma";
+"shadow.doc-20312"="ppc90h7d8qm8382lp2vzn5piy0mb7d4x";
 "shadowtext-0.3"="m2qsn137ij2l4lq4h0s5mpw1vvic0k4l";
 "shadowtext.doc-0.3"="894a2s4awyxc0vc7d94fp0dfahjq4021";
 "shapepar-2.2"="hps8xx8z0vviywd61vhkh8l758c0gndd";
@@ -6175,9 +6474,9 @@
 "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";
+"showexpl-0.3s"="66sf5pdjbp43k69vwz2c5pmiibz7m420";
+"showexpl.doc-0.3s"="jyykmsmxbcf0bmrr26mm2179l2nxj1n5";
+"showexpl.source-0.3s"="mz2z0a4crkf98lm0c585g51135cfj8pd";
 "showhyphens-0.5c"="fcmfcmzkv9k6k2d6l2brhwwvffzz3bcd";
 "showhyphens.doc-0.5c"="451qz6c2k3mvnr488s138m8wmgsf1zvs";
 "showlabels-1.8"="qpsrz097whnqv7phnrpff1j4spc0ccrx";
@@ -6186,9 +6485,9 @@
 "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";
+"sidenotes-1.00a"="h7vx68dxv5l7g8yzkx64zbp53jcv5fp0";
+"sidenotes.doc-1.00a"="nhdavdiw3am7jy49kyqwiwawk7xyxnkj";
+"sidenotes.source-1.00a"="b7qjs3cp62w3mya7sg1l2z6gsmp0hp26";
 "silence-1.5b"="nabq9i9ix7b42zkk5zq38bl47fhc46vi";
 "silence.doc-1.5b"="9rb3mgnavsarwar2i58s9fp4m13pckrs";
 "silence.source-1.5b"="i3siq83ph2lkjfrvc2zbmn5l2i5ssxkc";
@@ -6198,55 +6497,61 @@
 "simplecv-1.6a"="yif1v302airw953py87hf8xw4vdvcrh1";
 "simplecv.doc-1.6a"="172h9r26s8zjpla2g0ah86z1r9k06cy7";
 "simplecv.source-1.6a"="rqyp3gq1k6mbbfmvxi437dxh50qrp7n2";
-"simpleinvoice-2019"="kib8y509s61mzcg5rzcc7s30ii39f88y";
-"simpleinvoice.doc-2019"="47f3zyl0g351p2xihryq6p21qrphi62i";
+"simpleinvoice-45673"="kib8y509s61mzcg5rzcc7s30ii39f88y";
+"simpleinvoice.doc-45673"="47f3zyl0g351p2xihryq6p21qrphi62i";
+"simplivre-58414"="z08sdwb5i8clwvslj4iwdkj1spz435wz";
+"simplivre.doc-58414"="p4qfl4rvf941igw422pqak6c4als7833";
 "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";
+"skdoc-1.5d"="bg0yb5d0bgmnqy12y2irpxn7zfqhin3l";
+"skdoc.doc-1.5d"="9k842q2wjblz991x81554dqn9lshskd0";
+"skdoc.source-1.5d"="991wi8q2b3fhnzddnr0wwbnwis39mczd";
+"skeldoc-0.1.2"="azvskj8dhpk3sprm4z7628siy7plgyw4";
+"skeldoc.doc-0.1.2"="hw8lla7r2kwkppf28xzp1bjkp6gy1nf0";
 "skeycommand-0.4"="w3sqnw1xyx8l1qb9h7j8jg8z3f6xsnvi";
 "skeycommand.doc-0.4"="y8kcbdpydw0an53vfw75nvs8f5rhp5f9";
 "skeyval-1.3"="r39dajvb7hh6437jbq3gly44i22im66z";
 "skeyval.doc-1.3"="g9gr3bwzslymzx3a5kja4n4s1n0ns5lm";
+"skills-1.0.0"="yhi1ypj4yqg38rg7zwmh1cr1h9r1cdsk";
+"skills.doc-1.0.0"="xlsk7bhrbn5974wjpxdjsm45iab3hh8q";
 "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";
+"smalltableof-20333"="a0sx95bj2ampjw3b7g4p56ji7fqwmdiq";
+"smalltableof.doc-20333"="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";
+"snapshot-2.14"="6x5ifdy780sy1kps29xh2k833cqlm295";
+"snapshot.doc-2.14"="bb748sr7gilrsw9s7q0bvc14pqj2aypa";
+"snapshot.source-2.14"="d9y194pxkkb90gbigwp9kcc84zy4gbqr";
+"snotez-0.5a"="f4w7klr766ll5gwvib5rwvviqaqap9cy";
+"snotez.doc-0.5a"="9siiyz7x76rh3jrlrrpkr9wgn4ca2b2s";
 "soulpos-1.1"="908fbjhq1zkq0p3qg4ihs62zxd18988i";
 "soulpos.doc-1.1"="7l3pl7mbjmkpr9fwkrdcyjkhqvw2jfdn";
+"soul-2.4"="krkmw15blkx20x947657pddl5kda59il";
+"soul.doc-2.4"="9p399dgxvrfrlcsqbv9sknia9sb68xm3";
+"soul.source-2.4"="hk83yzxa8d8nqg0jyx8wzxwvydhvwf7v";
 "soulutf8-1.2"="90gd4zgr0nsq5ccx27cj32b84rnbk7vf";
 "soulutf8.doc-1.2"="0hlg0wmni0qswpm7l3yzga6lc6wl2pkr";
 "soulutf8.source-1.2"="pspazx53c9dn73absjhpv43wiycncbgb";
-"spacingtricks-1.2"="84f9wq44xbh1qsy3q6dnihgdfsdrax09";
-"spacingtricks.doc-1.2"="n9f1q4ph131jk4wfw5nk0991667j2403";
-"spacingtricks.source-1.2"="8a4sl2svxhs1wpwy5mz4iylzl701mfb6";
+"spacingtricks-1.3"="lb2y9dmbizq70hihhh4l11z7kghgw1g9";
+"spacingtricks.doc-1.3"="i4kfvvpia2sl2b0nrr3m4s692nn9197y";
+"spacingtricks.source-1.3"="9d74zwmlr5r7g9d2332jmzd2qcpv8xjw";
 "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";
+"sphack-20842"="gdrva3zalq63d7j737247ja9a22abdxq";
+"sphack.doc-20842"="3rzyc3sxq2bnlx5pw5xz1kb2gb36brgy";
 "splitindex-1.2c"="72wrcsz1vmka4qal90la093asf12hs6j";
 "splitindex.doc-1.2c"="gf9j1mi46ih0xanr4lzl43gpfjpjws14";
 "splitindex.source-1.2c"="1y60d6s6ws70dgjhn239h4x8c77hjmdz";
@@ -6260,16 +6565,16 @@
 "spverbatim-1.0"="cpn7cc2f4ila3xfq8yrr5456y2p5navw";
 "spverbatim.doc-1.0"="bnw2p20z8ga1zynk3v8khpgfgbjb5jpx";
 "spverbatim.source-1.0"="ivjx22khzgn0xgzbkb5y8q36i9wh3n49";
-"srbook-mem-2019"="30fmldc7ygh6c4a64z9cb5qcr1z400vs";
-"srbook-mem.doc-2019"="mfn2i8vs1h646gn5fcs3zh7lrn6gj2si";
+"srbook-mem-45818"="30fmldc7ygh6c4a64z9cb5qcr1z400vs";
+"srbook-mem.doc-45818"="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";
+"sslides-32293"="5j8zx3q4f3cm4c78q4vn8cbvp33frz1q";
+"sslides.doc-32293"="xsh6d0caydlgs3kfc0zgw4m79j1vkrxs";
 "stack-1.00"="p32bbliciimyyfpizvi0cdrw7nzkmlx6";
 "stack.source-1.00"="x3hkdwa9hip4zp8paipd8yjjz10pysn6";
 "stackengine-4.01"="nivan4carz07sqpiymvlkjxswkqa9mjd";
@@ -6288,20 +6593,20 @@
 "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";
+"stex-50489"="gaf5gfk5kwfy1m8m4wwfkhx0cppxj58b";
+"stex.doc-50489"="rga6abj8kqig904y3wm4lmzi7lw9jccy";
+"stex.source-50489"="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";
+"stringstrings-1.24"="wnzqsj6nmivadhqqi5hi646hvp3cbzyh";
+"stringstrings.doc-1.24"="k0gm4v75xs9lzgpgqvks7pxbkr5jvian";
+"stringstrings.source-1.24"="j632ahc5hwr2pjazfyql1lxl4x7znr3b";
+"sttools-2.1"="8286phhm1l1sp2pk8smmrmw3wn30ab9q";
+"sttools.doc-2.1"="mszlb4py9kz4gfsgpr6y4qbbzdayrwsd";
+"sttools.source-2.1"="z8dgrhfjc0qwj7vn0qcs98dw7maysmbp";
 "stubs-0.1.1"="5ia769ndpi4pcrbg6cljdbpxsx353qlj";
 "stubs.doc-0.1.1"="apc0wxqj03fhbab6nwwh5rvzc6i9la8y";
 "studenthandouts-1.0"="3gss3z8gv8fyyj3qygmwmbp1jxs7k7dn";
@@ -6322,9 +6627,9 @@
 "subfigure-2.1.5"="rnd1mc9gr078d2vna7vwnhv420mnndch";
 "subfigure.doc-2.1.5"="zpsn8d5b6h8s9cwbl4fd9iv6w7hypmc4";
 "subfigure.source-2.1.5"="10lv7vivb3hggcyv8hkygjhhly6ixxlf";
-"subfiles-1.6"="6420jdqcvjxvwqb9zlqw8yla8hh4gpkc";
-"subfiles.doc-1.6"="8qc5kwvsddpnz32zvrkbjnlxvw7xq4cd";
-"subfiles.source-1.6"="viinb1ny5z1p6zgxwh5dgzlsv12hwhw5";
+"subfiles-2.2"="l5p3id4vzmik187fsbx10l9789prfqsy";
+"subfiles.doc-2.2"="4c1bv5yyynn7wq4cy7m58sdnd31498mr";
+"subfiles.source-2.2"="lmgliaxdhrb2wx49fc5p2ws0w5wqanvq";
 "subfloat-2.14"="l7d8iz54q7zfi5764jfl8v786wihisw3";
 "subfloat.doc-2.14"="rx97nj1mh981n89pby4prni2wfmqisj9";
 "subfloat.source-2.14"="3a8hj83wyvwrsfk0v6ibzmz4ahzvbkv7";
@@ -6333,9 +6638,11 @@
 "supertabular-4.1g"="2rh3aa8ch5jm9yc4iaj349cd339wabw6";
 "supertabular.doc-4.1g"="5n3nyqcxgn9fszv2njl59rgadnbg2n45";
 "supertabular.source-4.1g"="vi7q7isd5xw019q888apkp0rdqjzzi76";
-"svg-2.02e"="7rqzw5zqz1wqpgflzwxw3pvda053fw0k";
-"svg.doc-2.02e"="4cz9v0v46z9qzyiwjbxngmxs7ypra6fb";
-"svg.source-2.02e"="q95l5si7948jcilizjrrf2lix1d95wim";
+"suppose-1.2"="1kw1z2haha6j3795q6lwd0a1qclgpf0n";
+"suppose.doc-1.2"="zbng9h4dghvba86mm94a01mbb0hqa5vr";
+"svg-2.02k"="64rbl8z8f2h4y0nald9alxq81dqkriyy";
+"svg.doc-2.02k"="z863fd7lspbpdmzym8bx95csfdjnc6yg";
+"svg.source-2.02k"="6sq41726hirllwfkk0x9h6hl804cdmv2";
 "svgcolor-1.0"="ld3wccj2cxdhv0xyz7qmxcvr6saab2s2";
 "svgcolor.doc-1.0"="nj7w6bihmr8hmvcykya9nkxlkhmlcw6r";
 "svn-43"="hv7xk90h5qb4ilx7f4a6zybijnhba9ic";
@@ -6347,8 +6654,11 @@
 "svninfo-0.7.4"="761kpr460h6nfczsf1vakdj9r947in1s";
 "svninfo.doc-0.7.4"="qlhr7rj98m7g55kgrms1jjw3wp3k7z4v";
 "svninfo.source-0.7.4"="xsf1rs0ar8ris0dh8qbslxwx5i0ci6ck";
-"syntax-2019"="1bvja2hjsw8p68202f84sbzcrs0f7d27";
-"syntax.doc-2019"="pkf7w0xwcnl7cm74z99bb32v4ycn4wmr";
+"swfigure-0.9.18"="i8j5r40svsl99znl7dwbz6b6fvk6i0lx";
+"swfigure.doc-0.9.18"="3c383j9lc6751zffvylh0xlqy9irph78";
+"swfigure.source-0.9.18"="2vcw78dyrpyplf5fap9vsv9wmplg4wyj";
+"syntax-15878"="1bvja2hjsw8p68202f84sbzcrs0f7d27";
+"syntax.doc-15878"="pkf7w0xwcnl7cm74z99bb32v4ycn4wmr";
 "syntrace-1.1"="02njfsdqh7ssnjcsnpmzi3iwxz2yfj9f";
 "syntrace.doc-1.1"="v5q7643l6spib4kf6mma67pl7xm8aaqc";
 "syntrace.source-1.1"="qqmfivdpilm8qp26v7kf3lcvfp582jv0";
@@ -6358,8 +6668,8 @@
 "tabfigures-1.1"="spwphj1m563rip8gq09fb97mz85yqwiw";
 "tabfigures.doc-1.1"="l68l551i2skm8yns6r2f1ji0kgxhx56a";
 "tabfigures.source-1.1"="6r4li6abzpgpv008xhy0x3lyywpy2w5d";
-"tableaux-2019"="b4zz5qhahr3kxwi68l2hh92w3v29gdry";
-"tableaux.doc-2019"="g4v3wbms4yw4wmzkm6v9aj3l46l4fcxy";
+"tableaux-42413"="b4zz5qhahr3kxwi68l2hh92w3v29gdry";
+"tableaux.doc-42413"="g4v3wbms4yw4wmzkm6v9aj3l46l4fcxy";
 "tablefootnote-1.1c"="axmzyplpbyfmhfx7jsijk3aaqcyc7c9k";
 "tablefootnote.doc-1.1c"="z65aphzdy953r1r3a5lzpvizmhs638g7";
 "tablefootnote.source-1.1c"="a1qbk028v26pld26654hsl3j3fc90js3";
@@ -6384,6 +6694,8 @@
 "tabu-2.9"="pvg42mixn7f8vvz4ll8a5y927hhzh82s";
 "tabu.doc-2.9"="zsybb13fpnbffljq4w7vcpl3nmvg5xk8";
 "tabu.source-2.9"="88pnpips4j95nj427mydnjzqa5nmb2f0";
+"varwidth-0.92"="z2p07dqsj6pmdk6wm7snd0bih1s1q2dr";
+"varwidth.doc-0.92"="i4p58c787avqjqn5qqlcd19k8chxpp96";
 "tabularborder-1.0a"="cfbcq6f60xjzsdwdcxnf9alsgdwcgi25";
 "tabularborder.doc-1.0a"="wgd2b7s6bc3349rbhhafcg9iz3wwky33";
 "tabularborder.source-1.0a"="7dchkfap6l9ff49i0xwlpxd04yvh672a";
@@ -6399,20 +6711,21 @@
 "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";
+"tagpdf-0.80"="dgi43k32aah5lnfcr5i8i701qpbaqyf6";
+"tagpdf.doc-0.80"="9chng34kaly6xp784xzkb9svkhn95hw5";
+"tagpdf.source-0.80"="140cfh7gvcy56287q8xazcsz9iyjzj75";
 "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.1a"="sbvg3nzjsmzwcr0366sin8q76zavhqq9";
-"tasks.doc-1.1a"="ahmrq90xd8cpi8067jl9p22cm6aicvwi";
+"tasks-1.3a"="xy8c97wzbidfvw0q2q9wr2ww9c0wmwbv";
+"tasks.doc-1.3a"="grn381m3sb1lak3y78b2sjyb51nq7n5k";
 "tcldoc-2.40"="r9i94qmf78q9j3adkzfly43riv2bzdmr";
 "tcldoc.doc-2.40"="fh6a7m41gxn4988pwr90ph25gg26ky40";
 "tcldoc.source-2.40"="p007ccff6w6d3nlpsp3q476vg9m4rjq9";
-"tcolorbox-4.22"="q9drs71lw7ri3b1qw7yj784z3kmd94rk";
-"tcolorbox.doc-4.22"="4fzbrllkiy8ck4f02hca47l8my5mx5sc";
+"tcolorbox-4.42"="030q9hss3ldncsz2kypwrcvvjj69rhjz";
+"tcolorbox.doc-4.42"="m1grvl7n974qqrnz9y7bsgnmgy052vdm";
 "tdclock-2.5"="dzb2gj8y1dv7qm5mn7xfgzdq9aydqjk8";
 "tdclock.doc-2.5"="sgdpiwcnkifms1lx7xicl3xj194lfhbg";
 "technics-1.0"="cav50vxgp01465wa07bmza4blgsv49wh";
@@ -6420,9 +6733,9 @@
 "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";
+"templatetools-34495"="byxkf3ad6nbxsjvmqda6iv4qxwh9r66z";
+"templatetools.doc-34495"="yv7q44lxn02yn1fawm3rkcdia11hq99s";
+"templatetools.source-34495"="4cvfpn19a3cqhx9sx2jin35ycakq4wi8";
 "termcal-1.8"="brb1gf3h9zaa07s0ppbvgjiava0yh9k9";
 "termcal.doc-1.8"="3k8kgf7fy8b24n2jbx79a55awzs54far";
 "termcal.source-1.8"="k680hlhzp03wfxnxld82sgsnaggfw38g";
@@ -6435,9 +6748,9 @@
 "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-label-16372"="wc2rqwp08adm869xmk7a6wkyzhfkbv6n";
+"tex-label.doc-16372"="lf9ff6q6n9rqng6akvbds9f1c6xiq5m4";
+"tex-label.source-16372"="vg5180hyadc0bl0hci4wzx90fvpxa2h9";
 "tex-locale-1.0"="l1ivcvf81xx7g4qm4jr778ssnyzf6m92";
 "tex-locale.doc-1.0"="01d792zq1yc408zzs3lpx3zffv7bi85f";
 "tex-locale.source-1.0"="ak4a3mf5q29g02rx6iy7yv2kp51gdqjm";
@@ -6451,36 +6764,36 @@
 "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";
+"texshade-1.26"="hxrldxzv6ij5m6qk9vsw6vrf1hp6l3cb";
+"texshade.doc-1.26"="mb4dwz87c8idg9gf0vhk1h38mbwpjlxb";
+"texshade.source-1.26"="ab64skf5iygxdiw32sifh8781k8wm3b0";
 "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";
+"textpos-1.10"="m4i81jmy2p4ggyp0s5csr76bk73i5wnr";
+"textpos.doc-1.10"="9nx53mmh965w20qg5mkijvsihqzby1w9";
+"textpos.source-1.10"="465vdydvrrmphq1qyyqnwnw5xq8dvgzq";
 "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";
+"theoremref-54512"="1md9iqkfgbhg6v64sgm94lp66x085rwr";
+"theoremref.doc-54512"="846wd88w325ganigw2g9rvhcs9is6ziv";
 "thinsp-0.2"="flil5f3fr9ghxa0bffvqy7wackrg7q27";
 "thinsp.doc-0.2"="pk93sirkywa7hmqggnapklyz0bqy04c2";
-"thmtools-68"="r18kybkrcn6j2dj4k8g0wv1z9d0bdv5m";
-"thmtools.doc-68"="b08ppips1cylxm86x66qmwwx8zcvbihq";
-"thmtools.source-68"="q1plsdxk38jp54s26aqw79rlsxgrgmlx";
+"thmtools-72"="3pkj810asyqi7da0lfg5kbaidvcs4kmw";
+"thmtools.doc-72"="bqgckfjp266gi9vi6cbqx9525ifisf6l";
+"thmtools.source-72"="kica26al0rd71l3isdl4hv5hwizh2faj";
 "threadcol-1.0"="jwbi62xbc0cmzv65spvx1i6dijg34w6n";
 "threadcol.doc-1.0"="j6v3gi6c2cnhs8z5pm0j1cwg7ayi4hxj";
 "threadcol.source-1.0"="0irgk3ajakrjf1bgbfd71qvpy35fklmb";
-"threeparttable-2019"="1fmr9sbssycx23ql343hvvk4k0n90bgj";
-"threeparttable.doc-2019"="4y119m8549dk5kv4sbhh614nijlv0vx5";
+"threeparttable-17383"="1fmr9sbssycx23ql343hvvk4k0n90bgj";
+"threeparttable.doc-17383"="4y119m8549dk5kv4sbhh614nijlv0vx5";
 "threeparttablex-0.3"="7slkq5cfxlah9ckr408l1wqxxc9x5hkh";
 "threeparttablex.doc-0.3"="46r8874q74dgja9ivs4i3wcg35lwlv0b";
 "thumb-1.0"="knz4ixhqam9i803vpaq6qmghx6n7h9hq";
@@ -6495,7 +6808,7 @@
 "ticket.doc-0.4d"="c6d6arnzv37pczxs39h99s1isldk36fi";
 "titlecaps-1.2"="lf0q66qrj3kw5hs90fbhr93dz7ik1gx8";
 "titlecaps.doc-1.2"="qb1mj8p7srqz37f77wqs1igfcpl8wsg8";
-"titlefoot-2019"="1ggjs95rzvlmznqb8s67f7f3cjid5ynb";
+"titlefoot-15878"="1ggjs95rzvlmznqb8s67f7f3cjid5ynb";
 "titlepic-1.2"="psapnhni7mhwd94s2qmki4hdlpbq3dbs";
 "titlepic.doc-1.2"="c363symm32mhjg8cxw9j4xsmyhdl58kg";
 "titleref-3.1"="1ai0w05ipy1dlxm0n78jzvpdgp42j19j";
@@ -6508,9 +6821,9 @@
 "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";
+"tocdata-2.04"="yal5m2rnbhhv5b327qqwcbfqyqkvycdl";
+"tocdata.doc-2.04"="h0k923201mgxy4cd30m5476v5cm216fw";
+"tocdata.source-2.04"="dkj8b681ynkird2j5jwnmjxwcadcm4fl";
 "tocloft-2.3j"="i855nlns30831ls5lgzc0blbnjg3v4rh";
 "tocloft.doc-2.3j"="svwwfcyppadikp7jq1mfp5f24nrpv3m4";
 "tocloft.source-2.3j"="pqry1z1zpr1309fnah8frcz1mkx2iqk7";
@@ -6520,37 +6833,37 @@
 "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.12"="1ar98zdmgr3c5n4nwk70l3ypd01badjk";
-"tokcycle.doc-1.12"="a5m1mcpm0q2jx91m9ki19rpc25rdj29g";
+"todonotes-1.1.3"="z59z4qq59ysrycwcykda58y9rpz9l0zs";
+"todonotes.doc-1.1.3"="rnyl5f5jhaqc9xarwr9fqri1kk44j15q";
+"todonotes.source-1.1.3"="0dhfvw53zzk56z66r8pj75psqllc4g1b";
+"tokcycle-1.3"="nnqf9as1s205l96pc32qhg6ahmyb9285";
+"tokcycle.doc-1.3"="y0r6mfawkm4xiqw30an5xyxic1jn9454";
 "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";
+"topfloat-19084"="a6wpasrna61fbpcb35m1gighj3xshfrp";
+"topfloat.doc-19084"="1gqq1kwkhj4s99vrqc3hys2pzr691k0d";
+"topiclongtable-1.3.2"="q985hj47w7zsf523mm9nx95lzj2sx7lh";
+"topiclongtable.doc-1.3.2"="b49ssbcvgqdl066vzsj62p6n2aj4kwjg";
+"totalcount-1.0a"="2xwhxznqfj62vnp9crpxs9nv89l578j7";
+"totalcount.doc-1.0a"="ylkzk9saf2h0yzv698slhqrw3kasi4pm";
+"totalcount.source-1.0a"="j1mblnmswzlvw6pfd8lla7i6hrnb52k6";
 "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.8"="5i5sn9yv3zr4am821m5hsf94x5v69xb2";
-"translations.doc-1.8"="m0fb1phz8al5rjw4fsb0ni287335chcd";
+"translations-1.10a"="9bvxmkzx0f7sk2yw8vyslr5bdq09j7rs";
+"translations.doc-1.10a"="75mzpk36b88bl7zl9jcbxhqi83j0rp23";
 "transparent-1.4"="dmcm4nfjmkxj8ycc0y7lgzklbfafm5cg";
 "transparent.doc-1.4"="w7vkf495ybi15ir7vpdv9n85wlarlfl3";
 "transparent.source-1.4"="hxayqrkm3ann09p5ffqq8i7vhn89k86z";
 "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";
@@ -6564,17 +6877,17 @@
 "tucv.source-1.0"="85rsysj0whl6f07njaxigyk14ij204gc";
 "turnthepage-1.3a"="kiaa5nrr0q0zdgbl22349ilfl23hlzvl";
 "turnthepage.doc-1.3a"="akqb1g5iyf9f7shvsm0v5wqzi43w8974";
-"twoinone-2019"="mg0zc3lsfzqfcj9w6qgqiynjkqki9h92";
-"twoinone.doc-2019"="8shpm77vq1ir8f18ix6ddz80jn0qg0ni";
+"twoinone-17024"="mg0zc3lsfzqfcj9w6qgqiynjkqki9h92";
+"twoinone.doc-17024"="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";
+"type1cm-21820"="fnxv8a4anvnhl4a2hm1fx45hpdns24mh";
+"type1cm.doc-21820"="fly8yjqm52klwal3cpiw5c3c8pmy75n1";
+"type1cm.source-21820"="735jsqhiaa26wlbbwq764rl18s3j1s7v";
 "typed-checklist-2.0"="nb46bydygh6n37z3w9rcl4vdlgd0jlyj";
 "typed-checklist.doc-2.0"="wpqkpzji27rp6zvrhy988fgjf1mf9hn1";
 "typed-checklist.source-2.0"="yp6qcgrbhlggv7c7n5g40gmiz6azflz8";
@@ -6592,9 +6905,9 @@
 "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";
+"umoline-19085"="2vm0z3pykwnz31pyxxpmgdl3bbpzxi0x";
+"umoline.doc-19085"="i3rs7g3iqdqnkhicadrnfr981fwkmw8x";
+"umoline.source-19085"="rsd9s0gqx20dvf6sk91gwzlsx4mq6299";
 "underlin-1.01"="vp1wvsy871d28x0z1rw4pgxw9abkr8yg";
 "underlin.doc-1.01"="8cbapdd7sbqfxs6s2fx6pv0d8x6b0sjs";
 "underlin.source-1.01"="52j0xlhajihpgw5mp5zgpnsaiqkyfr62";
@@ -6603,14 +6916,19 @@
 "undolabl-1.0l"="d93inn1bzkj056nz3syf6zplallmmjy5";
 "undolabl.doc-1.0l"="qjjvwf6sn52vcnsdqz8my9ahbvv6h26j";
 "undolabl.source-1.0l"="1cjwgz2bwq3rwmqq1q23jbk6dzzawfl1";
+"unitconv-0.01"="sda97fa30kkspqkcgcsiffsr2wik5z2y";
+"unitconv.doc-0.01"="1a5fiy50i32255z85pzvc1p2glfcqj4n";
+"unitipa-0.3"="q54x9b032qwzfmx5dx0bjs0qq22bb01n";
+"unitipa.doc-0.3"="ly9fbbzdzqjc6ipvr5zd6mqn7s0d9lgb";
+"unitipa.source-0.3"="jqh712827vacjsysklhsdgm330szza5y";
 "units-0.9b"="b92vh3z7cr8q1lp5cqzkiw2dhfbla7cg";
 "units.doc-0.9b"="3c1a9x0y99lb2qw8scb0x70jzbh5kjkl";
 "units.source-0.9b"="ha3bz0p0xanqznz0nyfsa02j32wjdl88";
 "unravel-0.2h"="6ngqd1mpj3akcrf6r25g5y32w18r4cym";
 "unravel.doc-0.2h"="l75wvabv32isssh3lsma3h3ziir74yay";
 "unravel.source-0.2h"="lzscffmk9ychmzcbwqanqzv7qr2rzxwn";
-"upmethodology-20190928"="kx48p4k7pcw622vsw0r4d2mhkvg3kiyv";
-"upmethodology.doc-20190928"="h5vqrk88hfxaqp86r93jkg59hhsjvsgg";
+"upmethodology-20200406"="z03ic80fkbnnsg5j9xk3ipp8j6102w64";
+"upmethodology.doc-20200406"="ama62wdhmsalan1y77ii0gzb6pnppgwn";
 "upquote-1.3"="3pr0j9wkyd8fzk026qk6vzsv5hlyccy7";
 "upquote.doc-1.3"="ilclzgj5m6nxhnz4398f5nwypf4jp2gh";
 "upquote.source-1.3"="4j1q8nck1g1cg4paz65l2zpvyimkf31r";
@@ -6622,8 +6940,10 @@
 "ushort.source-2.2"="jhn6sxdjyff94x69jhax021qfx39dca7";
 "uspace-0.04"="mc9j21cj64djdxspryc0knx00xm2krvm";
 "uspace.doc-0.04"="72420339xc9l7a1xaz1pdkn7clkdrm7w";
-"uwmslide-2019"="zf5gky1nzsjd1jp5kq843in2prllnk36";
-"uwmslide.doc-2019"="m67bshz8bpzw4vcsj1klgh8sz3mnbx8n";
+"utf8add-55291"="37ai49lg3vmkark7jwyvjbcs165awqh8";
+"utf8add.doc-55291"="1s7a52r5qjrzkvrhymf6ksjl9k8n8vph";
+"uwmslide-27354"="zf5gky1nzsjd1jp5kq843in2prllnk36";
+"uwmslide.doc-27354"="m67bshz8bpzw4vcsj1klgh8sz3mnbx8n";
 "variablelm-1.1.2"="gmqg9y7mmqmzl04n1zh8gfxzglhh4afx";
 "variablelm.doc-1.1.2"="d12x54ynkf2lq50m97p9s3wh2jr1y5jr";
 "varindex-2.3"="isp8j60q76fms3g4nlgf6d6da6f2y0xg";
@@ -6631,10 +6951,10 @@
 "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";
+"vcell-1.0.1"="g4z68vrb7qslxdq1f31nawlpv5cma6za";
+"vcell.doc-1.0.1"="vfsfz1lzpcaqbrdcyrpjc99xylk5inss";
+"vdmlisting-1.1"="n25b8bdw43shzlsn97rk4f0x31k0i2ip";
+"vdmlisting.doc-1.1"="rjcgx3yigj8w0085q0cdk8yir2728f2s";
 "verbasef-1.1"="i92bhi5drkn26s6lc8kwdm2z5f2qr0y0";
 "verbasef.doc-1.1"="qnn12d8793pgj92wfi0254n1kgi96r4x";
 "verbatimbox-3.13"="zb6kvwdpd9a4s4d7wcax8j6c43f3dy7d";
@@ -6645,6 +6965,9 @@
 "verbdef.doc-0.2"="dak1qyfi1gpb4j16nklvyjh7gldb4b2g";
 "verbments-1.2"="wvi7plkxcf920mdw7qrhbi2fjph1fxa4";
 "verbments.doc-1.2"="3zc8bfvz8a707jzh7zdbmb3rkxwfv2yq";
+"verifiche-4.1"="yir67gi5wyhcnqn7yr8yz0sv6mhmmd3v";
+"verifiche.doc-4.1"="ycjy64j6r9lxdgjnm5fxh9i65cjh7kk2";
+"verifiche.source-4.1"="3abpr2xa5adqrsml13dybcv6zn8802p0";
 "version-2.0"="q06mavcr844zm0dlnk2fm43np58nvjlj";
 "version.doc-2.0"="7hcfbpwhb2ifxy3y84g6rgw2f7465hgj";
 "versions-0.55"="c1vn4pw5im1a93xpp59i3xcf5az1n326";
@@ -6683,19 +7006,21 @@
 "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";
+"was-21439"="gw9043kq2ai4mkbcca20x5f10wnv8czz";
+"was.doc-21439"="y83pwhhkxlh92cr9b0hmps0izg2cjhmg";
+"was.source-21439"="cwqcmdh86sm58073zm929dxibw3flc02";
 "webquiz-5.2"="9qq4an9pcpirgzrfa7jx1mc74zz5y55q";
 "webquiz.doc-5.2"="36ykfxg7dqx2wzn5k15f85s9wm99c4xd";
 "widetable-2.1"="sv2di7hvsz6ivzb6a0s7dccrqwi2d0xz";
 "widetable.doc-2.1"="ilp88f761vxixsa37agrqbmqhbfyynq9";
 "widetable.source-2.1"="qwjaf2v8bgpgfir6vy5j87hwrkr4jcw7";
-"widows-and-orphans-1.0c"="ywmnrcjhxsc2s072xqpqgsf2842ykbw8";
-"widows-and-orphans.doc-1.0c"="rcn8xvbawa9gvr1gsk3gnw4kcs6q3rla";
-"widows-and-orphans.source-1.0c"="4x1cfnpi3ff1vpf09d2i2iz1w9asn1kb";
-"williams-2019"="9xzcvf4nblyp6vl0vhnwi6lbbmp4lagm";
-"williams.doc-2019"="0fr8h1zsj1h1cf3qpjvdkg3yz4fcjdsk";
+"widows-and-orphans-1.0d"="dza9czq3b8r0ww0xlrmc20b6s2xaz2hy";
+"widows-and-orphans.doc-1.0d"="ciih7xrr7rhg5rhd2gmmby3ghxszb50h";
+"widows-and-orphans.source-1.0d"="cpv7db64y4r4r5w0hg8gjabbq7gp1bss";
+"williams-15878"="9xzcvf4nblyp6vl0vhnwi6lbbmp4lagm";
+"williams.doc-15878"="0fr8h1zsj1h1cf3qpjvdkg3yz4fcjdsk";
+"willowtreebook-1.01"="619dav4z2qv4llwbn8md0zh7kd7xchnc";
+"willowtreebook.doc-1.01"="13ipsdh703cr8ivw4slg5ddfqpdxddnr";
 "withargs-0.3.1"="scpyc35ch6zjsdi10iqajg7fs2i9g4gz";
 "withargs.doc-0.3.1"="wsagxy5bb8psai9zilrqxvw1hdbvkn94";
 "wordcount-1.7"="wn4d84kxf5phfn6f5imv91draca4wxap";
@@ -6707,16 +7032,16 @@
 "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";
+"wtref-0.4.0"="p5kwcxjfwpcdr847651c129jjqj5vvlj";
+"wtref.doc-0.4.0"="zn0kkfbz04w28b0ybaqxyg8w6gw9x64c";
 "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"="apn51ljhxljrg6m2wrx9fgq9cvw7plh3";
-"xbmks.doc-2019"="pw86h72c5alcqi96l6i3f04yzv8m040h";
-"xbmks.source-2019"="1gqf2i24lbvbnbyybyqmmm4zx103xw8f";
+"xassoccnt-1.8"="8zs4hif0l7mw7xllcwg78zk4m8yrsvaw";
+"xassoccnt.doc-1.8"="pmsjqv3b0ap1j4ax0lc0q5lhsv3sql6z";
+"xbmks-53448"="apn51ljhxljrg6m2wrx9fgq9cvw7plh3";
+"xbmks.doc-53448"="pw86h72c5alcqi96l6i3f04yzv8m040h";
+"xbmks.source-53448"="1gqf2i24lbvbnbyybyqmmm4zx103xw8f";
 "xcntperchap-0.5"="qbrmbcwfdhy1as9i732naj5xnqd8zl7r";
 "xcntperchap.doc-0.5"="ql3z0qizhd2nxxjb5i4hhxvb43951rs1";
 "xcolor-material-0.1"="08zazp49lpmm92ang9i2q34kvx7v4rli";
@@ -6739,17 +7064,17 @@
 "xellipsis-2.0"="x7m9da1658cxs5896bhn8cjdj0va03xr";
 "xellipsis.doc-2.0"="332vcqlqjbpm5hsqbcfq23avmmgjl837";
 "xellipsis.source-2.0"="3r007qgvxxcfvnd7942yafsznza0jdk0";
-"xfakebold-0.06"="yc4gyj4m6z1bg1wy4z3ag4zqdwl9230s";
-"xfakebold.doc-0.06"="z85af4igv97150qh2bcay8kz42s76107";
+"xfakebold-0.08"="yr38vnjrqgxnlzdrv0vjk0wkcpbn96g8";
+"xfakebold.doc-0.08"="pw6zlgy6qmlmi6gxb5p9fji5drzkhvr6";
 "xhfill-1.01"="6c09h61nlwbviwc1vfvmr4jhbrw2fs24";
 "xhfill.doc-1.01"="cw2rx4v66138fsh1vwxhq9smyai1xlr4";
-"xint-1.4b"="iri239wyn7wyc0pcin97syrgxc8a4z0h";
-"xint.doc-1.4b"="kkybxb7klqbrbcnwvmrxsbviin9838kb";
-"xint.source-1.4b"="nws3kzv8aadv37kyvrh5hjc6halqvflz";
+"xint-1.4d"="20qzgrnfkfd82gd5bzgmlkvyzyiz41fg";
+"xint.doc-1.4d"="6p5sw9crz6sxqnqz6xngjh8mflmbrzmk";
+"xint.source-1.4d"="50fbzfd1x7xj5kgcjqw2f4lv63ky6pp6";
 "xkcdcolors-1.0.1"="2g1glnkhcq4709y8hkkn3f6b3a4wh5dl";
 "xkcdcolors.doc-1.0.1"="ni52wb9gdcxdwzwdl78988anxhj5ay61";
-"xltabular-0.2b"="rgv3ixm0aynqzfmf8s1682n52ga5mcm6";
-"xltabular.doc-0.2b"="0d48lsksnxlyhaxrhcc497f95k4xjcvl";
+"xltabular-0.2e"="ll0q138s9xm3kapjmcl2iz260xgwiya7";
+"xltabular.doc-0.2e"="1qf8125m1hxzpf98w7jkfymbhcbsv003";
 "xmpincl-2.2"="wjg1lw656zbn3h41pxqzwwag9mgrk3h6";
 "xmpincl.doc-2.2"="dczhfj7g5h3gf3vg7wncvccn1q3xavqp";
 "xmpincl.source-2.2"="0pfma5c8agil5jamikja0qh5fnyd9wn0";
@@ -6757,9 +7082,9 @@
 "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";
+"xpatch-0.3"="0qkzj03rh652wh954p3fjnh6jldph1xm";
+"xpatch.doc-0.3"="89fvzh1q664qilll13jgd8lf2753dbhk";
+"xpatch.source-0.3"="cqisb4m9n98yns96j1iglqdjjxhn0h26";
 "xpeek-0.2"="3dbw2vm05dirfvskchrmgdlv7l3n46nw";
 "xpeek.doc-0.2"="vr8bhx79vb9d4nb8ik4aa5xgiyr8sfp8";
 "xpeek.source-0.2"="cr6cxj638iwax50pkn60az0mawpx7m86";
@@ -6768,18 +7093,18 @@
 "xpunctuate-1.0"="n3mxrha0440l5ngic93idrqw2agmisah";
 "xpunctuate.doc-1.0"="lrvqrndq151vfz34ycvjnh3sw77v58lz";
 "xpunctuate.source-1.0"="cmmzrijia2ir3mrhcq4s531la5kx18fj";
-"xsavebox-0.15"="dw7n10mr7nflbhg6lb1g6jd78acxy40k";
-"xsavebox.doc-0.15"="f2g3w356y1fm145pvl61rb4jfvmmf5aj";
-"xsavebox.source-0.15"="3n19vz70bwxcgx02q77gw062z7vr0n98";
-"xsim-0.18"="s3cidc8j651m0zdg80mg6wg47dkjicms";
-"xsim.doc-0.18"="cxk9nkfkhrfsq6d0v0lxlv4zf7038yfw";
+"xsavebox-0.16"="myx02rad0qanxfvg93k228jagaw6fjg4";
+"xsavebox.doc-0.16"="0mkzdmjphmqlfh6kpjab1mg7ws7iysff";
+"xsavebox.source-0.16"="1z7sspx03mj51vshqhhpbfxm5ysj91am";
+"xsim-0.20c"="nz7kdw0g7w78pmqbwlbmsapzddpq648n";
+"xsim.doc-0.20c"="vdc6vcqq3fff653gpkki2sh266bpspyr";
 "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.09"="r9jl4qmmbmybr18x273477yjb5dkfqm5";
-"xurl.doc-0.09"="pzg8fxxawhrhp4n0svxkwg221j817f4m";
+"xurl-0.09a"="2h8qp6r2i4rdd6f7lq34g40w2wfbhwv3";
+"xurl.doc-0.09a"="mnwhvjinhwwxxxcqyydpnnb9lz887q56";
 "xwatermark-1.5.2d"="5c0z0yvlrs562482lkz70w6n7i80mkqi";
 "xwatermark.doc-1.5.2d"="1ixadba47dckfx4r1hhzfd8q1wivygpj";
 "xytree-1.5"="2kq4h083zj1zi2zvrhsnqz5wjyl0dkxf";
@@ -6793,25 +7118,25 @@
 "yaletter-1.1"="br7r3x3n8h5nlfy36csx8a5ji3cf12wl";
 "yaletter.doc-1.1"="x5mhsm4pxjc2klcnwqyrz10gbq4kzw0x";
 "yaletter.source-1.1"="c1la5n24hxfi3paxwxd8m7lxpd083k0h";
-"ycbook-2019"="62sm9jbqxgqdwwm4w39kh5lax93lycc4";
-"ycbook.doc-2019"="piy9cpdcikzknnrdp27dfrciidcjspzz";
+"ycbook-46201"="62sm9jbqxgqdwwm4w39kh5lax93lycc4";
+"ycbook.doc-46201"="piy9cpdcikzknnrdp27dfrciidcjspzz";
 "ydoc-0.6alpha"="4di93jv5wpv4bdng1ibkf0ma6m0bknz9";
 "ydoc.doc-0.6alpha"="80hq2xznj76kgj0zb6zv6li578kc3r2i";
 "ydoc.source-0.6alpha"="39128wyw2py0j8f334r7drff849ad2sv";
-"yplan-2019"="rm8ln7pvl6i672107i8hxic85s994g6g";
-"yplan.doc-2019"="0h0wa59ackd645spdqk9vqy0gzzp8f8y";
+"yplan-34398"="rm8ln7pvl6i672107i8hxic85s994g6g";
+"yplan.doc-34398"="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";
+"zed-csp-17258"="ggjqzwn3zi9x8ziddkh7xizgw80qqlrv";
+"zed-csp.doc-17258"="5p8s701yk431qyngw010qws6b9shx588";
 "ziffer-2.1"="jv9y39n2mj1csaixb3pdfp0qggc16b04";
 "ziffer.doc-2.1"="3ys31swbmm03zmnlvfm155aii3nrd2sm";
-"zref-2.28"="yblpvj047hrkv6raf86rz0k511vgnv8c";
-"zref.doc-2.28"="img48xnnmlbbla4ahhmrmzv4ib61g7ns";
-"zref.source-2.28"="lg2fm4z4njavllw9lqsgivp64icmzn3f";
-"zwgetfdate-2019"="ibagqadgb3nbq8y72lzhrbamv5xcipk1";
-"zwgetfdate.doc-2019"="idw9limrda31c7h0xd3j6v23xqbd2nn3";
+"zref-2.32"="17gs2db0nrwc4hvrh5ha3lpvbnvzaxic";
+"zref.doc-2.32"="krs6a5w6n269rbr6qipmbhma2nbcirkv";
+"zref.source-2.32"="jgjibzgh4bzhxwdic53f8iw2f9f9400v";
+"zwgetfdate-15878"="ibagqadgb3nbq8y72lzhrbamv5xcipk1";
+"zwgetfdate.doc-15878"="idw9limrda31c7h0xd3j6v23xqbd2nn3";
 "zwpagelayout-1.4d"="h3kdf67z95ghbzw3fjm7rq9jra2qwnkg";
 "zwpagelayout.doc-1.4d"="12l7jzz3ab176z5rgrjv69fsmli003ii";
 "addliga-1.0"="v46mqcn3yabd6lliclwabya62hvmvpgs";
@@ -6824,33 +7149,54 @@
 "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";
+"chickenize-0.3"="lmc9ia08np6k06m6fm4lkzp2x8ilng33";
+"chickenize.doc-0.3"="v5b1an4wzrgbp07lh1y0ccsqm4c2xqqf";
+"chickenize.source-0.3"="8mzsm3jdxa8ii448wg4i83fjxisihz4j";
+"chinese-jfm-1.1.1"="rx1518yjy9kdl5dk3bfd24sfhzd9nszb";
+"chinese-jfm.doc-1.1.1"="jf784y3vv9196bf2zf3p0149asmq64mm";
+"cloze-1.6"="6fnj9fvkd2969p095lrsk2rxvp3bqzx5";
+"cloze.doc-1.6"="sp2jppmdhd3w1z6ivi3kga393bhwqw6m";
+"cloze.source-1.6"="5b31196q2dpj278h0wjbwr193q96p0fk";
 "combofont-0.3"="kqlh6sp2y5ssbp38jy6svzgdva4m4sh5";
 "combofont.doc-0.3"="99h3xmx3jv5il99g6wc10csqkmpm5mg6";
 "cstypo-0.03"="4iqsrwnw7pnzhzzspr686pf6y4img6zp";
 "cstypo.doc-0.03"="3s9dsniw0yz2j7iffbsycsgrycfbjlg9";
-"emoji-0.1"="vgrs6i9qrl2yr9gclszjlqlzcjhhfqnz";
-"emoji.doc-0.1"="14p0pnprlp4nkqzyb9433qdr5xryz72x";
+"ekdosis-1.2"="n727jiqjlv7qqnjrfp2jw4nm6s9yd1x0";
+"ekdosis.doc-1.2"="88ggl3assc8q8xqsr80gaqydrh7mjz20";
+"ekdosis.source-1.2"="vzk2bq9f5jz1znv2l5dbjakp2ajcbx7h";
+"emoji-0.2.1"="v664b6kkikc2bclfv4c2p4bh4l4fwjan";
+"emoji.doc-0.2.1"="51iq1l5488652ns99wl3irf3d9qsgwzl";
+"emojicite-0.3"="ycvzy0rk6ilmzv8jlbn0a6502j6n0085";
+"emojicite.doc-0.3"="52pdr7097pj8grg2m0y4h09cgdd626sb";
 "enigma-0.1"="1d9g45cwjgz5imk677zrza79fhwvz3cz";
 "enigma.doc-0.1"="57pmvf7xx9hp23jxaj4sfam0526y652q";
+"innerscript-1.1"="bbv052zvrvzrjxj04iyc1lyh7srnvj7d";
+"innerscript.doc-1.1"="864nlxd9pqi3kmmba7ckhnja40yg67y4";
+"innerscript.source-1.1"="1llgzhkvjh2zwyl639bbpsmjdmfaz4s7";
 "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";
+"lua-typo-0.32"="9y1yvnv6mm0ka7d583dr0pm49jmv7aa7";
+"lua-typo.doc-0.32"="bzw7pnp7mksnqlmpdp861923jnwdqds7";
+"lua-typo.source-0.32"="8bf9cn68z4wsav8f9clsyfwbmlsfkxg6";
+"lua-uca-0.1"="wklxkis107v86c1zlyd5siqz7pjnykj6";
+"lua-uca.doc-0.1"="wbij33n1h6i7xc0rxbwdmbpxgpfjq2r1";
+"lua-ul-0.1.2"="r9dp61f1jny7mjxgpc0vrm326j8andbm";
+"lua-ul.doc-0.1.2"="hbyfh4rr2m6fgx0s0kfamiky96any2f7";
+"lua-ul.source-0.1.2"="4mnmgyzf1iwg3xxgwm3yb2cnfm6pn2wx";
+"lua-uni-algos-0.2"="52pjhipq7788hbldi78i78y5pk90v0l4";
+"lua-uni-algos.doc-0.2"="pkw96m767bgcms4k8hypfbzm1xb872fi";
+"lua-visual-debug-0.8"="q9v0clrwznlv66r3i4dq1srbz6a3nqd6";
+"lua-visual-debug.doc-0.8"="5ka8px5n50n5ghfi8k86svs347cahvpz";
 "luacode-1.2a"="8ckzckz94cdkygfjyh2dfldhr1pwa8dl";
 "luacode.doc-1.2a"="2xzk8133632231pnn3v0afb003xhl33f";
 "luacode.source-1.2a"="dw3p52gn6g103qkp5v8vmgxpj2b4cwb7";
-"luacolor-1.15"="bk11q7qiq9dkqcqxjky0id8p27azjw9w";
-"luacolor.doc-1.15"="4f0mpmk3n3zxvirmvxkijdbb0ddsff4d";
-"luacolor.source-1.15"="v6j6i0311iz8cjw9rs787fjlh4n45ljm";
-"luahyphenrules-1.0"="lpkklcbarmvfm4y9d5zgm9is55y66f56";
-"luahyphenrules.doc-1.0"="ch7vc8skad88crgb1blh85ig9sn97l3f";
+"luacolor-1.17"="ndh87f7myddliqxxhgypg4sbb7852mf2";
+"luacolor.doc-1.17"="6dkfl0j6yv6f9rj4z7c15f19s4w00qxm";
+"luacolor.source-1.17"="0lafyqyqvmvl4ka21dkcy4zk04rzmkjy";
+"luahyphenrules-1.1"="5arrxlvdlvh3njfllkvdsd6w2a6yhbqd";
+"luahyphenrules.doc-1.1"="3zg4gjpik75ri2f8rbvjapydfzkahsc1";
 "luaimageembed-0.1"="0cc3hfkj5jqldnv95ifz4j6ls9vj44dj";
 "luaimageembed.doc-0.1"="66vlh8a2w7q9ng1na9sraibw5ixxlyc2";
 "luaindex-0.1b"="hlzsr82cp5vs41bvnp22f8jc3kkwyk4y";
@@ -6860,50 +7206,61 @@
 "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";
+"luakeys-0.1"="zija2bpmxjw8jpwvvbr4lsb8zx9pjgy4";
+"luakeys.doc-0.1"="vbb1j73ja2xlq5wfg5lg2a2d9hs7fg5n";
+"lualatex-doc.doc-30473"="9vq4qxdsf4gfskrqpb45wj9m0jdkcykh";
+"lualatex-doc.source-30473"="jnrcirfvz7w28pcq3cvwb8g8khd3gzh2";
+"lualatex-math-1.9"="4cgzpjyrs5ndbs3b3x5sxn68pbyykcvd";
+"lualatex-math.doc-1.9"="dagvjsxx05430vhk8lqp3lbp4nxq6xss";
+"lualatex-math.source-1.9"="53dads0ml8318r00g8xk22ig3491b587";
 "lualatex-truncate-1.1"="imd10qn2sh19fdz4zp8qz57rqs0kh2n9";
 "lualatex-truncate.doc-1.1"="xfanw53qhm8qhqg45ykvvf213j3q5dy9";
 "lualatex-truncate.source-1.1"="sv3j09xlab2gfqn670wd41xgdk3rjc84";
-"luamplib-2.20.5"="d59kbn85512qqzby49rkmhdfq9vq9xnk";
-"luamplib.doc-2.20.5"="xh4ybk8z6frhvvjd3ybivrlnkr3ydzxl";
-"luamplib.source-2.20.5"="sk5w1r0bb36gbr304ck9px0xf568rlrf";
+"luamplib-2.20.7"="arzrgg7v2dvywyqvzp95qb0psl4gxmz9";
+"luamplib.doc-2.20.7"="2lmz0sy7m4h4ljyaf1iysx0cbylhyn52";
+"luamplib.source-2.20.7"="2niyz4251vsn3zba6ylw3bd5x9bvcv08";
 "luapackageloader-0.2"="gmc8hizbl18cka1iq0xhy8bp65yrl4gw";
 "luapackageloader.doc-0.2"="ilsqrigd8gvczbfkcbr0ci54qlryhyhg";
+"luaprogtable-1.0"="cyzviwzjdg10rh7xizm90d9vbsqjscir";
+"luaprogtable.doc-1.0"="gc199zsnqkiy7dzb6x28frjf5xmmfkwv";
 "luarandom-0.01"="cj3pzwmgrh4d477fv551rlp7afxrsj0a";
 "luarandom.doc-0.01"="zfvmr0649ca85n06y0rdxx7plxrsk6q0";
-"luatexko-2.6"="bjcchrap58z6g7ymqfs0p13m94l0j5dl";
-"luatexko.doc-2.6"="lbzs38ags03z2zbcn7lh0wz2lnwpc2qi";
+"luatexko-3.0"="k4rrf6lmqg9pyszi7rqd2z58134cdmfd";
+"luatexko.doc-3.0"="ykrj25ib6ww855g1c8vk7xdz2n7qsbrq";
 "luatextra-1.0.1"="xb3dbgfnm7ww87n60ydpilkwqczj77lz";
 "luatextra.doc-1.0.1"="4pfnnxaynvw166pp1ivb5pjp061n2bvi";
 "luatextra.source-1.0.1"="3ajlrmqc27xyxlkn4vbprh6zzlqpf0xd";
-"luavlna-0.1f"="2wzwpzgr9gkdzdsbj8i9sz7x878plhyv";
-"luavlna.doc-0.1f"="flc13baab7rhg9lqsrcxg81rpyw70q3g";
-"luaxml-0.1l"="z1abf6izw5yakycwjiyc13bivpmi0bmc";
-"luaxml.doc-0.1l"="0lmrd1fxl26m4cs49qm571ds05fx1njq";
-"nodetree-1.2"="7x6x6xjd3aqhvz1nchhxckfhzjllfr21";
-"nodetree.doc-1.2"="jnpfcdpwafza66wmlvgv4jkmisfc9k46";
-"nodetree.source-1.2"="877wmvyrnhma4v3qdlq4r1pbk1bldlv0";
+"luavlna-0.1i"="aw5n7z0xl8g1haxbm7iihpri3nnhrsjx";
+"luavlna.doc-0.1i"="hic4zrh893fyc0nmx4p5r8i9n7ddfbzg";
+"luaxml-0.1n"="mfc6hrdlf4kq0xfickj9p894av9hljm0";
+"luaxml.doc-0.1n"="xdbvbd6qy265j4ck813ycr5yi3v1655w";
+"newpax-0.51"="zfp2vysv2c6n31wgr0dw9zxpc1ns6qsj";
+"newpax.doc-0.51"="sc61h486xaxvdr3vndns9ag881v30p46";
+"newpax.source-0.51"="46p0hbild3d4b4x69qwxjj38bjf34vk9";
+"nodetree-2.2"="r5kgj9y7caj0npi1z70yvyfdsgmbf124";
+"nodetree.doc-2.2"="0q6c5yfwcsbfrdj1r2435kar1q4bj1wr";
+"nodetree.source-2.2"="dsccgf77bz156m8kj7hxcg8yylg3701m";
 "odsfile-0.6"="1h0vzwknsi9w3vpk008mdk87l3c33ffl";
 "odsfile.doc-0.6"="4wvljjvknahcyfnwkpnpbmzg26zaa9bp";
-"optex-0.05"="hqwhqns2kgb4s8x8dfli8vpf02fd5x2s";
-"optex.doc-0.05"="v13g2ml81y8njwg5a95l015yahxl95ry";
+"optex-1.01"="zb5yxw2lxflrb9kw1ipr9qxmdaiiybj7";
+"optex.doc-1.01"="hwd72yjcqxqjviwd4fjwmjmkd8n78krn";
 "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";
+"plantuml-0.3.1"="76bdwic6y2h4hprqnfxkp7pnsyf603vr";
+"plantuml.doc-0.3.1"="mirs5886m6i4z34r0rjzh1hgbxif684a";
 "selnolig-0.302"="gw2nwscxyg2p83bs90nnbg47wddkh0i1";
 "selnolig.doc-0.302"="d73jxs6xck7m5y95hx6nfls1572za6qh";
 "spelling-0.41"="kajpixvypcfl8ivqqnscfcd1fb1vv78x";
 "spelling.doc-0.41"="r0sqb4qz4n2w8n0092qik847f3dziq0a";
+"stricttex-0.2beta"="v46yv1014blp25l6zard4i6wdkbnsfzk";
+"stricttex.doc-0.2beta"="a4hz60n22504k60j2hj2ip3fc5pn874z";
 "typewriter-1.1"="4xbzb4igw0cd0p9ry0xxii4p8gj7y8w3";
 "typewriter.doc-1.1"="vk3rzpx4vpgs5mwq8hmys9m0vv6gmmdj";
+"uninormalize-0.1"="a9qjz4wd45prkb54v5fnrji5y1fi3r4r";
+"uninormalize.doc-0.1"="ab1z4pxac91p1ywijfipjclzdn7hbq1x";
 "12many-0.3"="kzixh8p9qmbz0hxczir6pixx8k6zc1an";
 "12many.doc-0.3"="v5qw194xha1w7mr6x3zcwp9a0gpi4w4n";
 "12many.source-0.3"="wqc3q5hqwg09g0sz7l5va9xazvmqbbrv";
@@ -6915,39 +7272,41 @@
 "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";
+"alg-15878"="2z4gi58401dsjwivwji0b169ihz3assx";
+"alg.doc-15878"="43bcrdwkqnx6rharxz9l106cxycm408z";
+"alg.source-15878"="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";
+"algorithmicx-15878"="8hvwf9c6b51yc623g8ivxqzwd10c1j7s";
+"algorithmicx.doc-15878"="1xcga5bk7fgqq2dad5mzv2v2x0m6hqrd";
 "algorithms-0.1"="s07h59vabig8jdk2d7r98hdnxpyq52sm";
 "algorithms.doc-0.1"="vwq0lnznxpwi4zpp4hjaljdfc3c2h6yw";
 "algorithms.source-0.1"="cskf3mpv2rk435przyidljaijx46fiy9";
-"algxpar-0.9"="v12ss83spk41rl0jxdcbrfh5xlkcdrxb";
-"algxpar.doc-0.9"="kv6r18qlkqq398cwplsivg1a57i905k9";
-"algxpar.source-0.9"="nygqf7d258b95q5abzhp0w225dc7c7bf";
+"algpseudocodex-1.0"="i0mj0y496zmm7x9ry0qzaww2z2aaf46g";
+"algpseudocodex.doc-1.0"="qz16lkffljsiwsv0062vly9rq5cz9hmv";
+"algxpar-0.91"="017p08grkzqagvbv99kj72rnddb6grah";
+"algxpar.doc-0.91"="ap7d7x4siyizyavia6lcavbni1132znq";
+"algxpar.source-0.91"="nm2dlsxkp0j07agz4dy3cbh2b2ixr548";
 "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";
+"amstex-57972"="lpqwc8f3c8iv9691yxqs6r00dkjp9mh2";
+"amstex.doc-57972"="niz2zwkdpxcs0mpj2xpn704py545gbvz";
+"apxproof-1.2.1"="rv12vr5m8iw2fw6rp07l3srnbirz3ibr";
+"apxproof.doc-1.2.1"="4cfsxj3d8f2gnvrqkqsx2i4jarmpkvc4";
+"apxproof.source-1.2.1"="4vnna3hyyqrmq1i4fvkpdyg8isvcarx5";
 "autobreak-0.3"="61yyi2p6gf0sjydn5kr8h8qvpxgmvbin";
 "autobreak.doc-0.3"="lzi2q6g0mrv5l8kb3b9yg0ykiiwimyfv";
 "autobreak.source-0.3"="62cm1l24gp51a8jnag36y8gm1bwya7la";
-"axodraw2-2.1.1b"="g9vd6wfm1v77c7rsl2y7cpa9rl1921zn";
-"axodraw2.doc-2.1.1b"="f3xsbsqdmlax1m27khgh3imji3iij2f1";
-"axodraw2.source-2.1.1b"="jfcj5zj3b003mslj4h6iwjbdqvj1hmyr";
+"axodraw2-2.1.1c"="g9vd6wfm1v77c7rsl2y7cpa9rl1921zn";
+"axodraw2.doc-2.1.1c"="9lzv8lbcqay9szyzw2rg7dhglaf9qigk";
+"axodraw2.source-2.1.1c"="0qvxcvilb9v0k568f4chlmf6wviagyz4";
 "backnaur-3.1"="y970wq88dx80mbdsaadw18lckbiwgrx4";
 "backnaur.doc-3.1"="426dp81fwq04wqhng79sy1zj4d8igpgh";
 "backnaur.source-3.1"="pflnxz44r4vwhv8yhcdqkfcl5n0y0zfg";
@@ -6956,18 +7315,18 @@
 "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";
+"biocon-15878"="d5164k5f9rh092j3yd5vysfzcp6qbvc7";
+"biocon.doc-15878"="w3c6g9qr6s5pm76jq7v0fk4fs90p5d20";
+"bitpattern-39073"="s1gn3l5lfz24xgg768032s318gzx96zy";
+"bitpattern.doc-39073"="8nq9nd4qsrixnnw32saxp6272d26w040";
+"bitpattern.source-39073"="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";
+"boldtensors-15878"="ivpsy3mgqghbw4qv325j9rc6nwwmh9ya";
+"boldtensors.doc-15878"="nbg1ilwbjn61g6g93bnqhfm5xgrgqzgk";
+"bosisio-16989"="dinsh8vlzgch7mvajkqmikbpgmzryqld";
+"bosisio.doc-16989"="asd7h31zda58mwykhc4jfp5nwv21y7b2";
+"bosisio.source-16989"="m2y96hhgypgcsli8v19w6jn7y39d23vy";
 "bpchem-1.1"="c1qr5s3jp7zg06sis026ll5b38axvni2";
 "bpchem.doc-1.1"="54qyy00y03jbbhg00az5as1bc5h9i2fr";
 "bpchem.source-1.1"="r4bya1mqkjjnmzc14jlbv676ls312ynl";
@@ -6979,36 +7338,41 @@
 "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";
+"bytefield-2.6"="ns0c255yr22gvypcpgyvn7yan52yjvwc";
+"bytefield.doc-2.6"="y537gi9040798qyg6z3vjsz9g5i8px4p";
+"bytefield.source-2.6"="asvjyk82y4x267vq2srkxq5dk0vr0jmx";
 "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";
+"cascade-1.1"="xl13i2yr1fy3awaihp637h4lz7g5d7gj";
+"cascade.doc-1.1"="3jivxwvfqdwlc240ks4q52q07zrp06m2";
+"cascade.source-1.1"="ggqhq9cl5ia7l54kws9yqvz20s46y3dq";
+"causets-1.1"="rqqybjv2cbfk6wbl0ffmn66ijrasc6ny";
+"causets.doc-1.1"="ywnqh68ciqxv5q0mqzplra7496vdqvvi";
+"ccfonts-1.2"="im7vh7a3c8ja312745mlndwmndg1jvh3";
+"ccfonts.doc-1.2"="4ayp0gvbvmf0jxnfw8ciwz1jfmvbf3ds";
+"ccfonts.source-1.2"="8sfbbqrr9fq9jqbvapgrx0ghhh6r1hkc";
+"ccool-3.1"="chdi79g5j28xq27pbqk0nk9ccbcq11py";
+"ccool.doc-3.1"="q495yyd79mczqqn957jnn2ykp49xk6a5";
+"ccool.source-3.1"="lwic4fdqlcnqp6yplmrmq2zwr8h4dn5i";
 "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";
+"chemcompounds-15878"="7m2snwdxnachamq617zap92fsgdqhay3";
+"chemcompounds.doc-15878"="imzf21bm33j290wmy96hx88ahf5zgbff";
+"chemcompounds.source-15878"="nwcxbn1ivdiswdqyr319y93l76527amj";
 "chemcono-1.3"="kppxwgnwc7f62n7bwi2gnb6zndxv4bag";
 "chemcono.doc-1.3"="r527psyb3zf91x0xd6ywiv429b0rmicp";
 "chemexec-1.0"="szl9xw9iiql9yi7la6hwcwx8frhdxkck";
 "chemexec.doc-1.0"="q7rkw9ny7g93m4xm5jvs17v8x4nwb2p1";
-"chemformula-4.15i"="smd02jfgais94bg4j28449m280z269pm";
-"chemformula.doc-4.15i"="cmg2grv69x7f9sdsgpxkx0yavrylfmvd";
+"chemformula-4.16"="9a0qa89xd6mhzwl6l0g5mn6263igqdhs";
+"chemformula.doc-4.16"="451y52ic67j0i289gzgrl25dpb5lzrb7";
 "chemgreek-1.1a"="9jhyby4636bybvzq4ppvrjp7md499vp3";
 "chemgreek.doc-1.1a"="1v4wdq6k5yjcyi8v976la6ldskmh061a";
-"chemmacros-5.10"="xlpd68407z76kvvrx1c07slrxyi9jk6y";
-"chemmacros.doc-5.10"="y53bdf8l2m100wwb8933fl9zj8k0jk8l";
-"chemnum-1.2c"="4az4s50lwaray904pnfc9z6i2gqi7a5x";
-"chemnum.doc-1.2c"="wbikxk89zq84klsqq67a5ds50jaf28nx";
+"chemmacros-5.11a"="fwkab5q7nkn3khh2p71qrdwsxfbwnk7i";
+"chemmacros.doc-5.11a"="55b2w1ka0n5v402h5p1m7gm840jj6q4p";
+"chemnum-1.3a"="17r3lbprr5l6f3y2z81sqy6inxqp6q1x";
+"chemnum.doc-1.3a"="kzci0qnhw3g2d97q620ci1wmr8v3k2cz";
 "chemplants-0.9.8"="mnsmsmh4gsllxqd8a8590sggv7844k03";
 "chemplants.doc-0.9.8"="j6zlbg0gpb3360953q726g008br0zs7b";
 "chemschemex-1.2"="w3v5w049p0g28v8wx70ah804wp3map2v";
@@ -7022,30 +7386,36 @@
 "chemstyle.source-2.0m"="v52wrccz5gh3pswpfilm4qs48bplws5s";
 "clrscode-1.7"="6w0y1xknbskhhahx05688943y4pqr22s";
 "clrscode.doc-1.7"="hwrsnwvcd7yabwdz6qgy52c06hcz65y7";
-"clrscode3e-2019"="0fz3frh68k47pdn3way6fbpiagyillgk";
-"clrscode3e.doc-2019"="ql7vbwbr3z87rb0bnks5z3r1a53jhfmi";
+"clrscode3e-51137"="0fz3frh68k47pdn3way6fbpiagyillgk";
+"clrscode3e.doc-51137"="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";
+"commutative-diagrams-1.0.1"="w7b0kq60d7nwmp0s90jzszcc73dx74ay";
+"commutative-diagrams.doc-1.0.1"="9g20z3xalhz029cakmn8dqgg5caaqrly";
 "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";
+"concmath-17219"="7qqfg14ka9d6j0ccb3bswg0jhzg8gvjv";
+"concmath.doc-17219"="rw4q8bbj0jyv9fs9vvxv9iksi39mrjm3";
+"concmath.source-17219"="h0akd4lxynf1anylxfv0dibvpkkgb0f0";
+"concrete-57963"="slvd128n47v9z75w92miicd275i27jvm";
+"concrete.doc-57963"="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";
+"cryptocode-0.40"="2v0vwspdr8xvy4s1hx41abssrgl6lpyr";
+"cryptocode.doc-0.40"="q56g76fx90pyi6qc2kq7mnccnl96l4n7";
+"cryptocode.source-0.40"="y27wial5c2si94j1alf6zrssghvykmlv";
+"decision-table-0.0.3"="sj1ivppcdkh5rqcvmrh0bbzxvwfjms0k";
+"decision-table.doc-0.0.3"="7lday4lz5xah837ljynxmmwbxyjrkl36";
+"decision-table.source-0.0.3"="ldvmfif7p2n6hrf4ax6hv6bswk5l2hly";
 "delim-1.0"="q2f4p0f8bg1nwim31i272i5rpnjibxks";
 "delim.doc-1.0"="5k874svcycyk4y5qalbs4h0x4zkviwc4";
 "delim.source-1.0"="bglajqs1gdzhpjayh5d4afw7h09wln22";
@@ -7054,24 +7424,25 @@
 "delimset-1.1"="ag5z8f5h7gf5c824v8rj2xxfz6fbm3lz";
 "delimset.doc-1.1"="40vxv4mmpij621v80ly8mb4rz71r98n8";
 "delimset.source-1.1"="r4j60mdx3nivydxja9mnacqh1s071l93";
-"derivative-0.97"="pj119sspi9zgy3mjfgx1q9mrd0laqx0a";
-"derivative.doc-0.97"="6jld9fkhbl19ngv8p5h5xnwkc1djcwmn";
+"derivative-0.98"="if6y0qgylpw26alcd44dykb3apk29laq";
+"derivative.doc-0.98"="qi4nfzw0acqnjf1fdyqkfgr6hwmqgl8h";
 "diffcoeff-3.2"="s6hqlww5wgs4y66ibvy476hf3cgl6day";
 "diffcoeff.doc-3.2"="mkg33h04jif3fzpyikfi6gymdj2cb1zz";
 "digiconfigs-0.5"="r2ph2xkdaslj50qk54n7a1xx37n8pq19";
 "digiconfigs.doc-0.5"="vignfzc0zrhrx0jgybwmfcgyfcgaqhim";
-"dijkstra-0.11"="25p95xl60c29w1b8z1ggvys4fs3szv9q";
-"dijkstra.doc-0.11"="xn84bb3zgv8jk4slwrr314680l5xybmb";
+"dijkstra-0.12"="1knmbz9g8ifi4wyjjr09rhjshzdsiw21";
+"dijkstra.doc-0.12"="10wyqgpb3znwnnk4smxqbmsyd8ncvxm6";
 "drawmatrix-1.5.0"="pl0mscrd3i4h9m8zq947ajh45apms3fj";
 "drawmatrix.doc-1.5.0"="qxljjk2vh5cc7l9xxn6kicknw2csdk4p";
 "drawmatrix.source-1.5.0"="89lglkdc257iwip9aiwnshzqwhvcqz5b";
-"drawstack-2019"="kdcvc0kd9lm3zxd2zszwriab31p26wrv";
-"drawstack.doc-2019"="plmy162h6z23pzimj4i5wjpih0m21z3p";
+"drawstack-28582"="kdcvc0kd9lm3zxd2zszwriab31p26wrv";
+"drawstack.doc-28582"="plmy162h6z23pzimj4i5wjpih0m21z3p";
 "dyntree-1.0"="820wp3d1dcdm5vxihmk93wqc8qw4rqf4";
 "dyntree.doc-1.0"="j334vdgmzrhlv3x0ihzpa9j2rbbd9xhz";
 "dyntree.source-1.0"="ha5c29s0f6j3r5f3b2v7v7bgxaks28b2";
-"ebproof-2.0"="5ic2h08ff6km04b5j7ya8grg66q00a9j";
-"ebproof.doc-2.0"="3hc5hiis4cssjh2l5a89df29yhjg3h69";
+"ebproof-2.1.1"="wmq1crk5nnz7y8d5nk16xsblp7rxvah5";
+"ebproof.doc-2.1.1"="s3m1y6pgx7q224m6nmg5zhp2s25zg4z3";
+"ebproof.source-2.1.1"="xk568kr38d6xls292079f66mygpg8jk5";
 "econometrics-1.0"="4b5wmgy2zn8mflr9zdfhyc0pcw707h9j";
 "econometrics.doc-1.0"="5rm8ml9qmmq9nnyx9b5x7cfm54qdmqpz";
 "eltex-2.0"="n3kq7kl8i0b1k89i94i4k30qcy31lhfz";
@@ -7089,11 +7460,11 @@
 "eqnarray.source-1.3"="bwkjz77mw47z33bwbgsx81wbw9i4n2n5";
 "eqnnumwarn-1.0"="vz6kiciv5zhrh16ddisfrik5y9g2qr8h";
 "eqnnumwarn.doc-1.0"="py5m5187p7i643k6wgsm7zyznh6awp4s";
-"euclideangeometry-0.1.5"="h2z76n33d8x8z5ajp3rzw0g400nc9ssd";
-"euclideangeometry.doc-0.1.5"="jfv5aqq2b0lrfif14hr267bjpkpns4cc";
-"euclideangeometry.source-0.1.5"="ags2akra36889zl66yirlnzmhhjmjlby";
-"extarrows-1.0b"="6fa3hrvqa3qf7wqahhb7k168sz6pzmqd";
-"extarrows.doc-1.0b"="dxnpkgk5iirpmzhznidklfk0xy1y5l3v";
+"euclideangeometry-0.1.8"="86vp8pn1467dqaxd7gvc9ffl6n3jp0mw";
+"euclideangeometry.doc-0.1.8"="f5ll9a02fbfkczcy58q5w3is4hbb6piw";
+"euclideangeometry.source-0.1.8"="zamjpkc9mb9pcm372vw5qv2zf3y49an6";
+"extarrows-1.2.0"="pb0rm456xq2s929nn9dwjzlmqlfwhacc";
+"extarrows.doc-1.2.0"="i9b8z46rn96n83904flai1wjvdgz395l";
 "extpfeil-0.4"="0yaa2siwn8yvcsd1xy6q3shswdzfzq8j";
 "extpfeil.doc-0.4"="1c0q3h8z0vfy05gmgvi5gbk628xw2pwm";
 "extpfeil.source-0.4"="fly5cib65ppxgrbgq1h8vcxx7m6340bb";
@@ -7108,28 +7479,31 @@
 "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";
+"functan-15878"="68wga1s4yiamylxfjma76hirgk867yym";
+"functan.doc-15878"="h6jwmv7wp2a8whhi34r62xvi1qll0vb7";
+"functan.source-15878"="rk42vz9n59n31xx5my1ahlnxmagzap7a";
 "galois-1.5"="b8khw120ihwg30l5wiyrpigb0n76j4pg";
 "galois.doc-1.5"="pl6jyfxfim7igp5lhhsdghiz6awrsf42";
 "galois.source-1.5"="pf7dxm40jcipslw88sqascls74wnvhyn";
-"gastex-2.8"="7ncqqh3yaip7f6fpv1cs57wlsw4krkzk";
-"gastex.doc-2.8"="y3ybpis1prha863r0486c1wr24wfy0y8";
+"gastex-3.0"="y4x4q9cyhjjj27cn2cgzc0wjpyvlbg1y";
+"gastex.doc-3.0"="pqgwn4lrammg3ksxlishb12wpmd41z8j";
 "gene-logic-1.4"="w7b16bvypbh9l3kiwbgha3dyh4dlqpq4";
 "gene-logic.doc-1.4"="nzraabszgvj8b0j503f7h892grbqjjrp";
 "ghsystem-4.8c"="dmzs6zybhwyirv48xcj7k34f5zx1n0jz";
 "ghsystem.doc-4.8c"="rzhffv3xxgyyb8rcl1ibqa6zw8zjk9s6";
-"glosmathtools-0.5.1"="k54clj6x7h0zz6b5r6q3v49vld7fqsv8";
-"glosmathtools.doc-0.5.1"="fdyfp8145xg7fc5j377bhk5p2nbc1h89";
+"glosmathtools-1.0.0"="9ncr117yxkad5rfad9bgsr9rlc9jscfy";
+"glosmathtools.doc-1.0.0"="bc8xj31ffw5x6w5bs9q82nmvmqkjpyav";
 "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";
+"gu-15878"="4m173j1ac2aiji1xjpxccd5bnasv68hd";
+"gu.doc-15878"="vkm8qnzqcdqh4xv4axh9sfy65bx2jji2";
+"helmholtz-ellis-ji-notation-1.1"="7py9xih6irxxqc6fw4yi8rmjbcjcawi6";
+"helmholtz-ellis-ji-notation.doc-1.1"="qspb7iwxmsjkf6lxy5n5s0hhivy3zs79";
+"helmholtz-ellis-ji-notation.source-1.1"="mkpv3j5zy3wngww37ajjc6rl8mabwwyf";
 "hep-1.0"="f70qsf585a6rw0lzizd5ps7lcv2qqsl9";
 "hep.doc-1.0"="aqaxn42inmw854cm1qps4fkcijc11fm8";
 "hepnames-2.0"="3f4dycnxwd41da8gh67gs89xcb3l7zl7";
@@ -7138,8 +7512,8 @@
 "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";
+"hepunits-2.0.0"="xfl2120y4vv8bc8sdp9ijbili4vl0pcm";
+"hepunits.doc-2.0.0"="9sprxl76nl39nyrxicy814y54ds8pqqc";
 "includernw-0.1.0"="wdc8hhcr4fciy57k7sg28rkli26ybbq7";
 "includernw.doc-0.1.0"="xl68qyik71z5mhzvv2wzh8k6shk4mzbd";
 "interval-0.4"="ihq8vx6xlxsa3nbyx62l072y79s88wnc";
@@ -7151,35 +7525,37 @@
 "isomath.doc-0.6.1"="nhpi08b738hs457jqv7139b44z35xy5j";
 "jkmath-0.1"="l4nykjpkg2p19fdvy4a6h32ik4hcimdq";
 "jkmath.doc-0.1"="79bfybh585f88gcyc82b3ds7nx92jng6";
-"karnaugh-2019"="8s95y2qxd4i5g5q1x0a7h8iwsci6dls2";
-"karnaugh.doc-2019"="85z4avy6yfziaqd7b4w077ys394a3y4z";
+"jupynotex-0.1"="ri5pp81vxiwa2m3dxk23pz1ahxl9w6yf";
+"jupynotex.doc-0.1"="hpka37bcy98c0cpm09m9gwf4j6dfm80c";
+"karnaugh-21338"="8s95y2qxd4i5g5q1x0a7h8iwsci6dls2";
+"karnaugh.doc-21338"="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.2"="76wq1id92vsrxsp2y26zgy7zy93fsp0p";
-"kvmap.doc-0.3.2"="ak4vf9nhr2hyj8q42vb9bvi5yfcqkip2";
-"kvmap.source-0.3.2"="4a84i6amh66v4xmjpm823wlysnpvrwj0";
-"letterswitharrows-2019"="x7210si2h45zzxpdlgnlwhb73chi3n8s";
-"letterswitharrows.doc-2019"="gbb4284mb5q7nyavj0azf9ac8bbjk71g";
-"letterswitharrows.source-2019"="ai6h99xsyx7519rx4zqfyvf2hgb7h0rc";
+"kvmap-0.3.5"="81wbq2ivxqnyy6mm8dn24rxqxhm6ls1i";
+"kvmap.doc-0.3.5"="g61zawm9xaq09835fskxvwqprs8h5gm0";
+"kvmap.source-0.3.5"="qf3a56ilm3b60x8pnmzyr4z53d5688yn";
+"letterswitharrows-53709"="x7210si2h45zzxpdlgnlwhb73chi3n8s";
+"letterswitharrows.doc-53709"="gbb4284mb5q7nyavj0azf9ac8bbjk71g";
+"letterswitharrows.source-53709"="ai6h99xsyx7519rx4zqfyvf2hgb7h0rc";
 "lie-hasse-1.0"="qdqlw1r3r8dvzlm38bg09gvwfqwskrk7";
 "lie-hasse.doc-1.0"="6w441bchfvv1ga31aikz881qj97845jk";
-"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";
+"logicproof-33254"="24sbq01252ij7ldzb8achg4m73fakhas";
+"logicproof.doc-33254"="ldn1c2fdmnikc8fzklp5vzwkx73d91jc";
+"logicproof.source-33254"="745pxgmypzv7a1vf8gjm6r28khxk0s3k";
+"longdivision-1.2.0"="47csxxlz8niy7pnxd2nbmp36irc9ywf4";
+"longdivision.doc-1.2.0"="3pz21q6q3gp86q7ggm1s76mi1va0fbqb";
+"lpform-36918"="ga25ijvkw3cvzkag08jj7w8pv8d8mdj2";
+"lpform.doc-36918"="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";
+"lstbayes-48160"="7lfk7lrqr07my6v1qqni2rz39j5wwgpm";
+"lstbayes.doc-48160"="y00fm320wqy608v16idmzc27n8z4q4p0";
+"lstbayes.source-48160"="kzi9c2z11zpwb4lgy87vwyi0qjlmbyr3";
 "mathcommand-1.03"="6i9g221942874w40gb7wy3h86qmwnjns";
 "mathcommand.doc-1.03"="zkx78ghaz6kf1b4w1h1j63spijrlsshz";
 "mathcommand.source-1.03"="0ypyz0612ys99ig6g2c93zs86awfiib3";
@@ -7189,6 +7565,7 @@
 "mathfixs-1.01"="8iskcy7ibbkfqq63ri2r65x6q7bq99zp";
 "mathfixs.doc-1.01"="ql7y723mdci6cz9qjnfpk6ck71kqb0w4";
 "mathfixs.source-1.01"="62f1zvd1s17arrg42ba9ydr9yyv3znhh";
+"mathlig-1.0"="hzc0bwnfhjbp5qqk4kkm9wp1hl5wlj60";
 "mathpartir-1.3.2"="ka1crqmcwlidnxb6n91dlfnf16hir45r";
 "mathpartir.doc-1.3.2"="0qn7ym4gl6m9g7vvx0mjnwyq2fjvy9cj";
 "mathpartir.source-1.3.2"="vx38w09k1cfrprj4yr0vy1gkwkssw6yw";
@@ -7202,95 +7579,105 @@
 "mattens-1.3"="v9rf7qmiardpzq3zzqzz0p3qnh4lp1ck";
 "mattens.doc-1.3"="dnnzxlvc6vrfy4rrm4vw5w0g85fr886d";
 "mattens.source-1.3"="dw4c26cwsg1hz3wvldlyi8q4f60h3szk";
+"membranecomputing-0.1"="bqxhzm00kp19sknfqbnq735d2jmcyl0y";
+"membranecomputing.doc-0.1"="n0p0kfvcyr2n1wm5hh5ax3krcwpiqhn3";
 "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";
+"mhchem-52662"="1jdqxhaq185m8lpk48mkdmd5yf0msw43";
+"mhchem.doc-52662"="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.7"="v2s1vq1j6rkk1bz7xiad62a8ns123bpp";
-"mismath.doc-1.7"="711hsvwqxxbwr1y6lzcac1ax76n20hcl";
-"mismath.source-1.7"="f7w52yr2xq8d352z21zka6kb6zx004kd";
+"mismath-1.8"="qgcm8svg1sdxnwjnkhimjq7w8gqpqyp2";
+"mismath.doc-1.8"="aflrdaxjvq20v57jmsvmnpj05dmj53r2";
+"mismath.source-1.8"="7f2gdkc4n5177zm0r9q42qpcphdhnb43";
 "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.11"="xbl0z3fcz31h3vdzhh52al7xnq11kmga";
-"nicematrix.doc-3.11"="nk082y0mr776zi8q0zw684cpmhgmkbdb";
-"nicematrix.source-3.11"="n1ybg6r8dcf9jbykrk2fcgswgn5awq6j";
+"nath-15878"="7x3cdih5q3i8dg25h6737vaphmrdxvbp";
+"nath.doc-15878"="ilxg3pmmz0pf1xp6i3g5rfwgvrjprzbg";
+"nicematrix-5.13"="yax4zrp4rjnir9djq2ij8cfn7z92pxfb";
+"nicematrix.doc-5.13"="mjf6caf246lpw333hafc57s46r245b3s";
+"nicematrix.source-5.13"="6164vnx2g1nbszz5n95wn3xhcyl2mk7z";
 "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";
+"numerica-1.0.0"="igf7ksyh8igm93w30k1qaaj5cb8w6di1";
+"numerica.doc-1.0.0"="5ps97l254yf54bzw98v2cnvgg5dxk1w3";
+"objectz-19389"="jxzqzh7y1nihr8m7jrsnbw7jh187031h";
+"objectz.doc-19389"="d8rk9nql7l67xn6hyvwg4x3xxkpb407i";
+"objectz.source-19389"="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";
+"ot-tableau-44889"="mdvqwhal8vq8bqxqi73p4fyc6qpaskkn";
+"ot-tableau.doc-44889"="gcfni2sp25f6qswns4bfl585gfi36vy8";
+"oubraces-21833"="sm7cbapl8cv51d41dgc46gjckv3icx3z";
+"oubraces.doc-21833"="yfvkv4vgc6ycvsd2sixyph039nm4gzvl";
 "perfectcut-2.3"="ca48sxakrgh4g53i30xa7n9288r9wr51";
 "perfectcut.doc-2.3"="iry7v9xajbzxyn4bbq0pr7qah8a1iy8n";
-"physconst-1.1.0"="dqlks7fba3zf4h8xw8bgjss2l8nkglnw";
-"physconst.doc-1.1.0"="56iad44dpmb3aw4yba13xv655c7irj3d";
-"physconst.source-1.1.0"="ykx51slabggwsficfjx9l8q17ii0s6iq";
+"physconst-1.1.2"="5s61r6342v1sck3n9dk164mshxd1gxcq";
+"physconst.doc-1.1.2"="nb408z0hllvm3qgaqhfvbyy1vxlfh23z";
+"physconst.source-1.1.2"="abxr67fnizbrhsjhf0ln517fvdm4ff79";
 "physics-1.3"="y7b93d3qrc6674j33cy58v5c6fhlg3dy";
 "physics.doc-1.3"="ksf5jd2gfrq4dj2p1x2iwpgik5vb4pl6";
-"physunits-1.0.3"="4cx804ybcb52z4p6gavkcsrcx6pbcs4b";
-"physunits.doc-1.0.3"="m43hy3mb9g9zm8hkwgis87m8c9jwkzm4";
-"physunits.source-1.0.3"="8y3f9vhp6158qasfv4y8q7fqda66gwig";
-"pinoutikz-1.1.1"="b7l6pih6074b4981v5k3ik7cqpl4v1w8";
-"pinoutikz.doc-1.1.1"="rvsnqganf7x394vsisl9fl5n06c4qrsn";
-"pm-isomath-1.0.04"="a768qpbak06xs38g804s8rr4lc9ad4kq";
-"pm-isomath.doc-1.0.04"="3ahd6gy58lc04pirlz20fvyhpd5qw4nd";
-"pm-isomath.source-1.0.04"="d2mkfbifgmjm56i9vbrhwkvhyn2pj6bm";
+"physunits-1.2.0"="slz5zydl3kpnk8fx3c18q6pc9chaaf3r";
+"physunits.doc-1.2.0"="i78b3cwjpiv6icwl64lgy6n6wzh6sjq5";
+"physunits.source-1.2.0"="13s4mvnmm4ka2dz4ma406vhlkmqjf95n";
+"pinoutikz-1.1.2"="dzb6wpz2hywq4i4cxi49s3yssxhxkm3v";
+"pinoutikz.doc-1.1.2"="9iyyk8vp4yfnc7jy990gh6z449mxqll6";
+"pm-isomath-1.0.07"="4bhf0nkw5wsmj7r26j1cwhgdxpy62pzb";
+"pm-isomath.doc-1.0.07"="92djvbz5x4c0rdpjk1z1kbhf374pi9mm";
+"pm-isomath.source-1.0.07"="vfmjgjks3i5hs6gxp6nhzvhlbfsm6qsa";
 "polexpr-0.7.5"="20yvnhmb8dy7p1jwlimayaflwm3sw2q6";
 "polexpr.doc-0.7.5"="3zbnfkrlxphvikk3w1jrd21dzrsnkad7";
-"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";
+"prftree-1.6"="jwghbxhmr9lnai4rh4gnrrd5i98vqi1j";
+"prftree.doc-1.6"="7a0lrs2rak9c45ayjfmn8ghx89zab2pg";
+"principia-1.2"="84290dcczfl331sk2knn215q7km9r2m0";
+"principia.doc-1.2"="391qxwqahr62h30pq1jww6wg4cjxj7s5";
+"proba-15878"="k6j2r5kacbcl25i7zwb71a2mlyn17dap";
+"proba.doc-15878"="a30lrji3wrd9rb8aa7hzflch7cwlybdq";
+"proba.source-15878"="7grfmfi6hwyqzhi0aynjq9cl65yqh5id";
+"proof-at-the-end-51194"="w5hmk64hm538mzqal4i9gxzadqpxp30a";
+"proof-at-the-end.doc-51194"="q8jniylvknscicjp5m5pd1z3751b06m7";
+"proof-at-the-end.source-51194"="nk3sbcnk3176zk76yf9nzj05q94ab006";
 "prooftrees-0.7_svn_8641"="rfmxpnzn1lkxx7b9ylvpnwmk1rag2nda";
 "prooftrees.doc-0.7_svn_8641"="zx19hnafp63xl2vas9frf6blm8974b94";
 "pseudo-1.1.3"="cxzf3j22aj491bs9k23rqlfbia9r15b7";
 "pseudo.doc-1.1.3"="scpzmw6ssq40wmxm9fmyybjxwc31kxjr";
-"pseudocode-2019"="bmn68g4pm7wga21yf97mrnmwc588gn6h";
-"pseudocode.doc-2019"="1hm6d3af5zjrpvx9h5ihd6qqyg2384xl";
-"pythonhighlight-2019"="wyvy6ms2blns0nffsf2lzjs4gwivgh97";
-"pythonhighlight.doc-2019"="9g7wy34pzzhdwsaa4rvn41iblnynvxz4";
+"pseudocode-54080"="bmn68g4pm7wga21yf97mrnmwc588gn6h";
+"pseudocode.doc-54080"="1hm6d3af5zjrpvx9h5ihd6qqyg2384xl";
+"pythonhighlight-43191"="wyvy6ms2blns0nffsf2lzjs4gwivgh97";
+"pythonhighlight.doc-43191"="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";
+"rec-thy-3.7"="23dn3adxmjfbk07cjal4xfcvymbzygyj";
+"rec-thy.doc-3.7"="0yn984pwcxn299v738kb94nkx3hynxcn";
+"rest-api-1.4"="4nq3lciglb70rr49v7w9an1bj2ymq0kc";
+"rest-api.doc-1.4"="ipic9f43478jakkdigfaw0zpaq9apq32";
+"rest-api.source-1.4"="d4868ncchm5byvnbfw25mydlf27ncgl2";
 "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";
+"rmathbr-1.1.1"="i61vd0n322pbpqia1ymizwkqzz31g7vz";
+"rmathbr.doc-1.1.1"="4h44kiz0z8bzxp75zfpc3jb2haxylqxq";
+"rmathbr.source-1.1.1"="z41y0xrn0amgmjmgbqhxl9fz441fd5jx";
+"sankey-3.0"="i2v8n6wn1zphiahi13xx7lvpwafba0zq";
+"sankey.doc-3.0"="wsk6h314mqw3g3nr46nfp8s7zdbrpdyv";
+"sankey.source-3.0"="xql4zhi01irpmkn594g7g3pdpm0jhbk7";
 "sasnrdisplay-0.95"="9yvwv7a6iw8a7g58w0zlgmfaz2zy8nxj";
 "sasnrdisplay.doc-0.95"="0dc8ai8f6b0dn05ljdlnx2dykbhil5xh";
 "sciposter-1.18"="mi8zk7ik6q8rvncwp5m0ch6mfysil8fh";
@@ -7308,22 +7695,22 @@
 "shuffle-1.0"="zg1rq9yihzpl9l7xjlc7djqfg2s3mn2a";
 "shuffle.doc-1.0"="dqra8x226wdqh5baz25qqg905r3xbcld";
 "shuffle.source-1.0"="3r5607h5jsaibvmyvwm1v1scm0yrbfrm";
-"simplebnf-0.1.0"="gy1fdjkxfirryqcspyqn3xh19h5ab9sj";
-"simplebnf.doc-0.1.0"="fff34d89r4aiw5qcy9px8ksh4190rcql";
+"simplebnf-0.2.0"="rsyph0dhpy3yz1yqvr5wa7gmcn1zyg6i";
+"simplebnf.doc-0.2.0"="3k3pb1cylrcnr3bs0vz278xkizf11048";
 "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.8b"="8qh918d0870q2qmf57hnqm81lyyyrw9y";
-"siunitx.doc-2.8b"="hpwpql22ypcccq4mly75jb29n8a3d76m";
-"siunitx.source-2.8b"="wmpxyz75g3r8vhp09j5chdjqs84ysk85";
+"siunitx-2.8c"="727sfrfi2cr5wrwch1rygvj84hl5l9m0";
+"siunitx.doc-2.8c"="0r5y9fzzdnxv4xryvqzdgapi11l2ab75";
+"siunitx.source-2.8c"="6f0hsw113mvf92g35x4ysbklqxwjbsza";
 "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";
+"spalign-42225"="if8r1d1xwq1as1147m3ixkxgyni8yb9q";
+"spalign.doc-42225"="s49kpxsa940l85yc6wzmb71i789874qw";
+"spalign.source-42225"="ahwv44vd19kn8vzbx7ya6275ysnp3q25";
 "stanli-3.0"="6ws3b75qs69jhag24aki76ndgryb9f9s";
 "stanli.doc-3.0"="iygalq6h7fdik4cfjyv5i62mid9gdr1k";
 "statex-1.6"="h8y1sw298ilqajy8vmi00yl9wpklf5fa";
@@ -7352,8 +7739,8 @@
 "subsupscripts.doc-1.0"="9yhhgbj7i83v21flfr3gkr35vkdxpx6m";
 "subtext-1.1"="dz6mm9cy33qhlw46fkirvzlqhsknjnak";
 "subtext.doc-1.1"="bllr8v8mflvi6ih3z3r73b5y6vmprafl";
-"susy-2019"="xiv8s7m8lahyc17qdp7vhdnriqcz2gzl";
-"susy.doc-2019"="51apv9rzw9q1aa390a7p6w0d4y5amkms";
+"susy-19440"="xiv8s7m8lahyc17qdp7vhdnriqcz2gzl";
+"susy.doc-19440"="51apv9rzw9q1aa390a7p6w0d4y5amkms";
 "syllogism-1.2"="gx6hjs32rq3d1sk28cs8ng8m2i1xwgrf";
 "syllogism.doc-1.2"="m6nv4hcwmh5qa7m411vwm8c6s1xbdbx4";
 "sympytexpackage-0.3"="x7b456c7l5nkwaf19g29rpc4m6qz27h2";
@@ -7361,8 +7748,8 @@
 "sympytexpackage.source-0.3"="lzsz5ly9rnzph5nxnaqbf9nf5abm302c";
 "synproof-1.0"="bv32jflr6n3jdm93xxpbvhz1lrhc3i9v";
 "synproof.doc-1.0"="i74i5km7n20hglq2icb62xcc2pl1fawc";
-"t-angles-2019"="an3w3nw07gc6hyzfjk4bd0j4swj8qr4p";
-"t-angles.doc-2019"="68ylwxvywabhyfqzlb7d642cmhdj3g2j";
+"t-angles-15878"="an3w3nw07gc6hyzfjk4bd0j4swj8qr4p";
+"t-angles.doc-15878"="68ylwxvywabhyfqzlb7d642cmhdj3g2j";
 "tablor-4.07-g"="fs9vl9gi63j8bqgiv06dbhbgs2vl1c8r";
 "tablor.doc-4.07-g"="k3d87x83igkq78j1yvav6b08y818qgz9";
 "tensind-1.1"="f76zwp7giabai57l4ryzin9s4b412g93";
@@ -7370,17 +7757,17 @@
 "tensor-2.1"="4gzhhxr2w1bbwb0yf799siazn5d6538j";
 "tensor.doc-2.1"="j4hxlj9f804ffrdp8pf06mj79yb8j6qy";
 "tensor.source-2.1"="89fmh96xlj21pm07c80q9cgiaj2a3c3r";
-"tex-ewd-2019"="725h0x4azacxb6pi7bnrvb5gb2b6rb8l";
-"tex-ewd.doc-2019"="npk74dnjx7jy9392pz0m4fzxcxqqsqq5";
+"tex-ewd-15878"="725h0x4azacxb6pi7bnrvb5gb2b6rb8l";
+"tex-ewd.doc-15878"="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";
+"thmbox-15878"="5b8zyq68dw8c7cylg28k9bmx261k8d5p";
+"thmbox.doc-15878"="rpd99zkmrb85kgldsyi2iwr70q9n8y35";
+"thmbox.source-15878"="hnjviz4vyw78mg6lbcdyv88qajhjdh6w";
 "turnstile-1.0"="c4nm39zwakha4bk75092371db2n0nx4m";
 "turnstile.doc-1.0"="w2hv466gzdsc7vp0al5xk7bwa83szvr2";
 "turnstile.source-1.0"="8p5g2w1pcaxhg2a54rq2h23zd7cbj60h";
@@ -7390,29 +7777,31 @@
 "unitsdef-0.2"="j5dhzwnaizymvvj0cvvn8hcjgpiaw3xj";
 "unitsdef.doc-0.2"="m3n8c9wpk9m0il8yn3ip4kwvlbyzfndw";
 "unitsdef.source-0.2"="rpwd7p723jsqcmcl28kkfg3fg9dmyfxa";
-"venn-2019"="vxgbc1jmchjsq3aq1wklgla50p1smqnz";
-"venn.doc-2019"="3z1kgbyilhajm6przv2a1rbdl55fzhqj";
-"witharrows-2.3"="bw8ywli9cayfdnwb9px15swidxd5jfg4";
-"witharrows.doc-2.3"="z0hfhxl5c90q7p3qgbw9p7kx0vd1nbzw";
-"witharrows.source-2.3"="8jvhy950w2icgzbdgicr00qhicxnxpc2";
+"venn-15878"="vxgbc1jmchjsq3aq1wklgla50p1smqnz";
+"venn.doc-15878"="3z1kgbyilhajm6przv2a1rbdl55fzhqj";
+"witharrows-2.6c"="sp11d634nsll40s638mj7bqyighw78ij";
+"witharrows.doc-2.6c"="w0xd5ki72g0xc8a105dkv3csdf5dj5dj";
+"witharrows.source-2.6c"="7kpl4j20j3w3wdjv9f2wm3v4nmv2xlhb";
 "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";
+"yhmath-1.6"="n885plj280iqd602vlwq2zfca3s2ijsv";
+"yhmath.doc-1.6"="ibxf0fn1wpahfjmz7q7jl0afi36qxwzg";
+"yhmath.source-1.6"="pg1hx02jxyjly4i5la4lip29kkpf4pf2";
+"youngtab-1.1"="0pni2w43573rjhi2lygsg7547n3fi3ic";
+"youngtab.doc-1.1"="1svxp5r9wmqszr860w9nx6b60nv1qiq8";
+"youngtab.source-1.1"="3f54467ky4ban6xkqcldajyr4gfy7mm1";
+"yquant-0.4"="rn4h82i7j2lp0mrqz3xxya57w6hcxqlb";
+"yquant.doc-0.4"="8wh9xpj7x2b2g6asvvjharbs1l5fawmf";
 "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";
+"bbcard-19440"="b26d8663qv8x23sp8q04c8jzdw49f2i5";
+"bbcard.doc-19440"="99jqw22g1xcqdn4q5f408gvlzwnl7wbm";
+"blockdraw_mp-15878"="al2d83amvpz7z19a14zxn4ib8ayc7b9y";
+"blockdraw_mp.doc-15878"="n0a85bchn27q09771kx4idy7hic8iq42";
 "bpolynomial-0.5"="rwijp2lyphgyixi6l1d4j9vrwchr2m8k";
 "bpolynomial.doc-0.5"="1561z658ar885xsbg15psi82qjzc4zbn";
 "cmarrows-0.9"="03hcqmzx16n3y4vvh8aj6vrvpn6minmk";
@@ -7421,9 +7810,9 @@
 "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";
+"emp-23483"="brxc803kbnrd6qa1jfag6qxgb7f5j39g";
+"emp.doc-23483"="x8lkwbk13jq48h8ml7a0fzlyn4m8qlxl";
+"emp.source-23483"="ir1ng5an1jbffb2pd5rv412dcfzv84r1";
 "epsincl-0.2"="srznlzss5ag3br4pmwny7aqq7gjmqv98";
 "epsincl.doc-0.2"="993m24spzl4jymn69sczm7a8d1ix0zcc";
 "expressg-1.5"="yd8jja79lbjibls84q1r2iqls9hgfp3d";
@@ -7441,23 +7830,23 @@
 "feynmp-auto.source-1.1"="2iirzys42l2k5fmpjxxsn31wpfzv02d8";
 "fiziko-0.1.3"="v4nq87d4dahjnskkgvgjf1sh65m9gvkl";
 "fiziko.doc-0.1.3"="djw7v20xazg82gkrh6wxw05vmih1d2jg";
-"garrigues-2019"="b6kfrr0zhmbnb1rh93wy5pxq31kspbmf";
-"garrigues.doc-2019"="zk53ay759rgd40fmf7byqpqmibw7rrza";
+"garrigues-15878"="b6kfrr0zhmbnb1rh93wy5pxq31kspbmf";
+"garrigues.doc-15878"="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.48"="j0v1s2iih3v5vminzs0m3icrxp54x504";
-"mcf2graph.doc-4.48"="w241y08nz9qnxw6gysxaj58r3plk3c5g";
+"mcf2graph-4.62"="6j532ny1wgf84c4q86kcjwmlipnkmz5r";
+"mcf2graph.doc-4.62"="l2klmc6c8sqn1y2d6ggrcb6xrqmvc096";
 "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";
+"metapost-colorbrewer-48753"="09l2rf2kja80lsajz4vfp9ngb3z442m7";
+"metapost-colorbrewer.doc-48753"="y3vivxgdjykacm90arls8hhk6k8rkv6n";
 "metauml-0.2.6"="15p3yrkws6by8w8wmrnnxij1kp71sbvq";
 "metauml.doc-0.2.6"="mcgmrgsh7x21ci4n8d0yqy9clx7jp1ls";
 "mfpic-1.10"="lslzdy39sbfb1xa5rv3j0whpg1c8vkj6";
@@ -7470,8 +7859,8 @@
 "mp3d.doc-1.34"="gkjwsbz7sgdj5k6vzvswb4k4yb8xkhld";
 "mparrows-0.1"="d1v4j0hrr4cxm42vwlclvccp1wmvbbyh";
 "mparrows.doc-0.1"="jcf975s8ianx9dmiqa9lvv9ywj62rmap";
-"mpattern-2019"="9ym77kwd2kgw46lck4vbfrbbiwps8g6x";
-"mpattern.doc-2019"="vknyl0b4d4sx2c6l7qhwr4rdmx0ncpja";
+"mpattern-15878"="9ym77kwd2kgw46lck4vbfrbbiwps8g6x";
+"mpattern.doc-15878"="vknyl0b4d4sx2c6l7qhwr4rdmx0ncpja";
 "mpcolornames-0.20"="j7qagfiggfwjqapdrh1z23n0paj54bgc";
 "mpcolornames.doc-0.20"="jd5ai6f2ask0pbhrw46bdw8cfsrfpmps";
 "mpcolornames.source-0.20"="1f0wy1lrg0733vnq5mjwcgdi5rnprbis";
@@ -7484,8 +7873,8 @@
 "piechartmp.doc-0.3.0"="xcn16bgnyi4h8pqaisjivmywg234shgm";
 "repere-19.06"="4lbpfqmnvdw93pmabf34bpj69ww2jd4z";
 "repere.doc-19.06"="fjwv88ysck07zlpclf1fyjs4jyzm4mhx";
-"roex-2019"="3dp1ank88mbkx9zd4gl8v6nxa7hjvck6";
-"roex.source-2019"="fbyyci2hg9bvdbxxv09q9h37q98gzzxb";
+"roex-45818"="3dp1ank88mbkx9zd4gl8v6nxa7hjvck6";
+"roex.source-45818"="fbyyci2hg9bvdbxxv09q9h37q98gzzxb";
 "roundrect-2.2"="zihpsds4r0v44h4bbmmpjgx28y3knqc8";
 "roundrect.doc-2.2"="g6kih4vjqjg4v4qxlxkkxgwhqv0x0pdx";
 "roundrect.source-2.2"="rdydd5cwvnbzjlhdd4kcfjq54rzw9k81";
@@ -7497,8 +7886,8 @@
 "splines-0.2"="bn6gc1n3vbzrns1pzdjc4hf647g6pgj5";
 "splines.doc-0.2"="91g13liz4sfn16vzcvlpqhm388wwvs02";
 "splines.source-0.2"="p527173paps7gqz8wq02jkl6nbx8vw6z";
-"suanpan-2019"="vnglmgbg19g42b79q34fzqr4hjzy7dmc";
-"suanpan.doc-2019"="lvbx0yizc42hgqymw9yscja667h4mz1a";
+"suanpan-15878"="vnglmgbg19g42b79q34fzqr4hjzy7dmc";
+"suanpan.doc-15878"="lvbx0yizc42hgqymw9yscja667h4mz1a";
 "textpath-1.6"="97b12i6v4bz6095z7i7yjf7c3fqg232d";
 "textpath.doc-1.6"="zliwrx3n2r3xjhdi0c80rncxwk5whg76";
 "threeddice-1.0"="91chpiy1n4mg3vcabcm8li91q9lnkcvc";
@@ -7506,7 +7895,7 @@
 "abc-2.0b"="pmaw58frrdbnj81n21mg15yiz7sp0rci";
 "abc.doc-2.0b"="gild9nm8zph2kr6mj9w0sans8r1jz114";
 "abc.source-2.0b"="g8a921yi51lvw6mqj1hxmkwqqh9fkl03";
-"autosp.doc-2019"="h3rkc7nri062hjia5nfx5rdhv6baw808";
+"autosp.doc-58211"="wl80hffrqss94gyl25myw72wib1slz2w";
 "bagpipe-3.02"="z9akwcd2fdwzps3bws9vamik64pyyl73";
 "bagpipe.doc-3.02"="6ssnq5756qnhlbyn08pncriz5la8hpzy";
 "chordbars-1.1"="vdmircid5yrvvywih6m0nf5c6b59mz5r";
@@ -7519,8 +7908,9 @@
 "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";
+"gregoriotex-6.0.0"="ccxcrwsw00hgs68l3ac16dz4ax2753d1";
+"gregoriotex.doc-6.0.0"="bn2wdi7g2xvqckavna6pkywynaspbfbn";
+"gregoriotex.source-6.0.0"="bsrzlxzsnqwwxzy1wy61md9raspr00c8";
 "gtrcrd-1.1"="mqaamg8ick2z265cwl1yd6n81f76y8b8";
 "gtrcrd.doc-1.1"="scx1xk6y85zfbn82aqf3cw1sx0prfmgh";
 "guitar-1.6"="xw88497a60kkbh8pribpsi80bj2wdvw2";
@@ -7528,37 +7918,39 @@
 "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";
+"guitartabs-48102"="zl4w2llxyb1173b4asgk93bh70rxil42";
+"guitartabs.doc-48102"="a9rmk3gr37pp0p4fbfasndjglbbwsgck";
+"harmony-15878"="isfyzam48q2f90vyh78rp5df93wzdfq4";
+"harmony.doc-15878"="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";
+"lilyglyphs-0.2.4"="phvx76h2sah66knx7lxdld5p6q1rshmf";
+"lilyglyphs.doc-0.2.4"="n9rk2zin1c4zm08181ly5yrja4zbhri7";
+"lilyglyphs.source-0.2.4"="6j01hgnkjxfjszhdfynq93zlccqj0z7h";
 "lyluatex-1.0f"="zgh2b7q3w9p0dic23cwddhhx5cqsdqm7";
 "lyluatex.doc-1.0f"="c8739z6r5mpk001ra6if93kfw799rphi";
 "m-tx-0.63c"="jjs536dwc3qbi72s4d7qr8v3b0rxd41g";
 "m-tx.doc-0.63c"="ji5fl4sdm5mdhkkg4qf33gzaaqnw8yg1";
-"musicography-2019"="95nsr792xkvyq2kp95yw9z99j40c9dsv";
-"musicography.doc-2019"="z63rsy6v54c4p1l844ck0b6hc9fwr96x";
+"musical-3.1"="cam79g75i6blbgd4m7syi432dn4zar9g";
+"musical.doc-3.1"="xi1lz7w68jab89ihx1j1kv1dv8z2nlmd";
+"musicography-53596"="95nsr792xkvyq2kp95yw9z99j40c9dsv";
+"musicography.doc-53596"="z63rsy6v54c4p1l844ck0b6hc9fwr96x";
 "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";
+"musixtex-1.31"="2cl7fw84mii0n2v2rvmrprbr2yinvpqv";
+"musixtex.doc-1.31"="0anlk9gnbpgzasrdbv0685mgi0zfkr5l";
+"musixtex.source-1.31"="kb90c2jhgmx77d12x4rg6yivpiq5rxq1";
+"musixtex-fonts-37762"="a8kdi135xis6qcwy90yisg4wafklmw2y";
+"musixtex-fonts.doc-37762"="91fl3b700pvjqkwsl6h29f0z5i5781s3";
+"musixtnt-40307"="6412y8lh8awml9xs7ybcnhkgyjrc08vx";
+"musixtnt.doc-40307"="44c1fndj5grvw5q4jxyk0dgqxr56lzvd";
+"octave-45674"="6yb1bajc26k0pbr0a02zx2zqg7y0rnj8";
+"octave.doc-45674"="152jq3brzf99xwq983k2afrdlq5lhazb";
 "piano-1.0"="vbbcddqx5sk4gg9w1882g4a8lrnnqn2d";
 "piano.doc-1.0"="bn1c29lffw62jsyiygh3i0biaaz0asmv";
-"pmx-2.84"="hamhslbh8fhjjvzvksg0c9xkjwv4kajw";
-"pmx.doc-2.84"="1xm3b6ywqzn0z79yjncp0104ap1dhqkg";
+"pmx-2.94a"="rcpl81h8ysm1v188gw3gnwvqhr29w8ii";
+"pmx.doc-2.94a"="wrkr9pnwci0852bs60whifpmj432rq97";
 "pmxchords-2.0.2"="wwn3da9f9br7dpfhq7yg9j2f64bb9183";
 "pmxchords.doc-2.0.2"="f33mk2mv8pjl4ikg3kvig5lr94iwrm4m";
 "songbook-4.5"="jimhdkxsiqzkwnsjsw1rynkrfhhh5n0d";
@@ -7567,24 +7959,25 @@
 "songs-3.1"="1air4zpymnrajglbvp8yyfd3z4a72d8g";
 "songs.doc-3.1"="xcfy7all4n141r55c17gsnxj8x40dlqx";
 "songs.source-3.1"="2wx7qd5hzairbrb0qcs6mnkk10l81jh3";
+"xml2pmx.doc-57972"="3i460bimzfapdyy9j1rvm4yv1cwzkjgw";
 "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";
+"abbr-15878"="n55llxl7fjmx6p1z3ckjfj94dxkg1n0v";
+"abbr.doc-15878"="9lgcwpp4fw2zjx2rsp9w5szi6v2pdsn4";
+"abstyles-15878"="2zmzwsgwh4rv6ysnjjk35cihbifs0jir";
+"abstyles.doc-15878"="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";
+"autoaligne-1.5"="1ycql6wzhqayd90wkd62n5bqymwr0z9h";
+"autoaligne.doc-1.5"="72b0nqh19zipzzv46z2hhkkv8fg93ca7";
+"barr-38479"="rsgsgzki68jgx8d4r05qj1awvi02rm33";
+"barr.doc-38479"="jfhxfjazvlpcvrl6zjd1sw2ghmcsscmr";
 "bitelist-0.1"="22q3ivacwl5p0c8plgg1gjz8413l601b";
 "bitelist.doc-0.1"="n00mlj88l6djwcxzj0l6pxiiba94kpl3";
 "bitelist.source-0.1"="w38ccrprx1rn0pc34mr29bnx7gaxa7k8";
-"borceux-2019"="ls6xjxrggjzphr4pl71m2va9mndh1r7v";
-"borceux.doc-2019"="zdg5n9rxc2sfkyi1am8jka05avi7hyng";
+"borceux-21047"="ls6xjxrggjzphr4pl71m2va9mndh1r7v";
+"borceux.doc-21047"="zdg5n9rxc2sfkyi1am8jka05avi7hyng";
 "c-pascal-1.2"="m4x5kfq1vm6vzv0ic910fqi1qijn7g34";
 "c-pascal.doc-1.2"="v6wqph0gaibfv4cwph5w0axp5sf70m6w";
 "catcodes-r0.2"="haljpnhhzvyhmnda9vgk77md5zm88773";
@@ -7592,51 +7985,57 @@
 "catcodes.source-r0.2"="6ljn2lwg4bzr9c02d01vh0saja9sz9yf";
 "chronosys-1.2"="qswnnwyghvsbjf3ddvbl7nl00qxwhs6h";
 "chronosys.doc-1.2"="m11jpa7crg095qf03qx7gcrvcb41f83a";
-"colorsep-2019"="il1sig8hzmvq8q0hlbh6fir15rrl5zc7";
-"cweb-old-2019"="vqf99h9w57jmd9r6l9k8bydqxmm2d9i6";
+"colorsep-13293"="il1sig8hzmvq8q0hlbh6fir15rrl5zc7";
+"compare-54265"="3y2gpllzn6bdrpgyg32vswiz66dzi1rq";
+"cweb-old-49271"="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";
+"docbytex-34294"="m4jkx2gf05q3ffwfkrk4x9bcwf9f3dmw";
+"docbytex.doc-34294"="01w9mkddxm1l9i12i5n5i5ar81xfn9b5";
 "dowith-r0.32"="vdgkjxphpmycfcsimxih7gnhv58hd9vs";
 "dowith.doc-r0.32"="ql8hdyxcgss7rvlp1913rp52wn4wjvxn";
 "dowith.source-r0.32"="xq0r5c58clz8qzbhz01gv2ph1rs9wg1n";
-"eijkhout-2019"="hdb3ag2knc67ksx39hmax8x83l0d41kl";
+"eijkhout-15878"="hdb3ag2knc67ksx39hmax8x83l0d41kl";
 "encxvlna-1.1"="kz3nvz29czk573cxbi5a5l3mbjs3vfkh";
 "encxvlna.doc-1.1"="gv5k36s89g2zslq75s2j7ffvwdiz4lkb";
-"epigram-2019"="0mg36ybg934n4jxgpf88lnvvc0za59ya";
+"epigram-20513"="0mg36ybg934n4jxgpf88lnvvc0za59ya";
 "epsf-2.7.4"="55vrh3nmvb5p1nkkpwhrq9glsf64bc3k";
 "epsf.doc-2.7.4"="b78n5gm14qk3brywpz4prglkqnpx9fpg";
 "epsf-dvipdfmx-2014"="qvf8n367wnjahzv8bgh7rmqqgnwraa0p";
 "epsf-dvipdfmx.doc-2014"="b290mp5xqfqzzxa92s9j798qyycaph9a";
-"expkv-0.5a"="xnl73p0bmq99hqa4fppvq3an3k1p979m";
-"expkv.doc-0.5a"="n7wyvph311yln9rxfzwsslv55lbyyh7m";
-"expkv.source-0.5a"="qg7k550dwjlhhhi1nslni2kg3238znis";
-"expkv-def-0.1"="ikyjr44zb8r02pr84pvhs7dh3xfly5b8";
-"expkv-def.doc-0.1"="h950kj1mhnm016d8vn9jr8iss4kbis8a";
-"expkv-def.source-0.1"="zn84yaddaaia0169cjjsrp70y7dq2mr7";
+"expkv-1.6"="x19fg4al6xjan41l07dkf7lgp6akgw6l";
+"expkv.doc-1.6"="16ny94yijql35j0klhdbpvvb7l2rv8bf";
+"expkv.source-1.6"="92z0fwgv9jf2v47cvrw3j1zz9mjzwymj";
+"expkv-cs-0.6"="r6f8mb6qxasa09kz9l1lbbs3r0dzbr10";
+"expkv-cs.doc-0.6"="d708jfhsdxzpgbp6p2i1176yd0fpaskm";
+"expkv-cs.source-0.6"="daw8zwynx2xhxbph8r4cbnwb5drcvmxg";
+"expkv-def-0.7"="j4w7rgirhfl57mz938fbm512z394ycgv";
+"expkv-def.doc-0.7"="8n4pxgxg9hpn4zajr5f2w5cj58bcxm4d";
+"expkv-def.source-0.7"="iv5pzka6a93yg9k6ry0kcfzkafzkdvv8";
+"expkv-opt-0.2"="hsgf1g43vldqxasfckr4phhs53habwgy";
+"expkv-opt.doc-0.2"="hvpm4vw4kz9h72h0g0mnvmfal3giy04q";
+"expkv-opt.source-0.2"="g37rzfdqm8pkzhp89ni3fgbbbja0dk4i";
 "fenixpar-0.92"="61jkr83g6i0bqmp0qg4w09gj7gwcdn96";
 "fenixpar.doc-0.92"="95h02nbzq72mmblzawgqsk8530wi1dpb";
-"figflow-2019"="166qngk7yy25v0rbjavi53m0sazk90gn";
-"figflow.doc-2019"="l92iyzsg4fwkc3nalswwpnz99kfcm1q9";
-"fixpdfmag-2019"="8djdk0baqcg84v6qrmdzckq7k97h4nkv";
+"figflow-21462"="166qngk7yy25v0rbjavi53m0sazk90gn";
+"figflow.doc-21462"="l92iyzsg4fwkc3nalswwpnz99kfcm1q9";
+"fixpdfmag-15878"="8djdk0baqcg84v6qrmdzckq7k97h4nkv";
 "fltpoint-1.1b"="q48n0d38d8y8m4z6lgmfza4gh1mrzkjn";
 "fltpoint.doc-1.1b"="6ljc5c3g53ig6yj7blcfqy43yvlw5fqf";
 "fltpoint.source-1.1b"="l5ybd1xn6abfhq5kjhvig8zsp721ldzg";
-"fntproof-2019"="bkh1b1j8zlbzmhpif5ji82gwmvg0aprj";
-"fntproof.doc-2019"="hhhxpfkwqpdj0wz78pzg4nbfyzh3j82f";
+"fntproof-20638"="bkh1b1j8zlbzmhpif5ji82gwmvg0aprj";
+"fntproof.doc-20638"="hhhxpfkwqpdj0wz78pzg4nbfyzh3j82f";
 "font-change-2015.2"="rvxfsxkwag1pzhh448n737b6ngadrlyg";
 "font-change.doc-2015.2"="14ck6s61lx6gyqmf6i9659lvwd3zh6hs";
 "fontch-2.2"="0h81qy37h3jb2m6g18969189a1jbi73a";
 "fontch.doc-2.2"="csygimfjbm36zfm403jz4kw39zv23zzb";
-"fontname-2019"="mgggfwq9ds3bc2mblkx5rday7dgmq1i7";
-"fontname.doc-2019"="vg79z64v459vl42ba50sar4dhafwr1f0";
+"fontname-53228"="mgggfwq9ds3bc2mblkx5rday7dgmq1i7";
+"fontname.doc-53228"="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";
@@ -7644,8 +8043,8 @@
 "gobble-0.2"="r1knqlpg1ndgkvkmi038jy9g450qm2k4";
 "gobble.doc-0.2"="kpgjg6n4p17fvw93qyih0xslid4x7w66";
 "gobble.source-0.2"="i8dh8xayn1a2lsslnr8wygj0qr168wpx";
-"graphics-pln-2019"="xgwh2sl1l9ckm86ng0pkk49iiajvpvkz";
-"graphics-pln.doc-2019"="0f496bqsp8ar70sw10kkspqpwldwabj6";
+"graphics-pln-56823"="ny2glbxpiyxv0b9nf254h3fs08cqb7dg";
+"graphics-pln.doc-56823"="c9rd01qyp0bcngq6cv997zkqdzsgbb8d";
 "gtl-0.5"="bypkgzwx7y2srhdxv94a9zvbyxkbwgqh";
 "gtl.doc-0.5"="777isinskwws7m2b47a0w26w9dsp01qd";
 "gtl.source-0.5"="di1lh2gf5xc3wk34q247zvgvgnmnwdh4";
@@ -7655,24 +8054,28 @@
 "hyplain.doc-1.0"="37fvn4xi8ibli2622n1adyzgnnhrs05n";
 "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";
+"js-misc-16211"="shwn2dwi83plybk71sjp3i1drw7xxd18";
+"js-misc.doc-16211"="ppwwslknxds8l1spalpgj950n9amsinz";
+"lambda-lists-31402"="kpvnf57b1s1whhrrrng7j0zvf0cka90v";
+"lambda-lists.doc-31402"="ai0gzwilj0cm1129pl5nlwc9ddsgpchk";
 "langcode-0.2"="6fwjx029l2nalfz81qfn1k7yp0z7iycb";
 "langcode.doc-0.2"="vq8m73ckjicm53q7v8q5k0rhldq55hkc";
 "langcode.source-0.2"="nk07pqb0mfq3vzpdddhb8w3w85svpbq9";
-"lecturer-2019"="4014kfbhxnf4wb9ndfh0qfwbbrvz0wwa";
-"lecturer.doc-2019"="avsvzihsa6jn0abvd4122k358w5sf4y0";
+"lecturer-23916"="4014kfbhxnf4wb9ndfh0qfwbbrvz0wwa";
+"lecturer.doc-23916"="avsvzihsa6jn0abvd4122k358w5sf4y0";
+"letterspacing-54266"="w55cy2xlk67hnnkiy52yphhs0872ziaw";
 "librarian-1.0"="5siy7c2xclp1c305vqiayp0n5dzil1gh";
 "librarian.doc-1.0"="8nxz7ac5hdp9820nsfkvhvv0bn55idq2";
+"localloc-56496"="hcdniqi3g6imzllxn25y7haqhm08skqd";
+"localloc.doc-56496"="yjhl0zlaw7kirncw6gsddk4zq6zj6468";
+"localloc.source-56496"="ivj8kyznfxsx7afgy8qdwd8p2q8rga73";
 "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";
+"midnight-15878"="5zah5lcyxgq6zxdpazqy3lqv7vxl9dcr";
+"midnight.doc-15878"="cl4ff07jfflwqpmbi7d1phc65hvhaif7";
 "mkpattern-1.2"="q3wl8iaijlhsg5qx35f5gcmz6gwj543g";
 "mkpattern.doc-1.2"="8hx2z63klm8dmyiyfg069qy4vf5qzc4f";
 "modulus-1.0"="ia3l2fxzy8dvm42nil9c3c3hgpg65kj7";
@@ -7681,20 +8084,25 @@
 "multido-1.42"="xvw8537j730srqyigrb1q367g73zh29q";
 "multido.doc-1.42"="qp7jdx0jca995df559f1ji2l32jz2h12";
 "multido.source-1.42"="qc1473wf17ppqxy11xgz226w4d8zrxk8";
+"namedef-1.0"="131apf57396fjyfmx4cvp3hg8gsa1jrm";
+"namedef.doc-1.0"="g7mljk50xxvvvfqgk239p12vmx92n2w3";
+"namedef.source-1.0"="kydzzz750a76fisf14l48d691n0hkhd5";
 "navigator-1.1"="0q23aqjf31y78hxmlhx4mf04c95rwdn3";
 "navigator.doc-1.1"="vxgrfimg900qa0ibwpbwcbv63rbaplp3";
-"newsletr-2019"="1hrni43c6y624w9nryc8q8rd4w6jjap3";
-"newsletr.doc-2019"="p8jfq33i8ah2a35a7d1rb0s3dz0nicvd";
-"ofs-2019"="1vqjznrdyjqn6ygq61h8rnwjymkx5kpj";
-"ofs.doc-2019"="8i8acpk75frksj5wshpjpcazbd93whzy";
+"newsletr-15878"="1hrni43c6y624w9nryc8q8rd4w6jjap3";
+"newsletr.doc-15878"="p8jfq33i8ah2a35a7d1rb0s3dz0nicvd";
+"nth-54252"="p28w9qvwvvmi4v6gz5dp0hzv3pdp1qrm";
+"ofs-16991"="1vqjznrdyjqn6ygq61h8rnwjymkx5kpj";
+"ofs.doc-16991"="8i8acpk75frksj5wshpjpcazbd93whzy";
 "olsak-misc-May_2019"="4ymwq2jcmf4gs1hrdj93sgi2wibicw61";
 "olsak-misc.doc-May_2019"="dxc35x4yc0y4xk6488awgkc5qb32kl6p";
+"outerhbox-1.2"="q01b3lhx53dbrm55n915crjmkgks4xj9";
 "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";
+"pitex-24731"="6hpvvpnw3bp3sa442b33xsphhyx0vk4b";
+"pitex.doc-24731"="b1y9bprx9harpgqmbchh33gwnc8khzsa";
 "placeins-plain-2.0"="b0dxmvbqfwm4cycyqm9ir7dl7dbgq37x";
 "plainpkg-0.4a"="xsvwz9z9f2jirfyzggiv49y0rfmhmnaj";
 "plainpkg.doc-0.4a"="b0c8mi4mr6bjdhrwbcplwjw920l4zmbc";
@@ -7709,58 +8117,65 @@
 "poormanlog.doc-0.05"="30li13ybjpmzh5v9x504061shapvmqq4";
 "present-2.2.1"="nll2w203n4a3ka9dqmsl3bvfz4ypsvdm";
 "present.doc-2.2.1"="m39zcb5c59hd26kz8zcnbljh91hjxjqw";
+"pwebmac-4.6.2"="gv4ynbdynbl954ydb4kv2w528f34h456";
+"pwebmac.doc-4.6.2"="bv6ycd7mg887ld51509sc1rvdz5r5vsd";
+"random-0.2"="cg4jqxpqs7nk3a1j8424bjin08xl493m";
+"random.doc-0.2"="kwqbw15h1iwgr4ljcr7qsppi7n7c28j9";
 "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";
+"resumemac-15878"="8kydfyx795317240qryrp7zjvpbcd43r";
+"resumemac.doc-15878"="avh8y1vj230yn8bq0mb0mngrki4h0czy";
+"ruler-1.1"="48pdi6yxiiwdnmpy6822p0baymfgf38z";
+"schemata-1.4"="5zm2s4sph1wb999x39nrwkzaxjrjzyk0";
+"schemata.doc-1.4"="z0lmd61rh0nfqkgrw9q8dldlgq3c6ybm";
+"schemata.source-1.4"="jpdj8bs2fi7jpmc6vd2p9x4yc8sflrn7";
 "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"="0apbz4mw90ykzhkdhd2z8gldg4x2ll1n";
-"tex4ht.doc-2019"="hi6p91idcncr8n8hiz6vb4fpwggm1d78";
+"simplekv-0.2"="xwzqwbgqinc13n4zxjr3wxx1d4z2yfp1";
+"simplekv.doc-0.2"="s1s13jm04rzx60fhvgmqavbplbdhv4fy";
+"swrule-54267"="383zr34k9mhk605cni6fb74lkr144zw1";
+"systeme-0.34"="wnhkgq4fkwrx6hd250ak25pv0ywl8f6w";
+"systeme.doc-0.34"="h0nnqih07bbhw22ph3nd0qprdgl55ppi";
+"tabto-generic-15878"="libhmc3f9mcs93xzi22qhk8nyy0vzv4x";
+"termmenu-37700"="b9z1s2xibg6vcrd5qv1n1zlparqlwf3h";
+"termmenu.doc-37700"="0fqaygp9h3wr9x8ghfkxnsi9w1wfjis6";
+"termmenu.source-37700"="xygav2l9gll238dyqa8126sn9hc1n1w2";
+"tex-ps-15878"="jnzaqr3pc6a2bfh7jlsysc8hy30cq4xp";
+"tex-ps.doc-15878"="g377qq7n63mqil18vlfgimfd589pa1qm";
+"tex4ht-58348"="s88qpzr645059ldj0vwl78qbzj69lvdv";
+"tex4ht.doc-58348"="zp3gcglcmbs85qcfdy1x0rq1nwnfggvj";
 "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"="60l0xkiidy5zi772vzalavb32ynxfbjw";
-"timetable-2019"="ca6qybasxlgqhmlqyjr1dw3n3j2455wb";
-"tracklang-1.4"="78qby69fz9hs5brl0050mwy0xgzjms47";
-"tracklang.doc-1.4"="r8caivpz3lhzlvh5kqv18k5cnvkf58qx";
-"tracklang.source-1.4"="xbjjgq4h1qqa4j2abcf1p61lxgiiahxz";
-"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"="wqamm31mzzm4xw5y4fyrlzr6rm05v1xv";
-"xii.doc-2019"="p1ijdgk0mch86gs858rvkjzjh2yn35d8";
-"xii-lat.doc-2019"="8ilsp524wb5anl3shmdhbnn1nl2c8sav";
-"xlop-0.26"="vjjxxxwsq6pshgia7z796rwmhc5sjqnn";
-"xlop.doc-0.26"="gl0qca1pp05fh8a1baylvl2a26s549y2";
-"xlop.source-0.26"="hdfdp7jn8hch5fydl1zddlfh1av08dxp";
+"texinfo-5.1"="gkg2klh5wz5kbih7pmqacmwv21fzcchh";
+"timetable-15878"="ca6qybasxlgqhmlqyjr1dw3n3j2455wb";
+"tracklang-1.4"="dla1jqizbjlb31drs8bnc09vxqilalys";
+"tracklang.doc-1.4"="nm0wsmwrl78ikmfzn63gl3mp0nh6af72";
+"tracklang.source-1.4"="bd547xxzlhjkj84f40lb3fb5y95q2fwl";
+"treetex-28176"="gkvpkgqggl2s86h7rmad9z3ax6wrq3hk";
+"treetex.doc-28176"="5r9rz97y0r280vn642x65xgcffb073gx";
+"trigonometry-43006"="ji2axcciqhac3aaly221w3bja28yb2nw";
+"trigonometry.doc-43006"="drmmcz6w0mvdzmf10dpikm8iagq3hjyf";
+"upca-22511"="hfay60269pv5n1r64q1r9d0lqljih70w";
+"upca.doc-22511"="czzbjifd9bdw0g9c8s2b76sq1cmw3hjp";
+"varisize-15878"="h0jdsw1dapsq7ml9hibgg9571da7lipy";
+"varisize.doc-15878"="af8xf6nzd3h9fm52gn6xpa886lzdpz8h";
+"xdvi-54338"="g5irfc0gf7bra3vngv6kdbkhbyicdz84";
+"xdvi.doc-54338"="dz4q0d643a261kll9fci78dmgwjkjhbb";
+"xii.doc-45804"="p1ijdgk0mch86gs858rvkjzjh2yn35d8";
+"xii-lat.doc-45805"="8ilsp524wb5anl3shmdhbnn1nl2c8sav";
+"xlop-0.28"="23yzc7hmvhc5dya994k7z6w40w3y8cxf";
+"xlop.doc-0.28"="4xf1rn0g79ykd4yllawjqxlayh5mlhr5";
 "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";
+"zztex-17.7"="kack2q2qi130rm6x49sqlkrv4q31qzv4";
+"zztex.doc-17.7"="x1z2i1zs3xzhcic93amhz4niz3aj44vy";
+"auto-pst-pdf-0.7"="zbmd4qc7wq0s7r3cp1qj4rhv9fn7c0l9";
+"auto-pst-pdf.doc-0.7"="sc37ybh0adfwvzzi8wb8jkhg2z42q2rm";
+"auto-pst-pdf.source-0.7"="wvmqgck46b8qjfq8mjs7s0vfi6ci4rfc";
 "bclogo-3.1"="2j9mb9p1n575pvisvpy7zxhsw8940n2b";
 "bclogo.doc-3.1"="rjmzjjww5vmdzz5qfbsxjmnzz4fmn1gp";
 "dsptricks-1.0"="jrn51r2zwccvvy2dasq0zbf4cls15vy8";
@@ -7774,15 +8189,15 @@
 "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";
+"psbao-1.0"="f1rij947zxm5pm52fyv5q77hl50m7m5g";
+"psbao.doc-1.0"="4km2d67wdfgs010xfx706l9ywkb2wvyh";
 "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-3dplot-2.06"="k15iab4rzyfcq8c02fnbyl0gwzc5aib2";
+"pst-3dplot.doc-2.06"="j1b2dfmfkhhdm0rvc1zppc19w5mnql3s";
 "pst-abspos-0.2"="bbag5d5l1pad71rrc51lbd8k11jm7nn2";
 "pst-abspos.doc-0.2"="70m0f6dbxy9j9iwxx92kj2k4vwqsbrc8";
 "pst-abspos.source-0.2"="3bnsfp2rj4rviirll63zljd7wady41q5";
@@ -7813,8 +8228,8 @@
 "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-circ-2.17"="69rmijifv9f9kjvcwj1b7l77lv6h400i";
+"pst-circ.doc-2.17"="d9jk38iinh9nnyy8g1sdi8va82s83zn0";
 "pst-coil-1.07"="2ai64805vflnfx112c8p0jqf1ad477wn";
 "pst-coil.doc-1.07"="209y878cmqrykmakyy38075dkdfff6nb";
 "pst-contourplot-0.6"="8giwlz62qcmrl9mddfwk9yqp51c01r0k";
@@ -7835,8 +8250,8 @@
 "pst-eps-1.0"="djkk1cq45fzh2q1pvl23aiqi8b2znqrk";
 "pst-eps.doc-1.0"="i903x3p9wwb1jjf5al8azqr3iasmxkyk";
 "pst-eps.source-1.0"="r6jcjqy0f5mnkkahzqf9qnfrgwqh52h8";
-"pst-eucl-1.71"="1g5fkgd7ahplfj08ibkvlhgil0v02l81";
-"pst-eucl.doc-1.71"="3slnpqk8120b4pkxls25bp149vp3nw1y";
+"pst-eucl-1.75"="r692b03azj39wcfd50ig1jz08mg8np1c";
+"pst-eucl.doc-1.75"="lql2a421v71snavwrsvrx4p4fpnxnn29";
 "pst-exa-0.06"="1jqv019148d2s5n7cmlclldqd3mzk08w";
 "pst-exa.doc-0.06"="v45ljmsk7y4p256vikzyk7w0z1vnybqz";
 "pst-feyn-0.01"="k5fpn50px7b2i9bq48qd2xwcdqdfwrnp";
@@ -7849,21 +8264,21 @@
 "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-fractal-0.11a"="ihilgmdfalqmq1q57md183ymms6xadvl";
+"pst-fractal.doc-0.11a"="ncmn8bijlbc00y5zzs99gn15bbvwfyls";
 "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-func-0.96"="1aqk5ndm8gw3xynxqw6ki6cmwqw5ylmn";
+"pst-func.doc-0.96"="chw5jzcl3xh0y7rsma6pqpi6rp6bwvxm";
 "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-ghsb-54074"="rzy3vznyr6jd0b0vr9h6ajlqc11bp9rz";
+"pst-ghsb.doc-54074"="5w079f1q4w8yxs4546qzx2c21vrhm2ym";
 "pst-gr3d-1.34"="wpbib4n4j2fmgbirhq8xha4di6f3w1xa";
 "pst-gr3d.doc-1.34"="ipap5gil3j6hkdcl1l1y0a6fnj754zq9";
 "pst-gr3d.source-1.34"="l6i8dnqgpl8iwsmbhiw3a043pbxb3k7m";
@@ -7902,28 +8317,28 @@
 "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-node-1.42a"="5kp8akd3xr2gfdynjilxk3igzlmc7drk";
+"pst-node.doc-1.42a"="0xfbfzhl2zkcdbnh5xxkchy981f9zizn";
+"pst-ob3d-0.22"="nymkccb9nwfqiiphmci238qxj9lk58w7";
+"pst-ob3d.doc-0.22"="sji0zdf3ylh4kj0vlgl0s7xqimiwh29i";
+"pst-ob3d.source-0.22"="jq2d3wiy1sgx8xm8izg0yd443aqps44j";
+"pst-ode-0.15"="h9xbq9v6cczaj80mmxic5vq4x2xclns8";
+"pst-ode.doc-0.15"="kfbn4ix8w9dkwn3ii3ciz2x20gz7acxp";
+"pst-optexp-6.0"="yld4g9b8cyxawzwgfavq3fzbm2j2qk14";
+"pst-optexp.doc-6.0"="gd54dvmww7gkdng7p1by02ab5ji9m3dl";
+"pst-optexp.source-6.0"="zhad57ws53m6h348smnbajpm6jz1rfv5";
 "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-ovl-0.07b"="9p419xds14qnxz308fk8872vrc25gfy0";
+"pst-ovl.doc-0.07b"="sqfllifxpng72ycciw8y46wqx74lfcq1";
 "pst-pad-0.3b"="x3762zh9c5shzl02r9ssykd2a0rqpk7k";
 "pst-pad.doc-0.3b"="ymjpw81y22mbmf62735kqi80yhylvazg";
 "pst-pad.source-0.3b"="7cqccc3ps8qdhbykgc6yyygjds46p5av";
-"pst-pdf-1.2e"="xjrjc29wwwlmk93x6i8ai8faazrvh636";
-"pst-pdf.doc-1.2e"="mj3572ny8nxvx5v4yrsn2dwy8x8pl9ln";
-"pst-pdf.source-1.2e"="v7byw0kwvl3ahlc63sjm0vas058bxbd5";
+"pst-pdf-1.2f"="b6y40i1cavghj4c5q1n71g6m7ncpw40h";
+"pst-pdf.doc-1.2f"="hhii0z91g0wbcqi3xsa6y0g1sk2sa0md";
+"pst-pdf.source-1.2f"="vdbn9r619v5ww220igdv9v844720ypkw";
 "pst-pdgr-0.4"="cijfx5hq5ygnchsgdw7ly5a43a5v6cqb";
 "pst-pdgr.doc-0.4"="s94gqhws251skwh2ap0b3hlvpp818y0z";
 "pst-pdgr.source-0.4"="s2zbikk5v94207zmrmnlpr5bx3jjzc5i";
@@ -7940,8 +8355,8 @@
 "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-qtree-15878"="6slxqgzm8pzscdf79x1y4zp3rav425g3";
+"pst-qtree.doc-15878"="9bp342h5rimv9wyjncj9m9bb3x2pb77p";
 "pst-rputover-1.0"="39c8h8wq8rcby34dnpq8f9d87zlfd0p8";
 "pst-rputover.doc-1.0"="apm70lr0xn7hgj16acpcll9wd3jcxqbn";
 "pst-rubans-1.2"="akzd33l39b9gh53hkqzaznb6j6rrbif5";
@@ -7966,18 +8381,16 @@
 "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-support.doc-15878"="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-tools-0.10"="459qcdqz4aaidc51k1yb4d2avbi2s2pl";
+"pst-tools.doc-0.10"="s3qcq12jq563x97qk9b3adv9wqra5h69";
 "pst-tree-1.13"="l1m6c66jv4v02n4mjv9ddgh84qbyllqw";
 "pst-tree.doc-1.13"="jgcx73vrpiwvlq9rg1iszm57bj1qsr73";
 "pst-turtle-0.02"="m4g2qpqvzb71ax94sqcvzzpjzyxs4bzb";
@@ -7996,13 +8409,10 @@
 "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";
+"pst2pdf-0.20"="0j8jdmyyglah1883y8m84c7qxymc8g1f";
+"pst2pdf.doc-0.20"="vl6kda2lb2nhwhp1cfbgn4zhbfi1gz5s";
+"pstricks-3.01a"="59bjzfqwbl5hi2inpzyk683wwjmk24nx";
+"pstricks.doc-3.01a"="kswpg5w2v9cqfgjbzslk8dys2kzjm33g";
 "pstricks-add-3.89a"="96y4vwq9y08a0ydk06v808ixsikg0hb6";
 "pstricks-add.doc-3.89a"="kaw6qyrdi6ci1hr7vpfsbgfzqjrvmldv";
 "pstricks_calcnotes.doc-1.2"="4q48najl98h9lb1866avfw6c5ir7p4bj";
@@ -8018,15 +8428,15 @@
 "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"="wd7i0nxrx28rasb5azskxcqvvr2dll47";
-"abnt.doc-2019"="r89hwrrbpwxd45iavd8lr8hfphcrh1l2";
+"aastex-6.3.1"="hr2pdgvn6nj5lpy98kmzd9w5wphhlrd8";
+"aastex.doc-6.3.1"="m7c2djbqiial9g32q043ycxaxfafaf2f";
+"abnt-55471"="gc6hz7sglzshmq5dlm0qzgg10vn3pncs";
+"abnt.doc-55471"="jk11kdy4pqbqxhscx0bqkb46r0z15lh0";
 "abntex2-1.9.7"="zxahr9mb1vq0yfcj35znym4qx2jh4p53";
 "abntex2.doc-1.9.7"="hs3g3ji0knhsh0gmjcz49dvc547wh0cc";
-"acmart-1.70"="1zz9697iczfdiwdh37hx70kvsnvy786a";
-"acmart.doc-1.70"="q0f3xng9vqv1gb7jk8i6c6j7iam9m2b6";
-"acmart.source-1.70"="qrc4gy68w0zkcs904bdabgn7hcxrmi84";
+"acmart-1.75"="76831qm9apd7fgwa45x4wr213snk0pca";
+"acmart.doc-1.75"="4s30kgw83xqzcn9xvrwyb79x1zqb0234";
+"acmart.source-1.75"="1146n4qfma5ysgkzk53rcyla8mf3d8bw";
 "acmconf-1.3"="9wid04wqz4l1xisvlng52xabw9m0p1k5";
 "acmconf.doc-1.3"="66xjqp6a86iq2908p77cz57651av2i23";
 "acmconf.source-1.3"="7ssw68bvkxxixxmf9ygp7szxmc59fvik";
@@ -8048,10 +8458,12 @@
 "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";
+"anonymous-acm-1.0"="h141yi757rprhkm316naq870szcpnm2j";
+"anonymous-acm.doc-1.0"="g57swlg0lqfibb3zp09jbx71fkbx6mh5";
+"anufinalexam.doc-26053"="qb1dvx5ryz6p5dia1z13aa0h0822f814";
+"aomart-1.24"="y442d2i6ss4zm83pcmg35lh2yf628z94";
+"aomart.doc-1.24"="s48yvb9pilz11n6ljsxsjf1iw4jmfblp";
+"aomart.source-1.24"="6435dkc918aiq8g3lnvj0a58c26vll8k";
 "apa-1.3.4"="g7ywm2jp0b70qdwmm59m4rr8glx3wc66";
 "apa.doc-1.3.4"="vjg7gj1wi6mb9b1qyfsznhgcbvivdn1c";
 "apa6-2.34"="gq1rkj5hq03b1sp0a1gikw2vbi4a1z7l";
@@ -8060,11 +8472,11 @@
 "apa6e-0.3"="0bilb5nbgi83kp1w7d1kci1akg36nv1z";
 "apa6e.doc-0.3"="p7ir3azb68s9pms0gpa968gffr2qr0xw";
 "apa6e.source-0.3"="baqh9z3mlxqy4kklhnb9a66gj36lnhxk";
-"apa7-1.04"="ya377hz6phq6nrhshhvfl4q3789z95yi";
-"apa7.doc-1.04"="i567d7p3kfl8h1lgzvry9zg1qzzkpslr";
-"apa7.source-1.04"="vxzyy1zhh0409q64dnvf0ns8kdfgxyf2";
-"arsclassica-2019"="pk5gn6ifrhj5c33f78d619hq4j3d7nmg";
-"arsclassica.doc-2019"="z21lmz2x0sc7g6gc50j1x0hhzz96ra7b";
+"apa7-2.11"="8b7z10rsc2mxmwh64gi985aam7lf80y0";
+"apa7.doc-2.11"="d794jnpnh1b7x0bcqajmxnakcrjw2nbx";
+"apa7.source-2.11"="rkvqs391j1kmhfgi76j3bgsin03jkdlj";
+"arsclassica-45656"="pk5gn6ifrhj5c33f78d619hq4j3d7nmg";
+"arsclassica.doc-45656"="z21lmz2x0sc7g6gc50j1x0hhzz96ra7b";
 "articleingud-0.3"="45hkl8j1hxdww0igp85iifrdz4g4h18l";
 "articleingud.doc-0.3"="00653rqfzjv2f4wl77vznk2p1pi6f2fd";
 "articleingud.source-0.3"="24wwfplzs8477i5kl1ks5fvkd8w1lv76";
@@ -8072,92 +8484,94 @@
 "asaetr.doc-1.0a"="8d1x4sq5xpgc1kb5ys4dp02i2r1p3ha1";
 "ascelike-2.3"="b7ff1cj0jmbdr6wrvcqr37byak164fy3";
 "ascelike.doc-2.3"="sqynsfl8cm40n0r7v2a7qlhxx6zny623";
-"asmeconf-1.15"="r5xkhp1hiifmkpr5c1w7k7y3adx76c2q";
-"asmeconf.doc-1.15"="x09az8gqch9d65hngi191c2bvlxpd4j3";
-"asmejour-1.09"="ni1dmnhj9i33xk94v9gz28kzqiycg6bk";
-"asmejour.doc-1.09"="z8l4iwp6z1dr180xxwx2gg83n8sz2nv2";
-"aucklandthesis-2019"="gqqynyfp4l80jc7a90by84wjmn22s0br";
-"aucklandthesis.doc-2019"="mqasialmycia8nzmrc2m3d9pwf1a39r9";
+"asmeconf-1.26"="bp2mgyvlzwna1n2kkg8rz3wavfa7vpk6";
+"asmeconf.doc-1.26"="f5yps90iyl7bh7cnqal2h0pwpf997b59";
+"asmejour-1.15"="nilwrvcl7jzvzgv3gz66hqqrhfarfhx5";
+"asmejour.doc-1.15"="yz4n2hjjdh6173a581b8ncvaai3yrzxw";
+"aucklandthesis-51323"="gqqynyfp4l80jc7a90by84wjmn22s0br";
+"aucklandthesis.doc-51323"="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.2"="3iw0z4i51jw3p3h6s2v6ajvgmqag9mfm";
-"bath-bst.doc-3.2"="vc36qwvdx188zcrhbb5wp4y806grwfd3";
-"bath-bst.source-3.2"="14smap4zd5h7nw7ygiwchd7109xb857h";
+"bath-bst-4.0"="n0l3wi2cbx89zc0p4slqydrp9brqsqpf";
+"bath-bst.doc-4.0"="fi61fvr0sv1191qvm1xslr1ppr0md792";
+"bath-bst.source-4.0"="vc8ipiy9ha9j4yzc5k4xghmwfbh0fz9p";
 "beamer-FUBerlin.doc-0.02b"="k09b82znxfk7gi7cxpkffs65v3q5siph";
 "beamer-verona-0.2"="jgqm1267x276xsdikvc586h946xfzhcv";
 "beamer-verona.doc-0.2"="skxiv6nxw4vk3c7ppl2bripmlkada52x";
-"beilstein-2.0"="1lpc46w3g3bs4bgn66bg5bl5nzbcqsqx";
-"beilstein.doc-2.0"="2c6l8nqzk8cgzv4hw0l3n5jb538mhjsk";
-"beilstein.source-2.0"="2j7r772lybfdsqw809s86q4vwrblggj6";
+"beilstein-2.1"="05srjjkprhg26zyi8i0wxdazsi1ldayz";
+"beilstein.doc-2.1"="8w2iba8h9nmi7jl4wbpw5jd008x2nlrh";
+"beilstein.source-2.1"="i5zvzazc6zlkl0pyqvjqi2br5k6j1ahc";
 "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-3.0"="bxql4xddw1kcp4jkm8sq9rj0524ikkj2";
-"brandeis-dissertation.doc-3.0"="cjvkrg5lmpkn698yawflfq0z2lpix30k";
-"brandeis-dissertation.source-3.0"="6g1d6w74w02lk2hr8yzgpd0656c3mgi0";
+"br-lex-44939"="ipw7gwrsdv691vnv257w9i15f465irnv";
+"br-lex.doc-44939"="kai74ysi41iw5bc9rjv8saj7qh7n0s12";
+"brandeis-dissertation-3.11"="x6gg26rlwcvaaqpwrp0vjm0abg82aa7z";
+"brandeis-dissertation.doc-3.11"="y0fh6a9qjcfwvn4pa4rxiz904890vzap";
+"brandeis-dissertation.source-3.11"="20gj99chfclhsr997abdvmg7v79cwmix";
 "brandeis-problemset-0.5.5"="x7ivk7r7qvi08kb7jmdajym04hxyhzk8";
 "brandeis-problemset.doc-0.5.5"="zsa3r4xc2kfp00r3jj7mfzdxaphj7505";
-"brandeis-thesis-1.0"="q8pgwqm12272pv5i4wpy2nmdnndksgyi";
-"brandeis-thesis.doc-1.0"="wcdwhg8lng175v4xyg0dsfqdid5s7bi9";
-"brandeis-thesis.source-1.0"="sy1wpmdvp5snrvc0ffn0qm4c5yb77hjk";
+"brandeis-thesis-3.1"="4amlxbgx7ajpqx9lhyiq19ha6cijz6yz";
+"brandeis-thesis.doc-3.1"="ycmbg34x1raw7l3z5f90z37p7i50yigz";
+"brandeis-thesis.source-3.1"="j7b85x32ikjdca33gx4iqrnjxg4dhbbz";
 "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";
+"chem-journal-15878"="8rsrybpvzqr389ip3lfkjna1vy6lclv1";
+"chifoot-1.0"="k9iv6mr24x0fxdylmzma4rcip0dd7lry";
+"chifoot.doc-1.0"="kwyxpsww86h23gs0zlin4niykgjiiqal";
+"chs-physics-report-54512"="ci2816gvc1ds20gh2jiiyyrc061n0ncz";
+"chs-physics-report.doc-54512"="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";
+"cmpj-3.03"="7jvi0lm13xy84p05g5cvdxlvbap821gq";
+"cmpj.doc-3.03"="b2sqxga8rnn5q6k7sz0ijm05jkwggsdg";
 "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-2.0"="h1yrq5symnq9gbgkf2zv4xz1sj7f05xp";
-"dccpaper.doc-2.0"="ih4ds4wmlrfbny1l949bbq90l2l8b565";
-"dccpaper.source-2.0"="vqp1lk8ppwa9n3n8va90xkkibxihid5q";
+"cquthesis-1.50"="6fxwcf7pk35b3brdybcdrj8hds82xyry";
+"cquthesis.doc-1.50"="vw5y17h64nsd337wyaciprxdhfm55sgh";
+"cquthesis.source-1.50"="yxsgl39sk05rh5sz149n17nmilbgkhcf";
+"dccpaper-2.1"="zw5mqpshkvv3xm18jy9cpxggr64mgv2i";
+"dccpaper.doc-2.1"="ld4fpnbbxnl9bbf7v43qr20nn5vvf29j";
+"dccpaper.source-2.1"="h381xhs9isqv3nrxldhjqc460rysx658";
 "dithesis-0.2"="y0xrpjxnblvgahdwyfhm2hag5hss6qzv";
 "dithesis.doc-0.2"="b7ka35ywbrn2m3a6b8cyzyvajwxyvdkl";
-"ebook-2019"="08y1g19fvjskwm55g1av1x8bs95vmc6y";
-"ebook.doc-2019"="kw04pn3a7pbkgxjrn1p12z65j8k4n3fk";
+"ebook-29466"="08y1g19fvjskwm55g1av1x8bs95vmc6y";
+"ebook.doc-29466"="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";
+"ejpecp-1.9.0"="6z822g8sqvwndh8gdcaii3f8pdnk0pmi";
+"ejpecp.doc-1.9.0"="a5kin866l57fzcgp5i3flqialzn94ghd";
+"ejpecp.source-1.9.0"="9jmfaci8rmnmz8lgbc7syd3lsp5f61k5";
 "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-2.0"="yga1wxc0q2s077qvk2hyhnqwxzd4acxh";
-"els-cas-templates.doc-2.0"="lh7a4nhklkk42a0gwqj7sw463gl6qwmq";
-"elsarticle-3.2"="wybpbhzmw2a1h76ik1m7dafh0z83537z";
-"elsarticle.doc-3.2"="1dpvggnxxpyvg331xsgnwnyzrj9sw2hm";
-"elsarticle.source-3.2"="0w53y3wskl6iarnpmdk9c154dp63pnky";
-"elteikthesis-2.0"="5c5y98vwknhynzyyx94hi7s5jl87k86c";
-"elteikthesis.doc-2.0"="brxdx2p6ipx28wf3jm3asn3nc27870kk";
-"emisa-2.2.0"="5ap5gagakjpx889lpiz1knpd3z8fcff3";
-"emisa.doc-2.2.0"="x1qp5j19svjw388qkmccwlh6by9r5a1r";
-"emisa.source-2.2.0"="i3zqwl03w9ff9caf1nafflv8a3gvbdjm";
+"els-cas-templates-2.1"="128x9ixs3cpv1nh2pwx2kp6bhn64kxpw";
+"els-cas-templates.doc-2.1"="188ypaihn3x9p3951vybzl0i725j22nd";
+"elsarticle-3.3"="0hii9fd4wnh10b1scaclvbsq1471fni6";
+"elsarticle.doc-3.3"="wnvrk9yhf2bv69bcrvcfhcfnjb3wv1bs";
+"elsarticle.source-3.3"="ffcj8f3r4p4wwy6aj5c0sk9k9bqp3nbc";
+"elteikthesis-2.1"="mivcwfrlyxmxsrc94vg0ji7sgl1c5a33";
+"elteikthesis.doc-2.1"="20a9fq7yb4xyfnk5x4c1isd3afc4s69p";
+"emisa-2.3.0"="25kpkvf03crgwps8fk5gm6jhi2lvmgff";
+"emisa.doc-2.3.0"="yx0k9dab0wappz1sbfdkl7aciy84qb2s";
+"emisa.source-2.3.0"="j95fvqf1p9ad4ck02nhil1vqwliwhp1b";
 "erdc-1.1"="pmxparxijq91mlqb2z2ci0mk9as4r1nz";
 "erdc.doc-1.1"="a7f0jw1j2l0md2s4hdzv6gb1v867nk8n";
 "erdc.source-1.1"="5rf897hybsib6915bvyp0nai8j7bszgb";
@@ -8176,51 +8590,54 @@
 "fcltxdoc-1.0"="gr5vxdra4lcsljhm591xs1b6z4ci2ddc";
 "fcltxdoc.doc-1.0"="mibli0mi846flzm0id9z0cr8x90rivgw";
 "fcltxdoc.source-1.0"="yn567l5sbbrrdbcmiqdpyq8kq5y1ni1v";
-"fei-4.7"="zcz43y8cv9xsyszz5r9wsd4qw6q4zanx";
-"fei.doc-4.7"="4zsz9sgj2c0grii2dxxcr324wfcbq178";
-"fei.source-4.7"="q19169lgprz5wmd24p4w2h5k5nwppigz";
+"fei-4.10.1"="kmpplq5f0kjyxgpm0qdv8as1dlvn7q56";
+"fei.doc-4.10.1"="f9mk8z9y3fcr0w0c84g0d9k4wm8c9jqa";
+"fei.source-4.10.1"="ffcrmng6846ww2z01hr9bb25qmc0qsqa";
 "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";
+"gammas-1.1"="40731ddy53sm4w57jw24xq0hj6qklqsi";
+"gammas.doc-1.1"="vfqbbxpql32gkxjspmrqkny7rsxw7hqg";
 "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";
+"gradstudentresume-38832"="bmmfv6i9zhk617r9a59yz4m0g14s1q1b";
+"gradstudentresume.doc-38832"="xw0w9hwnyhb6xszynfvz489c9j0vyxsk";
+"grant-0.0.5"="n25rm5asji0fx6kkj9n730v1i89ki97a";
+"grant.doc-0.0.5"="fw57a585095x7iszbwblzxb3zkjbxdns";
+"grant.source-0.0.5"="r7hk7fmqdm91xd2g94jzgv5cp1c09y7b";
 "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";
+"gzt-1.0.1"="ijkp9ccl773y3idx94k36d9p1c3fmdhq";
+"gzt.doc-1.0.1"="lq06nyg8s12aksb2br4mggpim9sp6zhm";
+"gzt.source-1.0.1"="36gbqmrzlmsapigvjkgzgd372wq7pm6x";
 "h2020proposal-1.0"="sdm13gcvhga8q32ai16mnz2rfsnwb7bz";
 "h2020proposal.doc-1.0"="8nsjvgzyw9137ncq9v48dhlncb10snyn";
-"hagenberg-thesis-2019"="173nwqf3ckrpf7l9clx68sbjv2iamqff";
-"hagenberg-thesis.doc-2019"="8q67qw9cj4lrbxs585ymw56q029s5apn";
+"hagenberg-thesis-56798"="q22ijqqwcxl09k2b7p3hqmn1dxk8h5yk";
+"hagenberg-thesis.doc-56798"="i1nfmw31ssxmn5s0dyybymlvm14ij7hg";
 "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";
-"hep-paper-1.1"="c1nncq2hhlxyqxi3lmzxlfsl56055vbw";
-"hep-paper.doc-1.1"="389fq3rmlk4cfz23mwpdp86b1z73f2fg";
-"hep-paper.source-1.1"="0lay616n9djpqhi5xi2yqp0wdajf2zyq";
+"hecthese-1.4"="8ipql2rwzwaaqc9az5syb4ny89c75d3z";
+"hecthese.doc-1.4"="aily0d12b24n16ah6d4chb96vvh2ppwb";
+"hecthese.source-1.4"="2m08qjacg4y5rvk16pfyyya1yiik7sry";
+"hep-paper-1.6"="dil9g6bmnpsdfhvxk57gc1z19sdxlqwi";
+"hep-paper.doc-1.6"="nciggxz3kbil9vka01npln99bdcc7yhh";
+"hep-paper.source-1.6"="mppyxf3mm5wdaxzr6zlzw0f9i7nw9vdh";
 "hithesis-2.0.11"="drsv1qaj1wnzsnl1kqzq5k8c4g00xi0m";
 "hithesis.doc-2.0.11"="anqnh1ra6l9fhi0xmgks1yj46zp58irp";
 "hithesis.source-2.0.11"="a7nrjypxwi5m6l49paqc182jz5yh96f1";
-"hitszthesis-2.1"="zf5r34bsbmdr1fbvpyj2hc4b4z7n3lhj";
-"hitszthesis.doc-2.1"="lpnnwzsg7bwrdcskhbhlhaihssb1lbbm";
-"hitszthesis.source-2.1"="b8i11x2kkrjpfliq0b8jxr8qgpyl4m8a";
-"hobete-2019"="k2agw9n4s8imsfi399r1n3v80sdxc41s";
-"hobete.doc-2019"="n60jvwc9ca27sxbyjam8jpp6b73ydc4g";
-"hu-berlin-bundle-1.0.4"="m39x7czjhkqd5yliw1kj3iwnpyqmj5jp";
-"hu-berlin-bundle.doc-1.0.4"="rlza70v4mslnyiwv1xz8gpk0sdlfwivq";
-"hu-berlin-bundle.source-1.0.4"="256nqypzyp0i5r1srs94y6q1qgpxgm3l";
+"hitszbeamer-1.0.0"="d0wbfsacf7bddq6h4hk1d9pgm108bsdh";
+"hitszbeamer.doc-1.0.0"="pnv5g2xwjnlb9v1h9a2q1iqpbyi6rjb3";
+"hitszbeamer.source-1.0.0"="7hfpypq95z6cj5jxvmhnmwsclw6qmvmk";
+"hitszthesis-3.2"="q9kd5k3yfv9wxzwawqm73fvpxb9q1nbx";
+"hitszthesis.doc-3.2"="hna1361zmxcxv579whhkidgq3ydqnzqn";
+"hitszthesis.source-3.2"="wxvimwcr2wjmqr4f53pkz9mfwjabx25h";
+"hobete-27036"="k2agw9n4s8imsfi399r1n3v80sdxc41s";
+"hobete.doc-27036"="n60jvwc9ca27sxbyjam8jpp6b73ydc4g";
+"hu-berlin-bundle-1.1.1"="2fdlh1pngcac1bmllvbmw83dqmc1i50s";
+"hu-berlin-bundle.doc-1.1.1"="y3yczz5dk5k9mibs1530934sgh5argwb";
+"hu-berlin-bundle.source-1.1.1"="4cim2cvm6jplzj8k1caiqyhjsqvq5wqq";
 "hustthesis-1.4"="f7wr0296h2a3i6vahvrxysl7dr03sihs";
 "hustthesis.doc-1.4"="jknn279nybf7j78y4s99abb6znbkif9w";
 "hustthesis.source-1.4"="j828cim80xhwzjvn6drhy5qzr8sx87w2";
@@ -8234,48 +8651,51 @@
 "ijmart.source-1.7"="y5wyzz6jr5lp0syjywlvdpb3s02cb7ks";
 "ijsra-1.1"="zj3pf34flbmdy98fzmshxdwhsm9gypb3";
 "ijsra.doc-1.1"="pmw844flk212zpdvcp026c63snmasbsf";
-"imac-2019"="w4g9hwgh6wvbhf5v8xfjcba6chqlp32z";
-"imac.doc-2019"="5qid3adma0486l4li4mmrgxl9lykzfz3";
+"imac-17347"="w4g9hwgh6wvbhf5v8xfjcba6chqlp32z";
+"imac.doc-17347"="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";
+"iodhbwm-1.2.2"="2161ysz3fr6ipycjag3zz7rr6ip4pny8";
+"iodhbwm.doc-1.2.2"="4ncbw0vcaxf3bic32ih1znlf3rljbvhz";
 "iscram-1.1"="2pywqaa72mb216nmzl0w8cr74vf200cg";
 "iscram.doc-1.1"="0bd1j3dqs4kgsdaag5wkv7n9zci8qgda";
 "jacow-2.4"="z7ag0qa8hzbihrqij6dha0hm4nkp14vp";
 "jacow.doc-2.4"="c08j0j2lc0awnk2l9bcx022wcxzswala";
-"jmlr-1.26"="0dwhgsxcysh4bfsl1gh1srgm87rfw1xv";
-"jmlr.doc-1.26"="j7pr8rpwjvcf2yssa1kwqij6vw094jwc";
-"jmlr.source-1.26"="a3jjxbjrw1nzny0afpwnfqkliqg9srpa";
-"jnuexam-0.7"="jklladlbjlbr3vc1dyqvzggr87lgwqp1";
-"jnuexam.doc-0.7"="d4mrhs90v6j5pqab9hp86i1dfydvw6dn";
+"jmlr-1.28"="d4dsidg0avjbflvc2gdx6rr48bhrbw51";
+"jmlr.doc-1.28"="w52w3cf4n9dbchs8br6xlfnwjyrjbm6a";
+"jmlr.source-1.28"="2q4bm66ql7grambkhcjsy7qifk1hpz98";
+"jnuexam-1.0"="i5nabjrqbv9q7cf167wvqs2f3c1sla26";
+"jnuexam.doc-1.0"="h7qal4ph3b0fwmasah44ihws53zqjih0";
 "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";
+"kluwer-54074"="y63q5nz0rhxlj362cbj5a4x3wm8imiri";
+"kluwer.doc-54074"="q85mq4id3y04wwq7f8is8lwh7gbzyxxn";
+"kluwer.source-54074"="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.7"="8c6i2a0n5xmyb3swsndk7vvjqf2j4ayg";
-"limecv.doc-0.1.7"="c6mj9fyrr6m53xs2fixsaxcaywdj7nb7";
-"limecv.source-0.1.7"="cvvvclgxbcdiscdsm19pa4qbb8b2h2vx";
-"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";
+"langsci-58476"="463r1jikan2ybp34cjsidb65v7wlpw1l";
+"langsci.doc-58476"="83d8m3pr774kq5x43d2yc8h85j4r6jc8";
+"langsci-avm-0.2.1"="asl3mj4jznkw9zx0qbh73jxxgilkc1s7";
+"langsci-avm.doc-0.2.1"="l5p3s2falcipv9i8zlq3ycsrz6awnf77";
+"langsci-avm.source-0.2.1"="g4dk1j1bcr9nfdq5y719hxaqjh4qq3ph";
+"limecv-0.1.8"="glh4vcp98llwl6ll250wrgkxcw3pa9jb";
+"limecv.doc-0.1.8"="ipr8igc8h0bqm6i884w4nbprhsx5fr9k";
+"limecv.source-0.1.8"="zi78lvpf0qylhawynlzvhdcyq8bx7sg4";
+"lion-msc-0.30"="pyi5ib4528wkrj6hz3w2yv8n7fyjrb9k";
+"lion-msc.doc-0.30"="z6i11awv7drrf7absxkichwc0crzc9c6";
+"llncsconf-1.1.0"="jjhv89zzq8gyc275vj2r8k2slgyh94r4";
+"llncsconf.doc-1.1.0"="pfh5rgaqmiz589sim212gxq3bh1b7hfx";
+"lni-1.7"="hq9s9czcw4avqf8s23gqri397qaqvwl5";
+"lni.doc-1.7"="f8b3fg67ihlam3vr1m853yd5yq3vq2sw";
+"lni.source-1.7"="ns083clbixw9aj57z9zl2qwbgfvy64lr";
 "lps-0.7"="njaym8455i99rr0vplxlpn95cbp8sv9h";
 "lps.doc-0.7"="9qg688yrg4lfkb284shpgan08vfi5sxn";
 "lps.source-0.7"="d2jid2g08c51lpixvbqp13hkvmbhw2f2";
@@ -8285,17 +8705,20 @@
 "matc3mem-1.1"="1w8m977ngbqivnhlaqsf6bvn7yngg3hg";
 "matc3mem.doc-1.1"="y6b8v00dhz5xg56kz04jql3rdrl0v5n1";
 "matc3mem.source-1.1"="3n9x1jfgrc8jigj8w2bmngk7pxqz9v29";
-"mcmthesis-6.3"="3sxh596ivd2sfwzb9vcyn4b0gcpwpa7f";
-"mcmthesis.doc-6.3"="aa86mfx1a75jphkyjvlm0b0gd19ng2hi";
-"mcmthesis.source-6.3"="4sr3z45i1zhjkd7z7bb5098bqf45wpih";
+"mcmthesis-6.3.1"="yx590n1qwxski5c3ha5a0p1zhl5nz8zz";
+"mcmthesis.doc-6.3.1"="hpbx9mn6df9nkhcr7066qqr3cf5xglb9";
+"mcmthesis.source-6.3.1"="g47kbm3y491m8m16hnlh5mpibmy9s8zq";
 "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";
+"mlacls-0.9"="2fkxkj9cwy2j2c3fsmrx9a7rj8idjbx8";
+"mlacls.doc-0.9"="qarilny8mbhr93jkhishz96ly84154m2";
+"mlacls.source-0.9"="5v52krplb9sqsk83zilcdp2gnf9kn25m";
+"mluexercise-2.0"="55nqdha684dmm0f8360zvz4wby202h12";
+"mluexercise.doc-2.0"="7ha9qpaz3xrq3q7c7d8lbz0xf0vklw87";
+"mluexercise.source-2.0"="9q1spi4fzz2yfzjr6q32ypr4ghr9lip9";
+"mnras-3.1"="782c0f5jafxl0xys89wp8f0pw00b7rh5";
+"mnras.doc-3.1"="cb0rhnjpawgc9i4hamgriy746xx4v42g";
 "modeles-factures-belges-assocs-1.0.1"="yildlnjq5szbsvis65ph02bvvzydgldv";
 "modeles-factures-belges-assocs.doc-1.0.1"="ni0ac0babnajp9dlxqgdvazmrx8aixaa";
 "msu-thesis-2.8"="0d0607nv2nq2s2cw64pmkmkhkmnglv8k";
@@ -8303,14 +8726,17 @@
 "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";
+"mugsthesis-34878"="cfkw21f3xy6pchbq7ryw2df8bdssilc5";
+"mugsthesis.doc-34878"="xqm757zbzxi9ag50dd22274bk5n1897h";
+"mugsthesis.source-34878"="6awfcfhsqggxvxxxmfbi77pa6bwchg79";
+"muling-0.2"="0isshjwygamwvdgx9lqz7wjrrcq9wk5a";
+"muling.doc-0.2"="qivxsrjaiyizrk21g7kn77lkzx87wjxb";
+"muling.source-0.2"="qyvgpl8wxl6rbwl245mc8parwq1h9cd1";
 "musuos-1.1d"="v0bx55bnw5lcpq1w0zxfkf1hlxahxj0x";
 "musuos.doc-1.1d"="iqviyy26inh9bw04maby457bvxip69xw";
 "musuos.source-1.1d"="rx3zcmp2mw88f3jxa0igajz4dzvx135m";
-"muthesis-2019"="w6llbyp3d615mpjazf9i746acl0hqvpb";
-"muthesis.doc-2019"="776dszqb0k9nffhnln310dg20n4z0dlr";
+"muthesis-23861"="w6llbyp3d615mpjazf9i746acl0hqvpb";
+"muthesis.doc-23861"="776dszqb0k9nffhnln310dg20n4z0dlr";
 "mynsfc-1.01"="j3jb9xyv9javnbk9r6fb11ygnd9ygpfx";
 "mynsfc.doc-1.01"="5zlf94gdmkxg37zdwq04w4pzfgransf1";
 "mynsfc.source-1.01"="zzmxbw2xfk91lv6isc6raqnqmvk4da6x";
@@ -8322,12 +8748,12 @@
 "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";
+"ndsu-thesis-46639"="l4dsamss5kpl272pbmj720jc6zlb4lij";
+"ndsu-thesis.doc-46639"="6hbh7hl0nwsijq545vym7il5wvrzlbr1";
+"nih-15878"="cv6rcwrnq8rpwmmxva32233isckys2md";
+"nih.doc-15878"="n3j1f7kbygyh0ljz1796b0ywkifvykbh";
+"nihbiosketch-54191"="da0kk90h0paw6wp0x43cqcfm18bh9ajz";
+"nihbiosketch.doc-54191"="l6nx5x7lb8sqfbmac215xbrn36ifx6fc";
 "nostarch-1.3"="5ir7wwqflr7ac9wdz3qq50232lrxk79r";
 "nostarch.doc-1.3"="l4v9sg6lhii6m7z83ap9fghjkzhc1d6k";
 "nostarch.source-1.3"="sn4i3aqmh4r4yfj1dq5ipqyy4424kns6";
@@ -8336,21 +8762,23 @@
 "nrc-2.01a"="pwgmkqwj9nh6c5ibhgz0gx4fha8y4mfa";
 "nrc.doc-2.01a"="y8ga6db77g42jblz5hpvk3vhcsj6zczs";
 "nrc.source-2.01a"="14br9wclpq3sfj0gcb8q3ws6nz3ws7jw";
-"nwejm-1.0.0"="055hp4xhv3r7pim4z9dxjkjk46lviw7b";
-"nwejm.doc-1.0.0"="mfjnf514b3ydrd0993am08xm6rj2qgrm";
-"nwejm.source-1.0.0"="1h2nw801s8n1lvpr84hq7yxq09cxn89w";
+"nwejm-1.0.1"="3fknv24xiya3zh0hw1g11pdsmrj0sh2z";
+"nwejm.doc-1.0.1"="v165fvbi89psybcyn5mljypipajbjvyf";
+"nwejm.source-1.0.1"="f9ipn4afbi8gw1l0wybmjrhzr82wrk2y";
 "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";
+"oup-authoring-template-1.0"="2wa7y11p3lzyq911n8ybd893mwcl2w61";
+"oup-authoring-template.doc-1.0"="lr5ckdwfcnh1if3myqirjpk4yjij25yi";
+"philosophersimprint-1.5"="4xvmqn3dbqra0mxkhpgagsgzrkmczqpm";
+"philosophersimprint.doc-1.5"="hxcldbndvc7biy3fh16f4s6ka093n7sl";
+"philosophersimprint.source-1.5"="kq0i9n14zcvj7cvxfr2nxqspx86585wg";
 "pittetd-1.618"="1jjhfr2c6ycp2c6r3kg0y4fziq3vjpv5";
 "pittetd.doc-1.618"="9394r72nr766i8mnb24s4qr4jp15jci4";
 "pittetd.source-1.618"="s0apvlg01wkfzhzp5cgy3jwxx9z14469";
-"pkuthss-1.8.2"="rvla82aghkzrq11iklb8ysvqklaky5pk";
-"pkuthss.doc-1.8.2"="dc60g5c9zagylhnhagi37yj6066n62x8";
+"pkuthss-1.9.0"="2311vivn0k3r9ff07dpw62g4310amsbl";
+"pkuthss.doc-1.9.0"="k6ak8r0wqlyll8laqwwz9yhs1jf44pvw";
 "powerdot-fuberlin-0.02a"="2wv4gd2gi1xvzmy83cp701hd7971xdsa";
 "powerdot-fuberlin.doc-0.02a"="jzdfhb0xjlx0cffp8ma18r99lvr26l2z";
 "powerdot-tuliplab-1.0.0"="x7ygn34dsmvncmaps2skxfqdakqkp4rz";
@@ -8358,29 +8786,35 @@
 "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";
+"procIAGssymp-51771"="ni8xr0fdn9skkadcn1ipadbxs388vl3w";
+"procIAGssymp.doc-51771"="q662hfdf9br5pdya5676ddxqg8dnaw0r";
+"proposal-40538"="3nnzzlv4rcr3v671fipw679yq7ndbw9j";
+"proposal.doc-40538"="hx9nsm0fidsia9v6iki5l4cb500kjm2k";
+"proposal.source-40538"="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";
+"qrbill-1.02"="q9j60z5d39s257n5lxgphddh4z97gy9k";
+"qrbill.doc-1.02"="4c5j18c0xbcgfc6l5ca3w82kvgkbn6l9";
+"qrbill.source-1.02"="m0bdpkmpqaqlpmbvycw0ksh5jzfjj4av";
+"quantumarticle-5.1"="5azgk8assb2szsbfhb8sn30qmn6b788q";
+"quantumarticle.doc-5.1"="y5mfn12rhzl40l3cqgsry3d1m20vspwa";
 "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";
+"resumecls-0.4.1"="v8mlhz9k24hmg3adc5cm36q0r6w27djd";
+"resumecls.doc-0.4.1"="b7rrqz2wiqk1p6j5z98zv5fx9l0fx553";
+"resumecls.source-0.4.1"="6s1lp1r2rj7s09zn0mv0q7km5hg2k7ki";
+"revtex-4.2e"="gvycjcrz1mwk90nwvjcxh4v9ns47h86a";
+"revtex.doc-4.2e"="6yxfb4rnc1l4w5df87jy4brg6k3sl9cl";
+"revtex.source-4.2e"="a63dzy06kgm7yx7hn0mskgg5mi2rq9ng";
+"revtex4-4.0a"="rhwqsl7592dlq4v6358czl1snpniklza";
+"revtex4.doc-4.0a"="lxy7zd4psfb13cwanc27hzxn25m63g36";
+"revtex4.source-4.0a"="3k4pl2zhp02mzxg40rlyl9vn6g6hfy76";
+"revtex4-1-4.1s"="bnfssyj79dpmf2fmn6c1kdliss77fbd5";
+"revtex4-1.doc-4.1s"="wpdqka456ns2cgw4ys4gfza2kxbhxyc3";
+"revtex4-1.source-4.1s"="71g5nhzjhqx0k81kwkz2dglfgcsdvqa7";
 "rutitlepage-2.3"="66nf7llsknm6xx2m7yi8hhqp31x3l5ls";
 "rutitlepage.doc-2.3"="c01773xskk6bzvkf5yyjhzvb4b0s2vsd";
 "rutitlepage.source-2.3"="f5cb6hkdi9zw91gil1hph1ksc14l6nma";
@@ -8394,8 +8828,8 @@
 "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";
+"schule-0.8.2"="k0jnqi4zavamy5fxr41ah8jlfva3xcvz";
+"schule.doc-0.8.2"="6q4yghqfys34pvns8gc1k1nxaln4zn4m";
 "scientific-thesis-cover-4.0.2"="g3c3y6l5nb34vmla06bry9nipwjwcxcs";
 "scientific-thesis-cover.doc-4.0.2"="zzlsbapfhvlfgry78cc63a1l9d6gf66c";
 "scientific-thesis-cover.source-4.0.2"="29sksgy5611i9gwmckxmyypkkk1r0vpv";
@@ -8411,6 +8845,10 @@
 "seuthesix-1.0.1"="mh346k6d64d1bhhznzsrww66sppysbrh";
 "seuthesix.doc-1.0.1"="a2mghdhdxd7l2rsd5midfibcwsrn7n4z";
 "seuthesix.source-1.0.1"="skmm8a9h0jvgdwn0bsx9fnvwmyf94mz3";
+"shortmathj-0.5.0"="cp2lz1q0ixls61gl73gms3sph283jfbj";
+"shortmathj.doc-0.5.0"="s1q3wc3ff6aj9rfs7qylv31rv7mwriw6";
+"shtthesis-0.3.2"="6qfiimmgbhv0081f0ych2kfrdzrqg64k";
+"shtthesis.doc-0.3.2"="3zw2nvl5i2xsrx7fanwvajj0xgwjg1rc";
 "soton-0.1"="25iyg10d05ahygjbhfc6g6ydiij3isw9";
 "soton.doc-0.1"="5irwl7khvqcx0siw7wcasicpxzj94cgb";
 "sphdthesis-1.0"="i5i9nf7bky3095bhxvmmvxwca4mf7ai7";
@@ -8420,27 +8858,27 @@
 "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";
+"srdp-mathematik-1.9.0"="01agxwklq4nxl0s9b5xy4i0x9zpslayj";
+"srdp-mathematik.doc-1.9.0"="3cxd8dp8xjm4xhqlsg2qfckl4laasmca";
 "stellenbosch-11a"="s0wddhmfp77y6v54qq4jsmqidjq3bkqh";
 "stellenbosch.doc-11a"="97wbyj0mg7phb66ngkf82ziiy8v624b1";
 "stellenbosch.source-11a"="0raanzzc5qjay7gz94himx8np0437pgb";
-"suftesi-2.9.8"="0cm530jnjyjm449d7k0ldd393j7k0arm";
-"suftesi.doc-2.9.8"="kzspydwv2f1ypg7d0cws48cwc42p8hrp";
-"suftesi.source-2.9.8"="8nkd1hypc0m3ynwy3af3067xvikdq081";
-"sugconf-2019"="9bgrgs1gqxlj5czai1l1m45z3z4xbr6d";
-"sugconf.doc-2019"="siyxf3blr7z953fm4xy61z4jfx589bcb";
+"suftesi-3.0.2"="w0vaky8717l4q3xh4nx1xm7v7pj13kv1";
+"suftesi.doc-3.0.2"="bdkyxrmqnj564mm52k8nh78c0sbsa2i1";
+"suftesi.source-3.0.2"="nyh8fqb1989q149qf5swn9s5l26ivn47";
+"sugconf-58752"="mky5jzdc0y7w2miadq2gfyp1q6vlwq1h";
+"sugconf.doc-58752"="0cs7yqry99cc6z1mg7f2jkc93n8b3fxd";
 "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.3"="4yi93pxsd95c4ym6da2z2v84jfxk59xm";
-"thesis-ekf.doc-3.3"="4qwlwvb6xr8f142jky5mq1jhag3psql2";
-"thesis-ekf.source-3.3"="fm901cqg8ys36wfmyfkrgw7g5h3m3yrx";
-"thesis-gwu-1.6.1"="s6xwfmvvc6i8w9limmknqxp44l0dk7px";
-"thesis-gwu.doc-1.6.1"="s4hsb2vq46fdwlxsxn2i4dfcblp2jd02";
+"thesis-ekf-4.1"="qx6shfmc4wc23xl68bvhyxj6iyy7j4gd";
+"thesis-ekf.doc-4.1"="4ljavrr21zd0d15n7r51md5p1v38s5vm";
+"thesis-ekf.source-4.1"="ixbb50g799akwc8c8vwjv44y0z1phfr3";
+"thesis-gwu-1.7.0"="lmgwrdny0kp9p8ldyyxg8521vmhngjpb";
+"thesis-gwu.doc-1.7.0"="2c219vkiy9h43v2jpaj69hv9lwh7m4v9";
 "thesis-qom-0.42"="rnhdvsrpsgjbwih0ia9r1h4kyqdrhg6x";
 "thesis-qom.doc-0.42"="gipmj1b9xh8y2zj52l7r28j0l3g8rnzj";
 "thesis-titlepage-fhac-0.1"="dmyydjxrj16hf8gh7qyp564d195kzmwp";
@@ -8448,12 +8886,12 @@
 "thesis-titlepage-fhac.source-0.1"="zp492p2j40bpphwr3zhjcqiwnj18yk56";
 "thuaslogos-1.2"="jr4nwbd21jwglz99v1aqplzv2jbpn10v";
 "thuaslogos.doc-1.2"="i352h1s47cdbj957kz6c3dj3kwb7rj11";
-"thucoursework-2.5.1"="gxr37nmdvd1j76ayls7y1k33h93m6g33";
-"thucoursework.doc-2.5.1"="gfzq02wgfm9p4il9z98yggxvqfdwz2h7";
-"thucoursework.source-2.5.1"="c3zx83bg3s8k2g76c7bj5wkn8gm0f8ki";
-"thuthesis-6.0.2"="5n80f534n6i5wh67qczibm8q5q9vfg6k";
-"thuthesis.doc-6.0.2"="72sgic1hxxy2cgskwh0qd32q5df5fq3d";
-"thuthesis.source-6.0.2"="44kbilkjc1i9c7nmm61jddy2n001fwyb";
+"thucoursework-2.6"="mvwpfacql0xna37vqa3q7dkrwkzqnpvj";
+"thucoursework.doc-2.6"="rg2y6dx27cxw5h1y0zifciy9wn2f63l5";
+"thucoursework.source-2.6"="frk70dd03ld969k7l6s1vc38vqkdclh0";
+"thuthesis-7.2.2"="0yxl3ffvml30kzwzas0ikbi6m0a73a2w";
+"thuthesis.doc-7.2.2"="zbnzcwzisxs6bpl5h1wwc9964rds1x0k";
+"thuthesis.source-7.2.2"="78hy4h168zj65kwc1qj7m35pihyv32fy";
 "timbreicmc-2.0"="8mnap2xvfny35sb0ziq5xhlckwcmgb3w";
 "timbreicmc.doc-2.0"="b649dhjapj0ani2as7783bphamp0hwsq";
 "timbreicmc.source-2.0"="8s3vn2id27cl1164brvkrxg96ggvgb3v";
@@ -8462,33 +8900,33 @@
 "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-2.08"="6ha294w4xcip3ymk5nn9r43fqhqnb06b";
-"tuda-ci.doc-2.08"="8r3slc5zcs7y7afrx7pk59s2ffdbrmgs";
-"tudscr-2.06f"="jlp1xigdgbr0cscyxjs6z5kcl70z6i7d";
-"tudscr.doc-2.06f"="7v2qsq9hapnaz5cbns12j5hgvzpr0n5h";
-"tudscr.source-2.06f"="q41mx2d8m2xfcfvwaddbr5g2f5mjai5v";
-"tugboat-2.22"="h2pa9z0pcxfr4dmw6hxs8ha96qmxv4ip";
-"tugboat.doc-2.22"="drwddwqvgp8xb835z2g5s9wrwr8mfl1r";
-"tugboat.source-2.22"="63p7gmblqwk74ixgjj73cvwg35m1iccg";
+"toptesi-6.4.06"="f32mdcbb85b7dja6cvhc6h0b111i7h28";
+"toptesi.doc-6.4.06"="rx42mn8j2fy5qji2xmi41a85wii0p1yy";
+"toptesi.source-6.4.06"="9am8c6ps9if4zlbcrld528hhgk9j6f0d";
+"tuda-ci-3.13a"="5n5zm0jsbpq7rldd1zznnsp5hdycvqfk";
+"tuda-ci.doc-3.13a"="c2715rljfxk5wq6kwhh7y9wvf5wyghnm";
+"tudscr-2.06l"="sxvm69k0mada5m7m1m290x3s6dvvqhvg";
+"tudscr.doc-2.06l"="hpjfmd60ay9xw060pgk56ki110fzsz9h";
+"tudscr.source-2.06l"="8v9zbd8grv9hldyb04rd7x53hcwsbpia";
+"tugboat-2.24"="9c3ipn2fzwrf0w21mih2ld7j1z1w7i0w";
+"tugboat.doc-2.24"="g6vmgk9zria85cc38khzz1kk7x0s5a4m";
+"tugboat.source-2.24"="6kpj4a43gk6ww8hc434lipc04l2k3abw";
 "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";
+"uaclasses-15878"="d8zwjxcvgb1rnfv239xwf1qblqpzk32c";
+"uaclasses.doc-15878"="mv9hypafmsgnh5pxl2n0929ib8zgrda0";
+"uaclasses.source-15878"="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"="ijbimiv9xjwlxwrawqzw82f8ycahxwwj";
-"ucalgmthesis.doc-2019"="rbi9mvqdixa2wk7ankfw7l3vy1pf83j0";
+"uantwerpendocs-3.2"="3l55p7996pwh2mqc7k2qkgbsyc4kmvg2";
+"uantwerpendocs.doc-3.2"="nvj1596s20n62c3k8yn6a8f1gadqpgwi";
+"uantwerpendocs.source-3.2"="z1304adgkdwq2krq7m2v10i024x0d125";
+"ucalgmthesis-52527"="ijbimiv9xjwlxwrawqzw82f8ycahxwwj";
+"ucalgmthesis.doc-52527"="rbi9mvqdixa2wk7ankfw7l3vy1pf83j0";
 "ucbthesis-3.6"="3wa2xk8yvyh5hwy0d41p9fdrxvy8y2iw";
 "ucbthesis.doc-3.6"="lr9w29xp965yydg4mk93rpq4d3808ksa";
 "ucdavisthesis-1.3"="naibrb9h1lg8y22j26wygm9zxcv3rfc2";
@@ -8526,10 +8964,10 @@
 "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";
+"unitn-bimrep-45581"="s3x065jkvzazjx24an10jbwj47903gjl";
+"unitn-bimrep.doc-45581"="k2iakhx4fkiz9ckglr1pvnrqday0sbnp";
+"univie-ling-1.13"="fh7pmppl3gz3p8gf4crrxccivlsqa2lk";
+"univie-ling.doc-1.13"="pyws8xjmzfxq455v9p25a5nrk7psk2wm";
 "unizgklasa-1.0"="pz93dd2qidcvdsa78zgl73s07zjgshs4";
 "unizgklasa.doc-1.0"="inphl2x3czqw7mw17if9ahl0jbin3dd7";
 "unswcover-1.0"="5bqxws27nxyhgrlc6c9k9v5pm8jvdhzc";
@@ -8545,29 +8983,33 @@
 "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";
+"ut-thesis-3.0.1"="nh3fvwxg90lgiwzk3d1cszbpg883pjhp";
+"ut-thesis.doc-3.0.1"="dkrfh7bklmwlvv5w7cj2qgj9bxnbak31";
+"ut-thesis.source-3.0.1"="b06l2wms746qads53dqd1d4z8g7ml52m";
 "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";
+"vancouver-0.8"="i4g046vffvq9f8bfrzi05q21fyazvlr5";
+"vancouver.doc-0.8"="hnaysysqmahg8z5fr4ap4y9bmgdfv0r6";
 "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";
+"xmuthesis-0.4.1"="y598kfraksgxzjhiqnvpi44nkgy448bh";
+"xmuthesis.doc-0.4.1"="ryzi6wjgmw3kxar74hhdjazylp116a5k";
+"xmuthesis.source-0.4.1"="mjlyb6dl3w3gi34ld39pk5xdjkzdi064";
+"yathesis-1.0.7"="bbl0jlq6kjx19v35b55jyrp9pzhzmlfv";
+"yathesis.doc-1.0.7"="w6l8x4jlnc1p16p55658c5361ijnn6xr";
+"yathesis.source-1.0.7"="8nwsx86zk66rwc56xzf6zmfkmyp3p5px";
 "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";
+"texworks.doc-54074"="gphjjma2ws68drzz6rmmj1hjb7bxc7ma";
 "arabxetex-1.2.1"="yfvy3m6rz45z7frgsw6cg8hk8kqdxfs4";
 "arabxetex.doc-1.2.1"="f8rpfy5hna1b6flvq6y2balxypjm6280";
 "arabxetex.source-1.2.1"="n7qncmdmzvkjxwn5d5nhwy3660ymvwx8";
@@ -8595,32 +9037,28 @@
 "fontbook-0.2"="af0x6y47qcbfhzs3ngyazacn289x99y4";
 "fontbook.doc-0.2"="yvq7kxismw59wayzyv379hjd0kw048k2";
 "fontbook.source-0.2"="46vhgm8k7pxwxpb654fg3aj96555fanw";
-"fontwrap-2019"="ap8pwxj94larm8p1dngr1mhdavncplq6";
-"fontwrap.doc-2019"="p3m3czhwc1i2psby8dkm5zkpmzzkk91m";
+"fontwrap-15878"="ap8pwxj94larm8p1dngr1mhdavncplq6";
+"fontwrap.doc-15878"="p3m3czhwc1i2psby8dkm5zkpmzzkk91m";
 "interchar-0.2"="mphh4cmn49y1fr2klr1n5c2mjxryyjzm";
 "interchar.doc-0.2"="077lc5c3w5gq2cm2983fqlbhizjssgyy";
-"na-position-1.1"="gmc7vb0cp4c8qp4p99vpvpv0xxbgzhhq";
-"na-position.doc-1.1"="zwcm5ikxlaz2jla53nxbrfs3yva37m6g";
+"na-position-1.2"="1nnrjz7dvqr7xznpi5z3kw8hs8cbs0nv";
+"na-position.doc-1.2"="s1v6aswv16yz9q2ykzpwl399znzpq5pf";
 "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";
+"simple-resume-cv-43057"="vjigpisca1m0lvq3rdc8148lc2in4zmh";
+"simple-resume-cv.doc-43057"="aaxl68aklgpv8996xzd0jgc5gw3859ar";
+"simple-thesis-dissertation-43058"="p1bspb2n9dc7zk0myww59v973rjshfy0";
+"simple-thesis-dissertation.doc-43058"="hrb22ycqxdy8ndw4x6ifl6jifswb7mgw";
 "tetragonos-1"="6v6w3fcjmyb0pq0iia29xcx3wsnpm47k";
 "tetragonos.doc-1"="w3b4g7k13lljq69vg11cakx54m0813r3";
-"ucharclasses-2.3.0"="ss0jlhd052vay3g42nys4mj4mcf5iqgn";
-"ucharclasses.doc-2.3.0"="v76523pb2c60ppcz26pywk8jzipshr9x";
+"ucharclasses-2.4"="lbqc3dsh3v8jd6n2jcp9mpaqnnrhj637";
+"ucharclasses.doc-2.4"="lnvlcnxs086dy9ylhmar1is01zn764k4";
 "unicode-bidi-0.01"="mix51h9rwgjic1g32jx0mv8hh574yn69";
 "unicode-bidi.doc-0.01"="8x4zk0spvhmq3sc8ygvidk03gfzm2875";
 "unisugar-0.92"="wfr974a1y4wzlbw0wwzfr6r0yp9nyasl";
@@ -8629,9 +9067,6 @@
 "xebaposter.doc-2.51"="sbpqsj7cqhhhs9gq8jia92hxrdgnhzkk";
 "xechangebar-1.0"="1f2zszj2l5mkqv5zs5bs8g5w4c8rirpv";
 "xechangebar.doc-1.0"="xbirklnxaljhxxghr1prqq7zb9l0mgzm";
-"xecjk-3.8.2"="qdr14rgjqi9hajzbl9g4b31pijd7wf1f";
-"xecjk.doc-3.8.2"="2bp2zjai1yvsx306aqmw2snacm1n2438";
-"xecjk.source-3.8.2"="b3b5sq5vrl5031jx3gsak9as5l3ly5b9";
 "xecolor-0.1"="pdybpn00rxsb5ipxx377a77xnmmf5i43";
 "xecolor.doc-0.1"="vl2lpda4kkr2q8gzj6ii2rjfccx6qvl0";
 "xecyr-1.2"="8zv0hcgk6f94mjb7h0vkvpz0yij6p257";
@@ -8640,19 +9075,21 @@
 "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";
+"xespotcolor-2.1"="z3ch5ppswpb231734xjiksmrs8xhqghj";
+"xespotcolor.doc-2.1"="wqlmsgp1mijbwyx2x4w3prpdbaw0gin2";
+"xespotcolor.source-2.1"="xbwp837f18v11kykidcm4mlsaqll2cf4";
 "xetex-itrans-4.2"="m9f0xqxgxpqsi5bml6mpgxvqjjpz1fkf";
 "xetex-itrans.doc-4.2"="nlixz1jqx1al7xks2bp723yl63whrhzh";
-"xetex-pstricks-2019"="4vaa9mkycwc7kwaxbzjfypk3xx7nyxqh";
-"xetex-pstricks.doc-2019"="lqs6hni0df78jwiy8k0hxzpwlpn0kfd0";
+"xetex-pstricks-17055"="4vaa9mkycwc7kwaxbzjfypk3xx7nyxqh";
+"xetex-pstricks.doc-17055"="lqs6hni0df78jwiy8k0hxzpwlpn0kfd0";
 "xetex-tibetan-0.1"="yzps4y2frsplnawgai9s9xb6vpk9h4zf";
 "xetex-tibetan.doc-0.1"="m49lmg8669bbir9hcj33clc2v811xdvb";
-"xetexfontinfo-2019"="jzx2is0hbcggma6s0pdzq21hcb5j8vgi";
-"xetexfontinfo.doc-2019"="h4i3q0c5rpbw8pssb7d6nyy7kqvkkj98";
-"xetexko-2.23"="0k7pgmhy6jrqj36bbz4i2xcg97mv03sq";
-"xetexko.doc-2.23"="f0hk90a0fxfdiyhv4vcy0f3f734r9452";
+"xetexfontinfo-15878"="jzx2is0hbcggma6s0pdzq21hcb5j8vgi";
+"xetexfontinfo.doc-15878"="h4i3q0c5rpbw8pssb7d6nyy7kqvkkj98";
+"xetexko-3.1"="ny49dj9qisbvj8cp4c84n5fv0xaqz8a5";
+"xetexko.doc-3.1"="miinbgaimmsgd9j0yb5xgkapc0brmqwc";
 "xevlna-1.1"="jwpjj1b3y45n3lksn9wvsh3hyccy1i00";
 "xevlna.doc-1.1"="4559f3ddvnis97px7180q0is9n4aqq2h";
+"zbmath-review-template-1.0"="h5z1v5jpsrgc5xx5jgfx9l5f84nblj5w";
+"zbmath-review-template.doc-1.0"="w3dxb9nx6xyypzmw8jmqkl03xw0b6jba";
 }
diff --git a/pkgs/tools/typesetting/tex/texlive/pkgs.nix b/pkgs/tools/typesetting/tex/texlive/pkgs.nix
index 67dd438a9fb..a42b384803a 100644
--- a/pkgs/tools/typesetting/tex/texlive/pkgs.nix
+++ b/pkgs/tools/typesetting/tex/texlive/pkgs.nix
@@ -9,12 +9,12 @@ tl: { # no indentation
   version = "0.3";
 };
 "2up" = {
-  revision = 41578;
+  revision = 55076;
   stripPrefix = 0;
-  sha512.run = "b7844f246ef486d68babff92f2f648ef6b2eab28dbf8d22f649b2c9c26fc857b05f475e766a0c9b4c4cb5be1224afc690c22d19865e9efb9f4e75a8ff6d9dda8";
-  sha512.doc = "c8569e5cec43525d6814816f7fdaa6bc9ce0ea810fd6be60da992c251fcfaaf4c5229a1956c1fc3e6675ea5dfb4529267acc5f198053a80902b69b25a1464b75";
+  sha512.run = "6408d1d99a97df71640bcdde4133edc2e5861bbcdc8c5e1be98d5704f7ecf9c043c5538ea19ac4952d811e3677ee0698bdd477eadbd1068725bdb210787d9dbc";
+  sha512.doc = "3375cfbd95412f2fde2bdb9171b1c081890a52168d0c6d0f0dfb0ad914117c79291a56bc97602627a698509635765fd5e6e95387a006039178e440a8bea24837";
   hasRunfiles = true;
-  version = "1.2";
+  version = "1.3a";
 };
 "Asana-Math" = {
   revision = 50999;
@@ -75,11 +75,11 @@ tl: { # no indentation
   version = "1.7e";
 };
 "SIstyle" = {
-  revision = 15878;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "9473f7ef772f10ae4b70ea9d3074cbf7220ab1672076064aae9e54cf72d5007fa7e7f73c66082c53098c772a43d88af3ca1073e875c31c2821e528f8da836fd2";
-  sha512.doc = "553357a037de0494641969db5a434a77984224f7fee3f64a2e153304eed6ae38548a1cf0330bb5e6cfc4f4dfdc21ceb8cd2b0659b0e27aa79a7379a82441451f";
-  sha512.source = "3d2840beed83bb3843b89b08e3a2d111bc346e221335288ae35c19f7b5a843b668a5cd0b9f60a5df270a0c0f8953cb575d27a17f534a7b7808a37ee58aa1007d";
+  sha512.run = "69bc838535facdc8ba17db91ead53dbc233f7d53e453164611fcd7e194692212ff74f57979023fe14ed8c8df347caeb42d99fae0b14c3cc54c60c8411bdef80d";
+  sha512.doc = "6fb33be5371932e95e5e3002bb2696d0707d62425f1a539764d195ee119f37441bf288a502770667624746631bd75227a245bbcc2050c1c2d815ce4c8fa6ec85";
+  sha512.source = "f1e23a9d04b637afd72056e1792a0c795f1b02b96ddd0170e6f412a8159389f8cd79bfdbfd2860fb5b6ca6b1794ff5c0bc59fbaabcdffbd8d69d26b205e60df5";
   hasRunfiles = true;
   version = "2.3a";
 };
@@ -108,10 +108,10 @@ tl: { # no indentation
   version = "2.14";
 };
 "a0poster" = {
-  revision = 15878;
+  revision = 54071;
   stripPrefix = 0;
-  sha512.run = "95c13cc0fc3e4c8b76e02aef0622af10a420b9b536807effad3fa99822ebe1babdc7219536178a349aeb671f3bbdcf9e339ddcfa73c7afc71dafc2b2d7486996";
-  sha512.doc = "d17f3a87682008d8110bb5562aefee406d84b15e3678e165cc3f50e0280aad0736ff0b9b9847d9dc47cf08d3db9a28be71b76f9a5c61c8f3dad0aac187b23434";
+  sha512.run = "038623ef39540340a9c9de228ff0787512fb34916ee5a250dbc6d9327b9249d51c633b8ed0dd725c90db462ed7c96290ea7d6fd60e299e787d0e5cf585efb5f5";
+  sha512.doc = "51e01cf36d4ec625bdc68e586d276e09973dcfe30cd9ba2aa7dbeed73337bea03a222d66a6903e5203e1530d88433d326d38ff66896c52ac33587a3d147cc2e5";
   hasRunfiles = true;
   version = "1.22b";
 };
@@ -143,13 +143,22 @@ tl: { # no indentation
   sha512.run = "bb851e6bb3d9c2efd8d9abd32056d0853e320ee7f495b3c595d6a112d5e66bdbcb24107f741249fdfde350dead6763484cc412d380188d29155649b4076c4e77";
   hasRunfiles = true;
 };
+"aalok" = {
+  revision = 57728;
+  stripPrefix = 0;
+  sha512.run = "f25d1ac4e5de93e910a445e1830694c8f3a4de7976731a334c2bcb32b6fccac9d4386700b037c6c12556a9f9b575f90616cebc00d05f00f1db0273cc708379c6";
+  sha512.doc = "80b48b0a8eb1a75d0860d18d3ee4dbd93df3e7b11f3d22f8ec442bea6e16d0dbd1a4bed74450b7683d5e1eb05b43b1e2ffbe04ca15c52c3b7091746c45cb4675";
+  sha512.source = "389c3ad43370e282bf29b0c80fab0324c66b00c2f379404836f91f77113b0c736c502578317a1b56f37dd25da3f89ac233eab5d21e71f1204c9ce159703f264b";
+  hasRunfiles = true;
+  version = "0.2";
+};
 "aastex" = {
-  revision = 51836;
+  revision = 58057;
   stripPrefix = 0;
-  sha512.run = "387de695ddcca83c294a39846bad1cac883382f82ce1cf1eb481c12de181c062c3a451da084b42937d7f9bd86e9102acd4fac4b2f7323affbb33bedd558f6df8";
-  sha512.doc = "8cf0ea4b6a71568d7cfa4b6f5470a7a326fddad84ea342834bccea8c3301d52debe835617fa5930414291a977104236fe8483f59913a15ac282c51841fd061fe";
+  sha512.run = "9ae52d4142c12621839945213d1f20531350b27f0b1d124d5d5c1bae81d50fbe83ab116d0c65c25852952415eb860eaaf008c119cc10cdb149b964f0b06ad6d0";
+  sha512.doc = "bce30656a98d3598312ff399b5e5eb229b89e7e62521748418be718c38c6749a8e9737f6c933f6f32ec948e3ebe1ef339ba9037908741c3b902d33a8fda9b027";
   hasRunfiles = true;
-  version = "6.3";
+  version = "6.3.1";
 };
 "abbr" = {
   revision = 15878;
@@ -168,10 +177,10 @@ tl: { # no indentation
   version = "2.0b";
 };
 "abnt" = {
-  revision = 53128;
+  revision = 55471;
   stripPrefix = 0;
-  sha512.run = "eb5b8d75b345c14fecaef598947fe5a6a13c03cd58d77be91bf8155eed0192417358c33cd9e94e236992be9aa13fea9cddfc8c3d80f8640ad59b6feb58b3a435";
-  sha512.doc = "23315ea3d16bed57c979dd6e820a83243ed660d91855bbc58db77b787043410237f579e79f3ad011f418cca5b9afc1eaf5358147ff89d6d157f7608b3c1e6234";
+  sha512.run = "66931af2a5ab583914ea5abe6bb9668d04442c23ab654691e3864ecfaeecf65e3eda47b3d279abb9fdacb385ef9922d6caab808273f87f3bf323a33b441b7bd1";
+  sha512.doc = "0a46414ec99e14a60a167ec7ca09d074c802f4232cbd4204e52e9d489edb3b1657c7f33f0a3fd0bbaa09f624cb52903b8a18db43f54c7a1b0aef8c804b53b1b7";
   hasRunfiles = true;
 };
 "abntex2" = {
@@ -183,12 +192,12 @@ tl: { # no indentation
   version = "1.9.7";
 };
 "abraces" = {
-  revision = 27880;
+  revision = 58761;
   stripPrefix = 0;
-  sha512.run = "8d75830f3230b27fdee0b21cadcc9adf604eba3058607675b23231cc43be6a66d090bd64857b3715703d2aed1e8ecfb618373b89cfee743004f1bbff5c7d21b6";
-  sha512.doc = "e7392bdf5f19e5dd4dafdc1b058cf0d587d9b1d8400ae01bac3a928e3edef962567e24c53b219206a6cb82f24085da43d18525973b7ccadce05efdfe79b5d524";
+  sha512.run = "1a168bf9f61fbb67bfc8b74fc43d435123d296d92abebf599e1b0d3220eff7400e8e8898c9a97c2e1984dae75c16b40ceb77ffc6493855e63f4ba0fd418debda";
+  sha512.doc = "a505388fe1356354625c78c832bc91c06bda899bb46a058210acc49ccb157283c0d2d5990e4e03b94aad17ea582575b4259e06510841a8b1ead9b4f9cc46e4ab";
   hasRunfiles = true;
-  version = "1.-";
+  version = "2.0";
 };
 "abstract" = {
   revision = 15878;
@@ -207,12 +216,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "academicons" = {
-  revision = 48100;
+  revision = 56119;
   stripPrefix = 0;
-  sha512.run = "8c394e4ebccb34cf3b9878a3b3577c8d43369bbef3ebe336336b9ece077e9fcef8ebbdff16f00355b7940bb325fc62ca22b428d2f25559bdee0cfaea73617938";
-  sha512.doc = "ab38b79d6893ba290c13862e4518c7cf6ee297f4b3a248d051d1c4351cfec05b3f271bdc95c0d345433733b9de14f852de54351698be93eca0c802959133cb03";
+  sha512.run = "87e2c5436f92e288c94d612380a2bd6736a19b7a6ba714c0d33bfad27aaab79cdf264b585e722055b1d8402be5c0001c1d8759ac3b79d6c2759c90d6a36d2f6a";
+  sha512.doc = "55f9e0192b8e50126fd573aee69ce5d7f389448f7af9e2973515ae49c552adaadd3eb8f06f019e42d0caa23c2d9a7841ae5fb7f6c0b6eed9a43eb60f7b0dd964";
   hasRunfiles = true;
-  version = "1.8.6-2";
+  version = "1.9.0";
 };
 "accanthis" = {
   revision = 32089;
@@ -230,11 +239,11 @@ tl: { # no indentation
   version = "1.4";
 };
 "accessibility" = {
-  revision = 52650;
+  revision = 55777;
   stripPrefix = 0;
-  sha512.run = "f0d198f630c3184f649232fa51860b3dcbb845832c1441dd4f6513d4fae21716d3c75f4f405258a78bcb3918f7a59d19b3c8ea814896e5536a2c58daf0386279";
-  sha512.doc = "8248afcbcebcc179d438bd4394de64f8bcc6b07095d5ae4146f6a10f73eaebdd6bceba6fbf4e441a434d5e72bce0995281249dac321bcfda24074e9ba2085373";
-  sha512.source = "9a5b277ff4897b4b0c9ffd471fc923ca821bce1912aec64b742268042ad46a588624d64c3eab09704e0719b8fbf35452136ad10c21e7550c92909ca8d75f4c8e";
+  sha512.run = "6cbc455f40a6aeb5862bbed64e6ec111d497f1948fa6eb83d26fc04c85c1145437005aa046e20eae70f177ff04c7084f03c2d4b3234be6c6ece822d6f366520f";
+  sha512.doc = "261d13857558973edb692ed320745173a5006d0cd23418e926be5398b4f3a2da0a670e3a08a26083381e830f4bd327eaa4451822ef096612a7a3c3492833c328";
+  sha512.source = "a7218b14ca307c9e02f6c562db3bb381a8a57ff758fecfc36f758bb70a151ca83e3401c7e2254ad2f75fe62d762cedec0746b07f5f5f6b82982675f42faa4e31";
   hasRunfiles = true;
   version = "2.0.3";
 };
@@ -255,22 +264,22 @@ tl: { # no indentation
   version = "0.6";
 };
 "achemso" = {
-  revision = 50025;
+  revision = 57479;
   stripPrefix = 0;
-  sha512.run = "87882436a324828c3a787aabf5516f773afa35be70c64392117e356af18c37cca77d439f1cb88422cda441950ca40bbf624fc01ce3eb05d6ae22fa817bf8a743";
-  sha512.doc = "8576bc5db853243bb4b37f53cade79aa1913e763ef6bd2af3a9f74087e68598d40308bf65772a623e44824ee128c8e93aea250abc3499b219233af5aea558efa";
-  sha512.source = "64a121d889d685f2dfb57443e38feb62e4ac1c78b7496d0f708bc3d7379abed7780b48984e5464d04308e61dd3b332908337474383493eddfaf418f63fe15322";
+  sha512.run = "8b9f9131539eaaca0367ddca7918b5f56d0a5520bf5c16dcabedc51c41cc695967ae246751d327f604d27ceea1884b077d0fb9df40c19ef0a719ae50058a6b9b";
+  sha512.doc = "dd5831de3d86fb38a7e74240aec3df7a90546d059e5a008d2a7a65d7f76d67bcda360706b1c6e1b158a7efe1ae126c6812b5713d57646ed7184a31e639127d00";
+  sha512.source = "3e2ed978f71bcd8546cd979944f31db85cffdf7635cc20db4043e6c8ee9c484aa44b1973cc3109a37ef0bd779e1de64f86ff51de786ae1b3c3bf80eea9822e3a";
   hasRunfiles = true;
-  version = "3.12a";
+  version = "3.13c";
 };
 "acmart" = {
-  revision = 53899;
+  revision = 56946;
   stripPrefix = 0;
-  sha512.run = "c0fc4e8a8efa3f96ddd3cdc303f385569f0520c0f3066b1e8f85cbdc9da8727ef8800213adc274b6956ed9db74d98def527da156a4ac1ba6aa2449892068d240";
-  sha512.doc = "d10d6032aee87b89766bf9203327666efd8e4608a7962782444b1f585594fa96fdcd9dc62fbc529350259785b30d86d7bc0f8a9c727b89208cfb6936772259c6";
-  sha512.source = "6ae9cc2ebc94d3cacf070647613a4bb706ed140518501772db8f5ebbbd3c4f419f21deb2db6ca5f826cfc55ba6bf16dcc644dcc4ce255221c563bff10b50b452";
+  sha512.run = "cda16a82e6416cc92773ad39e1998bace936aced37a7b1208c48857b18447993bb14bdb31a5632fd1700e4fdd9fabd4c3e39c6af27fb355285bf824974e9d2c3";
+  sha512.doc = "27e241160fcad9cffb962f0204bda5384f81946bb82ffd99fc3c35d58e95109a15586214c774d6af57a9a12e8a1fc9f230d7c18f66dfb13ef2a45deed957cf55";
+  sha512.source = "b8c9b62228bb844373e972a24ec9bea3bbb81a028d0700bc61a42a4298241ac96483ee52cda42744ae3e453e1eaa2e7564299554fa535fae5ba15f77750f881f";
   hasRunfiles = true;
-  version = "1.70";
+  version = "1.75";
 };
 "acmconf" = {
   revision = 15878;
@@ -282,24 +291,24 @@ tl: { # no indentation
   version = "1.3";
 };
 "acro" = {
-  revision = 53670;
+  revision = 57447;
   stripPrefix = 0;
   deps."etoolbox" = tl."etoolbox";
   deps."l3kernel" = tl."l3kernel";
   deps."l3packages" = tl."l3packages";
-  sha512.run = "3568379b27e16b2356b38b7d1c6f241e3a80db3ede3a2b0b623b39296773a0b3451464cbd6344f5eb5e42cd2bcfb6ae0792ef3f9db2f9253f9fcc66b60e948fa";
-  sha512.doc = "a635d6f355f48ae2c435aa914ad98d2cab7feda07d9df7a821126eae46f216fedbf88609842bb931f397660afc3ff9399bd410678e03fae4cbd1718d2fde64e0";
+  sha512.run = "5f0b03e3ceaab172a0c92e7f29795a0878118a07be27f079800703c0f59f127c2ca09b53922d7ce3f16ae772ec28528a69ac407092dccc2f5bb621460e6f38ee";
+  sha512.doc = "5d558296f2b0a4442b82e49be12ae1f3dc80d40012d138ce4ef12ee8e22ef1b6d934acf7364c59be0138077311e8dc7b5bfac42478aa68a14750a6c41de1c6a4";
   hasRunfiles = true;
-  version = "2.11c";
+  version = "3.5";
 };
 "acronym" = {
-  revision = 52845;
+  revision = 54758;
   stripPrefix = 0;
-  sha512.run = "152e25fea3adc15632bb4c5a37981e3cc0dc516d76927aa6842f51d4c3996bba41bef8fd65ed9983b1a4b5dcf194741a454f88e822a5c33b87f48ef14a22c983";
-  sha512.doc = "0fdd8e2d43fa4becf1de2e7f80caaec56c8a8897c2c821a8c13a3c90cd26a4c75b6906910f55493634fe3b3fc3d5b4e88571264bcfc37602b950f4875a040d61";
-  sha512.source = "6a30df35639273942bdfb2802b374882082afd29de8c3530ad36b99a1626c24fd0fae8dd43fa7f7e9091575006917147b904167b29daf9f0b6f7e6a3f627e9b4";
+  sha512.run = "be68e32baacdb8708d1a31c4a585fcd282d0def7a76a1e284b908532118aec04505271790a99ab0a36e7c035695b84f8ae1e2146c31ca8c4fcfb76be4f11db26";
+  sha512.doc = "72b77e66b4db0c3b42252020fa56be3e4b1a848ad7314037d6ada3eb449fad0b35371835ccc6018bc71ef991ade0720f7febeb52fecd71b3ccc9a5b839bf66b2";
+  sha512.source = "8fd7e9f374e08f69fc33df24be50a9842fb62a18232d2631d85ecf7e6ce702bad1d21989dc01b3513a69e7a39eb343763690cba027df984dfc7777f047ed45d7";
   hasRunfiles = true;
-  version = "1.42";
+  version = "1.47";
 };
 "acroterm" = {
   revision = 20498;
@@ -329,21 +338,21 @@ tl: { # no indentation
   version = "2.1";
 };
 "actuarialsymbol" = {
-  revision = 51371;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "49dbdc527b3fe204a4fbcac265accc0d0be88201553cf8e4110b51042ab8b72932bcc1488b7b199b1bb345941a624b486ccaed888851bbc6a63f70135a0c42b5";
-  sha512.doc = "3ba7c377010c3d6d1e7c52bb4256c10f78fe72e6fb7e1b794831d68fb9628d17a6a74f31c8b7f6bae41a59d8a29e6705e28d1e466c36e8273a449bd2594d126f";
-  sha512.source = "c87fb2395a4b3bc7871184eb49b83754dda2813249a5df2319e462a375283e6087b46129c0fb78c744944005741e9a1b28c16bf5073c3744c90e7dfd9c9a0ba0";
+  sha512.run = "81260a4e92a75f5ace84c190b9bd7e6b46e8c697824856cfc69f4d9e9f14a4e0230d5623cb6e3bd546d84b29240865dfa14f433c9ad34875fec22944053bb5ef";
+  sha512.doc = "95efefa6e40a77806a2fe8d47575cb78c7e295ddb17b263d2e324610614d36d6ccf1dda75a428b12719d8c4b1fdd3b94656df1ff351f4fb98fc6a94eb87d357d";
+  sha512.source = "48211fe7604a931a8e53599d617bcf2be100ceed5003fd1bcc96ce84525904e68bc279ef672100044e03cbf70fa47f53548ec3686f70a795a50d78d96f792d81";
   hasRunfiles = true;
   version = "1.1";
 };
 "addfont" = {
-  revision = 41972;
+  revision = 58559;
   stripPrefix = 0;
-  sha512.run = "fff94f6b6bed71f6ba4662c78cf4ee5c3aabe2f9b232fa9b4c52ad39938e7f56306c905ca0c187b0c618f67fd5d245529fb06ce17124b980c29eb278aed9d857";
-  sha512.doc = "10a3d45c3f4a4a1aebdee7f3a6a05866df428cf7bb9a1e3ab13ce6fb6254c679bea293449fb00cf5d1c64c99fe8b615168d011631d264aec2349053643f5bdcb";
+  sha512.run = "36e16da02daf6b93b53f1458ca5eee2243310846b8ea05e6b8b00a3120e7686fbe42d6e34d602d84171fcf7cc5428135aca36eb5402e778facb1882e7e7831a3";
+  sha512.doc = "583f7cd7b46173ff57cfa4505d14cd3d88ddef7ebc2adb8fd2705fb8011711bd65d22ef38cfa6b5224191af1841f22ee27332f832029cff762b7b7e49246b179";
   hasRunfiles = true;
-  version = "1";
+  version = "1.1";
 };
 "addliga" = {
   revision = 50912;
@@ -372,18 +381,18 @@ tl: { # no indentation
   version = "2.42";
 };
 "adforn" = {
-  revision = 52364;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "50369d5874b6ebd35498ab4502661de8630ed3175df02cf938817e17c858cadf0915dbf7c34ddfb0861a0063f7cdeeb40b1097573f77a4696f08354fd28d2a64";
-  sha512.doc = "b2521044ab8869c114579b7ed59ba9b58a66049ead3202d5f62797c9de0fde442b4f39c7083e1626f50b0011fd57fdb4227cab7571bbf85d6076b88e8eece61a";
+  sha512.run = "7a4a4da6c72ff2f8ab4b2a9a5e92887306a8e2aee4bcc5a93c18bf41d1bf9c05bd23fd6401bda054994aafa8d6002dbc16d8483b951acb705cd46fda08aaf060";
+  sha512.doc = "2a287f8685154359c914b13e8e153aa64bb19708a9f5b122180cead53ee31ab829dc934dcab43f09ded4fe5d2a81ee32528855f1a4a1bd07b795eaabcb204f48";
   hasRunfiles = true;
   version = "1.1b";
 };
 "adfsymbols" = {
-  revision = 52365;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "d5ad659516da1a4df4b2244f90db9a35fd4ae1415e78067a378d389a536380c1c642d7910491d4d49273c9f3e03a8a916cb418d8e608329b2701df44f8011de2";
-  sha512.doc = "39bebc154e84ea1286e25e8f7b9439e1c1441b7df83db770a75e26580c452cec7ac8be97bd77e2a99448f100d30ea9d5f40f3282a54e5fcfe940cb40c9917cdf";
+  sha512.run = "7100648956a68719d1a449a3aee0a4acb3788aea7f082a6e7e38c8d8dfa2c712a4b896a9b036e8ae8b2732b11414ab71a49e2f513e7d689f4b0ad9e44c052019";
+  sha512.doc = "fbdd78030826918a3599a1f843db692390ebdcf4ca9a853d8c2e78706cfafe83ae79d23d09fb097339d8c726608a27436b3bf22725935c55060f1e8579ea1eaf";
   hasRunfiles = true;
   version = "1.2b";
 };
@@ -403,22 +412,22 @@ tl: { # no indentation
   version = "1.7.1";
 };
 "adjmulticol" = {
-  revision = 28936;
+  revision = 54157;
   stripPrefix = 0;
-  sha512.run = "1134de8dc37c135e944c223946ca249106d12a6af8c653ef39c0418893ba5d52f6ac4a3df6fd521638f606106830e0ce31aa2ce284617ac11226950fefbd94af";
-  sha512.doc = "299f6cfadae2e1c51021d849c9d2c10132007f4e4d0b2d0550c60a58f12781ca90ebed6052e9f84cc22bbdcd7b955018769264fe016800706ee7548c4f8a1e61";
-  sha512.source = "0b766677e3a95d7878f990c152952a3ad0c1aead2d4248a75070e93e93ec4e81524e565425404ac0579fd7451a562cea5867ef7d7acf58a36046212f7d900556";
+  sha512.run = "4243fb86e7122ec721b975c16eebadcdb867313270a7c351543bad78be73eb82780f7eb1878f1901b8c1956d0103531f1973d9ba10bdeded7eeaa51b190a1514";
+  sha512.doc = "afa625a205d566369b4a702062ff39f62529f2191ec4293b282fe818f4e001b8cc9c65eec3a0df0175586969d77ec83e03b22ff41cff36788375c59d1f20c586";
+  sha512.source = "e1a9e8245494eb1bd09e82e914fc0009ac696d94ec0d4499a828bb5187e90741f0ae26cce956429fe802cb5c2af7d9c68454bc11deeca87bae8a531ed2a1d4dd";
   hasRunfiles = true;
-  version = "1.1";
+  version = "1.2";
 };
 "adjustbox" = {
-  revision = 49596;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "19ee76701aa1c060d5163a06263cb5b6b58d74d4bba1b7e77813c5a3b683eef35249b6569fadd1c52c0cf82465c4e2acab7091dc1b396c1e938ddd6b0a1d3bb3";
-  sha512.doc = "33febe9f49a7c78950258d1955b4518a4ff15b96f6a866cc8f59ba83bf66a8d560a4d00430da494013aa37a72494280b4d165d2104d81bcfda237350855e1f59";
-  sha512.source = "f473a082b7bd5104a6a11454ffaefadc4df5d245d9395cb51d6922884c653ea73c065677712ba61a6baaef776783627a6bfe15cbdfa44b4ccaa7f3294d444f80";
+  sha512.run = "851d9abec7b4eabaf470755cea1200978146f93fca4cb8cdd33adb53f3b427031ea70685b8458fa77c5bd8b842b62524dd713c12a901331778cd854fa862098c";
+  sha512.doc = "3ddd36dcf4c56390aef552644e053612f1b2a900b2031f63aa6dd5da013916a00ead80a4e677c5225a14055f3b34d972faf17fe42e3cbe1f74b59a3b7d5206d6";
+  sha512.source = "0a25cd50b343094fc6a5a07f9196f96c4f391fbf6845cf78f5c76c76c2af0a5c8c9ed79a29d14d3575a416c7fe1c9ae6e455e17d3d03ca09e9f9e1ddb170bf6c";
   hasRunfiles = true;
-  version = "1.2";
+  version = "1.3";
 };
 "adobemapping" = {
   revision = 51787;
@@ -459,14 +468,6 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.4";
 };
-"aecc" = {
-  revision = 28574;
-  stripPrefix = 0;
-  sha512.run = "d36fd36a4d92a5031b36437ff8c75e3fbe2e3124982f496d6633476dc876a300d3b0ca18874d6d6256a096d01bde96854c30f76a777ad5ebf9755b035b41e7a9";
-  sha512.doc = "58bcfd0db5d39265765a32c9996807dce4e1ef22c47a3b6f4307c59eae01e1f8eab2e8d2252f83ac42a41aeda1542087f21a52ca523a9364f1ecc6b635251df3";
-  hasRunfiles = true;
-  version = "1.0";
-};
 "aeguill" = {
   revision = 15878;
   stripPrefix = 0;
@@ -474,10 +475,19 @@ tl: { # no indentation
   sha512.doc = "8361fc02999b080f19beb793fb0d1d802203114c1e1581c312a21e3a682191470b93e373fc269f8aea0e2643a69c8caf80855597ff6a71aadb6bfc869f4370da";
   hasRunfiles = true;
 };
+"aesupp" = {
+  revision = 58253;
+  stripPrefix = 0;
+  sha512.run = "7a42831624c30db319a81420e1142bf827f21daeb4719e1a179a63632586b1fb43709c17faef073eb67f27f1303b4f7db92a40425506f4d8e0bc6b456e4f6114";
+  sha512.doc = "ece447f4c12da8509be155f2743ca52988f32ce62edb361a85fdcd7733bb401cf8ecbbc0fa6bbd7d1662593f1084aa89a29b2f1b822a765bc6f7e581b46bc153";
+  sha512.source = "cb628c51f7f4d972f81b2e23495e7ac6e82e422c7e85ffcdd7c3cbb753b055178adb9ea386bb4b1f1f1c4d2cdc561eba27cd82c7ef33830db0cde9af99e7730f";
+  hasRunfiles = true;
+  version = "1";
+};
 "afm2pl" = {
-  revision = 52851;
-  sha512.run = "17a191fa347683f93f7d74e4b0be13b4690c84f0c17c084b10805aa1b5b057de6316836122114d1ebc76b1f8b4d134f6f5b08a21a8e28417f8259c3e52c12226";
-  sha512.doc = "0e175a69c26457719ce3aa5587f8857c77ea9bde7eaf59d33f7fda330cf73d0ea68060a83de09100d651b043ac60473dd2f25b8875566dc39d67eb6219be34a7";
+  revision = 54074;
+  sha512.run = "e539a12013dae7b30a83f615fe9f01678a25136a72ce754101aeb6bc8f1d287e006648f3050573ab211eeb00e5ac8082857b15e388d0da4886929a57d018fed2";
+  sha512.doc = "771e72385110bfaf133865ceaf9cb85a94dc1037f7390b027b21a9117aaeb00e88f67b191229fbbb61f417ccecd6556335ba1d2ba46a0a65079929a0ccbfb1a7";
   hasRunfiles = true;
 };
 "afparticle" = {
@@ -542,27 +552,41 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.5i";
 };
+"akshar" = {
+  revision = 56277;
+  stripPrefix = 0;
+  sha512.run = "d626d6e3a72fb8319f07c56d200566fc351be15acbbdc0ded7c3abb9765ce257741458109203882e8fa6131ba182539fd04e1ccffa0a25cbdcbe6f7630d3bfb4";
+  sha512.doc = "2dc5f4de3807a8e2c7a81046fb5d9dd92a651ef86aa22bd47c68d7b9a75943537284faa2d95d89b013573dfaca2d8d96e53524cb916152e46fac067532b108dd";
+  sha512.source = "9095a3c6889eb8de55c5956157a5dfc3e885e93b70ee6285b2ac14d4fcb244e65a11bea2476ad2d35b6add316423897bf8fa15e30e99b6d8d3d3d3cc65b20f31";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"albatross" = {
+  revision = 57416;
+  sha512.run = "78f4df49c5d7e4bc942ee80e1e9e7282d3b90b00af2cb946c52fca223b224dbf26c385f81d7a5c05e27e8e52b8de7c1197667e6ee699f8e8834d0d8739bc5f83";
+  sha512.doc = "3501da3f5dd2ed9830029f4880e59ec6a837ae6063fc7abf6b3d2cee0357c2fab2c7747676a0a1d719e68cb512e680fd0a2eb77ba09993f86f5e32ae5f8e40bc";
+  sha512.source = "fadc69184b89a4d664f9fc8b3d7d18ca3bf9cfc49c62ada68f7b265cf3cc9b196e06b086058bce2f842200f754e8c5f1eb16b5c4f17a9cfa00166d3ae64ceef1";
+  hasRunfiles = true;
+  version = "0.3.0";
+};
 "alegreya" = {
-  revision = 52379;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "d1ccf5c1e3b53dbb5e5f41f6845c0ebb03b4d74355aa11f4dedc8214af2c49f2d4023b5296b24b7330b4fef0f0862dbbbac864831dac16317f7025a88c8c4a6a";
-  sha512.doc = "3452ed4d59bdae841afcee2895e9ed64f60b5ce511f29468107f84ccf1cfcb3afc4798a11e48681bf66f17f448c27d3fd1e8b82cc75acfe7d6fb7e892d0efedf";
+  sha512.run = "7136053c90b3c9ae5744a1740e44008b3fea0a25323cb9033a6c2a2d1c72a024645626903913485af24ee08a9614d3fd6e9ba79dfd2206ec29c0fc1b1b98a21c";
+  sha512.doc = "fb152014915f9bf56ded5eef117169453923a86a8dfb165facd4e3e1db278f31aeab91e49e5e66d6d4a08ea10cba91ee762b4937f75f9623c77ff73b37965ddd";
   hasRunfiles = true;
 };
 "aleph" = {
-  revision = 53786;
-  deps."latex" = tl."latex";
-  deps."plain" = tl."plain";
-  deps."lambda" = tl."lambda";
+  revision = 57972;
   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";
-  deps."l3kernel" = tl."l3kernel";
-  sha512.run = "a85d851b21d2ab7d34caad7d59daaead5f42920cf1de5bbb5ad01e825b51067bbaf05aaec519ec8d7eb6c77b07183d51cacb6827d860063578c9ab6b00a96254";
-  sha512.doc = "0316e421ce8eee32108057c4e88381da3c0b47f32c0daa18dedefd7dab08b7ea6905bf92fcc523030b29fbdea835594ce22d991cab055c80b122aa69e9cbd8aa";
+  deps."lambda" = tl."lambda";
+  deps."latex" = tl."latex";
+  deps."plain" = tl."plain";
+  hasFormats = true;
+  sha512.run = "7d9241eab3e1e34f8c1aef85c4f2278680cd147cc4f188194c8c27147df3b9bf2a3bee7c651227aac79996e0745124990950ddc010a4f6662fda4a2f72575211";
+  sha512.doc = "87de188abf9880f2e680d6582cfb20d8166eb0c3ed2d3a85971eeac6ba8abea2d7f46b8037c26b719c1289f778d4e94ae1813598e73f8f56f6224e3299852cf6";
 };
 "alertmessage" = {
   revision = 38055;
@@ -573,6 +597,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.1";
 };
+"alfaslabone" = {
+  revision = 57452;
+  stripPrefix = 0;
+  sha512.run = "b958ac7987363fcefa3d8b7016f13851b91446a2a252e9561fd1a15df78b867b928f3e45a6fa1556abffa0de03b2b70543266ef9627b7474167c5672ac98d9ed";
+  sha512.doc = "375ca21d23599fe365f53f461264351982340d151ebdd2ce143189d8fd3c22d191501520d571f207a1f956f433ae6491e171c7ebb3c9c5421e30b358cc79f9fa";
+  hasRunfiles = true;
+  version = "0.0.1";
+};
 "alg" = {
   revision = 15878;
   stripPrefix = 0;
@@ -591,12 +623,12 @@ tl: { # no indentation
   version = "1.3";
 };
 "algolrevived" = {
-  revision = 52775;
+  revision = 56864;
   stripPrefix = 0;
-  sha512.run = "d9104a0e083b249b2c623dc15c800796a0ed5c141a9886795bd9329defac3e912f5871866153eac7e8ab3b4bc33c335b93f73a554c30f8c0e4a4209dd1d6f498";
-  sha512.doc = "b85c938e9f527d215ba8fb98ab2f466a3a938c468fc58027c8c625981dc9880ab04c1cd87abe42029d3b69d5694dcbe0c7249fefab5e5bb951040e3c42211b5a";
+  sha512.run = "bb038512d7ade0cf90217150d276d8ed7fb4279b8a3088bcb38dfe8f48373e8957909f5fdfdd2f6247682623414f04e732262a393cc0042279705ceb345cd608";
+  sha512.doc = "c42976e8fe3d53240de84845a0c4428363868629b5137a57863b5fc922ed8f557e2e4451446277cead1dba0dff036e843e5ead35e6e591a04f2edeb640c7932c";
   hasRunfiles = true;
-  version = "1.041";
+  version = "1.052";
 };
 "algorithm2e" = {
   revision = 44846;
@@ -622,14 +654,22 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.1";
 };
+"algpseudocodex" = {
+  revision = 56125;
+  stripPrefix = 0;
+  sha512.run = "e1cffa46708ef8d6479aeabca45e5d17bf14edfb25973fba5e3e006c0067138a432adfde0ad76f6ec0bafd327d1b2d74dddaf1b131732b5aa267b7fd898b4ef7";
+  sha512.doc = "5fa75ffc7847685bdc124faabf54a9bb45a8cc7dfda7df07f9d6c5180038be318190b20ad1fad3fa6d1f6b2e3a267ebf82505e7ff1626546b3846dcf935cae90";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "algxpar" = {
-  revision = 52758;
+  revision = 56006;
   stripPrefix = 0;
-  sha512.run = "7c42dc2037c4171a1e557eb1af38ad39037a818e1b97063790c7e987bd7b6e8e30c25e046d053dc67de3478375bdb62bf4e9c8c2210d4f149d8fa1d53417f8d9";
-  sha512.doc = "8568d188f107ceeac4b29be9b2ef69de8c6b4b22f8522047651de7fd6f77c9cbc985da87d7f7f7dfddccd65b2895324c029e975bbd115fa4f6acf02d6cb52f7e";
-  sha512.source = "405aeee3aff9f9f1f923d28f278c66a4235059c7998ec462ef66e48be35c1de77a2af971b5e168c45272f2fcbfa79713b64840f9e2ecc697c33425b6e40a1db1";
+  sha512.run = "90b0e879f0b335a2fae58f09ef3081096631a1cafce3ffa1d4ec396bea8c4c5911babc346b5c9864a2a9a798ff1ded2a489684ac97f6275d7f91042ae8e9929e";
+  sha512.doc = "d0e8e696fec318f395a08cfaf4e809b1fdbe3a6b86a162c69b6558eaff01c85a387bad0df4e0f4c4854572a45583dfec79db8ce78261c45a1cbb8112fbae5777";
+  sha512.source = "b60358558a1ca240bb4aeb1762855b200fc59db95e27ca65f8916411601c4315b7c05fd0e0b7073b2a627c2623e7398f3619d662377f1b3a72967170a1f45e54";
   hasRunfiles = true;
-  version = "0.9";
+  version = "0.91";
 };
 "aligned-overset" = {
   revision = 47290;
@@ -658,10 +698,10 @@ tl: { # no indentation
   version = "2.1.1";
 };
 "almendra" = {
-  revision = 52374;
+  revision = 56035;
   stripPrefix = 0;
-  sha512.run = "dccb1938af6f4de3a4135f2ed58d31ad1444d78ba7c415bc8d22d57f0c93d1b28b88634cad238df129fa5c40e4971998a70d4f753b0a7b8bf54b036d181c151b";
-  sha512.doc = "da7305ec5775fea53d96985d2d859a490211dda1eaca56934db20f52fcccc9ed811932b498878c896d82300033432288f179c588b55eb774269602096880e3eb";
+  sha512.run = "4e3a7334755c0f1a1d092904cee87a0aa72cbe843901df81b010d1e63a197d9c922223ff4247fa2557a5017e62ab9ee06958058c955ca56afb4cc0aad857eb0f";
+  sha512.doc = "6674ae47d682e1817263e03f61307af2a6e5ecefe9de30a559ef39d188c0fb80da37ea73b39076e6c38d9c8c7b2513e5e893ab15e198669ad419b30ab7742b53";
   hasRunfiles = true;
 };
 "almfixed" = {
@@ -698,14 +738,6 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "2.6";
 };
-"alterqcm" = {
-  revision = 51446;
-  stripPrefix = 0;
-  sha512.run = "da1bf55dd283082c5407b8ef8654f5da1b4f2adff120aeb7f2dad556dc01df18a0da16246e2b8b0242579e9fcc44fe0f4e43e8e6f9fea4ef2c67426699fdb3ec";
-  sha512.doc = "b7016f6129e46475d46f0e19bd14604821e2a892ab29963710dee2c404d87f6aa36eaf978535e297333d85b8fc21bb312d44d36fb3fe13422a62c854ec767524";
-  hasRunfiles = true;
-  version = "4.1";
-};
 "altfont" = {
   revision = 15878;
   stripPrefix = 0;
@@ -724,12 +756,19 @@ tl: { # no indentation
   version = "4.3.2";
 };
 "amiri" = {
-  revision = 52218;
+  revision = 55403;
   stripPrefix = 0;
-  sha512.run = "5d23cbea0fa6a8a0220ac93f6750b0601b8f0c904edbbdba9d4bef6d5ec9f2ef8935a16a29019b711c19f1a02e3515684e84568e4972c9e9eb42b691cad7e374";
-  sha512.doc = "3b59bf9be9f8e35bf056345c380c8c16b5889c61c114d7812e00dcd9943bc46364abb383876f20f4d7e3b51f6523fccb718533280c7de302f4ac56bb39e5b04b";
+  sha512.run = "36e26c23ddc53de46250f95a0d4a608c7e43e781b56002a62bf96675297aa2e81c9454811b8063080937feab4dd5b1f3782bccff4a1d2376d8484c9d60295fdb";
+  sha512.doc = "3328c73a7203ca3239036063c7a65faa9119ccb4c1f7fe4229abf49a0bd8216e4bef1a93a18c452a0200d781240dc643888c2d278eb97edfcd1c716ae14478e2";
   hasRunfiles = true;
-  version = "0.112";
+  version = "0.113";
+};
+"amiweb2c-guide" = {
+  revision = 56878;
+  stripPrefix = 0;
+  sha512.run = "1ffd4d1691abe2543585fa950d9b18ebb10e48c5c7d97e2f05828f04620bfd730894cd92f0df507627ddd9451a253ed8bbe89c07306b6db27ba84bd6c24910ea";
+  sha512.doc = "d8f6ab658d8d8f2e05876ce27b5220eb2e10a58775cde91f975cdd106708ddef86781cc1c004b4381176fa7ee8ee6630a34bf7cacec374bf21ffe5e06c8d4d68";
+  version = "1.0";
 };
 "amsaddr" = {
   revision = 29630;
@@ -750,13 +789,13 @@ tl: { # no indentation
   version = "2.2x";
 };
 "amscls" = {
-  revision = 46099;
+  revision = 55378;
   stripPrefix = 0;
-  sha512.run = "0b69a69452e148113c208d52b8221056378e6f869fa2efb0c52d49980ab574ac21a04d9957a2450a6881514645cd156580ad2a0ff2879e240e217642061afac2";
-  sha512.doc = "8c98528cd59e8da8c017fb49bc9a7cb617261f899770be56d92b1d52be274993b1777923189957f2ff70ef339223be569db586b80db7285cc824f321f258591a";
-  sha512.source = "a6eb2d6fd0a9640ec2ba625e91703403b80564d069bf8b873b40cb38810c30f1d0f7d372b81a194e4022a33393ebc612288d4d833a38db756ef9c344b4cd1726";
+  sha512.run = "eb39dc97a860047d764884663a1f541aa95a2d559dd55cb25f6b7c6c46617e6c33fe55a9fdc37b211c613333911df6e260768f43ae9630a208ecc7fb774891e5";
+  sha512.doc = "c2e563bd239f36b0db3bdbfe1ccb4a0adec0c22af25b557ed748897a99672f05f36f2bba6e51827c6fdd60b351079809b15c0367d075566c5e48682c23108fe2";
+  sha512.source = "7a96a464f9826a515191174b6e33016c7161c7547ed70ca78cac256cac68b4340a2b3bd9608f79df106c3eb2383b8d6895012a2cc6dee0c76d53d116679f4c6b";
   hasRunfiles = true;
-  version = "2.20.4";
+  version = "2.20.6";
 };
 "amscls-doc" = {
   revision = 46110;
@@ -794,11 +833,11 @@ tl: { # no indentation
   version = "2.0";
 };
 "amsmath" = {
-  revision = 53640;
+  revision = 56514;
   stripPrefix = 0;
-  sha512.run = "1982aa9f7345f47e50efe9f1e8be307491458e3689838cda328afdd704fa8e04e232187c0778b05848e46d49fada532b14b74bb0d327ebd91f821190b7bf1306";
-  sha512.doc = "9a9f7d065b3486d31a9db681757fa48d14d319232d918ad07fa5a8cca205a6e0023584eefbf36542bc5dfbd609b69b4801a8c95d7e38cfd9594cbd2afa862e50";
-  sha512.source = "c7f680fe62fcf225ae466f71d78578a8d48e34fa9a8444b4ad7730d6309eb8c7b74bc798e1b116aa6385a810f52c165505d915de66840b5ff42dc82b9f74acab";
+  sha512.run = "6cf5b39f9b94f5f9d0ffeb021422ee7c04a15c6cbfc0e29e58386c386f356cb311b4cea9134c5211a6aa9e8b6f8a6d7af61960c6aa378887754d2450261b0665";
+  sha512.doc = "eb71c5f8e5a05b76cc5cc1eb554843160d6592e4c802f8d0c4fa009489966350698b7fa37fd1fcac1a70e0ecebafd08dfadc81d069bd1a1867e09dd09295128c";
+  sha512.source = "2566262754978f25ba0bde06a1d6b161ff60e3306400a40e054c0408d932499ce54933e7b0a39875c0bd54ea8a88234e2503bee8a319a5b12388193eab1b0eda";
   hasRunfiles = true;
 };
 "amsmath-it" = {
@@ -817,15 +856,16 @@ tl: { # no indentation
   version = "2.14";
 };
 "amstex" = {
-  revision = 50602;
-  deps."tex" = tl."tex";
+  revision = 57972;
   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";
+  deps."tex" = tl."tex";
+  hasFormats = true;
+  sha512.run = "d52e4a817f839c95b7718c65b6cba571443f9f25533a9c7412a69b3f15c89e995494ed812ead2ddac9f0952e0e842216a7fd443ecf2360f50a36107241397c19";
+  sha512.doc = "ed91ca4af98a72f081aa021b598ed58888150a73346d5d8da9ef7171f7d757c6d690169e1eb4b3e409ed8b988b8ffff9475f35ca7a443074080c1c9568ebaa0d";
   hasRunfiles = true;
 };
 "amsthdoc-it" = {
@@ -835,13 +875,22 @@ tl: { # no indentation
   sha512.doc = "2d35f87da43f957d7ec3d1e61d052d14b4dc207207fc2e6dc4de08b699e5211db17a84f0305888294ae163691e4dee2d067fb1c3a29fadcc34214033fe8e22eb";
 };
 "animate" = {
-  revision = 53010;
+  revision = 56583;
   stripPrefix = 0;
-  sha512.run = "1c8d528d2bb96d6f47ee2a36dcfc7b1f696426b799b2825cc4ca558d18cfeb6c142c32040dfe861f86a91f671358c45825d00a2b0c6eef8d44e4b89cb6f64b3a";
-  sha512.doc = "2839c6cd71a0ae63d4116ea4a71b9566f698cc77f727ab5dcefd6ba97f9d433b1b6b605bf564f4f86af0cbe2a7212cf38b3c384290c7e19a9c5342dfe8885a18";
-  sha512.source = "eea48e512e9167a08d214a04295c49c729d96728a2f5e70f6e7be7d4b4e74323f44d86d921853a7a22b4adab8bf2285f6749d50ec812c34c3ad6b4ec487b8180";
+  sha512.run = "29739e0c995ef6c00efdaa730a1e866b13efdb4005db8b8088ce4f1826899adabae41e2b7c0659df256817274ee11dfb7a033eb7b2f11302591a1fd541e1c1be";
+  sha512.doc = "95fc8d11094fc1e339ebe7c7db4ea88237790358bbd9bbec8420e3f53bac986ad2b8e6dc5e962c2d0c3f0de348b7b1cbc39b0289cee26276009e914e3ce15943";
+  sha512.source = "68a330fe39398265a10c25d452a6a26da8f4bfb28fd0826293c710e90259a401d55dc2b5adb1f29301bd809ccc2176a2e8b4e82a324a098fb9a29ec7f17bd8dd";
   hasRunfiles = true;
 };
+"annee-scolaire" = {
+  revision = 55988;
+  stripPrefix = 0;
+  sha512.run = "73158727d9c5da0b28fe71661c72a8d1faa705034be8cd10ae36abc266240958cdf0dac962926a96ce445be187016d8440b7aded3129de6fff814ceb6366beb6";
+  sha512.doc = "3e02616de1f5d55837511eb2b1edaa571b6686192433941e1412d812588fede1eb8a8d160b724d1fb8ef8f369cbecd401d1bcd09d4692a79b182ce5bccfb6021";
+  sha512.source = "2e0e2a08820a7826fc6e58dc97ee9587818bdd62d0eb046982dd1f8a676df705e5bb87cfaabf7e260089d71ede1f597b0afd92b69616c0047d64983d919da50c";
+  hasRunfiles = true;
+  version = "1.6";
+};
 "annotate" = {
   revision = 52824;
   stripPrefix = 0;
@@ -856,6 +905,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.1a";
 };
+"anonymous-acm" = {
+  revision = 55121;
+  stripPrefix = 0;
+  sha512.run = "6899f18cd8422c1671b74a0ea3f9e8eb47d7ef62e0809d12e71de6ad6a7634c8cc7af22f701c710c9b2b5ee3867acde491bec8d3e2690e2532de3488aed1bec9";
+  sha512.doc = "f7a91677338dff848150dd1beac5645c157550f3463795d2d67493f35a81a09d33ee6cb39f2d921f535c12f26bb60ac17e4208298bd8bd7ba0dea8da4e1b41e1";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "anonymouspro" = {
   revision = 51631;
   stripPrefix = 0;
@@ -874,6 +931,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "2.16";
 };
+"antanilipsum" = {
+  revision = 55250;
+  stripPrefix = 0;
+  sha512.run = "d0a31d489cbb68ba258d78c14d294dd3ceecad43d746a43fb87d6c129d2b97145187d8f0207d320be91168a3e8d0612c79bd861d327572517479831a52d290fb";
+  sha512.doc = "e7b4caa710d671e8474df9e449112033be38da1465ac475ff77748646b8c24c5589cb2fc3fccaa19642ec68960be1cda4fc4bb427e53ce19ca5c99a45f74ab44";
+  sha512.source = "bd2860412e363d97f50a0055036b283c10b475832c6acd1da617a76cc05391b7cb15ea2b080c2658b8e0eb7d455a5ddac80ed25f7cb0f271c0172008b7af323e";
+  hasRunfiles = true;
+  version = "0.8.1";
+};
 "antiqua" = {
   revision = 24266;
   stripPrefix = 0;
@@ -930,19 +996,19 @@ tl: { # no indentation
   version = "1.0";
 };
 "aomart" = {
-  revision = 46091;
+  revision = 56102;
   stripPrefix = 0;
-  sha512.run = "699f0d1fc5e8fa4bccd31609044e2330dd33083acb56832a64ede0d23d4f21e7a8d37ad5734e282d11238c334399f5b5b6449671ab82b737f9c51612b49f727f";
-  sha512.doc = "ca87c32d703e136735fb6e121c4bcf9fcad367121b071bbb792d96da1669001e4221116275aa6b37df1af7788df4ddaa6948aca3405facc0f05af7ae6924215e";
-  sha512.source = "ba9496f1adee23fff0bf5b3d1d5d54f05c6808ce2b40e7fad8450f01d4c02a2e5e6104304131eb52c91df47a1091f46623d4d4e1849d015f1e6b37d86f210c05";
+  sha512.run = "5b29c240180a4bd2c19ce3ac7d59bddc3e394b8eb92d0723ab044058e06b9ad8ce415f230e3d929c0425b70e544a2b9ce98168c594093113e6bc7574b2e1ba95";
+  sha512.doc = "b32c3bcade372d00f78c8e97e0061a882c3773ccd1730180fcb09a397c635075445b0d5e0584c42531e1352df721d2db77870e965ecd25b55b252b380c1d7ef2";
+  sha512.source = "67636895d4fb4bf64130fb021953117ed29dd69a82b991ba05d6f40a2cfb3653d11c78d0ef60023cf00a7c44de87cb247d384231ef44265dfdf85083e0a49643";
   hasRunfiles = true;
-  version = "1.21";
+  version = "1.24";
 };
 "apa" = {
-  revision = 42428;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "53d30a8458538f1852113370a63d49e8c0926437752c9d03299374fcf8adcd79c1c353bf420ac33a364e6ca296079ff385609bf2afbcb95dcf54465715790703";
-  sha512.doc = "df97c4fd9187772847f29950e899fae480cf5fd82d7f6bc3fcd1de93a1535fac7481436c789ae2c04e998f521f23e5b5219b38904afe1394cebb6c68e55d780e";
+  sha512.run = "dd825c533b29f8cd005b238877763ecc299f1a6d23be870bb7b899401f0aa73c4377bbed640e220faf4a1fe204dba0d94671c67ad83cb31d99eecb76e658f352";
+  sha512.doc = "5e5224f11e811511b965e6f79adbab67bda5c809fdb4fadd5913ce570e34a933d139e8f418cdf7beff6e24e79443e4f4e4acd81837f24a5783915e169099e720";
   hasRunfiles = true;
   version = "1.3.4";
 };
@@ -965,34 +1031,34 @@ tl: { # no indentation
   version = "0.3";
 };
 "apa7" = {
-  revision = 53280;
+  revision = 58787;
   stripPrefix = 0;
-  sha512.run = "8fc5c0fa2417077725dc121b098f69fe23ab721d7f6774dcb2464123ffd18c148897588c8d420dd433d20af98ecd435ba637cdab7de5ea4134574fc6d1ade162";
-  sha512.doc = "4294a53e7ce87a02fbbf88ccf598343bc09284acad858ece888ea84735e83134aba4d761bf669a67f98ee400dfeb8d73502764c160df51e228a983ff4d945a7d";
-  sha512.source = "3a3e161294c8f5e067fada0b6aad7fbfebf80fff4932f8ef75a47616322f589b9350bcb5684c2eab0fd64abffc4916d813d88542e6d929c606633b682f0372d1";
+  sha512.run = "f061ae445a26f93d4e9eb7144a29ef394edfc9ec9b7f011e08299335fab1390e9294315b6eb922dedb7e2137b7bbe1fd5d5fd15f68018f1becf8265590e9d96b";
+  sha512.doc = "a2ff51ac949c3914589ea6f71c1b992b92276edf6775275b6cd89c899c4b3b9cd0a161c67fc28da29ffa877956e656f6370f6e86eda1b7009a09046bddf92a39";
+  sha512.source = "7ec37970c094c7af02ce371b83905006b92e25c2056d2172e27d4bd3ba0a91920021e7d459c79a9996ddc277248eaca706461e716a9fa3c6d56a01ddf8f61848";
   hasRunfiles = true;
-  version = "1.04";
+  version = "2.11";
 };
 "apacite" = {
-  revision = 31264;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "02b89374a1a61c7f972aa759b11420cbc7a895972a9b36dd09e48f0aba2ab8d83632949d6f8fbdd781170403639b765ee68a22e1962d13751af7fbd121a875df";
-  sha512.doc = "f9840a9ef1cd33ed01b8338956b3da3676167d8ac99cd1ce32dc0383992fc9b141edb20df2fdb6b0d5df5762ff8d434cd84881f8ab1cb4035fcfb2bd9f3ed14a";
-  sha512.source = "4fc1c927dd602684043a803d8e15b7bf548301bf2562a5fcc111a52676f96740db138da3b58993ccffb78bcaf6dace321f196c5a77022955955c87f729bea506";
+  sha512.run = "6f69733b58f0e791422269f48b56a52ad6b131afc4ab5c7c5ad1d9e0a5ec0d84ba48b8e43340f8e1a563a0c4b10aeb131f1999f836e89f311f067ded8464f91b";
+  sha512.doc = "ba7720239a221d343cc58d28a9611f731a6db21f1e7852b0cdfe0c4f0cd97d475efd83c863b14d197f2206cb2bb0d314266797376b548de250842aa008ff3732";
+  sha512.source = "bfcd5139e68c54b6c35dc8afc46022ffb56101de5dac3e6ea24df372483c2ecc2e3d2d0a486ea284f2fb6b0aba4ca622080910821a27447239ec527db941a2f9";
   hasRunfiles = true;
   version = "6.03";
 };
 "apalike-german" = {
-  revision = 47002;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "37dec37d8e08a2f124c3874eeb9934e7da3cc9cc8fb1ce82705a461e060e4a59dbd82c779ce89c4d53f1ea909b4b9abfd57e1f9362ed432693dbee7b1ce615b9";
-  sha512.doc = "91899056f7c71a20e08e4f5e1a2cab83282f9436409cf28b120b92a3633ec5287ae2b6d7fec2c20ee28299589150408ef2e9760028231523e4c378351a88432f";
+  sha512.run = "8e9a0dd594dce98e441f256efacedecca7afddcb3d8b6bf64e6490aba74f1f3584c71584b7ec115cb054eb425477ec801a20c84ee75aeedbe588ad6302780612";
+  sha512.doc = "fe58a0f2be0b8793ef15f07029d1b81232046b92b48a6d8fa00032bbdb482aef3216ca80f5d9c80424f32d75b8d57e4e4e74b5397711209e18b576f6860d3b33";
   hasRunfiles = true;
 };
 "apalike2" = {
-  revision = 15878;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "ff569f69538cf82afd19d9dd8f798ac36994791d4c5cdaf8998267883432ee0230485de6b0aa9e9babcb285f1121936e911fe69700762010bcfbdfac6cdf5be6";
+  sha512.run = "cb837c6299628a58189f33570de7717d53d83d9de456255b489ae4ef73693b51bffc2dd12c9496265ebc8cda64d8da8b1c71d46f9d96a4bc13c07c9a6e021a2f";
   hasRunfiles = true;
 };
 "apnum" = {
@@ -1021,10 +1087,10 @@ tl: { # no indentation
   version = "1.2";
 };
 "apprendre-a-programmer-en-tex" = {
-  revision = 50933;
+  revision = 57179;
   stripPrefix = 0;
-  sha512.run = "deaf9ad3580a803fd5fa7cbf8f8a11df4d350b7b90ed880317d1e67290ce8b48bf783bfdf470076b672cc5e257bd10d69d6361c7959d81f9fb759752adbf2a6e";
-  sha512.doc = "820f1ba9f635e05a25167203a1f27d13c380281640784828c27ae7366816f309c6d3a630abf3ed49ed996357064878c735c9d7c17bd6dc262a21a420fe40f77f";
+  sha512.run = "2008619320d2b7e906c2511609e76894dd065f8e56dd1800cfac0e13af4415dc76c437cdadcf15cfea85d7862996e99ba3240aa30d36fa70d9c1d950b7c97e96";
+  sha512.doc = "34c86cf9f0a296846a85f896f31da102013dd7b78ddc11d20aca93770671f2ab05930167160d3bf6282b7740fd9d5eb5238ec70bdf405658c1688d3bbd769d7e";
 };
 "apprends-latex" = {
   revision = 19306;
@@ -1043,13 +1109,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "apxproof" = {
-  revision = 52324;
+  revision = 56673;
   stripPrefix = 0;
-  sha512.run = "400c95494142780c5359df48864fd5ca48409180220a9efc25c0650889fc84fdb725f7ea263c00ce7afb8099c80d4ef42b601e5b61ae0bd2fb8e68fcdbb673fc";
-  sha512.doc = "fd818e5ec077a1d479b0bbcc8470a80c396dd5e4b0fd6191c30009f709d8da6de74277e1f162df3595a4de6e10bc88db6290c9b42df37672d8a6aef7047d9164";
-  sha512.source = "08eb4f6d847ba8d7fb4d19b81f1fcbd21a4d1bad908824fc6739b16d08763f6ba1bf388d5f0dfce29916205d6751983f06f9f4562d44f9284f690fb16fe7cd80";
+  sha512.run = "0a81e01bc885b8e7d4bd69361b185beb8cde62f7a10db4e5441312dfea15c0da7c352a4cb412102bdbedc60d974ddaee6f44451042283f577b9a4b4f54a263c1";
+  sha512.doc = "a6131b7889d7882a9bfe253f3bfd380498310dc9f0d13ae382d786e3604201c887b98b8555d69cf62067b4c6d5975b16f14169dc10cf4ca5933af3fb843b60b0";
+  sha512.source = "0895ef3552dea3685c529a2adbe8efc7a7010e63b277b8e3740d1a123bbaef1609f05d2085887d013ba9f75155108397153b187f13b6bea8e49954bc75938a2d";
   hasRunfiles = true;
-  version = "1.2.0";
+  version = "1.2.1";
 };
 "arabi" = {
   revision = 44662;
@@ -1076,13 +1142,13 @@ tl: { # no indentation
   version = "1.1";
 };
 "arabluatex" = {
-  revision = 50571;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "53a6524c6d10975d9146acd93aec62f57175c8403dd23c4844a0ba987ddcdef7dd122132c8540733ce5c8f4f8f2f589d4ecd0c10b0ad8f2164b0886a5b8ae6b5";
-  sha512.doc = "fe2a14e2e02c125c9042715766abfbc7a634103843475b15ffa7166b18e33e5e9c8d39481722a19963b79affdc88c3283ada72abb60f05b09a17fba999d06442";
-  sha512.source = "8fbbcd24cd141d0e79232ba5e7d26cf95a554e903a1dd73e78d53c2e7d79f961a6b86bea0e880ae2ac919a5fcfaa44c72ee000d86b0a268cdeb16ffc98455c75";
+  sha512.run = "34c30ac3f9382b56c013fc8cd85c8c42ab903739c3feb73d5c1d6531340d2c0deb157b6b88f2a7554c21be413420484a667a0a672f04096a5dc2afe6c82511f2";
+  sha512.doc = "b9153998fe52ac42bed2bce670db355c805c274b71e3a1f18d8794c36bf9143641b01d9b42cb95f0c126659651aa7dff38e69a7a122326b54e719dabb6f7ebe0";
+  sha512.source = "bc4aabaf735415ae31c0b4a44e339ba7dafee4f5f01462a36c2871574fe540847e98e279f971c17f9cc22626f894dcf8ec5a74e4bbe92ec8498a43c6647231f7";
   hasRunfiles = true;
-  version = "1.17";
+  version = "1.20";
 };
 "arabtex" = {
   revision = 25711;
@@ -1110,21 +1176,21 @@ tl: { # no indentation
   version = "1.0";
 };
 "arara" = {
-  revision = 52106;
-  sha512.run = "5ac4fbc1a03882b15611af6268453bcb2c1a476524a2913f16d78cb04414c3eb4cd9ab7426db813d95afb1e51828a6eff1683fc03fd785ffae5763d5fca89b24";
-  sha512.doc = "4f2f7312a15e572dcf4f9a2fbeef07e9c6d940401c28730afbe9cda3e3247c835771d278e1562d55c33728ab4ca92cbe26a945d96c5e50f6ad54d424ba2af47f";
-  sha512.source = "808c73a642fa3c8e74baeb86e1397c797f9dd69c56dd2ba1e98b2136a753f62d5bab354a7255c456a5837a324d586e36e36468a43658e74562d7e96fd0015fcc";
+  revision = 58764;
+  sha512.run = "e898d9e3ba290a4bcc136307f8bdfd21b3500de3449c6971f832b42e984abb7acf81efc350b0f9868bf3a1f020ad6c1f9904aa2d48c14e9c58d15afcc1c9d5b4";
+  sha512.doc = "8832a9e0c92100505af47653510c319964edf07c4ee228608b7797dfa297c70347d5111320e57e6ad96cbefbeaaf895938d785fee0821156bd5db6bf6bad6b6d";
+  sha512.source = "3fee3982b1f18fadabd062d95670a9950d912fc6d3859bdd0d0b08aab5cf5be4ebe45d410326fadf0c21693fc1938d361b8f451feadd6ee3221cc1eb17eac414";
   hasRunfiles = true;
-  version = "4.0.6";
+  version = "6.1.0";
 };
 "archaeologie" = {
-  revision = 53813;
+  revision = 57090;
   stripPrefix = 0;
-  sha512.run = "3bb26b77a812a285d5a6fffe4906efaef3a972a6078e6150531f756d39f1287af8746a776cdaec58ec1d3973da740c20f0352c322858f2631772532588d429e6";
-  sha512.doc = "fd3bf3deb244ee05b4ce1eb9ca81ae0c7268447a974e87d41e1cb29468129f7366702d271b1fdda2f5e3ac561a2cea82525877b2f5b077ca80f9bd6158a17608";
-  sha512.source = "2f91bb17dcc8b650a379fb1c39ab1b52361b01eb5fa8e77bcc53344c777c32ed5471472540359f9a6ba1053628f823e1e12838ca08e9ae8df0359a13948057f2";
+  sha512.run = "40220a43a1f5775076f75379eb7c6c6eb4f7e9c709b7ff22b0db29868f5ac7e5def3cead10dbcd17e3bad2aa33af7942c10f5968c42494b5ab35dd6886c912db";
+  sha512.doc = "efc68c2bb845f1966aecf6cdb20694778212261d6ba6f0136c87ddd0cd5872d0196c99220c56a9c9dd50ecc32c1a59a4d4630ff3fea9b5d953a0a9ee3aa66dcc";
+  sha512.source = "2f3324c8844c5d04d35e3e4bbafac591c1c33ac2a0ba21d7b4b1231ae7883ddd53fee555ac89d2f2fe27358c80470b414f14fef073f03fc3ed405b96a5df290f";
   hasRunfiles = true;
-  version = "2.4.4";
+  version = "2.4.5";
 };
 "archaic" = {
   revision = 38005;
@@ -1134,6 +1200,14 @@ tl: { # no indentation
   sha512.source = "5a39568546651ef10937849550c3305bde9379737b21e24b2adbec532dee8192ddbdaaa77f2e6bc135d518f354c1b20d7c43bc03f65ccf47d423f4af1e75d620";
   hasRunfiles = true;
 };
+"archivo" = {
+  revision = 57283;
+  stripPrefix = 0;
+  sha512.run = "0f6b7985d73ba3e62874bee7a05c215cea0008bdfd1b0c3df6795a2d6363ee2a209df956b4f9698ec93ee8d9c6bd62ab5bf3bf19cff78c968a97da58a80b5f40";
+  sha512.doc = "88cf002d557401730c035727251e228effdd25d52e9d76edc950d0f3ee639e2eb5bf623c77a4e80dd902b7095076030b32aa017c8adea9f57912ca9de51ab7b0";
+  hasRunfiles = true;
+  version = "0.0.2";
+};
 "arcs" = {
   revision = 15878;
   stripPrefix = 0;
@@ -1187,13 +1261,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "arraycols" = {
-  revision = 51491;
+  revision = 56997;
   stripPrefix = 0;
-  sha512.run = "818971d673180323d20534faf9bcc41afb7da93f41df689b37237af19471ebba1942d0cef900bfd5dadfa5730295bca2e9c9e873ba2b25a1fc885f0d5aa3c4fb";
-  sha512.doc = "10d1132c5f964915c88eed1c00edf982da80fb1dea3dec028e372eeacc91023b06a0b49a1b63e4442d23c0ef550f2651dc0f12246e3d58d0ae320006e9b49b37";
-  sha512.source = "1dc2055ab0a511896909ee526b9f5b1adeb079dd9a1a6d64c0fe9ef326e29392d69088b47a7e26dbca2d32e5527549c7bcd9d8f3b28cf8c1ca7d442819488638";
+  sha512.run = "68ee9188b13dfd1e45552fc0845b80df2a497a00af9d70eee726694708b214b9351d7955819d1a9e21deb6873cf5dab90416b05a58ebfcc2d31495992bc989e0";
+  sha512.doc = "43c31b4a1cf254891226c796193415d81d299cb0e831e617c61d62728b6bca768cfd813ea4b3b1fb15a702411bebf53bee36e025bf8ae8c287cfed51b90710d1";
+  sha512.source = "65a24651f3cfef479b4027a0e3a687b43016bb02f67ffbc69071f57b43914c4f3cb5ade46616b7841df948562ce3b8d9eb051739280181205d68f64f3104b8d8";
   hasRunfiles = true;
-  version = "1.0";
+  version = "1.1";
 };
 "arrayjobx" = {
   revision = 18125;
@@ -1228,6 +1302,13 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.3";
 };
+"arvo" = {
+  revision = 57213;
+  stripPrefix = 0;
+  sha512.run = "3a6236c3f5e07f3ad709c6a5e0f7d2c90574cc897f6f5d470aa1523b537370587b5942e1a8c581fd96e43e80189fb1c7c4a2475823077feeb929ec594a90ffa9";
+  sha512.doc = "3d3c6a92159b47e8dd5ae7360c06c8d5db8ccab609dd5f3db47db2ddc9d62badc3e6bd7c881ec5955003ac2b460c550ce56154cb2323ebd2bdb8205318a709ce";
+  hasRunfiles = true;
+};
 "arydshln" = {
   revision = 50084;
   stripPrefix = 0;
@@ -1296,37 +1377,37 @@ tl: { # no indentation
   version = "2.1";
 };
 "askinclude" = {
-  revision = 53096;
+  revision = 54725;
   stripPrefix = 0;
-  sha512.run = "909260b69e3f3cdab62e8b13b80a12fd19a34703267171a0f87dfe60651e4ab249a670a1e7854a3d63f00e266fa127b2ab1c13f949abb06afc49397abe7bfd54";
-  sha512.doc = "068432d6304e755f4231ddbf8cebb6ceca31ed040190e6c06d3bb84e8cecd66b40fc7e46650008a6d2effbaa24a7fb3aa43633e46b7a2f4edbd7abb08ee45794";
-  sha512.source = "201cf77a2ae05dc9bed78aab5206d384fb6bb11d6e112a08372948384b0a10d49823de85fa6dda78135c4312cbd28cc67579fa69c7756ec99e54b76f8b3e0fa9";
+  sha512.run = "828a18ff7c2d997f25b46b9ce8626a749ce1a18989a292f7f44e9eff0c28d5819e6e017398e76a6872da6498a4ff8306d8f8e701b87b80f57f455d28389f7aa8";
+  sha512.doc = "a06a9170ad1637c35a25c9a0d89f3721ec350a0053cb5b85374fdb5cc67e7d4653e75c2a5f9b47d19700e3e9ab2d70e5c0c419f68715e664185bd30759dc0291";
+  sha512.source = "909effe3b7569cdd4a4a1fd7db12cfafab6c1ddc0987709199a051696b447f9b57ea0bece52efc28f41f49e2b81611e14e975cf93a2d5e4b1c202f84b9702569";
   hasRunfiles = true;
-  version = "2.6";
+  version = "2.7";
 };
 "askmaps" = {
-  revision = 32320;
+  revision = 56730;
   stripPrefix = 0;
-  sha512.run = "d07dc2e9b3cd0dc7d46576fcf9f08c5a628bcc701a95d8d934e322666c93f649054b9dbfe38f7d9577ce3d27344e9e5a99ec8b1e710c45f4a609a5a2dfadd126";
-  sha512.doc = "a170144d18c4a90b166c8a315e9d1f0d86cc5f2a53ef69381652c3f8307b85d8b70dc610bcb98be6eee1bdbedc02b7cbf097a13133da78d492c71db33d94b04d";
+  sha512.run = "0f4d91a15053d40d329744c429540075c33e2098f6d9d07eccc5ad16c5696233dd01de89c61a7090dc127c3730ef04e24f8d56845919cd268ec8c0bc68d9c09f";
+  sha512.doc = "268915d685c8bea4388055487ca0d30418557babd01547457449085e58d639bb17787b6b5c97fa99301555afa9d9d11754196cd2b1dbf48b642b05a835b383b0";
   hasRunfiles = true;
-  version = "0.1";
+  version = "0.2";
 };
 "asmeconf" = {
-  revision = 53544;
+  revision = 57833;
   stripPrefix = 0;
-  sha512.run = "2158d1ec6d6c4e57a0870e16d1f0308197bd5be36e853904c7da87893c4e1063447963bfb7a653a2a2d16f122645397e46658c6b73e115fd4286bba9152cc25e";
-  sha512.doc = "e25477a5227433f4115c2d3fd99585367c519678b8480c18434a3e1cc5ca067c3af0d4218403ad1a3041f8b18424966553b28a2099a82be44f06492359230f10";
+  sha512.run = "c9a11e0e1d2fb5ef9c674b571bf8de631fd1b329fef165cd5a1a0028f80a9447757bb769b743c69e29405b1688ae292110cf958f6bfc9092026a3277bcd78b8d";
+  sha512.doc = "11db98dc9a9556e7e03b5b5e5284b19ef97c295ba3f21a9e3e0ee2cac712d81a9bbc485b27133f8f2bba158037d4388c1bfbf4dde241715a2386b564a51c45f0";
   hasRunfiles = true;
-  version = "1.15";
+  version = "1.26";
 };
 "asmejour" = {
-  revision = 52728;
+  revision = 57598;
   stripPrefix = 0;
-  sha512.run = "14d0157c28e56292411595b7fb166d62b177f97edb3b1d348e98af3a265bf75ffcf3a779039d1c20990061c5e5e34d3d7ddc409c19cd824255cd777cca2a5e8d";
-  sha512.doc = "d5dedf38f02e993715f7a588ca3123ff811542cfa8fde29ca7be731a95de9f355bf98677d06f16c87ccd6ed5da80f6d87d41f877240c6db24cc6a6b77343091b";
+  sha512.run = "9453ee840ea08b6987c40df52f5b011f57642b5e1ee464a52308febbed71c3c3fb8953d2bdf98bb575900005aaa0cc6ea4146b930be5fb2f309474ad5002f39e";
+  sha512.doc = "2322b31e9c1d619c0e4eee7336aeb37a22d9d3c86684044c318762a3a2887c02bab2a7eb86a512e222f22955c568b587442c15c79e77c205dbf50914e8b9c682";
   hasRunfiles = true;
-  version = "1.09";
+  version = "1.15";
 };
 "aspectratio" = {
   revision = 25243;
@@ -1351,6 +1432,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.8";
 };
+"association-matrix" = {
+  revision = 56759;
+  stripPrefix = 0;
+  sha512.run = "1f33388d8d9230fb11dc1318cb9c189fb7c14ef7404193d1df35e83863869ab8cd7f918bef8fcfdcadbff29b3c20db7309026d0ee3935e78db0f5e3365f065ae";
+  sha512.doc = "d22756e5fcb921c6f0e80c6d0f5322dda0be1a52a5de60b2a0d7ca719b4d92e4039c395e06f7b4a6fa080aed59e4c4c30ae9ace8139963943134048cc40e6c94";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "astro" = {
   revision = 15878;
   stripPrefix = 0;
@@ -1369,11 +1458,11 @@ tl: { # no indentation
   version = "0.1c";
 };
 "asymptote" = {
-  revision = 50885;
-  sha512.run = "e314e473c14c2fd8980d3d0256c6cf6fc7c757a5b4b4dcf90c93cbd15fa70a5e7a0ce453c8382df3f9cfa4aba9c9047b3ee44084e398d9c767bb88ccf3bb47ad";
-  sha512.doc = "7969d7001bf3662ed28f92b07defe67a9262aaf62d8dd2f137a4f36d90fb4ffac034052a6c037882c3bcfbc0fd2b9836fc8815c90c741a26dbc68b59a8879782";
+  revision = 58569;
+  sha512.run = "810f80e2594099f3813ef28d06a4905a0d0e678c16213f2a900c970e3900ad1ba1d72255ef466d847fc03c1ce90db4da41362679e542bbfbf5b0665e194d67a3";
+  sha512.doc = "b2d76f550a026ff433193d86c3ddb284efab9d53a2b6e08e22eaefce9f95966315dce373be813b704b7b8447e5de61e3d12173ad295343eacb1a2991a0a915b6";
   hasRunfiles = true;
-  version = "2.49";
+  version = "2.70";
 };
 "asymptote-by-example-zh-cn" = {
   revision = 15878;
@@ -1412,13 +1501,20 @@ tl: { # no indentation
   version = "1.19";
 };
 "atenddvi" = {
-  revision = 53107;
+  revision = 56922;
   stripPrefix = 0;
-  sha512.run = "d936d42a3a5e2c4fa0dd9064658b450ea521e054c22ab9a30b3b11e0c093ba9961b3553b686021f0fbeae6eca7e40b2aedf3c42287ecb68a724c499007c552eb";
-  sha512.doc = "56f03915ef772c486e44b0b80ceb29543c2c1e2ede3ba5b4028af17f013aec8f3d373912aa7b1ef8b5f4524de5c0946833cbe418932dc3bdfe10a752a18035e1";
-  sha512.source = "56abe3e2c0b7896d4b5fa46f70569f5fa0a7f18970f8d4dd6255a3825d5a698467bbb18b84eb3400bc81ce799577f8d58884f7a1c5f38a1bc5ff77a8232d3125";
+  sha512.run = "49b0a69eb308e19e3ed97406fc1ded6e80f15d7787031e2b71cc41ca2e1c74c19d3f3832ae13c5f1af70abf9f2f201c9a7ef669ed2e58349a584ddc767059c54";
+  sha512.doc = "d60dae681800be4495c2690f78513475d98a4480364306eb26c16c551b0e984f135aefccdcff549e6702b2b62bb185ccbdacd85dd3c12e5b20c128d9397c0e8c";
+  sha512.source = "a2c6321e825629a75d745f0bd03cab168fb51b5c33d5d256a621847f27ec2010f0331c37644e95b2ee40604d68cf34772a3dde59b6c6fe340713c0e593fc318c";
+  hasRunfiles = true;
+  version = "1.5";
+};
+"atkinson" = {
+  revision = 57624;
+  stripPrefix = 0;
+  sha512.run = "902030074772c7b8dcf01cccb3e33fd045b5cf6d72293fa0d48503757321aa35b32eed030cd9dff55d5b17d7cfdd16e9ec301e91b2a5b9bab1a1a901884215cd";
+  sha512.doc = "b0ae498ed9bc0b8275b954b4f95cdf967b7794aaf3f261ff2a0419f14faabfc4f12fa60b41c26171962ad41c32ac40e23df3d958bbcc33f5a1b2355e0c3b61c1";
   hasRunfiles = true;
-  version = "1.4";
 };
 "attachfile" = {
   revision = 42099;
@@ -1430,10 +1526,10 @@ tl: { # no indentation
   version = "1.9";
 };
 "attachfile2" = {
-  revision = 52929;
-  sha512.run = "13fae92b9d6456a5b8fd322855040291ac4bbb30671ec202f466d87a6b461dedfc0ec5b06389bd745ee02e91b736b4c704c4b2095877a2164fa00f8ddc467f60";
-  sha512.doc = "6d94dae0c75089882298545ad3759f044101b2202cdec4bf87a052c6eecc2055b5936b9f6a4fdb9451cdb0f389da3621cba19a91f81c478551daf99c549db471";
-  sha512.source = "62a12e1d7e54caa097e3a83eb89ac9e363450dff0e19235c886d33c547965407a94626f45a1a049d0adc0af63dda1b91c5cee69dacfa8b1a12fb1a3c9c760ebf";
+  revision = 57959;
+  sha512.run = "57ef4d0c2de0cb854bb91b14a55921851a4abdd60221589f0655afc64a01d4bc672380fd572e0d451b6bac7ffd66f407b4ffab5f0fa1092dc8fcd809c81b23bc";
+  sha512.doc = "3033a58688a822f74712d072be3251c58b96e9e370859effc8a4ff7f8b9db98906c471a6472b7b9ab4b0d9725a9b53918e8b65d5bdbbed56e737addbe582737f";
+  sha512.source = "abd6284061c0f936df92479cd18c0440d654a8f6ca1d610f8763fc1af6668b3eb3d4efc2f4ff33a5b9192844083e55605fbeee2fe1bcaca8079fabf498a702fe";
   hasRunfiles = true;
   version = "2.11";
 };
@@ -1485,18 +1581,18 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "authoraftertitle" = {
-  revision = 24863;
+  revision = 55889;
   stripPrefix = 0;
-  sha512.run = "ad07262ef312a8807e4419101fd7cd10663926000f7f3c63d9d2a306c02f718982a8c525ffc2c34f04bdc12c5501976236079d2840e16acb9e8b1bcf9598a489";
-  sha512.doc = "54e7c6b96ecc37948e32ab1d057c6b3b242b68889fa07a049448d790b8310026014917977dfee6365bf6196dc661ca79bf963ae9891edd22c22c9f89a7d8d756";
+  sha512.run = "b7496b1ff5dc7544afa6e2181b9c86814671d42603c1f9aa08cc6d45e02dc402e225c44fe554649251b8cdb3dfd81f1b0fb245cc8ed56204d2bcad16e5e9f9bc";
+  sha512.doc = "a1cda29730615ec8b81082f14462c5864033e1b4cbe0b071e5cdc6d9b5393b2e701ba6e6665963170bb99408f03c8fae38fc17aeb2de83fe9c8fbdad8273482d";
   hasRunfiles = true;
-  version = "0.9";
+  version = "1.0";
 };
 "authorarchive" = {
-  revision = 51430;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "9d5dca20f1293b3805c628e051067838c9b7f14d1faf34f39bca031c0be1641424ee8d2466401733bfafb56c4ca1a668e4b3630d991d9911f6acfcde4dd22a61";
-  sha512.doc = "070bbe6a8fae5ddcd6ad7743170fecbd9e1f0db1052fe05458689dd3c0f48c04b2afc579a22510b3ad0f26efe85c3b665386881eb0e2ad499a74ef422d6dcd45";
+  sha512.run = "6e72515c162d80e1efcb1f07bd94a1b32b9bd78b3b9ac056e516171347cdf2460ade2a6e91ef5a4606cfe5e4d365b517fe9271f4a84d89df81b53e68efe2dd91";
+  sha512.doc = "cbe7eade3c961bdf9e0c973529f5eddf7b11cdff6a9683db96c72a35aec82ea036027c8e05b11e564fff9e3f20546a881378d2570c961c194aa7969624395c94";
   hasRunfiles = true;
   version = "1.1.1";
 };
@@ -1514,32 +1610,33 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "auto-pst-pdf" = {
-  revision = 52849;
+  revision = 56596;
   stripPrefix = 0;
   deps."ifplatform" = tl."ifplatform";
   deps."iftex" = tl."iftex";
   deps."xkeyval" = tl."xkeyval";
-  sha512.run = "2737915601138794b675c44441e71c372d7d2f6fa8d9af3abb2a620582c6c6f11853de0ca7410306e5279012ab3992ef3e40ea115643efe9eff7257b71686f73";
-  sha512.doc = "d26d65d10f4999e64e4c67a104aff38747824b88c290a21a4af3f2b0e5df8d9c524e1f7f62075453582b8bc0a87f32d72bb8fdf274f2eddb12f6984bf516f97c";
-  sha512.source = "8d7e77da20f8671bd562f8971e67f02b357aecc573ac7013544ebe289cde98da2affd1b80c14e32ee9f8249daa82ee83a98829a64cfb644723d62deadf214192";
+  sha512.run = "5c1f85a0ec5aa4173181b087a1f5f8e30be6d8c21c3461999a85b42032d45292aa6f8aae4922a5e97d073fff5b2c9d114cd30f5d5bb73ef523718e891ce59473";
+  sha512.doc = "73d6f4b2e298eedc537a46c1e69bce9e160eb28e6bc2f631596a4fd3aa658d8b51d6dfddb6748b7e629fe564a2ced5e55bcd766650616d936a4197e368b2fcd7";
+  sha512.source = "199e9fefcb2f96f1ad9e33abeecedcff9c72f20614c48951197703ff65901763ef88f425af08021b1843f30c3ee8e3a9756095ad4b165772b829a29c6e5515f2";
   hasRunfiles = true;
-  version = "0.6";
+  version = "0.7";
 };
 "auto-pst-pdf-lua" = {
-  revision = 49364;
+  revision = 54779;
   stripPrefix = 0;
-  sha512.run = "db12bf66e8c4c16de2ecf3caff64deb38eb1c163baac66d0dded1f540d817da4bbb9309620b4ad60000f48319c2b8236ae8ac7a0774bf297d731a0258d4be3d3";
-  sha512.doc = "b21755948a9a272611d91622fe8e641f485e1ff4ebab4053331431e229b04796895ca9329e2b69921a9fe1f8624f7a635bbed7ab4699fc6aff819d351bce95b9";
+  deps."iftex" = tl."iftex";
+  sha512.run = "053adb8525158b1c0703333bc9a20d3923468da54db4400f83c8c651820a01a9569542afb5502b56abf7034122fe5baf17ea6d2e7d7dbe53acdc7c2f9b1de68d";
+  sha512.doc = "dc7647af18502d3f7d88cb9dde9a4bc467204a78d6f6ef441d7593aeb2f9776532eddb94350081619986a0dece023c2ece54d3dce554188f5b62056b7a1a96b8";
   hasRunfiles = true;
   version = "0.03";
 };
 "autoaligne" = {
-  revision = 49092;
+  revision = 56966;
   stripPrefix = 0;
-  sha512.run = "10c1b6b8973bc451d38f1051715d7f6efe8acc7420b954aae657bae10254d6919fc7e3d605ebc90e525a7cfa56f082a966bad600c54e50070f1c3fae2bec38fd";
-  sha512.doc = "c0a1f2514d80e153b74efa94918c70cc16638d68c6b6e1ae4df8f765e13bc55218a1b7eed289f6dafba440ab7c5ef6cf1b6a728f8df161b21c9951894e83b949";
+  sha512.run = "25e4d56033596a05c6b9e9bae4380dd5fc27d469cfa63272bb388fb3b38a57d2a980fadad7061c76940adc3d50e2115037b5299cd2f095ba5c2e9f47a88fb8d5";
+  sha512.doc = "ef84201b9cfc06b3c6f9031389bd9b593e5477f92507843689304afa8db67737887773d1d5c0a2be2fc77d922dd183cffa0ca27063cf27cd3d41664f76803a7b";
   hasRunfiles = true;
-  version = "1.4";
+  version = "1.5";
 };
 "autoarea" = {
   revision = 15878;
@@ -1558,6 +1655,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.3";
 };
+"autofancyhdr" = {
+  revision = 54049;
+  stripPrefix = 0;
+  sha512.run = "3ee2452c80ba671414a1669e0c47c7069189dcc0dde97bb33f94e77251b2ac8511b7cb79fd5866c2d3acfbe7768e20f715e61a6303a847ab82564743fb8d2a2f";
+  sha512.doc = "1fc9ac9d47d65eecb1a6736aa5fb148a6309fa64cd18053b038483d484f974f3f1aafe8afb03b88921ab5a990b78a2aa9dc6d7149884a550c57340218f72159a";
+  hasRunfiles = true;
+  version = "0.1";
+};
 "automata" = {
   revision = 19717;
   stripPrefix = 0;
@@ -1585,9 +1690,9 @@ tl: { # no indentation
   version = "1.1";
 };
 "autosp" = {
-  revision = 52851;
-  sha512.run = "46d141e52aca5a538432d937f398d8bbbefa6fdba0c002a82d2afaa7bb42367e4f13638a79469a668b6630659e34fe64852e1f1c99cf075e553e1dedbb59762c";
-  sha512.doc = "f7c7c63ef8bbb122137f5d35ae5f6be1e306f169026134b330cac458498d1f3f898c442b999f6324abba2ea41d513d6c3d87a499ef037240e82d67b7a77a8eb3";
+  revision = 58211;
+  sha512.run = "67587e8b456257be9b924a5bb8c8f4def22fa9aa9678663975ef74e346dc186ae7848a9dc043733cf1244f254750ef4f34204575f62195d4b966ed8336781bce";
+  sha512.doc = "2905669b9e2b61749cb7b1eaa02be889c4e8d8adbd78b126e7ee6d894f24f623c888a24abac1d163f3332c5cfa9cd1f64d0de95200350b88a7f47faeacb841a6";
 };
 "auxhook" = {
   revision = 53173;
@@ -1614,29 +1719,29 @@ tl: { # no indentation
   version = "0.1";
 };
 "awesomebox" = {
-  revision = 51776;
+  revision = 57349;
   stripPrefix = 0;
-  sha512.run = "f8b841701beb248ecdc636756d954420b879028db1754319cf13a975313e7832e5393afc76f2edea579c6f38ba4a8fe779edcbf7f1442d7f179dbef9b1feb1ab";
-  sha512.doc = "cb0a6e98faf307cd718b4c7409f3aa75d30a781b1a299d32c781b3b6906d6a74399c7a04d41ea421a5cb3def06d963d8fc87d841ae199e7e86dc2f1360e4e48f";
+  sha512.run = "4984d58669576137746518b68988fd9837b5ef133eb8da948f67bb0d5f775ad961055871bb46084e420ef0564b6a4796ba81a093be93f667f959a45ffc0c6174";
+  sha512.doc = "eec717fa5bb5a0f0d15cfc39d2172f8818718f6c7037fe962a0e811c131cbc91d3f3167077ec413d565e6b0b782f5b3f77b38257caa6529a6f5db7da8e163c3d";
   hasRunfiles = true;
   version = "0.6";
 };
 "axessibility" = {
-  revision = 53416;
+  revision = 57105;
   stripPrefix = 0;
-  sha512.run = "b7628e6b5f8a46fb4b7ecf7901b0836142e3ba5947dfc1d7e023ebd5b46665c72b3bb0c77b192e1b1c2095f1fe4319749a9644b22cdabaa651924cc8a22c83ae";
-  sha512.doc = "b329855249999b41eee83fb0c679210714173b5697f4405b8b4edcfc2e47290f66ce281128179e688a2284481cbe71cc50cbe7a9b4d039db977749bb783a47ad";
-  sha512.source = "e522fe38a080b1823b22665d7954f6944a83c28be4dd7493c2a2624ab05f552866f4304c68573f2490dcf31e85508b5b537adb106555777648fe4d0f999382ff";
+  sha512.run = "9b42a40556f3432e045ef35b23fb7fcb6ff295064645e5b9331d0ce99a8f2bd232d0926b46eacb5598da112dfcf3673225efd655573523dd504767a06a42686c";
+  sha512.doc = "f3255c9d6b1eb75a501e5c36cece49cb72767e467c0853465d2b8a39f011138d7154eab2fa5287f9223b4f535aad5c2db25d2f76c286376499c71d0ffd120699";
+  sha512.source = "c5ef10d286eccf16b270c8b487e91270cafb09ba10a88a8e0c925485a380c18002d399857f7dd42978aee72f7b1889c5dcde7ffdf2f5626424f31fd99a452ff0";
   hasRunfiles = true;
   version = "3.0";
 };
 "axodraw2" = {
-  revision = 52851;
-  sha512.run = "9db94d97812b93c81542319320710d4b6f5f21ced10215fdf4b4d6eddae89151a8b01d0bfebcace099d259c394ea8425467174860696366cddf7527695029734";
-  sha512.doc = "a24da2094fedccf5b7d61f97533b9c62f3d0ab637aff347127cd79fc81223e1d8616059b450cd7f9ab754895dffa56c84af8783e949a84c7f6361898617ca121";
-  sha512.source = "722430e741dc848f1465edafca74affe0f02c02d556eb311c1a4471c1cc0de1801245ecf322dc702ff8d491555768323969d545f06f297dfea2802d86544f323";
+  revision = 58155;
+  sha512.run = "bc9923a9614ef9d7bece20e682729347dc942470a927b40736d6868f02867408b5fba51b117edd8745f96df23b9c1e93792d321291db13b7fdfdae0ee32bb7fd";
+  sha512.doc = "927e42358d543f46ccabb8184e35b6f0a5848783ce9eea09e6c780fc83955d5f37b998254153b1954cf1a59be6cfe573a6c79c2c328ab2a22a6e5f6764a50fa1";
+  sha512.source = "3c2fbbff234836ffe40edb7f38c77c5986cca7fc68b3dd7672bb4f1ce9327a12fa8c51d38461d914cd6466bac8b2b578a151d09d4e84dd903530f7a545d707d9";
   hasRunfiles = true;
-  version = "2.1.1b";
+  version = "2.1.1c";
 };
 "b1encoding" = {
   revision = 21271;
@@ -1648,22 +1753,22 @@ tl: { # no indentation
   version = "1.0";
 };
 "babel" = {
-  revision = 53963;
+  revision = 58684;
   stripPrefix = 0;
-  sha512.run = "2f86e0a45d4911a3a1331c7c42e42903c89f3c2226773caa42a4ddafd11990df8be7b76211581fc4c6ae49424466a78f89b07d41b9b7a86f1ad53dda7b1b66e5";
-  sha512.doc = "fccda4835fd0b1a861e6da181be38db85c4d27718de81a33aeb64765fbeeb6d31ad003b4b3dd165a579c29618cca01d8874fb73c1c69c3e0dca0e3fa70bf338e";
-  sha512.source = "a7de843ec2a5dfa920d32901206a1818e61c4afdb3b5f09968b8d1adfc03742a25d0592d2858dec5258947ab9524959880cd614b6d5c72703ac1fccc7bc294ac";
+  sha512.run = "d7a08a9733b008436529ca481535497d0e6bf53362711224dcc4cd2449b3041ea71f1cf94bf86a45a9fcfac54ed523f06afea91f0df42775a0315af3a2f6390a";
+  sha512.doc = "66e09bf630ea04e94158813baddc8aece0afe65d5f2a713ed6d9d59c3c494d11245c2467ee17a180075ac7e5468d0f3006e5e4defdeb0f5d86d29058aa3803c7";
+  sha512.source = "18ee85e8865f065fcbb36e1232c5f3bc5e97a40e97504f6baa7c7f59099260998e257f21a8f97608c819d6279eb4823c2791668c2fb46bd564e007f729ecf99f";
   hasRunfiles = true;
-  version = "3.41";
+  version = "3.56";
 };
 "babel-albanian" = {
-  revision = 30254;
+  revision = 57005;
   stripPrefix = 0;
-  sha512.run = "55231eb303d7a2549d21e2d3bba9cb784e95cb99edc29a84212539ce04eb27261078437b8902419e85c69e2a8d7e6fba7abcb86e7b6448b4ab139de60cb77d87";
-  sha512.doc = "12afde1de6174c7aee0dcafa4c6df472c0096373a09726c5d4223d082b53b558185b3b48d1ab3204d03c4a89c5f5f2293136fae671c2f2913ea72109c3f58e19";
-  sha512.source = "95c1550b76ca8ecf4dea6495b644b550dc2feb45cc3d3c597c94236e6d3f86a3a42da7bcc7b77b4ee6597d167da33a571da16f5f7e35fd4666ea708a86c490ea";
+  sha512.run = "8a98ba1dc08bc2bdbba0793bda2a07a6c248543fdee56cbb047229d1cfe77cdf616c0ef023b0a74f877d9863768065f0e256ba35a1071e0dd3f2bbf2b47b7ebe";
+  sha512.doc = "d26b9d933bbf0225f79bd8180f9dcc2961ea481fef7b535267034296062f8879b53ca47ed6b512fc724b261276be6d92ce045ba0c8bbdba0149cca6f117be8ea";
+  sha512.source = "74212f36288599d730fafd00dc50839cf0f12283ed8653303471d2cb64a57217b4792f1000cb44411c7d5031e4597db67368964ad318e896987103af8e21f838";
   hasRunfiles = true;
-  version = "1.0c";
+  version = "1.0d";
 };
 "babel-azerbaijani" = {
   revision = 44197;
@@ -1747,22 +1852,22 @@ tl: { # no indentation
   version = "3.1a";
 };
 "babel-danish" = {
-  revision = 30262;
+  revision = 57642;
   stripPrefix = 0;
-  sha512.run = "03bc05d7e6d59ffbb6191cc392294007bf4f1b6f758aceeedb8dddfe9aefadde3e7904d7aa0834ecdf6dbae732057ed0523b24ca20dfa594e02ee8857c94cd3a";
-  sha512.doc = "b85445b348bd65abb4c7df530e20b93c5cc86f2ce25f0306aef3d32b585ce8ad8d5b16007bede46be535ac0737546f453c1241a225b31a9216ae25482360b2cf";
-  sha512.source = "0556cb121d06313ea2c1f84a98ea89e75d8bc0fe2a8dcbee98deff446ddf187833af6ee2634483f25a721142078ea889bf065996171617cc95ce28a8a5083b81";
+  sha512.run = "201afcbdb9b8d9128cece15ac8876e8d9bc261ab6c90745e52a95bb58fefea0b478a623027b097875d831fe5671f8f1f16a2370dc0dfd92ec3e603436e366e1e";
+  sha512.doc = "5ed050c01207e110c475abe825e5299df0f7927476141d81cb31fcc8c6dae1076e855d3590aea0812bc2a15949231163c24f0039620f3a8f41cd43bd6a8a0840";
+  sha512.source = "5c9bc598da8e782acf3a4e3ae5e93acafdad34fd68962436ee7a5acfcd7c234863db5faf9a3c2e2b87814d235883e3e85688fd0b3f514a7d57977d1872896884";
   hasRunfiles = true;
-  version = "1.3r";
+  version = "1.3s";
 };
 "babel-dutch" = {
-  revision = 30263;
+  revision = 56827;
   stripPrefix = 0;
-  sha512.run = "3f967688c9124502243589b666e1e3af500329782cdad8da5225eb3fe6a50262c2287be02d6d6ec04f3ce81a6767b4d2821179cbf04dcea4c20001e8ea1a9f5c";
-  sha512.doc = "5591a30a32ac2900266d4dd642481a5c9e7bac1062fcf5557ad4acf93cad0e36020c75e081b63680c0c96ff580a2156fded920e394a9c5c685cbb152e8d4142f";
-  sha512.source = "98c412d7a2a776286fb3f78faa49da6dedab2d3ec80b5f722a20eb34fec53768ba4000debc952df3241661f1f86b7035d7e71f712be3fff91f13608dd0fcf87c";
+  sha512.run = "4bdebadb6dabd378fb52eedacd8181623e40bd0a8215aa77c34f7a051a020d6c60230fa0203c2d519bfffcb9a374702ccb1d7c6b0482a232f1eeda5ff52f6c1e";
+  sha512.doc = "92bb3f2df9706bc6af7d20df200174a4b3f0b3237a8f1d9259886272deeab4109e85245a0cf6cf5b43bee93b14b581b1fe5e0d4f7198b88a77e2fbf0c8156090";
+  sha512.source = "5942ba0dff02c632f0a09e240b3576eb425ed1c74924c007572b2a7b8b95701777bf20b2a943acd0028682d5cf422988c51752c3c80806413c0227daf2f8fff6";
   hasRunfiles = true;
-  version = "3.8i";
+  version = "3.8j";
 };
 "babel-english" = {
   revision = 44495;
@@ -1792,22 +1897,22 @@ tl: { # no indentation
   version = "1.1a";
 };
 "babel-finnish" = {
-  revision = 30267;
+  revision = 57643;
   stripPrefix = 0;
-  sha512.run = "b39de5e94debff30a9f3a0b0b1d27cdc75e7479ad3f37ba73769226e9e2b1883bf272c3dc87044f6c2b97c80a7c049aee64458a78c289f01470ee4a6ecec0d59";
-  sha512.doc = "52fca9282d4070cc451eff247b0743b576dc7ef2553952863aeaf04c01f876d72e0062857690b1d62f1e3ed17918b64b125b96df82f2fc05ae695dcb4788146a";
-  sha512.source = "c8b07de49127f766659f5842d211cef3830ea3f92d8703fd482c713993f924ed0171864f055ae526bed407059733295fe9741646228cece4516bdf49ad4622d7";
+  sha512.run = "ed0dc79fbf6cd992bb5ff3df46f93203ffcb3ade34c6a613b5b22bf5effb98f78fa85d9b915130b304df71629c5a8bd68a4bab23ee772a1068f7184fa27051e3";
+  sha512.doc = "c96212780651c9c0c831e295c26f678c80724e5b923d69fc73bc1be39e369a19243b42e5252dd4c0a049fa0c4d25dd611bd470b12a4b55dec4520d016c21a5f1";
+  sha512.source = "11bb4bd731c27af0e11718a55793f7a22957b65e2ddc988e6e3ddb5cb6def8fb1d9ea9f235bf400beeb026f220a628effd612d04d416abeec2e1c39a001281f0";
   hasRunfiles = true;
-  version = "1.3q";
+  version = "1.3s";
 };
 "babel-french" = {
-  revision = 53603;
+  revision = 56607;
   stripPrefix = 0;
-  sha512.run = "3e90696f5484f6031dc0dda7189ccd28adf12b1f75ee731bc91e5c8e1395f1ea30590980180da91eef20f3a3c271d581ff510eba6660a8354d9c33e67798cb13";
-  sha512.doc = "ac711c3ef2647cc17897f1388c26ca81254da83bfc4030929f618c68d5fc7cc1ecfc7d992f29cf8acbf2c445d31f3f80db8360146bb3397d393dfad111d99dd2";
-  sha512.source = "a691116ff8b0af3113dfefc21377300d9d8a6fe3368e2bab995a69fc7254741c7d6e0839b85659f7620579052bd50e08db5c8a4273f7a9d971f423ecd17ddd71";
+  sha512.run = "eaf680b5828b069907c0edf2b62c49475648f973f1ed220e47f6c05907e4b813021b0b18f66b3926ddea4266654dc91055913f3d6be1a799ef0bb2ac8241b9e3";
+  sha512.doc = "67c54e55985a756ad52c6c904271a0b54b95e36f2da793d8804771c1606a354c075c8cb547d261c291fb70996fa818573f9f4e0e2c6f0e4a72be0ce71b65b724";
+  sha512.source = "676c38f93a87b0fde0d7527f5a4e7db38744cd72e069dfa093e1bc91e365a219fe00a2d523ba06522f31aa106df1f391c669215bc4617a59df606f1cf3df179c";
   hasRunfiles = true;
-  version = "3.5g";
+  version = "3.5l";
 };
 "babel-friulan" = {
   revision = 39861;
@@ -1836,22 +1941,22 @@ tl: { # no indentation
   version = "2.2";
 };
 "babel-german" = {
-  revision = 49391;
+  revision = 57978;
   stripPrefix = 0;
-  sha512.run = "2aa32e3cd0deb815a559e1722cb2ee423d605449af766a8b7c36c67a0e9081fa0402b88ef5c171186d353a8a57d0ae630fd7eedca1d795bd8130189bf05ab2f3";
-  sha512.doc = "fcee15f9b0123fd6c5cac11143f6ade9e770f4a3dab07e45bd5cebb30e020be58bb9e43cafee6b4dbc96f8037a84012f900eb33836f7e48607c5424ebfa61947";
-  sha512.source = "a1fc8b8134042079b7cf5d2497b7802397ab7fd43dc354a7bd9ef3c9a9cc3e2e6f84cdb193653d0147fcbe9a6859e9ddb2aff7f5e25093771c7ce76024eb0b7a";
+  sha512.run = "0d7ee8aaf0b8df0040e3c7b6e41b999e21d79502dc084ef657392e2e4704101b49ef7b99d5b8059a6f271683c01a09ab19db3ec2a9c923a8bcdd14db819f6107";
+  sha512.doc = "59dbbb949ee4390c9891b0b2c44b93cf81c9b5da1be6c75ec6aa3b38a657aee6e28e7d02d0e188fa37c15647f40e553f13fd0f18845f4a8a3dfd9eb169886fb2";
+  sha512.source = "64880138c89fae929df6d7aea149ccfa79c7ec558ca307cd28218d891ae6f72e9042358ab0038b1850aa3d30b2d7d80eff2a60328ba37699f68c3d00cd341611";
   hasRunfiles = true;
-  version = "2.11";
+  version = "2.13";
 };
 "babel-greek" = {
-  revision = 53959;
+  revision = 56904;
   stripPrefix = 0;
-  sha512.run = "2475f93fa7ee64412a5dff0934cb85cb1c07dc54c3ff905548bb0c4d32cea4580b16d0f43dc0f533bf7996f429888bff6425b8f138bc7b87925c4305bc7cc47e";
-  sha512.doc = "ecfc024317b75bed8428a743c7b3b5c0dd3b06979ec4e90a1a7d06694b019e08cafe39e94db866dbba8c34be78c84ff971d5ef2c7dd2c41133cbb39a7f34e5ce";
-  sha512.source = "6f5d600ceb31a83d4c40496e19e44fd0ad529eb4ee149feecdbff1b9cdbb3ef8c98d51d7d0aea688447cbc86bab89090d21a36eb8438224255a157ada08e7673";
+  sha512.run = "6b0ab839f2e8a9562c8292fe8f7661a73148754ed816088be25d06537a58ba95ac34d9440bc4f3f35c3b720188b261b432887f9867ff94b51261076f9d8e0160";
+  sha512.doc = "965dc1293a90ed4f7c777d32887186febf28f7a174a00af26c19720493605291d1b17a5790b5541547f9265d8a1a3d102d9a4fae79aba43780c384b7385e06b3";
+  sha512.source = "907493b19b16ed7a0c6377864a4b8266732065e2330c746d118dfec14a6a4976115eb48bd6b4286ce48cf6823e30fd3c9f06551aba2f52ef4a8ccfaf3f800810";
   hasRunfiles = true;
-  version = "1.9i";
+  version = "1.10";
 };
 "babel-hebrew" = {
   revision = 30273;
@@ -1907,22 +2012,21 @@ tl: { # no indentation
   version = "1.0h";
 };
 "babel-italian" = {
-  revision = 53019;
+  revision = 55232;
   stripPrefix = 0;
-  sha512.run = "9dd2d58f0d730be0cc5319eea1400b8644ba107c81f9d4905842e5c5a4bfb20402e2d67ede0a1c1337e166c63f8c1e90574e11b18275596cf24764de671b3a16";
-  sha512.doc = "97d2a498f4fd9fb8cf1561117b5eb805dd17c7c09c85addb510a62adbfd25ad83cf23e4b97a234878cb735f986245363a1b9f9cb2ec36f67bc45408b05539b48";
-  sha512.source = "98cc8e42965bef45e30309d0e3f6dac1c39d4964e9aa362552c5bd5aeb9a583f94c41ff5cf3ee6ebc7918588ae6f0bc3913dad0226dbfea98b301deec272ef73";
+  sha512.run = "647a87e3e516f4723bd991b973417302c6f369438e6b76c5ef1d795bdc138f31516433af5b93471f0a2692ace29096d6cf8aa49edfadc2e48d1d40c4344dbfd0";
+  sha512.doc = "109a27cbdd24d91166059ae7dc24c78175aecac477a13b06c148b21a8c6451b0a07fd7db55ed8a78e92c05c00d0f73a9fe59c0726f34136cdf7ca3af8bbf12b6";
+  sha512.source = "c9309c07a97625c3f9b1098b603015d339adf4f73218447ddb40c36c8430866b435678ce06b88b0f36f84e4ee5c971452d8f4caa283e1298d182fe8667255b74";
   hasRunfiles = true;
-  version = "1.4.03";
+  version = "1.4.04";
 };
 "babel-japanese" = {
-  revision = 50735;
+  revision = 57733;
   stripPrefix = 0;
-  sha512.run = "eeab94dee49061fabb116702c1cdd0c6ff11eb61994c4bc20bc2147329411c42f5db7faae78141ca53380c308f8b310f592abbbc77d67654270b6b1d72ca5cca";
-  sha512.doc = "152a3c6d723dc8bcbc046275993b207103e12ab551216e87aa999c2c912acf2ba7e1bd54b0a1c8099940c62f564a268da04372ee559da7a7c56b6e0a32e29b4f";
-  sha512.source = "04bec4bd09f46c0c6e25a0f59ce2435a5d5fe222268616b02314ef091315e3bdb882381890fd304c07d5398e95e217aac46b47734fc9e6efbb32649c9f974cf2";
+  sha512.run = "dae227c586eea1b56fc88937f8a99803994622c07cf54290ca1b5ef6cbfe53ade8aec7064820044284cfd70fb6ee2ba908bbb74dedb54bf3c2f0085815c7eb43";
+  sha512.doc = "cbcda3267222cbf5c38d8e7e8ea5440b94c3d7d0ca70b4f635b0751e824c690a4d495f0906b0d646de5f1ee08c74f72482020baf99d39ad0089002d5e523ccb5";
+  sha512.source = "956aa7cc75bb2a007fbbf4ba4e7209251d3232f585976dc0002429372062e9c1933241bf05c34aefc481a82032594b922df3851d6f88bdbdfd7c181b9a44d6e8";
   hasRunfiles = true;
-  version = "2.2";
 };
 "babel-kurmanji" = {
   revision = 30279;
@@ -2005,22 +2109,22 @@ tl: { # no indentation
   version = "1.2l";
 };
 "babel-portuges" = {
-  revision = 30284;
+  revision = 57644;
   stripPrefix = 0;
-  sha512.run = "5762aed39d183575921e0a6d4210d37b5cc25e66288c3c5eba18ce5b2854de8fd440a738faec95a4ec537a3d5c9667f8f2f7d7cd30eff96531062059d90ba97d";
-  sha512.doc = "34c0d961f0cf2eba8c71a0e770d1539eb4825c50f8fd91046697d9b55fb4b45c54b98d69e82b3567faeddc1b59535d32d3d99e6ba9b10d6bb8ecd01c85ee6334";
-  sha512.source = "524f94da19dd272d73cf4ded57f7e7d450d155ea0c7dd004e572811837e4ce25e6d0d02739c11db2647956cd3df99dd26eb648a7556fcc55b70eaedc975a3dbc";
+  sha512.run = "d415a75ca4504cb219ac55b7a03b9b00667747fa39dfd4650e2f93ef7919cb79c701e52d947823016151b340a66f52550a0903a861540d0d6474e4f4ecda6adf";
+  sha512.doc = "3b3c40f55953d3ba46ee96ab05789a86a42fb3e806b06d9938a57f2e5d210b2f38745273cb71e224a7c251e2d6ce96c4d17bdb089a4d9180cbabd5bd8716259d";
+  sha512.source = "fc1b7c2c116e23612475dfb657dc167bec59bd81bb44d925faf6a5ff4103459f2e34de49aab8422eda69f263033923b7a4ae3f102ab9dab0fd9e35fbc76c10bc";
   hasRunfiles = true;
-  version = "1.2q";
+  version = "1.2s";
 };
 "babel-romanian" = {
-  revision = 30285;
+  revision = 58776;
   stripPrefix = 0;
-  sha512.run = "d2aca8f17ae173c36185d6d3514b0b09f76233e44f30177a50240ef0cf0f25f85767a6fc5ee0f94e2eff0df0b94fbca08eb048e95b35a631b7d30a1fbf6c23e6";
-  sha512.doc = "876a8cd9e515ecad570ce23686b71e896fa377ce8fb4840e511430aabb05e9cb03f614167fa2abd13328d0ea7f4eebf7044a65db584b95ce4c64bd37d2602b2e";
-  sha512.source = "493834afa2339a8a63c017ca880ec07626a62b88f76688192253985bb5b254412409c1128714a2ce8a7f7a296cef6ad9ae67b32a276372c811933df8d2929e2b";
+  sha512.run = "ca6318ca8453dae2286b305766c6ced299f18f390c0d0f44e77ddf8eb4b05c31c7a2b01ed52e271f68acd6b127650b370d15ea9bcb3b591fd01e5d3a50b17db5";
+  sha512.doc = "73ff361e7e03499427529824b83ea584a5ca190aae3d1ef9a5f4a5adf52cc8ab02f5652c92c1464a702f581e29626fa9cd14d4ee84f6cdde69b38af9d10b20ee";
+  sha512.source = "0e4aef9bf20e6602dd946e2ad2856c7ee7849b492d4b66334450b450faed146eef83d2b7f13506eac6f34507bfec4ae735ae9845d3a21c36d98105bb353166c8";
   hasRunfiles = true;
-  version = "1.2l";
+  version = "1.2m";
 };
 "babel-romansh" = {
   revision = 30286;
@@ -2031,13 +2135,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "babel-russian" = {
-  revision = 45007;
+  revision = 57376;
   stripPrefix = 0;
-  sha512.run = "6072d24abd098a037a97c9bc139db9454e363b35ab1b84f2641684aa0e95ab3747068a715522e2716cc1dfcd129404f038aa5829054abc29102306e84cb27070";
-  sha512.doc = "702b72058f3142b8e5c2d1e752ef46622f688bbe42a7afc3e93251dd42bced6543aadc4d9ed70865d8fc7868b2c560231489e521eb63ec897068b7d712d732cf";
-  sha512.source = "307e7b28b91c02dc8287d2567eaf057597739d04a5db1ad3ccee3b190c01d5161426ab50e1849294f1222add41b322047d372115e31200588f59317b33d49c11";
+  sha512.run = "5acec3460294e71e6def384a7863a849e8a5d431dde49c77a4a7803af5373b56fcd376f6e73b237dd230728ab5b536f903b6a1bb19fc478dd5e742293a6e6ca8";
+  sha512.doc = "387919d8bc226b00492f9924486a2591d15083a5a8e2293889f6532ef28fdd6409e2a777e728bee7f7b9796a304f440d8cc5fca246588d2b3ef0c84c79b701ce";
+  sha512.source = "71ca4e9bef2fe88c8dc41def4facd4c33145692cc0ac2cf05eb1d455ea83bd93b3cd29907772a5ce84168986db0fde8f5748622a4dc9b6857682c4c0aaf04f34";
   hasRunfiles = true;
-  version = "1.3j";
+  version = "1.3m";
 };
 "babel-samin" = {
   revision = 30288;
@@ -2085,48 +2189,40 @@ tl: { # no indentation
   version = "3.1a";
 };
 "babel-slovenian" = {
-  revision = 30351;
+  revision = 57666;
   stripPrefix = 0;
-  sha512.run = "0293242dac7cfa3aafca92ade6b065522872ee7561d9b465d42a846121c3387e710f06e330461d9d4347c9dccb2be3885050847f8fd721a3c3dcad3ec2715ad8";
-  sha512.doc = "5e5bcc2a71e4258ccbe3f094f19c782512c70796886c94abe2254e3fc376cfbd1c13115f42da1828f16dcae4e0b95075e9510fe42879f6a116105190fcab70c1";
-  sha512.source = "5c4cc055c76d898c8bd11e061658e8f8ecf165f9571efb0340ae1a828d65eea6e071210bbbab1a15c6825e10e1a8b187ce8717e7c32a328bccb4f427cb03a493";
+  sha512.run = "159e3fd820c39f64897dd26ab589cfb77a9d254cc75a0b1988d164cb9c989bc55ff2320d5d21b698928292a92ea6bd85b9a6cc489270ff13c2c13842d84b4c6a";
+  sha512.doc = "8df52574e61776f1d83301caad0f0a9e2042c88048034c6bcea23c4e08155fd1166de4c76584e3d462c5b1f914fcd38fd1eceb740a54e50dc2758ee892778098";
+  sha512.source = "3b630ef8368ba89c235930e9815350bc83331c82230bec549f86374e243c28bb0bb6615f55588245551add88d16284e90c6339ea548fc52b1236bd654b2a5d98";
   hasRunfiles = true;
-  version = "1.2i";
+  version = "1.2n";
 };
 "babel-sorbian" = {
-  revision = 30294;
+  revision = 57646;
   stripPrefix = 0;
-  sha512.run = "1c76a622852d0354112805a1db3b2ed6ac23656a754e2909c4bfceb0ab84db201f18d37d8c9fce527ea52fc4c2b302ff943353ec4cd5ab45da76dd4755a09be3";
-  sha512.doc = "f79448d484de1fb95394dd28c833661d6c9a686148b544fe28a60af17ffb50d36902d4b7b8b62772466d7588dfedf31e772d0ce5b32270732d0d2453dc7d0fd8";
-  sha512.source = "736c15e75d097f9475da38d80c495b28af4457736534092759750cffd2fed2ea54fbb4bcec656666f13cc2d61e82af59ea0ae665e30f73b251eb4fb35d44a8e3";
+  sha512.run = "a19f913f590ea66b411a2215ac555590b3ac9f23480096236ccf9c84714bc7b64c0649c1bbeef36bef4f1e56b0e16f3d2abf6c929992fc4accd708ecd6f54681";
+  sha512.doc = "36c648ef7a2671bf06511d56fef32a7dad13ad176cf5689774807291b5908a23724c7d26a18d5a21d9d9cb5d9ae9864f321e8703e8ea55cb65cc424e79747bc9";
+  sha512.source = "146b868a32adbafaf82217db99c1d260874ab1192fb50cf1ca670981d0bab116dd2d959fc77b496adfbcfa898253e91ccfa9837a619292dec7ad50abbbb7915f";
   hasRunfiles = true;
-  version = "lower_sorbian1.0g_upper1.0k";
-};
-"babel-spanglish" = {
-  revision = 37629;
-  stripPrefix = 0;
-  sha512.run = "17fa7078d6bd54fff6c73677536dec46960703e14536c4a4476dc46a8586678b117e71058f665cbbf850a269cae841511807c6647251e088111262d9f2c4bef1";
-  sha512.doc = "43cf66e656d965bb80e294a5e2786b412e79eb1ac6542a4a3788fde7cc6874e168cff30676c3bfe90c5bb67dc4452769dece84508fe999529d54bde40be5a5c1";
-  hasRunfiles = true;
-  version = "0.3";
+  version = "1.0i";
 };
 "babel-spanish" = {
-  revision = 39920;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "3a80652d28b1a80ab83c49b0694cd88a236b6420f51c084e4eb24c5ea57a3359f15a05c7cc99118b303f199703749dd724cd5ad30035b9bde7b9f95f2bd34d46";
-  sha512.doc = "8e6a424ec3caa8ff9b6d6f0695e54340dfa4fe61c4bdb46e5579ac768894f906458d594869e8d02bff9c7aeb47e75a7233367fcd6525f2a4815d211528552ebb";
-  sha512.source = "1eb97589d5495a46ca98774adc0d1e58da3a103e43ee3a38abb46708529af9a9d2414b7f81882c45b0a20bfa53114e39368c6142d2f6bbc19306d4c2249cddc8";
+  sha512.run = "f71d329928253e6a1edf34fb9406473b83a5c8120982a4aca7b1caee76e261e78f94521716eecfb59171912121314dabf0ce164938e5fe83b722ff7eacbf9b1e";
+  sha512.doc = "fe60634e76d9e539df4813d5c6a240f36e017a5926016189d23da56b723ba92a317e85ef2912ad76707943e0ec0918dbe1a1dba62acee7ea2db99dc7ad69c4f5";
+  sha512.source = "0ad444d85a0c93b3e484701ffc8a934dbe85d3e2bc2e5bf348b33e0247682071ca366c438177beaf192f6c687e4847ebfcc3c325e2e28c15f67ca34d08671395";
   hasRunfiles = true;
   version = "5.0p";
 };
 "babel-swedish" = {
-  revision = 30296;
+  revision = 57647;
   stripPrefix = 0;
-  sha512.run = "46dbacd9ed25d6eba7a8f5a26a28c40f5c77cbdf4140e3a6ceac1b34a8afdc95626200ea0a6775c3f00b8aa7ae5b7772144e7ef8d0e409531b5bb74e01a90278";
-  sha512.doc = "2c3f738b347fb8a4c6dc3917c840de294f21e544ef995770099eb6d779995ba32ea1a1adc8def7a883bc983a4cf85268628e623aaff44c9be653fe55d901d452";
-  sha512.source = "44c4ae33b5d6824fddaa77142c55016473ac2b4520ba17e504854d7893c3b9fd317dd67149b4cb005311b7fd0daa86630e5ef83c903f69facbf667c993f6a59d";
+  sha512.run = "d3ccb281b9a5405866b0a4621cf0ea4fb75a085041de5d52ef0eb6db370cafacab05d1eebfef21f9558f4110e19b739e6c5cc424709e06640e8290a9c01722d6";
+  sha512.doc = "33a59fb66617ee8ff66643e57b0146940060d04bb7bf2764bce97a062a955ddfd80338072434f86d86c414a22d5ce6f120be4f21523a3d81e6e88947e9c2e57f";
+  sha512.source = "fe6e091f5cf7b0946a6be154af2907288dbc5ca58a003e7009740b2c85ed22075afb424f805427a5838e3729a35cbdfcd8934f860a32eda0523f141f3c9a9952";
   hasRunfiles = true;
-  version = "2.3d";
+  version = "2.3e";
 };
 "babel-thai" = {
   revision = 30564;
@@ -2147,13 +2243,13 @@ tl: { # no indentation
   version = "1.4";
 };
 "babel-ukrainian" = {
-  revision = 47585;
+  revision = 56674;
   stripPrefix = 0;
-  sha512.run = "6729384e1029580ee8ff2337508cb5998e8a385de25da4d5969341869f22f17180b03a98a403b583ac5b7a965c2a07d5c96b0aff1b93b82cdcb549b4915ceb4e";
-  sha512.doc = "f36acbe23a159e2a9547d7cd5b64d529c49a35353f5a84082a303204f8a55f088f1beb0aa75d852595768a3ad10de34763329a22e2c87c5081ce2d6fa4076309";
-  sha512.source = "110d08aa4e84718e04223e4e4745a968c2bbf3d7f453430ee02eec57a96fe952046dc9101b95f90a7de84bf6a4dbd65e8697e1980f0d85eee84233554de31370";
+  sha512.run = "10476b0dda4e80472aa8d3b3628d372da10f8badd37df6beca434e3bf1b9e135972acd5decb63eb6f706b700ef969136117b96ae5a6d6209fd75b9c13d06567c";
+  sha512.doc = "7dd3c5d02024cdd4e0c06b57d3aef0a723aba718760efd4b1214b7da2dca8877293bdfff2d3893e531eb734d5551dd93afc03dc4f3413822a3df0b40b4bec43b";
+  sha512.source = "0fec3b7b65f3e2a5c0b426d4c55e55ec0551fb38a786cd36db52cdfd6c87909ff82ca21328ea33c7089b39aa2694d4d62ddcd1d59255ae929d4ec85a44abdd62";
   hasRunfiles = true;
-  version = "1.4c";
+  version = "1.4e";
 };
 "babel-vietnamese" = {
   revision = 39246;
@@ -2174,12 +2270,12 @@ tl: { # no indentation
   version = "1.1a";
 };
 "babelbib" = {
-  revision = 50354;
+  revision = 57349;
   stripPrefix = 0;
-  sha512.run = "70214f7a3e16c1fe4b3bfae479df63c10f9b654b34bd29abe3b4837b1a375b1a13077d0ba98e46a78ed702616bccac6aac3c70d422c85e37f462a376b2ee2589";
-  sha512.doc = "729fdb0bcc60929dffce6883db377e487a31610979d92f7be48e017a6f982298a9d113f06376bacbf2406a89fc1ce10cab86a43de3d92be8aeea7e3cb7cb9f98";
+  sha512.run = "90e78ff6086c80e0102ce7aae74070d3b1444208f3957e354f2c940ea4d279f87ed59e6c3310c6d9fc1464c227fb0eb4c3813ca679a6e94295e0b824cb527376";
+  sha512.doc = "cd5785a17242a523f23093f8389f1d4c5e3d49c0656ac3f168a8627fb153b217b5a14e5c990c7afd1c5ea7324b5aad2e3dd40e8c2ca0f9ba9064f91f7214bf90";
   hasRunfiles = true;
-  version = "1.32";
+  version = "1.34";
 };
 "background" = {
   revision = 42428;
@@ -2191,21 +2287,21 @@ tl: { # no indentation
   version = "2.1";
 };
 "backnaur" = {
-  revision = 51505;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "82fe2e845a29562218dff5d685e9458f2230395fb66e73f658f137cbbcf0e423c9f91bb0ca78ee36a8e0eb4db157ebe13ac3f134dc819b1ded918ff0d1a7ee4d";
-  sha512.doc = "4d130cea9a46abbcd092d1e9fbe5d943847b207258119722d5f5ff36534cee77a1dc213938e48ad629977bb72c68de6eee2b4bf9c7afae14c10659cf1ca3f13c";
-  sha512.source = "2d4d7e0a3fc9e5a9e1dd105267b8cf1a5dd4e094413ae0dadef5fb65d9411c66f6c523c536af94888d49177d795f24b839f49238a25c2d863ef4b37e84de5135";
+  sha512.run = "adf008822e18c19a7e9e0ef4eb54230ff267ba287e3ef6c0686552ce6b51c8b13fce10cc4533a733f2f6ac09739fec4c2a5878423db1c65a993c5bc16cafc643";
+  sha512.doc = "cdf5a269f4055e8c5685da95b18501f7b69ca8b236fde8e60d39760a562bac9bca5da3afc06caf18bc4092a97f76754a48950881a0e0aecba90c40904e699637";
+  sha512.source = "45142a281a29b1f9e24e128f05825ef2b8e8549ab5de03607cb018dcde6e98b751598e01f6795b14c81c190a275162eb8e30402006f4e7d2a07c2effa4a949ce";
   hasRunfiles = true;
   version = "3.1";
 };
 "baekmuk" = {
-  revision = 42106;
+  revision = 56915;
   stripPrefix = 0;
-  sha512.run = "e10fef8fcee389514d759d7b985df3e84d3459a357fc3b4b6bec5c3814aea175aa8f313ab63e6048e60cfa5fe1cb1ddc0ae0410801893ec0e7ff5eabd7283c9f";
-  sha512.doc = "0a69ee489e8ee9fea0fedd80bdbcc7a13505b5e3cc12fae3d56e09a852bc54eb0e64ba73f4c085e5286fb048114eb81aacc2aa34b27d72b4a72b966e188d78c5";
+  sha512.run = "f9270a17459444e128b5fc5d12b943043fa4ec2f87ee5996808f9dfad1c4c4146787db3ecd267767a375d1fdbd56e15850b25cd7c9c71ab270e3517b5863054a";
+  sha512.doc = "3a3819f892bdf69afeb66b9fdfbfe1ffe06e2a488425e814cb3a1e223ec9659a71f0571dc25136e0f7afcdb616f717dcb3823b89e640b0894313683e4f79b197";
   hasRunfiles = true;
-  version = "2.2";
+  version = "2.2.1";
 };
 "bagpipe" = {
   revision = 34393;
@@ -2234,10 +2330,10 @@ tl: { # no indentation
   version = "1.4.0";
 };
 "bangtex" = {
-  revision = 15878;
+  revision = 55475;
   stripPrefix = 0;
-  sha512.run = "e64473076f23f537a3d543aa325b159b6f7c050b626e880628bfa76a705dbbc57dd6dbc1418b4fe0124e90ec4922e90800b42d5f636ed910590fb060e119d962";
-  sha512.doc = "ccbcc6e4739001b6306dc6559f76f577310e73e515aef27ad39c08e770a9eef54a6cd162343aac83ef3530758b3d7dd4c19b1bf5718a86fd321189ea58a786f4";
+  sha512.run = "84d2b5b85f423e171bb90821f9e4518d06a640c02b03638295322e0ea6aedfdb831b6a4e62d3c25259b7b70aa0fe68ffe3081f6de0b0c71fe03c10616c74347e";
+  sha512.doc = "05ca923b97240a766d3ff448c6b16a33613a16e3307509ed7c369da6ec889e7e19d57e5f542b829c788ac4e87bd7025a62af9f7127e2eebe7fdd3eba4aeeb7ce";
   hasRunfiles = true;
 };
 "bankstatement" = {
@@ -2313,20 +2409,20 @@ tl: { # no indentation
   version = "1.016";
 };
 "baskervaldx" = {
-  revision = 53626;
+  revision = 57080;
   stripPrefix = 0;
-  sha512.run = "2351599211d376c25243504645b32f6b6f14967e5a428861b0ab9218fef35f6111b4c0822fb4e63888c4628246cee80863086921e02a069ea010fd21d09cee40";
-  sha512.doc = "93ca07e01ecef3aacf09be060744cd91a16cb18f54c2841dafe1b40f046195deac555adae00bdff80577ecb3c9081da856a1eba2870be8d0ae182a66f1e05ccf";
+  sha512.run = "42db4e01e127ca3870f6eb692217a7b0c24857599f01314c41ff6f26664e3559c4a938fac1557e799e273b42df2884955df3dd72f8e0b44456b414b8831fc019";
+  sha512.doc = "df3462932654a6fee3afd099a92c5d12b6999003af1c76a3be3ec3f32035b76993b3806c88e670a26c0857bbc699efa64063a4f23c24055ec337481e65019e91";
   hasRunfiles = true;
-  version = "1.073";
+  version = "1.076";
 };
 "baskervillef" = {
-  revision = 53627;
+  revision = 55475;
   stripPrefix = 0;
-  sha512.run = "ae3f2b3570269852bb558a8b7db6db1605d520276b57558d67459441e911f67d830fecf44c61f9db71bedf65ac1414b26e152f4e0657d7ebc9d42028fcd67d2c";
-  sha512.doc = "559763ae59222eabe3666a9422950bd15b089481b2a39ea0eda80aac3633ae38b2ba8c67f7fb750137bcb261c6109675bd48599c8706ae6de8ff152e5e8518c9";
+  sha512.run = "d7ff1eaee4b050128ac89aff0d48d50c99936b1e04e778d0594d28ad3b225002012cfa56ff515486c98d9769d499ba5f4584358f8969c6286f07bd535b478ff6";
+  sha512.doc = "131117d2170aa77f83954d61d630cd0714c7542f3b4f5e868f834bd091d0b4cd76185d478ae2e4d35c8b9930262d3f14e675681540fa8363b4aa060ea5fd96d9";
   hasRunfiles = true;
-  version = "1.050";
+  version = "1.051";
 };
 "basque-book" = {
   revision = 32924;
@@ -2347,13 +2443,13 @@ tl: { # no indentation
   version = "1.05";
 };
 "bath-bst" = {
-  revision = 53422;
+  revision = 57925;
   stripPrefix = 0;
-  sha512.run = "6aaa7b85e0097532857f6ca91f3daf7b5d69750de57f3884f446b0d778dca9cf752abbed289128e575cdeed1d74970684bdfa701318303ef9536170d0289be74";
-  sha512.doc = "6678b1ad382c4e99f6b494ffbe002e17df088a76852e0ddabb15d252af38c7ddffe4686189257c0e7ab18525e53b2ad6809c922d319df777309fd2d08d5b6f04";
-  sha512.source = "6726222bbe8ef5185f375ec706c408089751f65157a5b8f9ead9c4c72ae778881365f6b250851ca33495d23801b3f74b8d97cf093dafc30f989a19fc7a828216";
+  sha512.run = "af8b36282e28556b9dfc8729143d2d38cc49d524df5a0280dbce6536e65dab1266b7b8fc31dd878b5540b9794f90309fcaa6fb14fcd6a069de68ee287bddb386";
+  sha512.doc = "5cf9e77bd84dacb999edc16d81d5cc0ea54bccd25ecbdff21be8eaa8a6ec2e5db893b77ab0235fcee1c4c234d5ab8cccf52f102948279d0859e37e8b291f13ec";
+  sha512.source = "76c9e3b0ae60b42caca389a43f3e3b69e8f28331f0037049febff40f4c990d38373a8fdba1fc22b3afaa13a79e607b9c0f596fc130fa2bb43830248af514c51e";
   hasRunfiles = true;
-  version = "3.2";
+  version = "4.0";
 };
 "bbcard" = {
   revision = 19440;
@@ -2419,14 +2515,23 @@ tl: { # no indentation
   version = "3.1";
 };
 "beamer" = {
-  revision = 52222;
+  revision = 58537;
   stripPrefix = 0;
+  deps."amscls" = tl."amscls";
+  deps."amsfonts" = tl."amsfonts";
+  deps."amsmath" = tl."amsmath";
+  deps."atbegshi" = tl."atbegshi";
+  deps."etoolbox" = tl."etoolbox";
+  deps."geometry" = tl."geometry";
+  deps."hyperref" = tl."hyperref";
+  deps."iftex" = tl."iftex";
   deps."pgf" = tl."pgf";
+  deps."translator" = tl."translator";
   deps."xcolor" = tl."xcolor";
-  sha512.run = "42f934e74e50d48a5e9091b0b8a2ba1fcd42da22bea3e35a4e62033444e46841da16982ae66552396e7c1a8d7d3136dfd7cd1c0396828079df2615113692e836";
-  sha512.doc = "fc387ee6a0630df8100ea7d6b3357f7cba50d1022b48be2d6442606d700761066458359a8cb4e8c9751f53c3c0cd6c36382dd7d781cb97792e493bb5652c54c3";
+  sha512.run = "569d6ce4661185964583f9be628df4ce898d70d198c2cbfd0f687f60e38b59beac6b7fbe4db49b16a0ba7d5dac837f62df33d38131d8c729044b320c3ecc041e";
+  sha512.doc = "2b74cd7cb7c4481d2b9070e93c7c265244b9d8b9168470754c6a0df5d457e412c00e041e4643f644f942189268d360121ac01c001a2fb55760df326e06be940b";
   hasRunfiles = true;
-  version = "3.57";
+  version = "3.62";
 };
 "beamer-FUBerlin" = {
   revision = 38159;
@@ -2436,12 +2541,12 @@ tl: { # no indentation
   version = "0.02b";
 };
 "beamer-rl" = {
-  revision = 52284;
+  revision = 58513;
   stripPrefix = 0;
-  sha512.run = "4e7e9cae6b48521baab4d92965d5b4e14d9b09a51e95b45c4953a7c6199c29691e5a8e69a68c0b29d27d51ddbd1fe57ed21cc6dc6744fb0de2f7544848aacf06";
-  sha512.doc = "bfa9d52b34ad4edef40166e6a0355e5efd4508499a87c1cf4f643fe30f873366158e21706c06f43822e244c69b85c40d254c68d60a82b91e3a4381d27866b807";
+  sha512.run = "bb16a10b5c5edf3df3163bb5f177eaff4e1235263d758528691aaa49b3388412c380721239ebd73f965d4306860b1de95b25b7c1eade36d216da1e3974563e9e";
+  sha512.doc = "a7032533474476f480a685decaa62da74ca37100a8f6f15ce56ba5ab8bafa3a8a58499023de2bef5eb3e7eaf4afc978287188ed57ff4fb02906254211713fa88";
   hasRunfiles = true;
-  version = "1.3";
+  version = "1.4b";
 };
 "beamer-tut-pt" = {
   revision = 15878;
@@ -2465,6 +2570,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "2.2";
 };
+"beamerappendixnote" = {
+  revision = 55732;
+  stripPrefix = 0;
+  sha512.run = "bfb855380ded0b9ef019a139c93cc4f520d4390d98ddfb43483679742ee597b8e045c8286a9391ec068f51ae6c50372b0438b41e449e23804efbc18767c11726";
+  sha512.doc = "abf6b36bfad890b37a0add2ad443c39ba2f2484bd19f9730fec4cbb416eafc6fce723fd5fa684cb7adba4110f888641cc570ac7b7a26ccbf06dcd3697e2c5921";
+  sha512.source = "f90db38b52c3c5dd3867111c17716160191ba238b965185d31d497494cb17046a83dcc62966bdc01d79a3f1ddfe53d9d9a4e31a6084c951b68598bb4ca392c4c";
+  hasRunfiles = true;
+  version = "1.2.0";
+};
 "beameraudience" = {
   revision = 23427;
   stripPrefix = 0;
@@ -2474,12 +2588,12 @@ tl: { # no indentation
   version = "0.1";
 };
 "beamerauxtheme" = {
-  revision = 51053;
+  revision = 56087;
   stripPrefix = 0;
-  sha512.run = "3f5585ec5b379f32d6051d604526ebb00673fab5236190226fce4bc2a4da3ed4c6a79431edd0c011bd34298d8bc2f5eb7a9dd9aa9b0bb15bfca0195222e1a37b";
-  sha512.doc = "faaf5267dea60efacd78f6ed055e1a8691729d96e3959d98ec315ef9802aa01a7193823973c488d44d21ecd845ae21bf51433acf007a34f806656fa6b3a8ecbb";
+  sha512.run = "8fbe5425396d8e5fea8ce618091948b84bb9e3998b9f34730686d9275398d7a149c912cf80d9f7da083af583ee37fb191435c68d8ea6741776ec2fcaabe9194f";
+  sha512.doc = "3d62f584a8170113242f1ba9bcd1fd3a47c539cf646719d4e11464d892372b0713475b026be3721e5921202d40593e56f2f5cb821bb12f11a629a81e390f25da";
   hasRunfiles = true;
-  version = "1.01";
+  version = "1.02a";
 };
 "beamercolorthemeowl" = {
   revision = 40105;
@@ -2491,18 +2605,18 @@ tl: { # no indentation
   version = "0.1.1";
 };
 "beamerdarkthemes" = {
-  revision = 35101;
+  revision = 55117;
   stripPrefix = 0;
-  sha512.run = "ca30d15a7bc198e67cca5cc43dcdb8e644e03d1c8ed71f0b40c1dd0219ce81688067a82a0ab002b2d72e990e227f4628319cc72d5687881a3b886e213d7eee93";
-  sha512.doc = "6a1fcfc34793b93005b683eb0f0f4aae794c56e85fd5e14ac6e1c4eeed763f7c6203bd05c92755a2db91aea10f4c16117e702c291388153415dfbacb4b39d00d";
+  sha512.run = "ced5c093d0c4e3c23fcf774bfcc768b8a3adb20287e0677e1a2474d5ad1eeea1f5f979f988c0f0ae6a484ec1953b95c044b0803df9f76f289e999ec50889433a";
+  sha512.doc = "45d0daee876c0e0d94b2ce6ce7b49f6eb8282643b1bf3540abb07e0e7782434c224ba40ff933e9febd893467ebab2ba7cb588669a98784e8eba6acefa0d30611";
   hasRunfiles = true;
-  version = "0.4.1";
+  version = "0.5.1";
 };
 "beamerposter" = {
-  revision = 47508;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "e4ade5948c1eb8e18cba3d3b7699686d55d57361e0b26b923336d295b8fb6c7cdec39832dbe4f9358c94302d412000f19b4706295af5856e12482bb3c9951a98";
-  sha512.doc = "88ec2b723a551711c33972cb72b7ab9ac13508f583e4e26eaa1c9e6d57d537667259b4f93e7e33fd2a5db8086998f6ddef05c363613be645eb293606d72cd52f";
+  sha512.run = "7483f14a3008997c0c39c351e0f8b9a01dc42331ae990575ab33ab29c18cea648e0e6ab328a2c1fde404bc10eec78d7c7b8352bb02636e00d5d6e8689f1c717f";
+  sha512.doc = "f597797340286e4a87b62696fa167af07a1717a175646d11836e1f347601551fe0aec5ad4362c135d0f6bbf6b45e217a91bdb5053ba1331828fbc352583d3697";
   hasRunfiles = true;
   version = "1.13";
 };
@@ -2516,13 +2630,13 @@ tl: { # no indentation
   version = "0.2";
 };
 "beamerswitch" = {
-  revision = 53467;
+  revision = 55441;
   stripPrefix = 0;
-  sha512.run = "e117e71b17cf08b9194edb502fa60b0e551e80db08e18fd56c7b3e1a23761b47ccaef2fee4aa547bd3c04ff8ab0fd7b3128d2fecf972fe389cff7bbcfeff413a";
-  sha512.doc = "f893371bfc9e636d0b5bdfcdcc6209fa264744887ab145eb23335d891082b091d809bc1ca59d75163d8f95179221235327198abdf87bee7116bb0b5271523697";
-  sha512.source = "693f6a0bb6d690926f7bb4fca34126155a3999841664a8847902beb615d3b0f037fd01328577a7ed5a16532699374840889f3d015b8e3a6dbf5f874131726822";
+  sha512.run = "7f7851b146d4dd5db03f372b0014c3bc60f253a302ed157643ba0dcab31c966cecd2b80cf341208cfb25d885bf58dad9c6487ef0e36d1ef1dd86c235156dd761";
+  sha512.doc = "2e87e27d88297b74a6c5d9c17059134bc23d6ec4f0aa987bc7e72269ed153c0dcd9a3cd86ec17b8a6e8b0c280cd89cc40a9209732ebfe192d7b6c763fc2882e4";
+  sha512.source = "22b7e89d43ac5266189c47104a6f5da3e2a489afac705b1ca83be0825fbee29818ecdb3c893f04001e48ad95694cf21e1666a90a1fb27701d0d0ef9ee40fb59a";
   hasRunfiles = true;
-  version = "1.6.1";
+  version = "1.7";
 };
 "beamertheme-cuerna" = {
   revision = 42161;
@@ -2549,12 +2663,12 @@ tl: { # no indentation
   version = "1.0";
 };
 "beamertheme-focus" = {
-  revision = 52872;
+  revision = 56967;
   stripPrefix = 0;
-  sha512.run = "8f863bb0b42356e9d4b11d62020bf81c84662c71820101fa2e5f6303d8da8cff955cd370128fdadded781afdaa0937630733fbdea67fdc80026773cdae4d01fd";
-  sha512.doc = "6f8c1aa0cab3a9cd906c5eb6ea4e727b344e8a15479641acf04d23141a4af80169efc91b2117270be38c1d7505625458f276578756d61e12e34364fb901c383a";
+  sha512.run = "b3b9be62e244fe4288e77113aa8488e24f83932d5e2b31accd30d62ced1cc8bff4b44183fe2be375e69375862237f18b6f0b40c6201f1199cd1423b09c2a60f4";
+  sha512.doc = "57e8e51ac4a4eed778796c916713420e9372429fe7d310d9acae988c6d540ee516e64ca290dc6feebe28ad81877ee7e8919b1145e626821c4ef72c226b3cdbde";
   hasRunfiles = true;
-  version = "2.5";
+  version = "2.8.1";
 };
 "beamertheme-light" = {
   revision = 49867;
@@ -2574,10 +2688,10 @@ tl: { # no indentation
   version = "1.2";
 };
 "beamertheme-npbt" = {
-  revision = 48424;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "bbc620fbe30505183c4678e0dc9c7574ba93a4c410647b54609c310918e32a638265b07633932e2f5f63fd2ecf8504869e4f3f138073e666e1341a4d0aff327c";
-  sha512.doc = "0c1f5df1c664a31e400f4d05a9f2b57c4c9fbf881295fa8165796944a06ace35641487df93db33276924d4e7c5b9d6c621aba70e5ed9ee61dc269af3b51f7a2a";
+  sha512.run = "9125794ab2ebc4d15ab500b67b9943234d80088393d9b31989ae8209359dca97778feaab3d11365ae1b4131f06dad2fe73bb21fae1220b401c5f31f413cff171";
+  sha512.doc = "7703951f2afee05627847980a05b0bef0cb2fe87eec078f64a3e4796feb4057bdf93708ef0476090d40dad2605c69e23f695b9164a969e6a67f8329e6e340a3b";
   hasRunfiles = true;
   version = "4.1";
 };
@@ -2589,6 +2703,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.0";
 };
+"beamertheme-pure-minimalistic" = {
+  revision = 56934;
+  stripPrefix = 0;
+  sha512.run = "b9c6237108e1aa5f4859ebd1100efbddd2bca55c76bca876e0e3a0c10dbd322a3ee834e4e452b80b2f7755ce026fd2bbe5c69434371ad29df1fe3280b409bdc6";
+  sha512.doc = "791e3a367f5c7ebfee453e7d7a76753763e2bbe122616e49fd0d4268dbd274e3ecb308b5adb850765d143bc46a311316f86bd13e60ce1449b0217d7b4f733830";
+  hasRunfiles = true;
+  version = "2.0.0";
+};
 "beamertheme-saintpetersburg" = {
   revision = 45877;
   stripPrefix = 0;
@@ -2612,6 +2734,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.1";
 };
+"beamerthemelalic" = {
+  revision = 58777;
+  stripPrefix = 0;
+  sha512.run = "70d789b4490e5ceb9d578be03f815eea97706fc89e41756908d41f1953c2b4cee4ce7c142406a0abef0497b89b74dfb2dc6d2a841898996f32025f53626a8548";
+  sha512.doc = "b79c55da51785c42c68a2bd5f7a386b21fbb36948df8b5e87e60b9eab263e43592b7265902b6f3a2d3bd214dce122fcf0d504ff807a7bee0ebccf7241fa8e1fd";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "beamerthemenirma" = {
   revision = 20765;
   stripPrefix = 0;
@@ -2620,19 +2750,35 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.1";
 };
+"beamerthemenord" = {
+  revision = 56180;
+  stripPrefix = 0;
+  sha512.run = "4ac0d1a6494f7acdb1afd73b2bf8e7c966ea3167f856432ebb872f0285cfb8fe759735b57bba5e9ebbb91a0bdc9e2dd643f5ab0686e9417e0719369266d7e46d";
+  sha512.doc = "0e2038d76d478bfa54a547c97e002e84a98a1dc7ea0a1584f12d6cb1b2c4cb1f65d9d368533b5870c4f3ecae02396ec0172a89eef1547d33a168ab87c846a4d6";
+  hasRunfiles = true;
+  version = "0.2.0";
+};
 "bearwear" = {
-  revision = 53425;
+  revision = 54826;
   stripPrefix = 0;
-  sha512.run = "cbce954b7c626f2941e77a121346dc4d9fb618908165bc1d8a6a55904573249dde7cfd4a6323c9753e8fdabd88b73aaf4b7e6d4b40b21e13290e2a80d2080399";
-  sha512.doc = "2d9c60efbc6d0d29d31daebcbef2cdc0d0af35a84223107424e36ecfb085b7341340e06b9006cae0ac15ba93ceaa50e1b0a942b7a01292f9f5010f32983fd4dd";
-  sha512.source = "7b233bfada9e05a147579f32d6405c7eae3e2934c55dc77659112cfd60f4d57b084854458de3fdf3aae7a14c4d4d82da8be91718b487b4b2eca33a569594a693";
+  sha512.run = "c758735d869a9b1dedb64c9c0377891606d32ba69fe0d665d882d7d113bcf3c9678e6cbfe93c269758d492a0336c26f937195f04e80587c1aa083fb1c766829f";
+  sha512.doc = "03171083f40cc4688ca6849fd371189b43a9e5963e06be3ad44271b11cb985cfa0b369b49ed43110395e1d7d50f4337e9ce597989be48049cdf3c3a1beac5ff8";
+  sha512.source = "5263fce263e48699b3e59e556827f3fdd88cb812a33d259effad361289ab8270c40d7c3c510938c56a99070bea4894d769e7f0986c7aab75262feb59dfc27078";
+  hasRunfiles = true;
+  version = "0.2";
+};
+"beaulivre" = {
+  revision = 58503;
+  stripPrefix = 0;
+  deps."colorist" = tl."colorist";
+  sha512.run = "68117aaa40fb49c0fa7da73fb4f5cd1445191efadb4ed1ad08a12878fc1681cea13804fbf949484a63834cb0a14b3d306bb6def553e3dfe2420ef7e2b84614ab";
+  sha512.doc = "263b5b5bd27c13db1247354429ccc93953e522213a2b154c08918489eb4c2ee3fc36f5a2922a901f1113b2bffd11301b4d3d71f90876886c32e07a38f28e30b9";
   hasRunfiles = true;
-  version = "0.1";
 };
 "beebe" = {
-  revision = 53819;
+  revision = 58697;
   stripPrefix = 0;
-  sha512.run = "802a349991ec0418de9a3de2247dd73c904ec5e3223f17cda0dd2805c8012276fabf412b861d656bfdd7aa2da46fec251b7eeae083ac3ed361cf1219f9b2e915";
+  sha512.run = "03ff9ba89d188869abf6a610ba7064fbdf4fee229149aee49b00ba4ceeab31c4b991297a75b9c4d5e795155932080aca4894c0b8b738b5edf0a0ad8a923c767e";
   hasRunfiles = true;
 };
 "begingreek" = {
@@ -2653,13 +2799,13 @@ tl: { # no indentation
   version = "1.6";
 };
 "beilstein" = {
-  revision = 53925;
+  revision = 56193;
   stripPrefix = 0;
-  sha512.run = "63e4720a73e3ac4abd650c3787dc85e7e4e261481e805cfae4f32dc7ce9cdae6e08516d3e8f10c0f52c7d7790e6d2a2bd390bb512cc0b94fbdb2e04cc67b2495";
-  sha512.doc = "cff7c9ee987ccfcec0252e3e7ed1c06f67d9ea6f6534d36b62c4c00df0f1fe99123debd2fce376fd8d0febcb9d3fcc61b14ee9e4ee7b54a9ca042056beb4d7c0";
-  sha512.source = "551f92238fb5546d3a76bc74786c0cad07d0c2b707adab292d47eeb984e06bc44749437e876eec82908eacd4f3b3927f3830eeee9b8f65b9b7a5ba5c6939e063";
+  sha512.run = "4d604245024a94e23c30c7968e177173efebc7d8d227688f0e90adbf071c7d0d44a6c07c37143675a66899062ca2b8c366516ca3863128e33e784919a33e3d49";
+  sha512.doc = "9684c13b0d91121e7e7548ed9bc1e377ac7a54f9f1f2aeb57d465bab36b17d216e1cae4eea9b3fb6e5afc42e41f465a31db0209f5b45f40f7db0afbc4646c73d";
+  sha512.source = "0bd1079836d7740070d6100730449e6118a14485902a9016109587530e0f83b8dd4a4466cce914c5f06f42163da746e75fd998eb6b279e45574f81535e65ed1f";
   hasRunfiles = true;
-  version = "2.0";
+  version = "2.1";
 };
 "belleek" = {
   revision = 18651;
@@ -2670,11 +2816,11 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "bengali" = {
-  revision = 20987;
+  revision = 55475;
   stripPrefix = 0;
-  sha512.run = "384c07640acd5d4ef2fb661d661f1f3550fd84ed08e5345ec71cd7b3189560cff18c4992a91c13812e5bacd06364e3cc52faf6fd32d01a4fac1b2928490f97b8";
-  sha512.doc = "cde57bbf0c8eb52b92973f80c7a780d30967fc2dc0624f1626856054bc0005a5f0e318474f145b9abd60a59cdb6e87e8b4a3b03b4b18282db758b5f110b46371";
-  sha512.source = "f6f8641cd631870077a73c702da0d7718b2a06236da608b3ad6cb81e60530f93328772e97870c3da8d6e3ff9106729db5d3137c56329f6271a9b1810a565c189";
+  sha512.run = "2ace635791a4c7a8af0843a5a92d518d0e93fc09a94929a277002a3e4426f199e207238766b07ff3f1e1bf0e3c0cf8b83897b30ba105ee7239d6ce1d591289fe";
+  sha512.doc = "61bed8e39b9dc4673ce27402c0ee76b035e254133af09bbbadd00b80d367ffe204d5f660af8c633bc7dc6bd81f66ce419741e341f63e314367f2e54c61f8269e";
+  sha512.source = "ddfd0dce8379aaa3e224f74fd33fa4dd1fbe6a40d9a01bc6dc8da1dbca5b5eae97c4837ff21c75be8658d37693cdff3c2983fe01c77d13bd0eb89e14f78d6e2a";
   hasRunfiles = true;
 };
 "bera" = {
@@ -2732,13 +2878,13 @@ tl: { # no indentation
   version = "1.3";
 };
 "bewerbung" = {
-  revision = 37880;
+  revision = 56998;
   stripPrefix = 0;
-  sha512.run = "a82ffeb4fc7fa5bc42f06476df0c985d59d70c81b34ab50f10cf2117f8861a09b90ef3f53bee78291842a46fbc15bc40663d65b88c7c682c72b25fc86ccff2bd";
-  sha512.doc = "d9fb4f9da944e132187fce6e987be8eb0ef08cce80ce63e8813c1af8738dad61a93aa7c2e214b3ac0b77c980f8a000251ab9536c8a7557b9c7cdf66ae42fcbcd";
-  sha512.source = "260f6f1b5484358c7b558f8b78ca68ec5ac691fa367e634e5fe6f29b06ea9eeee868bce9e10717971d85c5ac23b71d853ed746842ad7674f7e913cf16b9def47";
+  sha512.run = "85ea6341316c231786612a29fbdd4bdaa412512f23e84431669a60262b5594fee908f68b8805ec79adf8445eed724327e4df8e692e75717710498486f86a7f22";
+  sha512.doc = "c414d4d98b74e8720e487ec2ff5040e9e3de59dcce449698d5e781abb300f13679a5beb2c4af3439a8ded3072a9e69d7bab431869309e87a7b5e803ad684d177";
+  sha512.source = "25749c09482ea181ea35b95bebabdded49908ab6796ece3d907261907581118eaf626dba418987349d503a4ce8dfde87faa5ff2b750a53bfd6ccb4c7525ea141";
   hasRunfiles = true;
-  version = "1.1";
+  version = "1.2";
 };
 "bez123" = {
   revision = 15878;
@@ -2757,20 +2903,12 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.4";
 };
-"bgreek" = {
-  revision = 15878;
-  stripPrefix = 0;
-  sha512.run = "64a0a2a8e19d7fbc2953b8f1e9fee90d0367e5f943cbf146489e930d6a946f9977c32b5ea3fcb334c2c297050b36292f813e073e35866a167ddddb72f123a2d6";
-  sha512.doc = "b5af046a386422400434b1c5ef441cf1c2ddc29f5d4b089aab0ece392e7ea81d9ba224145d612d721d13f05eab3e4b0f2cd6283f95e096d831e6e68074d6fbf6";
-  hasRunfiles = true;
-  version = "0.3";
-};
 "bgteubner" = {
-  revision = 44205;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "0bf19f7ecb12194c2d112ab15226aaaed3737f99cb2841ab9c755e78e3fe92d43f8c1e3abca566426f1c16bb4a200790d77397129da594239aa9d2f9a6ff0a0a";
-  sha512.doc = "a4277960129fff04ba3ef6e24463866ae75ae0b690d8e95f618a7c95a442dd02e84d16793a4f5ac12a945ef3b4bc7af05fdc27e551c0e8c92c141081d6a71cd3";
-  sha512.source = "5d20396e63bdedcf2b94222b8e060c498539f92bd99c9b78fc0e0fa44eb95734dfcad7c16e503f33dbfa8032f49d7a6c1020a8a940077bba36ff73f5ecd45ef3";
+  sha512.run = "53d38b2bf03861553a60db38c06b5b7eb48404a08f4bad645b24383ac4131a5b60a0103d0d2217cde1aa4f8bd739db4389d25693bb6186fe0974b0ebb63fd567";
+  sha512.doc = "344c8f7800a273b914265ccd9cf8175a040f021c07aa0fce3b6391db85e8ecc43d5d593aeb8707f82cc2c8c987b2d72700a2fe4d8b0bdfcaf2a525c5d79f7e3a";
+  sha512.source = "ff33871afe34c6d578dd5d8e795e36e83a785893d8741dc2ddf2b8bb27062324f00e0f52b3cd3d993074a7e7d21207537f028f6f5dbf8384d02799d1108b9472";
   hasRunfiles = true;
   version = "2.11";
 };
@@ -2801,28 +2939,28 @@ tl: { # no indentation
   version = "1.5";
 };
 "bib2gls" = {
-  revision = 53964;
-  sha512.run = "96d9bbc8d0beea9bbebb6fe4c9611c12947c1b820c0b6e029052e292797fde624166761f112cecfbc4ce040c66b4f5fc0c6450facb7827d8af3dd365a2a58920";
-  sha512.doc = "c08f2ab6452f4dec935131f0139fbb84e8fb92a30f909c7843b452f9c4992532f4bcc9012539d795037d555ad12da918fffcbc8b8373bb6bf10045858c0c5e65";
-  sha512.source = "683f9f48c12bb29a413592a38ed21326b0993010e6a0244be1957c54ce8f1c954f74fab9e16e169dfa0ea254fb05803e0b89ca985242b9588f0556bb53ad2829";
+  revision = 55811;
+  sha512.run = "a4b697b6f4a2b809699081b6992b702b736bb82883a487f58b6b71cbc0e12cbbab5340001fa96e30075a823b4b6a7f37e514fcebb591a950f814658682e2fb2e";
+  sha512.doc = "8f6c1e6647ff35cf167072d89af35930d51eb62968643aebbfcc189446d76b10f49d0db270c43b0c787889069decc1ef844d79bae5df38c3619a92904aaff8b1";
+  sha512.source = "fbce6911efaf89c5a734c6a56bf9656bdf52f40e795f57e5997a93b1b83b8543b35330368697a7e8054648d52f0814accf57fbe059570903f092abb6182276fa";
   hasRunfiles = true;
-  version = "2.1";
+  version = "2.7";
 };
 "bibarts" = {
-  revision = 50226;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "04ac23199e53049f54b670a2c6de94546a01d987e96aed23617692aef156e487dbf631309b81aaa0a95885f9b989e4e9fd9409d444d319cd58169e930b842ae6";
-  sha512.doc = "4e6282217b655fe87dea8e5cd68ed0db14990756bf997e90d3a5def53da50fed63687bf33e00ed741ed437572bb554fe68ce34b146bd31f3fd16e9f66e5879f8";
-  sha512.source = "59a2a25aab81c196e50be807e43a2db0a8eb72b0990b7b5cd8dba971ea995f863986fe759534bcd306b64aaae155cc99a5c6432bda65346cf0899de2c62caa97";
+  sha512.run = "2e85d46a2d27d1016dc6e304eeb47a1a6927d38cd5105916c61c86415d8fd92ebdb8a48b5fe4b5bb58856202b5d3ade4c0997e238cefcc67a879b27f27cbd27c";
+  sha512.doc = "7f77175f1b9cc2dbf9957ebb99d2b471e51965c5861e64c6841e3a88eff033d3a9e0791b93919346b3c0d26c1035482b1e5300be2232b69d988e6a4ee5bd96df";
+  sha512.source = "724de91be680017f04a2255e25cd3158c5fdff39ae1684ccdba2421010155ea9e2fbedd4ca1baecc8a56514c5b8fdfb964fddfc0b14d9e48a649d4e7da8eeee3";
   hasRunfiles = true;
   version = "2.2";
 };
 "biber" = {
-  revision = 53064;
-  sha512.run = "e0f59f15bb12276ba653ae57d7599a0d31a5dcd67c64a311382a14ceda686acaef689f1e3be72597b2333fbf3df1d9ea3b21c12ade41393972853ccd51d1912f";
-  sha512.doc = "4aa96124801d1cee36a2a3621a697ecc2184089fc7893ffb43de27e6a9c29a093e22aa5a7a54f0587b35159055998f7a2424637f83fb5107450ad4a3672dfe4c";
-  sha512.source = "e467ec0b5ed9f3d568cde7d71962b1e8c6c1a3ab26ec48b75a08332c69521ca740e54f14558a7a0ecc8f7cc7ef1072fa7a5745f1b84f61a3f7e7d7a709378f72";
-  version = "2.14";
+  revision = 57273;
+  sha512.run = "85c07705dda6e4dac7fb3d3fcafaa156abee84f19ce8652b71787ef5a631ba4519ca35a34c8d0d83f90b8f14c583f83f820add220d0f764c19d1abf4c3b7a3db";
+  sha512.doc = "9d86fe6df7fe33221259395aac86729708481ee5222868a455153e7976c91c48a9469a9813bb0decb83c7eba2a3ec408150ec47533f9a41c974587415266f6e2";
+  sha512.source = "396398323e6e9ee4df904a827bab9b246e6fbba15033076cbbc3a63e4443641f81c19646a4145c0c0fae38af37f54a5fd2166799685f39183d349c8273d13459";
+  version = "2.16";
 };
 "bibexport" = {
   revision = 50677;
@@ -2841,17 +2979,17 @@ tl: { # no indentation
   version = "2.0.2";
 };
 "biblatex" = {
-  revision = 53063;
+  revision = 57272;
   stripPrefix = 0;
-  deps."pdftexcmds" = tl."pdftexcmds";
   deps."etoolbox" = tl."etoolbox";
   deps."kvoptions" = tl."kvoptions";
   deps."logreq" = tl."logreq";
+  deps."pdftexcmds" = tl."pdftexcmds";
   deps."url" = tl."url";
-  sha512.run = "544d32bf4ee3b822ecdab4583ceebb00fc3a03222e6846fe5aac6939fe4fcc6f0997939107b4654bf2d0bae920b6a92310328e330ae60de49402f9b9c21cb753";
-  sha512.doc = "d8a323a2e946c1eb94bca8e24081dfa3af71466a4b25b6b8c677de7515929093a75823198f35e86b175045d2b91a4c18e6e3277b08b8fe8ddc4d7d5c411e3492";
+  sha512.run = "9d8fbb720f69afabb42ff17287ba61760d910b40c4b90923bf46fa0aa9e6eeb188cbf09f533f0916af145a361702387fce95ece74feb3a535d6409a3fb39f684";
+  sha512.doc = "c81fd0590e7662c7887274effc3e1e0badf0d0c67fc44f32abf8c8da3426549a1adbf6703fbd530e595a2cfedbc4a5a089c703f3a542ec0416705839ad093bd5";
   hasRunfiles = true;
-  version = "3.14";
+  version = "3.16";
 };
 "biblatex-abnt" = {
   revision = 49179;
@@ -2861,6 +2999,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "3.4";
 };
+"biblatex-ajc2020unofficial" = {
+  revision = 54401;
+  stripPrefix = 0;
+  sha512.run = "62d09153fea349881ec381bf6f2badd4453c5b2c328e8e3fa1cf99ae43cf62faf525bd453f02bb6d78e9f12ae4e35dd00c2c6f8efa015336bb13f485e8064683";
+  sha512.doc = "b66f343c8456e3efb118fa18851dd08f298d5dcda4312c9688ff486db7a98fd5b3b953616f407d179480220ce905a6a6a08faa325061df9b71c6490277cdfa4c";
+  hasRunfiles = true;
+  version = "0.2.0";
+};
 "biblatex-anonymous" = {
   revision = 48548;
   stripPrefix = 0;
@@ -2870,20 +3016,20 @@ tl: { # no indentation
   version = "2.6.2";
 };
 "biblatex-apa" = {
-  revision = 53873;
+  revision = 56208;
   stripPrefix = 0;
-  sha512.run = "1fa8864f512f62025a4ad844c2c1b9571028911846f8ad57dd86ad189c331586e316ae403104ba717af308c89ca27f822ce6f2800df574e5acbb07d95b822c2c";
-  sha512.doc = "7bb1923fb7ea69b4a34e77c0e7b3b5792be6e603042021108ad679a045b2fe0bb8cbd6a74bf3530c981e94ed0d8d419bd95d2491bf05f4bcce1d610682d1d912";
+  sha512.run = "59ffdb263b02b4934955037f377164297871b10ab3794dd8a11b70cecaf9e773bdd2b3b2aef24d5085672614a51956ed8083866c6f56c72a8c8eb4c1ef6a775a";
+  sha512.doc = "eec8f6cfd0244639f91142b3ac45be28eae14e10881a549d97f0711235cc46b6c25983f0d7742ec1c8894dc8c3c189070138874a6215f630f5e3fb710516290f";
   hasRunfiles = true;
-  version = "9.6";
+  version = "9.14";
 };
 "biblatex-apa6" = {
-  revision = 53000;
+  revision = 56209;
   stripPrefix = 0;
-  sha512.run = "83a7456021e207fb8616f4dc1010979e4e37097f05914fdb6bd631c02a75f28e5892cc028e0d05981841a419e74e4d02923b2b58be883855574acbef5973fa26";
-  sha512.doc = "963ff8ca4c6e7c81e410af7d476936def4b19867b38f6740952581f36e87b52872dc3b90b731b8445ecd13696f9b383a48cd5d473754f6324f4bf13eed1d4d7d";
+  sha512.run = "c327dac9368270aff53b8cc9319834c36b20701d379017c1ac0f4597cfcee56a5f9c149433e2629e2bcf708bb63d8b8706ce9c6dc009696870ebf06728f11b7d";
+  sha512.doc = "4eb72746e8c627106cbf7e0a7164a30030cf87a6d91ec0afcef70e072dacdf2dcb386ff91e1ff648da178c6f01121c16277630752ce792d54812fd97cb699541";
   hasRunfiles = true;
-  version = "8.3";
+  version = "8.5";
 };
 "biblatex-archaeology" = {
   revision = 53281;
@@ -2903,13 +3049,13 @@ tl: { # no indentation
   version = "1.2";
 };
 "biblatex-bath" = {
-  revision = 53424;
+  revision = 57924;
   stripPrefix = 0;
-  sha512.run = "a4025d3e6a8b6ea92d8389d93e5fd05fe9cda7c806d96e88cc24522d02b8757e04b1064aeddb429779feb18db2af631c2c3830cb84fc03aa4376e981c13e2355";
-  sha512.doc = "af03f6398bb8b64abbb6568428ae75ba5e958977ae977e9198f17186fb72ed4712eb8a2d74abab643fa67ae0c5302b041ee39b413f06f56c8f47f1baede975b0";
-  sha512.source = "b7929462bea8667d059b821af0a121e94341334dd70350792d42e7c26fe9a27ba7668c7458fd31dd6dccdb4b9153ffd7baec29f3ea4bdedff836223b57324f7d";
+  sha512.run = "d88e903aaa1535f662a90d993491fd94e8af55a14ad226890b8beb65395383c2b92c8c362fb21483519998f5e1b9bae088a215992fef4336af04ebf3e49e23b6";
+  sha512.doc = "a22433cf6a0255f1a50cc59cae09b9c84150d4859694334b395d6fcddaa16b38923a8873dbd48e07433dbc4edf68a97dd8dcf65b13239b689dd9066f8e959520";
+  sha512.source = "b79156a217b8c1eb9b5a4be100f87d80694c20fb48d84dcd3a631b871c95d8afb1dd428ec0591eb2f0a38421b699bbbe8d3f3c98500929982bd0ce57c49d1d62";
   hasRunfiles = true;
-  version = "3.2";
+  version = "4.0";
 };
 "biblatex-bookinarticle" = {
   revision = 40323;
@@ -2920,12 +3066,12 @@ tl: { # no indentation
   version = "1.3.1a";
 };
 "biblatex-bookinother" = {
-  revision = 53484;
+  revision = 54015;
   stripPrefix = 0;
-  sha512.run = "ff9cc867462155dde3fe654a1d71bc3a3370ce0ad5dfdd8d6a799581e637e17f687a2830d56c3d396616bfecedb5b0d562513d5497bc89e02dc76874e948d95f";
-  sha512.doc = "0ad1d1280699e000c7183c2337e7c2c7570bbed2fb901872249bbe733098cbc623c68d1d6357e21274f8e2e0c1ada023b6e845ea21e96f6c22a22acd5741051c";
+  sha512.run = "afafb9bf593dc3541ad527f09ee881fdda4af3bff78f02b68d53463a07494ac6c03ba55165738501b685e3e1d998eeb973e8431651ccf904b3ce0ea591dc0592";
+  sha512.doc = "ebf06bec2cc1b083a472bcdf03772c9f5568a1482c926ebf886f02ece86a6f0c31a127d285ee16baadc4c0ea771eaac05e374c0a3de215d677b07a0335d362e5";
   hasRunfiles = true;
-  version = "2.3.2";
+  version = "2.3.3";
 };
 "biblatex-bwl" = {
   revision = 26556;
@@ -2936,12 +3082,12 @@ tl: { # no indentation
   version = "0.02";
 };
 "biblatex-caspervector" = {
-  revision = 52802;
+  revision = 56837;
   stripPrefix = 0;
-  sha512.run = "0dbc78505f64dfdae6bfda4276f0958b046305b847c8d228d8ccdad2657c571866380bcf3026c6ebe260e27060c184dea61038b99079bf93c0c98994ca64b267";
-  sha512.doc = "91e37539ffc49b637afbfd097071fd6b0124f8e6a531287019f21c1ff9d13d8cf57d7915fbb65e489ac800323dfde2b251da8fa1540d6bba1cdcf19347c5d03d";
+  sha512.run = "d3e8c56ef35444c740e505cc9ccd3a3e0fc7627de17658f2f83865fe9dd48610a42fb226a0896b642851d4ee8a6e4bdbf070df32eeee047bdca001a8a8e34c94";
+  sha512.doc = "076578ca8f7416c698de9f54765ffc95fad9a9d504f78c50648bd1aa3a12132caec3ca067aee94731cdf71af97bbb73f4b85afe477ccf128e587d221fbe5cb4d";
   hasRunfiles = true;
-  version = "0.3.4";
+  version = "0.3.5";
 };
 "biblatex-cheatsheet" = {
   revision = 44685;
@@ -2950,20 +3096,20 @@ tl: { # no indentation
   sha512.doc = "a2b9a82afe127d0bfb71f3a481eed3198e27ef35caa5cd08557ed35645f6209e9187f1e0c21d6fa51e6c32d0cf044c0d85373195a5f034c856fb4beec360af13";
 };
 "biblatex-chem" = {
-  revision = 53012;
+  revision = 57904;
   stripPrefix = 0;
-  sha512.run = "16ec0b77de0d9162287dfedb7eef76818b7d58f6764e4edbd67e25ec141919f23802602f1505dd92b2fdc8ca948db0a32ac62ab99d1b79baa2e24ea616165556";
-  sha512.doc = "0c19ce9fa71e67b035f3b945f33ace8f21b65fdfd5d290284a3607d7aff74f50123b03656601a77225632c85d5c6b12ea0beb54dcf5c3d22752c2f6763c72efb";
+  sha512.run = "5339931e89e477284cfa76dcaa0be9ea7b3417dee4e20f8ff2a04da25bda4685270d3c001fd41f786f31c87e590b2aa4b597a517ef8086c75aad8f1e509a770b";
+  sha512.doc = "17207489eb4d5ab5cf210882e6487dcf07fc30195facf27f3bab95f28fd8cfdd270da30d410579f6a8d91a1e82e7e12ff809fed47837e3ae521927b8251da5fc";
   hasRunfiles = true;
-  version = "1.1y";
+  version = "1.1z";
 };
 "biblatex-chicago" = {
-  revision = 46331;
+  revision = 58715;
   stripPrefix = 0;
-  sha512.run = "85f50368da0e9497b92c09548c60c7160779fe583a8817a114d625846349dbdb0f9be6813476bd74246016b85badf90733557770094207107fa3d23bdb436783";
-  sha512.doc = "aa511c96eed89d10629bf6f47aad832530f1c108a6f5eea64bfdb9c47f377e7b64b69cd55eed2022ab79fb0d93a31574adb9182919b2113976d1ff084898e920";
+  sha512.run = "27d9ce6b00b71ebf751a720d42ebb16c3f7d6bba7b494acb3acf2232849342b992aa7fb9de35d7de4c12ef94956aa80be8a5d61366d9ef897257a6c4e26de6d3";
+  sha512.doc = "adb23e2fca96e703aef93385c48e82279e411e266b4a0d147be34fbf4b2fc781dd93ed4323b044a51660a94a2fd832f02f5ff16cfe13389b6058805190c881a1";
   hasRunfiles = true;
-  version = "1.0rc5";
+  version = "2.1";
 };
 "biblatex-claves" = {
   revision = 43723;
@@ -2990,12 +3136,12 @@ tl: { # no indentation
   version = "1.0";
 };
 "biblatex-ext" = {
-  revision = 52977;
+  revision = 57979;
   stripPrefix = 0;
-  sha512.run = "5d2294cb06e78052985f99d63ec56d35f54b3e423fa1e184a2829b5089420c7963d341124086ec7a4df3064f3b6f65ce55224260140a5874c15edb1ac66bc251";
-  sha512.doc = "bc44a8ec304dd082c7aebfc9e8ffc29cb5fa0ba53ec18b993f07d79bcbdca6a128a77744e231111093d695ae2ca036f3e660963cbda08a389ee2d1b2fa5775f4";
+  sha512.run = "77af6dc892d2071b1124af08d2eb6de4c95782c2599cfb9f6c018da51637ef3c43d3451185379a3ce6677ab504681c5a48dff073891097c96b70ad7e02a7687a";
+  sha512.doc = "2a47f80356c2cfd770e05f9bde969b8c8c694a1acf8f3f3a8292851ea6ed12da5107e5a2053a301a6131a9fda72312646ed885b22ae869b0e3af75a4a2306f82";
   hasRunfiles = true;
-  version = "0.8c";
+  version = "0.12";
 };
 "biblatex-fiwi" = {
   revision = 45876;
@@ -3006,20 +3152,28 @@ tl: { # no indentation
   version = "1.7";
 };
 "biblatex-gb7714-2015" = {
-  revision = 51985;
+  revision = 58753;
+  stripPrefix = 0;
+  sha512.run = "c4bd497d3ea4c27fe8f9382ac54f865da57576b08fadd28e10d93a7dbabb935a877e4c45058f4055dfe319e3e29df3995b8fce7496f12765b9c1c5120943c6a5";
+  sha512.doc = "b88722523465025454afa64841f00df9cb8cdfd9aaa81dfa75cdcbc9a7362f980b9d51d874dccda310a0afe5f25f1ad9955dc6ae6317a4d0bba2deb47fda02a5";
+  hasRunfiles = true;
+  version = "1.0x";
+};
+"biblatex-german-legal" = {
+  revision = 56939;
   stripPrefix = 0;
-  sha512.run = "b81acf7825f546d76a55e617c5d78a85aa6b8ad1c35fa63543f49180b78c59629c97a9c11db1291990a001bccccdcd725cf2550e5df46e87528eccd96fd6f045";
-  sha512.doc = "b6f51fa52262b40b847c62e1f8310f7a1d2d2de73608b022286ec5686677fdb7861d2b819c291ba7bbac33dc8be720ab05900ba4e036b37552a7f8e086a929c0";
+  sha512.run = "a82cb2c531e5f3671b0ec29ae27f9df9ea375f9dc616286805e8ff2a8940437427c23c51d09e477703e60c7aa70645430ed98890efbcaf9593b1747800a9836b";
+  sha512.doc = "d4108ee1d625301ccc32ae4202002d9c33c1cd9817b2d26430eb1acf902386817aeaeb6af518b67669b2542a3eab91e0f513bf1ad5ef8ba2572c5f5d7b813382";
   hasRunfiles = true;
-  version = "1.0s";
+  version = "002";
 };
 "biblatex-gost" = {
-  revision = 53916;
+  revision = 56790;
   stripPrefix = 0;
-  sha512.run = "a620eb113751c856e3b7838067e35af53b9ca54587b2eb76fe6a613b202a66569a607801cbfdc18afee182467841f9031db62d3777378d923a559f3811eb6f10";
-  sha512.doc = "d74575b0eed08f5e75fb31f8bf2aa3cf00e4a896f34119ab6665f8add1b938ded58e81ed1ac16f7a66ff088294478eef630789c8350a6c5767d4eec829f678cc";
+  sha512.run = "c9dad05fd20f6147215805df07cbcea228d023b2051a2b8fdac28e55d0d3424d81d71f48d7dbbd679f3a306c1385dd2d1c50d8d128432d3d64abc9fa96373350";
+  sha512.doc = "90220ec8159d1621e54ffd83c587d111bafdd54ed3d104146992cef5340d55093166283367e4dc3cb21ea2621122b4080d0a849f7ca2b116f262b96b6d177ce1";
   hasRunfiles = true;
-  version = "1.18";
+  version = "1.21";
 };
 "biblatex-historian" = {
   revision = 19787;
@@ -3030,12 +3184,12 @@ tl: { # no indentation
   version = "0.4";
 };
 "biblatex-ieee" = {
-  revision = 53931;
+  revision = 58716;
   stripPrefix = 0;
-  sha512.run = "6a5ef61a577b8fe91bb66b3569fb4082f7a5108a710c8ee6aa533b66603914114ddc09de70e3ba019bca1a744c090f21da8000810746d172924947a3c1e4a7e0";
-  sha512.doc = "4c4b8ccdb791ae55e27de07ef4b00793c4461334c7b5f63a564a46738d206cb00441637f6f149842bc04bdbdbdc4a25592bef58601ff9514aad0d9eae1c0c858";
+  sha512.run = "2348c59f6b68e7846f3da93ef008f856b899173281281a1d061f5d98bad3c2b18216987e4aa366c2a2bf9f53f6daa6b29aeca202ff385058676572b8f3702317";
+  sha512.doc = "70efd20bcdc08f1872242e77a389c207e048921b9a9741e11c4e81298fec1ff1a2c724e0485da5e3adf218ddc5171930170f9e4bf6e2503088a1fce5287403fe";
   hasRunfiles = true;
-  version = "1.3b";
+  version = "1.3e";
 };
 "biblatex-ijsra" = {
   revision = 41634;
@@ -3046,28 +3200,36 @@ tl: { # no indentation
   version = "0.1";
 };
 "biblatex-iso690" = {
-  revision = 52629;
+  revision = 54561;
   stripPrefix = 0;
-  sha512.run = "aed09ed7de33ae8dcbbe6261ff678fde9f9ba92cae48edefe722c944b5fa3396f6094bd93517070e7f77afdd48d6ef9ad185bc73498d398db17cc9f8b33ab6fb";
-  sha512.doc = "e07b9376f3cd5dab1b9dca41d17c06b161288c898db3175dd479ee0d8aa4b93bdb20be9e6934f48f3065ac07fbd074c41a3691f164e1e5e57a375dd2f956bc9e";
+  sha512.run = "70469c6baf7e9f644e9a012d48bae8d7904cd53c883f5238f42c20ee904c11df2381a5721d77ccebe23303975632321e276ef7eac158f4ee1f8d897de41faf2f";
+  sha512.doc = "a9012321245247b6c4331312dc3e371bfda7e70e500b1296b092a12343dd270551496b9787c90ff935c50fcfb4ed2a3b6dcdc5dd722b7ddebda316ecbe9719ac";
   hasRunfiles = true;
-  version = "0.3.3";
+  version = "0.4";
 };
 "biblatex-jura2" = {
-  revision = 53243;
+  revision = 56133;
   stripPrefix = 0;
-  sha512.run = "a47d1cabf771d3b90ffa1c00e354cf1440c0ca6b0e36ea3d92e0fb37aed003ae457fc446fe5e739b513c0d1e39dde09109fe377ad60e5ca074e8ce64d64026b4";
-  sha512.doc = "f6cef0f752daa994751089f63b2e8948423b3644e3f1e49aed6bae05b9a36e5ea8f614a34a3c7cfdf81e0b8262105d25b436efb17e7cbe09bcd8d0a423c0943b";
+  sha512.run = "f3714f1348624129cd2342dafc622c8170085c2210012f7e4580d3dfbfd79a4c695f5888868a79412712818c709d5fa76deb6838303d6e5321f7f4932ce29f4c";
+  sha512.doc = "40adafe11ded9b2f339c4417ebba767a1571b58b052fe7712082a9ce1147d0d2af9f84736c11d36c1eedc3b7c07b004fbd9ed2a8e08f02520bf0ad2024146ead";
   hasRunfiles = true;
-  version = "0.3";
+  version = "0.4";
 };
 "biblatex-juradiss" = {
-  revision = 29252;
+  revision = 56502;
   stripPrefix = 0;
-  sha512.run = "48e5d926b24752a8138b1094ba47955e9f8d479d3572c2c81d727824e0e5a6243cad37d3a61f1d28163b5bddec6ceb2b35a5f19aff722980eae350ac9382cdd9";
-  sha512.doc = "573378ed40ce0a3efd0c47bf0a32d146543e16b80dbff7935ab980e82de61a1d8023688d59fc2df001a3415b9c73bfbbeae3ce4c240c2ea958a65d6d2003274d";
+  sha512.run = "6f78c1da8426508af972a27b6a23439a3b84c402e6df2494b333111cfddcebbbce639a49c8e900cf52b0e63724a41031b4fee82e0a17f07b479584bb66c809d8";
+  sha512.doc = "94bbebfa29a491fa6e502e55236605b5a589c24920d235cbecb8c9372d1e580d586f643537a5ed6afbe6d1656f0d5ee8610cd09e3112a9e2fcd00581937016c8";
   hasRunfiles = true;
-  version = "0.1g";
+  version = "0.23";
+};
+"biblatex-license" = {
+  revision = 58437;
+  stripPrefix = 0;
+  sha512.run = "f655338605eb7257b2746a73e4f29d58912addeb65a272b3135cd45b32035a58c0f9c9556dc9ffabc34ca8c3b00b4d8c4f44da6654d794dea3bc2a94b986bdae";
+  sha512.doc = "8638454c5014f7df6c82edaf028872acd6f6a135389919178e50bb660236e63a299483f3ef4e83476e399e2cff71f1563e4a2fd111c1d18aac20273b3abbd744";
+  hasRunfiles = true;
+  version = "0.1";
 };
 "biblatex-lni" = {
   revision = 49935;
@@ -3126,12 +3288,12 @@ tl: { # no indentation
   version = "1.0";
 };
 "biblatex-nature" = {
-  revision = 48940;
+  revision = 57262;
   stripPrefix = 0;
-  sha512.run = "265427460a57fa3cba846b3e7dd4fddf9639c11e223cba5e7f47da5b18ed1d348a70c29204378ab560f2eeacfdb12257c25482a1c3d9836f9025d0ddf987b511";
-  sha512.doc = "9053472af9e07e4c297ce0650c7d9d20b85dfe22645652a9be49e950bc9718160433e6ffa01e5d0dec04a036425e31d4b7e6c31de9fc7553a730720fe54eb36a";
+  sha512.run = "b4b12abe904d96c9489dbdf248042ed1f1af1474921e0835027220059492f2441aace661260fa3632a65bb2c1ec0ab4e521014e63a14f7fb835293fd8191c2fe";
+  sha512.doc = "c5169189b1225dba8631a0f7f5ceb5bdb5267888b2817716e23aa79bd4516665965b4343ed5e1a8e5099eb59ca64cea9edbd31613f7cb02f161b8ba561c6d4e5";
   hasRunfiles = true;
-  version = "1.3c";
+  version = "1.3d";
 };
 "biblatex-nejm" = {
   revision = 49839;
@@ -3159,38 +3321,38 @@ tl: { # no indentation
   version = "1.9.0";
 };
 "biblatex-oxref" = {
-  revision = 53571;
+  revision = 57513;
   stripPrefix = 0;
-  sha512.run = "deb25777940c0aa54976865590f629b866d5175de57fe21dac0193c4991eb5333591f350475bf9ad4fee253acea2c27f9a6abc52280f487b422f70a9c77f5877";
-  sha512.doc = "f589fecde40d9e07d99b453c9119668d6ee3a9b672a2a3184e8aba08e6c18484a359ef598c7a5ba9f741fee104b7d1260144075f28767064ba6971d5965771e3";
-  sha512.source = "3c979ac6b9cdf3a256f29ad012068cbf901781a0f977f79603c74eadd38cd8e21365efdedc6979ddd86b145663f0ec6f74df6d6cdc7985f3836ff351210bbf77";
+  sha512.run = "77451258efdd72939a8548452c28b442250db97a4d9b88e59c463036ca0ff32b9153f87b870f7b0ebe490631e87863a979fde7b75fe11993bb2a06ee949c104a";
+  sha512.doc = "3b01e5eefbd78025442150f94de4d87959449b8eb77ee94458eb3eb4edb36fe4c1ae7c9a3320b3165122f0adbb2dd850e09e80619d78069e69d7fde3d8c9f192";
+  sha512.source = "7d7bc8d02dc4e03e76d4b67a06d41a450b818d0675c2ab710e9305d13cb922bd23663c77e8e9dda9fd27b28e7b331dad15a22c6bfb94cc33e13b36ccd979331b";
   hasRunfiles = true;
-  version = "2.0.1";
+  version = "2.2";
 };
 "biblatex-philosophy" = {
-  revision = 47283;
+  revision = 56493;
   stripPrefix = 0;
-  sha512.run = "faf78d9a7a551c2a161bf69c1a9146dd7846cb4ff1c3f6332806f955357a8f3af66b9ddc7d9732246982b9bba60730071390a0cf240a241d50db03655414174d";
-  sha512.doc = "1e68948403c72e93f94b758786a0c632827d5e5bdf0a8db2066e52868b2ee339bbf0948ed381d78db733482cfca075d9d5c26624df9f2f85d4ded232ece45ed8";
-  sha512.source = "e170fb71a9c429204fab059f266e90c4b67a2ecc24f504ef68f70c5ffdb8cc619a2a1963febc0ae308b27f75aa19f0d2e90445ef9e6f3bc81b2fc212c9cf4835";
+  sha512.run = "bb17f04a770a28ae5f136ff0849d18526fdf740bf47fd30f0149cf91c23e2b321b2dd4bc4c0bcf4db45b3985610544fb0c577f945d000475751a3903fbb1e595";
+  sha512.doc = "aee20e15d7daf56cea581c7a71f93edf0325607642e78664cc7e12861af7539c3b28c51b21a7ff52e09576c0c743cf1120ae2e8ac8804c1f94cc3dcee598c04d";
+  sha512.source = "a5be7057eb1856a63ea5d89e51f19f586e038967c718475da65afb9441d8f6e56a862e7f42fc045dbb3aa85026d80b3aca73d6e554df32cb1446b026a0ec16bd";
   hasRunfiles = true;
-  version = "1.9.8a";
+  version = "1.9.8c";
 };
 "biblatex-phys" = {
-  revision = 53013;
+  revision = 55643;
   stripPrefix = 0;
-  sha512.run = "a7afe31e2cad56dece6bdf60d75d2d7b4279525da00bc4fe0003804dffd0934514a43164e4f5fe5a4776365d428a21a800f0419cd632f56afb6bea6233bf51c5";
-  sha512.doc = "a1dfe75c92e89ef47ed6a4ef6d997bf2aa717d6c6f023773a056f5ccf53cbc78d5d2206b1b29e0ab11389b76ef98d7e2a7f8242947abd0a8fd93e1db94f299c3";
+  sha512.run = "76a37bc2d37e2813dc39b9b21cf38788e6da14e60222e4fb36aa90e5c933c18adfcbc1c8affcf9a8e70df14d516a4827599b2c5979828e7e28b77b7b3021329d";
+  sha512.doc = "62fe809519f86ad46136c18247b5c440766778b61d1d406df302aec76756a2259f06ae175af2267de30c1347db511f9482503326c28e1d382039d5047a75a961";
   hasRunfiles = true;
   version = "1.1b";
 };
 "biblatex-publist" = {
-  revision = 50989;
+  revision = 56392;
   stripPrefix = 0;
-  sha512.run = "9f73dd60d22adc1af2cc87c7fe3cf38b50fcc173a66cd1511a08a37938a0bcacef20ab27995ccc2cf4912d2b74948e417d0209bef93be8bcf49f51a6883778a4";
-  sha512.doc = "1899ddf6edeb2ed11417cd90957bd9567041d6c06b43a56d08d618a734d7700e5092dc1e350ed03a08e82f3b2e8759ef8fed8f8933996d1d8a5b7ed5c8becb17";
+  sha512.run = "dff83dc4b8ed279e2b5ad3a0d8e995500df08f3f21c72853ccf392624e40a20e058d06310fdb1384cf2bab319e93c9004cf7641a212aabeed21e31e50bd76934";
+  sha512.doc = "a5dc972074b40eb402076bcbc570ca36470a856317f7618643b8281f0b7bb8ab1b58c4ef7fa1141cde6b5ea5ab98c179ad9607b621eb43b52d172bb2e730a4b9";
   hasRunfiles = true;
-  version = "1.16";
+  version = "1.21";
 };
 "biblatex-realauthor" = {
   revision = 45865;
@@ -3201,12 +3363,12 @@ tl: { # no indentation
   version = "2.7.1a";
 };
 "biblatex-sbl" = {
-  revision = 49426;
+  revision = 56853;
   stripPrefix = 0;
-  sha512.run = "dfbe4de870b93fd1bd77aacf003ea56926adc6d52d0b5f47125d411738a66822f8c99bf3d58d0fe955105a30e5f2629a0c37ef5bc3cf00d3ebe895cadf621063";
-  sha512.doc = "c7ccc14015397b816ca508bed2533fbc2ff183dbdb035d13100e8ec8faee18ea7ce10f7d8140b2ebbc6d58831db59ed6a9d7a4b75b0ef346081deebc7c323b72";
+  sha512.run = "b13fc1b54270fd7b79c3dc71388152b9dd81ee868ce382063fef690c828dcac8a11127dc3cb1c02b138a16d17dd5a5e311d8639efaf8f84e50aac4de6cebcc93";
+  sha512.doc = "815f16ab2f6edc7767fc1bd95f4e792c435e605ddb777e65ed54f66f8cea4e15b6cb80938276b1fa30184a498e628d32e2c226d97b7afa99b6022c6f6eb2522b";
   hasRunfiles = true;
-  version = "0.11";
+  version = "0.12";
 };
 "biblatex-science" = {
   revision = 48945;
@@ -3232,6 +3394,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.0.1";
 };
+"biblatex-software" = {
+  revision = 57366;
+  stripPrefix = 0;
+  sha512.run = "25c2a7ebf41761d3b2b7b2dce0f754073d8808b6bf7bd413fbb10aedc465de543431fb297914236c51546b362b9215423e94f9464c5e071d24c6f7b9064e6b1d";
+  sha512.doc = "5b9671e77ed59b57724a7682ad3b23f7403d4fbc31387443e5adcc170f3aac4ea288454263c091ef71530f3ae7c5b458e48065de9c7f66182b036a9db9119ed9";
+  sha512.source = "e3ed4c9292271223c084bb66913a6c4c7a27774cf2590e63820a40efe36cfb53e452e45d5b2d0d73390a42d51c38a51a84f8894d24685026731dfe6e34b6f6ce";
+  hasRunfiles = true;
+  version = "1.2-3";
+};
 "biblatex-source-division" = {
   revision = 45379;
   stripPrefix = 0;
@@ -3249,20 +3420,20 @@ tl: { # no indentation
   version = "1.2.0";
 };
 "biblatex-swiss-legal" = {
-  revision = 32750;
+  revision = 58661;
   stripPrefix = 0;
-  sha512.run = "fd21319f30eb2187333db187c7ad171cb61a75ad4d62ddf3414a04021a7ad4fce57836aa0d2a9ef00488256d5126c18a976f664cff8978f8aa1e80a161dce979";
-  sha512.doc = "beba2cd9e8a78076148f7aedb6b5cf950ed865de9432633f225c160e1a46c98098a8bc94c783ec35cd982e020736c85ec94bc66ad68ead05d7187238ceb0a07c";
+  sha512.run = "0d15d1a11d6f7a85d2443d3376b3ad8ed0941474a7e598ebacc08450a89b20b1909dff15111d209605297dca720ea6d7b6772869a39c14786199b0c4eab4e011";
+  sha512.doc = "db4e7cb54f2002afe099e65402c43bc5574cf2e9bb1ffc11bc0467401f0a8bb48124681fbcb2a95e950517a20baff4dfc79822bbd7152e7408d4aac04651dc5b";
   hasRunfiles = true;
   version = "1.1.2a";
 };
 "biblatex-trad" = {
-  revision = 46668;
+  revision = 58169;
   stripPrefix = 0;
-  sha512.run = "3a21ed76cdfd4c327562aed15a56fda824b33fdbab993accc8e944a662e157ca8ce30c4ac6413b4365c27ce787625e03d206a5574116c205daa55a5211779f7d";
-  sha512.doc = "cabf53ca2febe8bdc26c56f58f99e811ab8695134f3b10c01f946c7c13a63b723ebd598013fdad3eff8aec9d4f629b16bd3915d9087b1dca365cf208a7f72ea5";
+  sha512.run = "e14b9326eb05af2a89eac072d6c71f61527a53a813605bbb399703d2a23cf7ddcfaeb2cc77f6f7b8959e05833ae3eb343224bf126907193af557d09fc1746552";
+  sha512.doc = "32d6fa6369359e15717257be6e89f77081dbd352654d4c60d55f4de9c5f522f7d222b51bfb5a1eedd7f6378343d041380c5e97e559e681bcf7647e0695ca13fc";
   hasRunfiles = true;
-  version = "0.4a";
+  version = "0.5";
 };
 "biblatex-true-citepages-omit" = {
   revision = 44653;
@@ -3272,14 +3443,38 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "2.0.0";
 };
+"biblatex-unified" = {
+  revision = 55290;
+  stripPrefix = 0;
+  sha512.run = "930867328f0f818d03fd5d8cacad6113214609500f43e06b77b711c00939a3a3c99e8e3bba8a093721e719b8449abfc29be50c9b5482b65f3c47f4b7b3a344ad";
+  sha512.doc = "7196a1c293864f8cbe9e1421ee074cf249bac49c9d9a8cdd811a0252d4a0700f1874bc7d8f3cf22f3ecfc50ac214ce17d30ba8e7f84ae92428578e540ce66429";
+  hasRunfiles = true;
+  version = "1.00";
+};
+"biblatex-vancouver" = {
+  revision = 55339;
+  stripPrefix = 0;
+  sha512.run = "9d31315ce02bc47869a3e11644fe3160bb7b0178f87f71a9f3c06e54326c49bb1c37daee0c02f7185ef50513afe0aa4bbf8070b91db3181a2185a138daef48f8";
+  sha512.doc = "ac285c5568d8651e81680576950d593eb5247b636c1c27b0a2a4a6758bc151b51f6e2b4938bc9273cc748924cb9f6193f6b58b883692ce03fb272316b8ec7204";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"biblatex2bibitem" = {
+  revision = 54030;
+  stripPrefix = 0;
+  sha512.run = "4d27fc2bc55a031f571096fed58757de74e5fcbdbb485b327d8a34c8033b2a2ac316b7257ea369d41373d887152a1a84201f28c817abdd2ca84716ebdc4e111a";
+  sha512.doc = "b7f37db4271ea7fe0b6208cca2dfd66f7c2f70966081c85fb35d34f927690ae435574f566accdc0ee358c9f74920f18916bf558f3d97cc1f6a27f540d337d90d";
+  hasRunfiles = true;
+  version = "0.2.0";
+};
 "bibleref" = {
-  revision = 53090;
+  revision = 55626;
   stripPrefix = 0;
-  sha512.run = "1bd916174754653ada58aa5fe3ae646aa9f409ab2e8860a3a630d552a47ffea2888de5b8bc5a05b246525a317418f4118e1f4dfc5860d2409364e919743c187a";
-  sha512.doc = "270f34c698e043786c703aef017ec67b764ba3743244ed1a5ad66843fd01448a37ef7d790c1a57eb2c1984a4495bdc9bc51b5899579343a01681c17557a4b104";
-  sha512.source = "ab222b17342c909ec9517ce09df4df1b2ac5c021bb7a6cdb16f5bc1c3160c35d7ee1c44227e76d528ba239794dee888e9858e923c6dbdef4c2f9e7ff09a9a1a5";
+  sha512.run = "261773de4bfeb039d4cb3f2dd88ca7c2ae229d2844ae0f5f454e06d888d9543fbe1439490895a49bbcbc79d8335151bba2a35bf36777113a965613efdcf9225e";
+  sha512.doc = "964f8547c073db2b174d9ddfd1f6d0ff06df5bc51b2050725da20687f84ca835f58ee238f3f1a9d6d4ebc1858217ed0d8b2950964cdd638012d91e94bf92aa19";
+  sha512.source = "09329d9142cfeb1f70778f46d0396aaf20c7ab2a215d76120ba11147368236ab98a24ebe386f68aaf253991af4c95a320339e5d07e956132d9d3d08ede63bb79";
   hasRunfiles = true;
-  version = "1.24";
+  version = "1.25";
 };
 "bibleref-french" = {
   revision = 53138;
@@ -3340,10 +3535,10 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "bibtex" = {
-  revision = 50602;
+  revision = 57972;
   deps."kpathsea" = tl."kpathsea";
-  sha512.run = "2657225efc1d8f9954d1be9d9b866a626cb252cf596a78a7573ab5b43272e8646a4dd5c59f87275bd6280a2e614bb450c000da6cd9db6b2666f551943ccba8ef";
-  sha512.doc = "4974d5cc9b6702558a9df37d48ed1c00cf12b1ac54c38954c2ff000dcf11a832b2f1267ca1bc009768cc18adccc0fd7bc7bf0e8ebd351f11caaa5f58b63f6585";
+  sha512.run = "9d695d2335d5cb1abf2810016f227e368bcd726d9cb05cf197df93b68a18415a5a7be17ec81d888ca5fb837960173951eef2d04d8abcd3dd6bccf33673dc4ac4";
+  sha512.doc = "f3c241a15108671934a8c05014d68dadfde6c87a00375b45c92b4924a48c5a342c202b71be05035313ee764c0bdc63ab84cc5d80b4d5eff2411562bba6f798a3";
   hasRunfiles = true;
   version = "0.99d";
 };
@@ -3355,13 +3550,12 @@ tl: { # no indentation
   version = "3.71";
 };
 "bibtexperllibs" = {
-  revision = 47520;
+  revision = 57137;
   stripPrefix = 0;
-  sha512.run = "157db9c0bd7d44fea67844046996b5323f2d26828a8a4031712fe006ef0cdbb0992348d4a8e53c2a52ef0f8a1bd8cd108946baba46783d83d27e05b370bbc6c6";
-  sha512.doc = "59f0d671efc182550ca926b1a208c31569e76bacd96e6444437d8ddfae3ad7fcfba60fcb292fcebacfeed1dc225a3e973b41e852ed77eab11308848e532a2c31";
-  sha512.source = "59b5717b5762643e135ac5540d86e841ab6694539723f808e64c1533aa93c62dbcb1a4fe86e0b649abcf60c86efc94b696834614dc0e3c8b9418dfcc86cd36b0";
+  sha512.run = "a2989820b603d7001bdafd85d637d500a1f27640c37ed48990acd5cd49b8c9d0035457f9c55bb79dad5c9397fd5d4f46fc8a10834bb388a0626daf8e8269a2ba";
+  sha512.source = "b4cb508f2e24de447427bc82abf3366f5f2afa0b5a5a827e1b129e8b2819878ea78c2057c771dcdd86e362eaefa942c90e0f7285a8495256a9087667cde2325b";
   hasRunfiles = true;
-  version = "1.5";
+  version = "1.6";
 };
 "bibtexu" = {
   revision = 52851;
@@ -3396,13 +3590,13 @@ tl: { # no indentation
   version = "2.2";
 };
 "bidi" = {
-  revision = 53615;
+  revision = 55193;
   stripPrefix = 0;
-  sha512.run = "267dc7398d0e4de4a72fafe8bffe08a876dee7618dc2850c149b55b316945ef98d7c0ff76a4866a58a21c998a70e0ab0fa2dedcb6895809af05f10efa433d01d";
-  sha512.doc = "2d2de125e597310a8856f309c6d4325c3579c36dd43998bd8272cba187e15084d1e1985a240adea8fd862c9472732907d2facfc63d570ff8b97cbdf80ec7e0bb";
-  sha512.source = "445d060b983834bf151e6cf346bda0554e49d2794416ebecb16596a078b7d8eaac54e5b86a53c9be455a146aad73d3472726827befacfd549afd1c3b0f2d1955";
+  sha512.run = "dba36e375340a6d852eba98b83ad8e0821e684424a53069a4eb21acad43ba32cba11a68b971fa8bbbc6380a89c2432916e8a048de85cd5ab377d7811570a9be6";
+  sha512.doc = "16e8062ffec0b64faaa2c1f4916c8decb38510af7279607d11ce0537cdbdd57dd90e9901e47b7396758b9653321f8e14716a809740f5d4c0f610358899ce333d";
+  sha512.source = "bbdbf08f87deff3ba6ff97869bcfb36b996f2985f4b28b4f598ea76827242d54b3e319379a9b027c2a6790f86e4503edf7d3f7e131f6ee34d48cfb042a8eed80";
   hasRunfiles = true;
-  version = "35.11";
+  version = "36.3";
 };
 "bidi-atbegshi" = {
   revision = 35154;
@@ -3496,10 +3690,10 @@ tl: { # no indentation
   version = "1.0";
 };
 "biochemistry-colors" = {
-  revision = 43960;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "204e04776677a70f40ac602977cb4e4f53a8d15873808b98653981b2e8198e7cd234189bc0903467569bc95a1f4aa2070343f27042bcbcf2d43720a44dc53b5e";
-  sha512.doc = "e1ce9b0e9afc7b6fad2b22b9a30b8785dca1a8a5e132c23a1ed688fcf6df06245a6914a5123f937fc37b597fa3a2f412e0a4afc5f8aae85cefc32dbf70a14405";
+  sha512.run = "ff6e61f48eaae649c5b14b60e85c46743dabc6fb841f3f2bdda0723a5a6cfb7a45e21e48574e4bc558ddd436474c356c5d2f767cee1299da3ff67db5c70c03d0";
+  sha512.doc = "0abc9a2d3318627f861be23bd175836efc6956147fbfc16f9ec84b4ff5f137f7910a12ec370c3baf3ad2dc08ca2ca197bd02e371ec258e9538eac4f11233f9d1";
   hasRunfiles = true;
   version = "1.00";
 };
@@ -3526,6 +3720,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.1";
 };
+"bithesis" = {
+  revision = 57388;
+  stripPrefix = 0;
+  sha512.run = "71f653b8fc691e24943605f2ab3bc9ce86c399302283382f34be8364ad4ffb39edc64a7e17e1b3ef81d34c3977290032739d4f38702397c70679693c22cae577";
+  sha512.doc = "4c39f70287765a61ec3819223bf61aed3c3035b646c9a00df456160307dc5be962bbbff64383c79baa903cabe566405639672d669fc505efe6883a64638f8b66";
+  sha512.source = "681c9cda9aa111f809c33fccffd567c846fd13afddd5a09bb81d69390adc0ff6d1870b68f4a141e5ebbd7d83846423a0c1d21f43350b0c55cde1973fd2a9437c";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
 "bitpattern" = {
   revision = 39073;
   stripPrefix = 0;
@@ -3545,10 +3748,10 @@ tl: { # no indentation
   version = "1.3";
 };
 "bitter" = {
-  revision = 51086;
+  revision = 56026;
   stripPrefix = 0;
-  sha512.run = "edb101df2026b97585f8f5ca712a4bf41f5a2a15122a0e51448fcf1bdfe532bd7f70315644935a942bacdd431db4ff48ebc8b119cbf5d758909560eb2c942633";
-  sha512.doc = "926e4a3e7e19ed8571e23afc779be014c3b451d9696ef8d552d6c7f9072c9ccac2eb3ebd68adbb247d7238b0e4786594f85aaecd65b91ddf883e81f20222f29c";
+  sha512.run = "e624523e0e46340a1fd4ecb3db0487bac906169dc811886d26783b453a477605618cf211584c5aa44887f39d5d97ca567afee9f5f8fe6443284467f136d25588";
+  sha512.doc = "d4fc5b7c62dc834cfab6771010abf0e38000ec1a07447237288c9fa1747643dcff158d02707746d2965226049e5decc6af64a66ab8a92354ffa6e8df2e85800f";
   hasRunfiles = true;
 };
 "bizcard" = {
@@ -3626,13 +3829,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "blox" = {
-  revision = 35014;
+  revision = 57949;
   stripPrefix = 0;
-  sha512.run = "66a326bc8bf228db3bb7ee061958f0daa7ff8645a7ed89748d60c5193b63b494a94248bd3a9c4734f810b9cbb76cfcedc88201728dec86f1e4d2d33101f741cc";
-  sha512.doc = "5a78aeb59f517d74def3dbb0353545e1efca8bc7627e4c095743a6c2bbe4f9ddc78a0e293f9689089f1f253150404706622745c7a823de9e6b316f2950d98c02";
-  sha512.source = "68dfe55be37e38390310f95f303add7883d416f64a0827f75809153b51764533609ee69278a57c7555b34d9413df884b5a29c65a2f3db291b7382c8fe5ded09e";
+  sha512.run = "4f874416f3115f9abc5514d805952d576d3ee597475ad27523990820d485a3601e43e503a23d948a875db343ce4817eb7fedae6aef48a78a38a1656478190b74";
+  sha512.doc = "a9b8c964c8a43d9d6b0c4b5555c2c555246d04ad0c0b1209ddf953958f52af8e2ce3118f573d12c0bf727a2545a326bd284e61a27afd417cb672480e1025a5ac";
+  sha512.source = "7c8ab912484f90d5aa8f406e2d3c6176eb8908457cb184260c600fd72fb91c5ecd179ec4d80c55b6eddd7607c7fc36e3ec51af5fff31e9352b17360c470e8405";
   hasRunfiles = true;
-  version = "2.5";
+  version = "2.51";
 };
 "bnumexpr" = {
   revision = 49643;
@@ -3652,10 +3855,10 @@ tl: { # no indentation
   version = "1.4";
 };
 "bohr" = {
-  revision = 37657;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "cb85d1a70ea2ba3bca7a21996319df8c29f1c28b5a62d08f0f145f5c157d4eda65b66f8fa5b833c40b1a4bb7c91d6f42eecb8d97a3c3d906207558110eee1880";
-  sha512.doc = "5e3dffb0e2d1ac0a5aa3021ade89416e330f7b71600bb1a524920eafbda148bda2f55d5d355efbced93528cad1c918fedbf50f43089f4948d0211e0e13386591";
+  sha512.run = "0f362638797d3adb338afa02589587406af7ca58487e6b61264fa60b539573d4198878a474da00e7a50bebd5dbe28f0dfc373c538a9bfbc11e84566ef586a5a3";
+  sha512.doc = "5a802de7f7a8871a7095a54a1b48ce80d1d1e3134c70c7d93944e88aae44a8885ce28d65069ff44307c8395a666df386b03fd1f9c72b526a8a7a466ff5d438d2";
   hasRunfiles = true;
   version = "1.0";
 };
@@ -3709,13 +3912,13 @@ tl: { # no indentation
   version = "1.0.1";
 };
 "bookcover" = {
-  revision = 46410;
+  revision = 57326;
   stripPrefix = 0;
-  sha512.run = "1a96e15ab73c11f36b58dfbc0109529fb9bbe322d4c589222e122f774dbcff5337e88a5350a3fac05652aaf0010cf97ea1842693102acf00e9a22db7b6bf77f4";
-  sha512.doc = "1f017e0071060f82e5f530d3726d1d91c5fd742c6a29613a2009756d96a2afcbda1e647cc588c350e90cd65be67207c811ef6466cd863c1b80b39f6afcbbd7e1";
-  sha512.source = "e018f3a388f3c5d0a4ff9f35a952ec96e7af45b2469122d6dc225ae6768704ae9884933200b8a7cb62c1e182602ec697daca530cc966d764ed2d7fe807b09328";
+  sha512.run = "1ea230af804c794f26919542d5246d16cb7fe1060f69d7c4f99df327895b528c3565f9450c5a8ded68ee1833a08f6c55c92bb5dd92855d4869b0af0ac5ea0684";
+  sha512.doc = "fcd7bf97646458420e3d1ce0faa6d38f7a2d03a0722ede25fda763df506a27857631db95b7085f22f8d5de44551d1a7fdb54b9d28d9e4532587d33f2150c25f8";
+  sha512.source = "982ad86158e5dbd7c00e323b77f5e685bb4737615b11b35b291eaf10995d4754701a1c1c0d876ee05d8834367b153d5587546fecd939eaf1764b4b2833f2cbdf";
   hasRunfiles = true;
-  version = "2.3";
+  version = "3.3";
 };
 "bookdb" = {
   revision = 37536;
@@ -3757,13 +3960,22 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "bookmark" = {
-  revision = 53026;
+  revision = 56885;
   stripPrefix = 0;
-  sha512.run = "29f24d431958caf824b8a3af098f9b8712315ac98ed7c1b4969b1a650cb8a9732341ea3af42c154e28aff35fa6a0abe8b3cfd24772662027912f355f3f5cd16e";
-  sha512.doc = "39ff86ed5dace26339bf93b83e9d41a8d89cf17ba6abbf07be9f9ec72232dd27e88e88291d54c09b2bc1ff8b88bcc40a04c75767ba2f9b35a192dfbb8b6b9100";
-  sha512.source = "411587deb4d6e436928dfe318166735444c178c777b2124e2479b993e4b00240060569bb95f56ff12d421e73ec191a203186318057b649bb3a48ca5cfd7ebbd5";
+  sha512.run = "56d73af9961348a8436beb957b65cd9cb0bf62c9031fa71e5f247a367ecfbbb15763214710c66e057d2806a0dc0ce09b05a163d74a7687c8f0dc340ebdbd2849";
+  sha512.doc = "44491b3165eb356327345f6f7c5b690db6435369e1c58571146982285ef849425935ad03ef1c9bb0e306af740bb6b886b21226093fd083e838da29d09bb005bc";
+  sha512.source = "9fb4abf83e752b4c1301050feaa4d648d67fedbb6ddd9aa1bc253dd9eca76b91ce02c14fed17364d768d170e8b7ec4e991c23c582d121a4e72e4fe62a02f0442";
   hasRunfiles = true;
-  version = "1.28";
+  version = "1.29";
+};
+"bookshelf" = {
+  revision = 55475;
+  stripPrefix = 0;
+  sha512.run = "e6ab2186784aa9905053d15311b18def1c669a86db4a98033761c2f41fae97199baec02c41c32cc6ef4ed9ddb6ff5413f69a7ad1c9cf5f0c4c91d45297eb1af5";
+  sha512.doc = "38e04eb978152cb97a15f1b6120ba9f062224ed4feada0347042b420d4baa9c66e453be8d4abf4095ba3403d11281153dc7e2494d34864a2ad2e1ac10a1b4b1c";
+  sha512.source = "53076f7ea7a15ade58fc6ff23643515631f46368d67f9b55d67212ceface35834f10724fc7fa8dfd75d7f852bef9a6570d3bc5600805c79f7e24006e663e1528";
+  hasRunfiles = true;
+  version = "0.5";
 };
 "booktabs" = {
   revision = 53402;
@@ -3798,10 +4010,10 @@ tl: { # no indentation
   version = "3.14";
 };
 "boondox" = {
-  revision = 43344;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "348b48abd7a8b95f37d211612ccc1e4931c0a768af82b695c263b7e8931eded562049ae5a1198361363b08cc269cfb8eafae93c074fe1ada7e9881dfc88d7a41";
-  sha512.doc = "24ee6699a84da5931e5223f27bf74518544ebe1a11b303bbcb27c4afc203267159fd4b6d8d9e5828e92c96abd8fa3bb395528868bba0cc26db93fa6748643eca";
+  sha512.run = "0e1cbb6ec227a2cd17852e71f16b4972de18a076fdd4c4416ffef1416f3332fd351036fead4d82a69b5aecdf392bc7e1af85ca5bb1e44c153d25cc86ccfc631c";
+  sha512.doc = "72e77b36b79bdad663db8c707daaca8d324fd3f50edc8cb7780a641f5d0217d3fe4c2b758c1775de0ce5fea3d44e9ea08e745df51485b4d1e3de11e2a98c74f0";
   hasRunfiles = true;
   version = "1.02d";
 };
@@ -3830,21 +4042,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "boxedminipage" = {
-  revision = 17087;
+  revision = 54827;
   stripPrefix = 0;
-  sha512.run = "374033f9b8b88c55db6de9247d065f7841d49c8b7d42386694752e78b4bb2f4a311e42d5ca3c1e0dd5e694fddb0c18bf9ae6ccb39dc80bf075086e18fe39bf59";
-  sha512.doc = "6fe8b0c04117d6b70972ca973e9a71cb33f2ea3f2789460aecb1f0702b896a3cf1d2e6d31533a13819caf1636c5e33ca40f60156992770e243be509dff765644";
+  sha512.run = "697cc00b10468f515b5ebae838d623eec58085269c98897a5c2c4ea932ec52ae819110612feb84b6951ff391bff9309655abf6a41e13da156e5ecc52c015431b";
+  sha512.doc = "54209e9e5fb8da8db65901c729b78aa3c9b536c3bca4d40437848287d8a07d955a84ea0f13d93e7e702c47c6bf8bece3b6d3f3026d5f78568205746c9009b968";
+  sha512.source = "718499cb248fb8a98a9650a78ae377f9aaed9318b91c4417c7690201504366e073e80615106156087686273f9f86adb58f854cc758c2329ad99103f788ba0164";
   hasRunfiles = true;
-  version = "2";
-};
-"boxedminipage2e" = {
-  revision = 36477;
-  stripPrefix = 0;
-  sha512.run = "418fbe838e907f3f545522922cf20548abcde20320dc63396434f7b68f578abaffa9f7b76a18373318ce5ed7cef699c64ad8e10e01cedf0b568e65f33ab609b9";
-  sha512.doc = "1366f37d45e3df28d3b370b3a6d9618aad06dc68127d1c22cccb0a64d3f82195d5ca93adae86158a830cca26e7f3da051bd36ab1f80cd4bf3609676c0b790dd8";
-  sha512.source = "2bf7a086348da5cc606d5b5fa0b4b0c4c5f17e77aecb54fd94bd306d43ebddef8af5e143246a8695f18a447271508576c4a4bb051d4ad8b9e0cdb08f7212431c";
-  hasRunfiles = true;
-  version = "1.0";
+  version = "1.1";
 };
 "boxhandler" = {
   revision = 28031;
@@ -3888,11 +4092,11 @@ tl: { # no indentation
   version = "1.0";
 };
 "braids" = {
-  revision = 51048;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "bf0c0ff2b6e81b0dbbbb317a1be711e8dc9812214740048a0dea40d8d3045c3fbb996fe1369783ed906571587a5fd241e6a7ce5023c3278ee1bdda19a7411787";
-  sha512.doc = "2a96dfb2c18a89d34e4116e1fa81f48532605b625b227fb24f7a949a9e3707f1ffc02f4a20b254e963801a8f97d7f093db7b568adc3b8f4a1fce4bbb7ffb51b5";
-  sha512.source = "0a0760d9d88ba7c96d2691b0e180ed09ea9932f8170c4c112eef5eb58e112bd69e1d2362bd5ba46b852eb0d7678bf9049c9ae8e69e0b47772f8edfd2c23c5285";
+  sha512.run = "e04d1b5c12c1d07b94b8aa2e70b302d05571b8bc8b8e7ff9839501b4d89d8c059552e830be52e1c31c4a949a7976e046934dd64d5d16adf944da67562371c884";
+  sha512.doc = "1f23bc681de14c760f21b49e0c5d8502cfefc23f15803d4c2b926d1367b407a57a0b316cd8c1e9377c4ccaed969777c1515fa5f5edd0135cec55b7bd03b8dbce";
+  sha512.source = "0a440ca071b54b0375cd3ff185c48da83f7b42e26f2210e04bdad9cf3103c62b2a416e073596180e0d3c7b1054836526f484dbea653ecd961c4aac3d1929602b";
   hasRunfiles = true;
   version = "2.0";
 };
@@ -3911,13 +4115,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "brandeis-dissertation" = {
-  revision = 53735;
+  revision = 54758;
   stripPrefix = 0;
-  sha512.run = "5315b8ef67866fe9b41e4e51d3f627a1a5c63411c786a8856c980bffddc24300539aad065dc936628fcc8ccb1df75e6709dfa3d655698f19f0b6ad9a2ecba516";
-  sha512.doc = "10f38445d595e907888bf7b07adf50c956c35af0571dd883f5e2f6f66c0b7ab196a91356c87a4c605067ed0fc851a305fbe4e53773fa4b83549f566c5f4a383c";
-  sha512.source = "a94ba2f6a394431354fa83eed83a59218c4e150685971cdefe3aa6dab06ec188903157d30ba4b71359377dbfd267fd8f4673bc3e750584402e762ad8535bc6d5";
+  sha512.run = "26dde7d29bdc60ae3b4c70b14b6b6c35b0319422cdcbda1ed1f4beec7a3056e145985e7a1b3aa4870b8fcc1e6d75da2e5d879b9a5c26ab85de59710d322647ff";
+  sha512.doc = "49b84e3fc0264f2a74704dbfa90c8c6bea44f436afc88387ff5c7cbf01d5feb207b1ba77e661f6db974e28cc41e3d8054524eed35f948aac3af4dbd24cdffc14";
+  sha512.source = "18cf0e74d51021dda950b2fa0c95807550aa69b1de57f5989b88ed1236c433483291dcb7158beccad9fa72903708212ea50c606d187199ccce589010b02915e3";
   hasRunfiles = true;
-  version = "3.0";
+  version = "3.11";
 };
 "brandeis-problemset" = {
   revision = 50991;
@@ -3928,13 +4132,13 @@ tl: { # no indentation
   version = "0.5.5";
 };
 "brandeis-thesis" = {
-  revision = 53736;
+  revision = 54758;
   stripPrefix = 0;
-  sha512.run = "d769296db0ae91931bca16a358f61924dc1cdcbd5cef42c0c07bfedd8ebb4b700882b2a3b0bbedba2683fd1ad51e9a54597b07c7c6017c22764988476944e66e";
-  sha512.doc = "fb23797c136648c16d0e282308c044e64d91a4ea26d7ac835f4d7ab299a49dcdbc10b1a8922cb655284f3670b17b324c57c9560474b02c27f382f436778063ab";
-  sha512.source = "cdf7f50b75e71d4c6bafa6af9736643d22facb508937b46866af6c1143872f9645f9ea7320921769997a2308a07b8e7513c66dfa3eb134549165261b1857f5be";
+  sha512.run = "8dc788bdd5d3b0e16b525f217de177e711abfb5c558382b12e4328fb690e2a16cf1d9fe403b40c392b9b745d605dce30e1c297d5f694cd977b992f585e50e6cc";
+  sha512.doc = "a56e02eaadb1bfe1315d4813fcbab0dc73202de0126d8fc64ee947770ac1866857194ad842fff7a47dfff4650c6f6aed8ab711eed6a47b0b6e8e93b421a8fe1f";
+  sha512.source = "7586d766af63eb1797cb35b0fbcf87ad78065e4564c138eb2159c475ce7e7dabe09a0d1140fe80c0fabed5a00713d23869f3071be8b834c1a503463e215a3827";
   hasRunfiles = true;
-  version = "1.0";
+  version = "3.1";
 };
 "breakcites" = {
   revision = 21014;
@@ -3961,13 +4165,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "breqn" = {
-  revision = 53833;
+  revision = 56422;
   stripPrefix = 0;
-  sha512.run = "0f939606cb3e6a41a9fd51f994671c5ca774b6982fc7b8e19275cb33cc6331b56244156017d9cc091f852c5bc0b7979434a8376c1a9900b59ec573e63036e065";
-  sha512.doc = "8a70f3eef2414778ff4124ada2b7aa442f21e35e9b4dd893f5d64196d97dfe2ac8ecc4bf7ec76dc0c432c81deadb23d0ccd9bcd358e83b2c281909d16a75fe91";
-  sha512.source = "7c73ac6585defc2a6a43ff562f01ac3ecf908ce2be02bd234cee9e128c3e171c8d168c7ba2d6f4b42ade5e6c34f3420ed28c44a5e4de9e16cd184ecd05654132";
+  sha512.run = "ea1df2ebb14d755225368fafac24e2068b317b56c4a42fb10011f1fb9f233a7d40bd83b0063271ac8efcac67725f32e12e0ef63467cb045bd460abe5f84638f7";
+  sha512.doc = "9e5903493b727972dbc5b18b1be6179ae72d23e59eb047c41562461e5800d5c66d83eb017f410b73f42fd12c219d09dfc95e4cd3375f584820ad0e600cdafc91";
+  sha512.source = "5640578e4a42535331094955073d42db502299d25e6f69b4a9caa31b5dd858e2860372bfd123614243b5d1d370eda791c178cb0b6d8c036655febc7c1ce0fbcb";
   hasRunfiles = true;
-  version = "0.98i";
+  version = "0.98k";
 };
 "bropd" = {
   revision = 35383;
@@ -3985,6 +4189,15 @@ tl: { # no indentation
   sha512.doc = "41ad7b1afc7cb0f4bfdf0bcff4c1d85f3d9603c3d48ccb62f94a6fa2258cf3f60f03ee1b4b5756d85a77ba4ff9afddbccaba1c4bd5b69d85ce4fed206aa16b1c";
   hasRunfiles = true;
 };
+"bubblesort" = {
+  revision = 56070;
+  stripPrefix = 0;
+  sha512.run = "8d089fe6eeb4ae2e8c77de1130b0d51bc50c4b89ff4d1d26065fa93d740de16644856db55c38efa9e199c2ccdfd6906ccdccdb9676f2313f92911c5d6e06246a";
+  sha512.doc = "a9cf0d74f8a713d381d1a06f0a9f658c9074a4aa9027113e47f29ba926f835878e2aa7eed9dedd948e9c5f3b50345f82ef9b4f35ac7fdd08ba041e3a00ac20b2";
+  sha512.source = "9cbc0f682dcc18881f4aceca601a2dcf4996e597f4341d3459af336bdae72938b9aa4402fd88f2f7a4de960909bd25bdfa3a01296a8b2e3283809fd63a47eab7";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "bullcntr" = {
   revision = 15878;
   stripPrefix = 0;
@@ -3995,9 +4208,9 @@ tl: { # no indentation
   version = "0.04";
 };
 "bundledoc" = {
-  revision = 52059;
-  sha512.run = "5b3b4e343e8ce0103a7f0cc736331995fde330b473c21d97df761bffab8e0b82f00238187801978611e32b2190b0a0d51c87c4249135228c8bd53ae8fcb6bfc8";
-  sha512.doc = "acd848c58261520c2ea9038d0229b75e7c12e72c087ea1aacc3bd0dc4f8f99d50cf243d282abe44d72c99a75618cf284de400e342a9128f9f1ff87b54ebcdd9a";
+  revision = 55064;
+  sha512.run = "07aa1f9dd3cf8bb16fad2a39783a5bd05168e0956840853b6f9a16de753726b0393b8863c6cad985b8bcf7431570137d6fac82588524efc5d7c0032e2dd555c8";
+  sha512.doc = "bbd78c948c90f6b4470c792c9e0b99fb5bd8ae73b7eb78343739909c13ed0e0d763dd0b6a4b8d05a77280054afe15f2979c985121916fb8a34dff231b810106b";
   hasRunfiles = true;
   version = "3.4";
 };
@@ -4010,18 +4223,18 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "businesscard-qrcode" = {
-  revision = 48417;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "c0cccd1959a358d06db838ab035dfe2c4c2b960ffbea5241057871e4131ab06bdefd369fbc0179e74777fd83720692eb190322c797bc8da2ea84f1943684faf7";
-  sha512.doc = "bc2db833044104ec82b3c8913067e7687ab18944e7b12ac003391a207fe287b92426de1fce32088eb4293eb2a1bf955a21a82a42ed673938113d9d8a01ec9d10";
+  sha512.run = "66e98af04011a9a17104dac23845ee6bbc5f4fe3aeec37899f82448a85493c5b722f5de59139f2a29fc84390cf5480af3a491ea2d1270edeb16ada734e2cb57d";
+  sha512.doc = "d488e313d538d9faa956b4279974faede62ca231ce744d010b11d8a98a9b596d225a3804ba0aa72a13a6749a6207321b9937617d524e5803f490f9bb8933bb8a";
   hasRunfiles = true;
   version = "1.2";
 };
 "bussproofs" = {
-  revision = 27488;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "a23aa5580e6c3d691c7b14a58b20af1e135681000c50a84be01040df7e1a844b8abeebe11a9dc456cee37e9e34ec020139c9f8de4de51833a88f90e495a65fcc";
-  sha512.doc = "b9af525a6a6204c07095864d257c65feda61214c557b0801c9a0c4357578755e1d01e278fe875c0b290f250e3adb03d260a5816a4ccd9f6f51ba67cd8af8269e";
+  sha512.run = "042e01990554b7ffcbd70c9a281d87ee98d9b25d7071f24d114e097e536ae1d7fb565854399eeee547ad2cf97bdd6d4fd0755169ba7548f01ed0d736e031a383";
+  sha512.doc = "b3fec7f142210ee5051b3b3a45ef26724d95c538978c4904c9723113adcd2164e6385a9949473a8b9d29109b016c24f25a4088fe3728d675fd0023a043ca6262";
   hasRunfiles = true;
   version = "1.1";
 };
@@ -4035,26 +4248,26 @@ tl: { # no indentation
   version = "0.4";
 };
 "bxbase" = {
-  revision = 44481;
+  revision = 56528;
   stripPrefix = 0;
-  sha512.run = "18b281f5147a179d2908944dc35e5b9547bb094b15adb559f8154c432710e531ada4c7ab6f755cb631ab882d005e55dd5aecf8602b61fa07bc54fa91506aac89";
-  sha512.doc = "da2a4dbce775b37d143b112159e132568b3c48bfa56599ab5f04db0b0b51d1b901775036b76cb4bc049f8193117a01a4d2b6054744a49a8d57f986a2193fc6d8";
+  sha512.run = "279018d86ea2c933ae8106678b1fc3164439de59e74ba2244104951b352346e51d6a5a78591e605e25d2dc5dbfa15b6481d5b2f637517dd4e19a53da3d0fc179";
+  sha512.doc = "aa76f5acfe7367c48219eee28635bddc4655fde3e91a7eae5ff8fd03baf0e2732c0f3b587b7518f660cf58fd124a8c021ea495b57520347c4bacbd5246cc2a99";
   hasRunfiles = true;
-  version = "1.1";
+  version = "1.2";
 };
 "bxcalc" = {
-  revision = 52947;
+  revision = 56431;
   stripPrefix = 0;
-  sha512.run = "68947c8aa57d3f0a449c2da45c081cede0dbe28570f28c3091939e43b7d6f5fd601e5eca02556f46497d2dc82d829dc783288ed665b7efeffe5e946b84b3f713";
-  sha512.doc = "caa11080d43cc6f0d8af7f9f13cac63e26d8423cf97d6a77d76467bc73644efec190fd5c1a6d93f3ceccca2606d50ac937b4d04bdf60f080683c8314048adda8";
+  sha512.run = "580fba2af6adcaf2b2f137cd34455b3dc896f2e26aabc2352fb23c12fe1a134340c2505d38dae51e79c72408fb4023213971ddc0ad322f16bafa29a9bc1dc4bc";
+  sha512.doc = "1e2e8eda856a15be3e9f3cdc441d3b1972b97125d0a370061f0919ed0c4aa267d5fbacddd453d9b99bf5b759b801c71c3e988f9666540d960d9a27e7c54ea904";
   hasRunfiles = true;
-  version = "1.0b";
+  version = "1.1";
 };
 "bxcjkjatype" = {
-  revision = 42292;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "ea75072ca87925cbac9c69335fd77b509396516b11cd74b4f29976566613a3f0fe091b8d77f00803932c55f87fd1af964243a02271ef3ba64f08da5a065fb7f3";
-  sha512.doc = "4cf0962455982064956fed4080ccb8a4e4e386bdde5952880e05246bb655f064c22b4c1e2af32d3a8850304c1dd46c817ef16f0cb8a0e8cb764fcf788bb4ce6a";
+  sha512.run = "f720106c08ffc3b8f9a2c9279325364d5ae91948d3c61b83423d41a55249cdb205bf330c8f08ce6877a7713e82a67a29f1a71e9ff07f9c1225926a61a858fb5a";
+  sha512.doc = "cecf43857662a4b1126edbacc017a8d06b366ad8c785db520d6b18a293cdf786b8d7bb7d3981355acf9a4d2759c2a58af25a61a9a06d20b431ba3eb50117b560";
   hasRunfiles = true;
   version = "0.3";
 };
@@ -4099,12 +4312,12 @@ tl: { # no indentation
   version = "0.3.0";
 };
 "bxjaholiday" = {
-  revision = 49924;
+  revision = 57025;
   stripPrefix = 0;
-  sha512.run = "d028523087abe4587c8eaf877eb2dd0f4c12fc12055c29bc1bbf615e855155a77266df8cdf50bb458600bab0264836346a6d98fc183aafc92b546cfc7bcc1bdf";
-  sha512.doc = "398bc4686c7c3b121260cbaf379ca66f7f64911b18d771c04507287d3cce834256662dd8f72f1f55601648cc364703f88a0713d9dab19c53cf19c252e2919fd1";
+  sha512.run = "e062446514cdcf8e817f06a33cd02a29cd1985dff450a89baaf2e230fd9dbe20e92d3a34b661ec12c764c5a6230b1fede49034847fcac2d2db2377eb7d4450cb";
+  sha512.doc = "3b44cf93b4afbbf97263b091509a5486bcbc6fc7091bc8a583be73f35487962af93f071547a78895231fb576054e440271abea20a7b07d111c197382b52ee746";
   hasRunfiles = true;
-  version = "1.0.0";
+  version = "1.1.0";
 };
 "bxjalipsum" = {
   revision = 43369;
@@ -4131,13 +4344,13 @@ tl: { # no indentation
   version = "0.2";
 };
 "bxjscls" = {
-  revision = 53812;
+  revision = 57625;
   stripPrefix = 0;
-  sha512.run = "4b100e52663c714296d18b487ad5c21fcedfb154bb517ddf399646fc27795da77cf156de18e1119bbe3563dda13cf504e9ef7132bfe427ec48cf4d8a21a9c1bf";
-  sha512.doc = "5f7ddec0451a01d2994d532088754b7135e8dee2d915f94b268e0c07dbdffda4a294c8d9012d0b4a524049fd82b3d3029180ab16d33b68d34700beeb9e0ff973";
-  sha512.source = "efb5fa10b47a48746dea5453979ed80a4ab8ff723d3a4c30ce8b27746b83b6d05f1de6e80b48d6a3ae925d5e1e321d659aed36aa5b0d8f523be6530403a83bc9";
+  sha512.run = "589b5b44ad6a4743a039b427d8caabae51c070591f808218f432a21df4c442df9878fd5fa882d6e5090ed808c0f689ecb8d9ee11e131415c7dd69ef992e6d898";
+  sha512.doc = "e999fa0ccac37f7f5793e5f0ebf096615ef9c92cb1311e885edfced06ddd5c21ef3220bc5ac760e99dc4b49dd8d4d1d4b612d4f686433ce15e73a7222b8605d0";
+  sha512.source = "27a1df36d928544d84ac322104c723cddaae3eada19d7b205150463c6c6e2c4da33d87c34547b02fc06b01eae4b67f3356c31132bbcb1538ec8b4cbd495855c3";
   hasRunfiles = true;
-  version = "1.9k";
+  version = "2.5";
 };
 "bxnewfont" = {
   revision = 44173;
@@ -4156,20 +4369,20 @@ tl: { # no indentation
   version = "0.3";
 };
 "bxpapersize" = {
-  revision = 52304;
+  revision = 56491;
   stripPrefix = 0;
-  sha512.run = "09b679f14ae4c851b0f4df35ca44653960ba0ca6de03b923602721c25a68e17c6ac3818bc91e189606fe64e3d0585ebf5e5ec5ace60f52435ff79cf6c7a8a12b";
-  sha512.doc = "519c4ab5c8eff946e075a84834209adfad9d1262ddcb30fe51b66bdfab5a15d7abe50549073f8d0aba1b661cc262c11f179a0c71edf1e3eceddef020e3fe107f";
+  sha512.run = "0d889b2f3e3c3e27175148a533ddf86f99704ce8ca380ce182a5361284678a4eeb72862b9b5309a63a31cf3aa2d4afc119d71363bcc9914bd493148c3c7ad6f4";
+  sha512.doc = "a62a581dc66c080e8b347c0708b46ae0432ec629748512c42ea3ea931d6a78b9dc25084922710d6f6fecb373ebfce5391ee7e54665f72147827069f906d9082b";
   hasRunfiles = true;
-  version = "0.4";
+  version = "0.5";
 };
 "bxpdfver" = {
-  revision = 43201;
+  revision = 57755;
   stripPrefix = 0;
-  sha512.run = "06795ad6cf70da674064e9712584761e9ed7fc295585d66439c5501532fb5ed3da03d05c8b22b6022d3491079b7ae40af1edae12dd3c959c2adc0f05732be723";
-  sha512.doc = "326cf6f244660a7d94a4c847ee9c7a43cf3d2fc199ae94035a76464691b48355432e71fff82f9c6bd3642e10b2011ba4d8d0f318304818ad9a8c27c579d3ca37";
+  sha512.run = "68dec5bb26691a39b3aef90891fa3a7fa8e716aaacaedf32aef9e3f1a99f30e95caaef0cc1bde104d69da122b6832ea38a6fedd76780e0ccde2cb70c2a43884d";
+  sha512.doc = "e97c28b1eac65210d427f87b9fafebce63b676d431064c92b221e1ca2882c9c9caedaf6f75bae6b6194bf2a7ae353cfab6292240f3466dffa1ccd72f9516d453";
   hasRunfiles = true;
-  version = "0.4";
+  version = "0.5a";
 };
 "bxtexlogo" = {
   revision = 47230;
@@ -4188,13 +4401,13 @@ tl: { # no indentation
   version = "0.6";
 };
 "bytefield" = {
-  revision = 45339;
+  revision = 56821;
   stripPrefix = 0;
-  sha512.run = "ae5c3c97ded2cc83be2dad6d67132b75eb55b22ffd8d4c0bd49dc842344a310c4ac80571165e43d2b446148dee1ae3927fc2193a92e85e75ad457b4732bca7ed";
-  sha512.doc = "6657581a9b97383c2dc3f8972ff77461a73ea33ecc0ba4dacbf0188e1db0dbe21e2d324dbb8fac7f05fafa585d3672d6de7d7db267a8e9f5e623838d0c46df5d";
-  sha512.source = "1fab74d218ade9454924cff4345c55d6dde25d4350cd238834677d24be89ddc58ce7a610e089158281a472b102db3809979f25a57c0c31ce50dbfcef398a662a";
+  sha512.run = "a36c81313224ac79fdd7d51f954aef437f011314061473455f0cc2be0cc52659c83400140a3b924a75c76d825b14ce3135e324438d9bf8830cf40a1c4d536a32";
+  sha512.doc = "1aa94c8da8ca322cac0360205fc2724a9108aa0ebd3332fd0cd749123d7a1fde7467006595240e65937e0a6deb78a810efa677ce27b51ef62f5f15ebd620e593";
+  sha512.source = "be5993e9addb0f22a0e618b934ba77e4169f5dac3f07ca8e3986ddd4a001c7483b52fb5b3f1575c5b07339c9227891dc7794653c9be5fe531c7375dbee43ca30";
   hasRunfiles = true;
-  version = "2.4";
+  version = "2.6";
 };
 "c-pascal" = {
   revision = 18337;
@@ -4205,18 +4418,18 @@ tl: { # no indentation
   version = "1.2";
 };
 "c90" = {
-  revision = 45666;
+  revision = 54074;
   stripPrefix = 0;
-  sha512.run = "f7e7aeb931bd215d38b41e1ded6d8fd046f90e54946a1bd1d4dc04b7ede4f6c20a3501d57397601f8a423fed9518672fffa9d45f17515f56b05217ebd59efe81";
-  sha512.doc = "dbf3f9d28bfad1d52dae43f9e9804d082525ea6deef94ba4ebbef6d06b06ad6010f5944c52ce992b1ba4cb5f3877a8eb3b694f106f0eaaef48ef350f62c76e8e";
-  sha512.source = "fac23323734b4cf9357067cf6d5304d36e669798494636d6b3283a074cbf3ec74168138f6d9bac3d6cb7e3ce3c7d5e35f7d98672865fa9dc87ea59d4227e337e";
+  sha512.run = "9ad45614fa33b2272b0975cd8a044342d7d59d3dcef0b051f7aa49b5821764f838d1ed3f2b69e577a3c5cad1c471f412d4a312ad884ed4f9f29fe0a0782eeb02";
+  sha512.doc = "8b92590067d8c36b9d91a035c1eb88510327bade43f2458b12c64a74d6f0d74f23a33b61fe9ac8949d9a05137976a22e8a513ed3c6d40bb6138ccf3975ab0b8d";
+  sha512.source = "bd250ed720d900551167efe6f17844e2ef89005e9f8014d46b50e6abde74fdf84f0960ae452befdf018d6b39f3efb58dbe600b73261c935a4c35f0228a3d0b46";
   hasRunfiles = true;
 };
 "cabin" = {
-  revision = 52475;
+  revision = 55907;
   stripPrefix = 0;
-  sha512.run = "b5fac4c3439798f21dc67f7ccbdf51a48d6946438dbd5e15e4432faacdd5231e158615c2cfe1617347473109a783dd49bfbd613613431e8e2951ca487482b7f4";
-  sha512.doc = "f76c3faf1bd7084f7697a219d8b12751a820f6d0cfc60c2390a2d2d8c07dce768381dd4e8b018614a73213ad5f07950a069d9646e96418d61ab10e8baee86949";
+  sha512.run = "a70afbed9ec2a5be99c0a22713d27b6f4a541452f9a7c3520e71cdaa6fe0f06851ef6921404ab511fd73414d8621848440ca2a9cdae4ae9d80de56ae906d4f53";
+  sha512.doc = "cb6dd0b813c69536dc2bc5e0c2bdcf2c52d8ed31d144f359c42b3c00e5383969e6eaf1b8d6a77e19a0b4be1789c1ac7da9332099efa877524f27c8633d0c096d";
   hasRunfiles = true;
 };
 "cachepic" = {
@@ -4307,12 +4520,12 @@ tl: { # no indentation
   version = "2.4.2";
 };
 "calxxxx-yyyy" = {
-  revision = 53290;
+  revision = 57282;
   stripPrefix = 0;
-  sha512.run = "99c3eaa37d1502328352e67091390ea47e3bf1d3fbdf776bb885e06bc2613a1e3056db4344b2a6bf968ec146bc3e3d44c1edae6a56a37eb1a8e5225ad6f62a94";
-  sha512.doc = "0fd575f4c4535bcf705acd8e3e4b091ccb1d3d1edcb8e6797bb2b5f891c95c8e7de439015d565d6be0098441abf175d96ab20351a5669237ebd846e37eaa65d4";
+  sha512.run = "2e9355442fdf8c4389fc09c8966c5e6b72cfe2df1b3209ec698db686579bef9ab41c17a36bd9714b3e917a8bcbc8ae568ca34bc7112a5a39d00a5b2c5340ac65";
+  sha512.doc = "849652e8def77d6f9f0d16f29753df5e5b9095bcfed9be8105294df7ddc26644d1784a27a8b203d9e6c295c0f1e7f58d36f17bf98752ec9ee26ac3ac5a2f361d";
   hasRunfiles = true;
-  version = "20.20a";
+  version = "20.21a";
 };
 "cancel" = {
   revision = 32508;
@@ -4323,19 +4536,19 @@ tl: { # no indentation
   version = "2.2";
 };
 "canoniclayout" = {
-  revision = 24523;
+  revision = 54758;
   stripPrefix = 0;
-  sha512.run = "19858946010eaac99d0a0b0808f31c57949b7488dea007e7a5a2d8820b0ae16518ff8aa48bfa5e067d90c8662937de7af7f325aa9a80dba382a03a66d89e46b6";
-  sha512.doc = "221b7eb51a3e5e9da2e354646cf1c09a78811ff1804805171bedc1e72e5c1ebc3a2e974f3b5ce3eb6322e17111ce2486e9c9452367e4e753be029d096ae9033d";
-  sha512.source = "27864e2f85680ac3fc8103bf14a420cd3b636124482ac2d0a382061825e70cf3674c8da8eb91fd8db5f2a7a15c173d2e16cc7f576cee28ac2a1d82417d662c8f";
+  sha512.run = "26e6e7a7b521a020e110f44db7e90b87b3489310102bd56703f453c5b83c454ae8b8b108f842928172470bdf3cfc6085898a9f1719c55bd439bb21855470f35f";
+  sha512.doc = "45c35415edc5e4033215af9568a72dcecefafda319936dd3512da58eb5c2b73e0d75d7cc4fc640b9c231807c5027a515a1ad12cf61aa4847bf6ed5143525ee24";
+  sha512.source = "d6262c36db8977185928dae4a41f6bb7f732d55f8fa8890741bdcb8cabb4c95c43eb9229d78fb66c661428717c347d260e4d09e5bdab1af8454dd6b7b1cbe3d4";
   hasRunfiles = true;
-  version = "0.4";
+  version = "0.5";
 };
 "cantarell" = {
-  revision = 51459;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "4565c3ff88cb4449fc2feab5f87de79eee7f38d0bdf61866d8fff421bc92e0382653b9956a724b1540c64ac78dbb529f34421e5dd0a3b76a2669da3a0d667c89";
-  sha512.doc = "2c696061a46a3b83951869ebb36b31da87e61d9489441d14b8f8ca2eaf4616802ac917e9e68d56d6e81fc03a534175b592d74ac42f8079340f476725f869f0b7";
+  sha512.run = "37fd0c1986f76d823be6feecdb76bdfdc8222872355d0cd66c340950ed0ad90e057acee0f90ad0e41fc77b61a682f8bd390d98c8ed559015f9a0a65014b11b2f";
+  sha512.doc = "17c118e49fb173158f7c5cfc31c1bee1063cd38bd1ba976e2629a648c795295e3796e845b735cab07de99296088d09ed9d87ed92c22af3e1dd1ec1a7a90a04d4";
   hasRunfiles = true;
   version = "3.2";
 };
@@ -4364,11 +4577,11 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "caption" = {
-  revision = 53517;
+  revision = 56771;
   stripPrefix = 0;
-  sha512.run = "5902f3a3c9706f3eb1fe973515232f5d5271c3a5c7dc23d027a30b0274da998c289887e204071538d3c58342572f5c92cff73f729436fdf0e34475fd47405da3";
-  sha512.doc = "57b89b79f2c81aed9101ef2b7ad0ba17053873ce8ec512fb10fde4ac8400bd7a7ba47fac67eded49db870b1dc4d001f46aa2e4ae994d750423c830b8f46450af";
-  sha512.source = "67730bbecc3a2644e3c7157a969908538a5f7356898a9f78f68663a499cff5b3cbdb8e2b91eb18af5e74d49ece6804e39744822765d86820d52d68b653051807";
+  sha512.run = "d0e7276e6e84cabc85d64bc397fd2e4a258e913e4f78022ae40f3c7293e7f9b3f34dd011a944223507cb1555dbf2031dc563e34a5f7064e9903964bda5a893c3";
+  sha512.doc = "50018fff476b99763a3373b9defdf9de854915af11cf37f3a00907483ac481b9a0709d23f6d3612ab754c3f079eda905c5fa3447f576dadcb65f83a5ae5a98e8";
+  sha512.source = "5f961b0fb1a11d5f28d75f58331d0b79bb87800d4a5412c57a66c5693c07225a46e49cb42f8f0653e06a74e2c7de38660f99d89f12905892f47fda5ba6820826";
   hasRunfiles = true;
 };
 "carbohydrates" = {
@@ -4380,11 +4593,11 @@ tl: { # no indentation
   version = "0.1";
 };
 "carlisle" = {
-  revision = 47876;
+  revision = 56753;
   stripPrefix = 0;
-  sha512.run = "d3e743a5e614479167ead02eabfefeffc8006e27c486fb5c57f1cb94278418f86db0431c752310bc1f7cda6dad22b1610edf4d24742391f6b743cad4ea050344";
-  sha512.doc = "8d49c9d72669bffa042defaa53b4bdacf2e107753608747162947f05ad8438b9463afd905a376e462e6491293cf0c4a202e0b76db965854c19b97641d0a7d295";
-  sha512.source = "83417675f97cd8235ad3a38f3e333596188e717573a8739e41c1041d1641e1e53d48f189f6c01a58509ea8ca1c5d755c56aeeb9842e205c9aa8a01cfc7f688e9";
+  sha512.run = "679a07121b01b5ef1ad15b5713bf2b38374d49458d754eb204c914bc02dfd4ed429e30826efd980be0bfd1cefad7607804a04e8a820980877bea68286b23961f";
+  sha512.doc = "55265a53e2ae899bb6f856626f155c96084328b7967e6c599e56d53faa5b746efda2f98b6f9b4571d7473da8c664799c259d2f052776b4da218dddc03265df2b";
+  sha512.source = "350e30ed75ab3f6b3e33d4d0c16f84cc7cf887b022175437ab11bf561698c3d06d624f02971652ff370de1c4e6454e0a3cdbb75530e08bbf141ba9ef7298b942";
   hasRunfiles = true;
 };
 "carlito" = {
@@ -4402,13 +4615,21 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "cascade" = {
-  revision = 48200;
+  revision = 55759;
   stripPrefix = 0;
-  sha512.run = "d72e9c46f4228af10abc33e96818ee488d09389d21575b40cec183c03664c63cf7dc7b9dc319b0fb775c41b5c9df8f767d06d131ada730f9b8dfb655111fd7fe";
-  sha512.doc = "d74ad316352672ad753f48e1b1c317dbdf402927d75d583d85d85367ceac69228e81b726b575e84d2746a709457e18d25817ebe7850dd17ca07515192749b713";
-  sha512.source = "53ef700bc723b28b36ffde548b030639e467fa1fd41570179b7ae9661c3d4a9911d9dc765362ce46178d06d3a67dfa1fb408e8f074141c80d32de437554a3b9f";
+  sha512.run = "2c108ed478340c3605848c67dced82eb09040632e63dc59aa00c2ff52d0a0ff9c174240adb096ffdfbce8449c4b612df4ad0da05e41bfdf0040ed4e510a0ea19";
+  sha512.doc = "f3b650bc8ffcb089b09a94bdeda3e188df26c5494cbcc515c095670e6f13be31e6d18a19b781d98fd78ea9df7144f9d5e8bed13a79da99de1f2d0329079438f6";
+  sha512.source = "3b5b9fc20b90dee62d281ba4d25953e660b52488271a812e595215f255c7947131ae33d3cbc65036242d25996bdfe40a980650cd942af2cf6029e408f0f7f915";
   hasRunfiles = true;
-  version = "1.01";
+  version = "1.1";
+};
+"cascadia-code" = {
+  revision = 57478;
+  stripPrefix = 0;
+  sha512.run = "52364786bb0be4bf001ad0563b9bbd7929f7c4b09299919623a237f631633c9ae57a185515802372251c2dca3261dab41f66420e59e9be7d2912f2c6bd30dc66";
+  sha512.doc = "48120981b674f9dbd5099255f4f430c33bae91bc50f6a2fda3f7e9625886584bfb024eddfc9ca795dedf4174f73d6546e2fbb0f85862b12e6b35bec527b6086c";
+  hasRunfiles = true;
+  version = "0.0.1";
 };
 "cascadilla" = {
   revision = 25144;
@@ -4419,11 +4640,12 @@ tl: { # no indentation
   version = "1.8.2";
 };
 "cases" = {
-  revision = 53909;
+  revision = 54682;
   stripPrefix = 0;
-  sha512.run = "81c0aa3c563cb8faf27fde5859a298b7bccf97ee4b38841f0a8b1e4e1d2130ce01007befefdb5bd28048472c2fca30b477cc9a701096a181a3c551ca01f4d95b";
-  sha512.doc = "f06f9e40be1af54a3b73a7b1c949475b6d6c9bf5e05a74a4c29c261f057220d93d08cd4cb57085eb8cf01d200d9cc18764950b88529ff2df0814c354d5546e5f";
+  sha512.run = "281f9d13741f16fa07f93bbd2628f4da34db07d5005b6c1d7994ec7713aa100f152efd066bf712417bf6dc3fafb496d0a80f65cd2127c4640ab28cca6a4ee1d5";
+  sha512.doc = "89aa9005cbdecc26e0b2489b544cf3f504e952eddd9a28dedd2a2f555d3e0c5f8378ce1ef21dd78fbc5ebac616cdb7559f2147e143f3cef12286a3e33d9b5616";
   hasRunfiles = true;
+  version = "3.2";
 };
 "casyl" = {
   revision = 15878;
@@ -4477,6 +4699,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.2.7h";
 };
+"causets" = {
+  revision = 57139;
+  stripPrefix = 0;
+  sha512.run = "3dbe4a3c2e5985dbb4a36134a3739adb97636086ad2c1d3f510e4607fb6a6d0d01cbd2d4e135835a9eb88d63128e3b9a4408bce3b910c406b47dad0d0b5c19b6";
+  sha512.doc = "77f5ec1d8c16bb6d3772a78913825a1652c5130327e7851ddd16d5a5b0da9315e09dc113c880659b03d4263558781c36e1ed9ac546fabb9df88cfd4b4a3fb84b";
+  hasRunfiles = true;
+  version = "1.1";
+};
 "cbcoptic" = {
   revision = 16666;
   stripPrefix = 0;
@@ -4486,29 +4716,29 @@ tl: { # no indentation
   version = "0.2";
 };
 "cbfonts" = {
-  revision = 31624;
+  revision = 54080;
   stripPrefix = 0;
   deps."cbfonts-fd" = tl."cbfonts-fd";
-  sha512.run = "652472d9251cc9090906627a823fbaef3015ce0a5db5d08a347f6bb496303adb65339ccc2cd55c19df489512ba06c605342ba2871f99175685259415f6d3bc0a";
-  sha512.doc = "5168d8ae6380b6d7521e99037bc2b28c13f135aac9a3cda160c103d3fdd17555e1b6ffd371e8aba968d74cf50ac1d01a7415977f8efbfd1a8841ca4ce730e66e";
+  sha512.run = "0e7cecfdfa102113f75f46f9c8bc76f578fca6c967128bb8b203af76cc64cbefd123ae87a8b04a9780f498517bd9f660d12e2dc586220f2c12cc8aa76f1aa40a";
+  sha512.doc = "a069b7ca1b46e5656a05a5e38a0f9ea5c3ab1e5301edc47d7fdd43817a8f5d641980c2e54b7731dcbcf16e12f0dff17df5a816d66f7bd2b613232788815bb8e0";
   hasRunfiles = true;
 };
 "cbfonts-fd" = {
-  revision = 44917;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "f892af7e63b4376f2d82d886516f6b25d362f8dc627435b4f353a72926f25c3867af1fb42a4083ebd16bddd05ea797d643b94f556cea37495fa0fb7786e33b3e";
-  sha512.doc = "dc2b0570e042ed2e676c55df43b9254a277d1258861cd3c4c45ef65012dc8182c0e374ddf71f3d3ec6a667b5ef99bb449c43ada155367e1ef26a6ca8c8dd058d";
-  sha512.source = "5a66545f0bdb71b951edde9debe8262a2bdd5e644da1fd3ee966cbae883ac62c6f121add0a5e9a39096081b1a810a602a45eddf5f2933c21bced260fa59f6a5e";
+  sha512.run = "af6f11a601f2ea3fd38d639beb3f836becb71aca7d282f5d0c7e020e9f73269c560ae3ac08d93706731872bd1a271c75724e1049c2dbf65e9ac0ea8f6c9b4724";
+  sha512.doc = "8fb94b444966e6e3bd63b5b3ea62f661c038767222b08df2bd288965902cf152e1af4ad4b9d69859d11b1b558f4015b2f304afb0a43c356ff663498d830e1554";
+  sha512.source = "d21d517c40e8c5058c8e610ee0a8ebaf19d97a6b284b9d16ceafb87ec401b4110a483f6ed00ac626fc5ed2e1fd97f9cce99df5cc12e73ee7b92b04c84972f280";
   hasRunfiles = true;
   version = "1.2";
 };
 "cc-pl" = {
-  revision = 15878;
+  revision = 58602;
   stripPrefix = 0;
-  sha512.run = "768977678d3948fa5f479bba6248ffaed6b176a4b3d0c90d691b02e91108b7567420ec600fac235a7d8351ed00803f760d4432015f518c1c62c93af95b0a8394";
-  sha512.doc = "cb004afd1b835f5d75389f3470e1cf46506e8db46f56f562e5376b5f1a8a9d45d59ec99d7df2d791df0462cbc760aa8a278c6a73a582afa8c4e7d8c73149febf";
+  sha512.run = "3d0bef5ca5c37f1cae98bd0555d714ed4408b6fde4ffcfa78cf2512114c9aa09b81b23bc6d76705f64dd08ea493add2027e7af997357ff5c4cc360deae11ba92";
+  sha512.doc = "f5503008430e969a604973e4481f8ab51269a2c3570f757787eb7a1a9d11b8508ec7ca1709a21b9e2299059a9c8ca20e5806093bd24166eb44e167c06e4fd0ee";
   hasRunfiles = true;
-  version = "1.02.2";
+  version = "1.02.3";
 };
 "ccaption" = {
   revision = 23443;
@@ -4520,20 +4750,20 @@ tl: { # no indentation
   version = "3.2c";
 };
 "ccfonts" = {
-  revision = 17122;
+  revision = 54686;
   stripPrefix = 0;
-  sha512.run = "0affcca65346d83ddfdd9f2d6a9bd9baf41113b396a99c76c88801b1d509f3e9d6168f0a4659a5cd440bb46fff996d5f3361ba342e11c902d0866f616e0d41c9";
-  sha512.doc = "6a08c3f13c5ece4ebd67ff1463a4c27c1b5b114fa777e916c034a66dca5c8c85bfc138394ae9c2955182f68f34a91ad57eb4834f749e7107b0a311e0eb61848e";
-  sha512.source = "2d560016ccd3e2c6593e5d06b4cbcf1ac238d3bb0b0d9632bff8f69720bc0cd1b20d2f7e3bc33f3204820abba18995467758db492b9f91fe1850f1eae55487b9";
+  sha512.run = "abac4ad2c89e2d07281de95ac76922066713c511a77d067219dee9fff64e6ed54870da0db5cf83bacca89af11b2e720e352638eee1adfd4265e63a9e887ade14";
+  sha512.doc = "a327a036c804040973462e836c6028895cbb3897047785c1e1f9152ba85393aaa0ab6c876b8878e58bc8e124656ba22e38bcc90ca75ba8d7d74fbbb66a1a4955";
+  sha512.source = "fe3f77676ac1ddad784ef83cbe96e5a70219b7f7fd5b624f7338a95655851cac79d7c28951ac4ec1a62fbb62cd087b22bf38712b0130e05a833f2d46195d62ec";
   hasRunfiles = true;
-  version = "1.1";
+  version = "1.2";
 };
 "ccicons" = {
-  revision = 45646;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "45df39a60891940e4ab24c489d7ff76971a7d378156ab4c533eb739fcc8723bc7ff6ef81322ef157b2498e24b5df97e6807796330f5852301e1e88d950f90d40";
-  sha512.doc = "3e988fa5a9c4f3a07f0557d5ef787ff9f6ee2630be5ecbcab1e892086430f39a8f8e23deaeb624c1bc4b3f2f00b708edef4b3ed645c56400c13c0f9351b5d8dc";
-  sha512.source = "c071924713a6b3e3a45a5e83a116c535ac3fed4958d9d395151c6592c854e8e493b51d2409dbdd07f2e53a6d3b51657b6578888f6dc6197584e5cee2e629610b";
+  sha512.run = "4e755538440c87c2bc1f8d57d41ce78ddaeae9a0e3c1c85aeed172c2a25e952963b26245cd1ddc3222285c883ed4574ac4228d17f1263db31cc330bdb1f345a4";
+  sha512.doc = "0e4216adcbe01d8feb95d31e2df143ad739f66c2239196f9f5c58638a87d320949256baee32703663d6116bd13b4af607dd38d16d4ccae218af55f5402308c03";
+  sha512.source = "af84fa01272028018fbcb4fa9e04971b9580b1e6fd63f0e07419a088005b75e852a122a5ee0416afb7391ff165ae39549f8931a157aae1ea272d97be05132e8d";
   hasRunfiles = true;
   version = "1.6";
 };
@@ -4545,6 +4775,15 @@ tl: { # no indentation
   sha512.source = "d20b1cce1635b415d7368e49a9a32ee3a61efca8d0807b67c7e92ed59604fda1fd9b9d168ac23d54b90e396d971fd421463eb1ec77009d3e077e474166afed55";
   hasRunfiles = true;
 };
+"ccool" = {
+  revision = 56636;
+  stripPrefix = 0;
+  sha512.run = "4571aa4b0d83f6651784f43e5b9b982a9d42494f9ddd5006a794d4eaa94c4217ef0e85ec2170eb2502c243c02b7b67f0e8dcacdf2ad2714f70e7f6cbbc24aa3b";
+  sha512.doc = "99c777464f24e2cc5775a342d682f43686d13dd13db606c30126408de8521cf68ae62acdeecf351dee510ab6550b247100bbe6cfdc2e04cbd183270fc91c62af";
+  sha512.source = "31f6f051fbff8806df6bc84c03fbf5b33440800cea7083b8d6d36e585140dfe24e7fbb192531614dc65d27f23f53e46349b0c020a2cddf4817fe9d3b7b23be44";
+  hasRunfiles = true;
+  version = "3.1";
+};
 "cd" = {
   revision = 34452;
   stripPrefix = 0;
@@ -4580,13 +4819,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "cellprops" = {
-  revision = 52205;
+  revision = 57599;
   stripPrefix = 0;
-  sha512.run = "0dd543116fdf89a6d83c5e7a4a96b6dd627f156b13bc56db5905bdb32f2e880d9292913d6e3423e1eb248c0340fa2e9cfb73d0c7795fb4bd363f90c9d150ebc9";
-  sha512.doc = "3f44b803ca78fc08732ca9971da4bfc7755cc73e0b8cae8d88ab3b4e4906271bffe9762b75b2281776f36f3813f3cf0d58c0b38bf2fbb14b25156e00c711e14b";
-  sha512.source = "aa342fe74a9e73f880db8aebcd3cccde038ce56b279d359c82d5f00bcd92bc5bde2a3bcaffed3768f3835c524c5706e695a3a46a938f4d92d352b4176606e31e";
+  sha512.run = "44aa6378b682ec67b547458ffbdd26416c517cbd8df6b021325448696e291e0a8006ec036edcd476f105dc8cf41e556867f8f87fad30da184668050bb2d8d34e";
+  sha512.doc = "187c5708944d275b5d17f616a2b4bbfc76fcaa0dc9d11da2d67769e46b232656f1bab0602ea94b3fcb1665c92500abb7ffe60645ff267da077ea98f35620efb3";
+  sha512.source = "771b6bc32e1e82a62dc1a93c955b01455b14ca5f9fe43d79f29e131487ec695ac50d6106cfe68c5e1e8fdf6d88980b7d7220613a8132472cc8fcd0d9d3b63045";
   hasRunfiles = true;
-  version = "1.6";
+  version = "2.0";
 };
 "cellspace" = {
   revision = 50374;
@@ -4621,6 +4860,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.1";
 };
+"centerlastline" = {
+  revision = 56644;
+  stripPrefix = 0;
+  sha512.run = "a695c30f3b3db43c83e1ae592de9bf32b2856cca45561835e78a03808c7d3d3d8b71f4cb2cf6ecd82ff475012787f953320e4a6a5817ea384382741b7ac88cd1";
+  sha512.doc = "850bd95a2ba3c9538e08163b34c900c045808ab69ab021fbb2068e1ab0fd3c5f29fca0b95864203b52704a3c33b81df7ab3cb46eb7296131fd49de71ad0fb876";
+  sha512.source = "0463b1c97472750b66fed17bbe1c644b78da98ce4e02cda29cb58c4ad680124d5c5153c0b3714aaf43aab971fe38b471e7c801885d35434210d61dc43a316a43";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "cesenaexam" = {
   revision = 44960;
   stripPrefix = 0;
@@ -4665,12 +4913,12 @@ tl: { # no indentation
   version = "1.0";
 };
 "changelog" = {
-  revision = 51574;
+  revision = 56338;
   stripPrefix = 0;
-  sha512.run = "ba47ffdfdbc0c43a25ac4ff4379463d9a4d63edd0e2b477650731609685aa1ceaab71216f092ab7bb94e9d2b090601f0a2968f0fade479697f1d4b6b13d80aa9";
-  sha512.doc = "540814f3a757f145087f6d625cef48257303ebb0560e07c49102e086f747678032e4f2a8208060997e8ecbd54c0780483722675c6edd9913d020f70e2bc01396";
+  sha512.run = "f91facbc1ee2f959fb9d4ea679b0d2f9b740664e7b7941a02a87c1df23545591e0f355713f35a7c01504105dcfd33820dfef266529be4965b606bb1647c7c503";
+  sha512.doc = "d3e62f5756bb5c0159523bb23d9c3c9f05725b2756913747410f6e58d41924b88aeb9746faf1bed8847a51295963d30cdfa8d6bb72df423ec2af899f1e399e5e";
   hasRunfiles = true;
-  version = "2.1.0";
+  version = "2.4.0";
 };
 "changepage" = {
   revision = 15878;
@@ -4682,13 +4930,13 @@ tl: { # no indentation
   version = "1.0c";
 };
 "changes" = {
-  revision = 52838;
+  revision = 58773;
   stripPrefix = 0;
-  sha512.run = "04b141aeb9925e3dd0b54acec65d90e2a88937c9591ace8ea103571413f19896790af9a2a22e98d05129a9c0839edada755a722d2455d6692363c8fa01e1e633";
-  sha512.doc = "8d293b2c22d49f39264535c899746118308640f489a6649b25547723bfb42160064a63ca785e25b939cb0488ec20ee5f4047ed6662c62bfbe1367c191df96003";
-  sha512.source = "fd3788b508f306f106a12abaac398e99ba9c8187f91e4874bc8256266f8680dccdf4594961dc755ed3bec90c2db4e9436fa749df52fde98a21f9d09077f29079";
+  sha512.run = "946a37d1b66fd2fa900a6683d08ccdabc88304c9dcb9d48a3f6b2d83208f73cb3b9f7d2c8e86565db16356e3a1b128e53f5d8ddfc6979129ed30e56f120b9442";
+  sha512.doc = "a653f0e5f3b03252d30d24dec3a6623621858b433734c437a3ae6bd56e293ab00503fb7e2a92e51a0f88ed906fc0c05484577fb09c5348a44248eb7b12f41cf0";
+  sha512.source = "a74ee0bd131301f12a674155d87ffec87b88916e242e80a4daa18fca251d8479e05dc8ddd343943c96055cb3c54fdaa37f91198c8daab1a0c85eb8029d8f9f9b";
   hasRunfiles = true;
-  version = "3.2.1";
+  version = "4.0.2";
 };
 "chappg" = {
   revision = 15878;
@@ -4708,6 +4956,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "2.0.1";
 };
+"charissil" = {
+  revision = 55920;
+  stripPrefix = 0;
+  sha512.run = "c12562bce62a161bf261cc3a899c16f71f2c26091531a30626f7a0021cb0b321e1068cb9b2ff48cfd0128f1502d4e7012c12847b303295abe6758a970a759d3c";
+  sha512.doc = "ccaa2f0bfb3c76e9fd6ba2fcb35e926bdaa70ddd65abc14b2ccd2ab5db9eeef8ecdd4aadbf245fea4674265f6c616e7c42a2b1251214548f91bf72cc881bdcbb";
+  hasRunfiles = true;
+  version = "5.0";
+};
 "charter" = {
   revision = 15878;
   stripPrefix = 0;
@@ -4804,21 +5060,21 @@ tl: { # no indentation
   version = "1.0";
 };
 "chemfig" = {
-  revision = 51176;
+  revision = 58014;
   stripPrefix = 0;
-  sha512.run = "bf8b9f313bdc239eac7c11c8b887755fc5106c389b3d62f013c764a8392298f4e0074796ec128edaa0d4126b52b055b3787454885dd2cd214e2603b7896b28dd";
-  sha512.doc = "61027d844de25043317e4eba23fd3003296fd0fad7ea9495f6b809c0a8b5cc055deb0798259bc6de09ed2a1e462b8aa9c226d5482c9642e87ae6c0de3787db47";
+  sha512.run = "ac0f3fff6f24fe83c3a1cd7bfd456cf187c57ae66776c672aab980d267d9552b7b480b0244e3d2e1c8d9f39f1d6524f9e882fc8a71be9fc8a5c0263d4899f718";
+  sha512.doc = "c8721852c551909c7ded202793a5c1c999d522f3217e9c4fe7a9c4307b7ee054ca360ae72d0d12ea09ac3b538445d79a5d103493c7e14f669762debd2eb92536";
   hasRunfiles = true;
-  version = "1.41";
+  version = "1.6a";
 };
 "chemformula" = {
-  revision = 53624;
+  revision = 57206;
   stripPrefix = 0;
   deps."units" = tl."units";
-  sha512.run = "adc4567055bfcf2c3758856c889fee55e4e59fd5999378b60996aed6d81927c0feb5af99dd96b677b84a9fa20e583aef73dc435d6d1e81d5b47dcad6eab7b4f6";
-  sha512.doc = "28198199ff48a4575e368ff55137123cf5565638f1c7a91012b1f414529fcf07a9df10659670f02a3f0e3b1c5a681e30638c1a349fa5073fbd591062fc355d7d";
+  sha512.run = "6f1cbdeb8a7a30cf561febcc1232d92feadaa59c796a96881ebb04379c49804e8d39cc65dc96bba02d1843118fba347660e23906ea5633af6f00c4fb39388e60";
+  sha512.doc = "61da2685650fa1652e20c97c4ed51930b133cfb137f3c1bf8dbe0477b22293693e6837c9545bed3175aa3722e8710441ca12d063bb36542b13e2cd413849cd32";
   hasRunfiles = true;
-  version = "4.15i";
+  version = "4.16";
 };
 "chemgreek" = {
   revision = 53437;
@@ -4829,20 +5085,20 @@ tl: { # no indentation
   version = "1.1a";
 };
 "chemmacros" = {
-  revision = 53665;
+  revision = 56983;
   stripPrefix = 0;
-  sha512.run = "cf382e9fc9269b3c24b37f028491e5be439cbb30f3f77b04ed7481bc3eab02bf17c5182ca43ab3fcfc9737e72a93af808b3ee8599b65a0a63354da95913771ae";
-  sha512.doc = "6b570a5f63c516ec1da9133faed9f579df9850e9b81d221b107e2ab7637ce8dedb7b4c7bfc0a63c84623bcc9255e65186bcf4f60d7ff03477c43f98b00aac852";
+  sha512.run = "9ca4d903e5d1126aa4f6fc6c07ea2efc86a5750883c354f3bcd48dbe3960ac3ea2cbc47626c67c8f8bec5343d7dd4d61aa548faa33cc42ab09d15011da551a2a";
+  sha512.doc = "3482d6c49bf23bd604a2d0c4f506762c61abc1e2785cf83685af2f96006b9093886d51fed8c16a5e430b35f138ccbd35d183291208df47e1281b47d758d7d123";
   hasRunfiles = true;
-  version = "5.10";
+  version = "5.11a";
 };
 "chemnum" = {
-  revision = 52256;
+  revision = 57490;
   stripPrefix = 0;
-  sha512.run = "f16b41aec7baa6cb088c008b373ff648b8e801951528b24cbdfbe4ad4d54eab12c64a76e23521396bfcc8ff8cc3089f0da9cf9fad37526d1639547412038f5cf";
-  sha512.doc = "b9dfe8de349ebcfbafa967668895dbe5bb14cc6f065711f56dbfa5ef771eefda79114cc994f6de2d5d45143740aa9e93543035dfbe6cf1c2628088927e06ab06";
+  sha512.run = "ea8bcdbb4e69422052758aa7c49f8870c468834ca15833ba4aa89df98c88dd025b4677a9a15b85dd9f953eed6e05b62bd8ef2d4849bdbb113f16de9fbede1205";
+  sha512.doc = "31d1e6c6165f7d8ab15ed322b1cacea608fc796c74e3cbadde89a56f1e7bf45c01bcc6985d24a69b459976f75565f35f61174fc34562265b7f159b5b42d1ac30";
   hasRunfiles = true;
-  version = "1.2c";
+  version = "1.3a";
 };
 "chemplants" = {
   revision = 52863;
@@ -4904,13 +5160,13 @@ tl: { # no indentation
   version = "1.15";
 };
 "chessboard" = {
-  revision = 51469;
+  revision = 56833;
   stripPrefix = 0;
-  sha512.run = "ed7a1d973992897fdb174ef4e250d78a6747e40a822e026b787fd0899f6465a6e845175028279b57f5e16c50162feeb8b1c833248ae3b073e32a8d63051ac0b0";
-  sha512.doc = "586202bf2d2b8bade26af19170e5129da6a2f66f78e79880929d2df2b6a7971b8d3683fb79a3ea6863eeedddfee170c06bccce88ad96ca6c7d982aed43378084";
-  sha512.source = "2dd479a4ab573894437ab551bd78a1b24cff7b2ed53d2a8ab444930afcc228844bb5932302e4975bab617ad24a824810851a979eafb2433bca9dc1289860d6cb";
+  sha512.run = "9447eb4dd8712ccbb519f91e99ccd1c64cc0e9ba904bd46dd8c83ce03c31e5caddca8e76c2cfeeefd5946c8881b9e6b198d50c131a1e8d5622b054d1459865cc";
+  sha512.doc = "1c2e8ab2776a247ab1cbaf5527e04392dbcd1eae3a9b1c6785223268d1811a778c0812a1a5437a15cf4bbf08ff28785a57da10c472dd7567f1f0217b2d7de556";
+  sha512.source = "674ac2dd69312d3959bca053d5170bf98381ec70e3d688c991e276f07260c10ded70055b4f9b819fa0cefc8f1ac7850dd9df61d38a97b58c0fc05c824a42c3e5";
   hasRunfiles = true;
-  version = "1.8";
+  version = "1.9";
 };
 "chessfss" = {
   revision = 19440;
@@ -4938,6 +5194,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.01";
 };
+"chhaya" = {
+  revision = 57508;
+  stripPrefix = 0;
+  sha512.run = "55d70033c02029065f6a619249a14febe37b0960e25c248cdd35fdc7e0afcb6d7e128ae9113001e19c2cc22172aa19002d8f06f0671628edd4bb811edfc92f29";
+  sha512.doc = "eac6b06915dccdcd74cb98cdf45073c06cd63fe48ac88fd50aa652ededaa1df36efc8604ac7dd335347b56bf10339d8397a9ec2db304c55e6c07132ff18a0b4a";
+  sha512.source = "f6117bcbfda21aebbbe90db0932f93792fb343fb0831d8b02c4c61114cc3d10631c3b548cbd2ea12349e4dfb694597f657dd2a2c0b3a126d01b23bf19b228ed1";
+  hasRunfiles = true;
+  version = "0.2";
+};
 "chicago" = {
   revision = 15878;
   stripPrefix = 0;
@@ -4958,13 +5223,21 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "chickenize" = {
-  revision = 45083;
+  revision = 57325;
   stripPrefix = 0;
-  sha512.run = "82df32cba5f14ea8de96020b2412d7c2b3939b0afc4f42bd91e957694404a12a8ea38c9260cf472d81e9aa776556e9b5cf97a674d23ad32633f4fdefe3b3bf83";
-  sha512.doc = "6d29cddc0030de2ac6b82dde660e405916bb79bb1e18fd0579a66555d49062fde5d0fa327b906baa1556efd080c55b7ee181ed7569e96dab256ab2be27620935";
-  sha512.source = "bd53aa09a1a136d36f92ea0e8625684361b31ab9315a9f987560f171e893c022122b64a086aa2952a9f1fb96b7931f4e248c016cce8f0ef488c94fcd33c5e8f4";
+  sha512.run = "3cb2182717630c6d251a055021ff671eb930885e5b33978c0cd51176225b1743938447e3d761cfa83c9e3f46cbca1b5686c18f734a1ea5fef50a7ce48873ee0a";
+  sha512.doc = "a2a7ccaa210583de7a765b940959ed4cc2678c6800b283c05f301814b69bb8c704394f8795a1824b41b03652e27106b9e47ed9d5a57179df685294fc3caa16f2";
+  sha512.source = "614f105bf01bc1a36ece9ed319763a06fc2480bb5c5b1845f47b17ae1753e9fea5e4f25dab9b35cd493d2c6c31de1c636723b676269495d85829b683420b7e6d";
   hasRunfiles = true;
-  version = "0.2.5";
+  version = "0.3";
+};
+"chifoot" = {
+  revision = 57312;
+  stripPrefix = 0;
+  sha512.run = "492361fbe54dae9585b4d62eb1d3c3bf4a81ff8ca8020ad997cb9b30c673cfd8b35cf8ff8d742fe6c1ec7cf529e3ce558b9d5604851fc39c75d72d0fda37dc6d";
+  sha512.doc = "34f5bed1ff3660a5fb1fdacb0ec26311fd47593ed6aa659d12eca8141262d9fa7d6c75b2601dc59a38ab02212269f0e69a5fb5da3d9ae1d884f25677f0f6b545";
+  hasRunfiles = true;
+  version = "1.0";
 };
 "childdoc" = {
   revision = 49543;
@@ -4975,12 +5248,20 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "2.0";
 };
+"chinese-jfm" = {
+  revision = 57758;
+  stripPrefix = 0;
+  sha512.run = "28dc8b70bf5e97a4e31defe09a16805a57054a019fa7908f6dda7ecededd8a37bff3f782d04a7c2fb72ec17ee1695d5a5a68daf3a159092080e5a7d667b4c9e1";
+  sha512.doc = "6b0b2e65ba4bb79a6c6eb5e4075a1611b2bc752cefe1aae5b220e663b33fde685184433c397ac4957e4f2a6716129aeff5c40ff2082b2a3bcfc13d591e06897a";
+  hasRunfiles = true;
+  version = "1.1.1";
+};
 "chivo" = {
-  revision = 51689;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "c50965da981e688530e115352f0d1baae7c9fa2b286856fc1c3d7a9dba1b463b299c129cda72514792a2faf77f512b8720f02494bb178cd619ccac6a37e5f606";
-  sha512.doc = "b7ec648495dc0be4201f01b162ef995eb2168bdaaa43c84144a7518e9b1e0d471e08a1282d301162cc9cabfd23c86249fc57cf0136dd37c0689a33893917f12b";
-  sha512.source = "5b92272061540ec7e08797782af358ab0e50c6a2658a3faf7fa783e2b4e105a9e7d3dedf6e4ec1df82410254686d5adfac205835c68cd88394a85abb39d1f3e3";
+  sha512.run = "41098de0294384383294b382722821c90ed2481f7172957b97c5f6f1775c94e0165a1c3aa7dea3c50742683b05419ecf009941bd79cb234b8b2400a7c3f0d567";
+  sha512.doc = "f430375203fe46e44ce013061f09a8a935b7fca7b4391df2e3f18d2125f4b13ec9b80415e432ce9af267f1caa6f88d6528b474cfc6833e5256e002d54fd221d2";
+  sha512.source = "ca9cb13d589c3141e5e2a981ae9dd1acfe7d18f5c902664c6f836e228a7b95bccc8906b9a54337ebe561e4cdcfee37265bd71ee5c3f7dd1d013188852ac224a2";
   hasRunfiles = true;
   version = "2.1";
 };
@@ -5056,10 +5337,10 @@ tl: { # no indentation
   version = "1.2";
 };
 "chs-physics-report" = {
-  revision = 48549;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "e1af3e29e5b59545804d7ac7f3cfd0c7463fa9487c458ff3790a2b434151cfec925863bc2d107e5eb6e43c988d85136eaabe28065bf95b04836a8342d5626d23";
-  sha512.doc = "3f87d4b32e3257a22e0e7146a89ab2fc90f796d524b0641ea0ec51ff7328518854d226f5405220d7f5466a138bdfecb6d1c6f8b056781e985cc1cc757d0f26e0";
+  sha512.run = "568c7b71838651881417900aa5eb8711d5e38b4496e130802b7732482c4b8d83585c54a507d2f5ee27823c9d97581db7508ea79645275ac8b1b4d02238c814e3";
+  sha512.doc = "edfd22aa48a1d3db245d3e41b36cdceabe4e3c2e263d3fb270325b6acc57dabe686561af5359b849e8a17d1f2e9b77f2016cfbcf8b0af37ba3120085de9e6764";
   hasRunfiles = true;
 };
 "chscite" = {
@@ -5074,9 +5355,9 @@ tl: { # no indentation
 "churchslavonic" = {
   revision = 42751;
   stripPrefix = 0;
+  deps."etoolbox" = tl."etoolbox";
   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";
@@ -5085,10 +5366,10 @@ tl: { # no indentation
   version = "0.2.1";
 };
 "cinzel" = {
-  revision = 52392;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "5325c8ebd42cb7311d16ac20b4b0bad6832cea05dd685b17975eef92363dd0ef99a06ac4e5e269c932e30df2dc9b0ec3b5dbe54adc70e93718c08a92a140d866";
-  sha512.doc = "939dbd310bb861bfef206584d8011b0a296f4b70673b7f334b85999a40d352ff74f07078c9215e6510e431b95e6fd12778e468ab53f401f3b952324c3162f792";
+  sha512.run = "7242b771113d9164231d060169e70f6ae6425fc992edebb86fae8e76128a294f1aba290c2340c9b28ad9e4a7d90f9dc44dbc793f6f171b10b13005bfa848e239";
+  sha512.doc = "8bebe9427e35fd55a2b1e11d924124605b2045aaa50c7ae15e78b8fcad2b50c0363686f6eb6ddc8bcf3f407a8afc983df5b6cc1d8e2c9713616d1110532364d1";
   hasRunfiles = true;
 };
 "circ" = {
@@ -5109,20 +5390,20 @@ tl: { # no indentation
   version = "1.3";
 };
 "circuit-macros" = {
-  revision = 53821;
+  revision = 57308;
   stripPrefix = 0;
-  sha512.run = "2a4144072152000ae818322ff505c478ff266f40516c218c013dbb1e0e0bcee56b5bf3e4a67f112642348b6931b63946a17f407fa9bda07d5a4c35b326ffa136";
-  sha512.doc = "eca330bc347b7f2722f3c609b753cbdcdb8a204c162db8161256fbe1d627fd28b4bc6989cb024316f531fad935f3f927163c2c338373efda58794971ec1d5f5f";
+  sha512.run = "38e9ed7362e27f836d3a364ea50f54593aac93f30b7a2b90a7bab9f0dd72f28a14cae86fd5d3dad2f47c00ef511afb458c2da29c5da203c3d65c9829b32aad52";
+  sha512.doc = "44251146179c9021159523d00acc93969c1caeb92bd0efca9701d95804fe57c8ba218f41cdab878aad8b942cdb21ace7d0266ed7c7c9373d0eb9676b9e636492";
   hasRunfiles = true;
-  version = "9.2";
+  version = "9.5";
 };
 "circuitikz" = {
-  revision = 53883;
+  revision = 58757;
   stripPrefix = 0;
-  sha512.run = "e9e7476e2e39b0212bb63384deb67b5c01a37dead40f7e310797468a7b8a78539297890132d58c6b77d96c2594b9585f3f908a99c2c4b99f6ecb60fd41fcdbd5";
-  sha512.doc = "50f9d3b6c31cda2c367cd464de88635daf173599e3ef297fd75b710ed8c7260ab8bf1338fc969e9bb4a7527b224d2aa01029389b56e610df55e398986fa184b0";
+  sha512.run = "bbe6be9fb82ea663e25e30b7ed4938f68295a3b69e4a1586cf0baadeb0e31e92d2f775927167704a2145d0f495a546a378ba9b0cc62b8c13422e7bb8f9af8b9c";
+  sha512.doc = "08644573bae57d53903c1ab41962048201e84cab9c075670c568b20a5afb4ee35cb00346f329136827f377451edd8b2eaa11c68b2ad2df7af3cd9adbc124b801";
   hasRunfiles = true;
-  version = "1.0.1";
+  version = "1.3.3";
 };
 "cite" = {
   revision = 36428;
@@ -5180,20 +5461,20 @@ tl: { # no indentation
   version = "4.8.4";
 };
 "cjk-gs-integrate" = {
-  revision = 53410;
-  sha512.run = "f584536c3d70ab767407f9ea8f048ab9592133c0b1a76d8eec76e132aa0009cc5b1fe1ee6fc86174aaac618ebb2b5fa7258da79a12acfea9fc2aba4be0184ac5";
-  sha512.doc = "f2524df9e46cddb522517e38e53c1aa116ea7c6df04affe585c7265d427fbb748b2a7c94ab40d36040474ee4085bc3c0a1ada0340bae04d36a0d8ce7302014f0";
-  sha512.source = "e6ac59451a128fadbc32e96652b015b9e407ac623f67b26d1ddeba34ef169ea0f2c53cc57a3ea34fe66b127aedf1d81341d6115ba4711dca7394665d20634c09";
+  revision = 57081;
+  sha512.run = "f2b8db61f861942df199cdb6e51ca7458f22d385396382bfda6291d2f2abe5555b6b35102629c4c0d478dc01b873ae917acf10b150bae7972a6fbb03ffd03f41";
+  sha512.doc = "80f8054e0841bc5605faf0abd3b17ddd16919d0228d520af00c4117f884e1105e6b818d6ec92f312b38246f591f0e6743a76ff02ac05a9e93624e8f4bfaa31f4";
+  sha512.source = "5d26311844626499997323d15806a31e5144b1dc6f6c18fc5dbab10f898382eff33dc316ac8429a3d76f57867720061cb8594d5c80510b7776dbad8970f0c0da";
   hasRunfiles = true;
-  version = "20200115.0";
+  version = "20201206.0";
 };
 "cjk-ko" = {
-  revision = 40373;
+  revision = 58081;
   stripPrefix = 0;
-  sha512.run = "52ed45e1e67b50a09ce4b1fc333222d93adba691265e13d0523aa2d1a2a82b78dacae5ec2ee1ec0e78dfdde740a15a3d48fe45750db17e5270480807521c59fa";
-  sha512.doc = "15b96571e56e9e08656f28fe8f8875e22de4a4c513a76b21206b66b8ffe2c986acc87c6f0bb1f693a2ac05ad07948ba89fbdf5f63259d08ef3b41726190e089d";
+  sha512.run = "5666ea878afe5ffec519ea1bb732f123a8e1dbe539d1b42919f0d0e73efb26f66850c446bfc3be5aa9e34138611da5701adf43b1f474e590dfe20a6784b3dbbf";
+  sha512.doc = "3985b243f47a964dde86cea55ff35bef042fe4f66171188dff03e7bebfe06369604fbad9dc0acf551778bcfffb7fed77250035f28b1f033b5f64e5577960aa44";
   hasRunfiles = true;
-  version = "1.8";
+  version = "1.9";
 };
 "cjkpunct" = {
   revision = 41119;
@@ -5212,10 +5493,10 @@ tl: { # no indentation
   version = "4.8.4";
 };
 "clara" = {
-  revision = 53552;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "b5e91f144a9c1a8ecc2e912e47e49c61a42fcaafddef05731c701bc46f95cbbd88289bddeeb4928aa8766c6f696fecbb59b4638e89619cb08b94c5326a15ffd3";
-  sha512.doc = "40366f58178152d696308513816d642b57d791463260a5afd69df7ccdfe548a1e9bd9e0457fc7c9cb50c3bca7a2170d7c3573761e7362164a7e3d9c592cab7f5";
+  sha512.run = "549efe7ed1b523e0f414d8f6401137cb0078256f514253199f85e436a5bac595d7525380fd986fd0c674d087decb23fc401f41a67b193c58f1e8e3bf95a8283c";
+  sha512.doc = "6b7912050fd352e3095f6abede303f67d3c779b778825852bdaa37345dfec91df860e5b9d0f2fccb7e4e20abfb93740f7f8dba5959aa1d630b7cd990bc0fcf77";
   hasRunfiles = true;
 };
 "classics" = {
@@ -5235,13 +5516,13 @@ tl: { # no indentation
   version = "4.6";
 };
 "classpack" = {
-  revision = 33101;
+  revision = 55218;
   stripPrefix = 0;
-  sha512.run = "ac5e26d91107bb0166040c990e586b6504eccad7da3ec084a49b141a1e0fee2725939f10deef5af1c4fe89396bc8fdef86f3bd2e8de9099cbed9700867700e8a";
-  sha512.doc = "6a22b10f5630a52ba85d113ddab8dacae0ab8148f62d4f9958bf3619c2d88f9a1f3c9778e41773d7b9d392ddc4d6a30dc3cb995a24072cc60b446896ca48707c";
-  sha512.source = "48762603b928b53cd9391908f2b0497e766ab516033a246aeeed014a99cd09a6e18f1feecd107067f58e3ecdad5ca37b4004890c4ec2e4bcce7e5f67e6d03724";
+  sha512.run = "483d96aff1739fc2cdb63e9753fbb86ec93b493ee3d8d104e6089c791e4674d522a30e0dc747a48d8ffc6690452a147b2ad15a3a9cc676c641a9f6aca535563e";
+  sha512.doc = "6e30295ea5d7ff19f47d4144a3ea6eadd85d02a80023b426675efc75cd2867e3c79b60a8210f26cb732e5b0e70bcb856d96d7ad98a6165cfeaed64affa070bec";
+  sha512.source = "59ab38731bbf23dcda81c02a297c69b5787ce89a69953697651c399dc86e0994db91e5d06358365e8a607a3f15b3a115ab93fcedd8bfc9b3e91946c428e5ba40";
   hasRunfiles = true;
-  version = "0.77";
+  version = "1.19";
 };
 "cleanthesis" = {
   revision = 51472;
@@ -5252,20 +5533,20 @@ tl: { # no indentation
   version = "0.4.0";
 };
 "clearsans" = {
-  revision = 52530;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "fbbb0be85ec7e2fcd8e75475df45d0ef6229c86c9672f56516711f8718575b857018239c4ce9bbafc7f226f986c48ea873a1b0e0f187ff46fc6ede604a3abff8";
-  sha512.doc = "43949701e72c24922afa76c49a04067035d5393c480d1fcb8e7db3d50030255f5506cfeb1d66d66ada35a479b4aaa12455424140c2bb74421d4fe3b9a4b487cd";
+  sha512.run = "7a09ef6b27a828823b8bb4d57788805cfd3301196864c9023d5f1ac6ea688da6783535c8449c0e035c02647476de9f2fddd9abdb4180a1512d1ae24ce611baee";
+  sha512.doc = "ec57c7551e9b751505d2973a50411b20b859190cee10c176eacba66b4e26c551b7b4230cbb5349a841645cb5d2e351e655ab242db59f4e3e5675f3e964977845";
   hasRunfiles = true;
 };
 "clefval" = {
-  revision = 16549;
+  revision = 55985;
   stripPrefix = 0;
-  sha512.run = "8bd7457b6f8144982781b029500db910fff387f3872d09039a2929c5e62dd7dea56e22cbc40036519cbb2060ba62bcc7d621dfd383493420a88699660a796e03";
-  sha512.doc = "5789c53aed9c4bbe92e8c36f115cf63e07c7e7c35c26d62ba2be41eff8408c8e60f619f565cec1fc0e1ed55f2c571ee6f8115ffc2e88d9917fff085d19731694";
-  sha512.source = "119c560be9538b97bdd4366e8ef59b394aac864e54554388c98b7e5ef62fbbc0f13c4263f012fa6842081a97433caa318bc2eac6aa10c4b8a8f433ddb3f02090";
+  sha512.run = "1d92e279264970ca6d7612c3850fd46d4f3deb74df8a9149d6e63ac19eb665e5affeb1ab9bfea44d07825b80245b0a3b951d3ec08af0834c228a21270bc45437";
+  sha512.doc = "d8242b0dc52ad63167fe13a88c28fb4b088061f7bddbe3137a7b541dd1f15aacc75a1c7c1c9b6aee2db1ff14278edf3b83d8eea5cbd77e112f16f8af9e36f19a";
+  sha512.source = "abf25917b9a6aac0c3ef310bdddad1063ccbb6c59e844c792638927de403da00013e93db8bb1e9c4a052a65ee8dfb46743404efcc9c8cca6191b2703a6ab16a1";
   hasRunfiles = true;
-  version = "0";
+  version = "0.1";
 };
 "cleveref" = {
   revision = 47525;
@@ -5300,13 +5581,13 @@ tl: { # no indentation
   version = "1.3";
 };
 "cloze" = {
-  revision = 41531;
+  revision = 55763;
   stripPrefix = 0;
-  sha512.run = "e66b5d9086d3d6ac39c0664cc4906b467413b919a64538371077bbd9088d80ea81276ce66a64ba29040068b9b73ec5990a7d4422608ce85b0d94e8b2ee3bdce2";
-  sha512.doc = "c21e8561c296efaa8b4c30044f6121736d58a98d910bf671d11f1931d29ddd0d626bca69ab6f50225a3cb588346877b76ec43426822a869e72e266ee5d65cd5e";
-  sha512.source = "fe68d18164ef34259dcc42c4ec395b929c92d3758a8c9e911c2f20a136c2807ed229612db1efa6cb02704eac6924b9ac8b98742a546e271241013245d855e50a";
+  sha512.run = "f1c986699258bc9e7e27093a2d44f59d001ab13c3d9ba0717dc9bed0c53b00ce8ccf658c9cc3d7d457d18f45357a6d44da4d6710c1661ffcf299a8791822501b";
+  sha512.doc = "ca3d9e0a4eb7486f40e4a26d0b6a2aa5dbf7e3d28343b9069ee97b089e7906aa137d8e7f8c6d010fd2cf472836191b88b9450248bd99728d80159afc54a8d1e7";
+  sha512.source = "53d30866958183101890a4999a9b8f4b20b5bbca996d28ca4a22aaf81331f186facc695725917a9e80206545a3e0962b8c17b4e08b4d2db961878a273ba7c209";
   hasRunfiles = true;
-  version = "1.2";
+  version = "1.6";
 };
 "clrdblpg" = {
   revision = 47511;
@@ -5348,10 +5629,10 @@ tl: { # no indentation
   version = "0.5";
 };
 "cm" = {
-  revision = 49028;
+  revision = 57963;
   stripPrefix = 0;
-  sha512.run = "e939416545071f5c445d866255050cd4302c3ede6af1e080909a68b6e4327ace1f90af4677c68c18d1a85aecd4d2ff346e13670b0be59c76e11ef6334991aaad";
-  sha512.doc = "d27b43854fa022de53379a84087657bf97ce5475d70f98c783f790e320d78daab2f002f49f3dd917224d30e308d78dcf0855325b39014fb0fe5b50d645c9b9a4";
+  sha512.run = "e65b2096ca183ca21d8ff987489223bc98750fcbaf4f9f9a9996f5153a76c5587d1ad77693234d02f80753b8b8cb86fd957514f82065bd7aab9eb64bad9003a3";
+  sha512.doc = "39ccdee82d86f01e11aaeb53844639b4f976677c0baef7675817fafe4263e8e44cfec144f6fce265c9c80d9a9373a2f46ac8a55b7f20923c680eaddd0222a045";
   hasRunfiles = true;
 };
 "cm-lgc" = {
@@ -5363,9 +5644,9 @@ tl: { # no indentation
   version = "0.5";
 };
 "cm-mf-extra-bold" = {
-  revision = 45796;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "c9a9c5631ce016112ccd37ac3325c753e608bdc55e1de524742ce81f1ffa6c53ad6d113346d9d90cbe5466fe301d27050d40bff258678df840c693987afaf6ad";
+  sha512.run = "1845d58827ff828d6b60b82e4eda94760cd3c86076982b861e53b4f996a0dfcc9a5926ce58de27891ca3ea115a752cc4abc56b06b112d43194aa8a27c61b86fd";
   hasRunfiles = true;
 };
 "cm-super" = {
@@ -5376,20 +5657,20 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "cm-unicode" = {
-  revision = 19445;
+  revision = 58661;
   stripPrefix = 0;
-  sha512.run = "b50e647db3be42cb8bc7f1df849590b4f3f8856523c57d16aa5b42237a3f7fbd381ea5f05c1337091a66fe667841704133828141eb8c40e50f595498949acd65";
-  sha512.doc = "162e407cb299b1a4ee353fcd0cee7eee048f8356def550d591630f12924b4a5ff0e9d6f9a0652c3dee7a88e5c2521b0c23ba4549bdfcb21a90c1949ef566183f";
+  sha512.run = "5d6cce2e396ffa0dc887e839f4ef57865db9eda3dcdf6a62737008b53837c40ee1498d97ab06eab8f0802e745787fa5c107c0738a8dedd4e65f6996aee555c48";
+  sha512.doc = "f7633d0dbd08cc1e82f6804f51c8b117dee909a81d8496826abe3e9b7107577f2818323dbd789555f8cd3f62d8f1ffac440fde64a6497135f879fb58a779cf64";
   hasRunfiles = true;
   version = "0.7.0";
 };
 "cmap" = {
-  revision = 42428;
+  revision = 57640;
   stripPrefix = 0;
-  sha512.run = "d907b1483bcd8de1b2b3158ad1a90493e86a27bd60f3ea901011866e81d57b22a555da0e54340f77ae9584aba3960959e89071330d035671c549e887fbedbdef";
-  sha512.doc = "c3ca940f836f5c5e433adedb404d3f1033d8efde61bbd9a043356889377e0914fe9dcb8cce8c2b9252502de6af3cc1a8bd71dbfc61e12446cc07bc9d5d2c2668";
+  sha512.run = "4857f7ab9719a2b6828582599c98715c61731288899494aed96026dd6ad8bac92028586cb6b008ebaf3fb516d918861f79f544ecd64bca1e6a6183bd8bc398c1";
+  sha512.doc = "5a8b1bd0c47bd5b4a3df3d0270c15c0d3c8691c96f2e5ee272ab97362463c2cfc7d1e2a9a19f5aa7ab8b145e9ae63390b1ded80b48dec52f8bf62118dabd6cd3";
   hasRunfiles = true;
-  version = "1.0h";
+  version = "1.0j";
 };
 "cmarrows" = {
   revision = 24378;
@@ -5399,6 +5680,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.9";
 };
+"cmathbb" = {
+  revision = 56414;
+  stripPrefix = 0;
+  sha512.run = "8e720662ac4d00557b143c883e9d410da8593cdfa056b5320e0ff348c2c0e37f9c0045341c28e583aa544790e576d9b7db8c80f93cffd8c4da699e46e35f73e0";
+  sha512.doc = "f1b0b1067260287c66347e52111883834d575e5857a3aede8e14930252a284b5c0bd6bd7247c9ee36462d57a63d351110582cb66ca894d9430d476445f37da44";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "cmbright" = {
   revision = 21107;
   stripPrefix = 0;
@@ -5432,16 +5721,16 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "cmexb" = {
-  revision = 45677;
+  revision = 54074;
   stripPrefix = 0;
-  sha512.run = "1d5a3b2ee73dc85c2e19e7bd8bdf0eee0283ca161ecd42dbeffe0443849e73e09113220ca6e09039c0daa684b2f372e0f8b13bdd711a937a09cb8a8fb63b4593";
-  sha512.doc = "f833bc57edead21d4fcb27c5822849f26cbd4b434bcd230bfccb190c94c47d2eaaec4dbc9264c6a55ba24b2571d2607197abfd792423e03b7013c478e261ee6d";
+  sha512.run = "584aa7d96c86be809a1da92955c92c9e73946fc236e9991925431bae4041001f6b4d7029b13004ada0435ae291a90fce8990e527188e1f35a3be922a39faefed";
+  sha512.doc = "e6f362bfa79f6c32537245af645f8b6a343ef5a9204b9cd50cfab9337e9617554bfc3fc813fe4c65d2664fc617d460f15a4ea099961699bbee82381df0856760";
   hasRunfiles = true;
 };
 "cmextra" = {
-  revision = 42428;
+  revision = 57866;
   stripPrefix = 0;
-  sha512.run = "a9cf3d6157c6341de13f400bc496211912679702606d4e6c488231c41c4a70053791d031c7b6973ecfd68ab8e28c7d56d41a10492af7d8e4ae66b6eb923db370";
+  sha512.run = "fa6bd1e79ca96500080405e01a7524a6fd13358335d34b3e2983a7f33f7b7a50ff4106ee5f2f483f3e040a3a7135b4133d727c6a7cb0c90f63be40e5410e3b48";
   hasRunfiles = true;
 };
 "cmll" = {
@@ -5460,12 +5749,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "cmpj" = {
-  revision = 51661;
+  revision = 58506;
   stripPrefix = 0;
-  sha512.run = "31e9fb352cf03797436bcc1cd0f3d16b2ff6234d6306770e940f59eb77392fe7f616530febc4b299cc52c71036358b203e7cc99256099093fbbd4eceb71af4bf";
-  sha512.doc = "3e2b162c6c04f409e1dd32ac4be59431d65e6b39e813e091bff0cbdbb9fe101c751664df8f83704d38daaf4c7c04db24b22e32a36d3cdf07411b73a1d21c076f";
+  sha512.run = "11eafc9af424689d7f4a225eea5f5d5f6123f79265f805506f4e98155d97e557fd96a6ce5dba6b1d598817ec87f561189cf48267f08c7cd7823781eaced17e55";
+  sha512.doc = "b1113cf0dbc02b69e3ed72d70168103b742d85c2115e78b1f0feece71f342293fae109f112be948e5e106dde226ae8d4d53706c3846a641b8d6e8417e8444408";
   hasRunfiles = true;
-  version = "3.02";
+  version = "3.03";
 };
 "cmsd" = {
   revision = 18787;
@@ -5475,12 +5764,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "cmsrb" = {
-  revision = 51887;
+  revision = 54706;
   stripPrefix = 0;
-  sha512.run = "71114f560befd3f1c7586dbdde38c12b682bf1eb73019d874b1a55e89ef9829786623ad9f53d2dad99361dfac09c9ec011dd7018d07f48d483463219df18baba";
-  sha512.doc = "81803d7ab7c220b64684ac2c7bf3b56ced62fafec33e5ba2ed2ab2bfcc4c8abccfacb5614a853fbc1ad0993bd6f221b41ddbad1c494558fa3d4af2c27a51eafb";
+  sha512.run = "2fef47e94ba1a5ad0774667ac84e29040a3715c413990585aa09c866297beb61c7da533685bc1e102c8edb30d7bf6bddf8fee5486dd6d4d6ea9ebe51d2424196";
+  sha512.doc = "9200b4da942f308cc60dc53b2fba9cefb7448e95d89f0c34d03604e5f7a9119aea4e762d70cfa35fd12f555f8c4ae1ab4c0b12abb04742e17b6e680bd80cc9d3";
   hasRunfiles = true;
-  version = "3.1";
+  version = "4.0";
 };
 "cmtiup" = {
   revision = 39728;
@@ -5491,12 +5780,12 @@ tl: { # no indentation
   version = "2.1";
 };
 "cmupint" = {
-  revision = 53507;
+  revision = 54735;
   stripPrefix = 0;
-  sha512.run = "df5fec72f9116ddeaa19bbfb1c174c008b6c6e78313459542092cfee30f20ad93c0e42b3078cef83d606e4403d2c84ec232f365c02e4be8b80109544ab24ac3a";
-  sha512.doc = "fe7d492c660ec1786f486f1a58b405303b2dbd63094f05fb0da85fd0a7811eebd11f18a065b524027dd4fc559bd5ebb037a3114b9984f622af5daeb3d42e8acb";
+  sha512.run = "ce08962145a80b7b6748145a7385cc78e361295d85ea96f24397aad3025b7eaa2e962d4d30380ca1a8d22da7175a3135abacef78a76d9d4615f03aed049a4b10";
+  sha512.doc = "80cab8f9387e74db3b3650b8e7b055ecf1e094f75f0e43c4540b32658e43e392c82f3fa8ab6a6c08495ef6f9f2773501a7f282acaf7d7d640f0bd891cb8b1f08";
   hasRunfiles = true;
-  version = "1.0";
+  version = "1.1";
 };
 "cnbwp" = {
   revision = 32550;
@@ -5506,10 +5795,10 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "cnltx" = {
-  revision = 52601;
+  revision = 55265;
   stripPrefix = 0;
-  sha512.run = "e2e51aefb221bd92c03af9fe82738ff4912445cdc56bdcec2ad1e9da132804bc1b1ae578f4db69a39a90981e16682f88b32b5192b0510977f2444dd5232f487b";
-  sha512.doc = "8cb976bc69502c4e4a17473cf5a57cf0316cd488a64af97a4c76679ebb7acf5655991d7a9f21a1e3c3fbbf03b934675fe3c00b6a2db7af12e8e1e170151a6eb7";
+  sha512.run = "fa858296b0d71265f4812289d7e50e1650deea64fe8feb86c1d9a3ce49719ed4d265e457fc1e6c9382c9344b9798ef2de322419ab38b86dfaa2f20ca87052ea4";
+  sha512.doc = "b1481a3f56079e4655b94ac7855019492b051de1405016830fd196442f1c3fb8213d00540ec5fa42dccf743eefd9ff1d0a581626d2b0c64b7462e43708ccb502";
   hasRunfiles = true;
   version = "0.15";
 };
@@ -5538,12 +5827,12 @@ tl: { # no indentation
   version = "0.3";
 };
 "cochineal" = {
-  revision = 53348;
+  revision = 58717;
   stripPrefix = 0;
-  sha512.run = "1042d59946773c0f321758bd61f9aec5f4a6536493db50df4d9afe693f02fc5a3a64b40c01a7097f5ca9c6e1b3f23181e5bec5ea62de0b2c7c7a38438374e3bf";
-  sha512.doc = "115bc2ed0e846f374b768908f5af7019d4b000ecba18df9914248c023eda5ed5033ffc3483ddf89ec909dc6509820858f7de6721a3d5701f1475764c008c49fd";
+  sha512.run = "51596bff44f2aeb5720d6723283cd2c7a4c81419b0391af9aeda3231fd429c8bb8a6342278fab7f1cf17ed4cb752a25bd7c55c085671ef205bf9a28c429cfdc9";
+  sha512.doc = "930c4bcbcec523c8800f3c52b286197758f7721aa511a7f0617fff68f2e1a86cabc7cc9f8ba2887f64edd0e61fff9c17a05eb615043d0a2de9a56e03e72b5e65";
   hasRunfiles = true;
-  version = "1.060";
+  version = "1.066";
 };
 "codeanatomy" = {
   revision = 51627;
@@ -5589,33 +5878,33 @@ tl: { # no indentation
   version = "1.2";
 };
 "coelacanth" = {
-  revision = 52462;
+  revision = 54736;
   stripPrefix = 0;
-  sha512.run = "b29dd50ce96159af8c212aee3dfab5eed5285df453caa60c9fd65bef69ff865ba81c698af8ad55f2d3533ed3ad4209644f34815b7287a678a734c9b27e2acc24";
-  sha512.doc = "38f0f12bd2510a29120fef972578bf7587d4d5a469fda80f8eeecf4d0492e7503040ead69ef9eba46766598889ecea3741b9f78296ca49feb69e69d2f475b1f8";
+  sha512.run = "f23a337931736831148c779defdea8fef6291636334f0f42cb540c53d1228972a9acaeb605f35fdc33c4a077347b11c8e964821ae1218074fdf87c06c7029187";
+  sha512.doc = "be2ddb2897fb81682514c19aa21200c2dc9825bd106cdbff9cb5a31c6874c937d0f47ad4ccfc867f62d5dd00672791ce055d6e5e46a4e49587065a9f6134749d";
   hasRunfiles = true;
   version = "0.005";
 };
 "collcell" = {
-  revision = 21539;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "34a2fb5a5dc309e625e4c7d89b9e5aa9806d15d93cf0fec124a0505b20c6711bfa96b3f99986c23393632a9db1c773842c9bf6f10c01d1c4da8dcef2960df289";
-  sha512.doc = "1bbb4e70a5f5163a62f1b0b135f5601b4d9378cf2a5d27fddfabf9ee5e65dae7a94cb4cf63ed5e98dbf35cee550bd0a7b425f505d462eeb7f1e7035fe3c7664d";
-  sha512.source = "8d567bc14b9e6a8467da4893245efd56f7537f5b721b8b9c4300f9ffda5ab30649f7c0ca51f3673f786676fe20af948de63d1fd36ce2c3d0f9d217ad4e6bbad1";
+  sha512.run = "fff5f9ae7f9cd27f85189a895193f205e0b52874d46171f1f3957d7c816e0641dde6d2711783897953a1f1be699e001fbd9048aa3c15c24cfd33413db1ae688f";
+  sha512.doc = "22dd2b527ca195cb4cbf6d34d8dbd181dbb3386fa738fb09530957eea1413261fd596b0a00395647ce2582c477625cdd87e8ffa1cf2dad5387032a7d7d737edc";
+  sha512.source = "9a5a173381fe9b6e0383571868b215184b75c51e39d18ca209d00e4064c28d7a477c4b887a0be5dd4867d393c6854022a5abd7be63d3be593549e645e3e09aba";
   hasRunfiles = true;
   version = "0.5";
 };
 "collectbox" = {
-  revision = 26557;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "e530c630a905084a3f9c43fd54c45fc5d4af437aab887f15f5d37c40d3ba2a86c576ef032e723cf95f4f5dc46256d3e7bf6440545f68133217fb620aa2db8a65";
-  sha512.doc = "e2248e9825490474e545c1674d1256ad586332045e2fd5ee5dc84d9965d4df263522277a14676010085a73dcf00d822ffb29117338b3fd3f854b7b0d0ddb5c9f";
-  sha512.source = "d29bd5252e632573797eba99f70172659303d7342ea345228d2ed448fb1c1b6a48aa2448a3cae1bec26849241a5d3e19cbc0c00e777a339dad23ad2864dc5da7";
+  sha512.run = "6d5b59bbad4aea17a5298e73c2f8538e7d98f27ded848096ada4db7b63a50a7f8fc0e725887cc13165c57222b2e3d27ffe4a6cf7abd5d0e1f54c8314b2f73db5";
+  sha512.doc = "62a8651ba04958886591113a9ca831aca0f61d23d94c2105873ff5040db1014c61e0535650ed792e8ae3ff776027680b98d64fac47b5fa30b14cf1c723b99a71";
+  sha512.source = "c7b44356a97790883b1e7ba7bc86bd6d5d334536dbca5388e19fe019f82187d1daeba76567e88946038b99cdf835743ae807a8d0ab383a519ea2decb80d4eb54";
   hasRunfiles = true;
   version = "0.4b";
 };
 "collection-basic" = {
-  revision = 53774;
+  revision = 56569;
   stripPrefix = 0;
   deps."amsfonts" = tl."amsfonts";
   deps."bibtex" = tl."bibtex";
@@ -5629,7 +5918,6 @@ tl: { # no indentation
   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";
@@ -5639,6 +5927,7 @@ tl: { # no indentation
   deps."knuth-local" = tl."knuth-local";
   deps."kpathsea" = tl."kpathsea";
   deps."lua-alt-getopt" = tl."lua-alt-getopt";
+  deps."luahbtex" = tl."luahbtex";
   deps."luatex" = tl."luatex";
   deps."makeindex" = tl."makeindex";
   deps."metafont" = tl."metafont";
@@ -5656,14 +5945,12 @@ tl: { # no indentation
   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 = "57aab47e05657c83c41e81fa1ece61a43b223c76043b7f4c2a3af6c54110ba69ee3421ad7bda591e7f0872a5f2e4def87f338d6d0fa9a931396a37ca76dda521";
+  sha512.run = "39ff4680cb002b6e29dac2fd5005d0d63b279deab21f025a87a7e860110a7eba04748adc11c9bf12f580cfc991380d2f301819801c32f681353c43053f98af48";
 };
 "collection-bibtexextra" = {
-  revision = 53243;
+  revision = 58437;
   stripPrefix = 0;
-  deps."collection-latex" = tl."collection-latex";
   deps."aaai-named" = tl."aaai-named";
   deps."aichej" = tl."aichej";
   deps."ajl" = tl."ajl";
@@ -5683,6 +5970,7 @@ tl: { # no indentation
   deps."bibhtml" = tl."bibhtml";
   deps."biblatex" = tl."biblatex";
   deps."biblatex-abnt" = tl."biblatex-abnt";
+  deps."biblatex-ajc2020unofficial" = tl."biblatex-ajc2020unofficial";
   deps."biblatex-anonymous" = tl."biblatex-anonymous";
   deps."biblatex-apa" = tl."biblatex-apa";
   deps."biblatex-apa6" = tl."biblatex-apa6";
@@ -5701,6 +5989,7 @@ tl: { # no indentation
   deps."biblatex-ext" = tl."biblatex-ext";
   deps."biblatex-fiwi" = tl."biblatex-fiwi";
   deps."biblatex-gb7714-2015" = tl."biblatex-gb7714-2015";
+  deps."biblatex-german-legal" = tl."biblatex-german-legal";
   deps."biblatex-gost" = tl."biblatex-gost";
   deps."biblatex-historian" = tl."biblatex-historian";
   deps."biblatex-ieee" = tl."biblatex-ieee";
@@ -5708,6 +5997,7 @@ tl: { # no indentation
   deps."biblatex-iso690" = tl."biblatex-iso690";
   deps."biblatex-jura2" = tl."biblatex-jura2";
   deps."biblatex-juradiss" = tl."biblatex-juradiss";
+  deps."biblatex-license" = tl."biblatex-license";
   deps."biblatex-lni" = tl."biblatex-lni";
   deps."biblatex-luh-ipw" = tl."biblatex-luh-ipw";
   deps."biblatex-manuscripts-philology" = tl."biblatex-manuscripts-philology";
@@ -5728,11 +6018,15 @@ tl: { # no indentation
   deps."biblatex-science" = tl."biblatex-science";
   deps."biblatex-shortfields" = tl."biblatex-shortfields";
   deps."biblatex-socialscienceshuberlin" = tl."biblatex-socialscienceshuberlin";
+  deps."biblatex-software" = tl."biblatex-software";
   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."biblatex-unified" = tl."biblatex-unified";
+  deps."biblatex-vancouver" = tl."biblatex-vancouver";
+  deps."biblatex2bibitem" = tl."biblatex2bibitem";
   deps."biblist" = tl."biblist";
   deps."bibtexperllibs" = tl."bibtexperllibs";
   deps."bibtopic" = tl."bibtopic";
@@ -5743,13 +6037,14 @@ tl: { # no indentation
   deps."breakcites" = tl."breakcites";
   deps."cell" = tl."cell";
   deps."chbibref" = tl."chbibref";
+  deps."chembst" = tl."chembst";
   deps."chicago" = tl."chicago";
-  deps."chicagoa" = tl."chicagoa";
   deps."chicago-annote" = tl."chicago-annote";
-  deps."chembst" = tl."chembst";
+  deps."chicagoa" = tl."chicagoa";
   deps."chscite" = tl."chscite";
   deps."citeall" = tl."citeall";
   deps."citeref" = tl."citeref";
+  deps."collection-latex" = tl."collection-latex";
   deps."collref" = tl."collref";
   deps."compactbib" = tl."compactbib";
   deps."crossrefware" = tl."crossrefware";
@@ -5780,9 +6075,9 @@ tl: { # no indentation
   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."ltb2bib" = tl."ltb2bib";
   deps."luabibentry" = tl."luabibentry";
   deps."margbib" = tl."margbib";
   deps."multibib" = tl."multibib";
@@ -5809,12 +6104,11 @@ tl: { # no indentation
   deps."windycity" = tl."windycity";
   deps."xcite" = tl."xcite";
   deps."zootaxa-bst" = tl."zootaxa-bst";
-  sha512.run = "51da88d702cff5d127c1f40119cac08df392b0677825e9ececbd3183d1691ceaf1bdafd5b9541a434d37a7562dbd2851b6cac28ee4d3558c8a85dc1ad44566c7";
+  sha512.run = "0a0b978dcb21f9c26e0931c14b7faf7b0d8b5e1229d4180127c6b53899e001620246f2c0a7b0f6f1dc81639aee94701a637ac7af4ab20f144b661686c7d321a3";
 };
 "collection-binextra" = {
-  revision = 53491;
+  revision = 56352;
   stripPrefix = 0;
-  deps."collection-basic" = tl."collection-basic";
   deps."a2ping" = tl."a2ping";
   deps."adhocfilelist" = tl."adhocfilelist";
   deps."arara" = tl."arara";
@@ -5827,6 +6121,7 @@ tl: { # no indentation
   deps."chktex" = tl."chktex";
   deps."clojure-pamphlet" = tl."clojure-pamphlet";
   deps."cluttex" = tl."cluttex";
+  deps."collection-basic" = tl."collection-basic";
   deps."ctan-o-mat" = tl."ctan-o-mat";
   deps."ctan_chk" = tl."ctan_chk";
   deps."ctanbib" = tl."ctanbib";
@@ -5850,6 +6145,8 @@ tl: { # no indentation
   deps."dvisvgm" = tl."dvisvgm";
   deps."findhyph" = tl."findhyph";
   deps."fragmaster" = tl."fragmaster";
+  deps."git-latexdiff" = tl."git-latexdiff";
+  deps."gsftopk" = tl."gsftopk";
   deps."hook-pre-commit-pkg" = tl."hook-pre-commit-pkg";
   deps."installfont" = tl."installfont";
   deps."ketcindy" = tl."ketcindy";
@@ -5860,12 +6157,13 @@ tl: { # no indentation
   deps."latex2nemeth" = tl."latex2nemeth";
   deps."latexdiff" = tl."latexdiff";
   deps."latexfileversion" = tl."latexfileversion";
+  deps."latexindent" = tl."latexindent";
   deps."latexmk" = tl."latexmk";
   deps."latexpand" = tl."latexpand";
-  deps."latexindent" = tl."latexindent";
+  deps."light-latex-make" = tl."light-latex-make";
+  deps."listings-ext" = tl."listings-ext";
   deps."ltxfileinfo" = tl."ltxfileinfo";
   deps."ltximg" = tl."ltximg";
-  deps."listings-ext" = tl."listings-ext";
   deps."luajittex" = tl."luajittex";
   deps."make4ht" = tl."make4ht";
   deps."match_parens" = tl."match_parens";
@@ -5885,6 +6183,7 @@ tl: { # no indentation
   deps."purifyeps" = tl."purifyeps";
   deps."pythontex" = tl."pythontex";
   deps."seetexk" = tl."seetexk";
+  deps."spix" = tl."spix";
   deps."srcredact" = tl."srcredact";
   deps."sty2dtx" = tl."sty2dtx";
   deps."synctex" = tl."synctex";
@@ -5910,16 +6209,13 @@ tl: { # no indentation
   deps."xindex" = tl."xindex";
   deps."xindy" = tl."xindy";
   deps."xpdfopen" = tl."xpdfopen";
-  sha512.run = "306dac78fb385fca7c2de33deded8f13fe1dc7999cc58b5019cb0eafd0ac74f629db627b05a49b1ca7cae431d5aff5bb514329b167ee2c2bb16bba81d8f6dd54";
+  sha512.run = "6c6b6344f7d294bf74f3601850f036543ae6f8dc78bf01e32867d46d7c20089a388f779c445173c5d54e874278e718b697691eb94a5a2029ef64acdb914461ae";
 };
 "collection-context" = {
-  revision = 47139;
+  revision = 54074;
   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";
@@ -5943,6 +6239,7 @@ tl: { # no indentation
   deps."context-letter" = tl."context-letter";
   deps."context-lettrine" = tl."context-lettrine";
   deps."context-mathsets" = tl."context-mathsets";
+  deps."context-notes-zh-cn" = tl."context-notes-zh-cn";
   deps."context-rst" = tl."context-rst";
   deps."context-ruby" = tl."context-ruby";
   deps."context-simplefonts" = tl."context-simplefonts";
@@ -5953,19 +6250,21 @@ tl: { # no indentation
   deps."context-typescripts" = tl."context-typescripts";
   deps."context-vim" = tl."context-vim";
   deps."context-visualcounter" = tl."context-visualcounter";
-  sha512.run = "21aa181d7a3e8c16dbb30e12e30822d18db1386e088103a0987dc2a0a4d611172079ac12d7edd7f9d8923598c1532f7162905940846d6e13e143883bd735996f";
+  deps."jmn" = tl."jmn";
+  deps."npp-for-context" = tl."npp-for-context";
+  sha512.run = "5bd74e1a434549cf31ce31777e9a32f90baa14148e6658633945508a46dbf6611644c4212b53812bb32a399e850517369e3d89bb0e495c89e6f2a979090ed765";
 };
 "collection-fontsextra" = {
-  revision = 53908;
+  revision = 58253;
   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."aesupp" = tl."aesupp";
   deps."alegreya" = tl."alegreya";
+  deps."alfaslabone" = tl."alfaslabone";
   deps."algolrevived" = tl."algolrevived";
   deps."allrunes" = tl."allrunes";
   deps."almendra" = tl."almendra";
@@ -5974,12 +6273,15 @@ tl: { # no indentation
   deps."antiqua" = tl."antiqua";
   deps."antt" = tl."antt";
   deps."archaic" = tl."archaic";
+  deps."archivo" = tl."archivo";
   deps."arev" = tl."arev";
   deps."arimo" = tl."arimo";
+  deps."arvo" = tl."arvo";
   deps."asapsym" = tl."asapsym";
   deps."ascii-font" = tl."ascii-font";
   deps."aspectratio" = tl."aspectratio";
   deps."astro" = tl."astro";
+  deps."atkinson" = tl."atkinson";
   deps."augie" = tl."augie";
   deps."auncial-new" = tl."auncial-new";
   deps."aurical" = tl."aurical";
@@ -6012,9 +6314,11 @@ tl: { # no indentation
   deps."cantarell" = tl."cantarell";
   deps."carlito" = tl."carlito";
   deps."carolmin-ps" = tl."carolmin-ps";
+  deps."cascadia-code" = tl."cascadia-code";
   deps."ccicons" = tl."ccicons";
   deps."cfr-initials" = tl."cfr-initials";
   deps."cfr-lm" = tl."cfr-lm";
+  deps."charissil" = tl."charissil";
   deps."cherokee" = tl."cherokee";
   deps."chivo" = tl."chivo";
   deps."cinzel" = tl."cinzel";
@@ -6023,6 +6327,7 @@ tl: { # no indentation
   deps."cm-lgc" = tl."cm-lgc";
   deps."cm-mf-extra-bold" = tl."cm-mf-extra-bold";
   deps."cm-unicode" = tl."cm-unicode";
+  deps."cmathbb" = tl."cmathbb";
   deps."cmbright" = tl."cmbright";
   deps."cmexb" = tl."cmexb";
   deps."cmll" = tl."cmll";
@@ -6032,6 +6337,7 @@ tl: { # no indentation
   deps."cmupint" = tl."cmupint";
   deps."cochineal" = tl."cochineal";
   deps."coelacanth" = tl."coelacanth";
+  deps."collection-basic" = tl."collection-basic";
   deps."comfortaa" = tl."comfortaa";
   deps."comicneue" = tl."comicneue";
   deps."concmath-fonts" = tl."concmath-fonts";
@@ -6039,6 +6345,7 @@ tl: { # no indentation
   deps."cormorantgaramond" = tl."cormorantgaramond";
   deps."countriesofeurope" = tl."countriesofeurope";
   deps."courier-scaled" = tl."courier-scaled";
+  deps."courierten" = tl."courierten";
   deps."crimson" = tl."crimson";
   deps."crimsonpro" = tl."crimsonpro";
   deps."cryst" = tl."cryst";
@@ -6053,6 +6360,7 @@ tl: { # no indentation
   deps."dingbat" = tl."dingbat";
   deps."domitian" = tl."domitian";
   deps."doublestroke" = tl."doublestroke";
+  deps."doulossil" = tl."doulossil";
   deps."dozenal" = tl."dozenal";
   deps."drm" = tl."drm";
   deps."droid" = tl."droid";
@@ -6065,8 +6373,10 @@ tl: { # no indentation
   deps."ebgaramond-maths" = tl."ebgaramond-maths";
   deps."ecc" = tl."ecc";
   deps."eco" = tl."eco";
+  deps."eczar" = tl."eczar";
   deps."eiad" = tl."eiad";
   deps."eiad-ltx" = tl."eiad-ltx";
+  deps."ektype-tanka" = tl."ektype-tanka";
   deps."electrum" = tl."electrum";
   deps."elvish" = tl."elvish";
   deps."epigrafica" = tl."epigrafica";
@@ -6098,6 +6408,7 @@ tl: { # no indentation
   deps."fouriernc" = tl."fouriernc";
   deps."frcursive" = tl."frcursive";
   deps."frederika2016" = tl."frederika2016";
+  deps."frimurer" = tl."frimurer";
   deps."garamond-libre" = tl."garamond-libre";
   deps."garamond-math" = tl."garamond-math";
   deps."genealogy" = tl."genealogy";
@@ -6117,23 +6428,29 @@ tl: { # no indentation
   deps."gothic" = tl."gothic";
   deps."greenpoint" = tl."greenpoint";
   deps."grotesq" = tl."grotesq";
+  deps."gudea" = tl."gudea";
   deps."hacm" = tl."hacm";
   deps."hands" = tl."hands";
   deps."heuristica" = tl."heuristica";
   deps."hfbright" = tl."hfbright";
   deps."hfoldsty" = tl."hfoldsty";
+  deps."hindmadurai" = tl."hindmadurai";
+  deps."ibarra" = tl."ibarra";
   deps."ifsym" = tl."ifsym";
   deps."imfellenglish" = tl."imfellenglish";
   deps."inconsolata" = tl."inconsolata";
   deps."initials" = tl."initials";
   deps."inriafonts" = tl."inriafonts";
+  deps."inter" = tl."inter";
   deps."ipaex-type1" = tl."ipaex-type1";
   deps."iwona" = tl."iwona";
   deps."jablantile" = tl."jablantile";
   deps."jamtimes" = tl."jamtimes";
+  deps."josefin" = tl."josefin";
   deps."junicode" = tl."junicode";
   deps."kixfont" = tl."kixfont";
   deps."kpfonts" = tl."kpfonts";
+  deps."kpfonts-otf" = tl."kpfonts-otf";
   deps."kurier" = tl."kurier";
   deps."lato" = tl."lato";
   deps."lexend" = tl."lexend";
@@ -6156,6 +6473,7 @@ tl: { # no indentation
   deps."logix" = tl."logix";
   deps."lxfonts" = tl."lxfonts";
   deps."ly1" = tl."ly1";
+  deps."magra" = tl."magra";
   deps."marcellus" = tl."marcellus";
   deps."mathabx" = tl."mathabx";
   deps."mathabx-type1" = tl."mathabx-type1";
@@ -6166,6 +6484,7 @@ tl: { # no indentation
   deps."miama" = tl."miama";
   deps."mintspirit" = tl."mintspirit";
   deps."missaali" = tl."missaali";
+  deps."mlmodern" = tl."mlmodern";
   deps."mnsymbol" = tl."mnsymbol";
   deps."montserrat" = tl."montserrat";
   deps."mpfonts" = tl."mpfonts";
@@ -6180,6 +6499,8 @@ tl: { # no indentation
   deps."nkarta" = tl."nkarta";
   deps."noto" = tl."noto";
   deps."noto-emoji" = tl."noto-emoji";
+  deps."notomath" = tl."notomath";
+  deps."nunito" = tl."nunito";
   deps."obnov" = tl."obnov";
   deps."ocherokee" = tl."ocherokee";
   deps."ocr-b" = tl."ocr-b";
@@ -6191,6 +6512,7 @@ tl: { # no indentation
   deps."oldstandard" = tl."oldstandard";
   deps."opensans" = tl."opensans";
   deps."orkhun" = tl."orkhun";
+  deps."oswald" = tl."oswald";
   deps."overlock" = tl."overlock";
   deps."pacioli" = tl."pacioli";
   deps."paratype" = tl."paratype";
@@ -6200,6 +6522,7 @@ tl: { # no indentation
   deps."playfair" = tl."playfair";
   deps."plex" = tl."plex";
   deps."plex-otf" = tl."plex-otf";
+  deps."plimsoll" = tl."plimsoll";
   deps."poiretone" = tl."poiretone";
   deps."poltawski" = tl."poltawski";
   deps."prodint" = tl."prodint";
@@ -6227,9 +6550,11 @@ tl: { # no indentation
   deps."sourcecodepro" = tl."sourcecodepro";
   deps."sourcesanspro" = tl."sourcesanspro";
   deps."sourceserifpro" = tl."sourceserifpro";
+  deps."spectral" = tl."spectral";
   deps."starfont" = tl."starfont";
   deps."staves" = tl."staves";
   deps."step" = tl."step";
+  deps."stepgreek" = tl."stepgreek";
   deps."stickstoo" = tl."stickstoo";
   deps."stix" = tl."stix";
   deps."stix2-otf" = tl."stix2-otf";
@@ -6263,17 +6588,17 @@ tl: { # no indentation
   deps."yfonts-t1" = tl."yfonts-t1";
   deps."yinit-otf" = tl."yinit-otf";
   deps."zlmtt" = tl."zlmtt";
-  sha512.run = "c98b0241f30fbc7be047c0e1ecda32be6ef0d4e7737906e230ba13de55e0847bf29e2a54e87a84a4270fa023608280b063586830c7cd9c3715f392aba4504b0d";
+  sha512.run = "27d3200f8bab180da6c0ce7b6fc9773950fa0755d8f7ae3b43b76eeaa7f960a99ab1941793bb50e3d7eaf0b2b3fe0bd6b5261ba9ed645d839cf8a3075b2aaa2a";
 };
 "collection-fontsrecommended" = {
-  revision = 53774;
+  revision = 54074;
   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."collection-basic" = tl."collection-basic";
   deps."courier" = tl."courier";
   deps."euro" = tl."euro";
   deps."euro-ce" = tl."euro-ce";
@@ -6282,9 +6607,9 @@ tl: { # no indentation
   deps."helvetic" = tl."helvetic";
   deps."lm" = tl."lm";
   deps."lm-math" = tl."lm-math";
+  deps."manfnt-font" = tl."manfnt-font";
   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";
@@ -6302,64 +6627,65 @@ tl: { # no indentation
   deps."wasysym" = tl."wasysym";
   deps."zapfchan" = tl."zapfchan";
   deps."zapfding" = tl."zapfding";
-  sha512.run = "9d2691b1deb294c6a947b4412470f84eb7beee9b8b6ce6a536cdec6a86de7ade51b58d332e8718fb82acac7fbe8980c184ccdc73d720feb8df40cb414c8cb5c2";
+  sha512.run = "eaa6e54780a0813a88102258ee3bd7a4640787be0b89eff4ba2c9cc19298bf3e2799ffab4e03e49f20131d07fbac9f601a7223fc1b47257dd0feeb04797c56a8";
 };
 "collection-fontutils" = {
-  revision = 53559;
+  revision = 57089;
   stripPrefix = 0;
-  deps."collection-basic" = tl."collection-basic";
   deps."accfonts" = tl."accfonts";
   deps."afm2pl" = tl."afm2pl";
+  deps."albatross" = tl."albatross";
+  deps."collection-basic" = tl."collection-basic";
   deps."dosepsbin" = tl."dosepsbin";
+  deps."dvipsconfig" = tl."dvipsconfig";
   deps."epstopdf" = tl."epstopdf";
+  deps."fontinst" = tl."fontinst";
+  deps."fontools" = tl."fontools";
   deps."fontware" = tl."fontware";
   deps."lcdftypetools" = tl."lcdftypetools";
   deps."metatype1" = tl."metatype1";
-  deps."ps2pk" = tl."ps2pk";
+  deps."mf2pt1" = tl."mf2pt1";
   deps."ps2eps" = tl."ps2eps";
+  deps."ps2pk" = tl."ps2pk";
   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 = "bd36ffb3bdf0c9df289f73143288b4d1fae6a4fd9c391590274b3eb3365e44dceb67f091e0d94466c7e6110a19a5b8c4b47e8d0591d04bdfa664b4fc2a58c7fe";
+  sha512.run = "9bc0964c2ce55e4bcab2b2ad0ae1c784a49ffc981620ef3cd549052a5e2b201325ddc444d9afbe57da6dc64d1890d61be5e97caa2c9c63ebbafc5f5d0322acae";
 };
 "collection-formatsextra" = {
-  revision = 44177;
+  revision = 54074;
   stripPrefix = 0;
+  deps."aleph" = tl."aleph";
+  deps."antomega" = tl."antomega";
   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."lambda" = tl."lambda";
   deps."lollipop" = tl."lollipop";
   deps."mltex" = tl."mltex";
+  deps."mxedruli" = tl."mxedruli";
+  deps."omega" = tl."omega";
+  deps."omegaware" = tl."omegaware";
+  deps."otibet" = tl."otibet";
   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";
+  sha512.run = "7700a6cc293a1d45208794db34a276d5de5c975fe91cb00e5b1896515f288b05437344f00997501a54ad2af515bccc983930a75ddda55c6951edc625cd6bda35";
 };
 "collection-games" = {
-  revision = 51178;
+  revision = 56623;
   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."collection-latex" = tl."collection-latex";
   deps."crossword" = tl."crossword";
   deps."crosswrd" = tl."crosswrd";
   deps."egameps" = tl."egameps";
@@ -6374,11 +6700,13 @@ tl: { # no indentation
   deps."labyrinth" = tl."labyrinth";
   deps."logicpuzzle" = tl."logicpuzzle";
   deps."musikui" = tl."musikui";
+  deps."nimsticks" = tl."nimsticks";
   deps."onedown" = tl."onedown";
   deps."othello" = tl."othello";
   deps."othelloboard" = tl."othelloboard";
   deps."pas-crosswords" = tl."pas-crosswords";
   deps."psgo" = tl."psgo";
+  deps."realtranspose" = tl."realtranspose";
   deps."reverxii" = tl."reverxii";
   deps."rubik" = tl."rubik";
   deps."schwalbe-chess" = tl."schwalbe-chess";
@@ -6390,17 +6718,17 @@ tl: { # no indentation
   deps."sudokubundle" = tl."sudokubundle";
   deps."xq" = tl."xq";
   deps."xskak" = tl."xskak";
-  sha512.run = "bfa055b06a2a56cdac916627c79ad94242fee0b1ae747f721e0932452eedbff05566211a9e41aa8e66607b27d753db5edf5d0ed04cbf1ebb2944d3c4cebbf108";
+  sha512.run = "654787f158be7c9d7b019fb7091b8c9f7d4319262fc21f5e324c52e7484b4bcec3a6f211a60a2b13abfe964e09f7eb69b94ab8ef8a3a598fd50dcb587e3ca813";
 };
 "collection-humanities" = {
-  revision = 45363;
+  revision = 56575;
   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."collection-latex" = tl."collection-latex";
   deps."covington" = tl."covington";
   deps."diadia" = tl."diadia";
   deps."dramatist" = tl."dramatist";
@@ -6424,6 +6752,7 @@ tl: { # no indentation
   deps."linguex" = tl."linguex";
   deps."liturg" = tl."liturg";
   deps."metrix" = tl."metrix";
+  deps."nnext" = tl."nnext";
   deps."parallel" = tl."parallel";
   deps."parrun" = tl."parrun";
   deps."phonrule" = tl."phonrule";
@@ -6442,17 +6771,16 @@ tl: { # no indentation
   deps."sides" = tl."sides";
   deps."stage" = tl."stage";
   deps."textglos" = tl."textglos";
-  deps."theatre" = tl."theatre";
   deps."thalie" = tl."thalie";
+  deps."theatre" = tl."theatre";
   deps."tree-dvips" = tl."tree-dvips";
   deps."verse" = tl."verse";
   deps."xyling" = tl."xyling";
-  sha512.run = "94e1a021c967f623d24a3720199293f564ccc3e7339c2e58a456163d617740d3a6bfc8b5fd54fc288f269ebe7a4eafddaba0c6c78c66ea565bb2e0d753b7ebad";
+  sha512.run = "8239a85051576d691f7a367b2858dbc191e0545d88e0f193107cf68ccc527c7f4980a6a18cd14bf7735277ea2552955d7be50520290a96a24ff3bc856a13742e";
 };
 "collection-langarabic" = {
-  revision = 50080;
+  revision = 56215;
   stripPrefix = 0;
-  deps."collection-basic" = tl."collection-basic";
   deps."alkalami" = tl."alkalami";
   deps."alpha-persian" = tl."alpha-persian";
   deps."amiri" = tl."amiri";
@@ -6462,8 +6790,10 @@ tl: { # no indentation
   deps."arabtex" = tl."arabtex";
   deps."bidi" = tl."bidi";
   deps."bidihl" = tl."bidihl";
+  deps."collection-basic" = tl."collection-basic";
   deps."dad" = tl."dad";
   deps."ghab" = tl."ghab";
+  deps."hvarabic" = tl."hvarabic";
   deps."hyphen-arabic" = tl."hyphen-arabic";
   deps."hyphen-farsi" = tl."hyphen-farsi";
   deps."imsproc" = tl."imsproc";
@@ -6472,71 +6802,74 @@ tl: { # no indentation
   deps."luabidi" = tl."luabidi";
   deps."na-box" = tl."na-box";
   deps."persian-bib" = tl."persian-bib";
+  deps."quran" = tl."quran";
   deps."sexam" = tl."sexam";
   deps."simurgh" = tl."simurgh";
+  deps."texnegar" = tl."texnegar";
   deps."tram" = tl."tram";
   deps."xepersian" = tl."xepersian";
-  sha512.run = "4c0f4860c69b0be0e3bc909c577e2795fcb3c15b65961d7ada1624cc3c9f77b104f8a58a6d390c1085c464ae043c65b4912da9faa0e8334964d0c302952792fe";
+  deps."xepersian-hm" = tl."xepersian-hm";
+  sha512.run = "3c9a530b444eb34dd9c5a1a0b49e662edda54868820633e281c0501146a59b0d0671a61ac6407049913640320d28d4c6e2afbf6907b152176de55d865da5fafb";
 };
 "collection-langchinese" = {
-  revision = 50930;
+  revision = 56196;
   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."collection-langcjk" = tl."collection-langcjk";
   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."install-latex-guide-zh-cn" = tl."install-latex-guide-zh-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."qyxf-book" = tl."qyxf-book";
   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."xtuthesis" = tl."xtuthesis";
   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";
+  sha512.run = "a3d86f05a7ed20b18321709e4fde225977c37f409aa701467c9c0a13008957755befc873bd1aacf2db7dd8eea1e43e0c610864ddc1acfc5a0eff8e51444aa4fb";
 };
 "collection-langcjk" = {
-  revision = 45194;
+  revision = 54191;
   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."cjk-gs-integrate" = tl."cjk-gs-integrate";
   deps."cjkpunct" = tl."cjkpunct";
   deps."cjkutils" = tl."cjkutils";
+  deps."collection-basic" = tl."collection-basic";
   deps."dnp" = tl."dnp";
-  deps."garuda-c90" = tl."garuda-c90";
   deps."fixjfm" = tl."fixjfm";
+  deps."garuda-c90" = tl."garuda-c90";
   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";
+  sha512.run = "d6186e42081f4a1c2e15cf196de053108e7f8e046bab631e122b3d44ad8217bf83aeaf915c4fda7ebcb1d4be2a8f6dd1fa7027ed8624d31f16257ab8357d4a0b";
 };
 "collection-langcyrillic" = {
-  revision = 53160;
+  revision = 54074;
   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";
@@ -6545,6 +6878,8 @@ tl: { # no indentation
   deps."babel-ukrainian" = tl."babel-ukrainian";
   deps."churchslavonic" = tl."churchslavonic";
   deps."cmcyr" = tl."cmcyr";
+  deps."collection-basic" = tl."collection-basic";
+  deps."collection-latex" = tl."collection-latex";
   deps."cyrillic" = tl."cyrillic";
   deps."cyrillic-bin" = tl."cyrillic-bin";
   deps."cyrplain" = tl."cyrplain";
@@ -6582,16 +6917,16 @@ tl: { # no indentation
   deps."texlive-sr" = tl."texlive-sr";
   deps."ukrhyph" = tl."ukrhyph";
   deps."xecyrmongolian" = tl."xecyrmongolian";
-  sha512.run = "28ee3e3b72c9297cc2ae6617b80706ff47d97450c5b5547b5be493d156ee420c822cd84909bce148d596aad1601289f5b6167130aa87aca7c2edbf18d248dc05";
+  sha512.run = "43ba5d0f21162fbdb6fd0e9dc7c990fa845918704020da8ca5c6770139370be55f4b707f98708c28b472f9500ee25ea734bdd96c5541a22e66b69c03ae777ad0";
 };
 "collection-langczechslovak" = {
-  revision = 32550;
+  revision = 54074;
   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."collection-basic" = tl."collection-basic";
+  deps."collection-latex" = tl."collection-latex";
   deps."cs" = tl."cs";
   deps."csbulletin" = tl."csbulletin";
   deps."cslatex" = tl."cslatex";
@@ -6599,24 +6934,24 @@ tl: { # no indentation
   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";
+  deps."vlna" = tl."vlna";
+  sha512.run = "719c321173ca12660891080dae509080934f72d13a9417b2c40a22add963c7c5a1ee95d3b306f0d6c26b0db97d69979c27fbb15d1690849aa03b06d4b0193a67";
 };
 "collection-langenglish" = {
-  revision = 52239;
+  revision = 58290;
   stripPrefix = 0;
-  deps."collection-basic" = tl."collection-basic";
-  deps."hyphen-english" = tl."hyphen-english";
   deps."MemoirChapStyles" = tl."MemoirChapStyles";
   deps."Type1fonts" = tl."Type1fonts";
+  deps."amiweb2c-guide" = tl."amiweb2c-guide";
   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."collection-basic" = tl."collection-basic";
   deps."components-of-TeX" = tl."components-of-TeX";
   deps."comprehensive" = tl."comprehensive";
   deps."dickimaw" = tl."dickimaw";
@@ -6627,9 +6962,11 @@ tl: { # no indentation
   deps."gentle" = tl."gentle";
   deps."guide-to-latex" = tl."guide-to-latex";
   deps."happy4th" = tl."happy4th";
+  deps."hyphen-english" = tl."hyphen-english";
   deps."impatient" = tl."impatient";
   deps."intro-scientific" = tl."intro-scientific";
-  deps."knuth" = tl."knuth";
+  deps."knuth-errata" = tl."knuth-errata";
+  deps."knuth-pdf" = tl."knuth-pdf";
   deps."l2tabu-english" = tl."l2tabu-english";
   deps."latex-brochure" = tl."latex-brochure";
   deps."latex-course" = tl."latex-course";
@@ -6645,7 +6982,6 @@ tl: { # no indentation
   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";
@@ -6654,30 +6990,30 @@ tl: { # no indentation
   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."startlatex2e" = tl."startlatex2e";
   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-nutshell" = tl."tex-nutshell";
   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."tlmgrbasics" = tl."tlmgrbasics";
   deps."undergradmath" = tl."undergradmath";
   deps."visualfaq" = tl."visualfaq";
   deps."webguide" = tl."webguide";
   deps."xetexref" = tl."xetexref";
-  sha512.run = "1f003f1a719bf29ee0a0167784f48cc6aef203f714a5024c52b1e3791d47d2cae816056e78816dabb806059cb4f3be066d722f8191ca67e3d72e76b274759e89";
+  sha512.run = "6d8bd7a5722a0720003c831c38ddc66c4af4fdc465c676050d71fb2bfec9c66791044b8d7c62399953ec4017c1935062ccbffd4c66028df79c9dd59fe42073b3";
 };
 "collection-langeuropean" = {
-  revision = 46803;
+  revision = 58626;
   stripPrefix = 0;
-  deps."collection-basic" = tl."collection-basic";
   deps."armtex" = tl."armtex";
   deps."babel-albanian" = tl."babel-albanian";
   deps."babel-bosnian" = tl."babel-bosnian";
@@ -6706,6 +7042,7 @@ tl: { # no indentation
   deps."babel-swedish" = tl."babel-swedish";
   deps."babel-turkish" = tl."babel-turkish";
   deps."babel-welsh" = tl."babel-welsh";
+  deps."collection-basic" = tl."collection-basic";
   deps."finbib" = tl."finbib";
   deps."gloss-occitan" = tl."gloss-occitan";
   deps."hrlatex" = tl."hrlatex";
@@ -6723,6 +7060,7 @@ tl: { # no indentation
   deps."hyphen-latin" = tl."hyphen-latin";
   deps."hyphen-latvian" = tl."hyphen-latvian";
   deps."hyphen-lithuanian" = tl."hyphen-lithuanian";
+  deps."hyphen-macedonian" = tl."hyphen-macedonian";
   deps."hyphen-norwegian" = tl."hyphen-norwegian";
   deps."hyphen-occitan" = tl."hyphen-occitan";
   deps."hyphen-piedmontese" = tl."hyphen-piedmontese";
@@ -6740,15 +7078,16 @@ tl: { # no indentation
   deps."lshort-slovenian" = tl."lshort-slovenian";
   deps."lshort-turkish" = tl."lshort-turkish";
   deps."nevelok" = tl."nevelok";
+  deps."rojud" = tl."rojud";
   deps."swebib" = tl."swebib";
   deps."turkmen" = tl."turkmen";
-  sha512.run = "9505445397888b80e7f92026c63d4ec053758f835d6b217902639ecef6670f85a49e308891381be0340b43e7a793885dac79f88e75c376226d474682cedc3b12";
+  sha512.run = "a1fe7a0531b3a0581591988c62cba7c3032bab5ed8291edbff2c8573adae0ce96ea9087c7f4b018ad0ae341070a826501fb6a92d768ae939a632bae41c0d84f4";
 };
 "collection-langfrench" = {
-  revision = 51322;
+  revision = 57491;
   stripPrefix = 0;
-  deps."collection-basic" = tl."collection-basic";
   deps."aeguill" = tl."aeguill";
+  deps."annee-scolaire" = tl."annee-scolaire";
   deps."apprendre-a-programmer-en-tex" = tl."apprendre-a-programmer-en-tex";
   deps."apprends-latex" = tl."apprends-latex";
   deps."babel-basque" = tl."babel-basque";
@@ -6758,13 +7097,16 @@ tl: { # no indentation
   deps."bib-fr" = tl."bib-fr";
   deps."bibleref-french" = tl."bibleref-french";
   deps."booktabs-fr" = tl."booktabs-fr";
+  deps."collection-basic" = tl."collection-basic";
   deps."droit-fr" = tl."droit-fr";
   deps."e-french" = tl."e-french";
   deps."epslatex-fr" = tl."epslatex-fr";
+  deps."expose-expl3-dunkerque-2019" = tl."expose-expl3-dunkerque-2019";
   deps."facture" = tl."facture";
   deps."formation-latex-ul" = tl."formation-latex-ul";
   deps."frenchmath" = tl."frenchmath";
   deps."frletter" = tl."frletter";
+  deps."frpseudocode" = tl."frpseudocode";
   deps."hyphen-basque" = tl."hyphen-basque";
   deps."hyphen-french" = tl."hyphen-french";
   deps."impatient-fr" = tl."impatient-fr";
@@ -6773,6 +7115,8 @@ tl: { # no indentation
   deps."latex2e-help-texinfo-fr" = tl."latex2e-help-texinfo-fr";
   deps."lshort-french" = tl."lshort-french";
   deps."mafr" = tl."mafr";
+  deps."matapli" = tl."matapli";
+  deps."profcollege" = tl."profcollege";
   deps."tabvar" = tl."tabvar";
   deps."tdsfrmath" = tl."tdsfrmath";
   deps."texlive-fr" = tl."texlive-fr";
@@ -6782,22 +7126,21 @@ tl: { # no indentation
   deps."translation-tabbing-fr" = tl."translation-tabbing-fr";
   deps."variations" = tl."variations";
   deps."visualtikz" = tl."visualtikz";
-  sha512.run = "be5230f2fec255b9bf7220a9ad33930032ef617de8665d2c35c4360852f77d2764dbe1d7917bab3552f6098e0749cc5e0a9e001bac87abbb5b0de6af24ee1eed";
+  sha512.run = "da9bc3d0e81b2848a4517aecefd8dbdf98b04f46b3a9631c3d7f07256a9454db59e9f80379fbb07827b3c178f671b21b087a0e2fd780e1e10611cbc8ddfbad3c";
 };
 "collection-langgerman" = {
-  revision = 53815;
+  revision = 55706;
   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."collection-basic" = tl."collection-basic";
   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."dtk-bibliography" = tl."dtk-bibliography";
   deps."etdipa" = tl."etdipa";
   deps."etoolbox-de" = tl."etoolbox-de";
   deps."fifinddo-info" = tl."fifinddo-info";
@@ -6809,16 +7152,12 @@ tl: { # no indentation
   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."quran-de" = tl."quran-de";
   deps."r_und_s" = tl."r_und_s";
   deps."schulmathematik" = tl."schulmathematik";
   deps."templates-fenn" = tl."templates-fenn";
@@ -6838,18 +7177,17 @@ tl: { # no indentation
   deps."uhrzeit" = tl."uhrzeit";
   deps."umlaute" = tl."umlaute";
   deps."voss-mathcol" = tl."voss-mathcol";
-  sha512.run = "a73e281ccb849825e3a1996273cbd34ef7337fcf5368f556c2909a029fbedb10672a18b984444574cde3a2b39d11a6f23f17bedd382268a2b6aa2226c5a26d61";
+  sha512.run = "19b9f47b68ca6068900c413d8216e13c20d25ab084cdcbd500694a18a10cbaa35ba5681be09392e0b20873788519a436c28c1ea89a728e3f546083ce0883c15c";
 };
 "collection-langgreek" = {
-  revision = 44192;
+  revision = 54139;
   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."collection-basic" = tl."collection-basic";
   deps."gfsbaskerville" = tl."gfsbaskerville";
   deps."gfsporson" = tl."gfsporson";
   deps."greek-fontenc" = tl."greek-fontenc";
@@ -6857,8 +7195,8 @@ tl: { # no indentation
   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."hyphen-greek" = tl."hyphen-greek";
   deps."ibycus-babel" = tl."ibycus-babel";
   deps."ibygrk" = tl."ibygrk";
   deps."kerkis" = tl."kerkis";
@@ -6868,17 +7206,18 @@ tl: { # no indentation
   deps."teubner" = tl."teubner";
   deps."xgreek" = tl."xgreek";
   deps."yannisgr" = tl."yannisgr";
-  sha512.run = "9633d376e164895cc7ea0d1a18759c1f06c71b83e612c10069dfd18237d61afab99170c03a9a1ba461d43d4273c7228f41f899dd77dc9308a8d329da6b336cba";
+  sha512.run = "15a0ac0f1e4e3c4f1e107e34ae2794e637b20a00e1d40f3a8d8fda225ff8a9e948fb77153b043bbcd0e7aaef4840a97ce9e19ae059ce2560d468fc373fc37cfa";
 };
 "collection-langitalian" = {
-  revision = 53306;
+  revision = 55129;
   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."antanilipsum" = tl."antanilipsum";
   deps."babel-italian" = tl."babel-italian";
   deps."codicefiscaleitaliano" = tl."codicefiscaleitaliano";
+  deps."collection-basic" = tl."collection-basic";
   deps."fancyhdr-it" = tl."fancyhdr-it";
   deps."fixltxhyph" = tl."fixltxhyph";
   deps."frontespizio" = tl."frontespizio";
@@ -6891,12 +7230,11 @@ tl: { # no indentation
   deps."psfrag-italian" = tl."psfrag-italian";
   deps."texlive-it" = tl."texlive-it";
   deps."verifica" = tl."verifica";
-  sha512.run = "2b172a37bd15ab85cdfa52f25c1b7310c23af5f9f4925cd678ee7a6f7731e4ba39fb866de2df05d6e06f3483303a9a4bfa60b65edd035e1cf55d6f5c004413b9";
+  sha512.run = "6ec5e8a62e3c1ed8e3c23542381091d38c77af507af7088a55e44f1e34b85d01ec19342db4541d9d6cd712c0929d54a3fc663e1d8fde3c53fef0d6fc43be4994";
 };
 "collection-langjapanese" = {
-  revision = 53811;
+  revision = 58754;
   stripPrefix = 0;
-  deps."collection-langcjk" = tl."collection-langcjk";
   deps."ascmac" = tl."ascmac";
   deps."babel-japanese" = tl."babel-japanese";
   deps."bxbase" = tl."bxbase";
@@ -6909,8 +7247,10 @@ tl: { # no indentation
   deps."bxjscls" = tl."bxjscls";
   deps."bxorigcapt" = tl."bxorigcapt";
   deps."bxwareki" = tl."bxwareki";
+  deps."collection-langcjk" = tl."collection-langcjk";
   deps."convbkmk" = tl."convbkmk";
   deps."endnotesj" = tl."endnotesj";
+  deps."gckanbun" = tl."gckanbun";
   deps."gentombow" = tl."gentombow";
   deps."haranoaji" = tl."haranoaji";
   deps."haranoaji-extra" = tl."haranoaji-extra";
@@ -6920,6 +7260,7 @@ tl: { # no indentation
   deps."japanese-otf" = tl."japanese-otf";
   deps."japanese-otf-uptex" = tl."japanese-otf-uptex";
   deps."jlreq" = tl."jlreq";
+  deps."jlreq-deluxe" = tl."jlreq-deluxe";
   deps."jsclasses" = tl."jsclasses";
   deps."lshort-japanese" = tl."lshort-japanese";
   deps."luatexja" = tl."luatexja";
@@ -6951,14 +7292,14 @@ tl: { # no indentation
   deps."wadalab" = tl."wadalab";
   deps."zxjafbfont" = tl."zxjafbfont";
   deps."zxjatype" = tl."zxjatype";
-  sha512.run = "3d9cc9c20a4ef6dbacae6fda18e625fc3828b4f899460d8e920217b79e19aab5601bd7146e6adaa6d599c81a7424390a98c3b8a26dd5ac759caa57fa74fcb5c4";
+  sha512.run = "7bccea1e7b80bf4ad0af3f0f6b5636088cdac94562fc87b4b619cdef5c9b2d0abef1ab588a6525acf920449a3bdf2e201f146f8ccba2851cdb70b46da92128fb";
 };
 "collection-langkorean" = {
-  revision = 53506;
+  revision = 54074;
   stripPrefix = 0;
-  deps."collection-langcjk" = tl."collection-langcjk";
   deps."baekmuk" = tl."baekmuk";
   deps."cjk-ko" = tl."cjk-ko";
+  deps."collection-langcjk" = tl."collection-langcjk";
   deps."kotex-oblivoir" = tl."kotex-oblivoir";
   deps."kotex-plain" = tl."kotex-plain";
   deps."kotex-utf" = tl."kotex-utf";
@@ -6969,15 +7310,15 @@ tl: { # no indentation
   deps."uhc" = tl."uhc";
   deps."unfonts-core" = tl."unfonts-core";
   deps."unfonts-extra" = tl."unfonts-extra";
-  sha512.run = "6f1ae7dfcee95eb5f9c8d0b6545ccdd159e63684b7bba22ebe4280dd2e13cbfb6518274eb131f1502bd99ac16114b4e694105e366631afe484caa22eee94b9d7";
+  sha512.run = "2d93df728d34137c8f9a884aa2871a2980e806672006f2c5f0c5f79412d5789c6f94958363cfc9a78b5a97a7d76bbb6cb157b2cb2a8a283f7afdfd838fa24883";
 };
 "collection-langother" = {
-  revision = 52581;
+  revision = 57757;
   stripPrefix = 0;
-  deps."collection-basic" = tl."collection-basic";
+  deps."aalok" = tl."aalok";
+  deps."akshar" = tl."akshar";
   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";
@@ -6991,14 +7332,18 @@ tl: { # no indentation
   deps."bangtex" = tl."bangtex";
   deps."bengali" = tl."bengali";
   deps."burmese" = tl."burmese";
+  deps."chhaya" = tl."chhaya";
   deps."cjhebrew" = tl."cjhebrew";
+  deps."collection-basic" = tl."collection-basic";
   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."hindawi-latex-template" = tl."hindawi-latex-template";
   deps."hyphen-afrikaans" = tl."hyphen-afrikaans";
+  deps."hyphen-armenian" = tl."hyphen-armenian";
   deps."hyphen-coptic" = tl."hyphen-coptic";
   deps."hyphen-esperanto" = tl."hyphen-esperanto";
   deps."hyphen-ethiopic" = tl."hyphen-ethiopic";
@@ -7014,8 +7359,10 @@ tl: { # no indentation
   deps."latino-sine-flexione" = tl."latino-sine-flexione";
   deps."lshort-thai" = tl."lshort-thai";
   deps."lshort-vietnamese" = tl."lshort-vietnamese";
+  deps."marathi" = tl."marathi";
   deps."ntheorem-vn" = tl."ntheorem-vn";
   deps."padauk" = tl."padauk";
+  deps."quran-bn" = tl."quran-bn";
   deps."quran-ur" = tl."quran-ur";
   deps."sanskrit" = tl."sanskrit";
   deps."sanskrit-t1" = tl."sanskrit-t1";
@@ -7027,16 +7374,16 @@ tl: { # no indentation
   deps."wnri" = tl."wnri";
   deps."wnri-latex" = tl."wnri-latex";
   deps."xetex-devanagari" = tl."xetex-devanagari";
-  sha512.run = "e69c9003086890a627c9e7bafb9e76e722e3bd111af1ba7b36b393e81a536752fb6355455a491effa5aaabe286c97e16fd9d6688a237656c9d3e63437ec2b718";
+  sha512.run = "0594347c16da942376cecee568ca57700245e744b84eeec39b5381025743de24f4954005fe5778dca3f0c44a5e2cd918eaf5f38db1c8771e5850a395e3040f7c";
 };
 "collection-langpolish" = {
-  revision = 44371;
+  revision = 54074;
   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."collection-basic" = tl."collection-basic";
+  deps."collection-latex" = tl."collection-latex";
   deps."gustlib" = tl."gustlib";
   deps."gustprog" = tl."gustprog";
   deps."hyphen-polish" = tl."hyphen-polish";
@@ -7051,14 +7398,14 @@ tl: { # no indentation
   deps."tex-virtual-academy-pl" = tl."tex-virtual-academy-pl";
   deps."texlive-pl" = tl."texlive-pl";
   deps."utf8mex" = tl."utf8mex";
-  sha512.run = "38799df728e830c93a50928efe5f337c91e34b97368e4cce4707e6cbca0a8ee22b9edc528084034a86c72a748367c3f46af37fbe87f5171951563d98f836de58";
+  sha512.run = "fc0d08f70aeb83869109290e6d1585d513097dcd4e17791752ecd3d26ac202838afb5931f78ceaeeaf72c63b18fe9183edd650c075d03188f24cb2caded178de";
 };
 "collection-langportuguese" = {
-  revision = 51640;
+  revision = 54074;
   stripPrefix = 0;
-  deps."collection-basic" = tl."collection-basic";
   deps."babel-portuges" = tl."babel-portuges";
   deps."beamer-tut-pt" = tl."beamer-tut-pt";
+  deps."collection-basic" = tl."collection-basic";
   deps."cursolatex" = tl."cursolatex";
   deps."feupphdteses" = tl."feupphdteses";
   deps."hyphen-portuguese" = tl."hyphen-portuguese";
@@ -7068,16 +7415,15 @@ tl: { # no indentation
   deps."numberpt" = tl."numberpt";
   deps."ordinalpt" = tl."ordinalpt";
   deps."xypic-tut-pt" = tl."xypic-tut-pt";
-  sha512.run = "d805cfa253db9af2c74f9aa072b384f7cdb775258d5063ff33713a60977899ef7b833d5bc5c5b589d9b4f61737c1a48209c25481571dc3be32d5ebdf43430340";
+  sha512.run = "16d67d288fb702807b43dcf8da044a45206c27c5cf0d953688fc341966fb166db8cec69b727b1de079b9bf434f024f7338eaf34529510cab7881147d1635b43d";
 };
 "collection-langspanish" = {
-  revision = 40587;
+  revision = 54141;
   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."collection-basic" = tl."collection-basic";
   deps."es-tex-faq" = tl."es-tex-faq";
   deps."hyphen-catalan" = tl."hyphen-catalan";
   deps."hyphen-galician" = tl."hyphen-galician";
@@ -7086,14 +7432,12 @@ tl: { # no indentation
   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";
+  sha512.run = "88bdc5cefd5519bc80e50e2d808abf32aae8f7c730023afab3babb82ab817dc034c78d42b4143135df187343de7164a8fd94dc95c5ec8909e317a2f5628de15e";
 };
 "collection-latex" = {
-  revision = 53921;
+  revision = 57048;
   stripPrefix = 0;
-  deps."collection-basic" = tl."collection-basic";
   deps."ae" = tl."ae";
   deps."amscls" = tl."amscls";
   deps."amsmath" = tl."amsmath";
@@ -7107,16 +7451,19 @@ tl: { # no indentation
   deps."bitset" = tl."bitset";
   deps."bookmark" = tl."bookmark";
   deps."carlisle" = tl."carlisle";
+  deps."collection-basic" = tl."collection-basic";
   deps."colortbl" = tl."colortbl";
   deps."epstopdf-pkg" = tl."epstopdf-pkg";
   deps."etexcmds" = tl."etexcmds";
   deps."fancyhdr" = tl."fancyhdr";
+  deps."firstaid" = tl."firstaid";
   deps."fix2col" = tl."fix2col";
   deps."geometry" = tl."geometry";
   deps."gettitlestring" = tl."gettitlestring";
   deps."graphics" = tl."graphics";
   deps."graphics-cfg" = tl."graphics-cfg";
   deps."grfext" = tl."grfext";
+  deps."hopatch" = tl."hopatch";
   deps."hycolor" = tl."hycolor";
   deps."hyperref" = tl."hyperref";
   deps."intcalc" = tl."intcalc";
@@ -7125,6 +7472,7 @@ tl: { # no indentation
   deps."kvsetkeys" = tl."kvsetkeys";
   deps."l3backend" = tl."l3backend";
   deps."l3kernel" = tl."l3kernel";
+  deps."l3packages" = tl."l3packages";
   deps."latex" = tl."latex";
   deps."latex-bin" = tl."latex-bin";
   deps."latex-fonts" = tl."latex-fonts";
@@ -7136,6 +7484,7 @@ tl: { # no indentation
   deps."mptopdf" = tl."mptopdf";
   deps."natbib" = tl."natbib";
   deps."oberdiek" = tl."oberdiek";
+  deps."pagesel" = tl."pagesel";
   deps."pdfescape" = tl."pdfescape";
   deps."pslatex" = tl."pslatex";
   deps."psnfss" = tl."psnfss";
@@ -7146,13 +7495,11 @@ tl: { # no indentation
   deps."tools" = tl."tools";
   deps."uniquecounter" = tl."uniquecounter";
   deps."url" = tl."url";
-  sha512.run = "0dbb2072e05a4f11ba940b9672d86c6c87a765c584c258271b93589382401ba96a296a00ad446645357cded4bfc44b60aa21df4b923e567aadf2b220f34f2dfb";
+  sha512.run = "0568a3251d71fb3106fbb3961427200419ae1df22d39b5e72c608e2d94fc35a0e5c77fbe41bbb6fa33610321f2620624264d99675e2f88e72f9d156693143a7e";
 };
 "collection-latexextra" = {
-  revision = 53921;
+  revision = 58777;
   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";
@@ -7182,7 +7529,6 @@ tl: { # no indentation
   deps."alertmessage" = tl."alertmessage";
   deps."alnumsec" = tl."alnumsec";
   deps."alphalph" = tl."alphalph";
-  deps."alterqcm" = tl."alterqcm";
   deps."altfont" = tl."altfont";
   deps."amsaddr" = tl."amsaddr";
   deps."animate" = tl."animate";
@@ -7202,12 +7548,14 @@ tl: { # no indentation
   deps."askinclude" = tl."askinclude";
   deps."assignment" = tl."assignment";
   deps."assoccnt" = tl."assoccnt";
+  deps."association-matrix" = tl."association-matrix";
   deps."atenddvi" = tl."atenddvi";
   deps."attachfile" = tl."attachfile";
   deps."aurl" = tl."aurl";
   deps."authoraftertitle" = tl."authoraftertitle";
   deps."authorarchive" = tl."authorarchive";
   deps."authorindex" = tl."authorindex";
+  deps."autofancyhdr" = tl."autofancyhdr";
   deps."autonum" = tl."autonum";
   deps."autopdf" = tl."autopdf";
   deps."avremu" = tl."avremu";
@@ -7217,8 +7565,9 @@ tl: { # no indentation
   deps."bashful" = tl."bashful";
   deps."basicarith" = tl."basicarith";
   deps."bchart" = tl."bchart";
-  deps."beamer2thesis" = tl."beamer2thesis";
   deps."beamer-rl" = tl."beamer-rl";
+  deps."beamer2thesis" = tl."beamer2thesis";
+  deps."beamerappendixnote" = tl."beamerappendixnote";
   deps."beameraudience" = tl."beameraudience";
   deps."beamerauxtheme" = tl."beamerauxtheme";
   deps."beamercolorthemeowl" = tl."beamercolorthemeowl";
@@ -7233,11 +7582,15 @@ tl: { # no indentation
   deps."beamertheme-metropolis" = tl."beamertheme-metropolis";
   deps."beamertheme-npbt" = tl."beamertheme-npbt";
   deps."beamertheme-phnompenh" = tl."beamertheme-phnompenh";
+  deps."beamertheme-pure-minimalistic" = tl."beamertheme-pure-minimalistic";
   deps."beamertheme-saintpetersburg" = tl."beamertheme-saintpetersburg";
   deps."beamertheme-upenn-bc" = tl."beamertheme-upenn-bc";
   deps."beamerthemejltree" = tl."beamerthemejltree";
+  deps."beamerthemelalic" = tl."beamerthemelalic";
   deps."beamerthemenirma" = tl."beamerthemenirma";
+  deps."beamerthemenord" = tl."beamerthemenord";
   deps."bearwear" = tl."bearwear";
+  deps."beaulivre" = tl."beaulivre";
   deps."beton" = tl."beton";
   deps."bewerbung" = tl."bewerbung";
   deps."bez123" = tl."bez123";
@@ -7246,6 +7599,7 @@ tl: { # no indentation
   deps."bigfoot" = tl."bigfoot";
   deps."bigints" = tl."bigints";
   deps."biochemistry-colors" = tl."biochemistry-colors";
+  deps."bithesis" = tl."bithesis";
   deps."bizcard" = tl."bizcard";
   deps."blindtext" = tl."blindtext";
   deps."blkarray" = tl."blkarray";
@@ -7257,14 +7611,15 @@ tl: { # no indentation
   deps."bookcover" = tl."bookcover";
   deps."bookest" = tl."bookest";
   deps."booklet" = tl."booklet";
+  deps."bookshelf" = tl."bookshelf";
   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."bubblesort" = tl."bubblesort";
   deps."bullcntr" = tl."bullcntr";
   deps."bxcalc" = tl."bxcalc";
   deps."bxdpx-beamer" = tl."bxdpx-beamer";
@@ -7302,6 +7657,7 @@ tl: { # no indentation
   deps."cellspace" = tl."cellspace";
   deps."censor" = tl."censor";
   deps."centeredline" = tl."centeredline";
+  deps."centerlastline" = tl."centerlastline";
   deps."changebar" = tl."changebar";
   deps."changelayout" = tl."changelayout";
   deps."changelog" = tl."changelog";
@@ -7326,7 +7682,6 @@ tl: { # no indentation
   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";
@@ -7340,10 +7695,14 @@ tl: { # no indentation
   deps."codesection" = tl."codesection";
   deps."collcell" = tl."collcell";
   deps."collectbox" = tl."collectbox";
+  deps."collection-latexrecommended" = tl."collection-latexrecommended";
+  deps."collection-pictures" = tl."collection-pictures";
   deps."colophon" = tl."colophon";
+  deps."color-edits" = tl."color-edits";
   deps."colordoc" = tl."colordoc";
   deps."colorinfo" = tl."colorinfo";
   deps."coloring" = tl."coloring";
+  deps."colorist" = tl."colorist";
   deps."colorspace" = tl."colorspace";
   deps."colortab" = tl."colortab";
   deps."colorwav" = tl."colorwav";
@@ -7358,6 +7717,7 @@ tl: { # no indentation
   deps."competences" = tl."competences";
   deps."concepts" = tl."concepts";
   deps."concprog" = tl."concprog";
+  deps."conditext" = tl."conditext";
   deps."constants" = tl."constants";
   deps."continue" = tl."continue";
   deps."contour" = tl."contour";
@@ -7401,6 +7761,7 @@ tl: { # no indentation
   deps."dashundergaps" = tl."dashundergaps";
   deps."dataref" = tl."dataref";
   deps."datatool" = tl."datatool";
+  deps."datax" = tl."datax";
   deps."dateiliste" = tl."dateiliste";
   deps."datenumber" = tl."datenumber";
   deps."datetime" = tl."datetime";
@@ -7426,8 +7787,8 @@ tl: { # no indentation
   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-italian" = tl."datetime2-italian";
   deps."datetime2-latin" = tl."datetime2-latin";
   deps."datetime2-lsorbian" = tl."datetime2-lsorbian";
   deps."datetime2-magyar" = tl."datetime2-magyar";
@@ -7452,10 +7813,12 @@ tl: { # no indentation
   deps."decorule" = tl."decorule";
   deps."delimtxt" = tl."delimtxt";
   deps."denisbdoc" = tl."denisbdoc";
+  deps."diabetes-logbook" = tl."diabetes-logbook";
   deps."diagbox" = tl."diagbox";
   deps."diagnose" = tl."diagnose";
   deps."dialogl" = tl."dialogl";
   deps."dichokey" = tl."dichokey";
+  deps."dimnum" = tl."dimnum";
   deps."dinbrief" = tl."dinbrief";
   deps."directory" = tl."directory";
   deps."dirtytalk" = tl."dirtytalk";
@@ -7466,6 +7829,7 @@ tl: { # no indentation
   deps."docmute" = tl."docmute";
   deps."doctools" = tl."doctools";
   deps."documentation" = tl."documentation";
+  deps."docutils" = tl."docutils";
   deps."doi" = tl."doi";
   deps."dotarrow" = tl."dotarrow";
   deps."dotlessi" = tl."dotlessi";
@@ -7481,27 +7845,32 @@ tl: { # no indentation
   deps."dtk" = tl."dtk";
   deps."dtxdescribe" = tl."dtxdescribe";
   deps."dtxgallery" = tl."dtxgallery";
-  deps."duckuments" = tl."duckuments";
   deps."ducksay" = tl."ducksay";
+  deps."duckuments" = tl."duckuments";
   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."easybook" = tl."easybook";
   deps."easyfig" = tl."easyfig";
+  deps."easyfloats" = tl."easyfloats";
   deps."easyformat" = tl."easyformat";
   deps."easylist" = tl."easylist";
   deps."easyreview" = tl."easyreview";
   deps."ebezier" = tl."ebezier";
   deps."ecclesiastic" = tl."ecclesiastic";
+  deps."econlipsum" = tl."econlipsum";
   deps."ecv" = tl."ecv";
   deps."ed" = tl."ed";
+  deps."edichokey" = tl."edichokey";
   deps."edmargin" = tl."edmargin";
   deps."eemeir" = tl."eemeir";
   deps."efbox" = tl."efbox";
   deps."egplot" = tl."egplot";
   deps."ehhline" = tl."ehhline";
+  deps."einfart" = tl."einfart";
   deps."elegantbook" = tl."elegantbook";
   deps."elegantnote" = tl."elegantnote";
   deps."elegantpaper" = tl."elegantpaper";
@@ -7520,6 +7889,7 @@ tl: { # no indentation
   deps."endfloat" = tl."endfloat";
   deps."endheads" = tl."endheads";
   deps."endnotes" = tl."endnotes";
+  deps."endnotes-hy" = tl."endnotes-hy";
   deps."engpron" = tl."engpron";
   deps."engrec" = tl."engrec";
   deps."enotez" = tl."enotez";
@@ -7529,7 +7899,9 @@ tl: { # no indentation
   deps."environ" = tl."environ";
   deps."envlab" = tl."envlab";
   deps."epigraph" = tl."epigraph";
+  deps."epigraph-keys" = tl."epigraph-keys";
   deps."epiolmec" = tl."epiolmec";
+  deps."eq-pin2corr" = tl."eq-pin2corr";
   deps."eqell" = tl."eqell";
   deps."eqlist" = tl."eqlist";
   deps."eqnalign" = tl."eqnalign";
@@ -7555,7 +7927,6 @@ tl: { # no indentation
   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";
@@ -7564,6 +7935,8 @@ tl: { # no indentation
   deps."exercisebank" = tl."exercisebank";
   deps."exercisepoints" = tl."exercisepoints";
   deps."exercises" = tl."exercises";
+  deps."exesheet" = tl."exesheet";
+  deps."exframe" = tl."exframe";
   deps."exp-testopt" = tl."exp-testopt";
   deps."expdlist" = tl."expdlist";
   deps."export" = tl."export";
@@ -7641,6 +8014,7 @@ tl: { # no indentation
   deps."framed" = tl."framed";
   deps."frankenstein" = tl."frankenstein";
   deps."frege" = tl."frege";
+  deps."froufrou" = tl."froufrou";
   deps."ftcap" = tl."ftcap";
   deps."ftnxtra" = tl."ftnxtra";
   deps."fullblck" = tl."fullblck";
@@ -7681,6 +8055,7 @@ tl: { # no indentation
   deps."glossaries-irish" = tl."glossaries-irish";
   deps."glossaries-italian" = tl."glossaries-italian";
   deps."glossaries-magyar" = tl."glossaries-magyar";
+  deps."glossaries-nynorsk" = tl."glossaries-nynorsk";
   deps."glossaries-polish" = tl."glossaries-polish";
   deps."glossaries-portuges" = tl."glossaries-portuges";
   deps."glossaries-serbian" = tl."glossaries-serbian";
@@ -7695,15 +8070,17 @@ tl: { # no indentation
   deps."graphbox" = tl."graphbox";
   deps."graphicx-psmin" = tl."graphicx-psmin";
   deps."graphicxbox" = tl."graphicxbox";
+  deps."graphpaper" = tl."graphpaper";
   deps."grayhints" = tl."grayhints";
   deps."grfpaste" = tl."grfpaste";
   deps."grid" = tl."grid";
   deps."grid-system" = tl."grid-system";
+  deps."gridpapers" = tl."gridpapers";
   deps."gridset" = tl."gridset";
   deps."gridslides" = tl."gridslides";
   deps."guitlogo" = tl."guitlogo";
-  deps."halloweenmath" = tl."halloweenmath";
   deps."hackthefootline" = tl."hackthefootline";
+  deps."halloweenmath" = tl."halloweenmath";
   deps."handin" = tl."handin";
   deps."handout" = tl."handout";
   deps."hang" = tl."hang";
@@ -7714,14 +8091,17 @@ tl: { # no indentation
   deps."hc" = tl."hc";
   deps."he-she" = tl."he-she";
   deps."hhtensor" = tl."hhtensor";
+  deps."highlightlatex" = tl."highlightlatex";
   deps."histogr" = tl."histogr";
   deps."hitec" = tl."hitec";
+  deps."hitreport" = tl."hitreport";
   deps."hletter" = tl."hletter";
   deps."hobsub" = tl."hobsub";
   deps."hpsdiss" = tl."hpsdiss";
   deps."hrefhide" = tl."hrefhide";
   deps."hvindex" = tl."hvindex";
   deps."hvqrurl" = tl."hvqrurl";
+  deps."hypdestopt" = tl."hypdestopt";
   deps."hypdvips" = tl."hypdvips";
   deps."hyper" = tl."hyper";
   deps."hyperbar" = tl."hyperbar";
@@ -7773,8 +8153,8 @@ tl: { # no indentation
   deps."kerntest" = tl."kerntest";
   deps."keycommand" = tl."keycommand";
   deps."keyfloat" = tl."keyfloat";
-  deps."keyreader" = tl."keyreader";
   deps."keyindex" = tl."keyindex";
+  deps."keyreader" = tl."keyreader";
   deps."keystroke" = tl."keystroke";
   deps."keyval2e" = tl."keyval2e";
   deps."keyvaltable" = tl."keyvaltable";
@@ -7795,8 +8175,8 @@ tl: { # no indentation
   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-firstaid-dev" = tl."latex-firstaid-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";
@@ -7809,8 +8189,11 @@ tl: { # no indentation
   deps."lcg" = tl."lcg";
   deps."leading" = tl."leading";
   deps."leaflet" = tl."leaflet";
+  deps."lebhart" = tl."lebhart";
   deps."lectures" = tl."lectures";
+  deps."lectureslides" = tl."lectureslides";
   deps."leftidx" = tl."leftidx";
+  deps."leftindex" = tl."leftindex";
   deps."leipzig" = tl."leipzig";
   deps."lengthconvert" = tl."lengthconvert";
   deps."lettre" = tl."lettre";
@@ -7831,7 +8214,6 @@ tl: { # no indentation
   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";
@@ -7847,17 +8229,15 @@ tl: { # no indentation
   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."lua-physical" = tl."lua-physical";
   deps."luatodonotes" = tl."luatodonotes";
   deps."macroswap" = tl."macroswap";
   deps."magaz" = tl."magaz";
   deps."magicnum" = tl."magicnum";
-  deps."makecookbook" = tl."makecookbook";
-  deps."makerobust" = tl."makerobust";
   deps."mailing" = tl."mailing";
   deps."mailmerge" = tl."mailmerge";
   deps."makebarcode" = tl."makebarcode";
@@ -7866,8 +8246,10 @@ tl: { # no indentation
   deps."makecell" = tl."makecell";
   deps."makecirc" = tl."makecirc";
   deps."makecmds" = tl."makecmds";
+  deps."makecookbook" = tl."makecookbook";
   deps."makedtx" = tl."makedtx";
   deps."makeglos" = tl."makeglos";
+  deps."makerobust" = tl."makerobust";
   deps."mandi" = tl."mandi";
   deps."manfnt" = tl."manfnt";
   deps."manuscript" = tl."manuscript";
@@ -7888,6 +8270,7 @@ tl: { # no indentation
   deps."mcite" = tl."mcite";
   deps."mciteplus" = tl."mciteplus";
   deps."mdframed" = tl."mdframed";
+  deps."media4svg" = tl."media4svg";
   deps."media9" = tl."media9";
   deps."medstarbeamer" = tl."medstarbeamer";
   deps."meetingmins" = tl."meetingmins";
@@ -7895,8 +8278,10 @@ tl: { # no indentation
   deps."memory" = tl."memory";
   deps."mensa-tex" = tl."mensa-tex";
   deps."menu" = tl."menu";
+  deps."menucard" = tl."menucard";
   deps."menukeys" = tl."menukeys";
   deps."metalogox" = tl."metalogox";
+  deps."metanorma" = tl."metanorma";
   deps."metastr" = tl."metastr";
   deps."method" = tl."method";
   deps."metre" = tl."metre";
@@ -7904,9 +8289,11 @@ tl: { # no indentation
   deps."mftinc" = tl."mftinc";
   deps."mi-solns" = tl."mi-solns";
   deps."midpage" = tl."midpage";
+  deps."mindflow" = tl."mindflow";
   deps."minibox" = tl."minibox";
   deps."minidocument" = tl."minidocument";
   deps."minifp" = tl."minifp";
+  deps."minimalist" = tl."minimalist";
   deps."minipage-marginpar" = tl."minipage-marginpar";
   deps."minitoc" = tl."minitoc";
   deps."minorrevision" = tl."minorrevision";
@@ -7951,6 +8338,7 @@ tl: { # no indentation
   deps."mversion" = tl."mversion";
   deps."mwe" = tl."mwe";
   deps."mycv" = tl."mycv";
+  deps."mylatex" = tl."mylatex";
   deps."mylatexformat" = tl."mylatexformat";
   deps."nag" = tl."nag";
   deps."nameauth" = tl."nameauth";
@@ -8006,6 +8394,8 @@ tl: { # no indentation
   deps."optidef" = tl."optidef";
   deps."optional" = tl."optional";
   deps."options" = tl."options";
+  deps."orcidlink" = tl."orcidlink";
+  deps."orientation" = tl."orientation";
   deps."outline" = tl."outline";
   deps."outliner" = tl."outliner";
   deps."outlines" = tl."outlines";
@@ -8037,6 +8427,7 @@ tl: { # no indentation
   deps."pauldoc" = tl."pauldoc";
   deps."pawpict" = tl."pawpict";
   deps."pax" = tl."pax";
+  deps."pbalance" = tl."pbalance";
   deps."pbox" = tl."pbox";
   deps."pbsheet" = tl."pbsheet";
   deps."pdf14" = tl."pdf14";
@@ -8085,6 +8476,7 @@ tl: { # no indentation
   deps."powerdot" = tl."powerdot";
   deps."ppr-prv" = tl."ppr-prv";
   deps."practicalreports" = tl."practicalreports";
+  deps."prelim2e" = tl."prelim2e";
   deps."preprint" = tl."preprint";
   deps."pressrelease" = tl."pressrelease";
   deps."prettyref" = tl."prettyref";
@@ -8118,6 +8510,7 @@ tl: { # no indentation
   deps."rccol" = tl."rccol";
   deps."rcs-multi" = tl."rcs-multi";
   deps."rcsinfo" = tl."rcsinfo";
+  deps."readablecv" = tl."readablecv";
   deps."readarray" = tl."readarray";
   deps."realboxes" = tl."realboxes";
   deps."recipe" = tl."recipe";
@@ -8155,6 +8548,7 @@ tl: { # no indentation
   deps."rtkinenc" = tl."rtkinenc";
   deps."rulerbox" = tl."rulerbox";
   deps."rulercompass" = tl."rulercompass";
+  deps."runcode" = tl."runcode";
   deps."rvwrite" = tl."rvwrite";
   deps."sanitize-umlaut" = tl."sanitize-umlaut";
   deps."sauerj" = tl."sauerj";
@@ -8166,7 +8560,9 @@ tl: { # no indentation
   deps."scalerel" = tl."scalerel";
   deps."scanpages" = tl."scanpages";
   deps."schedule" = tl."schedule";
+  deps."schooldocs" = tl."schooldocs";
   deps."scontents" = tl."scontents";
+  deps."scrlayer-fancyhdr" = tl."scrlayer-fancyhdr";
   deps."scrlttr2copy" = tl."scrlttr2copy";
   deps."sdaps" = tl."sdaps";
   deps."sdrt" = tl."sdrt";
@@ -8178,10 +8574,13 @@ tl: { # no indentation
   deps."seealso" = tl."seealso";
   deps."selectp" = tl."selectp";
   deps."selinput" = tl."selinput";
+  deps."semantex" = tl."semantex";
   deps."semantic" = tl."semantic";
   deps."semantic-markup" = tl."semantic-markup";
+  deps."semesterplanner" = tl."semesterplanner";
   deps."semioneside" = tl."semioneside";
   deps."semproc" = tl."semproc";
+  deps."semtex" = tl."semtex";
   deps."sepfootnotes" = tl."sepfootnotes";
   deps."seqsplit" = tl."seqsplit";
   deps."sesstime" = tl."sesstime";
@@ -8207,19 +8606,21 @@ tl: { # no indentation
   deps."simplecd" = tl."simplecd";
   deps."simplecv" = tl."simplecv";
   deps."simpleinvoice" = tl."simpleinvoice";
+  deps."simplivre" = tl."simplivre";
   deps."sitem" = tl."sitem";
   deps."skb" = tl."skb";
   deps."skdoc" = tl."skdoc";
+  deps."skeldoc" = tl."skeldoc";
   deps."skeycommand" = tl."skeycommand";
   deps."skeyval" = tl."skeyval";
+  deps."skills" = tl."skills";
   deps."skrapport" = tl."skrapport";
   deps."slantsc" = tl."slantsc";
   deps."smalltableof" = tl."smalltableof";
-  deps."smartunits" = tl."smartunits";
   deps."smartref" = tl."smartref";
+  deps."smartunits" = tl."smartunits";
   deps."snapshot" = tl."snapshot";
   deps."snotez" = tl."snotez";
-  deps."soul" = tl."soul";
   deps."soulpos" = tl."soulpos";
   deps."soulutf8" = tl."soulutf8";
   deps."spacingtricks" = tl."spacingtricks";
@@ -8239,8 +8640,8 @@ tl: { # no indentation
   deps."stackengine" = tl."stackengine";
   deps."standalone" = tl."standalone";
   deps."stdclsdv" = tl."stdclsdv";
-  deps."stealcaps" = tl."stealcaps";
   deps."stdpage" = tl."stdpage";
+  deps."stealcaps" = tl."stealcaps";
   deps."stex" = tl."stex";
   deps."storebox" = tl."storebox";
   deps."storecmd" = tl."storecmd";
@@ -8259,12 +8660,14 @@ tl: { # no indentation
   deps."substitutefont" = tl."substitutefont";
   deps."substr" = tl."substr";
   deps."supertabular" = tl."supertabular";
+  deps."suppose" = tl."suppose";
   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."swfigure" = tl."swfigure";
   deps."syntax" = tl."syntax";
   deps."syntrace" = tl."syntrace";
   deps."synttree" = tl."synttree";
@@ -8306,11 +8709,11 @@ tl: { # no indentation
   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."texvc" = tl."texvc";
   deps."theoremref" = tl."theoremref";
   deps."thinsp" = tl."thinsp";
   deps."thmtools" = tl."thmtools";
@@ -8338,6 +8741,7 @@ tl: { # no indentation
   deps."toolbox" = tl."toolbox";
   deps."topfloat" = tl."topfloat";
   deps."topiclongtable" = tl."topiclongtable";
+  deps."totalcount" = tl."totalcount";
   deps."totcount" = tl."totcount";
   deps."totpages" = tl."totpages";
   deps."translations" = tl."translations";
@@ -8364,6 +8768,8 @@ tl: { # no indentation
   deps."underlin" = tl."underlin";
   deps."underoverlap" = tl."underoverlap";
   deps."undolabl" = tl."undolabl";
+  deps."unitconv" = tl."unitconv";
+  deps."unitipa" = tl."unitipa";
   deps."units" = tl."units";
   deps."unravel" = tl."unravel";
   deps."upmethodology" = tl."upmethodology";
@@ -8371,17 +8777,20 @@ tl: { # no indentation
   deps."uri" = tl."uri";
   deps."ushort" = tl."ushort";
   deps."uspace" = tl."uspace";
+  deps."utf8add" = tl."utf8add";
   deps."uwmslide" = tl."uwmslide";
   deps."variablelm" = tl."variablelm";
   deps."varindex" = tl."varindex";
   deps."varsfromjobname" = tl."varsfromjobname";
   deps."varwidth" = tl."varwidth";
+  deps."vcell" = tl."vcell";
   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."verifiche" = tl."verifiche";
   deps."version" = tl."version";
   deps."versions" = tl."versions";
   deps."versonotes" = tl."versonotes";
@@ -8403,6 +8812,7 @@ tl: { # no indentation
   deps."widetable" = tl."widetable";
   deps."widows-and-orphans" = tl."widows-and-orphans";
   deps."williams" = tl."williams";
+  deps."willowtreebook" = tl."willowtreebook";
   deps."withargs" = tl."withargs";
   deps."wordcount" = tl."wordcount";
   deps."wordlike" = tl."wordlike";
@@ -8442,8 +8852,8 @@ tl: { # no indentation
   deps."xwatermark" = tl."xwatermark";
   deps."xytree" = tl."xytree";
   deps."yafoot" = tl."yafoot";
-  deps."yaletter" = tl."yaletter";
   deps."yagusylo" = tl."yagusylo";
+  deps."yaletter" = tl."yaletter";
   deps."ycbook" = tl."ycbook";
   deps."ydoc" = tl."ydoc";
   deps."yplan" = tl."yplan";
@@ -8453,12 +8863,11 @@ tl: { # no indentation
   deps."zref" = tl."zref";
   deps."zwgetfdate" = tl."zwgetfdate";
   deps."zwpagelayout" = tl."zwpagelayout";
-  sha512.run = "3d19c59c6d2df89882415bfa2b1f647a2bdbb17b68eae2e2664fceff7bf6381a2127e94e7dc6ef159527f3036d8de7a42bdc9d926541be15ea6bb2d6ac17454c";
+  sha512.run = "b4cfddef7a005b82ebc5892a23fe214155794814301008fa66215acfe8d93c484a6d75765a19614a7a6ab193aae70b032eddbf8cee5cd2073ba32868aae6e1eb";
 };
 "collection-latexrecommended" = {
-  revision = 53921;
+  revision = 57862;
   stripPrefix = 0;
-  deps."collection-latex" = tl."collection-latex";
   deps."anysize" = tl."anysize";
   deps."attachfile2" = tl."attachfile2";
   deps."beamer" = tl."beamer";
@@ -8467,12 +8876,15 @@ tl: { # no indentation
   deps."caption" = tl."caption";
   deps."cite" = tl."cite";
   deps."cmap" = tl."cmap";
+  deps."collection-latex" = tl."collection-latex";
   deps."crop" = tl."crop";
   deps."ctable" = tl."ctable";
   deps."eso-pic" = tl."eso-pic";
+  deps."etoolbox" = tl."etoolbox";
   deps."euenc" = tl."euenc";
   deps."euler" = tl."euler";
-  deps."etoolbox" = tl."etoolbox";
+  deps."everysel" = tl."everysel";
+  deps."everyshi" = tl."everyshi";
   deps."extsizes" = tl."extsizes";
   deps."fancybox" = tl."fancybox";
   deps."fancyref" = tl."fancyref";
@@ -8488,9 +8900,8 @@ tl: { # no indentation
   deps."infwarerr" = tl."infwarerr";
   deps."jknapltx" = tl."jknapltx";
   deps."koma-script" = tl."koma-script";
-  deps."latexbug" = tl."latexbug";
   deps."l3experimental" = tl."l3experimental";
-  deps."l3packages" = tl."l3packages";
+  deps."latexbug" = tl."latexbug";
   deps."lineno" = tl."lineno";
   deps."listings" = tl."listings";
   deps."lwarp" = tl."lwarp";
@@ -8505,6 +8916,7 @@ tl: { # no indentation
   deps."ntgclass" = tl."ntgclass";
   deps."parskip" = tl."parskip";
   deps."pdflscape" = tl."pdflscape";
+  deps."pdfmanagement-testphase" = tl."pdfmanagement-testphase";
   deps."pdfpages" = tl."pdfpages";
   deps."pdftexcmds" = tl."pdftexcmds";
   deps."polyglossia" = tl."polyglossia";
@@ -8528,35 +8940,43 @@ tl: { # no indentation
   deps."xkeyval" = tl."xkeyval";
   deps."xltxtra" = tl."xltxtra";
   deps."xunicode" = tl."xunicode";
-  sha512.run = "63b9150f0f35a6d4cfa2a0e1d9ce42f686d1887a4984340403ad74e267af063831c01921d55435159e39a683d7db0a45ba9a5f5f9d6c3d8416060f565c4bc237";
+  sha512.run = "f763ff9a6832abce7a148bc5e8b9e5860f883ce0a56ad2119d9e18e7fb4dad794456fdc07b3ea107dca17d4174910ebf1613f1072b946a80f29d291ae513d097";
 };
 "collection-luatex" = {
-  revision = 53894;
+  revision = 58124;
   stripPrefix = 0;
-  deps."collection-basic" = tl."collection-basic";
   deps."addliga" = tl."addliga";
   deps."auto-pst-pdf-lua" = tl."auto-pst-pdf-lua";
   deps."barracuda" = tl."barracuda";
   deps."bezierplot" = tl."bezierplot";
   deps."checkcites" = tl."checkcites";
   deps."chickenize" = tl."chickenize";
+  deps."chinese-jfm" = tl."chinese-jfm";
+  deps."cloze" = tl."cloze";
+  deps."collection-basic" = tl."collection-basic";
   deps."combofont" = tl."combofont";
   deps."cstypo" = tl."cstypo";
   deps."ctablestack" = tl."ctablestack";
+  deps."ekdosis" = tl."ekdosis";
   deps."emoji" = tl."emoji";
+  deps."emojicite" = tl."emojicite";
   deps."enigma" = tl."enigma";
+  deps."innerscript" = tl."innerscript";
   deps."interpreter" = tl."interpreter";
   deps."kanaparser" = tl."kanaparser";
+  deps."lua-typo" = tl."lua-typo";
+  deps."lua-uca" = tl."lua-uca";
+  deps."lua-ul" = tl."lua-ul";
+  deps."lua-uni-algos" = tl."lua-uni-algos";
   deps."lua-visual-debug" = tl."lua-visual-debug";
-  deps."lua2dox" = tl."lua2dox";
   deps."luacode" = tl."luacode";
   deps."luacolor" = tl."luacolor";
-  deps."luahbtex" = tl."luahbtex";
   deps."luahyphenrules" = tl."luahyphenrules";
   deps."luaimageembed" = tl."luaimageembed";
   deps."luaindex" = tl."luaindex";
   deps."luainputenc" = tl."luainputenc";
   deps."luaintro" = tl."luaintro";
+  deps."luakeys" = tl."luakeys";
   deps."lualatex-doc" = tl."lualatex-doc";
   deps."lualatex-math" = tl."lualatex-math";
   deps."lualatex-truncate" = tl."lualatex-truncate";
@@ -8564,6 +8984,7 @@ tl: { # no indentation
   deps."luamplib" = tl."luamplib";
   deps."luaotfload" = tl."luaotfload";
   deps."luapackageloader" = tl."luapackageloader";
+  deps."luaprogtable" = tl."luaprogtable";
   deps."luarandom" = tl."luarandom";
   deps."luatex85" = tl."luatex85";
   deps."luatexbase" = tl."luatexbase";
@@ -8571,6 +8992,7 @@ tl: { # no indentation
   deps."luatextra" = tl."luatextra";
   deps."luavlna" = tl."luavlna";
   deps."luaxml" = tl."luaxml";
+  deps."newpax" = tl."newpax";
   deps."nodetree" = tl."nodetree";
   deps."odsfile" = tl."odsfile";
   deps."optex" = tl."optex";
@@ -8579,14 +9001,14 @@ tl: { # no indentation
   deps."plantuml" = tl."plantuml";
   deps."selnolig" = tl."selnolig";
   deps."spelling" = tl."spelling";
+  deps."stricttex" = tl."stricttex";
   deps."typewriter" = tl."typewriter";
-  sha512.run = "3cc433cf11324c414817c88a47819776f78b18d81306ed5e4f26ffb94240fca51be693fbba2c628f5e4efd21634f177fdcea5e756c81a30463690124621d96f1";
+  deps."uninormalize" = tl."uninormalize";
+  sha512.run = "9534a3381a1dcbe324bb6a7f01645c92a2e922dbfe5787692ae8b10d1668be87120419e4cac48f68db9fe0d1f1c3dd396792ddf221253cc290b86564b87d322d";
 };
 "collection-mathscience" = {
-  revision = 53699;
+  revision = 57759;
   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";
@@ -8596,6 +9018,7 @@ tl: { # no indentation
   deps."algorithm2e" = tl."algorithm2e";
   deps."algorithmicx" = tl."algorithmicx";
   deps."algorithms" = tl."algorithms";
+  deps."algpseudocodex" = tl."algpseudocodex";
   deps."algxpar" = tl."algxpar";
   deps."aligned-overset" = tl."aligned-overset";
   deps."amscdx" = tl."amscdx";
@@ -8618,7 +9041,9 @@ tl: { # no indentation
   deps."bytefield" = tl."bytefield";
   deps."calculation" = tl."calculation";
   deps."cascade" = tl."cascade";
+  deps."causets" = tl."causets";
   deps."ccfonts" = tl."ccfonts";
+  deps."ccool" = tl."ccool";
   deps."chemarrow" = tl."chemarrow";
   deps."chemcompounds" = tl."chemcompounds";
   deps."chemcono" = tl."chemcono";
@@ -8634,7 +9059,10 @@ tl: { # no indentation
   deps."clrscode" = tl."clrscode";
   deps."clrscode3e" = tl."clrscode3e";
   deps."codeanatomy" = tl."codeanatomy";
+  deps."collection-fontsrecommended" = tl."collection-fontsrecommended";
+  deps."collection-latex" = tl."collection-latex";
   deps."commath" = tl."commath";
+  deps."commutative-diagrams" = tl."commutative-diagrams";
   deps."complexity" = tl."complexity";
   deps."computational-complexity" = tl."computational-complexity";
   deps."concmath" = tl."concmath";
@@ -8642,6 +9070,7 @@ tl: { # no indentation
   deps."conteq" = tl."conteq";
   deps."correctmathalign" = tl."correctmathalign";
   deps."cryptocode" = tl."cryptocode";
+  deps."decision-table" = tl."decision-table";
   deps."delim" = tl."delim";
   deps."delimseasy" = tl."delimseasy";
   deps."delimset" = tl."delimset";
@@ -8677,6 +9106,7 @@ tl: { # no indentation
   deps."gotoh" = tl."gotoh";
   deps."grundgesetze" = tl."grundgesetze";
   deps."gu" = tl."gu";
+  deps."helmholtz-ellis-ji-notation" = tl."helmholtz-ellis-ji-notation";
   deps."hep" = tl."hep";
   deps."hepnames" = tl."hepnames";
   deps."hepparticles" = tl."hepparticles";
@@ -8687,6 +9117,7 @@ tl: { # no indentation
   deps."ionumbers" = tl."ionumbers";
   deps."isomath" = tl."isomath";
   deps."jkmath" = tl."jkmath";
+  deps."jupynotex" = tl."jupynotex";
   deps."karnaugh" = tl."karnaugh";
   deps."karnaugh-map" = tl."karnaugh-map";
   deps."karnaughmap" = tl."karnaughmap";
@@ -8701,11 +9132,13 @@ tl: { # no indentation
   deps."mathcommand" = tl."mathcommand";
   deps."mathcomp" = tl."mathcomp";
   deps."mathfixs" = tl."mathfixs";
+  deps."mathlig" = tl."mathlig";
   deps."mathpartir" = tl."mathpartir";
   deps."mathpunctspace" = tl."mathpunctspace";
-  deps."matrix-skeleton" = tl."matrix-skeleton";
   deps."matlab-prettifier" = tl."matlab-prettifier";
+  deps."matrix-skeleton" = tl."matrix-skeleton";
   deps."mattens" = tl."mattens";
+  deps."membranecomputing" = tl."membranecomputing";
   deps."memorygraphs" = tl."memorygraphs";
   deps."mgltex" = tl."mgltex";
   deps."mhchem" = tl."mhchem";
@@ -8713,12 +9146,12 @@ tl: { # no indentation
   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."numerica" = tl."numerica";
   deps."objectz" = tl."objectz";
   deps."oplotsymbl" = tl."oplotsymbl";
   deps."ot-tableau" = tl."ot-tableau";
@@ -8731,6 +9164,7 @@ tl: { # no indentation
   deps."pm-isomath" = tl."pm-isomath";
   deps."polexpr" = tl."polexpr";
   deps."prftree" = tl."prftree";
+  deps."principia" = tl."principia";
   deps."proba" = tl."proba";
   deps."proof-at-the-end" = tl."proof-at-the-end";
   deps."prooftrees" = tl."prooftrees";
@@ -8740,9 +9174,11 @@ tl: { # no indentation
   deps."qsharp" = tl."qsharp";
   deps."rank-2-roots" = tl."rank-2-roots";
   deps."rec-thy" = tl."rec-thy";
+  deps."rest-api" = tl."rest-api";
   deps."revquantum" = tl."revquantum";
   deps."ribbonproofs" = tl."ribbonproofs";
   deps."rmathbr" = tl."rmathbr";
+  deps."sankey" = tl."sankey";
   deps."sasnrdisplay" = tl."sasnrdisplay";
   deps."sciposter" = tl."sciposter";
   deps."sclang-prettifier" = tl."sclang-prettifier";
@@ -8789,18 +9225,19 @@ tl: { # no indentation
   deps."xymtex" = tl."xymtex";
   deps."yhmath" = tl."yhmath";
   deps."youngtab" = tl."youngtab";
+  deps."yquant" = tl."yquant";
   deps."ytableau" = tl."ytableau";
-  sha512.run = "f76274cf450f7d01e10650537756aa2794bb4acd9c7c08afaad899a0c14b7b5e8d3bdd2d47ac7d6f7c37bc22bc95a90abdd9cd69e14272608569bf66f97a407e";
+  sha512.run = "6d82088780ac299028a33232fe067408c2140cb8d17a8d40a2d3d510bb5d29b41f1c11299de31c061701aaa723d85a71b1f26f7bb45b7a4b500168bbd50c91d2";
 };
 "collection-metapost" = {
   revision = 50293;
   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."collection-basic" = tl."collection-basic";
   deps."drv" = tl."drv";
   deps."dviincl" = tl."dviincl";
   deps."emp" = tl."emp";
@@ -8843,14 +9280,14 @@ tl: { # no indentation
   sha512.run = "09dfaa35971f85134d0854c08a99c4d2b01ddf08e8ab97449460bb99d1236a38c48643501e7bb56197a844491509af301da6c4f75a33d9286601633211ec7d93";
 };
 "collection-music" = {
-  revision = 51864;
+  revision = 57878;
   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."collection-latex" = tl."collection-latex";
   deps."ddphonism" = tl."ddphonism";
   deps."figbas" = tl."figbas";
   deps."gchords" = tl."gchords";
@@ -8860,11 +9297,12 @@ tl: { # no indentation
   deps."guitarchordschemes" = tl."guitarchordschemes";
   deps."guitartabs" = tl."guitartabs";
   deps."harmony" = tl."harmony";
-  deps."leadsheets" = tl."leadsheets";
   deps."latex4musicians" = tl."latex4musicians";
+  deps."leadsheets" = tl."leadsheets";
   deps."lilyglyphs" = tl."lilyglyphs";
   deps."lyluatex" = tl."lyluatex";
   deps."m-tx" = tl."m-tx";
+  deps."musical" = tl."musical";
   deps."musicography" = tl."musicography";
   deps."musixguit" = tl."musixguit";
   deps."musixtex" = tl."musixtex";
@@ -8876,13 +9314,13 @@ tl: { # no indentation
   deps."pmxchords" = tl."pmxchords";
   deps."songbook" = tl."songbook";
   deps."songs" = tl."songs";
+  deps."xml2pmx" = tl."xml2pmx";
   deps."xpiano" = tl."xpiano";
-  sha512.run = "a4ad811435b9b6d51d59c6fa09fa20c82d8adf455fccca3121711f0814a1d73f10b3549d928555cd34ac9917accb1748f0a7ed3ebafd979833d8e6ebb146efd1";
+  sha512.run = "bc842942513a72c6a0f2346025739f09477ae1e920eaefc5e396e0b68ba53465b745db9d9c4534ec39b70f43410a0ae036c69a4e2226944b8f128b507340cc15";
 };
 "collection-pictures" = {
-  revision = 53426;
+  revision = 58759;
   stripPrefix = 0;
-  deps."collection-basic" = tl."collection-basic";
   deps."adigraph" = tl."adigraph";
   deps."aobs-tikz" = tl."aobs-tikz";
   deps."askmaps" = tl."askmaps";
@@ -8904,9 +9342,10 @@ tl: { # no indentation
   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."collection-basic" = tl."collection-basic";
+  deps."combinedgraphics" = tl."combinedgraphics";
   deps."curve" = tl."curve";
   deps."curve2e" = tl."curve2e";
   deps."curves" = tl."curves";
@@ -8914,8 +9353,9 @@ tl: { # no indentation
   deps."diagmac2" = tl."diagmac2";
   deps."ditaa" = tl."ditaa";
   deps."doc-pictex" = tl."doc-pictex";
-  deps."dottex" = tl."dottex";
   deps."dot2texi" = tl."dot2texi";
+  deps."dottex" = tl."dottex";
+  deps."dpcircling" = tl."dpcircling";
   deps."dratex" = tl."dratex";
   deps."drs" = tl."drs";
   deps."duotenzor" = tl."duotenzor";
@@ -8930,6 +9370,7 @@ tl: { # no indentation
   deps."euflag" = tl."euflag";
   deps."fast-diagram" = tl."fast-diagram";
   deps."fig4latex" = tl."fig4latex";
+  deps."figchild" = tl."figchild";
   deps."fitbox" = tl."fitbox";
   deps."flowchart" = tl."flowchart";
   deps."forest" = tl."forest";
@@ -8962,11 +9403,13 @@ tl: { # no indentation
   deps."maker" = tl."maker";
   deps."makeshape" = tl."makeshape";
   deps."mathspic" = tl."mathspic";
+  deps."mercatormap" = tl."mercatormap";
   deps."milsymb" = tl."milsymb";
   deps."miniplot" = tl."miniplot";
   deps."mkpic" = tl."mkpic";
   deps."modiagram" = tl."modiagram";
   deps."neuralnetwork" = tl."neuralnetwork";
+  deps."nl-interval" = tl."nl-interval";
   deps."numericplots" = tl."numericplots";
   deps."pb-diagram" = tl."pb-diagram";
   deps."penrose" = tl."penrose";
@@ -8974,6 +9417,7 @@ tl: { # no indentation
   deps."pgf" = tl."pgf";
   deps."pgf-blur" = tl."pgf-blur";
   deps."pgf-cmykshadings" = tl."pgf-cmykshadings";
+  deps."pgf-pie" = tl."pgf-pie";
   deps."pgf-soroban" = tl."pgf-soroban";
   deps."pgf-spectra" = tl."pgf-spectra";
   deps."pgf-umlcd" = tl."pgf-umlcd";
@@ -8996,10 +9440,12 @@ tl: { # no indentation
   deps."prerex" = tl."prerex";
   deps."productbox" = tl."productbox";
   deps."ptolemaicastronomy" = tl."ptolemaicastronomy";
+  deps."puyotikz" = tl."puyotikz";
   deps."pxpgfmark" = tl."pxpgfmark";
+  deps."pxpic" = tl."pxpic";
   deps."qcircuit" = tl."qcircuit";
-  deps."quantikz" = tl."quantikz";
   deps."qrcode" = tl."qrcode";
+  deps."quantikz" = tl."quantikz";
   deps."randbild" = tl."randbild";
   deps."randomwalk" = tl."randomwalk";
   deps."realhats" = tl."realhats";
@@ -9007,22 +9453,24 @@ tl: { # no indentation
   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."scsnowman" = tl."scsnowman";
   deps."setdeck" = tl."setdeck";
-  deps."simpleoptics" = tl."simpleoptics";
   deps."signchart" = tl."signchart";
+  deps."simpleoptics" = tl."simpleoptics";
   deps."smartdiagram" = tl."smartdiagram";
   deps."spath3" = tl."spath3";
   deps."spectralsequences" = tl."spectralsequences";
   deps."swimgraf" = tl."swimgraf";
+  deps."syntaxdi" = tl."syntaxdi";
   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-among-us" = tl."tikz-among-us";
   deps."tikz-bayesnet" = tl."tikz-bayesnet";
+  deps."tikz-bbox" = tl."tikz-bbox";
   deps."tikz-cd" = tl."tikz-cd";
   deps."tikz-dependency" = tl."tikz-dependency";
   deps."tikz-dimline" = tl."tikz-dimline";
@@ -9033,6 +9481,7 @@ tl: { # no indentation
   deps."tikz-kalender" = tl."tikz-kalender";
   deps."tikz-karnaugh" = tl."tikz-karnaugh";
   deps."tikz-ladder" = tl."tikz-ladder";
+  deps."tikz-lake-fig" = tl."tikz-lake-fig";
   deps."tikz-layers" = tl."tikz-layers";
   deps."tikz-nef" = tl."tikz-nef";
   deps."tikz-network" = tl."tikz-network";
@@ -9040,6 +9489,7 @@ tl: { # no indentation
   deps."tikz-optics" = tl."tikz-optics";
   deps."tikz-page" = tl."tikz-page";
   deps."tikz-palattice" = tl."tikz-palattice";
+  deps."tikz-planets" = tl."tikz-planets";
   deps."tikz-qtree" = tl."tikz-qtree";
   deps."tikz-relay" = tl."tikz-relay";
   deps."tikz-sfc" = tl."tikz-sfc";
@@ -9053,36 +9503,39 @@ tl: { # no indentation
   deps."tikzmark" = tl."tikzmark";
   deps."tikzmarmots" = tl."tikzmarmots";
   deps."tikzorbital" = tl."tikzorbital";
+  deps."tikzpackets" = tl."tikzpackets";
   deps."tikzpagenodes" = tl."tikzpagenodes";
-  deps."tikzpfeile" = tl."tikzpfeile";
   deps."tikzpeople" = tl."tikzpeople";
+  deps."tikzpfeile" = tl."tikzpfeile";
   deps."tikzposter" = tl."tikzposter";
   deps."tikzscale" = tl."tikzscale";
   deps."tikzsymbols" = tl."tikzsymbols";
+  deps."tikztosvg" = tl."tikztosvg";
+  deps."tile-graphic" = tl."tile-graphic";
   deps."timing-diagrams" = tl."timing-diagrams";
-  deps."tqft" = tl."tqft";
+  deps."tipfr" = tl."tipfr";
   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."tqft" = tl."tqft";
   deps."tsemlines" = tl."tsemlines";
   deps."tufte-latex" = tl."tufte-latex";
+  deps."tzplot" = tl."tzplot";
+  deps."utfsym" = tl."utfsym";
   deps."venndiagram" = tl."venndiagram";
   deps."visualpstricks" = tl."visualpstricks";
   deps."xpicture" = tl."xpicture";
   deps."xypic" = tl."xypic";
-  sha512.run = "86e6de5c89def33ebdd4c501713ca857ea24537cc4522a8c6d851c058822f51398023d80bac638611fd0a93a0a7f05598a992e53f95c43281f046dcd1e087f54";
+  sha512.run = "929201dfc9a1d096afe3308c3d824031effc31ed8d0cb103f669704dad2109c0884d496c18a6ad07827338d5730533dec6f55360e362122c623c45da3562d61d";
 };
 "collection-plaingeneric" = {
-  revision = 53957;
+  revision = 56496;
   stripPrefix = 0;
-  deps."collection-basic" = tl."collection-basic";
   deps."abbr" = tl."abbr";
   deps."abstyles" = tl."abstyles";
   deps."apnum" = tl."apnum";
@@ -9093,7 +9546,9 @@ tl: { # no indentation
   deps."c-pascal" = tl."c-pascal";
   deps."catcodes" = tl."catcodes";
   deps."chronosys" = tl."chronosys";
+  deps."collection-basic" = tl."collection-basic";
   deps."colorsep" = tl."colorsep";
+  deps."compare" = tl."compare";
   deps."cweb-old" = tl."cweb-old";
   deps."dinat" = tl."dinat";
   deps."dirtree" = tl."dirtree";
@@ -9105,7 +9560,9 @@ tl: { # no indentation
   deps."epsf" = tl."epsf";
   deps."epsf-dvipdfmx" = tl."epsf-dvipdfmx";
   deps."expkv" = tl."expkv";
+  deps."expkv-cs" = tl."expkv-cs";
   deps."expkv-def" = tl."expkv-def";
+  deps."expkv-opt" = tl."expkv-opt";
   deps."fenixpar" = tl."fenixpar";
   deps."figflow" = tl."figflow";
   deps."fixpdfmag" = tl."fixpdfmag";
@@ -9115,7 +9572,6 @@ tl: { # no indentation
   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";
@@ -9129,18 +9585,23 @@ tl: { # no indentation
   deps."lambda-lists" = tl."lambda-lists";
   deps."langcode" = tl."langcode";
   deps."lecturer" = tl."lecturer";
+  deps."letterspacing" = tl."letterspacing";
   deps."librarian" = tl."librarian";
   deps."listofitems" = tl."listofitems";
+  deps."localloc" = tl."localloc";
   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."namedef" = tl."namedef";
   deps."navigator" = tl."navigator";
   deps."newsletr" = tl."newsletr";
+  deps."nth" = tl."nth";
   deps."ofs" = tl."ofs";
   deps."olsak-misc" = tl."olsak-misc";
+  deps."outerhbox" = tl."outerhbox";
   deps."path" = tl."path";
   deps."pdf-trans" = tl."pdf-trans";
   deps."pitex" = tl."pitex";
@@ -9151,11 +9612,16 @@ tl: { # no indentation
   deps."plstmary" = tl."plstmary";
   deps."poormanlog" = tl."poormanlog";
   deps."present" = tl."present";
+  deps."pwebmac" = tl."pwebmac";
+  deps."random" = tl."random";
   deps."randomlist" = tl."randomlist";
   deps."resumemac" = tl."resumemac";
+  deps."ruler" = tl."ruler";
   deps."schemata" = tl."schemata";
   deps."shade" = tl."shade";
   deps."simplekv" = tl."simplekv";
+  deps."soul" = tl."soul";
+  deps."swrule" = tl."swrule";
   deps."systeme" = tl."systeme";
   deps."tabto-generic" = tl."tabto-generic";
   deps."termmenu" = tl."termmenu";
@@ -9175,15 +9641,16 @@ tl: { # no indentation
   deps."xii-lat" = tl."xii-lat";
   deps."xlop" = tl."xlop";
   deps."yax" = tl."yax";
-  sha512.run = "04b467a1c6be23641e42fe2988487139757e67badc710d7547ab63dfc772091af105930c37f2e34b32a8f01528393fea742f3c3b20c5147db916c8bdf5bb0caf";
+  deps."zztex" = tl."zztex";
+  sha512.run = "e70cb404a4beb339c772d7d0d1eb6c096abae4715c807791c84dbea0528c95419398f49d32c8889ac50eff1e3c75f5460e067d848272996f0a3e3c059ddb1630";
 };
 "collection-pstricks" = {
-  revision = 52261;
+  revision = 54455;
   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."collection-basic" = tl."collection-basic";
+  deps."collection-plaingeneric" = tl."collection-plaingeneric";
   deps."dsptricks" = tl."dsptricks";
   deps."makeplot" = tl."makeplot";
   deps."pdftricks" = tl."pdftricks";
@@ -9194,9 +9661,9 @@ tl: { # no indentation
   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-arrow" = tl."pst-arrow";
   deps."pst-asr" = tl."pst-asr";
   deps."pst-bar" = tl."pst-bar";
   deps."pst-barcode" = tl."pst-barcode";
@@ -9253,8 +9720,8 @@ tl: { # no indentation
   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-pdgr" = tl."pst-pdgr";
   deps."pst-perspective" = tl."pst-perspective";
   deps."pst-platon" = tl."pst-platon";
   deps."pst-plot" = tl."pst-plot";
@@ -9272,7 +9739,6 @@ tl: { # no indentation
   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";
@@ -9286,7 +9752,6 @@ tl: { # no indentation
   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";
@@ -9294,12 +9759,11 @@ tl: { # no indentation
   deps."uml" = tl."uml";
   deps."vaucanson-g" = tl."vaucanson-g";
   deps."vocaltract" = tl."vocaltract";
-  sha512.run = "336ecc5633674197d366aa52ad2ce650378868110ccc8203c64b9a2ebb69cfa2172230bd46f40acf38b1f984b4fb2d831a7747cca26b16a7d3b2c2ceef435020";
+  sha512.run = "653143f95761352dc349c66f618b01a77650b20bf8b2cf45137e72b2f05ba3dcefbf0238f1b2757297ac37ec6cbd4a05283c0bfc03d6e153e57f4be23ca8f87f";
 };
 "collection-publishers" = {
-  revision = 53831;
+  revision = 57312;
   stripPrefix = 0;
-  deps."collection-latex" = tl."collection-latex";
   deps."IEEEconf" = tl."IEEEconf";
   deps."IEEEtran" = tl."IEEEtran";
   deps."aastex" = tl."aastex";
@@ -9314,6 +9778,7 @@ tl: { # no indentation
   deps."aguplus" = tl."aguplus";
   deps."aiaa" = tl."aiaa";
   deps."ametsoc" = tl."ametsoc";
+  deps."anonymous-acm" = tl."anonymous-acm";
   deps."anufinalexam" = tl."anufinalexam";
   deps."aomart" = tl."aomart";
   deps."apa" = tl."apa";
@@ -9341,11 +9806,13 @@ tl: { # no indentation
   deps."cascadilla" = tl."cascadilla";
   deps."cesenaexam" = tl."cesenaexam";
   deps."chem-journal" = tl."chem-journal";
+  deps."chifoot" = tl."chifoot";
   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."collection-latex" = tl."collection-latex";
   deps."confproc" = tl."confproc";
   deps."cquthesis" = tl."cquthesis";
   deps."dccpaper" = tl."dccpaper";
@@ -9382,6 +9849,7 @@ tl: { # no indentation
   deps."hecthese" = tl."hecthese";
   deps."hep-paper" = tl."hep-paper";
   deps."hithesis" = tl."hithesis";
+  deps."hitszbeamer" = tl."hitszbeamer";
   deps."hitszthesis" = tl."hitszthesis";
   deps."hobete" = tl."hobete";
   deps."hu-berlin-bundle" = tl."hu-berlin-bundle";
@@ -9404,6 +9872,7 @@ tl: { # no indentation
   deps."ksp-thesis" = tl."ksp-thesis";
   deps."ku-template" = tl."ku-template";
   deps."langsci" = tl."langsci";
+  deps."langsci-avm" = tl."langsci-avm";
   deps."limecv" = tl."limecv";
   deps."lion-msc" = tl."lion-msc";
   deps."llncsconf" = tl."llncsconf";
@@ -9414,11 +9883,13 @@ tl: { # no indentation
   deps."mcmthesis" = tl."mcmthesis";
   deps."mentis" = tl."mentis";
   deps."mlacls" = tl."mlacls";
+  deps."mluexercise" = tl."mluexercise";
   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."muling" = tl."muling";
   deps."musuos" = tl."musuos";
   deps."muthesis" = tl."muthesis";
   deps."mynsfc" = tl."mynsfc";
@@ -9426,14 +9897,15 @@ tl: { # no indentation
   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."novel" = tl."novel";
   deps."nrc" = tl."nrc";
+  deps."nwejm" = tl."nwejm";
   deps."onrannual" = tl."onrannual";
   deps."opteng" = tl."opteng";
+  deps."oup-authoring-template" = tl."oup-authoring-template";
   deps."philosophersimprint" = tl."philosophersimprint";
   deps."pittetd" = tl."pittetd";
   deps."pkuthss" = tl."pkuthss";
@@ -9444,22 +9916,26 @@ tl: { # no indentation
   deps."proposal" = tl."proposal";
   deps."prtec" = tl."prtec";
   deps."ptptex" = tl."ptptex";
+  deps."qrbill" = tl."qrbill";
   deps."quantumarticle" = tl."quantumarticle";
   deps."resphilosophica" = tl."resphilosophica";
   deps."resumecls" = tl."resumecls";
   deps."revtex" = tl."revtex";
   deps."revtex4" = tl."revtex4";
+  deps."revtex4-1" = tl."revtex4-1";
   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."scrjrnl" = tl."scrjrnl";
   deps."sduthesis" = tl."sduthesis";
   deps."seuthesis" = tl."seuthesis";
   deps."seuthesix" = tl."seuthesix";
+  deps."shortmathj" = tl."shortmathj";
+  deps."shtthesis" = tl."shtthesis";
   deps."soton" = tl."soton";
   deps."sphdthesis" = tl."sphdthesis";
   deps."spie" = tl."spie";
@@ -9487,8 +9963,8 @@ tl: { # no indentation
   deps."tudscr" = tl."tudscr";
   deps."tugboat" = tl."tugboat";
   deps."tugboat-plain" = tl."tugboat-plain";
-  deps."turabian" = tl."turabian";
   deps."tui" = tl."tui";
+  deps."turabian" = tl."turabian";
   deps."uaclasses" = tl."uaclasses";
   deps."uafthesis" = tl."uafthesis";
   deps."uantwerpendocs" = tl."uantwerpendocs";
@@ -9503,8 +9979,8 @@ tl: { # no indentation
   deps."uiucthesis" = tl."uiucthesis";
   deps."ulthese" = tl."ulthese";
   deps."umbclegislation" = tl."umbclegislation";
-  deps."umthesis" = tl."umthesis";
   deps."umich-thesis" = tl."umich-thesis";
+  deps."umthesis" = tl."umthesis";
   deps."unam-thesis" = tl."unam-thesis";
   deps."unamth-template" = tl."unamth-template";
   deps."unamthesis" = tl."unamthesis";
@@ -9514,45 +9990,46 @@ tl: { # no indentation
   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."urcls" = tl."urcls";
   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."xduthesis" = tl."xduthesis";
+  deps."xmuthesis" = tl."xmuthesis";
   deps."yathesis" = tl."yathesis";
   deps."yazd-thesis" = tl."yazd-thesis";
   deps."york-thesis" = tl."york-thesis";
-  sha512.run = "6c8fb62dbf05c1d522965f8837a3753ea0b534870bb17512178aed979f21401d1e96c4ded2054fa6d71f2c3ec57d4fa158c30fb6b0c0462d336d4f2fc057b0af";
+  sha512.run = "22a96671004c2a06fd5935793ee274ec06f3801b18ad6b3af8181667ba37eead921b84e4e1d1206f213a5ea4ccdaaa7082e8fa3b8923c266389bbda4d34e3da4";
 };
 "collection-texworks" = {
-  revision = 36934;
+  revision = 54074;
   stripPrefix = 0;
   deps."collection-basic" = tl."collection-basic";
   deps."texworks" = tl."texworks";
-  sha512.run = "76e9ad96aa649c70442533135cb3e198278a8df631f91f23b55bd2977eccacd81a2bafa6cf4f0fd1e83f86dd591a85eb8aaa93c5928b2cb9766683d089994199";
+  sha512.run = "b1f38877115fb6efc9b63a5591c399b799f3a258e342d5e198b74b582628461ad67ea7c1ab76e5ae83a3e8e538c62ac3e7c5b3d3f1d29c093331843067cfec57";
 };
 "collection-wintools" = {
-  revision = 30307;
+  revision = 54074;
   stripPrefix = 0;
-  sha512.run = "648617c8a047b9833429a38e77f1b605b060fc3ab4a356ab8a19e0c1b3650bb56eef7e7b9e8727e95d1e48b0fcac40d8994303527afc7511c5d1a34adab8df30";
+  sha512.run = "9bf4c58094748424c1b60a3731d9cb2b1ad1d24764469072da693de26a4e4e857df3bcab6d4c2b5ae7454a69f9730fc596fd156b46b7704eafb1421f6936d66a";
 };
 "collection-xetex" = {
-  revision = 52686;
+  revision = 58543;
   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."bidishadowtext" = tl."bidishadowtext";
   deps."businesscard-qrcode" = tl."businesscard-qrcode";
+  deps."collection-basic" = tl."collection-basic";
   deps."cqubeamer" = tl."cqubeamer";
   deps."fixlatvian" = tl."fixlatvian";
   deps."font-change-xetex" = tl."font-change-xetex";
@@ -9562,8 +10039,6 @@ tl: { # no indentation
   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";
@@ -9588,7 +10063,8 @@ tl: { # no indentation
   deps."xetexfontinfo" = tl."xetexfontinfo";
   deps."xetexko" = tl."xetexko";
   deps."xevlna" = tl."xevlna";
-  sha512.run = "f4413abed31de8fc073ae63c0136da9e3e71d7dad5f4d46d59c7251a74b446df77db6eafc3ec97848fb2f5c5a84f07b37d36d0e43f2d7379922876874d33594e";
+  deps."zbmath-review-template" = tl."zbmath-review-template";
+  sha512.run = "a312699117932ac031f6b09fb0456518dec5c92fa046df27cfc0439f686c0dd26a362075b78b3b8d08dfbdf54f073c2ee4643801d63c67a79d728ee52db3dffb";
 };
 "collref" = {
   revision = 46358;
@@ -9608,6 +10084,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.1";
 };
+"color-edits" = {
+  revision = 56707;
+  stripPrefix = 0;
+  sha512.run = "e1023d734b7c8c2c781fd037f29a8c845a45fcd1c62d7880d51755bf943dba142fee040c2f0b9bea2ef6986818b5f67126ff468639c0d962d0a779f6840fb1c7";
+  sha512.doc = "17322e4a1e9cd8cd6043a37e0c06bca019b887aad0100367b0c99b70fe3043d32568b5cf587cb42d0bdfe77cf18bf222fba126833d9a61789bba88bd121dbc4c";
+  sha512.source = "b23f1893840a3a2a8d5a77386515c224656ca0c82aec3eb82209c862ebb222e8a2cdf4942bce3d43f4538bd380f9518fe031f08259dd063578760431a6230f10";
+  hasRunfiles = true;
+  version = "1.1";
+};
 "colordoc" = {
   revision = 18270;
   stripPrefix = 0;
@@ -9632,6 +10117,13 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.2";
 };
+"colorist" = {
+  revision = 58434;
+  stripPrefix = 0;
+  sha512.run = "9787be368fba699437305f4757434ad5e8cd19bbf200bd42517478a46ce01173cef8d7fdef204c1b02fbec0b09f40d44a84a7e79ba98b54705f5864dcbe511db";
+  sha512.doc = "e6991e2a45b789f907d4534e86970d6a0abb63e98fc1e281f2568303d83bcde569881f808813ead6c09f598a62b2d0411589355db2529a90e2f48d22594f29f3";
+  hasRunfiles = true;
+};
 "colorprofiles" = {
   revision = 49086;
   stripPrefix = 0;
@@ -9732,20 +10224,20 @@ tl: { # no indentation
   version = "0.3";
 };
 "comfortaa" = {
-  revision = 51461;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "83398c18c37a1e2d2e780133910e5ccd59daffb548f689e22bb642d7a2776e425a80df8ded3982f9b343b83d3421d3d5a9f363840b5f4d9e5ab470439183aa70";
-  sha512.doc = "e7c554f3d8ddccf5660e7dd21ba4aec1412433fb594398d9e3b57f9ecd7943c34529b4ac747d9678dd30374eb8fdfbfcacac0545f12769bf419644cf79123a05";
+  sha512.run = "6b851b6c56ef5b6ae6e59c5a3606238671af34963c5dfb8a39a9bd6b84597f673d12963abdd687013f11edade4fb9ae37794a4789650c38c29f64bea1d41dea5";
+  sha512.doc = "b1b4efa42012646538316af9bdd5c724f285aa784e18e85a1239376dc02cf1b79bf43bb0ce07a822995a82811eb6562e6943aca0b903f9241bda088ac0675fce";
   hasRunfiles = true;
   version = "3.2";
 };
 "comicneue" = {
-  revision = 42851;
+  revision = 54891;
   stripPrefix = 0;
-  sha512.run = "c72d19a0f5219d96da92916ec13fe333703c911b4222b60f825aa5ea2d412df261fbae2227c56844e70fcc057ed8367a4c42f17799c4b8418b02c3171b8d4864";
-  sha512.doc = "e3d1630dbecc93365e18b496565a5430e0867f3d3a82c0bedcfec8a02168bddf71d9e65b996e4682294c086d1049cf88182a36c5619d8fe6762aa1050fd923a4";
+  sha512.run = "5dc900d215fef53fe69ffda6e9120f1230173f40d220c71eaaa3d7eb21610b214591bdc043f27f0fe5259daf2a800b695167d2deee1810a67045997aff7c2a76";
+  sha512.doc = "24baee44951d9dc6fd70b6b6092112a1d7d13c394eeb495162c3f80444ebd799b526acf7b7c86b7590afc9f5f6efa97c10b661ddead6ca11a168325c7c840650";
   hasRunfiles = true;
-  version = "1.1";
+  version = "1.2";
 };
 "comma" = {
   revision = 18259;
@@ -9789,12 +10281,26 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "3.8";
 };
+"commutative-diagrams" = {
+  revision = 55526;
+  stripPrefix = 0;
+  sha512.run = "ff7cd8401eb54f14bd013db9a62e2540a8015e51ad573cb76683b19c2cf2fed0a2081be87c5c81238664ab441f6d17eedc896e41fa0700dcd70b088d08e6ec8a";
+  sha512.doc = "3709730425aafd1fd9aed5b4cbb1b80bf70ed474c792f0ad6f35d4ae6ad64624db64bda7a02656b226c13ea93159d2811356eb75f8b2756328f0ecea2289f738";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
 "compactbib" = {
   revision = 15878;
   stripPrefix = 0;
   sha512.run = "dbc3bb28178a656b400a2a72e48ec813d6e282ddba7c70bb4dd0b5ed7f76e9e0be1dffb0ecf43e4893210453ef420c1b1d859c287663cad6bfe8c7f46dc8d86b";
   hasRunfiles = true;
 };
+"compare" = {
+  revision = 54265;
+  stripPrefix = 0;
+  sha512.run = "16d6ffeaa66c1165ce4c6795ff2f73e0cc5a811045198db6e7aa2556bc6ff8b20883478011fae9f06400475f9a96a57fea34f7513b7fbbb392aee03dbd30ad01";
+  hasRunfiles = true;
+};
 "competences" = {
   revision = 47573;
   stripPrefix = 0;
@@ -9819,11 +10325,11 @@ tl: { # no indentation
   sha512.doc = "5da762a898a6cb95d5da95f444e862c8d0ac351ca63eca776fc1a9e35e2fb00389d414a85fa1bef357abc3d68b691a36ddac8c6aba20b7ea6f398c9017ac13fb";
 };
 "comprehensive" = {
-  revision = 46270;
+  revision = 55667;
   stripPrefix = 0;
-  sha512.run = "8c34a44188cb3dd286f0f841cbfd2d4760bee9be75c814041ea7d2f9ffef39991f018fce276a440f88ca8771eca0c1baa9884d2a7f60afbb788f63220b51c3e7";
-  sha512.doc = "e262b3996a745024d2cca39d62ba35e00e9b6a8ead58ae1c89c5d8949744cf8a084021beba8c611ef6b2726447919241e0f2f6cbbb21e6de4d6c15af7c7b5ea4";
-  version = "12.3";
+  sha512.run = "57046d6981bcda498ff025644fe915ce67a01b60c6fe58431060754e801b51b9332eb718fca263fd39b9b728b9db6702d83e227d8ed579c03d58f6d653c76a0d";
+  sha512.doc = "a2c4c855c0321e2d57d430f6788e762ab1bc8d51a5513fbbf0f6f4b53874d8816b877d9e4d5f3222e1014b8ea8384ff16a9d52742e9bebfc7932e08ab170e53e";
+  version = "13.0";
 };
 "computational-complexity" = {
   revision = 44847;
@@ -9865,11 +10371,19 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "concrete" = {
-  revision = 15878;
+  revision = 57963;
+  stripPrefix = 0;
+  sha512.run = "9bf9621c120f831110f71cf8d53ee5d4d42869da8c9b2c653125dd6cb6eb9b8d264116645753ee34dce1076204e008d9e74bd0596b46ffac596cc7726b0c75a9";
+  sha512.doc = "c70e9c299e69daa29e9471293b59ed4bf375b8314729381c1973c5390ec5d73b3cffa16db8864e8d84466dbd078179e98b2ffa3e6466d67441e30efcd02676fb";
+  hasRunfiles = true;
+};
+"conditext" = {
+  revision = 55387;
   stripPrefix = 0;
-  sha512.run = "465b6d7e427e8bd7b8cfb44551d4f8999ed0e8482f905416ec4ea7db6ea4293e6124f0b69e84a84655d5230cee1555f15030c8dfeac8c7da99c1c8ba20a3d640";
-  sha512.doc = "5fb4fd77468dd4d5ba19d43d176588f05345038d58c9b0b2630e6795ed33bdb3db0053d5bb249030a118bf19cddf7c7e4d8f1ae96173b1e1368e468ea2c00727";
+  sha512.run = "60619cdd5031d0fbd2f9e4e8614dacf8f439282787f6230bd2662bad21607720757a19ab27ef783a36a6a19299d5960fb786d8cc787e471a46e89f8cc2e7c866";
+  sha512.doc = "3949b2f03c86a922d306cab525a5ca321509d64cfd73b99a39e3404800f63f15e262921e2c1e8eedf98ba2f6cbdda00dfb14e54198af5b7438afdea4572a86ee";
   hasRunfiles = true;
+  version = "1.5";
 };
 "confproc" = {
   revision = 29349;
@@ -9899,20 +10413,21 @@ tl: { # no indentation
   version = "0.1.1";
 };
 "context" = {
-  revision = 50573;
-  deps."metapost" = tl."metapost";
-  deps."pdftex" = tl."pdftex";
-  deps."xetex" = tl."xetex";
-  deps."luatex" = tl."luatex";
+  revision = 58167;
+  deps."amsfonts" = tl."amsfonts";
   deps."lm" = tl."lm";
   deps."lm-math" = tl."lm-math";
-  deps."amsfonts" = tl."amsfonts";
+  deps."luatex" = tl."luatex";
   deps."manfnt-font" = tl."manfnt-font";
+  deps."metapost" = tl."metapost";
   deps."mflogo-font" = tl."mflogo-font";
-  deps."stmaryrd" = tl."stmaryrd";
   deps."mptopdf" = tl."mptopdf";
-  sha512.run = "1c525a6a7fe325dddb9588d3720e806ac762eefc90848e4457fc4d3cd60c64cf7b6e5c9388a1f22b22c526e84cca512140511bec9ca5ddad99bf7b968ac49c03";
-  sha512.doc = "b172eed71f2917ca16b4ce18b24d28e51ea48a1281fa8e34a5e104363656c1492c7a79339f3d0f7475ffc1f7ea13b647513f3af519afa684231dd7df3ea3b488";
+  deps."pdftex" = tl."pdftex";
+  deps."stmaryrd" = tl."stmaryrd";
+  deps."xetex" = tl."xetex";
+  hasFormats = true;
+  sha512.run = "61fcc778837ecff88bb0e80e39e2acb3ee64e2c26e4069f7634e5dc6c74dc93caab78e4b0088ed58f494d6dcd3a5084bc55cd471baaeb292dc208cf2a241bf69";
+  sha512.doc = "ee4458cd6d45a41652ae24b3b82bea5cfa2d8b9c14cf4ba1357f9f07d6572f8ba83e350b74659c471ebf5068f33f5c5762a11669ab2a4f5adb3db41f392956dd";
   hasRunfiles = true;
 };
 "context-account" = {
@@ -10012,19 +10527,19 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "context-filter" = {
-  revision = 48390;
+  revision = 55718;
   stripPrefix = 0;
   deps."context" = tl."context";
-  sha512.run = "330e7085ce8d3e284c9e4cff349b351b862cf7e6544f736268b01d623370658de507176d3bf957f5b2bb2da28523a9b5543b091cf1dad0711f0cd38b2da30fb6";
-  sha512.doc = "f27471636d5fdfeec2d47fe901b87fb56613bed3fbf95c5580c531c5643c919b890c38aa4f33d12252d06c9c3a681c112b052de6dbaf279374c7a87b7b9ce957";
+  sha512.run = "cfd8b7f1276464a8593dce148e170105c2da3d20a755a4d197999b2c00610a3ee0227a8820e5eb34c09ac3537381c8cc984a67efba2c3fe8b85f7c57cb13c720";
+  sha512.doc = "20279aeab1d574ff034b208d8657b02d35efc7f6ab1a92847bc3a7d0453e152571fec214cbfc90a70cd8e8debd2ec57317fda47183a10f644776949c295fc1a9";
   hasRunfiles = true;
 };
 "context-french" = {
-  revision = 47085;
+  revision = 54215;
   stripPrefix = 0;
   deps."context" = tl."context";
-  sha512.run = "0131af9d1c23f612450333c2cca116d2369cb8ecd402bfb9c9abc7e473b4eab44c9962d343d7391d9d9a29bd376012c82bf9e6378a280d41e37d41736b1853a2";
-  sha512.doc = "96874c7039d9f252a9322cf84c4f77e8ca6bfbb9740e2b9fc8793dea79bf0d5f002ed1a69eff590c8aad6e43c315cda5af2aab0f9011bafb47a53da63101a9e7";
+  sha512.run = "aed7a7f91e909e8b9b7efc5e0b45c67d5ed3e084c5019e1ddd68d8e9e969c0579b1dbbe4e25d74ca22b256324358ed34f3f54a92e2fb3a012a6aa43797e8aaa7";
+  sha512.doc = "926a054d12f59d45dbe538eaed4087ed2c9f3321f1051c7006fe651af95d2275788030ee9371ffd39a7f7f8a4022776c19721323ab82871f061dca365c081728";
   hasRunfiles = true;
 };
 "context-fullpage" = {
@@ -10077,11 +10592,11 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "context-letter" = {
-  revision = 53499;
+  revision = 56073;
   stripPrefix = 0;
   deps."context" = tl."context";
-  sha512.run = "12e0ab8934b8022010e6a23109b094ae97a9c409cc143705d73776350b8d36aca11f3d6df181d5252415f12ff11bbaa4d12e2271ba5ad9b43ee84c566c5c1e17";
-  sha512.doc = "74d2f845dfe6c70ab2a4601e0d074ed5996f7d8f3f024bae2c40836b4f30dc66451dfb030e6559a986dd1a460c5426ebd01b72133f328f08a85cc48690c8427b";
+  sha512.run = "12c0e37865f241eb37b46989346e16c75cd49672e76e22f511d2a146ea221e0279c93ebacd0b85e0377cffab0ae07e26515fe3a6abb86bc85df52b87569dec2a";
+  sha512.doc = "81e18af260a8441aedc04e48f120c69ea9fadf08fd69b18d95caeb1e98d5de8d0d37aadcb7589273122c4cf8a8b8832ed55675426f5cb29dfa3f9e60dd3012f4";
   hasRunfiles = true;
 };
 "context-lettrine" = {
@@ -10172,12 +10687,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "context-vim" = {
-  revision = 48391;
+  revision = 58082;
   stripPrefix = 0;
-  deps."context-filter" = tl."context-filter";
   deps."context" = tl."context";
-  sha512.run = "3e32d0132997f21c6cb5d4c5740cd2ef4db3894343196f3cfaa8e046a289082b0b16e811582124e974a93df1606ed4a5b6a1284663eff7524048eef098227593";
-  sha512.doc = "01cce32879386b537a83c203c3327dfd0798f75e781c631e24357d290534a657280b009549adac29ebc237ab1bf228a7cc6f513197c5fe8a2f6867c798f44949";
+  deps."context-filter" = tl."context-filter";
+  sha512.run = "47f6ef2dec0048dc5b858ac32bee045f3b0c62ac8ea4b8684f3e219b9df924f507889d69516bd03c582a36d62b1d5d213678871be58bd6792bf19edcd5a9dab4";
+  sha512.doc = "f67ae9f7864db3398f1dfaaa9b79cd7faa208d40531d6501c977fc45b4ae45ac2c73695fa7e2e35e446494009f38f5e7b1fe82075cccbaed92a1a312eb00e3b2";
   hasRunfiles = true;
 };
 "context-visualcounter" = {
@@ -10330,10 +10845,10 @@ tl: { # no indentation
   version = "0.1";
 };
 "cormorantgaramond" = {
-  revision = 53339;
+  revision = 54696;
   stripPrefix = 0;
-  sha512.run = "04f9cf2cfa444b33af34e1289825333a105e05f224b855229a3eb437c28085a5cbfc3507761918867dadf940e5c175acf61d124668941549f4d0acddca0385fd";
-  sha512.doc = "7641db7d8c3100e6db19eef63cc6a9d9de15eb4547175cd6d32482926c1f3665dbd9d1658f52023fc030c4921a5c7a8d050fc3acb839937816e9eb704205d8e5";
+  sha512.run = "ecb159a7278d7f2e98402b0174f6985d6e29ce340e2c9cdaafb39116f7be42ae2f802b9cd48265bb8b7b0ef4e0320c35459e07df9af7f18831fb4f2750bb5437";
+  sha512.doc = "a746ec2d0702cc8ac5b9d62c824c5227ad9ad816a74f04f115fdfb9a19d8e64b31739e4d4421386ea43e98286eab05257f69686c1bb5edda0d9a25e533e81a8a";
   hasRunfiles = true;
   version = "3.601";
 };
@@ -10354,10 +10869,10 @@ tl: { # no indentation
   version = "1.1";
 };
 "countriesofeurope" = {
-  revision = 52285;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "77d075fe233359be6d50003d9577ce84965c409ae89da18ae91ab214a80200b83843ee25a1caaf1d0ac1e6fc076efbe560f3dacc1770120a89c6d8612915418b";
-  sha512.doc = "03071f1cc0c00f1930307395126f035080c2efae21ec99ae81a03abdbc572d1219dcd3a63b8d988036a1c2b9c4f1a4a564df7017a886965068d1ae314a995306";
+  sha512.run = "fa0faa88db3e7c1baf73d5fad1fa196915c752e15dc024cef051127581f1e8a3d218d5f2f815b44bbedc9bd6fce6292825929471b595771e9ecd0b5131b11d26";
+  sha512.doc = "e99ac6f4b57a2aed80cfd1214da7625ae94336677f0cfa0306125b06054835c2c3b23ac901cc3f421d56e4d021dd468db12e21acd6b3883c8b937919dbda056a";
   hasRunfiles = true;
   version = "0.23";
 };
@@ -10383,6 +10898,13 @@ tl: { # no indentation
   sha512.doc = "59c5cec8491e678b084afb4c6e63ed07ca179b5f17be8fe581ff341c80b3cee8016601799ada090e1fcde9eeb72197986f3d4aeffa7c7a9d10a014e34282f52a";
   hasRunfiles = true;
 };
+"courierten" = {
+  revision = 55436;
+  stripPrefix = 0;
+  sha512.run = "06343c68149c28b8808a38d5d7f2a57e9bff996d836c90a352ed77da4637fff150a18c13b8807f401e3d9cc9e7ecc773275f8ca18e2dc8d315ec5647c3f6b55c";
+  sha512.doc = "737818c02e35e5502eca7bd80427fb814f54d495bd1315b124ad32a033da0ba0b9b4a2cc5a1f8c19b0f8d91f8534a783253742728ad1c8499d97e14fc3a67938";
+  hasRunfiles = true;
+};
 "courseoutline" = {
   revision = 15878;
   stripPrefix = 0;
@@ -10409,12 +10931,12 @@ tl: { # no indentation
   version = "1.01";
 };
 "covington" = {
-  revision = 53303;
+  revision = 58589;
   stripPrefix = 0;
-  sha512.run = "cdaff0af120ec8b455a25a57544b2a5cb5c55798c2c0b5c360f647b95840581820ff4caaea6ab27d586c0eb6369288deec889f28c6f7669f59177480a64baaa8";
-  sha512.doc = "9c665da78243fbbcbc6beb9d1170fc30c0fb43b033f872cac9667638027f00473cf1dd02ea5912c448407f774c8deb07b8fb02e7bb7a74eecae9aa87be9fd4c1";
+  sha512.run = "505e6d4ce7e009173d14eb2288bebd3805d1bdf39819f7c9dc58abea1687e4ea7ec816ed3c2e3c7dcd8c98bbc8cad3f59cba103404457ab9c8726e14cfa1d3cb";
+  sha512.doc = "73fdb576dfb6337c9500d8c92a2be2216d84da12fd04b1cfe7044f4e24fca0120c3bb98f18aa4263617721ec3449cdf98a39e441ece77c2adff63930182a1673";
   hasRunfiles = true;
-  version = "2.4";
+  version = "2.5";
 };
 "cprotect" = {
   revision = 21209;
@@ -10426,21 +10948,21 @@ tl: { # no indentation
   version = "1.0e";
 };
 "cqubeamer" = {
-  revision = 47630;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "6dd13c29855533c100146e712431d64e4d55bfe9c49b2199a63f292933e6666c0fcd15e17e56b534e648a64b5117b8bf211a1f0f595d83db54e587977590a2ce";
-  sha512.doc = "38cbdd297bf4ff67d0404b75c497416eddaf18d4430ea49af8413ef504e8463a3127e3d42aa12f2920a12d13c03935d6aab5b036d398322428659918b5058444";
+  sha512.run = "7c2c4548f8bbb4885680588ff113c8af96d79b5403d6cb01bebc6824745fecdd243af7e14b51bdacc91a6ee2301946ae911aa6c892d248958c1089d3fac383a0";
+  sha512.doc = "f11c9d614b75a973cfd0452e283078c5af259127624f7746c0f49152da20ea016acb8842ce343cf342e4fd45f563bdadb48fc4e98cf964bb1c6dd044e610e202";
   hasRunfiles = true;
   version = "1.0";
 };
 "cquthesis" = {
-  revision = 52355;
+  revision = 55643;
   stripPrefix = 0;
-  sha512.run = "08c18f72346fcb3bda3f0bacdcdaca72d68e89675b98f1aba46c3181a334fb4e21de82b219637d05bce0de4259b3b4ef4790ebdea3ac538f4a121311e5fcab5b";
-  sha512.doc = "88daa7155ffbf06bc393c991c9e043015bfa25122737f64203f6c0352eb2e9b386ce7398736ca62d33e0708db4f60741f5ac76ab48eaabb10b5c1ce7c4a40b71";
-  sha512.source = "06b48932193614c71e20f5e8cf0eb4905f798694eddae90f42e03c67d48c1b4dc0cea9d8e9a2cb0b9d8ca31c5b3b4f075813fd9755ceda7a09029e9817d95c5b";
+  sha512.run = "929e1b191e8aefd67e734c49227c24ba6f4a15704d3f40aa49b1c0390796dfef36b56e7735e068fade5415838918ec712bd34cfffc9aa2981929067d73d86ad9";
+  sha512.doc = "ab270eb465858de3b92248b3b884fcb648b59cc3f947e3362a445562c29e910b0a7f1e4c137aea49c537e68ba61a90d08f40ab43d3340c109e01a293505cfdf9";
+  sha512.source = "2184befc80f4ef6f23aba573778e99314dab80b65f053416e5dc8ebb0ff462c8f5d665085955fd28d88dd24cdc9e0599ba4735196b239e3123523cc1316da3a5";
   hasRunfiles = true;
-  version = "1.40";
+  version = "1.50";
 };
 "crbox" = {
   revision = 29803;
@@ -10451,27 +10973,27 @@ tl: { # no indentation
   version = "0.1";
 };
 "crimson" = {
-  revision = 43525;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "58708970173456998d07a7953d86b3124a0b97a918910229c0d20a300de688283bdb85b63a7596d2bbf2a6cf5f1069a596e43b29d6fa0c5866ef9b0cc1d01b3e";
-  sha512.doc = "2fac264b2986a52a739496c907930b6182e56dc24c8b13356d4d564113d6aa019734fb450168122aff2b0f14ecea3d962b4097638277b805d3a13cff5493fa9b";
+  sha512.run = "26a4e2fb4439f111893c85b7f9b77162be5960a34e000d7a33ce59cc2db83c39cf283a882c89fcb031162ab6a398c481adfe0556dd42b76a2ab36cd9d1573108";
+  sha512.doc = "1e97ec47cfe2a9fcc66a87469262c611e6e95c051444915548d2bea644f4c8fba3ce38beccdf2ac52d95e416e4fe8b6dba33eacb4aea9b33726e84e04ad11cb9";
   hasRunfiles = true;
 };
 "crimsonpro" = {
-  revision = 52506;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "64c7f5d30798fd99de0745869985108b702b66de8d48f0d2ed68ede9cd49e032aaacbf24d5a5fdbced79c2fd01d25e171273fab5873baa351f5b46ebd91993ab";
-  sha512.doc = "fa46cd05b0e5fbd71881d8a42f635bc7271106a73d412d02e49b968ca60985b60f470927a6c8f68c42060774dd2f67b0830ff6628c506eff57462f5bc6e06638";
+  sha512.run = "4e7d10cc23057a5bf2bef8f62dc392f5a3855184d18c814e5569bd6e8d7f0ce692ed9329377aca920a3b6b8f924ea9df47c6c51cf29c638483b7a294da1a16f5";
+  sha512.doc = "8c6e5951acce558777527fbe4f36380418e9ebae9dd38d62d034f6a33a87de76259c8fa074d2a3afedc746d595ea60f1710c792af6ab6a4c413ebf8a12480bba";
   hasRunfiles = true;
 };
 "crop" = {
-  revision = 15878;
+  revision = 55424;
   stripPrefix = 0;
-  sha512.run = "6909ec6d94362aca7b0c0a00accba6015f5b30c06bce01acd22b87b2d1550ebb7747013d008b7cc82c4cf0b3f5fe6a6575fcca4ee50707214fcb0e19ed796989";
-  sha512.doc = "b68db452aca35a90dc77e500df8db574c321c693490abdf9c7135c7457b34b5a42dc32213c5917a2e4ee37252d909315c4e68ff76f3185a9c321eee3bee10a04";
-  sha512.source = "dde8987ead8158440334e35ce04b10051a3ff2c12ab61f9a3522c0c6d6bf93351e2b9ddfd17d03b8c2c42c0b7204dc3a54b46ad2f486a32374fb6d7a50e60ebc";
+  sha512.run = "f6161e7688d8853d2d9041cfe26360b71a920028df673d04ba38f258c810021752bb7282757ceb98b2e62f7ae52a5f4abcdc61333081d77b205d5431ca62a569";
+  sha512.doc = "770ab2977a4ddfdfdbac5f1107e01b8bd5858a31747d44bf0186565dc79becbefde2f34a9514dcf214b8eb781390e98d5f5383f2e70e393ddc22043d4a0eacfc";
+  sha512.source = "1b1f0e6a309d1657a12f9760ce2a01ab370de1d34bd628bc066768eded3d7126cbd1f8c38d315fc120c58d73cee48fbf2515492c218a6510306766dd83861b15";
   hasRunfiles = true;
-  version = "1.5";
+  version = "1.10.2";
 };
 "crossreference" = {
   revision = 15878;
@@ -10482,12 +11004,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "crossreftools" = {
-  revision = 49589;
+  revision = 55879;
   stripPrefix = 0;
-  sha512.run = "9f5426951f7062ac3a850d141aff2031ea2197a97d5e4bf2c2b93fcd2719d5b1d6587b66d51fb258f514423bcb43cc8699b58a74c411824ffe7057cc27d03702";
-  sha512.doc = "66597598d04218394abe1762aca2e9ecb25ab25328e9b203bb789459d053ec575f2a7adcc9460b1356d5488b32f2fb8335e8a7554074fb5ab2df810fde2be586";
+  sha512.run = "50b8ce01e9bbfc1f3b4ec9093fe0b091780edbc197a9c637b98a025926600459c5f0b22f5683427bd0a4f0a6ddacadf77833f3171d2dbd45ce43dd6e1d80d813";
+  sha512.doc = "0edf43d8b68decea7d83cf5eaf2f92f86635f19041680be4a511a57a7751dd40efe4b4ede05a898c2e00f91076caeb3f4b39c444d1ab8b05a4f0471913e4b475";
   hasRunfiles = true;
-  version = "0.9";
+  version = "1.0";
 };
 "crossrefware" = {
   revision = 47861;
@@ -10496,13 +11018,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "crossword" = {
-  revision = 32657;
+  revision = 55271;
   stripPrefix = 0;
-  sha512.run = "e55390ea7eb83686bc49e1f33fd4df2e7b977e031fa6d42e3d18d2cb5b9f34905aa4c43f173ad6745e98683376eb5ad4fae1a8344355b272f0b4b8096b1521ce";
-  sha512.doc = "121e26265895e99dd00dc84ef8b1ba9f4b6917ccbfafa6a35d1f6b81b42c70153bed17790eb6e2d4a5a4fcd8c5cf2e03f5b6e458a2b125a2b7a0f0292bb24947";
-  sha512.source = "91f7fc2a78a83eb404aa11a95f941f81f10da9a908a8ca4f554b5ed496435cca615ce69d9e608c59a025b51243e6c1bf14ea69c896d944a757e1c1cb470e831e";
+  sha512.run = "120d76d4513d2fb2d5ddaa9b5a45a3fabc42b4574776e60fc700f9de07030679ad36f2328ffd1dd5a0ce0148c4b2ce7c6f774eecf1fb2ad747fdbe585178ea26";
+  sha512.doc = "ca1d098a53724ce035ab8eb6e07de2f2b38deaca029b4e3a0d15e98dfa5ed9998fdb95b8dd5ab254862ca0ecbb7c15fda6bbef3d84cd6a7293f0172abbadb901";
+  sha512.source = "4071af8acad185db5ff31137f966378dd239a155668b822fcaee4091d460fd8062a0b08fc39b5d5a2b0d2c0d1adfbacc0884ae9654a555eae634b71cf722adea";
   hasRunfiles = true;
-  version = "1.9";
+  version = "1.10";
 };
 "crosswrd" = {
   revision = 16896;
@@ -10514,12 +11036,13 @@ tl: { # no indentation
   version = "3.0";
 };
 "cryptocode" = {
-  revision = 49131;
+  revision = 55920;
   stripPrefix = 0;
-  sha512.run = "b15b76169656d91a366e17fc832f0b661e0bd31e2d8f61e2431d3e7adab66b24c145c2e84e4c9f9aa8dfbe27655b37c657765e549e04f9de447c5c6cefe38480";
-  sha512.doc = "0245804ad3761368a634d7b062a02e5a073ed91499c3792f82670ea6ed18f6790f74d23e5ff4770c1c3af64b3a90d9f3d59ebe88828496ae19fb517dfca1e0f4";
+  sha512.run = "df6a8f1f92357f235ce6ab120925c4e833985ba8ec487f8477a06ac8808997c3f34e2955178f505460cc008183966ffb06280b41a9ead249e8f03062cf2f7140";
+  sha512.doc = "1369982ed17f6205ed2206b082faa902b8d0b2fa88669f215cc113a4bdb7e027f9e696311a3a0a19e5a48151a858d5c7a151bf4d42eff04a807c32f8559d67bf";
+  sha512.source = "e9849dd4382b51e6f2d19bea2e074c2918fd4aefbab9f7add357cc6a122a4b4c35416d50886b7fb68a2db899d00ff8892a38ab91833d1a694969f946ce415a56";
   hasRunfiles = true;
-  version = "0.3.0";
+  version = "0.40";
 };
 "cryst" = {
   revision = 15878;
@@ -10536,50 +11059,58 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "csbulletin" = {
-  revision = 49681;
+  revision = 54433;
   stripPrefix = 0;
-  sha512.run = "730ca61f0678ab2dfe4aca6be57b64cf6944ec018a7154f25c565687c29cc746b9cbd508ea01600a1d17f31850dd2bd047ebd47788997cd244e8f74199a96d68";
-  sha512.doc = "b9581a3d257647ddbdb583c5327e1e6dbbb52c8bc3153e115dcbcc6047fc2146ee0b62271727826f608d70f9d1a1b25e844c6f772c12ce6b8c38e1cf32015303";
+  sha512.run = "7b1f41ce8c9cecd8cce3aa1458a029a558b3a70dbcf8e5fb53e192db5d4b56ffdca3e323fa54d7960e141d6e1e32ca52b8824b3c326c94def8b32ad42d0dfee0";
+  sha512.doc = "4299308a6408a826f139bbca785cbb139f94ff10e67c80c597e0e7cbfd3bb6ff4889865a04922e4cbe23cf0d3d6f1c1ccc5cfe4d5c2dfee4c747ba18873d6190";
   hasRunfiles = true;
-  version = "1.2";
 };
 "cslatex" = {
-  revision = 53786;
-  deps."latex" = tl."latex";
+  revision = 57972;
+  deps."atbegshi" = tl."atbegshi";
+  deps."atveryend" = tl."atveryend";
   deps."cm" = tl."cm";
   deps."csplain" = tl."csplain";
+  deps."everyshi" = tl."everyshi";
+  deps."firstaid" = tl."firstaid";
   deps."hyphen-base" = tl."hyphen-base";
   deps."l3kernel" = tl."l3kernel";
+  deps."l3packages" = tl."l3packages";
+  deps."latex" = tl."latex";
   deps."latex-fonts" = tl."latex-fonts";
-  deps."unicode-data" = tl."unicode-data";
   deps."tex-ini-files" = tl."tex-ini-files";
-  sha512.run = "bfb780410a2b80919c5535e6985206a0bb9e719f9773d9704342e5506cc20305adbf7b45029829af6fc07e1158fe0b55ec92abf3fc43a8cbf370a69be9932b95";
-  sha512.doc = "03c4f67508330801762682f06a7e23572a1fe1374d559820e25847076ac9e6ae153eabe749473564fa54a1abac472cf5387d4dc75b1abc7567d6f8186ed74e73";
-  sha512.source = "409ccab513ec606b4c92087cf947aa1937f99f53d616b64b62310a73787a9cb58d878e26a937fc031b281fd5343aaef1f7050464de5051d3b3cfb89bd213387d";
+  deps."unicode-data" = tl."unicode-data";
+  hasFormats = true;
+  sha512.run = "dd6b98eb22786f39c830a4c012396507dca694d727f1a7eb147a1c8c2d4442d8120e016de4c08c038239dfac866f828bc7686d8fd124d1af63edd0994db80f9f";
+  sha512.doc = "8ec3527c25c07641788b809cca4f4cc8bb034f63f1100b74270041b503dbc8926a410429a370692502596bd6ffec69a970a19b1c32178e4722f81acdbf0ea934";
+  sha512.source = "0563f453bf7e34b4948a29d832207f8148082c5186a6915a6bdc1c41d0c08399505491ccdea0b45e8bf326a8e8459d37eeaca546143d9f622ce4dacba11cac7f";
   hasRunfiles = true;
 };
 "csplain" = {
-  revision = 53766;
-  deps."tex" = tl."tex";
+  revision = 58353;
   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."hyph-utf8" = tl."hyph-utf8";
+  deps."hyphen-base" = tl."hyphen-base";
   deps."luatex" = tl."luatex";
   deps."luatex85" = tl."luatex85";
-  sha512.run = "cdc33ef0288eabc03a189917bb5a40c4dda1d206ae4bc4097a72be1d9a9575301cfcc289f24ed7c313c2804bd99125684d53c6599c4a9f8b6eb85af85cdc5a95";
+  deps."plain" = tl."plain";
+  deps."tex" = tl."tex";
+  deps."tex-ini-files" = tl."tex-ini-files";
+  hasFormats = true;
+  sha512.run = "27fc3fbb1aa29693fcd1d39abf92e3248fa769b8c4e0171948c2a7957e52dad2e08759050321401f7cb900285de62246bc0013d22141281111a82681c11802e4";
   hasRunfiles = true;
+  version = "Mar._2021";
 };
 "csquotes" = {
-  revision = 53041;
+  revision = 57844;
   stripPrefix = 0;
   deps."etoolbox" = tl."etoolbox";
-  sha512.run = "541cefb84ffcb6a398c18d01cab5d7c96bfaa82841b9439c1f77f3b2b4904e0a37fe2e2b355777e4552fdff3ebb054daae9d9d9a6c7436746f44917095be119c";
-  sha512.doc = "84407b58454e4e4b235d93b01bef99f7a20a5de4ebac4990c9e00694a14dd67debe27afb6f3a079040330af3ab186db11f1150e97fa9511e782e55c4abe52bcf";
+  sha512.run = "c783ac945ed324cfbefad1c614010a1b1bf6774d7961a085ecdfe1a870d80134a86ef6bec6b0114f9274a83f292b22ecd21d8568977d8f7c07dda084b5bfb348";
+  sha512.doc = "7a7ea8568c647fb06c5e309bdc64e48ef6f57f31b1cd7957e47f1a4a7897c9bd37ffe8ce4a17452db584546db741319baf90dbe99b5c3fe666dff5ecf53a843e";
   hasRunfiles = true;
-  version = "5.2j";
+  version = "5.2l";
 };
 "csquotes-de" = {
   revision = 23371;
@@ -10589,18 +11120,18 @@ tl: { # no indentation
   version = "1.01";
 };
 "css-colors" = {
-  revision = 43961;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "b5e000180b583470bc6721601321f81a2f11e70388f05fd85a482b491e1d3ea536db0fbb96a6715fcca81e5bcbaf289af9540c82a2201befac1d2254fbc4cfb0";
-  sha512.doc = "d08c0212f4c36eb114b25128ac8516cb7181ac73a2ea61ee4ed1eafdfa7fed15a2b928d6d0f63bdbf2b4beb93a843fc8dd16b959297a4fccff89c428647f4ddd";
+  sha512.run = "cebeb4e7cd71ecb1a502f6788fa62284f2d9e3e4afcdc1ddce585e94683a42b20e7b9838ff5c85fc0634894898d8061e01de79e062946e943b315d2970ad126c";
+  sha512.doc = "6299617c5740f104b59e850ca826a2906d63ef3564b6730b01decb4f7707828e28ae3de2d44dc851c094abb702a00a9a4cb2bc61f18f020dc37c04e189521c1b";
   hasRunfiles = true;
   version = "1.02";
 };
 "cstex" = {
-  revision = 53767;
+  revision = 58354;
   stripPrefix = 0;
-  sha512.run = "4694b738593a72d14822afb5fdfcf6b26ed6aba7368f5957bac357aae822fc85c3e8a4f2a6faf58bd03ae77601034ad86cf9ec67e9d946dcc4c859edd42bc20a";
-  sha512.doc = "a1bc7ce21066c16897e6874e6ebccbee21d111e1f16e33fda07231e80b06fa537e98970789ae6e7f4c51a1135c995f3b971b6078872595dc954b0cf70a0557dd";
+  sha512.run = "bc27207c1b7ee821f876f9adbe6187b6e6c1c5d0fd207a99bb76fa8a01f3738012150c96fd2d16e99a2736a11f8505696d1ea6e22426dc5049a43be9116f5585";
+  sha512.doc = "f9cc9398ecbe1e2d97391f27d9c997cd730c33f275708e399fd5604239f68bda7a408cc2e7ec3ba8220173090d4f5fa3771825c7904f7f4a81a477b16fae0ac9";
 };
 "cstypo" = {
   revision = 41986;
@@ -10681,17 +11212,50 @@ tl: { # no indentation
   version = "1.2c";
 };
 "ctex" = {
-  revision = 52683;
+  revision = 58583;
   stripPrefix = 0;
-  deps."ttfutils" = tl."ttfutils";
+  deps."adobemapping" = tl."adobemapping";
+  deps."atbegshi" = tl."atbegshi";
+  deps."beamer" = tl."beamer";
+  deps."cjk" = tl."cjk";
+  deps."cjkpunct" = tl."cjkpunct";
+  deps."ec" = tl."ec";
+  deps."epstopdf-pkg" = tl."epstopdf-pkg";
+  deps."etoolbox" = tl."etoolbox";
+  deps."everyhook" = tl."everyhook";
+  deps."fandol" = tl."fandol";
+  deps."fontspec" = tl."fontspec";
+  deps."iftex" = tl."iftex";
+  deps."infwarerr" = tl."infwarerr";
+  deps."kvoptions" = tl."kvoptions";
+  deps."kvsetkeys" = tl."kvsetkeys";
+  deps."latex-bin" = tl."latex-bin";
+  deps."ltxcmds" = tl."ltxcmds";
+  deps."luatexja" = tl."luatexja";
+  deps."mptopdf" = tl."mptopdf";
   deps."ms" = tl."ms";
+  deps."pdftexcmds" = tl."pdftexcmds";
+  deps."platex-tools" = tl."platex-tools";
+  deps."svn-prov" = tl."svn-prov";
+  deps."tipa" = tl."tipa";
+  deps."tools" = tl."tools";
+  deps."ttfutils" = tl."ttfutils";
   deps."ulem" = tl."ulem";
+  deps."uplatex" = tl."uplatex";
+  deps."xcjk2uni" = tl."xcjk2uni";
+  deps."xecjk" = tl."xecjk";
+  deps."xetex" = tl."xetex";
+  deps."xkeyval" = tl."xkeyval";
+  deps."xpinyin" = tl."xpinyin";
+  deps."xunicode" = tl."xunicode";
+  deps."zhmetrics" = tl."zhmetrics";
+  deps."zhmetrics-uptex" = tl."zhmetrics-uptex";
   deps."zhnumber" = tl."zhnumber";
-  sha512.run = "f632e40abceca81daa4db24362c4cae46533f6e8df33c221bc76e60380dc48301d8b9fba338a40c1c6880dd06cdf9fd36fe9907c5fc5a97c9aad6cef07b84d80";
-  sha512.doc = "eab21d42d1984fb697167d2d51f09e34495e331548f32daf620ba852ddbdd1233c34b382595364b7e208ad58cc25c4f08ee09ecc080e7c9b17e84290f4c9c885";
-  sha512.source = "d35c6f8425efb53d7fbad1b4baec18166d4888a92b70decc7e66b1371b8e78392795a850c213d292dd7fb344f5b3cb8efae3a76e16dd84c2a82dc582dd69d67d";
+  sha512.run = "64fa2fd00ebbf9fa5a16f0ec23429f77f48e9d84f8a064e2be475e9e0449c73bb9c5f63a93b574bd3ea7af737f5aea72ad7f0be1b98e2e1c0bdda5061becf6e3";
+  sha512.doc = "409173d58ffd65ba57acfc580fa2b0860327d536b8758816275ab0541138af0869ca1460f8fb725e0f185546349fca2d867afe24a19e74c9c147c36175d8e060";
+  sha512.source = "7fb4745ff434fa138fba81d2df95269be134caaa130a00e789252c3855dcbfb39206d558f963ed63c3a16072efc3184f6ce075f3bdae2d4ea23e00b2bcf32169";
   hasRunfiles = true;
-  version = "2.4.16";
+  version = "2.5.6";
 };
 "ctex-faq" = {
   revision = 15878;
@@ -10708,10 +11272,10 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "ctie" = {
-  revision = 50602;
+  revision = 57972;
   deps."kpathsea" = tl."kpathsea";
-  sha512.run = "05fd794d4437c662b77b0662dd0c9169aef35a10140abad2519702577c087177d0a02ee5b6163873fe5b3c83c3f77c342c4774af168ebca2ed875717c7d0c5b0";
-  sha512.doc = "83bb53248ce262bc8310faa8c0e057dac72c7c682e295fb9888acff237249a66a69d66b99d79033f5a1d8611ef582dd2121f8c28be9800ebcce775bf3adecf63";
+  sha512.run = "68cb48fc07bb2b184d38b65d722918954d376243e7f5133ba2f6ba67be8cb8f6594d2f66dbb733e6ba16edca033aa5046da8abadc2a80426e1151e975f6b27c5";
+  sha512.doc = "a77483824772f5474b6f2954358548e6ce30a60635d1776e5cbd44b020bffad5ebf43ae0474b41b67832cd133f72ff4d25be8985fd669e493815d86f69d09c26";
   version = "1.1";
 };
 "cuisine" = {
@@ -10740,13 +11304,13 @@ tl: { # no indentation
   version = "0.4";
 };
 "currfile" = {
-  revision = 40725;
+  revision = 56478;
   stripPrefix = 0;
-  sha512.run = "5e67b659df7048a2f3e0d99f7e7da753fcabc4cc94d284d88b6b6922dffe2823eff3c07e96d0d4689d2c430a1cd66ef4693d0ceb344609c6aeeb919aa378a297";
-  sha512.doc = "d45abaaab826dd9dc8a7d5cccdeece29b26d8f56c0c74c2047f5ae7d43ffc3c0596f009536fca744fa9bede2e8d87a13b68b8ebf4a0ced31afc6bbab5b76ad72";
-  sha512.source = "0374496112e380b2c8cce8b00e3dd97d992dbe194f660118c3441fd9b0ba536f476b5e330bd363a624f71d5b3004f50d2ee315534929093ebf9f63f47e91c1fc";
+  sha512.run = "8305bee1b1375f3157a938714b0803d976818dce716d0587ae3aac2020c38fdd987ca45d55aa8605c497b3bd0cb5ac909f5c8347f30836dd5ec2b36d18d06a64";
+  sha512.doc = "7efdf77590627c00ebf0741cc7c77f7813f64fa7a9596c7b35c48e0b0364328a9166fdae5d93f0426ce2b8878c42e1c8f2e7d36823a08ddc7e5fcbba4bebc2d9";
+  sha512.source = "34db7dc10bc9573093242480a7e9a2b1138458dfdf3e71bc5a7a8fa3642a9e2545f1fbd308e27096213f031c55638f778594a9844ce96c6921e3f2290c9d0fc1";
   hasRunfiles = true;
-  version = "0.7c";
+  version = "0.7d";
 };
 "currvita" = {
   revision = 15878;
@@ -10772,13 +11336,13 @@ tl: { # no indentation
   version = "1.16";
 };
 "curve2e" = {
-  revision = 53960;
+  revision = 57402;
   stripPrefix = 0;
-  sha512.run = "fbb2481e0baf08b163b016f494a05dcfea0b28fc458e502f69af12a264059717687ddbea1c8b4395246c18c731969b5f1ba48b3f20e37a1248952b2faf33134c";
-  sha512.doc = "5ec0e0fb849540f819090dc0c9488167553d44452975d218ce4b25359b89f8ceb78504539d522c3a281afbdd3dc44903bb89837b1b73bcc8a31d597d95da8efb";
-  sha512.source = "8845ee9fc5fa19a6ed749715e52f4dc03e938a8355672e7b6e7b4d4c6e3823c70d726473a096c4525eda7d94d2ce1818d93df0ba03e0639c4d46244d533476f2";
+  sha512.run = "9346fff324a93225d271a2bce1a038888a1850c27ec090832740c22538342192889098ccdcbff1c5034d48c41c479b131b1fa7a401e0db684ba01536f3eb7ef3";
+  sha512.doc = "bd84b3122aac83e5584921c4c8484430b546012bd5d93f49a1387acf6476636bdf6f00f77b90af53252acb3600ae75c7038fed4d213b76e71543df3b5900eb09";
+  sha512.source = "c64897e4f2c6c2705b5093b2a937d2cf2dfa8cc2d0c9290775d155f733c82e0b7f11d30b8c58e21416b0f4a1e0cd4b29f1bbac5cdb665e821ec11218767865b5";
   hasRunfiles = true;
-  version = "2.2.3";
+  version = "2.2.15";
 };
 "curves" = {
   revision = 45255;
@@ -10823,11 +11387,10 @@ tl: { # no indentation
   version = "0.2";
 };
 "cweb" = {
-  revision = 52901;
-  sha512.run = "3fa0a2d9d5e4647fee550b0da0449619e22198866e6ecf47956a99c5d8d8081a09c63f1644f4b37788aa91c411df567776589aa61244fb6e0da3ac72314d2b3f";
-  sha512.doc = "f685b045d0253a1dfcbb81d80aa976553c459ce13b7049ee05f792646906a83976c71570b0d7b995dc9d7928558a7ded210b8fb1cb0fcf79508af731161fee22";
+  revision = 57972;
+  sha512.run = "84af281f5dd3313b2601ade3c038b67baca43a388e6a40ff079be66e2de6fbee0bfc15971241f4c6021a105d2b26926ac228de236fe13019fd0d8d8c4fd6751a";
+  sha512.doc = "e2b13d368b1c338e487c9ac770a8f0da5ea5a58880774b8b6b5a53047a2485d1cc98682808ab1161b308f7480f5a1fcbfd2c45ac39646a3aca8ae92d17db9f92";
   hasRunfiles = true;
-  version = "3.64c";
 };
 "cweb-latex" = {
   revision = 28878;
@@ -10890,10 +11453,10 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "dad" = {
-  revision = 47027;
+  revision = 54191;
   stripPrefix = 0;
-  sha512.run = "3a4a039e8407ea7b8ebb9b2fa500a634930161f6e824e0d090fb00c233cc29bc110e5fd802ee11768569612df1c18cd03137ea086dab86e19bd3cb54dc806045";
-  sha512.doc = "5715bb8219f9800a89c660b2dc581b5be7fd86d9dc085417f3d8e3342dba2f27c16952d9427af64212d6e60359be551b8ddf4eb01f89be93a9c714024c82eeb8";
+  sha512.run = "600bd3267a47e5513f51e67135920c15aa7aefb51f2c3dea6e912f26d1a45071f936e4c568afd322aa7e89d5139e68398b394c287d5076c17e310297fa7f8fa8";
+  sha512.doc = "97d4596972c436762e33bd1d5077f7fdbe7da2a74b016a8841ad98536c2e9d9a2bd01a91b1ad2fb306c7ba06a0a5532d47c7b813d42b0bd82a3390f3bd17760b";
   hasRunfiles = true;
   version = "1.2";
 };
@@ -10930,13 +11493,13 @@ tl: { # no indentation
   version = "1.3";
 };
 "dashundergaps" = {
-  revision = 53756;
+  revision = 58150;
   stripPrefix = 0;
-  sha512.run = "f42cdc5eee0b48aa8c6873febc6baa7a7c1251c630098850736bb321e4cd80d8300c35b9dea45cbc044366e2e522c1ba52eaa23fa64d5f469a3eb68a1616c444";
-  sha512.doc = "4748b63855824fa4f7ec86a9f20d8004f546389e17d2dfe8fc6c8cb910be696ea6ecd20a0ba90569c450137e51bf3c193cd45c4c24161bae41290e6c644489eb";
-  sha512.source = "c10565ec5823f5cd7cf0b827d944b2cadaa72adbef722ad3c906e9e1ddf1a74c506406d1c49590b4dcea05c1e348f24489b4283e0082d632d6f1f6666d92dd5d";
+  sha512.run = "c3ecf5c63fad14f82228913e0b12c6596a9aee24b6de3419a4e95de8de94e40e3d43c2b163a30cf221602ad9c1aa1c3ba42429ac2adac9d13888d74ee1f4e900";
+  sha512.doc = "88ca6be34c5d68ee4f983b9385bd83047e59bbeb94af12d2bd16105bc8afb99b8e6db9d0e25717fe5bd517d7e834d8795bed30ba24455d8f09760d1ad2c47803";
+  sha512.source = "1fce3d4ccecef6c2f5775792162a9cf21951f0006e168df236884f89a4bcc662c1ab9028e856805ebdf19dd410c109ca3de993c088aa9c0611ec98565be06be4";
   hasRunfiles = true;
-  version = "2.0g";
+  version = "2.0h";
 };
 "dataref" = {
   revision = 42883;
@@ -10959,6 +11522,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "2.32";
 };
+"datax" = {
+  revision = 57033;
+  stripPrefix = 0;
+  sha512.run = "f8eda309dcff2ea8fd827cf3dd5c15ea265105234e33f96e27c14316e5e4183ade4c6a240b174df3564fcc1a4046ba3ada482a6fae653ffb5e43e18682852336";
+  sha512.doc = "e4257e66220e0048df198d60a963524187d7373ab7394f4b33944251f534f67648110a8cfda588a992500c381470dee55423be6c224a4e3cd08cf4e633bc0d3d";
+  sha512.source = "c47641c49bf9c1dc0e47eb8045920cdd0e519c07eb18efa047fb7c2a6122166a4e8bc793adfd3db8373b77be901dc6cc8501f5bc9dcf895ed3bce3a261b55671";
+  hasRunfiles = true;
+  version = "1.1.1";
+};
 "dateiliste" = {
   revision = 27974;
   stripPrefix = 0;
@@ -10987,13 +11559,13 @@ tl: { # no indentation
   version = "2.60";
 };
 "datetime2" = {
-  revision = 52846;
+  revision = 58590;
   stripPrefix = 0;
-  sha512.run = "ba5a5b194f60ed3cdb7494d8b6eae89027a89e32188972475fd9fd43423e19a106d88a64a5b8484dc9bfd6d2fe7d03d01edf1391c9375d9e7647ed6d1e16a790";
-  sha512.doc = "e96d7b74d9f2ee18e50b98c82c58da425e7007939d3dbeb21035bf03d2e40e9d9525f695081dfa03c84660f3e2f88c19f79778e7d57bda5285535e98e9d99bfa";
-  sha512.source = "00077e62d983ceec941d5512a843642e3fe9e99a50dd9ccc2484554cc9d1b693ca9b6bd8e1feda26d12906b8bb776ea33ac75cf1dfb77d837db51958bd687f70";
+  sha512.run = "88aae0979b3ca9688aff9c5840c93a626e4d652f8fce664e70132dfb3413e8045f816d54ac6aac4477292f655bcb378f89f0f4f09465f2ae536520e3cf68c128";
+  sha512.doc = "5baa0ef9d3d1e6f0f375ce6dca2f83681d8dca9f3d027c60b705f005a22e87dc1d952a0f4f8d9fa50f0bb887794a8ad89e28ad89f8a99ceea78c97659a4a656f";
+  sha512.source = "c99ec68e3a0fcab5c3c1a3f09ab1553b299a79719c6963facf8d371d8f71488049bda47263f6b99244076d914ba85ffb449b014935654c93ee189fdd51456c3e";
   hasRunfiles = true;
-  version = "1.5.5";
+  version = "1.5.7";
 };
 "datetime2-bahasai" = {
   revision = 46287;
@@ -11122,13 +11694,13 @@ tl: { # no indentation
   version = "1.2";
 };
 "datetime2-french" = {
-  revision = 43742;
+  revision = 56393;
   stripPrefix = 0;
-  sha512.run = "90a5f2e7c7570c88cfd10ea78cab34affd0483916a867c425cee593a080dd41f85c1db9eee22f1c5d1b27899c0d8afbfae2169e0b4fbc5951f0580437f735a86";
-  sha512.doc = "d86846e741d2c4f07efee33c1bb15b1de205d0ceb2f6c2c5930c3f224e350e53d3817b7ca96b47073ea8510389d2cb36b49f853812fd98c6a3d1b2484fb3a80d";
-  sha512.source = "277586cba75c6356674f763679c2d84d46aabeea1cf95211c61e967e413a61324d2e1ecd8ebcda756d5a0406f189f239d547b9b2879ef8ea854722832401939c";
+  sha512.run = "b786e4534dad90a76fccae091d86396324c4f5ddeffed4a2aa44d2df53cc3a05556265603accbc5f07bd1464f00caa9fd5ddaec0faf8e10b4edc9ea036c3f82b";
+  sha512.doc = "6744ddc0a8cd6f190de4462a4629d01b57d3a3bbd33f7c2fda8529685316565a579903bcf4192b5e811cb879eb01427c3d03c9c94ea59828b03f1763ced586c4";
+  sha512.source = "0566b2fefa4f170bece84fc5cf76ebea6805f96d48476f1314d2cd51252bfdc9814ce5b46de2a78a808ff1d8a60026753ead89bad17f022b717d36c0d6e8110c";
   hasRunfiles = true;
-  version = "1.02";
+  version = "1.03";
 };
 "datetime2-galician" = {
   revision = 47631;
@@ -11185,11 +11757,12 @@ tl: { # no indentation
   version = "1.1";
 };
 "datetime2-it-fulltext" = {
-  revision = 38093;
+  revision = 54779;
   stripPrefix = 0;
-  sha512.run = "389840e273ea5b9e8e8c66e77578d9908349589b11a599308acfde9ab8dd972ec855011fc4d3302ad2ae16dfad05812ae75d6eece275761587242099fa907d67";
-  sha512.doc = "a5a56a912b1b618999cec4b37fccaefe6f1e00f3b84f6aff8dd6b9b3ffa1855d25e8af8b49d04112829d7cef82f21b757772876b75cfc910a4dd5c89920ce131";
-  sha512.source = "ddffefcb640de660f1f9258d7bad92c40d3ce73017c53534389ce1d3e772214bdfcdf7a4dd927201aaba096533d7000a84871000772762c2edbfda9d1d11d9bb";
+  deps."iftex" = tl."iftex";
+  sha512.run = "29a67f9c4414d08adce673ac2b501e92be5822470511b55677b041fa1d89b55760246fea08ba0f4cac7ef6f8e7ff52498f0459d50f94bf2bc6b3e4a944976a99";
+  sha512.doc = "24bceb74337abc4ae74bbf9101bd32cc65371d60a0461cec91c8e3ecc3822c848eb8c7f0bc8706ec1b2118294df659b44f3139c3a3ed1c0c243f9654ae1b3d6d";
+  sha512.source = "89a91a69a45100324b24c5cca3e0bdedc8dec2a466c414e65044f55a6c1ec3c715946dd5c5ed942fc9dc8f6a597fe5f2075dd7d05c88d241da4bccb27ba9cb3d";
   hasRunfiles = true;
   version = "1.6";
 };
@@ -11257,13 +11830,13 @@ tl: { # no indentation
   version = "1.1";
 };
 "datetime2-romanian" = {
-  revision = 43743;
+  revision = 56394;
   stripPrefix = 0;
-  sha512.run = "9167976dca51779669fbd91cc54ceced2f0dd6a97610faf9e55bd51a9e5c0ca3c8096c143a71180f0d572d1f1fdca5c72feccdebb58c7caed6e3e33a21c4b4a1";
-  sha512.doc = "62514ec016e7913b74e8c19624aceda5b258d1e1972da97b04bed2565f1c4ac0c694e695e6eefa528963f0375c3866ea4e475747e6141f0612dad2db8e7a1b7a";
-  sha512.source = "617a1cad46eeb6c2c0cf434fec3d436e471d4cc25224c99cb3272bfd14eaecdf3f63862ae61a83126c222f9215b244fdccf101896469e64480991187878eb71c";
+  sha512.run = "fed59ecdb496fbad41a5558526671cddf9cb487f50cdf103f61141fb1955170e54dbc3fc134ef51a2867715e7bc714dbf81bbb11e6d30c324a87492870738d39";
+  sha512.doc = "7c65be46449bf92e2c41623e785c6262c710de23527ea54c505cbe155af50dd9e9831780dd380b3d0c44af7607bc59fd3b168d700c1a8041642bbe4b4ae9cd08";
+  sha512.source = "58e3773e40d6116f5cbb6f2a46d33fb6d557d42887efb130c051c24fd991d8f0709f5afbc8e6ee9b5ada21d613d4d8975488f2e691bd0951c5f5429eda7de61e";
   hasRunfiles = true;
-  version = "1.01";
+  version = "1.02";
 };
 "datetime2-russian" = {
   revision = 49345;
@@ -11382,13 +11955,13 @@ tl: { # no indentation
   version = "1.0a";
 };
 "dccpaper" = {
-  revision = 53412;
+  revision = 57522;
   stripPrefix = 0;
-  sha512.run = "76d73fd1e3dd94465a99e4aab6ad0c411626fbd5ace6edec6a185359fdd33dda507e86d55d7ea182490626548785df140c7939ed811b3c23ba06227dae293151";
-  sha512.doc = "f0c725c43911a38bbc8ee03f77382ce4d1abee5af1d57a12910c67f0eeae9ffe3b44f0a33d916e79c5a54b1fbd16bd5e440848e51996c4d13e200a714704e934";
-  sha512.source = "8da6ebb5ed65d94a020df98597411fb886a2f035566cf902d22708def1a44c2e848c2904c65893ea0b7d0c96a5108c9895aac569269594cb73f5200525170de6";
+  sha512.run = "02cf56e0c9d4450382336869d2edc09e543b119b68ff365c52049a7558297710e4089adb585124396d03745ce69b35d230091ee2c7d4e76011e78f6188cc9b9f";
+  sha512.doc = "2ed2fcfd16373b2af10f91169b2358b787d66af88374600290d362ca9da9db18dafe2cfbe4b2d057ff88b758b70572197ac037f834b02555313ee759af65d6cc";
+  sha512.source = "16764f191263cd3b7ce5a4c128f61b60dff4920b65254202fb0a996e80ca94b206131d9279037fd4948a14fad1f1f007f6e7683373912c7d03ff6626ca3d0db8";
   hasRunfiles = true;
-  version = "2.0";
+  version = "2.1";
 };
 "dcpic" = {
   revision = 30206;
@@ -11407,11 +11980,11 @@ tl: { # no indentation
   version = "0.2";
 };
 "de-macro" = {
-  revision = 26355;
-  sha512.run = "5ce9beff85d65654173557af668ff15af6989d9fa6d341fe9c26149d0715ed7cf57bf5b2a59b6cf99e8ec14e4ebb6816e9972268516a0b2a78ee13c6423b3599";
-  sha512.doc = "05793930357ad58a57e221696d836895f02dec82cc93b9aa7ea302978bee24410d4b382ff72407faa67f4133c75a84fb2454957de446beca05606776c6581ade";
+  revision = 57349;
+  sha512.run = "558a55b14822cda4cfaa05511bbd6030049145916669b699795827181462e628d0a84baf087b8d56e3dccb353d17f581af9bc1662506878124e5cfaddbd97b9a";
+  sha512.doc = "af0a7a463c7a9623050a3fe73782076965eefb58dec17752c80e35a647b5a7a6b354a1dea89ba03b503eef0faffbd2f134a6e5666f4c68665d322bf3b77922d6";
   hasRunfiles = true;
-  version = "1.3";
+  version = "1.4";
 };
 "decimal" = {
   revision = 23374;
@@ -11421,14 +11994,23 @@ tl: { # no indentation
   sha512.source = "a880091295229345290acf605feb833489976ed3b661b403c8effaabd07c48730ac958a4b48dd48d429a3f031413c1392f4006b820f04e3dde6b2035a948747e";
   hasRunfiles = true;
 };
+"decision-table" = {
+  revision = 57094;
+  stripPrefix = 0;
+  sha512.run = "2e89be9bbbc6a6f0fef9f3eb3caa63a6f8c6b749df1057f712d5153a78d4b15542f1fb30d3d5f5078d99a1b45f4d4e92be44d7c631eb86e349e56b03dcb4c93b";
+  sha512.doc = "cdfa48c2835b48f5b0f7d454a4255128613b0f3f9bd2d750b8107c7d8eef1a36aaca3ff6aecc6cfbb1572fd2dca109628d94b4b9419ca44d91cd1ddb12326cde";
+  sha512.source = "12f617e0aeedfae0cfd2e2a1fadad55cbfaeb51abdd2faea829fb04c47edae811eacef4a7480cf46533c3a445eadf8a9090dc47aef0d656a3e204eb6f19a26bb";
+  hasRunfiles = true;
+  version = "0.0.3";
+};
 "decorule" = {
-  revision = 23487;
+  revision = 55230;
   stripPrefix = 0;
-  sha512.run = "e5a962002f66d4d3a5c48d93930ea2e14a68226a1beb9f9aee5b7936ef51a49b4d9a249b7a3038d5ade41aef8388ad78f254973e7ef3558e42848409427e5cd7";
-  sha512.doc = "533ca67eabadea3125dc359a839d5b45b5e1efee88fe74b4a2b911014b599930419a49e7e0b5967e5f89d29e1b452d223faae3d31fc3f94c64cb613907cc2255";
-  sha512.source = "1d612d121367ec69f578479001602aa2a25251edbb35c495a13b636e23831e8dca5f7a2715ad6fc5f3b5e3fbf3769d0b90c88949f5fafcd8d778e8489a80892f";
+  sha512.run = "783f09b3810616b14f04dace838ed1ed2faf32ea4df84dd0973df375928e16fb129ddf6429fc54560a317da0a9422630becc92543e1a1da76809c4962c423fc7";
+  sha512.doc = "0c13e2ff2744ca2d0e32446a85cbec06d832ce1fc8af5a719f3c73ed59e1a85461d5f51d33fe5a51a89b209f80196ad52609e83adbf7cc41336f5bfae8c4389f";
+  sha512.source = "84ab7801ab7b0772ffa3520a42e132007e05152e206072fc1ebb43d8d9675ac4929ad1abb30d8111db7d825f05d37b038ecc923267c5095ed62a34cf3955dc20";
   hasRunfiles = true;
-  version = "0.6";
+  version = "0.7";
 };
 "dehyph" = {
   revision = 48599;
@@ -11437,14 +12019,15 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "dehyph-exptl" = {
-  revision = 53316;
+  revision = 58212;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "4f4e9585f959c51e3700121785217f96d34ab1c8d9af59fde4e3584eddda75a1f1384427992d8335581ecf53c89a5364e1330abeee00c17b318a04870d9f2c3f";
-  sha512.doc = "4469deb5cac413e37b57af14e41c8fbb55fb5c840d4951e79105251b2b362c13417f1811716938b4a2074296845073fb3a13971addd0284207c0c48067c5f719";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "ed2a3c4d91ecc125ecc2179594e66b5bbe66bb806c1b232ae1b71fdd0d29152a2d28e3dc6dbb2e1724650b8b8cb67e8c8bdf5b7506357207ba61c636768fb8c5";
+  sha512.doc = "e40955db986b94bb9bbbbf9daaf6a12d2898ae736741fb0a5626755b55908b056a2b4dbc1d87e9681201d7e45c99297393d6e1d2de17d135d8d74c732106897a";
   hasRunfiles = true;
-  version = "0.6";
+  version = "0.7";
 };
 "dejavu" = {
   revision = 31771;
@@ -11497,26 +12080,26 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "denisbdoc" = {
-  revision = 42829;
+  revision = 56664;
   stripPrefix = 0;
-  sha512.run = "c713ac155e390d3fc75549fb7ff6e3ba13ebf3b3b1a0c001dd39f6300fe2b55ec232221d5aa07b84c87ab7daa971504c20e5f08f033ef5d36dcf9af097128b74";
-  sha512.doc = "561342a0807ca00550410463755c0a348c97e2ededdfe7e6b55c99e34b8a93928167b33e1ec0a7529de6280ee5cdc4001f051234b9c4eec9c41bc2c560bad62c";
-  sha512.source = "e6c27403b1b6603aeea35582f91348a65a5466679a51da2926be278947415f7bb16104220891c3322423115aa973f66ef820462eec7b8680d6020c8364080c52";
+  sha512.run = "636537275629ba01fe78b5a189e94845898555715ddc879a3558539016e9cbc814ea74d6eed0cc31e42d8062e6ba6c6bb5c00064a14644c236a3c4f48f688e3f";
+  sha512.doc = "6e1715fe7ed2c3d0091688ffa4e0e2245a838063a896334727ea87bad566771fa93c66cd0580c3ce1980b217cdf5e6bfba36b77d10d19ea55afe4e8fd92db8be";
+  sha512.source = "89abdd37bda49536437063229346ea70655211716ebcc0798a4df87d49df9a2fb38f201e0b80e8d3748a2d847ccc2ce320c29d71f9922d5f2932eb07de3c5645";
   hasRunfiles = true;
-  version = "0.7";
+  version = "0.9.1";
 };
 "derivative" = {
-  revision = 53654;
+  revision = 55890;
   stripPrefix = 0;
-  sha512.run = "e74c2abfcb29f075c11545aea4665a06edc93f9cbcbd6e687ab1a1c7b07d095c1349225182862b020b8bdf551a90468ba7357f3138d847a2234ca2351f3383be";
-  sha512.doc = "5b794da3675ee46ffd1951b1887487670e26d22a60a3665c5120f08cd931bfa562b5cf97b8690db966e10583b5471dc26956dedadeab1db4057287db64ec4485";
+  sha512.run = "afb3a5e900dd77e4d262320485ef0526c362415cf68e2b0d199c388980211a8c21caef3789fdfe348f290563373823fad4e3881ca3bb11f0974a30fe49f6ecc3";
+  sha512.doc = "800dbd742c60548ddab9d66cd97e142b389f81f3719ca34c6027d69ccae2b790480261eb984c1bf3d8775eaab29f607ebfa2eac6d778f36c999f083cf7ded323";
   hasRunfiles = true;
-  version = "0.97";
+  version = "0.98";
 };
 "detex" = {
-  revision = 52851;
-  sha512.run = "cbdae140b0fa1e5e0afc34548a7febc92f5c1f2981eaf36101ba12857303e1a4f4152e7673393c1fa796e3fde783119d7ec2ca5081f5e127092cecd8c64a2050";
-  sha512.doc = "f60fe0817f1f53320a7f1a54b65e7a39a11c519439a71c379dcf4a9472c5b067c5a687ab2c0145f5229606c4ef05d2d498d4def677d9d5b0fa0fe99876b56c38";
+  revision = 57972;
+  sha512.run = "869c42ec791b3a9dfc2c65b7081e52dabc4adcf8a95f1fb01362be7270ec9cf294bec7b41f9ce79a22d7708f08df03466fb3e1168ac4a4397580324dff3ad94f";
+  sha512.doc = "25abd181e5acf88a0984d31bb1d4d8ead50efd5c71720ce1903f54e2784ec5d1f185e5e89ff0a7efad6a35a0178efa22041e6be46c5da6b79c050f1e45e83e63";
 };
 "dhua" = {
   revision = 24035;
@@ -11527,6 +12110,13 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.11";
 };
+"diabetes-logbook" = {
+  revision = 54810;
+  stripPrefix = 0;
+  sha512.run = "427912b3eeac373ba82f99b30a6ccf360b285a119248e9dd2aa175cfb7f2538327331d9e8eab7ff62cfd987466352c08016313f51b8651c4b42484fb6f089bda";
+  sha512.doc = "3a8c1c45b24d23ff236ca2d8bba6ff6d9ad055a688b5621a660cefbdff4e1407d71d96420cfa39dbb896f8035e6d5a2bf3f33fc2e80074527c9a41fcab72f976";
+  hasRunfiles = true;
+};
 "diadia" = {
   revision = 37656;
   sha512.run = "55a246d4e3ab86d6300210d830ce464a935bb83c9ffd29b5387f0a56f5c82d4c5a71cf107f78ffe0cde07f17897e2f949acf1fe70da9da7c7992b330a07b1c68";
@@ -11535,13 +12125,13 @@ tl: { # no indentation
   version = "1.1";
 };
 "diagbox" = {
-  revision = 53737;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "b9508c1073b88458ee80a63cc1f10a22a96382da7790b54c80bc76e9f7a0315d6f1b9305e373bc4b4542c4c5a6a647625642d021b6bd01955b531bbe59cd3b42";
-  sha512.doc = "07c4a00573a4d30c6c52195b66e8293e575bf80f448cee7e1384040f0ea057194051327fda9719c95ae43e8c249391845803de7c041945a3b72c9c252d8492b7";
-  sha512.source = "bd644dacfcba987a0909a58105696aa8d9ce9e171942509083c6418ae80e7a4964a553a641dc5be6d54a1b1c20ff3319adbf4e78f30705134a2e7b4620c58d08";
+  sha512.run = "34d2530343877efebe9ee53027253ddce0e59df3cd70900bf0f040905f34a8ad9d41328aa3c6ecbb622f7731f3bc9c4fce289caa58e2c1db46a6ec1bafefe6ca";
+  sha512.doc = "96310db4878e417f09e6202e5ca86f29524af5c1292ad8fed2563f1872e094be1249c4753eac5129c68492a5fe9ea87857783e2ca9af1ab77dfd1ca9b3309b2f";
+  sha512.source = "65ac012205c309099ca2f1a23f6446abb434a1a9c66a36d75d15021eead74feeb70c21024386fc11b223386100404b35a0ec3571d24aeec13b5513e60b11b3c4";
   hasRunfiles = true;
-  version = "2.3";
+  version = "2.4";
 };
 "diagmac2" = {
   revision = 15878;
@@ -11611,12 +12201,21 @@ tl: { # no indentation
   version = "0.5";
 };
 "dijkstra" = {
-  revision = 45256;
+  revision = 55661;
   stripPrefix = 0;
-  sha512.run = "2b3d6d68c6e3eafd1c88eb44c8ab68f27dc77326ef43a34119679b0dc1c1c584db8568584956617354f359a52792c6a2c0104dddaa1ec389004dd673ca749136";
-  sha512.doc = "96ed892f5c910421eb5cabe54c4a7c6caf4d9cc139ae7dfe454fac9e3275d3dab4690db877bbe8fa303523f38cc563611ee5270949a6d2fa8d7d2593c1bff06a";
+  sha512.run = "c44121120afd9bc53e747ee3a5e11f6d72ab140f266ebecab5c57bff4fe8e10ac07e140df4b9a21482d61d3d40ed5cda3e7511e83d08214c832ce73bca00f199";
+  sha512.doc = "b258ff0230ac4b21a944602ae3382bda2ab79f162bd832a2b18e724101de4475218aaca09afbc23a7309c15a2897e02380743369ee681186ef577fb60745f493";
   hasRunfiles = true;
-  version = "0.11";
+  version = "0.12";
+};
+"dimnum" = {
+  revision = 58774;
+  stripPrefix = 0;
+  sha512.run = "636543ee5f2e027ec242d59ab8af28e8aa6f35d3e91480e4812a72df3c1636fdfeed2cf472c79b29fae5ed65224da4ca4a0bf5040e2a4360b73fc5f4cec85bb0";
+  sha512.doc = "a00eb3157b84a22afeb66c6f918fb434bb2a183afba110340b93cdb7dc33152f4b9472da134f999f36057b7ddc221a2a78bbaac5fa0509e452c4d8d6e96ebcf3";
+  sha512.source = "2d729252a866edd8039c2d09b8ebc92c28aad4b0863777460c69075d7c4e1065ad515937e13f2de5b0578a89c4693cc508dccf002823e5591a6960c6d2752456";
+  hasRunfiles = true;
+  version = "1.0.1";
 };
 "din1505" = {
   revision = 19441;
@@ -11727,9 +12326,9 @@ tl: { # no indentation
   version = "0.01";
 };
 "dnp" = {
-  revision = 45701;
+  revision = 54074;
   stripPrefix = 0;
-  sha512.run = "9cccb6befd2059b13571e083664e4c85215cc12c96b41afdd9efdeb758b444a95edd4c2586ee1b44dca70fe31f38c4eea821cf08cc1237a82d67e0e567d65d8a";
+  sha512.run = "27a4c150b3b5e3fa23e0df55289154d44e3eaa55330544e426cdd3126f8ce0308abcc17fa5a011e12d83460616cad039cc483f08d7254b64d4dae933db6273d9";
   hasRunfiles = true;
 };
 "doc-pictex" = {
@@ -11746,13 +12345,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "doclicense" = {
-  revision = 51332;
+  revision = 58350;
   stripPrefix = 0;
-  sha512.run = "a66bae24e43e619dfed88b039b8fd44143a1ee1c94a7764d49f7e5d7920f041deb66c8c0ebc91ddc19e7725895a5e5793196724b45945cd31675765caf06a236";
-  sha512.doc = "d0388a64e6679007965b2c1075d730f6b25a08431bf9bacfa8cab8890ea809150c334c96730d8170515b552e5743784c07424ba34d9033669d8463744b5ed5e8";
-  sha512.source = "6c40642c3bc7eba7949da51c7703aab84033596f541d0fc433d5bced75c8be4666b4fd43f6b81119a3e4c2e73a7776aa452df2be544b91ff97c827b925a3df93";
+  sha512.run = "1f701453752b32f1030dd7cda6f51bd94d6d9d67f465070b613f4ea55857f300be8c7a19c7440c6fab129e3fc1749fe6b9aad13b1fc28b5b61670f65bf0e0a81";
+  sha512.doc = "14b5f1cd3bbb3b9c411ab8f461673f1b4028549fa5675925ca6221723e6de3588df495a9a4e316b29d4e5c6836eff845ea3ef9544d2823fa548b4fc54080cd05";
+  sha512.source = "d5edb3908034af8d6c9b2e094eee6747398041df2d812b5cc1708223350e91837b5556a58db91897bf044e25a4cf036a0d945eec2db14f807d7e32c89340aaf4";
   hasRunfiles = true;
-  version = "1.10.0";
+  version = "2.3.0";
 };
 "docmfp" = {
   revision = 15878;
@@ -11773,10 +12372,10 @@ tl: { # no indentation
   version = "1.4";
 };
 "docsurvey" = {
-  revision = 48931;
+  revision = 57362;
   stripPrefix = 0;
-  sha512.run = "e51d73b0dc7267b0564119b6836398a939676d8929e850201900eacb49e701e873661ec897e8c0523a094d82e736014e0ef61d07e2ffb5311924d2fdcaf1d5c4";
-  sha512.doc = "3231dbb4c28a03b754817f50f930f1a6eec33ca9ef6e29a1c4b1edd025315ee9f9e7a371b8733d6624cf9b02dbb705dfcc82d6f98a99aa1ca05b4f277e083304";
+  sha512.run = "89b01331fcfe0b039716b7b56f34c6006a15b69d9e8862426d0137221ed6c2909f7537f5252f657eb0448a1484d95bce57a947867bcf25486b893f679ef14072";
+  sha512.doc = "795cfea7772c3a0a596dee18c0e2398e883c03e10f9d901a8bbc6dea0e8e599936502acbd687b22fc617d73f96993c6d0eb7801a5445ccf448e42a6ed1605eff";
 };
 "doctools" = {
   revision = 34474;
@@ -11796,6 +12395,13 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.1";
 };
+"docutils" = {
+  revision = 56594;
+  stripPrefix = 0;
+  sha512.run = "13a31f6925efd5cb0e0ccc632d7b8ff80e15a2e95399779ba33ee6e0f1d3c1a3f4a397dcb7fe33455471ec65e6fbb18d681349a43b24a083882c23aed5a0b036";
+  sha512.doc = "1748ee0bfe61704d8174202dfaf6a674fd52ba154456f6aa18cf90b2248be90f12bdb36993cfc4a701a8aa3037614c2f86be93ac8528f3da3bce96a611cb5748";
+  hasRunfiles = true;
+};
 "doi" = {
   revision = 48634;
   stripPrefix = 0;
@@ -11813,12 +12419,12 @@ tl: { # no indentation
   version = "1.01";
 };
 "domitian" = {
-  revision = 53938;
+  revision = 55286;
   stripPrefix = 0;
-  sha512.run = "e52d996066ada71b5be5b63c44807fc6f7b0fe1971411b3c106f9e122f64bdaba8d1e70a315b18dc2d94ae15daf5e5990eda6d9865e21f172556a5eb55db9eba";
-  sha512.doc = "7d5bf1324c70b321c5ff795e6113ce5742e72fd2da32332b27322960bf32199dbfd079408c7c0c60b542b6ed7d456e7e77a636bf44238149fcac2640488d99bb";
+  sha512.run = "f228d1670e7904b08ba6064d0d1e8c23432fa826d52229d575bc2067e27adc904c3684d76889a8beb4885c3c9de5cd4a5004b9afd3f7140ae5e90d36b4961b9a";
+  sha512.doc = "81af6be4f2707ec5d46d5f78d459f42d81e0cf62a17a8e695e42b666076637183447a9f1888b3f4c84e4832362eefe01b8d8dc5d748a640eb8e20c72bdfc1f3e";
   hasRunfiles = true;
-  version = "1.0c";
+  version = "1.0.1";
 };
 "dosepsbin" = {
   revision = 29752;
@@ -11879,6 +12485,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.111";
 };
+"doulossil" = {
+  revision = 56407;
+  stripPrefix = 0;
+  sha512.run = "f4260c3849929daf7d4d3de75096111e9004925998a251bfe759ed0b494b3da88634989f77597cfbd5277a94646ef56d4313ac12bb90431cd5c13681123998d1";
+  sha512.doc = "0b258cc6512eb3fc01b193754520431c492ce91d9b3cd73d192e98dcbb9f4fe9190f89886fb0f8d453016ed8d0a89943b3356026da625904d26ffbb5b686b229";
+  hasRunfiles = true;
+  version = "0.1";
+};
 "dowith" = {
   revision = 38860;
   stripPrefix = 0;
@@ -11915,6 +12529,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "7.2";
 };
+"dpcircling" = {
+  revision = 54994;
+  stripPrefix = 0;
+  sha512.run = "d102312ce1c70eeb9cfb279b065197ebd3ec6d3f54a47de55a5cb9828e76b2e690823a2ea19a935151c972f791783fa41a55adde03aefa54eb2b3fe3da0ea677";
+  sha512.doc = "b1b01183f3490897b9681927676a7eafd01367eee6ea2fcb82fdfaae59294c67d96036ef67093fab13f0493adb9dce56f4e420b486bdc5f94e8a7801efcffc4a";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "dpfloat" = {
   revision = 17196;
   stripPrefix = 0;
@@ -11958,13 +12580,13 @@ tl: { # no indentation
   version = "0.2";
 };
 "draftwatermark" = {
-  revision = 37498;
+  revision = 57099;
   stripPrefix = 0;
-  sha512.run = "10cc5a9f6ba21ce87022e0f45d4f4cb92c4aaf8e1a4edfb5e78d24f8cfa1d283745db0d04f32ba2943963677bb3fa934a1f410e9148baceeec23b70436682a1e";
-  sha512.doc = "5d7d9d4dbb18f452e917f91a5e67f46bae4f0ac2b8088279832e32d9e7a7fca1230a666ea1031c258ea3882e7a00d3a071864a20a75b523bbbfb12e7a3da0a4f";
-  sha512.source = "01de29c18e5ca16c0cadfb171c938fc444feb7e3dc558f9283cf4f9260a94c02b6ddb007eed1a296d60c9aceac3cf370ee2e9c3fb63f6c16b25397b837fe4993";
+  sha512.run = "c12311ce3723e6b93e8d21df2a50a3c1ab2326aa5cb6a1600fb848efd5309fa9a1c920e0ad27c785925387af5872570142aae61a2ffea0b3578d10209060e9dc";
+  sha512.doc = "bf3c28f78f03ebe43c84d722d668c14e0a751fb9e0d53ccb6a81cebf40b78f95b53fc3871ffa4919a94c260de861e93048b3adb590dee2bb8b600be1bbeaef3e";
+  sha512.source = "7f9eacb71dc803059f6d9951aa7958effb9e97bb2030884ed02f0fcd43ad554f860ccebc455ede5893d67c527915f8a7093a94b2f146e4884e23303fe882527e";
   hasRunfiles = true;
-  version = "1.2";
+  version = "3.0";
 };
 "dramatist" = {
   revision = 35866;
@@ -12008,10 +12630,10 @@ tl: { # no indentation
   version = "4.4";
 };
 "droid" = {
-  revision = 51468;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "e2fa1b84bde04858b16b39a559478005a6585d71ddc9879d6e54130970a1f0f6e45e584f9635f457af8143093872541dda0ad98fd647ef2af309b0d0badc813f";
-  sha512.doc = "82613922360967cced68b24fd997b06ee8a082512f6567c4ae17f0046972eca84ec1e154d78ba196eecd0aeff8e9b7adae12f3b7efd780e1eb1e161f8b18ebe7";
+  sha512.run = "e57eba23d2b7a84ca36be4b0a2988870a89b69a5c2f423d8961c8fe38c074cead0760c0061a545518959145ead02a13e321c5719cfcd7d6a575b7050cd74ef2d";
+  sha512.doc = "d1f86ef4fd82d955e5f6560b1eb56805bbea621358c3e708f5c07d6539d278a4e61fed680afba425a212eb7383bcdc1d663d492b4cd716ba2c1872f9006350c8";
   hasRunfiles = true;
   version = "3.2";
 };
@@ -12048,21 +12670,28 @@ tl: { # no indentation
   version = "1.0";
 };
 "dsserif" = {
-  revision = 53384;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "70cf249f7e3fd88d03fb7ba2ce07f21a6183a7ab465e8ad319c53aaf3e800ec3e4a9f12226f1302490a316e88c0571c2c9d5310dae6e10c0714527da271c174f";
-  sha512.doc = "ef40db14eed4e267e490df95147c7c5854fe034128f2465fd5dbbbeda6e0aff1267e00daaaccc14820e788957a097cb9c3116c6fd923f9aad152049866025848";
-  sha512.source = "c8ce0770faf0072a23552ef606fcfd80de18effab6e8a40e2f54a1a13ef23d019c81578b95eb9b421353f566e2d32009ed646a1bceb27b224e6acd11846782c4";
+  sha512.run = "d1f173c1892acb75e319fe3e8702b5c8ba233ba3b236babd368c3a8bb47ba67de222e6d80ed65c17de9d152b98a930b59c74dc82fba619c2b24b4dc8143d5890";
+  sha512.doc = "a8a6c9224cb7a55d12d8825d108066038be9ceb3ebf50caf796dc17a84f4d9d615507778934046b8944d235acb3f829e7654527cf485c9bd2562998b376f26cc";
+  sha512.source = "01fdb50fc1d1cfc294121882c3d05ed0878caf154f71f2b5dab6e21f3e96ddaccccf9da49d7aaf000a47c69f890a600d1914fce892d5efa485964140486ee950";
   hasRunfiles = true;
   version = "1.01";
 };
 "dtk" = {
-  revision = 53020;
+  revision = 56696;
   stripPrefix = 0;
-  sha512.run = "c18c982e209b38a4f5d275eff1916f4b7670f2d4f0168d009d89e62d1692beb421b21459d994710e0d6ef3d6b6c09aa9288abc3eaedc9c0fe4e929ec24b1e4c2";
-  sha512.doc = "bae8991bb3e21a6f00d88d687c9a041bd0aef9b41b249c28d9ab4b9eecf91cea2189257791675bccd6796b4e745d4ab46ab7ca44c920955bd95b26fb8c89404b";
+  sha512.run = "6553c4facf6e28210e22641d10babb0c4073c9514231e345f33aef419c95ea30b6fd744711233f91f90183624d5bd5c21ca7901c4ad46358b7b6335c09059241";
+  sha512.doc = "9656de8b3319a84d5d32900a65c013e44ebfa5488761bb31a5d3f84faaf22f648367a842d274b25a19c70bb650e4043dcc18fa0fdeaafd6bc360534c118589d8";
   hasRunfiles = true;
-  version = "2.08f";
+  version = "2.08h";
+};
+"dtk-bibliography" = {
+  revision = 58212;
+  stripPrefix = 0;
+  sha512.run = "24d9c6fbec620031e612be1820a971dfcf763bb457ec440757ea3b40e953cca21b2eb5ea550fb7dbfb773663e04b3b37f99fdd83e592e2405c00cebbf558dc11";
+  sha512.doc = "8b4256fd9dfebf80f5ee1a957b546746ae34801b552db1459a05a1a80be24bf8e64e968cc47c52226b6f4e0c8ee02876de4aa5fd41fb413389130d23be3f2c0d";
+  version = "2021-01";
 };
 "dtl" = {
   revision = 52851;
@@ -12101,13 +12730,13 @@ tl: { # no indentation
   version = "2.1";
 };
 "ducksay" = {
-  revision = 53631;
+  revision = 56800;
   stripPrefix = 0;
-  sha512.run = "0d81bad6d32724b569a483cd6656abe3700e218a52dbce511f6740d05837a9a0cece95461d3b7cb6b4b35cf6ed860c675f2182d61eb1498b503bf1660b675441";
-  sha512.doc = "9667ff1be349058cf969b512e022f354bc840867031d004759c5be53fee67cdff0abaf5a02205181ab6caded8ba46ee4d6f68570d7b92bace69164d7a2418151";
-  sha512.source = "587cb02ca297e92539e017610d63daf0c66c797649fb45be11d2cf079ff9c1a07899ae53e7c93f38d5f90bcc28c34423c00ea63d79cda8451be6b08748e8fa2e";
+  sha512.run = "e4538112c20c1afc2bbbea2d51d2f8a47721072e254c8578929e8acb0b0c6ca99c44eaae5ea3078ff33708ad7c573144e8d94055ac25d15032314db78c305627";
+  sha512.doc = "faa84c55147187055af777b7c770781441ce3a12d46386efb7e4a0348895f130f7b748977c5914914c8040831e11547abb1b648eeb0f4bbeef2e0f93248427b5";
+  sha512.source = "f7fb26b1905a612044a2a05a1cc032855fc395d290b48524b042bc5d87ecd915484fdc463a1115cbb2f5ee2baecf096717bdcdd9e7da75768820dbe9d7ac959c";
   hasRunfiles = true;
-  version = "2.5";
+  version = "2.5a";
 };
 "duckuments" = {
   revision = 52271;
@@ -12142,10 +12771,10 @@ tl: { # no indentation
   version = "1.00";
 };
 "dutchcal" = {
-  revision = 23448;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "46b90d505661424bcc96d40bae09303193baf5c681338b5b2d526e51ba59cd56fd64a81a01710fb4911727a3cc4263e731754d82a9a2c021bdf73b6ffb15f5b6";
-  sha512.doc = "adbd2c44d3b2de4149dc647d4e88e46fdb968e6c6898c4de3395d51665bb147d0abb474ab462e75da028265d0cc6935f930f4397558d057171dd56a4999dcb25";
+  sha512.run = "308253e2b148cab892ef0ea5004cce0c3e3fbea4c0555b67f49e554734b16bc5be9baa08119fd0a2186360cef20e165b5133ce85c793eceaa9955673ec4594ec";
+  sha512.doc = "1ac89d2c4ef090edc8c354a3f869485d3af9c374da012fb51edfd22f0644d63a5c380aad115b6dbe83e70846904b722b69fe4093f4a7ac8a4a3eb1c1c97f25b1";
   hasRunfiles = true;
   version = "1.0";
 };
@@ -12173,15 +12802,15 @@ tl: { # no indentation
   version = "6.0.0";
 };
 "dviasm" = {
-  revision = 52941;
-  sha512.run = "4407c22869b64e8ced5e48c41d56495404bf665cf5b9d4d252b71cc4a868696ad2f3339c4c92aca354d5fea4ebef294509e282fbc87136b12565e6c3c2de43c4";
-  sha512.doc = "a11c7b5e891958f10adf03812ff0a6123e8bff09410c4f9002e23d488956835019e5f54a5f130133f214831060992f2dcd7dc76b4497647b7005c704a7fa2d2b";
+  revision = 56373;
+  sha512.run = "9f726816ddf7a52b797cfde03ffb863fa8a1b98068bc75da1ea86f57774bab248b4d4225f936b4cf3388dbb776e775527e4125ff5d49d76088e4f5be7125f4e6";
+  sha512.doc = "b2eecfcb0e665059843872426611e4a5c8092a2dfe51a82593803cb84b18147cd28fc18fe2d9575d24fac1b04501f1e90a2f9f3c4094d452bc51b3a4db603f9d";
   hasRunfiles = true;
 };
 "dvicopy" = {
-  revision = 50602;
-  sha512.run = "34e16ff93daa924658b433affc70fdab01bd8d6c1d537cf1787389b8de34e7348aaa91a39ba3f3671d25d216420421a5ca73cff5de254fbf25a8433e20fda322";
-  sha512.doc = "a85e3cf8ee5e500264ffaffddf8ebe6642373f29fcca42c346654f304f34b9389f2e190014eacd215ca0d78debe44859e05696789b9f703fd6eaefc9bebd4ff7";
+  revision = 57972;
+  sha512.run = "f288fd83823c4cd7e01353dd1d7eb8d09cabfd3dce4c5db482e4063d187ea57ee1d2027cedd3f93ce373e03fa1d840075d6c05b27bd4ed084f0c354da22cc9cd";
+  sha512.doc = "0bafb5f769c7b59551028ebe29e30e3761a0f78ff0515a4414597b07b27b633ab537b9b0409437ec05e70889ff14692fc5fa53ea5aee9a0ab2ec7d0b34d2621b";
   version = "1.5";
 };
 "dvidvi" = {
@@ -12215,17 +12844,17 @@ tl: { # no indentation
   sha512.doc = "61f86a23314334d7faa4f1ae0760aea6c5e5f77754a6a9b1d5952f09e3e15d3dead73a9f72ccfe9b9d7a022654f8d2e1e6e3051dc12bff574b6f053cdbc9b598";
 };
 "dvipdfmx" = {
-  revision = 52851;
+  revision = 58645;
   deps."glyphlist" = tl."glyphlist";
-  sha512.run = "9bb72d88bcb5c0cfe818e9490afe532029b8fc569764e02706e0301e901287d617c2111d854ea96db00e3567c29e78dbae42498f837c4cf429ffd5c098df565b";
-  sha512.doc = "121b8956d42fb45be7d61371661512f5b8bd75fc2b754ef97c7a7b86b6e43435425403c99f5ad9492d4c6feb8948b4d10c9bd67c621f1451fd6abc5b13dfb446";
+  sha512.run = "4c5c0773389d13c77b007f9a82e75981ddb331b51c99836c73ff144e04a2289eefed77e7f5c5a7e60ed37aa93d8a0be055a76f1e1347550b5a1242be8cf24029";
+  sha512.doc = "c0f571ebbd976d55fe752e9b4c61e8e44e6ccf4086592b16618958d936267777d8825dfc2c9271f6fddb3620f54bcaa045f895131a31112e066152f20748e549";
   hasRunfiles = true;
 };
 "dvipng" = {
-  revision = 52851;
-  sha512.run = "abd26644c7980c2b2d10dea4d8ae54ee773fc9e417ca0cc053665ed814370b8ae3ea515818eed2171dd52a996c253e1269f4b3a9469f776d55ca429b92389222";
-  sha512.doc = "2f6a35103039d27cb78451a2b1a4832765f3bb482cae9ccd1aa368124f11648864860b87d31f3a81a489bdfd4c938572039c3329a8073be051d1386b2ef38075";
-  version = "1.15";
+  revision = 57972;
+  sha512.run = "a194b03e4ea1da129e54e2820979929e720fb526d184390885a2ac213aadda75f0fdf33b20a4ec20958798b3f622626e301ff308f9005d6c6ff400dc0bcd01e7";
+  sha512.doc = "27c556eeb267521de9f523001268819b29791c9b34e7b0e734551e607eaabcd452789eb4b90a287b47024d90e01d28b1848d1c77be0e903172eb362c4f9e699e";
+  version = "1.17";
 };
 "dvipos" = {
   revision = 52851;
@@ -12233,9 +12862,9 @@ tl: { # no indentation
   sha512.doc = "2bf3fd5bbd7b6e1fb8a263dd0e3deef358bead727df5de280342376225fd7366ff470b9c2fca8f763890d1047fe2c7a5b138ade1b5fcab383c8113e10f245199";
 };
 "dvips" = {
-  revision = 52851;
-  sha512.run = "c9ff911b92a757c1eb300f933f049c686c85d4ba09aabfcbbb87013fc34cf106fd5560931719e2f50be4357f9d83fb24692ba1ec24d2999fc3da79dbba02fcd3";
-  sha512.doc = "2d6950701b62654e303805bcbb364711aa93aa7eee8165944167046584c9686667304b70c6b8f43bf36f529e70e9bbabf1671cfb1749a4cb43ec9abe4fff353f";
+  revision = 57972;
+  sha512.run = "31069dd768bfad8c3430abb001e5d73d1b5481c6a0216801c3e04c5571e9e841a77ef6176b6d42ca3ffd5b8860790f37ac6dded1a453120aea96ac7a2c207563";
+  sha512.doc = "a66136f6f457a6e4953f25e7489c98668d950da10c37668d8332ccf5b20eeec5f493b84ca014c944dd8b241cfe3b0621f6096ce4b3a6f732e3816026a7835245";
   hasRunfiles = true;
 };
 "dvipsconfig" = {
@@ -12246,10 +12875,10 @@ tl: { # no indentation
   version = "1.6";
 };
 "dvisvgm" = {
-  revision = 52851;
-  sha512.run = "c7b33eab605df8488a6f0d25e0a0d7afde99016cc719a6b13bdbe68df0d1fce2c0d0996742633c392b0f9c56ec6aec307734b06dd845d4cbd2777c932b057d6e";
-  sha512.doc = "253a0ece82b4792bb30504132b4db8382b073bb004d1ab22ee8f74b339227171711318d76d59ed20c7bf66575758cdaaa9c4dc3199d446150971a1d57152c91e";
-  version = "2.8.1";
+  revision = 57972;
+  sha512.run = "bc91b0f9ec49020d3b7d9c0caa0456a844b7d9783dde5ce21b75407725139da86bc30bf0310fa5a99d12d5f5e812d674a872f0a10dc62576bc51bd3a6cdd2355";
+  sha512.doc = "668040316023becd76605d16d9b7f4e16eb2246e51d2cdc05910ee9a78f85edd227ede70ca57d280f3473e2a7eea60b41f0ad76e26789963eafcf400e49a12ed";
+  version = "2.11";
 };
 "dynamicnumber" = {
   revision = 38726;
@@ -12269,12 +12898,12 @@ tl: { # no indentation
   version = "0.2b";
 };
 "dynkin-diagrams" = {
-  revision = 53832;
+  revision = 58758;
   stripPrefix = 0;
-  sha512.run = "9ca3c426525f48db3f2bd53ea6dd0bfa2c67184b800efbe7e5723659f7c0cda9bf1c1d2f56ae022783689490b4bfa47d5028c9dca02d534070bfd6f2a242c28b";
-  sha512.doc = "c6d3d0f6315bace752fc85f02bc90e118b66048631f24c82d72d39da56bbeb1f40bec61059c441e154b9f8002cc000471a6a5b34e5dad39acd8bc7d98364dfc9";
+  sha512.run = "d415f924c580e97ec653f4bb76f911acf4a800f48a078d95d070aa5583dca46b52c1008a882b255d4728dacee8ef59acebde6dd84c05d4c1d9443c4db835bb52";
+  sha512.doc = "b31e83f3901040e27bc61c82cf687e5b98fe8b7c5b245506485fe9df7b14d9a65633bfeec30ade8168faa7262fef69a54b8848f473c02aed02c81182d2efe5c0";
   hasRunfiles = true;
-  version = "3.14159265358";
+  version = "3.1415926535897932";
 };
 "dyntree" = {
   revision = 15878;
@@ -12301,10 +12930,10 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "ean13isbn" = {
-  revision = 15878;
+  revision = 57514;
   stripPrefix = 0;
-  sha512.run = "39d124c59b8c35c0ce103530d30943bd0c17060981f2be4412cad2a38bdaf0a3f4332105e07248718d835169d33fc50ccaa07d462d494e3d74ab02d7de344653";
-  sha512.doc = "b4f5f0f2e3e8316c61129a6b9662cfb0e23aacbe58bc3e111d94ab7a51d01eaee6354395bbdb91a944a261a794362ed719fc6e515285f55ea901acc5e6653d75";
+  sha512.run = "84f73871c0ddf2d6d2ae0d23f6d27c1cc985ac1c42345ad339d55762ac9e109f8d33dbf27105ae470ec2d2f127918c3fa0a3c49d9fbff8a7c67b3d20f36d2e8d";
+  sha512.doc = "e7c474d1d488d95786d5f061412d051c9306cedeb86f6e31915d44e6fb71f09303b8f0e782be393e56dc6887730560825ef29d57af5a20f7bf02d96f77eb554b";
   hasRunfiles = true;
 };
 "easy" = {
@@ -12322,15 +12951,38 @@ tl: { # no indentation
   sha512.doc = "b2c49273445084f94083ed11f43492ed8ca32582fd9ffe9d12ccb7afe316b06b1924a507c5a12ab5880cae40ef4ee196c6d3e5d05f916356fdc026acc0a9acf1";
   hasRunfiles = true;
 };
+"easybook" = {
+  revision = 58788;
+  stripPrefix = 0;
+  sha512.run = "77ab4f7539d6389298de6905cfc271090a41c4e2b7c75166de700b26fc31770a0b2c7aba0e06ecc496ce0de28018d2b80e47c9391d2f96e59a0134fbf1a2d157";
+  sha512.doc = "3cab62035e6a92b6ab7401d07aaecfff709af6969795c8662c76a90d15641e3a45faaa3edc9f9df33b17d128c499708ee879626824e455bfe54c9d775e0c827d";
+  sha512.source = "a0db9cb99deb5f0db2259b7611a9a708662a0db01a6d54996edbab36c1d5b95407fc3b22634c44c9dde5bb4e04a4572cd472659da9475eff4c1ee9fb9f9bf72e";
+  hasRunfiles = true;
+  version = "1.24g";
+};
 "easyfig" = {
-  revision = 47193;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "4c84122d2989fa90533ced69f6eb9d2536e6de9fbecb096412b6459bdd45225bbf48a512ffdf4fd3f8ffa8a582b47692661b3f4197fe76f911682582b038bf06";
-  sha512.doc = "9544e9d4bb98f78915669d8ed7f314e1de92a0fc5c57b6163a1aa91afa7c97bc0a0726fe57fb1f3b03d981f9d9b320f211316e0d1babeb3d2900f7f49e9a2fdd";
-  sha512.source = "56cb02838c8ba147b56fcae623f86566f9885c67bbc43ab0ff40fae18afa8c9a23674fe4923c8cf4de2b62ab268dab0fe6845fecf2af227c8cce9891e68bd626";
+  sha512.run = "aebeb8d9baa7df84fb637351a13ac7f69697fc11c17b0eb5bfb9981195df584e74665a8bfa8062441c5eaf690c2fab446e1e0bad61175ebdf4dad58c531cfda2";
+  sha512.doc = "b1c91bb35bfa67edd2d2abaded6e6b8756d75c70d797c7bfb690ba802c3be6e23be71f7410a358cc262cd807f88b45d6395386d108ecf5f7ca4189a266296f34";
+  sha512.source = "4ca04322f0c10a33acc2f4ccd6a1127aaca1a27b4a4b5b1897a0d589cca73118c0e05d367e284e3a2922b2128a221be8ddbb8a24af1eaedac508ef6ace39a540";
   hasRunfiles = true;
   version = "1.2a";
 };
+"easyfloats" = {
+  revision = 57204;
+  stripPrefix = 0;
+  deps."caption" = tl."caption";
+  deps."environ" = tl."environ";
+  deps."etoolbox" = tl."etoolbox";
+  deps."float" = tl."float";
+  deps."pgf" = tl."pgf";
+  sha512.run = "2d02a55fc3d50e5fb79ebe8188300db47aaecb42089843033c569ee0508a38f81e9409d872535e1f7fe3b13a067bdabbf8249073b803c8d232d08aa1d5520d48";
+  sha512.doc = "d6e96d7af908e83b67b77f0432e6ffcdcc55b64bc63ac360e42291f16adec4ab6655a423f5fc8f31180071afc5645f47b7ecb2c1c80af719b6cb0cc6e77948da";
+  sha512.source = "b21681d30b8963127d603bf81b140851b5e8ea17b63d5979bc05bcfa68efd67460b9f0d0419a69c44606a4d569f5840b3c8d6f0ce7b0cf18d86c1fa104776b5a";
+  hasRunfiles = true;
+  version = "1.0.0";
+};
 "easyformat" = {
   revision = 44543;
   stripPrefix = 0;
@@ -12366,10 +13018,10 @@ tl: { # no indentation
   version = "4";
 };
 "ebgaramond" = {
-  revision = 53956;
+  revision = 54721;
   stripPrefix = 0;
-  sha512.run = "87897444a30627daa830f97f184766881e0c3c94108f0fdd3c83a56861827070623a1a374a579d7bcc27efe93761c2d326638a6f36708da5e785626efedfaf61";
-  sha512.doc = "ba927f6c72f6761dad70cabc51b5163d26e5679ebdbe55987eeae4cfcfb36353efea3fed98431fa93875c15c9a40cafe8db8d300c94531ccd307fdb4a1d71995";
+  sha512.run = "aa8717933733ddfa456b9aa7dcc6648b6150b0facd4b296c44e9b718e958ab59de887bfc39a2aff9cab55190a999708ec3f4600bd3b900f57ee76a420cd2495e";
+  sha512.doc = "6cac4eb927c4f302040591ff00d6333334297debd8f609a7ae5408991d69038a0440f8fc660a9d739c3abdf61fa5ada2eb1013180940b31f4beec628c231c770";
   hasRunfiles = true;
 };
 "ebgaramond-maths" = {
@@ -12381,9 +13033,9 @@ tl: { # no indentation
   version = "1.2";
 };
 "ebong" = {
-  revision = 26313;
-  sha512.run = "c16699e17aec0c6b8148b8ea224a3b2a0dc4fe1982e0b8dc5105f3a07075d99a07e743b55cb3ee23451a80d84e9887ca10c810c639b36a30c8ff275a27d9dcbc";
-  sha512.doc = "82fd3ee7c02b22bd42c38349a50fc61e78050040877f28b4f9e88f89ead962732b7e20f1999133074488b26d9609a36afc563d8e6cc5958829af22d2e3e44008";
+  revision = 55475;
+  sha512.run = "2553e46f91021de4fc9eda99ff45f8efe9b20b0663912b4339b22247d1bf7125f9be398661fe24fa2e3fae6a220025d47b05f4680601f7b4842d1111a6128d8c";
+  sha512.doc = "22d20c89883c6cbb95f3fbc3da3f4c5526c9c22b15ec35828bb03a1edf068573de0b35187a893c8356b50fd59c93ce4231f02ac4f15de4071e6ced73b9e44a57";
   hasRunfiles = true;
 };
 "ebook" = {
@@ -12394,12 +13046,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "ebproof" = {
-  revision = 44392;
+  revision = 57544;
   stripPrefix = 0;
-  sha512.run = "1b8ba3dc47ba03fdb14af5e98ffddab51ba4ea2c423b959ea6b88f00e7b3c837daad5f43d4963de1f6a4b2f55527a45645783b0edf62dc30118f51ed71379a9d";
-  sha512.doc = "33eb4e25b0083b9c3844d4786c1f483d37e7a00f716ceec92c4e5a5e57cf1c8f1a5eb474d7f3c9e98a688174a16caab170a1853a6757ebc5ce0be837811a32f6";
+  sha512.run = "e2b130cbc7b98555ad010ab5bc5226c68f413581b3128245500ad3ba734e4291c91cc42c96ee4108a1f359fb7cb4c884dd717aedba9e594865466e6c29d13be1";
+  sha512.doc = "d5a1b900c73969c590921f3fea138e1ece49d9c9c4f1ccf7d3c1c877f501196a08d8099afde9913b83e653f4a8937e91878640975233f5482b6538d262a6139f";
+  sha512.source = "16145b4ae4c6998533ed85df9a19abe7108ac13208f19fde0906280f68d96817df87db2db89ef77e1734e5c9ae6f2825939ce670856d6f35429cde10442907f0";
   hasRunfiles = true;
-  version = "2.0";
+  version = "2.1.1";
 };
 "ebsthesis" = {
   revision = 15878;
@@ -12469,12 +13122,21 @@ tl: { # no indentation
   version = "1.0";
 };
 "econ-bst" = {
-  revision = 53937;
+  revision = 54191;
   stripPrefix = 0;
-  sha512.run = "94b5c473100b1f6f900093f78e2a3a4b30482cb81a55ba27858dc12883e221aefb686b6bf6ad5bf98982203350d73b5e745e57f26f1fb8c62ab9f4a4378f7eb7";
-  sha512.doc = "fef5635f67b826505174596c98ea9e6d596a29d0a844ed1df08c6126aa50900626cf4ba2a09383eedf55dc3f95c459ac311857dc87de014ec1d6b22b6d2a2069";
+  sha512.run = "d3b6f06f66c1c6ad618a277c1db2021624d61f32271eebe899de9a6ffa10ff0dd2ecb22da64c1acc1122093a535a3af20b00fc7aa8831a1b0bc18e9032716e58";
+  sha512.doc = "13887967396b2058f7120ff3e0144f275b6e642e0da4eb69f51ad064351e02fc0dd362308fe5131120ceba7e6cbe9b4079adda0407fe76179a52e3ce1660fcfe";
   hasRunfiles = true;
-  version = "2.7";
+  version = "2.8";
+};
+"econlipsum" = {
+  revision = 58390;
+  stripPrefix = 0;
+  sha512.run = "e3b007e83980cc9d7ef7fbc1f7cf067d757ba29c886d20f6c53d028236cc688fad23d7ad24cbfde19b6adb77a159b10f2bad617de009b2fa769aaba042a8ff01";
+  sha512.doc = "a540e4cb09c88d1614ea0dd46bc35396d9f11a39089dfc9d83c31587a2f72c0537f5d7fe3c8ba1a25559d8b7fa4dd75a577820eeb02386d50fe418b50c6fb8b9";
+  sha512.source = "bcbd36e3ee0ed9e941e34dece41fb4e927f5f826fccfda3612f4757d72b7485cd34e9569d867435eaddaa763b28199db765f9caec107b2e6954a3b9da8e44a37";
+  hasRunfiles = true;
+  version = "0.8.2";
 };
 "econometrics" = {
   revision = 39396;
@@ -12507,6 +13169,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.3";
 };
+"eczar" = {
+  revision = 57716;
+  stripPrefix = 0;
+  sha512.run = "47906067bd5e2bfe28e6451456e2187fc655986d4eacc89e9c3edf67bdffe7f54ef2c14029c9934db6c85acdacb006cd829255c2209d2d1dbcf57a98fde40e3c";
+  sha512.doc = "03fc47faa72ccbfbe696e68bc5f9c332eb7262cf1b3129c6b83fc5f5e2b5c3e0ba93b047dd9eb6d92c32e218d303896272d0c1d3d3dc7fd07b80757ced9f231f";
+  hasRunfiles = true;
+  version = "0.1";
+};
 "ed" = {
   revision = 25231;
   stripPrefix = 0;
@@ -12525,6 +13195,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.6b";
 };
+"edichokey" = {
+  revision = 56223;
+  stripPrefix = 0;
+  sha512.run = "c598495449919a67650e7afcc10924cf93f4c29e1dd32305f0581910aaea288d43e6c8c1b91ae9d849b354e343538350ef0d6e78513998a9d2fc6023cd3cf941";
+  sha512.doc = "07a8689d20663340d5398a26cd548bbd53c5e6d5c7eac00e9e6478c780e397e765a8cca0e4b41a7b70f09130a1c7fac5326e5f2c46b95f40e11f0ba88b1b3039";
+  hasRunfiles = true;
+  version = "2.01y";
+};
 "edmac" = {
   revision = 15878;
   stripPrefix = 0;
@@ -12596,12 +13274,12 @@ tl: { # no indentation
   version = "1.02a";
 };
 "ehhline" = {
-  revision = 51122;
+  revision = 54676;
   stripPrefix = 0;
-  sha512.run = "d0549e354c34d1ad76502ccfd565292074a8e1aa72f021c9efd8dcb39ce9465ccfb0add899226775e82e9e90ad27a7980d5f79fc8a5a71a449a8a17845384918";
-  sha512.doc = "a3c436900a964fecb613469c5beca557a0f923d1c651591d9b884f88f127c435081a5fbd2f4129041f5438536901feaa4697b59a011064a4b4822ef6ecea5068";
+  sha512.run = "759e123a2418acd7239c4b897e64c146ffb84cc1646d331acc5ca498f707b916c1392f3fb9b97d2916d745e9afcf9c630a5a94e413ecd0c17fc2a8b13f773d3b";
+  sha512.doc = "79db947da1c51811e834999889c3d089e2c5077d2d21fe133f6879a87afae4e2c7fcf1f07981ef9335a6b7234f083e74e21364be3526448ebdeda6ba75815fac";
   hasRunfiles = true;
-  version = "1.0";
+  version = "1.1";
 };
 "eiad" = {
   revision = 15878;
@@ -12625,26 +13303,22 @@ tl: { # no indentation
   sha512.run = "448f3b51c984a1ec81428c1840ba01d072cef4d1110b85f8d4f4d786d02e8d08e702e0b33e757035aecef1f43b604746c7b6f492905fbb201fc1a34ca6fb859e";
   hasRunfiles = true;
 };
-"einfuehrung" = {
-  revision = 29349;
-  stripPrefix = 0;
-  sha512.run = "e346283ecfc6ca35684267e8b11f2800c6715378d84c4896e4d29557fbd97e57665a45503e7cab7cb7def679914b7d737a222e05eaccf543d8d2f7370ed49792";
-  sha512.doc = "1c012e15159a2c4940cb7bbcb17bf3675c2b2028e939acd3b1c98ff2cc377b55a602f404900cd4eae3f03de74a98d61f6db0de9ad90e8598d9f49b398b5a6a83";
-};
-"einfuehrung2" = {
-  revision = 39153;
+"einfart" = {
+  revision = 58414;
   stripPrefix = 0;
-  sha512.run = "affafa673dbb2bb3bd935a977a809bab30d01c92f8c9162eff337b635b57993e884c9d96398d39acc16e470a362276579120f4ab27e8cf8111928b12e75cc72b";
-  sha512.doc = "4a4c9549a7957688071226e4383dc9ad3c0580c9e321ab5a71c75806477a2156ce74aefa6dff95a329c65ae8ae6eeec9fab6f6e1f689a827b7050e457b248093";
+  deps."minimalist" = tl."minimalist";
+  sha512.run = "3e49ed89f9a3653db65cbd6a65f285d918691268d5cc61a20e74c7080cbfa8a5038a1fad197675075df1334bd14e9d52000e18bc3a574e731df002380e749349";
+  sha512.doc = "b50e6abddaff2e79e9d89fa9f8fca9fe80ac727849245c02eb8eb879769d48be3c91ce6007cea4716fed4f396fcb06d36e1a9fe24f090284f3eb1e0c72c83ec6";
+  hasRunfiles = true;
 };
 "ejpecp" = {
-  revision = 50761;
+  revision = 56728;
   stripPrefix = 0;
-  sha512.run = "eddfab8de433480327dac32762640d610fce78903630bf0b8b26548024764d5ecf1b6356d6a8d725eda75f075a0b8627be6b90117a11a6dc39f0fb0e60eeb155";
-  sha512.doc = "4131b375690a452fddfd5124611bd37017913cac6ade1bbf35ba01d2656f098141e2bfa83da2af7a25dd814312394c127fa1dbb0fd61a3e0f511e8d8c9e6d608";
-  sha512.source = "0d7ca22abaf589a795717bc09b06b9d4b91b030880510a7696dd93f8d4dfea1320a417da18659dc4e1019e5f66e178c943cccf65842da611684a1ab543ce2097";
+  sha512.run = "ba16daaacf8b7d2b6d9f1bdaf6680b474715ab423959bf1e8fef43c7e823becdba5d6a6e3a094f47cd71c23ee00917cf9bd3b72fcbf1f091d42425535bca6b39";
+  sha512.doc = "f44c075fc341b3ef334a8675fb0c2ea3ccdae25cc81fa9df7ba39ebc9ec6ababd3a6657734336539d64a6f8b9ff4380993dba312b58cdd83ef5f0f923196b310";
+  sha512.source = "6325f999c4a435b7d2a4aff7b3bc1cf21d7eb0e806f9e7bfe2482e79689617bce54b274cc690f2435fe0c416bf32b2a76c911b793bc1ac0bfe408b9f773758ea";
   hasRunfiles = true;
-  version = "1.7";
+  version = "1.9.0";
 };
 "ekaia" = {
   revision = 49594;
@@ -12655,6 +13329,23 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.06";
 };
+"ekdosis" = {
+  revision = 58721;
+  stripPrefix = 0;
+  sha512.run = "58c2cfad3b9269b9a056cbea0465f0af4a4e4bb2647f23497ce2726e7e4f4969f218c89b03e31f99b58afd353eb349ede499445eca3043dd0f25cac6eb5a425f";
+  sha512.doc = "b99409ec4d691b74b90b4d73c4f046ff62994743240befa008b0b4b0fb63bebff0f0f1d4c77db0034a8d1ae72e9eef474b5054579881d65c0fe730d75873063e";
+  sha512.source = "94d9ee25866c1418137f786ebece9c14bba9467b3df1f88f0595990276522b0e1938948c51ef41f9c6a565b3a87fb34f5b1825db1181bf6740d920eda7ad6f06";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"ektype-tanka" = {
+  revision = 56070;
+  stripPrefix = 0;
+  sha512.run = "0ee215be886bed429cbfd139a0c00fb2a2aa725a4a08fed0029daa3971b9eee2f1c2cf85712a687bfefe8d29a3cbc2a96ca792bdf1838145e6513f6988549be5";
+  sha512.doc = "ba3ae2e1775b8f21ec5dba35c0978d1eb03a448f8d381a9588d9cee8e4bd8281428f63b5866e830782f03eaa26527798d9ad153f64d9e7f3780e253fd935a9b5";
+  hasRunfiles = true;
+  version = "0.2";
+};
 "elbioimp" = {
   revision = 21758;
   stripPrefix = 0;
@@ -12692,28 +13383,28 @@ tl: { # no indentation
   version = "1.24.12";
 };
 "elegantbook" = {
-  revision = 53747;
+  revision = 54758;
   stripPrefix = 0;
-  sha512.run = "9161124e17257a15fdfb9994d8163a9ac29852b7b67f007a270862690166ba7fd567154147a91bd191c57e24a51880256a00b4cb7fe4a2effb5bf0a6949be681";
-  sha512.doc = "ea9eaf95ec5b6e83f7ea51af43ac3107da4a6cb9393f0037e71be4a6fccf201e116b8d47119766e6c4054b0d243ec28f501c300954c1cb7b3ab95513c4db2809";
+  sha512.run = "dd1f4c8ff1367ef753a869e202bbe34d480e142de46dc91f4755d36c88fc346fd2717628e494eefd9967172e20b6f35b52fc37282237859ffb4944da68c4c534";
+  sha512.doc = "5e58435a14eb47a99999e90e957d87ade2f78f952018a76d588cd76f72b94389ccb2414e8061f43797378e4f6213ffa57f3573aeda5c83513291bca158686960";
   hasRunfiles = true;
-  version = "3.10";
+  version = "3.11";
 };
 "elegantnote" = {
-  revision = 53061;
+  revision = 54758;
   stripPrefix = 0;
-  sha512.run = "447bd06f4fe7d1ec3a21d0d43e49ee3a10c50c107fb358c0dc3b2e522a625e9b69f544e30a5235cc0bf25e98c22c3dc36cfaad9fbef076774bdd317c480cc341";
-  sha512.doc = "72ac88b89b70499ddd5b52147094585267ca6c48bac1387852742e8562f3db8b6577951b22225d5bf8f5636eb7b3db7cd0fa092e7e8225c7358e1155b919f864";
+  sha512.run = "d19bd7b5a6862b2997296bf43123bbf88e48e0c5662bb385341cbfd0668de86fa5a9778a939ffc9d8eba64bd3fafb530a1ad551ac97558f0b8cc8b6e06422676";
+  sha512.doc = "9ce01c24ba84437023a45660c08049da8d81ab09f2e3f59a852177d48b78bd22cfe74c57ba502d7e8a2429c39f553c93445c2a6e5903808b18abe661a3a30b17";
   hasRunfiles = true;
-  version = "2.20";
+  version = "2.30";
 };
 "elegantpaper" = {
-  revision = 52420;
+  revision = 54758;
   stripPrefix = 0;
-  sha512.run = "b7fe545c2c9d2e55e0cc9983bc2158d41cf550b228bf3357b8a4a051a32d6692aa7ff2b1fcba33e17cac2fb2852e2bf14467675aabd6b8ff6f1d40f89ff2ebc2";
-  sha512.doc = "bb99b00f8d826290757907db4179d74222cf4cd992c2bc7c3342a4ad97c2ca83d018ded548571b9acaf9b46d444909be60603710e56638781edf3c036817d470";
+  sha512.run = "cddb7f3c8e7b613c59d88ffdb24d2ead1e56f56bbfd13a94070c4573b928c326029a3ffc35cd441bf69dec31a44becf6bd27e96236e23b4359645347ade9f135";
+  sha512.doc = "5a1939b7f4408bc5af6b150ce9622f63e68c5fd8bfca3d219744aca09ef96d34874102c7194d4364c95a0d0f72198a3fb7ebd71d66aae5cf6f2dd0f4c09c553b";
   hasRunfiles = true;
-  version = "0.08";
+  version = "0.09";
 };
 "elements" = {
   revision = 52398;
@@ -12733,12 +13424,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "ellipsis" = {
-  revision = 15878;
+  revision = 55418;
   stripPrefix = 0;
-  sha512.run = "1a60250e0db34f3dca834a1cf276b2f0a5975709bec3ae3c7486f92fb3a5c49ac9b07bb3cfa18724f27504c8e12bc7ca933edc453dd0ecb65d63dc5f7fbf75e9";
-  sha512.doc = "35441d8562d2be79787f2d3326352dee2fa7a9a3bde500f4d61dc5d8d3eb4f4f782548d464fff74e0156664616342e4afa3a03bc91a2b6f8a028382c12c19e9c";
-  sha512.source = "68e34b002ba2e9763d6f5e84368fc1135d864a46288d16e6d7ade872e5205a09527b3afad4c0b3bc78509a4f8d91460cd22a40b8e031e37e9ecdece8b184d3e4";
+  sha512.run = "009bc55dac8eab88e27124317acbf9f3101959cefa4419b507ab74f49453f72f272db2b4826424f3d8c76efb50163c11d6eed63e1219cae2a2632bb629fba96a";
+  sha512.doc = "7d0b4c51008203729df1bd50d2c2a2568f2426b7284f0d58eae4720a032e4ab469a5db6cf5656e57ceb0cc9062a7bfe1f3cfe20c51a3d08c85d55c110ce7ddcb";
+  sha512.source = "65b536bdd6d5b429e2f1832b3d466bfe055be6074b43b60305b79ae9ea09172e3e7e82bf7cf3b4dfbf73507135ec4caa3d713c5cfe060fbc925ba7d2a8c09dea";
   hasRunfiles = true;
+  version = "1.8";
 };
 "elmath" = {
   revision = 15878;
@@ -12759,37 +13451,37 @@ tl: { # no indentation
   version = "0.03";
 };
 "elpres" = {
-  revision = 46429;
+  revision = 58015;
   stripPrefix = 0;
-  sha512.run = "e3b0dfc5c2da908b95a882acf37ccf56abbad0e37c53c4e8ece14b98401be3a84ebc4546b739ed8a3f5c30977522b5650c56f12028fbfff467b4cf0a53877475";
-  sha512.doc = "bd4b73534eecdc0e02184d0736684e09c688bef1658ddad28b0c1a952a63ebc87546c426e7bf3a9733bd62192d87d500ba3f99463830d3e14f30c0726d80cb6d";
+  sha512.run = "eb8a18c29e137e4a11ef1a60e43533fbfdaad0872d0681e301a79cbc2fb7d11e7ecd0661b675aa299ce3439f8a238bf3d233fb60fe978eca9f05dc6f916596af";
+  sha512.doc = "d3720f6be437348f1d556e62948a0326a066b3e865edd07a439e641eb75924ff646793171116fa174bf0d1b61ceb7d8b60639a31ed42150039053b8cedda4f0e";
   hasRunfiles = true;
-  version = "0.4a";
+  version = "0.8";
 };
 "els-cas-templates" = {
-  revision = 53910;
+  revision = 54317;
   stripPrefix = 0;
-  sha512.run = "38872c8e042f91713f653aad4f613a54aed5f8b6de2bc9d93798239e2d2cd7f5b6965baec089433ad1368b92a08a7fdd9b37041d35fe279b22712ceb2b676dc5";
-  sha512.doc = "88693bd2873621c0afda517c6603a7097279406fb8f149d30c74d1a20c23d85d5a009f04b50e1c0ffaabb2bec92953a833a987b0a9a9ec4bfca05c4571114744";
+  sha512.run = "828b0e4a3a4e9df5d4373ad153a7c29e9da177f8c7b5ae796b7b94d1eb4cfdcf1f347f47895ad366524891f81ecf20fc86c3acc7f00d15835784f949f251ddc5";
+  sha512.doc = "559c80546aa4ebea603a70b0dbc103869aa3aabc857b61ec1dd958d0da163cc408af643518aa4f9ea68a94dd2ca5242d8f4c46a30c627569a4211394baa99e0b";
   hasRunfiles = true;
-  version = "2.0";
+  version = "2.1";
 };
 "elsarticle" = {
-  revision = 50786;
+  revision = 56999;
   stripPrefix = 0;
-  sha512.run = "17770bd130aa601a8208e996c1bcf192459d6c6ffd4ca170a303c3a548c7481e7e3a136c64865999ab7ab38ab56b09fc2021555fab60e344a7fa23d8cd62943f";
-  sha512.doc = "28c78ca516aee82dfe3be32683ae404cdb7be9d2d248fb747079e2d9cca9da44aec40145d095d2e3f0bb2f3d600712fb75a987c8d1aa1ded3f738e58350c44f6";
-  sha512.source = "55755e1a228bb834820f74580935b7e8a5bb162a675ffeb617bb1c0f7a1b5d99422c53ed7ae6b0302fc51112d5dc3cf63bfa9268c49aeb66cc194529c9d36b85";
+  sha512.run = "5a0a7c98a8e255e55468f9b01a43c33d757a38faa1b3130b1c3613648dfcbd0fbedfc69db99727c4406ddc0601249b2d021c680f83edd34bc3d64dcd4a7af64a";
+  sha512.doc = "47fe52924e95cb8267d0f65ee6962fd56fdc4ce00ccdf49533ff7af0916a962bd8c045b31f2159d7c70d8a041f7c20aafc73b23a8982572d456223afbb85e718";
+  sha512.source = "5887604f9a6ed0077bbbb2498f6ba7c1a3c8a74485688d40a6fb0e9e9765035d22e928b104876a19e42775fb766502ef71446e659f6d75a519e2b84ffdd2a01c";
   hasRunfiles = true;
-  version = "3.2";
+  version = "3.3";
 };
 "elteikthesis" = {
-  revision = 53926;
+  revision = 55928;
   stripPrefix = 0;
-  sha512.run = "d52fb9c415354b154a1c49158cfc13f97c2d499def4942404671fe2ddfc363ba0f19e7a60a5e75c3d1a6068c94a8ede004de4eebdcfa9f0e10d183c59dfc4fa9";
-  sha512.doc = "144b4c5ac1ac38bf92b395d7d68d992a7ed2c6271063a0bffdd4228618dfda5f670c4c98f210f7ee84a2bcd7c56607c305709cdc19d1825ccd603a2c5a71c74a";
+  sha512.run = "d1aca54ddbcfcc7c6635768cf7012508ea00e775d5dc02ea86054542941d9438516ada2698897f7d97c3807eaf8fb23967db371c499e1919e4b4b9f290b13997";
+  sha512.doc = "77481cded400c3dffd86be5090db28954823a92d4e8d4a676ec540d8cbe8a51331722b760a200c8ab84132ce668ed88da4c4e689f18d58528003b1c71f750337";
   hasRunfiles = true;
-  version = "2.0";
+  version = "2.1";
 };
 "eltex" = {
   revision = 15878;
@@ -12834,21 +13526,21 @@ tl: { # no indentation
   version = "2.0";
 };
 "embedfile" = {
-  revision = 53025;
+  revision = 54865;
   stripPrefix = 0;
-  sha512.run = "2ec32d1b6eec133457582ff7289244f918c402b9512b0187c651cbf3ca4c648945b8c2fb62245ebb65d73f1cc160a78f2025f2901ba2a4b2dc906f96f5f6d878";
-  sha512.doc = "86ad1713ce35c219c8298cfc585a3fe69169b410561087939d157dbdcd83f61b058413d75259419b1382beb7a92a9d711203754842a1e9155e9bace17fc97502";
-  sha512.source = "4774257a618c15d41768acb569c4b047bed8c51af90a4c2e2971d899c2aefcfba0c90c41e68a32a8f1dfeb9fbbd4ad4b91066ff80c664dfa5374475bc6356946";
+  sha512.run = "f42311a4f5488c00f33cd43af03da9fe6b1912c27b7ce9f40e488f5a4931a5c57fe637d475cfca750e191c1b605f532a32ac83476207a49543fd090e932cecd1";
+  sha512.doc = "19925356dfac7c2fcd06d2886c8ffc7fda202f6639e98e993b8ddba3570223db0f4ad98f8ab51b096790e73e4c23946846ffaeaa2a847085d4d95abdaac06833";
+  sha512.source = "e660fe1caebb232b3c7ab761ccbae1fb58535002e6f4825c00c33f3d19a2b9b2a7a8e5e4b5a63a929b2a03bbae161ffbb25113a7f6fa3c46477b0c0773c97b5b";
   hasRunfiles = true;
-  version = "2.9";
+  version = "2.11";
 };
 "embrac" = {
-  revision = 53334;
+  revision = 57814;
   stripPrefix = 0;
-  sha512.run = "ab55ff04144eda0f73d311841e70df69366e68266918cc765f35a2563cf230faca761a2e9bd53140cf4549e3a0b5bf8452694e469db84bcb3b2997f7a78557ff";
-  sha512.doc = "1aa1ab6e56cc4ebb197ac20489cdba7bb68bc9da7776f6790419dd63472740acfa5adbbf034e8299f510f4000c0d8510f7d9d4d68a3b9aa8b8c4861ddb950c13";
+  sha512.run = "930b42ef834a50dab0889598e1cdc531a610c9a5a8cffa31f7bea5f3c55d947db59453f71e061c8d055da53fb50fe20c17341e47c2fe5bb35a604ceac71922d9";
+  sha512.doc = "f56db972f586aab767cf7300a3fa34a62564a67ede77ab8f8b6fa03ecf07680692eb0023cd3ed99656235c5afe80b672a4b3e50ec8f0ef95c9744a48ee99c399";
   hasRunfiles = true;
-  version = "0.9";
+  version = "0.9a";
 };
 "emf" = {
   revision = 42023;
@@ -12859,21 +13551,29 @@ tl: { # no indentation
   version = "1";
 };
 "emisa" = {
-  revision = 46734;
+  revision = 57013;
   stripPrefix = 0;
-  sha512.run = "9f62531d3cc26b428a628d2cab0e9d3fa95b1f67e91f5ffecaa432432b02acc6076acd32ac2650eabb54d9e14b6081d70fcc09299b45a0b5bd27905f1dcc8506";
-  sha512.doc = "092818afd707380679c4d3d44ad50954c48562ecb5b988d3bb94701991bc30cfa356f975a8fe8a381fe99171efea2b790115cd0a4f12b17430cecf2efc3d7d78";
-  sha512.source = "cf43591889d823125ce7d49dece358563c5dc4ca5df89bddc8cb6b73550e34e5e02b5aa5c67c96c747aeafc6070fc91f899d2142ad23424b11637a7a52feb55c";
+  sha512.run = "dac517c5f1f5e475948d519ef46e3639a49ab3303a5d93821707b43b224ccddcdf6edfb8576fd89888cd00705b11abf17054c46008bb288450a0c679cc0ded2f";
+  sha512.doc = "7fb9b28f4675a5e14687b569e1e5394f06f25f536eaa6c36ed390d24c634d2a30fc43c558d3e1ca004bdf41436705cd7ce9b59beeb31a6dd757a5fa7421f84d7";
+  sha512.source = "3cb1e47c50d4cccbfd1b428ec1193ffd0f489d0284dd095f2f969c8db76f735b854e4102f474ab5e72876bb7b6e6210dd617958e42a851cbc03f5844626030fd";
   hasRunfiles = true;
-  version = "2.2.0";
+  version = "2.3.0";
 };
 "emoji" = {
-  revision = 53894;
+  revision = 55678;
   stripPrefix = 0;
-  sha512.run = "56e94ced1a0c04bd58c6fe5a59f4cf8b11cbc4a1139010a9b14f4afe4f1d2b47d9e4d0e04369353a86993cc3c338411dd213d25f3485c8a47427608ae4188f1d";
-  sha512.doc = "24e878208f9957b98faf060b5827bc320b744a09b44844f7c00fdb8743a9871d8d28b6ebf826398cf7a402acbbb88e817fb6d4dbbe715d4299483f88859acd98";
+  sha512.run = "c26f69740efb5f18f196742ca927bda5fceb15a9acbc65e6671d569da40dda75cfec188fe198bce4e4d476bb41e6ca383fe0a19b84b15691f791cc4ff6001e98";
+  sha512.doc = "caf60c65f653a2a57f3d33641526fc8f80903c718b62113c7425094e4ae35799f0c1ccacd19ceb3a0b39b571ea2d7b099effbc69aaa3f3704062e8e6f22d4e83";
   hasRunfiles = true;
-  version = "0.1";
+  version = "0.2.1";
+};
+"emojicite" = {
+  revision = 55131;
+  stripPrefix = 0;
+  sha512.run = "351fd8292800ce22d821351a6f69afadc87a24e4077dafd7a83b5f70b3f700c44764f2434255fde29532007faf952cb39d97f642a0b91c1cecc3b58d85753ab5";
+  sha512.doc = "642c3656e3f6e89deab561df4253bcac0f98f1b65537ba3c78079ebc4d3a9336ce40fe8abb1955583e404b3945d76fcbca19845dbde7bd7c8f4db0a6209d80bf";
+  hasRunfiles = true;
+  version = "0.3";
 };
 "emp" = {
   revision = 23483;
@@ -12915,11 +13615,11 @@ tl: { # no indentation
   version = "1.1";
 };
 "endfloat" = {
-  revision = 51003;
+  revision = 57090;
   stripPrefix = 0;
-  sha512.run = "2bc564cb0ad7b9bd53af9304f378b6d0cdd9aa32564f2bbb39abcf0d942c4e18015b7181d4be5e873bcdf4e8f971d65678fdbcfb544c005ad012b378eb6e1351";
-  sha512.doc = "39a1cfa84a2cbe5ff1b59fd9c5fa6a19cb1d3aafac6d1fbb111f117892e34142f6a21ce7808238608ac0602d905cfff6235a78762a0d510dbc436c881baf59f9";
-  sha512.source = "551afda371c0d4a6e71299cac919857eaaed3ee8891f96083cd76fb33ededfaa3daa814593efbc9e7e8dbd4e7d257945972df547d7c24665e760960eccea07c9";
+  sha512.run = "9c3820ddd36934dcfd049ab766ed037119459d02e9c049401b910b1c14ae2aed93d94110db66f0cdd2149451e152b5bcac14866c7844ba4a47f8c0a27756f733";
+  sha512.doc = "0004d60fe959415670b5173bbab6d37733ed82b537d714c7357dae85ff8f7204e316c48d2651b1b53cc9b6ad0206a47c9cde1acdeb6aae676a25e50f363238c2";
+  sha512.source = "bc5150716b23d3aa1e3a66e29fca3e8f9703199feb05b4bf76834e79654c39b0f6790ef1f0c193abeb0acfd0b2717076d4e2c89069221e1bc45716e0de314e85";
   hasRunfiles = true;
   version = "2.7";
 };
@@ -12947,6 +13647,14 @@ tl: { # no indentation
   sha512.doc = "e4de81d6cf0d7bc686d84420dff1e390ad18747ebc9381c6df006f871f9d5e000aae5cd43a3648dfdab2806da83efc6b375ceb4a9110137ed6b373538a7a8b57";
   hasRunfiles = true;
 };
+"endnotes-hy" = {
+  revision = 54758;
+  stripPrefix = 0;
+  sha512.run = "abd177ac968efce6749d8bb80c327bd8c3617e14045d124e036f2e503eed7bc33c72112d46acebe84d8a0a2f25cf3d99fd02a514d3673f38ada9e7fef879e3f5";
+  sha512.doc = "46b7ea667c12de23f0491af714e5b86fb7fdbef0e3c03d7c31e242dc715745824be08028861c0e72244695aee8bcb0ce2191746c8d1f906523dcbe6b39958281";
+  sha512.source = "6771356602da1fef77f350eb8390abcda0f1267c0761bf255f4aedeca79fadf1c0255bb267b456469c1d8dffb1ff052e567d0bb6b07035c1f5d676d5ae2d4cdc";
+  hasRunfiles = true;
+};
 "endnotesj" = {
   revision = 47703;
   stripPrefix = 0;
@@ -12956,10 +13664,10 @@ tl: { # no indentation
   version = "3.0";
 };
 "endofproofwd" = {
-  revision = 45116;
+  revision = 55643;
   stripPrefix = 0;
-  sha512.run = "900fc2d9a2673cd75bb25a3c1d5d13a66a91dcf21a105ed22ab52b7e61db4753f3419e6e7f5d09b64b27efd6d4c52b6fc6d1ffd06d6cac37bba9017aa96712f6";
-  sha512.doc = "1b99e26313b9a0572c41900d6e0b10621032957e7569a436d0a84a4d2451b857993b8bcf3554da5ddad00ebb3d83347d5f81e7df858b7b15f2ce3ca92d5ce511";
+  sha512.run = "a4b62882d4111a916588298415546fd402abf15ad89177fc2f57b983ef4060b49c7f73677add54c683e0ac8d40b91280453f8a239bb9da5e262cca20d12562d7";
+  sha512.doc = "5953acfac90a34bb2c57cd813d220279fb96fa74415f0d7677ed7b7a8839b858f64b3c96d1dfd2dce5a8704e76ffc7eda1e5aa337585f6715ae229a759148ec3";
   hasRunfiles = true;
 };
 "engpron" = {
@@ -12997,12 +13705,12 @@ tl: { # no indentation
   version = "0.1";
 };
 "enotez" = {
-  revision = 53439;
+  revision = 57130;
   stripPrefix = 0;
-  sha512.run = "887e305ff2755dde33c9ba39ebab63d3518a6ed7663b15245d6eb2dcd4ba263616f1c76d82dc8e86426567bab12c7379e093a57075542303678e45c8b884d022";
-  sha512.doc = "621c119bee8f05f3543804eef752df1d2498077e1d323841cb1259123fe402aefd8dd536983a9b94f176560dd36c2170db904a5427812dc2cde2bee6611da909";
+  sha512.run = "1bd49ee7ece262d28d0b80f418e7aaf130044447ad341ae799c4f84c4c4e69300662951dab2733d996abf896280470857e8c35832759008881cd23f35fd52e30";
+  sha512.doc = "a04cad229111ae30cb51aad4c843488661a3e59287280c9335bd82d5a5172429ebcbd31e1d7f6e2c7ec5d9a3f068bf00c88e7dc67f3e39a794f32107bc705f3a";
   hasRunfiles = true;
-  version = "0.10b";
+  version = "0.10c";
 };
 "enumitem" = {
   revision = 51423;
@@ -13029,11 +13737,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "environ" = {
-  revision = 33821;
+  revision = 56615;
   stripPrefix = 0;
-  sha512.run = "4e5bb20e2a69875006e8d9ebc3a8744dcfff3240cc28ea44f7acfa3775914dc9ee108a89368b6a510eb0a7aed19d2d13b001f0270ef9ad011b881c3cbc6aab9f";
-  sha512.doc = "443362ac9bd70d88bfa92c26e66871ebfc9ec1bdc226ec49b8a41c7bb76f3afa8a424d7ae2e16a7d06f77f4da4208c10f8dad014d918ed7ed239d645781b8815";
-  sha512.source = "5f539dfec035e337aa659aa29815b9293e714efe27d55286a96afc1d52082577eb42bcf02cf19388a2ec92bc880bccc73935a7f5a55ad7f6ed5bfb2862476aaf";
+  deps."trimspaces" = tl."trimspaces";
+  sha512.run = "c8dec70e56651a89ae8da15abc0ad81cc2edb4487837469238e2adc0e7c58cae4c5da82b637a3336839b50103e3d846c5cee8c73141488f644469a0f3e9d363f";
+  sha512.doc = "78d4d3f570470619c938687a6c9a6925aad901d781e3e893bd731a49bb8eca62bf1870e68d84f7125e10d91d7bec02a323ae42278ff59c04d7e33eefa2261496";
+  sha512.source = "b30607d21bbf5ddf1c7d36bd9173a16d91bdfcfa004782be50e50f17bf54d94e943d5e524e2331b75f3ce65e81193ba98e69ab56c38959d632007f5b0a87bd6a";
   hasRunfiles = true;
   version = "0.3";
 };
@@ -13061,14 +13770,22 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "epigraph" = {
-  revision = 53298;
+  revision = 54857;
   stripPrefix = 0;
-  sha512.run = "7be9b7851f4e98b5b618dca8535d7e3443cd12c64784680ffd0fbd31b9097a0872a676f2fb0f8b031682d43427814aebc0225e1931db658ce14aae2431597b6b";
-  sha512.doc = "7b4b60e8ddfd8f3d899829cf057f7a3db93498cc5214fa03c7116e794722d523cb51846fac80455bf3610b73cb5820872c628d2fcbb754c79b5c7fade26ef4bd";
-  sha512.source = "8f0502015099e2e7465156b02681a2774701f53c97c690f97cb1ef5b6538b99141d93f3570893775d8fd702fad60934f5dd0161f5b540b7e77251cc689714cec";
+  sha512.run = "bfcc661316dadf02c8bc1c4378b04c588ef612f030c764af3119e5c9eb42df667f7da9ad71b90fc2b5dbe7adf4094b05d792ca2fb2292c96035384ce65578293";
+  sha512.doc = "d8d2ac763e6bdcbcc200fa21995ea5044b4adad11f147b3d7e9f212274c1678cbba7661cc93df8cd013470a5397ca257690d85b8fe55704800284805abac7c62";
+  sha512.source = "566c5d132b17c806ee51d60122c9c89f7e1d3e6b6df1444bac715c5e77e2522513a2971f86c495b7fc654c684b07dc53982436aefa0544955e0bae30479b42b0";
   hasRunfiles = true;
   version = "1.5e";
 };
+"epigraph-keys" = {
+  revision = 54851;
+  stripPrefix = 0;
+  sha512.run = "27b5cc031d2a90c9240f199f745b28c0eac189750062632708356b898701651eef34353b4e54e7065c85b41efe6371e42875607aa5b16c3cf2bb7edfcff473e5";
+  sha512.doc = "34c9b77529870df1f4e4476a454ca8f08ff68e0d0c523d081d47224a43f07fa0c6db6d665524e5bbb1b68c975b833927321295fdaed38b2ea43445fac9752400";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "epiolmec" = {
   revision = 15878;
   stripPrefix = 0;
@@ -13078,24 +13795,32 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "eplain" = {
-  revision = 53786;
-  deps."pdftex" = tl."pdftex";
+  revision = 57186;
+  deps."atbegshi" = tl."atbegshi";
+  deps."atveryend" = tl."atveryend";
   deps."babel" = tl."babel";
   deps."cm" = tl."cm";
+  deps."dehyph" = tl."dehyph";
+  deps."everyshi" = tl."everyshi";
+  deps."firstaid" = tl."firstaid";
+  deps."hyph-utf8" = tl."hyph-utf8";
   deps."hyphen-base" = tl."hyphen-base";
-  deps."latex-fonts" = tl."latex-fonts";
+  deps."knuth-lib" = tl."knuth-lib";
   deps."l3backend" = tl."l3backend";
   deps."l3kernel" = tl."l3kernel";
+  deps."l3packages" = tl."l3packages";
+  deps."latex" = tl."latex";
+  deps."latex-fonts" = tl."latex-fonts";
+  deps."pdftex" = tl."pdftex";
+  deps."plain" = tl."plain";
   deps."tex-ini-files" = tl."tex-ini-files";
   deps."unicode-data" = tl."unicode-data";
-  deps."dehyph" = tl."dehyph";
-  deps."knuth-lib" = tl."knuth-lib";
-  deps."plain" = tl."plain";
-  sha512.run = "28cfcf717d5d874cb277a0c3bd495cc54d10967f922e15306c3e1d33c3db21bd3f81c9bc0c00de9d6429f898c17da47618695d245783bdec245a498ffd9c952e";
-  sha512.doc = "2d097430db5acdcf38c3342bc2cbe2e5bb58b848c468d0392629a0666f0c7bf9137b3d9f0a0f1edd59f17a2e56a1c3e0a81968f0a99a1e28656a78b85f98470f";
-  sha512.source = "57a9a76e579afc4dc040ff95a1fa36d93beae7175a6d2615e8804361f3ba349893c46c50be84383c8e026236b5067d2c8de9338c3b9204c64f46643129a071ea";
+  hasFormats = true;
+  sha512.run = "a5b93a081e9b2201a65bf7e7fb01381480f5c1f31aafaa78c5785981d895a384f1f8db1d474db845c06cd0850cf70ec4bec0e3935b67fe506b8b07512ee97479";
+  sha512.doc = "44d804287cdd427043f766ea9f5f352d93d65f941b3e18727dfc9276fc381f51fccb3a025707f24dca5efd59cccd1a340e5de0d452d928ec0296b4faa46abf67";
+  sha512.source = "8edb47575e32de1d7947bc2b7e1e354eeafe287cce6b4c7bafa1266d9d7c1bd4c8df363ecb4c17da9eb35cfc1e3393e2297ae6d90f9f4aa8147b4467e2ae1c89";
   hasRunfiles = true;
-  version = "3.9";
+  version = "3.11";
 };
 "epsdice" = {
   revision = 15878;
@@ -13167,6 +13892,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "2.11";
 };
+"eq-pin2corr" = {
+  revision = 57815;
+  stripPrefix = 0;
+  sha512.run = "878bbe22ea7a71b486a38942d11ab15a19c8fef10ac90e06b235a87a15f0e4478d00d7671751547cc0c8c440924c92cc7e07dbce4c816fdfd114468104fec040";
+  sha512.doc = "cc1dffd4989bdc5efc76e1ae44a8ee5f7cdea0c9617f98eda3ab0f079d242b408f91d80595a699212c5cf5910cf182c64d98517d6582af14fb1bec074f344eb9";
+  sha512.source = "eb0d10e680a935f9919b9dfcae1b137549dfaece3047b62e2ea06280cb3075d3882546df470f05cdae9716eb128f27faa981d86408acb50b85eced63bf104769";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "eqell" = {
   revision = 22931;
   stripPrefix = 0;
@@ -13175,10 +13909,10 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "eqexpl" = {
-  revision = 51524;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "c3412287917852e6c8c1ae224616a3cc1cc15156d66bfccbdd3fab70b02e5d4ed0b3b097e7bbfc89f71ceeec6389d4e66c0c1abff2e160d813d2f3b29325d7e9";
-  sha512.doc = "c94dd14530cf7b93ade41c7f4084988ed480dc4259b90886278dd5665e5b6e705e79a5c4d1db428b9d43e9ed9fa63a06a6e10569354d848dca3c76fc28c847d6";
+  sha512.run = "962b3f4405feea8cae70618af5a61f4dca04ec5971c888d36fa4aa8cb6dd8b12c9922cc202c3ef6204cc1265df36bed66ab0579395f4d9d134c7382778572a21";
+  sha512.doc = "e7ba14eebd9ee77561fea3e5a7360f12ad10dd5975c99c203ca2e962d95a79805b9c9d4b2452965eb1180d7741788039f32c216352b7d63ec0edd167f98996d8";
   hasRunfiles = true;
   version = "1.1";
 };
@@ -13242,20 +13976,20 @@ tl: { # no indentation
   version = "1.1";
 };
 "erewhon" = {
-  revision = 52777;
+  revision = 58722;
   stripPrefix = 0;
-  sha512.run = "5c432ee9ea7d2a76d9fba1c8ddd3d0d19432009df86d7386381d39355bfc46328f8763308d4021bfe0b0a4e18e9b3d9eb3dc8bcf4b0cf50921528a9f549b46b2";
-  sha512.doc = "60dfb45af8a284ea995f06d3243dca7247702ce6d05331dbb0d72f353b8a82fd9a4a3d39af56e7d0dcd5c487e2bdf8dd498c7d72281d4c68d2774d8fc3b9cb5e";
+  sha512.run = "ba9a24a32010d2f69a3bdfd1f146194d0962f3a2108c1a17416faa4ed331fba5315ce2a30710c1778f75fa6d3a709e52c6b6781f4fc2a4634a91706945fcc45f";
+  sha512.doc = "3f95f89b51be6b373448bd2fe728bb55d2a1249862147aff0434ac92d8b2628ac25ae2c9906aaca8d932a2cafb6e6d57b7ea674857934a98063cb717d619375e";
   hasRunfiles = true;
-  version = "1.102";
+  version = "1.115";
 };
 "erewhon-math" = {
-  revision = 53666;
+  revision = 56703;
   stripPrefix = 0;
-  sha512.run = "f02b635f08de904566a700e29528f74bdd8f8021e6f5b82433bab98f04e95fb8906add6a87ebea5bc81674455b46baf2c2b675180db66ec56ba71229bdbb00a7";
-  sha512.doc = "ea557d32e31ed890c9dc796de465c42acebdb27ac11e9ba1dd1a7b19a02df4eb952826b746f2a2698e42631584a76d3c836d1458e65501bac19a586be3085dc9";
+  sha512.run = "1e1bbdf2bf030e8b8c09c955ced895a93117eeb6c6a6f784ccb62c65d7e3fd6c5f536b23ea86eab3f306f0734fe3c805e22e61dedb5a5a06f41b74b8e89efdde";
+  sha512.doc = "e422d287b0fa687e1bf54dc96f8adf1e979c8d2b6cfff2a5ad2e9d3ff8fde95ace136e2317235f6ad6144fe359385401569ec7aa75c273d48c3b7134b4273e74";
   hasRunfiles = true;
-  version = "0.41";
+  version = "0.45";
 };
 "errata" = {
   revision = 42428;
@@ -13267,13 +14001,13 @@ tl: { # no indentation
   version = "0.3";
 };
 "erw-l3" = {
-  revision = 53694;
+  revision = 55414;
   stripPrefix = 0;
-  sha512.run = "230c866b9b72c0155af79cbf7d212411f3a038fde5bdae44f09554cb3499d501ba71be5234e7c9e2c2d5844919a8ff6a4473b6a06de33f66baa6ba0316037eff";
-  sha512.doc = "34bb0e752d769cac90b50ae350e91e224dd83c9206ad05ea2d4ef0c427df413cff692808d6b0820b12852a9f60628679d18d9d7bc2f2d4c11328d162f8adf491";
-  sha512.source = "63202dce4c3c74b1bda95bddb0b66655745f8dbd26aba1da261bb38d7aba056b2280ccaaf301c394feca09ae06f1372ed4c25a1cd4965fa049558c2d9590a0ca";
+  sha512.run = "5f006723665945d55f7365f3cd5076fa7ca924c0ce08c797ec684230edefd71483f37b456f5627b7d6b3d8f10fbf97101caefa67365eb155fe3f93d115e1bcf4";
+  sha512.doc = "fcf42f6392ae01414868f2d36883d9204bcefc06d772e6ced603ffe01b2b4d0cc15b7dd161b1dd57f5e58816d6da4290b738a9727207de28b1738d233c82fb3e";
+  sha512.source = "27f357e13027f67764d4818a1cbb786678260272264ba7af13e6867923fc395c49636a09a5f2e4a444ea37f9985d0c7edc5a52ebffa172843bff24764112cd47";
   hasRunfiles = true;
-  version = "0.1.6";
+  version = "3.1";
 };
 "es-tex-faq" = {
   revision = 15878;
@@ -13350,13 +14084,13 @@ tl: { # no indentation
   version = "0.98";
 };
 "eso-pic" = {
-  revision = 47694;
+  revision = 56658;
   stripPrefix = 0;
-  sha512.run = "52c1987317382cc5b3af5fa05627d3137c692b402dec1a19104f814be191222b9699935a52e68c5813beabc0f659735ec22dd37926d6a681ca6e415ac0235cb0";
-  sha512.doc = "e78570568903fc10ad3309c8247599da7faf2ec9851df46b2ff36451a874f605fd12b9aa0dfd68f237cc65e77b527baea296036721fbc0e2185d4cb61f0eb1b3";
-  sha512.source = "7736c3f6bc4615034127de7b88d0be8e88e1564760bb340d5fe555633ebedf1f5b12881e4c1cd504af47350000a931582f8f75f1de431f6151948c8a27af1ca1";
+  sha512.run = "d4020b6d7f1ed44ecfc11938d604595e48dc32a24e2e67742016fbc2022f19ab63c759ec03030d7d3a996cc00f7a08ce8cb1354d0e9234f116080d732e4dc5e8";
+  sha512.doc = "96fcdb612c8473fffe672a6c443c120b2cc8dafec5b43de132cd8f758d85bb504ea14285af121921afbaafea7c6df99e32f6c50101d1d76900b1aeba38c3010a";
+  sha512.source = "86655acc2d9d11084dea3791a171b01e18715cce77b2300220764eba88d4a049a2a6bef6ff7bc1b90fdf337379be065a2d998aa32e42a0dd04b21f0293d1c14b";
   hasRunfiles = true;
-  version = "2.0h";
+  version = "3.0a";
 };
 "esrelation" = {
   revision = 37236;
@@ -13402,12 +14136,12 @@ tl: { # no indentation
   version = "1.2";
 };
 "etbb" = {
-  revision = 53836;
+  revision = 56390;
   stripPrefix = 0;
-  sha512.run = "e5ed5e381105bfcf7b424427464305598d3aa90b7a27248ce4e7000408fa642fe6f25eeee6930ea85b2dbc74ffa1b0ea6cc1bb5ff189050fa579b806bf7a0bb8";
-  sha512.doc = "37a50869ccf719673f97e1ca0da89297feb50b01b9a5f28f9129997ca983e23b0cad2976902b4498f0ac36f3d64676f2e765deeb539e9d2da08db063e3cf8461";
+  sha512.run = "f21ea49a1404b8a495477d5b4ef440b6f2a363af50e6e93ff1f7ed4c36c88a133aa586ddb409b38a74a1ad7c181d785ce4491d259f5249000fd2cec2e5e73866";
+  sha512.doc = "8527190d3f646d76833dd91b9610ca3051f499552f23b06ec88b4601c0b86ba5d9611520bfea49283451911a379b3b415ac5bfc6ac7703a4fa51b86356719f00";
   hasRunfiles = true;
-  version = "1.001";
+  version = "1.051";
 };
 "etdipa" = {
   revision = 36354;
@@ -13417,10 +14151,10 @@ tl: { # no indentation
   version = "2.6";
 };
 "etex" = {
-  revision = 37057;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "8d9bbc49c5a9747bd0469d6941358e33dd273841c0e467ca5fac191dbf5d353de19e43fa6c66b95fe5975211c01cb6dadbaffbaf544faccd3e35af0158a0642d";
-  sha512.doc = "5d10427a79c38a573036164d5de8315a80b709eae87eccc050e319435622664203b4f859a7a0875a13e444a3da06eb11a2801c44c8c3e7d5ed0241adda8b5d22";
+  sha512.run = "662338c145e84577ee49bd7d1941ade688d07ab8382faec25d6f45891953554e85ab4d531164e58db97071a7950c31b36f9eec8700ad4b43dffef30217f0fd89";
+  sha512.doc = "d7c7cb6c0a8c2056be906761c7f0173c7ec28aa4e910d9546aa75aea79f8a2aedef06d708710135d3f557586990fefd73086b4f11b8b7642a1cbaedde91b1b8b";
   hasRunfiles = true;
 };
 "etex-pkg" = {
@@ -13466,21 +14200,21 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "etoc" = {
-  revision = 52842;
+  revision = 55156;
   stripPrefix = 0;
-  sha512.run = "f8386d45116a250f5f482774b8dcc40b0f4e30b8260d201f2d8abf0b10f0e103253af3f23649c3aa948009392072dcb29d7661ee86711c2dcdc7d66e69a4135b";
-  sha512.doc = "27bd651a6178a07d4cfa7d741653765b04e9a0ccef5e04eb8c89fad12df1ad7428312204c18f590de6d099d6bf108bd01931728c1ad392ba666c695099006779";
-  sha512.source = "edb8c19dfaa0877a2ed038b5e687dc590a569fa8f0577fa782b9d7ac26831718bc269f64373e5039c4668dd0e2725442613c5fa7ef0a7b1fc84d0ca77b3a8264";
+  sha512.run = "4000c9627c76648046d647843dbcf93f56111433d0294f8fe448549191886dd4cbea8815910b305f9e27a18b42a85ac8fe8a5999584da60d66a67f4a376d227b";
+  sha512.doc = "377963e8ec9af3fd7fe1f164bc2dad566f18d7ff8bb62689d0119641f5aa61fa0ca091f1feed7d968f86db3bfe1035f915de120724a2d2cf912f1787f3eb3be3";
+  sha512.source = "d870677e592cdc503c8fdd3b03e568017c7d8f4cbfb9ebafe3510bcadc75f85f613991999dc67ae601db8ead068d06af76c1e0e1636c930313f6f04e080cbd6d";
   hasRunfiles = true;
-  version = "1.09b";
+  version = "1.09c";
 };
 "etoolbox" = {
-  revision = 52153;
+  revision = 56554;
   stripPrefix = 0;
-  sha512.run = "f614e649193857d2348bed9c9ce49a64b78e0c165962acb51bab6b340a1b7397793ce07d649808eb04322d94c3df1699ed69164c6e4c3583600f9adf542650b9";
-  sha512.doc = "89b5515a47fc18b6a0a2e70712b614e5fc32ae537c632e431be1ef1e8c55ec2791c7394701e676b0ee6cbf6addee38ebbab67e60d67a34118381fd4ebb0bc0b2";
+  sha512.run = "b4c2ba570b1636b7ccd741c8960335f4863fb7242253be6c071100b64ce0d6ffc1bcc9da5e9bc65830ae5e34cb4cf887220585c0006d7afce0af3ca95f96b36e";
+  sha512.doc = "15f5f37471b991c1363e7d34c419c4defe1920522d6f666c383ce31b25b412d40a1dd6ca1c0fdb0e56ef3c7e529215964957c5a2dc55522bec60e79bdd972947";
   hasRunfiles = true;
-  version = "2.5h";
+  version = "2.5k";
 };
 "etoolbox-de" = {
   revision = 21906;
@@ -13498,13 +14232,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "euclideangeometry" = {
-  revision = 53794;
+  revision = 54897;
   stripPrefix = 0;
-  sha512.run = "8f77c81afe33b837bcd0ed3287173b974a637952384168ae93671a84fce5d89cafc43f1f217d0b8b388dfe733b8a5b5c83c52c9abacb6ea082162acff53b101d";
-  sha512.doc = "e89b948b0866e8b1acdbb72eba354c72272e243e721380ef7111e8670a1ab54981a44e61354ab3aa76dd8e534071da61edb6f92c105ccede0efbd88990ff1a33";
-  sha512.source = "3d26956790d2870b918574b23e64a194d5ea6226e8387fbea1a40b9217609b946e50653cc3549b1a21ba1dda017134a106d1c8090e467791316538b008077823";
+  sha512.run = "62900fe71550594672cbcb6cc22d067aae1e6315e54c76888fbe3db2b79558c25182e05c028e2e0504fa1f19168276d95684d0dcf76c2aceb600720cf090ae1c";
+  sha512.doc = "c12dfd05e72c4a081068af962fc223f6391793436ece1e706bacaf205c69ba01ae9a7263e1069b5e10ff4dc8a7ad151558ba188ee6c539d8e297d57dd6e1c45e";
+  sha512.source = "35805bde4c06f9589467808497de577b58e8eef5f788671c0a9ccf2603d21873d71d980b07f1acc411d7eaeb9bb7868a6bfe562055be030d802fa88fbc16c183";
   hasRunfiles = true;
-  version = "0.1.5";
+  version = "0.1.8";
 };
 "euenc" = {
   revision = 19795;
@@ -13516,13 +14250,13 @@ tl: { # no indentation
   version = "0.1h";
 };
 "euflag" = {
-  revision = 49970;
+  revision = 55265;
   stripPrefix = 0;
-  sha512.run = "e046d3b4b0de99d6669aa7cb62b4304ea8c2b83bef6dbae7d997355bc97ef07ffbad6ba139a4969c0a99307a43202566a283a40de1a69635d09afd9256ba0a51";
-  sha512.doc = "e0b58801624084e20083f1c92ee71dd6f53b75954cc2a63c7f99b2453d3925e9d4bb9509e86cf3fec3bcb2b1814ccc6ec27bdb08bc24f23803c0349dbe1a9574";
-  sha512.source = "2365d9bf74ff4194060edd03776363d3890c6cb3ea4da741413fb7a2fb03a79bba1c0775b287a82c9b30ec68dcc3db3d778460b44f5e249be5f21e130e7e52cb";
+  sha512.run = "6d6b156148fd6aee2f82ca489263de2fc37103e00aed4a287eb10acef95c60902d3c0c329eb904d2b808e5844f9d6ce92fd8afa4e9abf187d4f8bc7b8f4b75ad";
+  sha512.doc = "68eda595381f5f22bcd819ea4d2a4ee430ec555c92594ceb581a9e566de648a74ca3fd53ecd4566d17d3b54dc05b7909bdc3dd805e8c70fb68520b299da355c8";
+  sha512.source = "ad66378d43f833c0713593db5875cb0431a251e6443a939389551a4a4e5fe8c76865d1109ee0aac1b9213ccf6f375b1e4ac5a2dbdf347a88aafd86a0af721e90";
   hasRunfiles = true;
-  version = "0.4";
+  version = "0.8";
 };
 "eukdate" = {
   revision = 15878;
@@ -13577,17 +14311,17 @@ tl: { # no indentation
   version = "3.0b";
 };
 "europasscv" = {
-  revision = 49703;
+  revision = 56829;
   stripPrefix = 0;
-  sha512.run = "b47453280812327a1528e7d2a484e0b92e5464381bda11b715c624bb8fb7a1f57e3df71ccaeba7dbe8b0f757297ad3c4515aed773a44bfe78efbe9f64297e180";
-  sha512.doc = "e9041765db618541c6aa9a4142b047f4096bc335a9601186a26860d6b594d6b6125c0f5392fb6dae9a296392fb565ba0a8c288155e8d99e12bc12bec0bedf52d";
+  sha512.run = "35aa159fd84082e1cfb65bd05ea83462400e12edf5a40a89740373954d72b42cc33516452691814359d3bbfae1e96f4605e0d19592c54f4e2e5328542cac42a6";
+  sha512.doc = "834c4266e343a8b615a45a2c4b064170bf6c9516a8631342ff02d4de7154229458818192670f3f73aac5600407c830c1be384226bb3b0923af964905a39d99b3";
   hasRunfiles = true;
 };
 "europecv" = {
-  revision = 53313;
+  revision = 57641;
   stripPrefix = 0;
-  sha512.run = "54c1a4198183c346182db14b62c88dab981b1c2bf18ff10067b335e2e4eff2bb32400f9589d6e16065b891958e46cdf80f8ac4f5a73a70d0fde7a0228b1e13b5";
-  sha512.doc = "65ca93f3b5e8cca103abb82cc47485a5aedd1fa9e78d1bb4fe80623c9b76bf34ded529dcf4ebb35f8d141cf198a6e8ba1a012ee4e698053ff16e8ad23741e059";
+  sha512.run = "9010e3d116f2a9fbc00f9da15b98ef6b5dd894ae94e3ddd82842f088f4d867c9b4fc186597e3885f7acc59d0ae51d9dd75b0a7c8955c2c22bd0295e2298cca89";
+  sha512.doc = "ed502dcf747360c2fc2688e2d1d3e90f145f05488925a5cc2afc5354389b41a8916713a31de7fa8f69fd42f6ce104d7404e3bc55b786ea045a430a6119880768";
   hasRunfiles = true;
 };
 "eurosym" = {
@@ -13599,9 +14333,9 @@ tl: { # no indentation
   version = "1.4-subrfix";
 };
 "euxm" = {
-  revision = 45696;
+  revision = 54074;
   stripPrefix = 0;
-  sha512.run = "93f4eb11247f8576241a57b247dc2dec20405146a0749d54bb8631875256fd262ac06968901a8682f4d530ae68602af366fdc3ceddbf0fd1042ab95f259c3775";
+  sha512.run = "2f786231f801ba9a9c5f5176bfbd01f8e952c33c722c7508988628afa66d1ddd55c4de02c0ed9cfbaa35a8764833e822046f7125330145995433b517f7051bd8";
   hasRunfiles = true;
 };
 "everyhook" = {
@@ -13614,21 +14348,39 @@ tl: { # no indentation
   version = "1.2";
 };
 "everypage" = {
-  revision = 15878;
+  revision = 56694;
   stripPrefix = 0;
-  sha512.run = "6f4779a2a0e0d2352b702652a583f6ea7da71865196894b88b630e1105e56dd5ea525cbd4eccdebe8dfa347716c192fa098d5eb8501f305109b337b266e7ec2d";
-  sha512.doc = "185bb6b87896f43472d8c902cfda976139d8b1df09c5eff75e8f579314867dc05b6c215f0dcb09a3438f7279c6579ffc8f92fa7fc682fce18ddf7f080e0c6e37";
-  sha512.source = "ca04b157d255502abde15994da4690b99e4c6d015c86704d179001b3412e9c9170a040216657ef5afb174aafc34d4c0501b51155b84164b17401843837a9483c";
+  sha512.run = "032713896e2704667582aa03e8d542062a5eb26188d41b08968955fbd8535aacc8288559112aa264c542e3523f452dd9b2acdd1dc3f66450cdc5c5c902e38b80";
+  sha512.doc = "4c19f905b5a16674980da2569b2994382a2eb108fd20bfdd29a6ef4220e00aa390c197dd86ecd093a9acb83b9a2d64521f732083e3c2828478a8c8c45463d180";
+  sha512.source = "f01679f5ac00d3c75a0595496b489a008c664d7197af6d267226498b821ca83d34ae842c212756ccef81aae40f4447ddae2146b5651084dc55081f75c1ec04f8";
   hasRunfiles = true;
-  version = "1.1";
+  version = "2.0b";
+};
+"everysel" = {
+  revision = 57489;
+  stripPrefix = 0;
+  sha512.run = "79b83d48e3e6eedcf1673a30c28fc06eb2ed8e3bd292d6cf914faf5ce2929795e6dd11baae3a207c796abb67ced2a2442af11c2618fd7d565696f8bfd121a0a2";
+  sha512.doc = "5efdce418de6d29481a8a8a9bb89fa561e865f5628dd67ce88fd648f54a40c6a90c625700d053d741b650c568eb6b63da81b68bebf89bb618a398a223a5b08a1";
+  sha512.source = "c288dd88a266e87bad6880e36a681e29f5f52f02b5f7b86133daae2972932572f0e529945acc6a0f00b844909da8f77cf3a524bece531667437a5ffa0dc2a684";
+  hasRunfiles = true;
+  version = "2.1";
+};
+"everyshi" = {
+  revision = 57001;
+  stripPrefix = 0;
+  sha512.run = "b6219fdc669847a30ad2359d6b0888eec0980114d5385c018e9ddfd0876dc52390e1e8ffae5d2850cfa140833365c30024456bfacde6615bdbe5101e7059d52f";
+  sha512.doc = "2a05f4b42c1a85b4af8fb3881d1e32d0cb8fad7070bd8eb83632b50e387083a5c8fd264b61b70416451f56a97e1c0702507bd50c534ab7baf975372d854a97a5";
+  sha512.source = "4ae653fe3cf9dcfa51f461ca72954eeef666a6324321cb5e6416d7e2baa5320115818a26f1970bf7654acec9454e5174262578fc4d28f251d3476d27d6d4d9d5";
+  hasRunfiles = true;
+  version = "4.00";
 };
 "exam" = {
-  revision = 46084;
+  revision = 58023;
   stripPrefix = 0;
-  sha512.run = "77c488cbfa6960df070c9898d699492826751ab5cee72a4e1f51e839b6842bce910542d02c42f3a87125f4f3ea25b496092c26d0eb698a50bcebd8408efffeab";
-  sha512.doc = "7b225aee549267ad87b5e900570e5dde87e2e77d84a42f33043d760331cc71415f76148cd30245612ca8e566930531c07b71508f50867b4cb2c6ada659f4a2e8";
+  sha512.run = "0a18063d56042bbd93d43e7e0dd7da59e352c6ee31eb9d925124f5057e6ec62a87277271bdb7f1bfd81e22537af6b648efafaef22e25956ef2e48868b381e9ea";
+  sha512.doc = "8d0c427c56764b605e5e79a4b71df5afc6619569f34115084ce30adc5da8905743b8859ad984284a38e74ee56d057383ece36fbe73489cadeb87704e0614bee5";
   hasRunfiles = true;
-  version = "2.603";
+  version = "2.7";
 };
 "exam-n" = {
   revision = 42755;
@@ -13663,10 +14415,10 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "examplep" = {
-  revision = 16916;
+  revision = 55265;
   stripPrefix = 0;
-  sha512.run = "1e28a283a2d6d2ebc0bf7acea39bbc97c459defd6115e125c6b9482f880f59ac5eadd715d034b78f5690806345311946bdf6122db9b41e2da9e31d730f2fa82f";
-  sha512.doc = "f72f9893173263dab5436911b2efd5143a52dc43b24b470fbc315c69eaca0d326cc36e5254eb3f93f734a3240371e9aa2462c0c016659088014ee5a63cef756f";
+  sha512.run = "689c71afd2f5733b669b12c27014edc260ffca597b197ec0a91b5cc476bc6458699510bc5053863f9fa8ca47b9e2cda18939e734d3c23c7507f0646e0cbd9afa";
+  sha512.doc = "09fab96fddb1f42c6c5484e1716d1f2dda3f51c6c6f666343a79070aae079ad2bb67f210e51875621c4b4f8a30f9908d4bd53caa74c57ea8ec4ba330dbd721ea";
   hasRunfiles = true;
   version = "0.04";
 };
@@ -13711,11 +14463,20 @@ tl: { # no indentation
   version = "1.2.3";
 };
 "exercises" = {
-  revision = 42428;
+  revision = 55188;
+  stripPrefix = 0;
+  sha512.run = "90ca30f7417076a9933970d6c8559317861015480ae5da813e19e0114a6838084317fad6a0b1aa295b7a8a8c49038007a36ebcf4ee83f54fc0e454a317943923";
+  sha512.doc = "ba5b8125bf2a59646f401c5d4968f1e00b5d9a35293bcfd7c67c54d275b8e4b1586a5f07ddd097065259935a541551a8b990f5dc737e1be8e78343382b7be72a";
+  sha512.source = "32728c5bd1bc6465bb82ab95f9c2a4fa4a403431a8369373d75861ef0d6af8850c108c223b6e202f03b53f87d52bbf45f07a81e75175c0896951cda89cf20ee1";
+  hasRunfiles = true;
+  version = "1.1";
+};
+"exesheet" = {
+  revision = 55916;
   stripPrefix = 0;
-  sha512.run = "064b8df6847af6e8464989de7070ce1d5282a050ed89016ba9954767c6f175882ee11dfc4c92791f68f972cb7dfefc801696a10a650b7113e93dfd9a9fc1adba";
-  sha512.doc = "7108d509ed012d1560bf19205e45a2fcd09311c50e84ea4dcd87cf17b8c70d4e5496653d97cb303d32783fe9f1d29a17a273a7ac6808ec384b7972dc33106c87";
-  sha512.source = "eb788aaea48e5f9fed1aa8a9ef47792bb24734c5309b74e3554ca22618c9f35ddcfc1b5496299783584310ec7ecc406d8679c7d90a936bbca5122ca665bc6098";
+  sha512.run = "004142161c03b7ab411fb86661d955ed0d401f19e718e353c2df45671042340024695910afd489850617aa28ee63593ddd2e0b5a708d68ee5285a3a4f30516c2";
+  sha512.doc = "54e8d5f23dd2cf26440e3b3078b0ecac1f1dbb18d19cc1a0e0b46344aa4dc6e48b7f07f62374a4f58563e3ad924fbd7189295a7747bf54bdaaf2d74a59f7301b";
+  sha512.source = "04a35ecae44e9cd022fb23f7c7950288975fe91ca0b5bfceb640e198bef17e6d8cbb70df493b40cfe97ea3ce9bd6b0bab1f1c5c997217426f6bd6de8c25a8633";
   hasRunfiles = true;
   version = "1.0";
 };
@@ -13755,22 +14516,40 @@ tl: { # no indentation
   version = "5.1b";
 };
 "expkv" = {
-  revision = 53939;
+  revision = 57247;
   stripPrefix = 0;
-  sha512.run = "a4c3691608573967a4162290f04da6fe56af27c866cbded1272bb939d2787b168ce70dc3a3a421ac0f232985a213ef36bcec5e3e2b98e66edfa6051d1c29b340";
-  sha512.doc = "33860f56de19ba0e5cd8d5109e7a04865b1ae08bf292b4ceab9d5adbe2319c54630054d4c02448548ab4a9f88fcc80040d9c58119e8d632dfa9e20b94dd84883";
-  sha512.source = "045f29b91ca9fc5562e739e7ed5ab84e902d375dda756daa6d281b2993b9e4edd884a946441d264cc936e8360238b980318af24c983ae27f1ab5b793b484ef6e";
+  sha512.run = "b8270aa4e1b827a6799869584db6e30600a4779937de424548a3dc22511e4bad4d096389038f6423731fd36d3e93be59e789d957388ff243a1e7bbad65bfe8e8";
+  sha512.doc = "31182e02595893c756fcac91222ef640e8c39c053ac98140769c470c126bb85d2cf17f9b342bbacc6608e136d13aab5528761650135d64b6fb3b5014547d6cca";
+  sha512.source = "2c1ad532623a79222a886706c890bdf5c34b80c58a1d378c54bd4d4ef3d1ed2f38d5bab9b415d4f1b93f4562b47e387bd77463cb0ef849a8029002bd96cb4122";
   hasRunfiles = true;
-  version = "0.5a";
+  version = "1.6";
+};
+"expkv-cs" = {
+  revision = 56693;
+  stripPrefix = 0;
+  sha512.run = "128720f96c0801a5db0be297702367a29f9c37363e86071496c69fb5d1cc0641585f01cecebf919ab4cfe34ef93964bb96d84ae8e29ddc91bbe1e844137d52da";
+  sha512.doc = "c28461c7bdcd905036507bcada41a720e0b468bf3f431b750672303baf368a1285567e632472610cedfc2de1d3b0941007113e1caee7042593c57e1f0e9fab4c";
+  sha512.source = "7ce2d0ba12959c7f8e1a93f175d6637af95de461d04e651c5e356c8428e2a3f7ac2a1f240606e9feb03b4a8032d04400f2fc101c073cf09b242f3deb56b6b10c";
+  hasRunfiles = true;
+  version = "0.6";
 };
 "expkv-def" = {
-  revision = 53957;
+  revision = 57246;
   stripPrefix = 0;
-  sha512.run = "0e4b25eed122d54765c527e00105a2c48fa658647621a0c4f61dc2b494139e60ac03c20533086016c172d3c93764af2598a0501326219dcb39ce227321a8862b";
-  sha512.doc = "b6f95ff4700c0acd0f4161ad9c8ce34d2803e8a84eb28caac26b7632d1d2be7f5036a99554298cf7f5344ee463cc8a1b0a5167f7cbe61394c3f5e566dab42d47";
-  sha512.source = "c495e55740f7ca25c5be51138fd8064c882d19d2b45bd9824cab7653c36d12d54df1bae951fdfe6d44df1c6bce7e6047234267c800196c831aded4c9e98cb570";
+  sha512.run = "034a3f9dc0672deb9d35a1f6f27c10d77b0ffecd82697e0a09216599472cb6d982855c7900f1b7f39a748478b0d2a1ed8a434ba676293444863e50fa9b30a07d";
+  sha512.doc = "b689125035104ac0693297b018f8684503b69e166f23e02e53224454d0319e9f7e6867e1bf8bc3e32498dc7af709a67165f26bfe3e39d86de0a56b0f2c16c307";
+  sha512.source = "004efe1983799c06ff03d793ee11e557ad55242ad29c1821680806495c441277d9dc1bce9d01edb558b7ddd7a71ee12e597af63663f72ac728a4d0d68b0a947d";
   hasRunfiles = true;
-  version = "0.1";
+  version = "0.7";
+};
+"expkv-opt" = {
+  revision = 58772;
+  stripPrefix = 0;
+  sha512.run = "8b6203aaeb7a2c86c355a67ad02857d5ddacf5e85f04143b0f0225c2fb4a00c1f6e88b6b1c5a872c1c092680ffbfb19148c8a97e8537babe97b969355b63fce0";
+  sha512.doc = "12312e21d7d15e9ba60800243cebe4b7ab2ea52a31c37f25446b6fe0ef413e9d33d4066d139b3fca1375dc9cfe357a65ec58e7ef1d3b28472da368dedac3213c";
+  sha512.source = "4fe886ef42bd181f521015225b92ae15a16d9b2d34001119f49bc417cddead7fccd437b0f4263c1f24525060a7f94f423db38fc8f677212fb330f690eaf9a676";
+  hasRunfiles = true;
+  version = "0.2";
 };
 "export" = {
   revision = 27206;
@@ -13781,6 +14560,13 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.8";
 };
+"expose-expl3-dunkerque-2019" = {
+  revision = 54451;
+  stripPrefix = 0;
+  sha512.run = "9a642f593f0440159d802bfd78a472645dc1c320a43e8bfe91fd7eba3c0b67bc3ad9477c17b36f6ac08b39ddbaff11687e78694bc81134c33e1af085a9384a24";
+  sha512.doc = "d3b09af828ace720aa3f7b0fe979893f9fca3d358a69abd818bca7a81d45928cd02e0557bd607bcd91f223ad9f4808b0aeb61ba7269728d467eab46999ea5f92";
+  version = "1.2";
+};
 "expressg" = {
   revision = 29349;
   stripPrefix = 0;
@@ -13808,12 +14594,12 @@ tl: { # no indentation
   version = "1.4";
 };
 "extarrows" = {
-  revision = 15878;
+  revision = 54400;
   stripPrefix = 0;
-  sha512.run = "c5ec26369801ba653899a6c67c41a173842f7f5283d1279d512104cc9cfd04707fdd0313a9fde03672f03a7bf1f2c46f376aa961b211b4bc0ff2641d34eb3b8d";
-  sha512.doc = "be17974ce5f9361bbfd8ffdff55ab39cb1de6aa5701c4582586ea43cde45854bcc8c65f5c4c7a9a1eaa311c24132294ed02f36998905ed7f872c81a022d4d6ec";
+  sha512.run = "ebaceefc82c42bd0b0e341d6d2cc589f9369fceec0a71dd7da40f0228b0ef1fbdcc9ba95ee0990b47b4a202d15c87630e46867afd8e9d69fe02fa721bfd590c5";
+  sha512.doc = "c51c13205ebb78eabf181b4a927bf92ccfe6756d732162407d1e98961c6b50fc20143de05c992feab2b6622a80ad7556eb173d87264e4c0059cddd10eaf8506d";
   hasRunfiles = true;
-  version = "1.0b";
+  version = "1.2.0";
 };
 "exteps" = {
   revision = 19859;
@@ -13859,13 +14645,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "factura" = {
-  revision = 51895;
+  revision = 56948;
   stripPrefix = 0;
-  sha512.run = "e4ae9c0019ac296416497fbc8d30bc981a1987cb7b4fc7ccc21512fa2ecf11da0b4057775dac37e3421261faa8c76b9354725a2c514d1fc514cd7815571d2004";
-  sha512.doc = "0b091d2d4da4cb858ab13514fdda12babe9bddbffe466fe4d40c7acf828e31b9aedd6efb3eedd8895e7e12691a0e1e2bbe1f9bc8a21f3c18cb3fb1d455a8a3c9";
-  sha512.source = "52202822a438daafcfaed256f1091a5056b8c9e58273013bad555228bbcef02df9da3f3074f0cf5aaeb7349aaec64515bd1eb598ba1463927d7dc1c0a860afb9";
+  sha512.run = "a4c20cd7b7b2dbc58cd7d1e2c7cdde59710c9363a7e4878825d5aaeffa992bbf471169bdfa01c83aaf3e82aa96ab5fc634676656e2e4e6bff55cf5c4e5407f53";
+  sha512.doc = "7822a8f8cef63485f2c707e180c14b67148cbde8f8f1b6d1ec6bd0d9f6e124cf4b63bafc7d01c6ec72c8b5f1edc36f68f9f48b9bac523ceaa093a861a5790f2c";
+  sha512.source = "14b3c407a61583fb5cf3813d7ef379fe34415f10b985d7e71dba622dda7b118dbb197e7c8b1cb2cbb45378e38eb333f539c4e95daeb57253983699e3015e4395";
   hasRunfiles = true;
-  version = "3.70";
+  version = "4.00";
 };
 "facture" = {
   revision = 43865;
@@ -13909,13 +14695,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "fancyhdr" = {
-  revision = 49886;
+  revision = 57672;
   stripPrefix = 0;
-  sha512.run = "da99c0def1655589988fcebf627dcb35ab1a3f7ef481f141ee91045f81138cc02f849f4879507afdbd89e631460e5104d49bf0be6a640f4c7e9532acbc952454";
-  sha512.doc = "a54bd1e4c0835e1d3790ceb9c50ac63766df45fb3d807b74222465c116fd103d65bd09a8e0f4cd20941422734cc508fcca9f86be3ee0cc2beb4927b9a2149849";
-  sha512.source = "aad6a82c734ba3a1a571ac67f38851808e42c600884b22b64f463f7f4b41f83a85342845ffdd70244236dbe1cb013ad77f28c1897c6c28edc16590ad61d79510";
+  sha512.run = "57a60833cb1e75b2c6f3c95484dd36da6a21704732f0309d2d1252824b458dbdf34092411299ccd27a4cd5202b4bdb710b920d96b970c9b58bfdca4889aba820";
+  sha512.doc = "6b054701df4a35a4422f0248f6fed134f3321e8fc194b7095f5b0824f6a1d325db23cbe34e973dee061c5a571b76b61618d482f3fa2219911c34c981ac51a1ea";
+  sha512.source = "fa39b94e25a2730164f5218ddf77dabcf1edffa5448533b39a22f50ce45481405bde47f61e1967c8634636f1ad111069b9d68450127f5ff7b1bad66470248efb";
   hasRunfiles = true;
-  version = "3.10";
+  version = "4.0.1";
 };
 "fancyhdr-it" = {
   revision = 21912;
@@ -13977,21 +14763,21 @@ tl: { # no indentation
   version = "1.9";
 };
 "fancytooltips" = {
-  revision = 27129;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "e1d7243552cdf65cef1e647472a7f6c1d818c1e862afcf8069768d9beec01e4c250786e2c4c1af4febbdf94f20362110399bee33c7902bb7006de474a0d013e6";
-  sha512.doc = "4bd82e0ae682abd0157f94b5374ecdc6cedeff0af22a5227ab527b725d8710bd7f8c5a38b7380a91ecaaa383824d8b88d182d1edde312492c34728ab6ff2f4e3";
-  sha512.source = "3c6d477873c8fa6560d4188dbad1dbe43a422f08f4bcbdc15b034e0ee7dc5529171d005f48a25e1df6d6e6fbd0f8db5f11c233c515ee70e307cfc31e5f434e24";
+  sha512.run = "79ac95184f6890ed405919d064fee444a3b00dffa8f76724c302133cc8b4f4c40648e0bee607702cc9faea6aec3e2f8c34d1e2011abe6e6c6444b9076e5f42f3";
+  sha512.doc = "c5a73dc14138cf5f13494a3844e9bda29368dc129e6445bd3f1a7b1cfb60498c44d7527a673d51dea1d81b4a2db438078a406f76ed1597b6836015c588c79270";
+  sha512.source = "6bccdd73454b8a2ede4c1895e5b7019d136af0e79b72417a223d24d004807d02c51fdc3187ddfd8555233882e3a15862db9e3ec7753a349241b25227f8e223aa";
   hasRunfiles = true;
   version = "1.8";
 };
 "fancyvrb" = {
-  revision = 53392;
+  revision = 57488;
   stripPrefix = 0;
-  sha512.run = "18e96a9e2f0d397e83af318f2bdec75b9ccc819c1961ed3d1898ec5cdcdeee8d9f6cd3659e11184495045110ff9637088dd61382c039504722e0119da8c67af2";
-  sha512.doc = "cbae429b29f1bf6d6fd78f449e7b81cf81069db3cbfcc3aaabbc686f3c390db2bacfd13c483ed9bdfe8424276839a17d2ace710612cf014bdc27820cb16bb4fd";
+  sha512.run = "cbbdd7c868e6d238b4e82e59f7e8b1917d64ceef2b75d7da7f95b823544b1fa0d05141a248ff449df52f784100d79ac8f609cf4025b9d3db5b24920dec3f0863";
+  sha512.doc = "1de32c07f17b316e0ad8704f3c800d75ecab9a6e3cf80ce8c725c126e77353ed9685a1d8e9dcd61295f80b975814ea8c67c11b62fe5bfae71cc2ebeffb440d3e";
   hasRunfiles = true;
-  version = "3.5";
+  version = "3.7";
 };
 "fandol" = {
   revision = 37889;
@@ -14002,11 +14788,11 @@ tl: { # no indentation
   version = "0.3";
 };
 "fascicules" = {
-  revision = 49457;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "5ca661dea7cad6094d66d0a843cf5f19183154f81773db38f9a13795a5b9d8646e9f0b471bbd741e5f25cd424f199b3a18d1257a7e8d07e0d812a04ae202ca24";
-  sha512.doc = "02d72ccdec87334da2c10d5a57b004357e36c8fc1aad33783e44992019fe3dcc8b8d6442d63870b4806c3dd080c3518bf94ae110531ac65947584301a11b4b51";
-  sha512.source = "c129da364d22c605feba74d4e93d7eb48c8b5a3ef77c60d2f930fa2d3c8f757bbf3fd8a5aa8f3afc688057d80d86acb5b74d2d9b422d387bc075e7e7122150d8";
+  sha512.run = "0d6318bea8660796a5ddeab06c416017ec2075633a391a536c7c3355de7b7e7f711e74f0e43e8b4fd39debfec797164f1961eb27776ca3b53eee729d0e27a479";
+  sha512.doc = "ee9a54c4b2d746577e94abb6d458c473f88bff18e4f0f57bed5923a1ef08c6ca533183ad9e9eb1d1bcfae6aa5082d88a9c08fe7cf96c3ab9d71ab099ec64c1c0";
+  sha512.source = "c5fec67754d84dc42dd6c62267c8a906a5717f53d9c063efc51b6cc45f3f616d270fa3af2658deac438739cb231bcf9b2c9497477c910f576ca943b80e03f3c9";
   hasRunfiles = true;
   version = "1";
 };
@@ -14019,12 +14805,12 @@ tl: { # no indentation
   version = "1.1";
 };
 "fbb" = {
-  revision = 45277;
+  revision = 55728;
   stripPrefix = 0;
-  sha512.run = "eebe9b977296dc02938c13cb9a160612adafc00dbf200fdebaad5eb1efe8c41eafd6102e40b7be2e734fceb7c92cf84730182bc2743c5c68924b00a5769ad172";
-  sha512.doc = "480f1df4a1b1ad29f009d70f56e96ca3ea3e76ca913a86cc4b75850211dd4f92e3e43fd9ce832ebba98aae194111ed340af2f530f00edd37e4a63016dc7bc215";
+  sha512.run = "d63e140b60941f114b7aa7c82888c224715d6d173b88ca85aacdb3f7635aa928846e804e807830674d3bec0fc801435eb9e07406270c156d40e8c1994f50aa3c";
+  sha512.doc = "c63214ea5a91ea6bab66a866a65c2ee43c64f49afbc3235e2f55cc0de89fb3a269bea45fb7d67ccbcda4bac3249b2f2ab14f780fde7cbd112231b16e58eac67c";
   hasRunfiles = true;
-  version = "1.14";
+  version = "1.16";
 };
 "fbithesis" = {
   revision = 21340;
@@ -14036,12 +14822,12 @@ tl: { # no indentation
   version = "1.2m";
 };
 "fbox" = {
-  revision = 53320;
+  revision = 55627;
   stripPrefix = 0;
-  sha512.run = "c7b6b1af67b8984486b5327a1d017be65ee3f5bb026e9e41e929dd572125363aaa9726ed6d619903ad465c792f10ce52038f0ae7356d836799945416e96e18c3";
-  sha512.doc = "565c22a94102c184da9180cca35e840881bfee10c9f404dbec230e167f1f2587233d85851c9db6babbe29494c7ba4f6acc495464320df0a6f4055c29ae8eb1f2";
+  sha512.run = "6274daeacfe6901b63e1ea839990a00334ce218cd76d145ddd37e4a414e1fd395d8937bd019455e45bb52b557dd6b2b49cf90d84ca12cff797cdb8162414ea50";
+  sha512.doc = "13f85034f1814c814d7c6885650a35d97c483d47fe4e7279ae3872cf155d240084132732f71b38f6a0440d38fc1a2ed33cfa4ecc6d7a4c11b89f4c7d6b482204";
   hasRunfiles = true;
-  version = "0.04";
+  version = "0.05";
 };
 "fbs" = {
   revision = 15878;
@@ -14075,13 +14861,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "fcolumn" = {
-  revision = 50937;
+  revision = 57428;
   stripPrefix = 0;
-  sha512.run = "13128f25e12c914bf25c45c87a75bad814eab519059c8a478162cd4fc678972ed8e24800042e87866197174044eaf9f90d3cd3a8eca62f33400e3fd2294922c8";
-  sha512.doc = "ae0645744e26bbf1a940ba1339256b7d718f4df819ad04f5f52301a26d445cbce4a1ae4bfa2fe6d13bb81ed31e94839d87a251a7429305d396a56ea113df37bb";
-  sha512.source = "47b78b21332aeba11b08ed6f4eaf781b182c224450b508a48a80ca7f93ffb43c4cc818739d3793ca16674b29fbfeeed320247170c63a4aa321f6054610fe782b";
+  sha512.run = "9bd1bff80e03a080f2d3778c89c19478691cc119361229cd66b776e24260ddadc30ba37fadd5a82c631c14b369a2045960123f5b1f169ec699d9ad627ded3256";
+  sha512.doc = "fac7e6eae8c6c3d1c6b05eefcca881f08334ef32a10946227f0244c74460f3a66926e6735342dfbf4da80228a0271b10aed8b42fcf66eb72ae41ff74c9f72af4";
+  sha512.source = "a343431efc38bb19ec033e0791c7b5712324c2dc92837b9d620b6a35d8a6fcec24faf04cb71edfaaf34d8355ad2f40c7ab51b21f4b3ebe1e4e84cef0c2af6487";
   hasRunfiles = true;
-  version = "1.2";
+  version = "1.3";
 };
 "fdsymbol" = {
   revision = 26722;
@@ -14093,13 +14879,13 @@ tl: { # no indentation
   version = "0.8";
 };
 "fduthesis" = {
-  revision = 50738;
+  revision = 56216;
   stripPrefix = 0;
-  sha512.run = "2c33af9559603c08ee844cc0dd6dcb8a6c215f0b0c7cd25435b64b1ad6c83dec608c601ce16efdfbeda890258bb36df8eb549bf43bca21bd778e003cd637507c";
-  sha512.doc = "bc3d2c383233846631e5042742a08b5ca05d0cbe68fad908065310f00c50e9732af0b912eecf01496615d221a1ea6fa5f3d9be91c9533b97fdd642c47d6d8c5d";
-  sha512.source = "4f048791cfdfa5eb1dec273618111f0d8e685c9a638bb4aa2edc1e6ffcd11097aeaa85d9130be4ae8136c14277f85a22580c42fdde9a8f3602cdc57eb4beefdc";
+  sha512.run = "c91ca063c73e97947fc36c5d5c33cee2e9e963f9a4c993d209d3c2b0c950ba9a34f928a9e6fb5e3922b2757938651ea8f5eb6014f3878b0ae3f7f9cf4bab91c1";
+  sha512.doc = "1be56ed247773a6a28a17aa0a29446f1e2f63333efbfaa4533fc288a3ef7b2d635c10f36e51d8e1a414cf067155ad9dc109fdd93f5ed83900bc2a5eb5d94e4b4";
+  sha512.source = "73b13aa52c6cc5884b6785a995767e7de161071cb98fa6f695947efce7faafc6a61f1cca5c8cd73edca0216555b96c5f7a72b901bda9aac35df34f5d0b4fbe7a";
   hasRunfiles = true;
-  version = "0.7d";
+  version = "0.7e";
 };
 "featpost" = {
   revision = 35346;
@@ -14110,13 +14896,13 @@ tl: { # no indentation
   version = "0.8.8";
 };
 "fei" = {
-  revision = 53748;
+  revision = 55960;
   stripPrefix = 0;
-  sha512.run = "bbce2eab74a8fa480fd68bb0559c2bc41998ae119720ae2a2e2b2a0688fd0a61a817a4a7102d1c08a2aaf042182bc3fd4fdde64d2be66e0ec309276cbf47ef92";
-  sha512.doc = "dffd3e43bcee3c608d3b5f6b13e6ac721649db0bc7484357c34fd3a3c962cc7e4a5af2188d76a409ddc0cc7fd8111e8aa402d740a53b14b58c8be86f964e6243";
-  sha512.source = "819e66b25ef2f2221c79848d3c161aa7ab6f7406b95281f43860330093463dae5728cb452487b372e79446ef9f6f9265f33018c590f1a69c18331893cda15735";
+  sha512.run = "6f99d70485a3ecae3cef9af7e545cc15f5a45ae0f84266fe6d2d84f7ae58bc3b7e3138e28f42a577362176a996df05a2c12375aa4f58f14297619ab2f32a3cf7";
+  sha512.doc = "822502abad87da654f0cad81ec87bd6e1be92abeba74066a7f96da0455a80697855b783a75e30e3c1b0d740db9fd2880d25ae1668da9802843677c84dd3da424";
+  sha512.source = "d72b86ba677a71bf5dca8c2b39ae8bd202544a3320e93f776477e6977aeb3fe3d47f8362467b95ee6667fd46dff3801164380808693b16fa9065a31d694df7ac";
   hasRunfiles = true;
-  version = "4.7";
+  version = "4.10.1";
 };
 "fenixpar" = {
   revision = 24730;
@@ -14152,20 +14938,20 @@ tl: { # no indentation
   version = "4.0";
 };
 "fewerfloatpages" = {
-  revision = 53779;
+  revision = 58058;
   stripPrefix = 0;
-  sha512.run = "9618c6cc8f94957cde1f015cb49379e3e3ef3b39aba816a81f38749037240506c8fbfbe12cb9c32f7f1e651804659649f06f509e6d7882d5fcb16a34507a264f";
-  sha512.doc = "96e9f9cd865731d4429f921c41493bab6a760ad6bc8d984c12334149dec3309949a7a213ce28f2ca11ba793ff4264bb3a3065de86a1509301d7d7ae046a45d3e";
-  sha512.source = "4b54a41311355e9c0cc79d667700771540ffcc3841d3b1c2e9264a17548019c3ee6936c0aa9690a848ff5c8af106b5339b092176f416768bfa6d753f454d98d9";
+  sha512.run = "4f5637bf431b54590e8c2a8ec27e3da3d801205b8cba053c8c1294ba0882bf8aef17a0e291c149799cfc3530a415202014570460a6e2e8986ef71bd2cc05567c";
+  sha512.doc = "a18d15933e6efbbe3428f366bcc5ba5ec0b254dcf77f7ac2e72c19bba00e78b44c98df34f57468902101f547fe9e88b2033430a02098805c6f0072e68ac82513";
+  sha512.source = "e98684d4cb79477c66e4a831c8571729b3da021bf9945bdecfe8a9ff57fb1e2948c42c3481adea0fb702ce4d56ac533b14f76e78c182500431af7f3671491d7c";
   hasRunfiles = true;
-  version = "1.0a";
+  version = "1.0b";
 };
 "feyn" = {
-  revision = 45679;
+  revision = 55777;
   stripPrefix = 0;
-  sha512.run = "56e7d5b875db6eb6e5ad2b07d5696fa4fc6cea7d0f0f9d691bdec0fb90f16bbcac0c9f20f8f16bde20eabf98f72fbbd75831af1191b229cd7acca60bb2edda28";
-  sha512.doc = "df4454efa6f9130fac5ee2986abdd8eacb42063930ee194b65d94a1e1a90460c4116fd62da232f01f94fad63d9eaef627655aedadaaf034f910ebb97b40a7792";
-  sha512.source = "fbfa44afe7f1ae10566d736cadd02a3d9f562b19d25b2f23b1dc27fefc77d6b7af550e7161bba7c62d63f3c75d8b704dfdc3befadef9ad42ed42e42000ab4557";
+  sha512.run = "445d071bf76adb0c8ed89d294eff3129a1903624a1ca4dbfd5d83016edaccd5e2f8758273d8ef382696e8d3c9270526eb77ad2021b51f6df7e91c5c7a138d2c9";
+  sha512.doc = "e3202a822e034c179f399856ee57836950fb0e0cc0f664cf7155b6d5110762fbe26da596ea0e9fafe4bacce330ee57bfea1bec1ba2d16d4aad01dc868b00c2c9";
+  sha512.source = "64fbe2a9ce848bc5d862d5c74a59d007300c3e83b97b26f8ce8bbbda53931e563f6a1f8d406a43b6473564e5ebf4afcbf2c753fb763dd1be59ddafb8329e6e75";
   hasRunfiles = true;
   version = "0.4.1";
 };
@@ -14204,13 +14990,13 @@ tl: { # no indentation
   version = "1.25";
 };
 "fgruler" = {
-  revision = 42966;
+  revision = 56854;
   stripPrefix = 0;
-  sha512.run = "d189eafb4b2f7788d42614f87684bb3cc36d8e022c9c98f8f7f44babd5f95d3462ff25d2d9ab541384d35ad4daa39b09e28dadae1fbd0f7fa25d0f8ae217c34e";
-  sha512.doc = "16e5f5be432e338788ea78c5e41091eac616a3ad779c3c40bff723fda2646d5205599857f0e23f1b2774fb56a2ac795c61babe21cc4de5ecc2fadb7b6d33eb2d";
-  sha512.source = "789c6383611f55e5efa878efc1ba229794a888a26bb4174fe263c5cb2ea678e67422a47520410bf83b90ebc32a4c9584a7f24bb66f4175d6b71ff0ccabdb3de0";
+  sha512.run = "7567024373e5043986da5e5ab1953e207ab801284f7cbac38bdd200ed607da239a37480132d3b54ae52ff4cb409414b8dfb3e998a5a70bd49161ac99f6cc99e9";
+  sha512.doc = "dae1aa1a479d95ae31efcadfd3c48b28b57b10e844968550b4772ba863b6889f8d4e7c4cfe928ffdb903db611f1ecd0b4319b0be6429895f671a695fe9362fb0";
+  sha512.source = "bdca41dc44cd030d9548091521d7d92986e693280977edf7a2a6f804857602e6904c85f4639e9a18eb993c89a95b1217ee35cde50e6d30b238de3f46d332c6ae";
   hasRunfiles = true;
-  version = "1.0";
+  version = "1.3";
 };
 "fibeamer" = {
   revision = 53146;
@@ -14260,6 +15046,14 @@ tl: { # no indentation
   sha512.doc = "ba42f6cc811fc9e00c41bb6fb410a57a2efe759a0fd0621cd83801963d0ed138dc66a1a245a4b7256cb056f3fe71e883a8fa84d19dda785ba24825e85edfa044";
   hasRunfiles = true;
 };
+"figchild" = {
+  revision = 58759;
+  stripPrefix = 0;
+  sha512.run = "6459b58f74c4e1c752fd25827a45957fda5ef97beb5606575ec045cdf3703343b545898d1062fd6638793d1d6961893fd5500b2b5a9cd2aa04a9620f286eecd2";
+  sha512.doc = "0b4f1759cfcce19bc429a46b669114b981b02401b16e2f816801206f3372ba3d51cc3ffa8e23005e76909e35690127548a1c9c3be054741d1cd13d32819f0fb2";
+  hasRunfiles = true;
+  version = "1.0.0";
+};
 "figflow" = {
   revision = 21462;
   stripPrefix = 0;
@@ -14302,13 +15096,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "filehook" = {
-  revision = 53655;
+  revision = 56479;
   stripPrefix = 0;
-  sha512.run = "16196dfc6efde9c09a0a285e25672b144e8ec291fd76eff4e3e8db3c178c2b1bd84e18890c5fc392c7bb87640e8fc8a6683999454b0619fc96dd1628804bbaca";
-  sha512.doc = "0fe00874d60f10be246f8ce50060f84cd15b4448d52933a053b20e69fcf247823ccdda23b3282aa6d2317bc629b2cbb182c60967a2ebf23b64a4a57719664960";
-  sha512.source = "f1d0078a515810e9850a34341f2ac831beea2a636a58161782ef07554820bbd5ac7213d59d92a79924a07db53c45feb8be3442b5c9a7043e9005825049e34209";
+  sha512.run = "4591384d78ddb17648bc3bbbbad2b0e7f693a250e36b8cfb110233d909151352c337ff15ac0f53803a01ca2b59b85c7fcf4405cb67e04df1a0bd3bbcf18a6f07";
+  sha512.doc = "98e77091e4b46fe53276621f17dd015d88254e94340a33d7591c97ed031865fd85cab22cbd1e2ad6cf388362899b88cd529f8b8cfba13dcafd5a1790e815340e";
+  sha512.source = "ffb2ecd14c42307450179b1cf83244754f42b805afd37ac4003fb758bb5c975b0166b81540ec1fa3a34df42795af152b7325cd29208e8db3dc287fde1b70774f";
   hasRunfiles = true;
-  version = "0.7";
+  version = "0.8a";
 };
 "fileinfo" = {
   revision = 28421;
@@ -14320,10 +15114,10 @@ tl: { # no indentation
   version = "0.81a";
 };
 "filemod" = {
-  revision = 24042;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "4ec27d16dc551d42f9ff326d20f78c48d73e7324af65f6ccb9e662dcd399394c631d9a742aef8a2efc235dfd769a04d22b4ba37eb8a2cd06631cba298540c08b";
-  sha512.doc = "88c1d8c61ed1759617c9cec7cecbb28459dd5e06f139ba3ca2f98d7b6357a15fc89dd90daf26e5f4d17f33fe9673a8c17363fb757ecb71d9e530f0e153ec486e";
+  sha512.run = "c927f700796e4cdb9d7d274fcb390b4e1c0c04ac95df8a8586eea3c8c6aee3daddeb9f6a53b3df103887a7635288f7ae316d09dc34603fe3a37f74bf45f85ef8";
+  sha512.doc = "96587219fdb00fcaea6d838b58b5a04169b17cdec1c937378255f7dfb48e687a205f08a20dc6654ab5565a68649ef67b796653479f95a4c022596626ddc5b16d";
   hasRunfiles = true;
   version = "1.2";
 };
@@ -14359,20 +15153,20 @@ tl: { # no indentation
   version = "0.5";
 };
 "fira" = {
-  revision = 52339;
+  revision = 55437;
   stripPrefix = 0;
-  sha512.run = "3fdea4c886ccde87500e792a7508d5e7923d7a58f7f536b047ca537728f42c1ad44ffebb9b80869f1e30206e7f17ff5e694bd72b9d4c1a68eefcd01ec0b6d6ab";
-  sha512.doc = "b54acf3f963fcfbc58eec3fb1ba058724638939d6d0f63b69108c431e6014fc46313e7d2a11f2d31e1bf12041d6d85f426f2b0533a3669f3bed14ecffbb3ce3a";
+  sha512.run = "4e5ea926b9431b460b82130eb73a59c2cfb97146b30544f656f07f2cfcec0c5178dd4905829baac35ae05f49830d73074ae49d8f594bca03360f0ee6079a6876";
+  sha512.doc = "933810948368f3847cb7a3ad9f72724a82a995418caca97ebaf49569351d192a37357b502adf0aa0c7ff624994505c677ff8b5ed3b8739fd6bd2949dbafc85d5";
   hasRunfiles = true;
   version = "4.3";
 };
 "firamath" = {
-  revision = 53388;
+  revision = 56672;
   stripPrefix = 0;
-  sha512.run = "282d1d6dc2f414c4fbeb0267ecbc52446c125e3195d82f5ecc60f1c659b0e92607fe2621f8627835732a8428d5028df47e3b75a8da051fc3da8ecfe9eb5eab1d";
-  sha512.doc = "d8d3ebd6c529a7e518597b9de2372ea8aa6e07f39c281e904c2654ee575caf200bf3e18d8a9d98861aa1102be13d64d12e18860ec046374418e8226360e3aeef";
+  sha512.run = "c18ab8b2e12b947144528b196c9b1de7f1930f3a38338bd114bb61205d7f910fbf1e3b20ce48ad8228fc24b14d734ae68c3c8542218a058120a62783b007461c";
+  sha512.doc = "4e434c757b4ad4c82397224ab275db9a0783994dd9e3acffaecf19f73b3bfb86dc6f70c2833b2f203ec354aa275384d1e97f48deea9a765b3d972eede02a35f1";
   hasRunfiles = true;
-  version = "0.3.3";
+  version = "0.3.4";
 };
 "firamath-otf" = {
   revision = 50732;
@@ -14388,6 +15182,15 @@ tl: { # no indentation
   sha512.run = "39641224689a1d45d59b5643e5037599d03df3ecbe95090d565778758d334bddf832e867a25c1688adbee1f99eea23b3ed21fd6729fb3d4e50f1503537c9a400";
   sha512.doc = "497080fdad8195bdc43bef476f9e678b49d83829f10a6653c9443d327cb0da8505623e941cd3038349b6307ee37a65ce1a3d3eb48e4c6262f9d636d10d96e17b";
 };
+"firstaid" = {
+  revision = 58440;
+  stripPrefix = 0;
+  sha512.run = "31e74a644d0b2a9b0f659207195cc39b7b0cdfd44c878caf541869a114ca90990637c04b3da74f9f49e2dbcb30863030fe901a67b200d1aa4a9892ff41defe15";
+  sha512.doc = "368484714a5b45d47fe6b86c8025175d034842cc6e64665f574040bdd89cb42b02a739edca6806d3585a484cf55ff083616c0a210a9ca65916477ddbd4678b5f";
+  sha512.source = "9c1c4ad607d2c9896504637c8efd0f7dcbb1916e7f671ead11552fbb6bcf0f8af216dc40a0ac771d3e804a02f65e12067082d001f96506d8d5435d93ff513ba9";
+  hasRunfiles = true;
+  version = "1.0j";
+};
 "fitbox" = {
   revision = 50088;
   stripPrefix = 0;
@@ -14398,13 +15201,13 @@ tl: { # no indentation
   version = "1.02";
 };
 "fithesis" = {
-  revision = 47409;
+  revision = 54483;
   stripPrefix = 0;
-  sha512.run = "f21aa6a1866f0a4d21eb8ea1e1463e421fcc72c75b72f4a79efabeb65da21b633ff913cbf99eebc71232a9e020d2bb7743f520863563f7eaf9763bbf6e9ad29c";
-  sha512.doc = "ba5c0e75760119d9423cef3d26eac3f4b5621c80e760ef026aeef68589b5a724b0c7837088652e4e369fc48850a3d78c0e86f1f2b1149118a17739b5b9c0809b";
-  sha512.source = "33f8a8bdec9faa2b8a57d874c869d52e6b612c9d24da4ac701355c1ac681644388d516ee7358a0805ffb04ba6842d7c1eea533c17b4b14fd3c87acfee180a17f";
+  sha512.run = "fda3b077f21307d883b6808fe69b7dafc7d9f44c60ce48bcf10ef14e22c03b4c91b73b9fb626a2c1a8171aa3b66defcc926705c70ab5a264c8c64b847c66ab06";
+  sha512.doc = "7445bd2d5065db20e62a4454fa4f7bd39bbf7df0681ca5e73af06e21b9121b72c32ce8903f453f5c24e7c82f987726f8c9d3a54f40b44f9e6c5c6e419be9cdbc";
+  sha512.source = "087fd64585722b8fac089f7e7a07bd500f712a6fd8044164f1b26293cf18ee58c4f32f48072d08fab3c93af7d85aa5ac40ef7c86ab5c5081a862247675f7a02b";
   hasRunfiles = true;
-  version = "0.3.50";
+  version = "0.3.51";
 };
 "fix2col" = {
   revision = 38770;
@@ -14483,10 +15286,10 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "fiziko" = {
-  revision = 50293;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "785f99a52193acc630e5fb00cc2db9e16795f42059d65054b0fa07f8081b95e66a245fd05c8b3ee49a69d91a17e7447d10c39863612e44e2632afd5fd0165e38";
-  sha512.doc = "e9aafff476605082dd4116cda573c8f20311659276ccc7dc3477a24024d59604b4b8f724effc853d7d7832493658fb4f8b83302921544ba2c986266317f5a895";
+  sha512.run = "d76d828bbb7d54596c7e3127d2d2c92f9da7572892d5b0a5b139536e9d765875555bb831aeafc67e56e4f2234462aed14aaabfff2685b30bb53bce89cadf0e90";
+  sha512.doc = "c04516bcdaa607d01a558f1f30729792365c9aeb4bbd116f4523f398c261a6fbc01eaeb64b5fa6ba008c38a8f1f2e4c9fae8de40bb4255e35bc80059cd50d23a";
   hasRunfiles = true;
   version = "0.1.3";
 };
@@ -14549,13 +15352,13 @@ tl: { # no indentation
   version = "0.2";
 };
 "flippdf" = {
-  revision = 15878;
+  revision = 56782;
   stripPrefix = 0;
-  sha512.run = "8f4de43f2d6310bcf3bfe350a071d43ff4ddf4d21acaebddf59e3fdc62ae562e32006707a6f7f5de1f631f9aeec12edd7cf75332b012e433478d171e149f2c96";
-  sha512.doc = "3b40280c0d142add31bf27dd57cf52ab2d5f4f43637cf1a1a20202b5615b58c52567e53ff2f9875d2d1e73116c227319909d77df1609ed5590b30d2c151f2c63";
-  sha512.source = "359f526185b8d3160cfe2c78c22d36e2df4ed245f574d3ed905b8e0dd95664f57f0efc128130a00d2945c666ffb094eb4333a26c13b56c9917bc0172e31041f0";
+  sha512.run = "17773b1ba5f40d694cddb3d2e2742650bde889d53302e6fa6ef0686ea4cd3fe393ca2e5b31842e93e5588631ee53ebb668cb035b2843fc5bd57911167074edaf";
+  sha512.doc = "d5191d079641c9a06336498c396cbcc7585c983924a646bcd3b26889ca51a08eb166ced560f45f834281fae9abaa47d02fdd4ddadd3348cef704dd9b818e7675";
+  sha512.source = "95e86fe1e8ce5cbba8745123dbf6c352545d0a75f3ce679e2cf132e46184efa28123f9f9ecf805939c10f59af5bbde84bd2a75eba8f0aae3628b41226059bdfd";
   hasRunfiles = true;
-  version = "1.0";
+  version = "2.0b";
 };
 "float" = {
   revision = 15878;
@@ -14603,11 +15406,11 @@ tl: { # no indentation
   version = "1.17";
 };
 "fltpoint" = {
-  revision = 15878;
+  revision = 56594;
   stripPrefix = 0;
-  sha512.run = "8991df799bab2ef9e9e7787123a61752260122ebda5491a22d8bd0aad88810bce93fd78e1fd6f79e58bd274684c2495225513d0f69591cc3e92a052ba51baa67";
-  sha512.doc = "3b175372a197bdb243776d068e797e8f318200e6fb9cffd1ff612cd771a4c53e9e26b36079c2b392caa77b1ab430bf3ad7a6dc235a91f25662904ee702a84508";
-  sha512.source = "da74554dbe3e21061ec4d0405a59f3705c821dacb359736d7c769536143b22ece17114ccba579ec4a0b941d37a6c60753dc8daaa6593b2df17335070c098861f";
+  sha512.run = "906155f3bb5fa81cd4e97a375c37774db1ad4db388f334867cb5ba30735ec4ded5461eabcc833951b5d8a6e2403eec02e0f464d35f109304b9d6152638949b00";
+  sha512.doc = "3c023dcb86eddffb28e0937f9d31dada6c82852e44a430c892feff9572c81d9830e4524f742afd958a79f0af63e72311ece43c9eb0e2d8434d871fe144b7fab5";
+  sha512.source = "cf5031d06ada079028382b5e845df5b69330fe23412aeb2226af725333dd9d5f4b0915f5de2c46bcfaf6809c9f85479f6257c6e7825c076f896c5f411e3ba9ef";
   hasRunfiles = true;
   version = "1.1b";
 };
@@ -14669,12 +15472,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "fnpct" = {
-  revision = 52294;
+  revision = 57508;
   stripPrefix = 0;
-  sha512.run = "ab53cf7a616b6de5c5914efce55698dc02687892ae7065cf480eb2be1320592236f4150d520d606cac815b7a9c25c025d47bb981e28ff82ee0b16e7e39daac36";
-  sha512.doc = "ef357a4e65cc4e5ebc1a73a744e3eaf054d9d940573f456171209d5d333a7ae63f572e37cc4e78dbd3a5c0495d450802e8d9e18b6dabd7e973595ff7fbfe726f";
+  sha512.run = "cb423c17f6d4a58f400c0d59920aabeb33abffd70338d158e63fd4cff90e1e6ba43c1480320470851cccebeb66ae523cdd2c7362b33a0570aa20759605ef0be8";
+  sha512.doc = "99c51fd746c61028079a6fe9fa8a29cc2cc141a9d3b81f9e2fd33e35af02cdfcf7f7833e8125d0e03a2d39ea6518ba5c0eb589548f5ed35a9fee7ee4b4e3e5a9";
   hasRunfiles = true;
-  version = "0.5";
+  version = "1.0";
 };
 "fnspe" = {
   revision = 45360;
@@ -14748,21 +15551,21 @@ tl: { # no indentation
   version = "4.6.3.2";
 };
 "fontawesome5" = {
-  revision = 53434;
+  revision = 54517;
   stripPrefix = 0;
-  sha512.run = "766985dd08abe4df21c4246bc387ad55075921377ce0f53fee67995a04bd6e85ca20c1135da6e906ef92ca63db89bd56ae82de7607ee955bdb272532f360b594";
-  sha512.doc = "1e627742b48a0c3eabf18402592fbdf265b35cb884e9863d00d456fc3b0f1301c67ee8d249ed7299f6a7f11768db9d97b940d1d8238a7b43881710b59ff08b44";
+  sha512.run = "2d33d6faae95c3d275fad5e0a962e7e8943ece8e311555915adf6f9cec9864e00a4309d42e7e171220f16c7ce8f7253499513f0d118685f0a7373de98c9fc886";
+  sha512.doc = "24c198c2abfc82930b43d04b1b855715c48b7b1d2517d955745b6eaea8b4d81496af627907a3e7d9bb232df442c965a1ea84c427bc1a8c964cc83dc123392051";
   hasRunfiles = true;
-  version = "5.12.0.1";
+  version = "5.13.0";
 };
 "fontaxes" = {
-  revision = 33276;
+  revision = 55920;
   stripPrefix = 0;
-  sha512.run = "69aba944977a676c557d2015aac1058091b96b52a50da52cc733187b96ca02b7a8dedcbfc848198442a5f62c824ee9e977696677f9aae267579f09d2e1637f73";
-  sha512.doc = "f7e0986d9f811b6436ecfc42c943bc2b21b83cb94d8bdbd5daea3ab66fec5bff2033f56ad9509e9e9591b78e68dae1ea76e810bff51469583aba9c8b691898e0";
-  sha512.source = "6c966d9c88e62d772b0a011acd77a81e73ea92130de23d0f676bdbdff1c65bb73f54e3abb03c744e6eb7a48c22f3bf0284c1a8ca1ab0538686586e737526156c";
+  sha512.run = "49a2a2a3cc34370fc8db7c08446b2d12cb7b8a9ce6913568d7588c051683e24b859af23c440df1c815ab1b65f5b5de32242df344dad8102eba7ec1383b02c112";
+  sha512.doc = "c37621f082498bfc4c2ed0717fbe18b56032a7d5faef1ca7a73c4fd22adcfb8f7e517ced768511636d4c8488932d3b33a96137837f34c79416b9c5d8d852456c";
+  sha512.source = "f0bb1bdb666c9afc19ea333ec3919716565be9454970e7a9e3930f503ea7e31ebc4273a16dff6fb2ae44701ccab1ffa2e9c285ac145ed32294b47b68fff91267";
   hasRunfiles = true;
-  version = "1.0d";
+  version = "1.0e";
 };
 "fontbook" = {
   revision = 23608;
@@ -14804,57 +15607,57 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "fontools" = {
-  revision = 53593;
-  sha512.run = "925615ad004844670af5fb6fa3e456dcf2e130b1e10cb64eb40967dc5d1af300f401c87e4f2bc44dc39af0fea0498fd6a6445181e7e21a63a007cf7d0a54e388";
-  sha512.doc = "a31f98f3791b464c1165f852000ee7408ca49e9a12efdf45c64d38b170e352508e0e5e4b3c9cc264799f184024e780fd968161bb03c520f39dd178256bb300f7";
+  revision = 58747;
+  sha512.run = "fed81ca7b52a51cd69be9ea8333ab7eb0210fab3517eb501d08ce933c7d926303a68b095654852de336b0fafa28a11b97517750418793dc61049c85ffb10ede0";
+  sha512.doc = "7ee681471cfddf5dfd919057df7016ad097876c92890e68c4e5a01751210997a747192ccb38682a0565070bd90c471c27a6710bf5a09c7a205475ec01ecd0dc9";
   hasRunfiles = true;
 };
 "fonts-churchslavonic" = {
-  revision = 43121;
+  revision = 56350;
   stripPrefix = 0;
-  sha512.run = "ab57be2bda808cce456fe2fe75d0c9f7560d1ed376631c907723d156360f8f20f734d4a2379273c8b8378a6cc124376574c162e3f95c4588c688dce34fb49029";
-  sha512.doc = "596ae1cb37b35ab59bc712653ec873250cded1968b3e4874295692812ad4001c6f352c396ef6d224571da630d730cbe41f98bc5a3a5374a2f9532f9424f7a0b9";
+  sha512.run = "308101704643f3a028b4d58cbfb021ec05640370542e83faa6c0070fcf60c168f789a3a7f5ea50e6d2568faa2660f224488f188ea6fa30f649e8e013ce7a4025";
+  sha512.doc = "856d1112c5929b361f5c3543455ac0f2ac1b8887bae8b7ce6e94540b1673ed815cb73aa08ab50617213c20bbc6fce86e84bf0a3bcb6521940c077e7c7a6a8469";
   hasRunfiles = true;
-  version = "1.1";
+  version = "2.2";
 };
 "fonts-tlwg" = {
-  revision = 49085;
+  revision = 54994;
   stripPrefix = 0;
-  sha512.run = "4d614651cab9a02809065b169f56685a7643a28d616f7b221dd6750c19bee5b4357ea003e4a0956fda585d73054288a2c7f60a8f1fa86650e2f175b08eaca35d";
-  sha512.doc = "a0245c7b68836a8c80830fae693016fafd3b218340bcdcf2926ba88dc845759ddd7d02c7b50b025b6411667ce35f562ee6dd7cd9f2d7e8e7f0d6570184242987";
-  sha512.source = "3fe3ffd8a171c886764bcc435e9e8b38ddcd888b993d4864591a2e0a05ed27efa9cf9a8aa5ff8ab900856285a3cba5fda7adf8d7a600476adc4c546b408df5cb";
+  sha512.run = "7239ecb9ffb0dea42d339b1f758c3c4c11f18b6850b5265296c04027922d5ec882d7ee2b6eaf4abb0d2e702ff349833adedc36dd18eac492e191f43da267fdc9";
+  sha512.doc = "a122c38181cb85964e6344c6652e20444e09943cab0d5a25580aaf4cb691cda33808972dbe3a7cfc7cb7970a7233741111fe52d93d51e3fe06615710be4089de";
+  sha512.source = "901b278e652010001b05d485b8a1e1d339c5f69b957965b3bb54791b2ea91d4db5e3ad93d168ae909dde39fe3569b82ba998b372021c66fbd4292bc468f43ddf";
   hasRunfiles = true;
-  version = "0.7.1";
+  version = "0.7.2";
 };
 "fontsetup" = {
-  revision = 53195;
+  revision = 57553;
   stripPrefix = 0;
-  sha512.run = "3affc864780a057995aaf3f2b4512a3577708433f92597f1c43f01761d65579f71559d39a14b29f12860c86cfeffa3aabb243f701d04a7d1b8901b72f409ecab";
-  sha512.doc = "7ef9b087ea0ff5bf62a553841c4e7ab976e08a0bf1b6d1b325c25e69d8ba0137d751d3f238e3b175060fd01f53b95b9bd775166a014567020ef63cc7c55101d8";
+  sha512.run = "4bde3744749a14553b1b8a0638584536dc4f7604435597e33ffaf519d136477e01eb410f30e89aa1630c701aaf39ac0ae696215ace362cff002e0d1e4c9b37f7";
+  sha512.doc = "a73455cdeb748fff1e6e7a1ef9ef711b5727799212da6e7be37630f6028a9ce10b13206d7e6f7c08529e90239832a72d054c0cb1d057d548ce898195d028d068";
   hasRunfiles = true;
-  version = "1.002";
+  version = "1.009";
 };
 "fontsize" = {
-  revision = 53874;
+  revision = 58508;
   stripPrefix = 0;
-  sha512.run = "e174166999dac65cdf95a0d1bb79c88858ad448608bdc1ccc3390f04d4b5e02a4e219539092aaeb4217a44a1d230d977a482b4b63c67e0c7582d75ac2c85e98c";
-  sha512.doc = "049f38a64e19dd9eaae0f2a26d7c6ce2fea6e7e7078ca63818beedd830c4f3e2e52e0ab4da1865e58752c73910c62da47c456345f7452d902eb2e9b778cc7086";
-  sha512.source = "c25db2e82383e0cec01cdc7ba3bdfefb3f2fac0cf44ce24e0f807d39dddbf316818b01f383dbfa574d5232d7ddbf56da567a76b3beb35c9a84f2388944af3923";
+  sha512.run = "844d0b06f0192a9d2a4e1334815f11581450ce29ae03d25955fe3421d6c3532fe0b53ba8496a4eb3c9c55bb5cea191f5ad59412ac37763738c0ddbf1b63a25e8";
+  sha512.doc = "5b7c2abc87e808ca33f5b1c6ff1abbb02a4e5b9987f6a44dbe5778ead77ac218def325ce9184b3d300524fe9d0d43c78112c92700b0dcd4a413cba489c6dd248";
+  sha512.source = "1084802e6bdfadff2cd373d69544bc906ef5f3f076e1cd8bffe9b85912fd1202b02a3e43eb0ed0115e1915f78d07d7f5847beabbfbe2cb4d31f17ae75cfb6179";
   hasRunfiles = true;
-  version = "0.1";
+  version = "0.8.1";
 };
 "fontspec" = {
-  revision = 53860;
+  revision = 56594;
   stripPrefix = 0;
+  deps."euenc" = tl."euenc";
   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 = "ef65e31a03f5bfe5dad80aa3bd33c5eca727e3200a9cee5bb199908accf429464efcf999680b02776f2ca49f8bf8175520fc91bf37eee03bd9e0fe87feadc941";
-  sha512.doc = "c3f3c52ba06d107913d2b47c9784b1807461051dfb9e3705efaa5ea3a400f98c975f200411599ea5755c46d9919e4f90721e8d7f8ae89e940866a2beb88b4424";
-  sha512.source = "ec740228a34972d328e854f45678dc421c92dffb105d743ffe8845b56ad581031a7f97b28c2703a9c7166fa4c166af45f9f2be69a7cec94d6f0bfd85123d453b";
+  deps."xunicode" = tl."xunicode";
+  sha512.run = "5c2013702cb65edbbd8d6e2c94eb8e181c7400f55593771d48e790cd32d8651e2ccb8fb41d89dffe7fb7ddd3219745102ec1934ad0dc5a24701f2c6a29107078";
+  sha512.doc = "bef134b11346e3d06e33fd9ff0c80fa6d904c8cd481d2c55702766cac2d9553298f05dee9e0b4b57238d1c9e140176fa26d29dcdaee990712fd4a3f0148b26fe";
+  sha512.source = "b64ffed6c06042ffab0faeba22b0df184b2fd0d27f8b312c65b33967021b860915d0c73f1ac9e3a9ac3125c5c7238038790b5d73127d02cb2ed51c64fdfaffab";
   hasRunfiles = true;
   version = "2.7i";
 };
@@ -14868,9 +15671,9 @@ tl: { # no indentation
   version = "1.6c";
 };
 "fontware" = {
-  revision = 50602;
-  sha512.run = "6f6a58e0c804ff0aac48be7646bf1ef9eb13028e6b2d25d69b4764280d71ba57e5e48eded61b4855794efddcc7f1520b24a52f09ed541a975c205b11b23abc49";
-  sha512.doc = "9ab42743fef5a65eaaa0ab186bdef895f8e7e3d95688fecdac8f7b59e064fc20f2b31bf5ef1b9b6676f3bf901867b06c25792ad07b2a13192e7290b5fbef33dd";
+  revision = 57972;
+  sha512.run = "3e0dbb5ec5b2c1a616afdb209c9733c65786d59c621e43095a21ca5c1478815937361314fcbb9a161eaec8abd5acc5a05b1107cdf5919d152d01f318789a41cb";
+  sha512.doc = "c76d1c81a72743c59ea37ef7bbd71ac7e49793cebf38eccd36c5dfeaf591ff7073beb4de8692fa5bd2ea453588582d50316a34818137e70673a701a7e4b4796d";
 };
 "fontwrap" = {
   revision = 15878;
@@ -14915,13 +15718,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "footnotehyper" = {
-  revision = 52676;
+  revision = 57618;
   stripPrefix = 0;
-  sha512.run = "593e4563dd9b2c209088f46e8f33f283d17d493e9aaca5ed1bd1cf0738b5761417e7edc4936b16401bb48a6f17468872139ce3010185646060f83ec35fcd1cc0";
-  sha512.doc = "12adb12da81ff88cb6b25d98ef871eabfcd01e38fc0adc91c122168a99c5e3e42ce6932715eb976b685853d559e4099725f543e1b04e8928b98526b5c684f588";
-  sha512.source = "a1bbee1e1c3df787236ce32535a93f1d2bff2a850887f34c0a62f2f48b11ac9e7d99a90d9c4a3851359ce48bbc5be909200aa2ad7632c6a9f35ee6e1ea3f843c";
+  sha512.run = "bac7b7ce8ec3f74d85e0182f1d65fd0c365c16426fcc725407e1d8146ebc15422fe2e10f20570e68802ae2ac405aecf55ec3dff45e7e6c1bca7b57059e0dd6d2";
+  sha512.doc = "6fb3d09ca9c5dfaddedfa2c332634a0b846ffd95f67c1d00346f2d2dab60354a8678315f8987bfd13427909f0d489653f465e03252e84eac13048dbbbde9e6b7";
+  sha512.source = "f881ccb20f056ce3bec35061105f93e520a32565c26a5a8a89623ed5c644d6a6510683e4fb099a32492530f2751f043f65ca29c768b0eb0fae959872ac74b820";
   hasRunfiles = true;
-  version = "1.1a";
+  version = "1.1d";
 };
 "footnoterange" = {
   revision = 52910;
@@ -14959,20 +15762,26 @@ tl: { # no indentation
   version = "2.7";
 };
 "forest" = {
-  revision = 44797;
+  revision = 57398;
   stripPrefix = 0;
   deps."elocalloc" = tl."elocalloc";
-  sha512.run = "84edfdecfe017508c496ead33102977f2548b1e664ed6fa5108ea54d738e5bd201716fc2185d917fa5ef43b727130ca46061228cb510f5f8f19d25d677dd689f";
-  sha512.doc = "ffe229aafaf7fc3a2c4e48a4e549938bc80b2ef4e40e2f22ccf3f62e72b8a1eb1a88972b58ada2490efb61171d14a7d5d1e6f940754c39e3b950aa889d585ffa";
-  sha512.source = "37269033ab2626581dfd8a93d739ebd74eabad9ab2b6dac1cceee33c84583241e2e5a660703befcc85c310233947222e1990d2fef02ee7f3c0ae50d2705b169e";
+  deps."environ" = tl."environ";
+  deps."etoolbox" = tl."etoolbox";
+  deps."inlinedef" = tl."inlinedef";
+  deps."l3packages" = tl."l3packages";
+  deps."pgf" = tl."pgf";
+  deps."pgfopts" = tl."pgfopts";
+  sha512.run = "edc3341b84e7e89fba3bb76004562c0bc889f944ed33474ba9cf5ed5e63a690202e851a30f44158caa8351b874b8e91659bd91c50d59ec43de9460869e4213f1";
+  sha512.doc = "fdaec77023176fc2f7510a9e3b4dcc587898e1f96886340222f932c0d93b1002ad35fba8a38a036f713e41814f3dc6b3f75a5657ae485b15ffea43089895bcae";
+  sha512.source = "45f912d17d29568e6ee267814d63bc14c20bb0d91c62b39c21301dd611c50db3b5f7de5f16b519da0f2b4d15609727144c34b16a620abb85114a42344cdaf24f";
   hasRunfiles = true;
   version = "2.1.5";
 };
 "forest-quickstart" = {
-  revision = 42503;
+  revision = 55688;
   stripPrefix = 0;
-  sha512.run = "14c3512b55e7653d26571a73216cd1eb5bc4d7ec8b74ae71475c37372552fb309c148e91d4e973bd60710f2a43af9a8ddb6ad99087fd2a9b76da896e521eadbe";
-  sha512.doc = "c53a365ccb1a4059c9440b8f23b3ec0bbafcbed14f871c92b99abaf91adc4bb42ac1d3b784cf545a6352298bded8b4cc7f6b2e114625335af5d9d003fcf922ba";
+  sha512.run = "52e77fa1a6aca02eb15838d7c04e37744cb4f37f0bb078fa571c1309244fc329d92b553f3e7c62f574561929b5e4964b71cd2cca3d17d4f9d13f9bdb9b0ab8b5";
+  sha512.doc = "974a0d0e5a5e7e640e4e18cc5eb59b5a10efa7c5ab4f81e2915e9bbea30bcd68323cf95c62891ce1711d822336e5ee054735761a474d186e3c9f11fd4dcf6f9a";
 };
 "forloop" = {
   revision = 15878;
@@ -14984,12 +15793,12 @@ tl: { # no indentation
   version = "3.0";
 };
 "formation-latex-ul" = {
-  revision = 50205;
+  revision = 56714;
   stripPrefix = 0;
-  sha512.run = "d705a402a4ba61f232e559e6a610646180f22f47df251d2731cf8f62a9edd26d60be53ad969ae0bb8d02a767b302df18b88c048ed1536b3677b7199d347e35d8";
-  sha512.doc = "5bf8c412d061a5ce30ea3af713af400eded6a0f75ee019fc9f6e40623c3203839f718eb4b630282ec700871cf4b0cfe68ff38d43cb50f53560184d7d44d528e2";
-  sha512.source = "51a77394f3471dd2fe6b29717c89cc8d2f6f0a126ad84d5973bb1d3a8600539148be0450b1e5f5cde7070224ea02b09ed9b871f743ec82c78640b9ab54ae602d";
-  version = "2019.03";
+  sha512.run = "30e38c93cf692aea977479159780ffa797535c938fbb0551c86979f61f459d571cf78526a5ddd435b22e850e45fd6fb33ccd6a8308a170bff034ab3d29c63318";
+  sha512.doc = "3f8744fb5c3554a256a3585cfc8f0339bbe91ff94b959fc02f2afd25466333ca54003b1183ba7e770f49e296807367ba33f809424921fd437f9773cc5aaeaf6c";
+  sha512.source = "52d36951555b74a8091efe64f5bb6790917fc3346a79d660f1f7c45793512efc86c935d13bcc88f0dae714223ea5af3a02b32b062880f117009bb99727fd8dbf";
+  version = "2020.10";
 };
 "formlett" = {
   revision = 21480;
@@ -15018,10 +15827,10 @@ tl: { # no indentation
   version = "1.0a";
 };
 "forum" = {
-  revision = 53179;
+  revision = 56025;
   stripPrefix = 0;
-  sha512.run = "05fa8a77cc9bc2ea5ca7dd5962d56a4885ccc3d86f5d1af44d80231a7a803bb7818b4fa1ef1159ac56a22ced86fbbf6b02f4b20acafca4c1f7af36f7868ce8a9";
-  sha512.doc = "0bb1d74e658088d53f8adc83c4e8efa37469671860993512996631b18a99188f671a28bb4cd6ecfdc37b6e4e7f09118289f2ef83bdbcb726cf8a6055f3386496";
+  sha512.run = "fafb6f261a58546c717cd37dd0d5bc3f22b4342d28a62f6cb5dff8132993dc0a4081681e1ad2acdd96421b8d758b7079028b50507586e66dbd80fa6adb0cb180";
+  sha512.doc = "b4b86a30087dfb1d8a3fb2edc9535926717e07ce619ab7ecfd709b93abb1ed4535893bbc6a0b40c9dc93f16f5c556639f8875bc1ae8183e38715aa383efd6a29";
   hasRunfiles = true;
 };
 "fouridx" = {
@@ -15034,12 +15843,12 @@ tl: { # no indentation
   version = "2.00";
 };
 "fourier" = {
-  revision = 53401;
+  revision = 54090;
   stripPrefix = 0;
-  sha512.run = "25578e0293ca10081e8266a4984280c8af9a33ada6102e8a5369e1207cb213e132be5b93ddfbc19c0e8f2d1117eb84311521dfc65e99a86137e0e545d773d782";
-  sha512.doc = "c5b0ee9b007607345c8b6d50087fa0ffca8ca5d472c4ee513ea6219e53312305cf8770079facc38adf628b9f344a1a23eb041cf437b1478324bf42102fd9b78c";
+  sha512.run = "4e4e5bad7ce25c67ec925145531e1a27344735e32e2c7053fa73ddd1559ad3d2f5fce00c92c5dc09731a90666fb5c80aa9702adc7bc4469239ca5ae62c23644c";
+  sha512.doc = "59d1d7ebe7e44c1b5409a9b49e83845aeadcbcbecbf30176b3bc4156f7f611878fd3ee17405df48d3b4e41dd8c95d6dcc24080f15801959c1b2ae83a7a2311ae";
   hasRunfiles = true;
-  version = "2.1";
+  version = "2.2";
 };
 "fouriernc" = {
   revision = 29646;
@@ -15057,11 +15866,11 @@ tl: { # no indentation
   version = "2.1d";
 };
 "fpl" = {
-  revision = 49603;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "5bd87e686f418d0ef76ca1868b5034ebf5239665dfa52eff5d9e559a733420891ec2f17d7e08b527a422b8c4cf6ebaaa80753abace423759fa06beecef31228e";
-  sha512.doc = "b101782fdbe6896cc49fd81b6ec213d5b9951d3e80de22d7797bbb34ee4ae18d3ad6650fb05e57983cd665d09d23f3d7efeb4dd1b14c294373f9d0df95e66162";
-  sha512.source = "7c98491db4a2844340c33f9f23f90a50c7a41404c010aab8ecf544c504787758ba86265da3f988453c3ddc3972df8dda55091b3ff5751d2c60ff4c5bab24a059";
+  sha512.run = "9c8ca7ebe7124afec8ba3f4ba4fc27c0a54ab460e53afeab599dcc619f81e5f8ad744a3cd68df33cb6ce456d0db0fafe7ee04d585dbc3fc123e5758a1242cef7";
+  sha512.doc = "7b951310a10295bb453eed81ae668f042262094971dcd48c83ab721220094b3a62b79b5090002cc8a7a1fa12b4e75157fd8ead7c4deed8fa1d3629cc6746e8d8";
+  sha512.source = "64da822f5b40bb6abfa33d19bec50d8e002452a710d0d6ba3c5e66097e9a33f6718524471fdc716ecb951fcb2ad82659288a08ef85b72229ba40297fc33f7727";
   hasRunfiles = true;
   version = "1.003";
 };
@@ -15135,13 +15944,22 @@ tl: { # no indentation
   version = "1.3";
 };
 "frenchmath" = {
-  revision = 51192;
+  revision = 56847;
   stripPrefix = 0;
-  sha512.run = "1102ab998250a36d6d93aac7c673628eacf8b1abd203d91989922599ec6dae58439ec2700e40eade5b0ee1666a68a30d94f89d3a225082a6273ccd63f61fb586";
-  sha512.doc = "622cbf8f1149c53f240036e2cf2d6245d6870ea24f9af6e1883e7fed2f1001f38227176156e8a33c9d9c07414b1accf1a924fbf7248e91903d764fb85d277bdb";
-  sha512.source = "f41712d3bd58290fbe205001e9fb531a147debea4b93aeac3b9831cb3bc8edfc7d1364bee575c750aacfe1db8632c357a36fc5afb003a7c895108146a1ab3b7e";
+  sha512.run = "9f05e3391576e8f37d00852a4d5c9c961369f0fa838d6942594e8b729391d41080d1bca55b258c24ed784788f5b52bb5f1ad4e0d33303676a2811c3804740d09";
+  sha512.doc = "d1e39e879de7f2cc5307970b7bf2c5535aeafc67e4d79b01d217e33f32d75c482716b07539c7f58981cb581fda61d5310f9f4d23ce9c96e7f1d151cd91a6dc7e";
+  sha512.source = "d2af7f5fd3f45964d851c038b533b99e6c2a813fa382a9b34333246b044c9b18db6252ebc8c997527211ddc8ce20ec3a816d11b49e1a3e185d7356dd141967fd";
   hasRunfiles = true;
-  version = "1.4";
+  version = "1.5";
+};
+"frimurer" = {
+  revision = 56704;
+  stripPrefix = 0;
+  sha512.run = "81057096f64d8ed53fb8afb9bd72eac6538f5babdcc054f422c7d6d0fa73b88459d250ed56b1666ec8d6c936b52102a9a1988d04ccc2efe76761e945d9027145";
+  sha512.doc = "d2c8dd345fed5935fe2e329ebfe7c2e9a5c836f3af5d52605e35ce32ebf51cee529c182505db8eaec7772476f758bc5905a8b57cad5ebd162732801c2cf6d352";
+  sha512.source = "a0fc0076cb4beaf081f21ca474ee287cfcfac07c889907d690093ff7b188214875766746bfade8f7de9182e5c32c7bdf912b71336f078bee120b042615056e46";
+  hasRunfiles = true;
+  version = "1";
 };
 "frletter" = {
   revision = 15878;
@@ -15159,6 +15977,23 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.4a";
 };
+"froufrou" = {
+  revision = 57248;
+  stripPrefix = 0;
+  sha512.run = "62879b91bec8db0021f41d8071ba87bf924445aae702eac318e215cad1aa7b612e17fcb52952184264cb37ca33283d1c7430afaa0c73ad8bacbdf4cb3347a8f2";
+  sha512.doc = "1d1c4c1fa5f7ce6d88418c89f2cddee2fa520830f32d246814c5a26f6f2c5b675d80082b0d0075ee3a85d0a529974bb8617490f65b3294871e3bf9708a3ed345";
+  sha512.source = "84f8126bb7a5bb65f69bf656c9009b57595e057f9293f0c14e90c49c164181d0218ac9f2e307092a79094662aee10eb50168a2bbbb2cfe9e4ded602c36e8d1ec";
+  hasRunfiles = true;
+  version = "1.2";
+};
+"frpseudocode" = {
+  revision = 56088;
+  stripPrefix = 0;
+  sha512.run = "f8807f696b69f5ad8b08ee24c210c084e11652d8f00b996e48f5e08c894e991b0f2cb288ac72e6b45208add3185a3e14fcfb432d8b2d2844359f54811859cb07";
+  sha512.doc = "6c22157462f55d2c19a8da146558556eef0e28ed7f79c5231b282ad218b041d1d850ffd24c8f06c914ae5d9efd04d442061598f6f427ffe9393cb2ff1a4324ed";
+  hasRunfiles = true;
+  version = "0.3.0";
+};
 "ftc-notebook" = {
   revision = 50043;
   stripPrefix = 0;
@@ -15294,20 +16129,20 @@ tl: { # no indentation
   version = "1.0";
 };
 "gammas" = {
-  revision = 50012;
+  revision = 56403;
   stripPrefix = 0;
-  sha512.run = "96be5ba2abc71f93d044d762403f294082e9afd10ff4f159713ae906233d1581ba408205746f968e10f84ce4e79e633a4f203ec4a8dade3f9738d0f277cb703d";
-  sha512.doc = "0c1739b475a45149deb78daca921ff8cdba4555d466fcf26ee0098632b835f650d5bc5e9855aba889a0caaa2a64e08d7afe1021d6171984bde3161c3543fe7f9";
+  sha512.run = "8ecc1d5209ee6492e032b30e217dbbd0ae4c1ad9ab5a42e7e042eee63809aa257c8cc5d720f54be5553c8999f78334b8057bdac1134d4788144a3cafade7154e";
+  sha512.doc = "62ec08047df846d2e32be9396356fdbdb9eb9c1867079a891bececc1d56275666127d997ddd4ed2c2f73423dc4a2e051586a1b06b516fb77372b04c60a4ca342";
   hasRunfiles = true;
-  version = "1.0";
+  version = "1.1";
 };
 "garamond-libre" = {
-  revision = 51703;
+  revision = 55166;
   stripPrefix = 0;
-  sha512.run = "3ef5b7bc8255319a25245616f1750cb09422a9dc0184f0e7a13d481e7124278e093dcc2962f9d65a621bd1ccf54ac82f46d74c5a97b5a2117f8e23c7a39fe587";
-  sha512.doc = "d62d901e83e943653058d64c20135e460d5c8418665e5418439eaeaf662666011e5563fcea1bf3e68980bfde9a9572ad92a4a60d6755acd8737fb10932483d51";
+  sha512.run = "501f42272f35f6b454f9cdecec28b67ed7689a0a9d3b3a019b418ffbb9a116c1bba71bf1da971d6f39744ecbeebeec29e6a9546e11d672176a715570b3667aea";
+  sha512.doc = "2a88d41b8c52af7f8b1e143f31a87fd392b057846e390f77a3b5c471c287d57dd35e0fe544d00e6e5513decd7a68b2b2c1a6049b02f04fe25ea2d2825bf13a1a";
   hasRunfiles = true;
-  version = "1.1";
+  version = "1.4";
 };
 "garamond-math" = {
   revision = 52820;
@@ -15332,12 +16167,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "gastex" = {
-  revision = 15878;
+  revision = 58505;
   stripPrefix = 0;
-  sha512.run = "b6e90db05d820b5e8001fb5d7168449d1fb6ed0679d158850ab4e5ad1166ebbe05680d190bcaf3c2808e2fffa6b3ddb2a824f223855182960cf849370493a1ba";
-  sha512.doc = "2890b569863b2d65a2df850e0e885e15754ba4b483fd559c0f914fd5ef2516a4b33944d365fd58a381a1992a22bddf69166cec0bf2b1072c9aed7829fa21903b";
+  sha512.run = "7f75503d009584119967528fabbd72a8f0b0430cbe67fcdf4ec0e0bd5dbf63279e10ef32c897eab9408d518a1c1d1d01d3a428e9b7f72cc4d7387e3b692a6caa";
+  sha512.doc = "86f3ee5200e41def7d13df25d175c955c2df562652c4783c8083249eb924c01556cd402bf2f4cf44d02f94cc280e1643c2ad2261bbd191678e3c9039430d1c58";
   hasRunfiles = true;
-  version = "2.8";
+  version = "3.0";
 };
 "gatech-thesis" = {
   revision = 19886;
@@ -15379,13 +16214,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "gbt7714" = {
-  revision = 52870;
+  revision = 57157;
   stripPrefix = 0;
-  sha512.run = "91bf06c6bfb5ce2a5a9ea1fc729e3438a385d2b3071adff342816f5c914e6047d80393778b1919f21da51293a86960d5b00d08d73a4bbbe499142d7700936606";
-  sha512.doc = "6eb4e9c23987bfd19fa18cbf89a5c21f0893e5d7d2dc704e9cff435f1de9497083ac54f886a3c87c40db95db22f607532e44b2b903e51f0a3251f1f143242633";
-  sha512.source = "2dc153cfe75d6ca026348df3dc796078faafab54ae2f9563735ea371892ec58d077519712ca7c5d90a9f41886ea932da91d2942b6dca4f89bc2c7d50f1c2ebd7";
+  sha512.run = "72021c4eb7e1ee1b9b293801988df67c0e62fb5f46c7036c4dc75357a95a80d040782c4a71e98690858854d572351445fe6c06269ad8f926d62fd668095815a2";
+  sha512.doc = "c41fbed87dcb702241f8f8c3004854d725083f9e0dd2b3f1bb92a70210539617b728be086c2a7e823a8be0fc9b906cf965b9202fc5c12f4f05e87d73504444fb";
+  sha512.source = "7e7e48208197fe92b939f569cbd0aaa96ba1b6b35821dece635c36572f3309f2af00d86ee70a6db35aa7ed261a4ca446dd857fdc1026bf18bf4c6adeb110ea68";
   hasRunfiles = true;
-  version = "1.1.2";
+  version = "2.1";
 };
 "gcard" = {
   revision = 15878;
@@ -15411,6 +16246,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.0.1";
 };
+"gckanbun" = {
+  revision = 58754;
+  stripPrefix = 0;
+  sha512.run = "e3847d0d2d7273f0abf73d3d07524eb07358a7a61f42e9d72516bc20c4521916f1d68d1cf22cd266f7eb9e20b6687e8ff3cb12ef6524b02e713d1b1e653887cb";
+  sha512.doc = "201dcf0ecf62b39ca8249f6fc9dcdaf1716c32102d0115924a37c4e0fb588af3d86130409c8f928a762a3a423273711136e9c2fe3fe33ad708a11d37a292b64f";
+  hasRunfiles = true;
+  version = "1.2";
+};
 "gender" = {
   revision = 36464;
   stripPrefix = 0;
@@ -15436,18 +16279,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "genealogytree" = {
-  revision = 50872;
+  revision = 55978;
   stripPrefix = 0;
-  sha512.run = "295a763f682dc1acb025856df4de0474d3893d87cf0e530a2b3f72ef7a37dae87d34c97abbf40898f920f188f7cfb7366b654004b7c577b409ff14caf25c1072";
-  sha512.doc = "9ef261874b54e2d5d092b2f362ba0e5ed6b1932f433290ebe6fda61cb87aaa3b6ba09708df31d6b10c1263288fb62ef79878ff0dbfbe104d83d3b4559292b6f5";
-  hasRunfiles = true;
-  version = "1.32";
-};
-"genmisc" = {
-  revision = 45851;
-  stripPrefix = 0;
-  sha512.run = "3e41f140088d5340e2ee6dd022eedf2dd9d9e6424d5a2467a674334b4afa079d91039e1eb018c4e95bea47d61dc32350a3b30897ff9e4c70cf9eba36a29f07ca";
+  sha512.run = "80ff65cb67a5d431e316b6cb52d001ba63b346f117251a06c560c506f8adfc81644cc36d113b0a612acbc9b78c8627ead8c75a449486982ec786accaa79d2af5";
+  sha512.doc = "708639b248db280a26291d24594c70fdbefb8a4f6cb581ab5e95e1d2e1f122f29a5412ce876604afed42c881d02c4baaaae73aade99b246160895087394b7906";
   hasRunfiles = true;
+  version = "2.01";
 };
 "genmpage" = {
   revision = 15878;
@@ -15459,11 +16296,11 @@ tl: { # no indentation
   version = "0.3.1";
 };
 "gentium-tug" = {
-  revision = 51613;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "b95a521b417f21379e61b7afec5462f06e3e20265f9566d40a19fd6ba430b02c6a3994a2861ca1f885612bfab0ac174ac89fb2221734e33aaf267c2a532e56a5";
-  sha512.doc = "074d5a42ddc427f240a956aca94d95b065813206b2ba66778de032665b924d02065cefa17dce14671b31bb8e455215bc34cdae29ee09a2db8b6e330fad3e7e1a";
-  sha512.source = "0c660e919f9482d16ef6ec5fcc91a894b2425a250951db1f688f6d2d13ccab5463225cce652b35f0f7e3781e046fe42f7dfdd285eb85deafaf420e0100dbb01c";
+  sha512.run = "4cc398baae4fd17854f92b2c995b77316111018d3e7c86c89cbc966febd26b329024227d295be440019fab6d4f6008dd2110a3005d1a86d88113e104b9f2c9e8";
+  sha512.doc = "2bb2267aa54d027fc83f492125943529497c3c611e187eb12d099d46f96fe5d48a56837332eec1c7ffde97007f6f311057aadf4e1ddc1862a490912b7a1c434b";
+  sha512.source = "ff084fc9f2644ac49e9267c1f3a87c09445399db4e3e8633e25bee5b54b15a091053a0754ecabb2f67a0e85a07060ab81cdf8353adc24dc7f0087ed104bd8d92";
   hasRunfiles = true;
   version = "1.1.1";
 };
@@ -15474,21 +16311,20 @@ tl: { # no indentation
   sha512.doc = "fe296c5bc38a1e6d13d2b46dc8081a6658764f7017d0831cfd46dd86082371d6ae095ec3b52b3aaaacc0a57cbcee066b94644a5746391fae4129eebaa246e146";
 };
 "gentombow" = {
-  revision = 51697;
+  revision = 56665;
   stripPrefix = 0;
-  sha512.run = "4643d4146fe341552af7b3600b61b7c852427fca554b9c7fd4eddd3b1645ec7a686a799fa2371e0a9b1cad02ab5aa965a690daed477ea8c14711343e8c274992";
-  sha512.doc = "0de50b7a73f752f36bca2ae985a53b1203e9bfc733e2cc3bb5e7ed9afbab0bc59b91cba95a315d8f41a4097402ac9c84a5fa86bbbffaf003fd1bb7da643af54e";
-  sha512.source = "d73b8bcaa902875be9fbc2620e69a85deb226337b9c330a1e083bc6b73690db214a8a426d243b41b50ac708911559ad8287f7842cd449039b98510c04b75bec1";
+  sha512.run = "e97b138d5359c3fa0635bf56001ecc7c6a5afb2ab2a01fd8817cbd956adce97bee67632f4e3ae40d56e5d2ce06bc07ab33b52bbe3978f14bf4957d2647781813";
+  sha512.doc = "89912adef5b6572945a81835b1dfd0648699c03e81c6f4e06309dbb8230f536f5c93bcd46a3acb508ca92398df07cdf71e8f5fa7a2f889220a03b27ad78ac110";
   hasRunfiles = true;
 };
 "geometry" = {
-  revision = 53299;
+  revision = 54080;
   stripPrefix = 0;
   deps."graphics" = tl."graphics";
   deps."iftex" = tl."iftex";
-  sha512.run = "991f8b0da99e4d7ecd2966cbc1e8a9ec3ce085ba18030492fdba5068111816e077f284ba782160265ef3f7f0fe436242a5b31f411bdf8db198f15af9d09c3a6a";
-  sha512.doc = "046d18d86f13dac1ddf0171bd54bb38d09e5537a202a32de52e801816ed72438809b8f2e82f9d00c0af887e5373f23c2593e0aeb834f04b1e19c849435a913c7";
-  sha512.source = "5296e913b7ee92a1dd26798a1082ee4c01f08a1a75fa389a60505854c556be6b7acf34fbbde832465cb1312bf1cb9428b2d13f8ff4cb3f0ade68a1b4f371d646";
+  sha512.run = "ca5393e23639894401094084c3c2e30acf12491dcbd3968a4af79037b6dfb6b86f07acfec6886d89a261991cbdebdc846d9804f125aecd4cd77c3e71968bcfe4";
+  sha512.doc = "4bd5ec66f725516ef4d5d3e83e3b75a9b4408fe947161e3d885b929b34c4b60437c3fcd32472486aec12c9665b5c0d71a22896055a613c641bda4c4aa987f76f";
+  sha512.source = "03c27863d6bded295176550743bbe7cbe6aea2b8f1365f7d0cadabd6d29b699efab98b98d2ea5f8baeaf19963a681b9852b2bd01769b326942c781fd0644644e";
   hasRunfiles = true;
   version = "5.9";
 };
@@ -15607,10 +16443,10 @@ tl: { # no indentation
   version = "1.0";
 };
 "gfsdidot" = {
-  revision = 46310;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "9e6ea7c3d5b7ecff95270b17879297abcccb62df11ab7eba54f02e7fc2c732d1be39b052e3b4b6eff9990ad010e46f73b40b4134b4e024f7d914a1bde29b4a7e";
-  sha512.doc = "93bf3a4fbff9e0c936877b135a487739a7f48c2797cce9d27c2a9f173fd290c2da5a3a3f30ca883ea057ec47a4695d54f5e85ae01f13af40e1dfd3210cc7c273";
+  sha512.run = "1f85b632dd3ff67144a83f9804d4408a4a39647303ede905d5ebd5386ac519ed73ed65cab6cd07242c72fdbea94650eaf25b6b4e7a09aef1c71be62f399c4248";
+  sha512.doc = "7ba7a00cf878c99c8daf855c0124d4027d7404739515079b2c0b2d7e38abb508a1b7e05beb2ee5036bf25d2b2a5c2377e4f397042b6bdf22376ab4a9a5e115c5";
   hasRunfiles = true;
 };
 "gfsdidotclassic" = {
@@ -15622,10 +16458,10 @@ tl: { # no indentation
   version = "001.001";
 };
 "gfsneohellenic" = {
-  revision = 31979;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "c8ec8f9fba5d653e5497a9812c5978a21cdb5b59f6bb0f45441c761d2afeff1c055c48f1b07c4f56c6ba6a6adb2f99525d838fc7850c7c97bb3f3e0f67f50dbe";
-  sha512.doc = "581bd169fc4f6ed92453e2e8f50ee0efa4d3ea282b710c340d1f05f8ccd1e117721ef4b9e9fd6553912ca60d8ee63eccadeac710186cfae62a39842d31b5b766";
+  sha512.run = "bd8fbea65fafc3c09fd1a53ffd7de48e93f160a49bba902efe155913bbda5fd2bf38e0d4d2242ec8152dc869959128cfdad49ded95d196aed1c39fbaad62c527";
+  sha512.doc = "d10d56caab42b2bd25f246726616e359ee10f934469e59a818753d1e7c4d876018cfdb86f466c49f58122fe9d7e67ca6b811b25b5e2d94b120f296ce87a2a48c";
   hasRunfiles = true;
 };
 "gfsneohellenicmath" = {
@@ -15684,11 +16520,11 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "gincltex" = {
-  revision = 23835;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "c77fd5030e626027819396e94d07c1aebaf05a1ef6a02025a6a0f4140d22fa8d0a8695e440ab72eb0a042ef5f33430ef60a47706658134907725c49969841171";
-  sha512.doc = "2f3a0ef1eb5d1b9f5a819e99354572f34b6fcb7daff3ae02f277d9280e202d1d4d1a54b9c033860da1ef3ff302229bf2d1aabbe1e6acff05589d3daa32f5c87d";
-  sha512.source = "ef3af40826e339dd7ed92d0f93e16029bff275a32e2c2cf64fbc1dd48a243e9a5efcb6cebc9bce237465c62a319386dfd94706238958381667195cf86face04f";
+  sha512.run = "465fa04e22924d68b3e92dbb0c8dc5f8f159ae88881127055d94e21a46ad8b8e65b08ee4cc872919188db8255c8ea095c32c5539997007873fcff16503029c16";
+  sha512.doc = "e44368814c57ae40fff7976c70cb160e43e608051ab2d5c46363cd82ea08c3c12a33fb6b2ddcf7f74816c5ca60284c6880c9d7340aa8a8afea77ef4d9cee689e";
+  sha512.source = "9c9eda687dfd61585ddfa1a8680353cd863a1138c3fe0f1cd86f99fb34fc3c5b2ecb8a3e3278e6799ab0a5447e1d59a925d31bea5fa34913c1abd04af18823c8";
   hasRunfiles = true;
   version = "0.3";
 };
@@ -15709,6 +16545,13 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.0";
 };
+"git-latexdiff" = {
+  revision = 54732;
+  sha512.run = "74077b3dd1a91a734af6d668b309f804dc58a282393d88d8d5d74a5e6fc73c197e49b462369f829cc7151e20aaf8085c0587428ed61ce7957a1ef173d92c5481";
+  sha512.doc = "bfda354f808c1f94dfac207d1526409a160b89292e44541930dac34383e3ffec9ce63d04db041ea5ac529e1e01fdc80c4c64cd43e8cdc14aac974094732d6fe8";
+  hasRunfiles = true;
+  version = "1.6.0";
+};
 "gitfile-info" = {
   revision = 51928;
   stripPrefix = 0;
@@ -15743,12 +16586,12 @@ tl: { # no indentation
   version = "0.0.beta";
 };
 "gitver" = {
-  revision = 49980;
+  revision = 56810;
   stripPrefix = 0;
-  sha512.run = "ccb08db2f49ab23e832e12dcec8b2754b4a1c916f2b0b5582723ef6080dd93a922111f6b5b514f1f53ca684e141c89f0e1d95d0b391adee857211f0e7bd243e9";
-  sha512.doc = "92bc02edf0ba8a6877444b418cb15a9260fb5b26fd95bcc044665b306edcc1c5f5b12e36695cd02ad9260d7c996195e3beff69843ab7ef9a9272bafa2b1f2419";
+  sha512.run = "de9440bf5a42e65d9bcea03a0ae02a77499540ed5a3f35f48f55cbf8973685c08413e8770e5aef430dedeb24ac881e15bcf72f06c689909a3988b6c3a2ce6054";
+  sha512.doc = "0661e3b6e92fc80e638966e7df452693cf3a3062f9b75016d636eed986dfa265cc8b240ec8d004a604c08e2fd8fe0d75eeada9c4ce554f1dc443e5ad4a0de296";
   hasRunfiles = true;
-  version = "1.0";
+  version = "1.3";
 };
 "globalvals" = {
   revision = 49962;
@@ -15759,12 +16602,12 @@ tl: { # no indentation
   version = "1.1";
 };
 "glosmathtools" = {
-  revision = 51809;
+  revision = 55920;
   stripPrefix = 0;
-  sha512.run = "9587fecefba724acf5db13a1e915d1adb8494536be2cd72b1d20d9a52b065e4efc91ac4d40da9a16bff1fac0271c0e982c8b975ed0606bcc188cbba46522ff89";
-  sha512.doc = "f000a1389a70239256c61ce72865f1b606f11802f6ad9761c10786d19414f0e59de38dcf0f1414b0b05fef3f49dbc4c0c345b2398b4066e6accd62a746fafd7e";
+  sha512.run = "38d5eb1cc7337e81a1d824fcd3d6820928e06b421e1bd1141bc4cd859a32aaa1a10062e6a7a2512687245996c8848b42720085271c1cf6a24957bbe96ff824e9";
+  sha512.doc = "511c901bf123984727ccf8bc4e2449738a66fe866418f23b923391d30f6ad46ac260b5684b73b89616c07cff9bec0475e3553a70ba608c58873751d9a6dcbed2";
   hasRunfiles = true;
-  version = "0.5.1";
+  version = "1.0.0";
 };
 "gloss" = {
   revision = 15878;
@@ -15783,12 +16626,12 @@ tl: { # no indentation
   version = "0.1";
 };
 "glossaries" = {
-  revision = 53777;
-  sha512.run = "7ad38fe17be336d0c849bdd149ab67ac3f519fe34000257df52a3f7b6c93a048dd45c1dc96bc674bcd461301fe51a0adc6e5d3fb6ed3395543911f5370942156";
-  sha512.doc = "b401f5bb665569d21c1eb47282ae24ba987fe1f042540f98cacbea4cc3619df4da4c63072a0ca8a38c34cc0ab236b8c87c47ebe5982882122b229e3c8a545489";
-  sha512.source = "cb72f70e9d3cf90826798ac736cf72612b07d80698b5e3d23fb3006e1a663f0f0b47adfa3e74e80a9232a8d3a97de29a03807f4b883b8c8055cfc73eda227959";
+  revision = 54402;
+  sha512.run = "e900f8bc7b9f04088a3b2cbd3ff409603babaf232f09d6c75e85e3050ab0bd98b90c6e04e01aebb183e9fcbc4865c34568a7392d8b46ab318b506d10f1972d99";
+  sha512.doc = "7c364a8a843d32af396b76a14e3abb97a82638a41538653aac8046273b9d669bc1ada0744435f918eb0c169852fa01025e4f4257783b0101a60231de708fe82b";
+  sha512.source = "3bc7eebf8a0861b6236cca948f053d90d550292a7ec9b1694325ffee594a166dca180b4153ba86c711ebf5ed5e81be8e52432b3a1229a3b4d477b6722c1e3e56";
   hasRunfiles = true;
-  version = "4.45";
+  version = "4.46";
 };
 "glossaries-danish" = {
   revision = 35665;
@@ -15827,20 +16670,20 @@ tl: { # no indentation
   version = "1.0";
 };
 "glossaries-extra" = {
-  revision = 53961;
+  revision = 54688;
   stripPrefix = 0;
-  sha512.run = "0ceb8bf5de2ce8b5875abed3693e77f748eaa391c91c97dfc178c2ff2140865e75e218e021b6baa48d3d4125ec108265e8710affea8b0bf6db50c79771fc5abb";
-  sha512.doc = "5569cda0e9fed35bcb534a8215d1909968786d4ff5966d04b629a2c576b93c28a211c8c103e1ee9082d9ffd22699989ca43a3aae975c0c21f9d734e5f8b40f06";
-  sha512.source = "c75916555ebf52a3dfca621cb39ad3fc56367859d656510687c390a954136d6679363d9df00e3b2ffaa167e9c4b13741dc25fbbb0f5a1c6b6d1b0cb5ced749e0";
+  sha512.run = "6604e11d960693f3a4437a5eae8f4e508057c22bec61be620971f3fa88563fd8630d0b3cedd9cb259e0e024b0813db694bfe23d6fdbbfeed9e6543919f73b20b";
+  sha512.doc = "e8fb201968efd7701260f9b5fefab56930441b4240aed8bd90128c4dcef85cdd8d62372b579797a9450b56ceb37e7ee2793049f8098229f68b3d4915cca2ff3a";
+  sha512.source = "9810a3934dfdd96bb0ab857ad3e27b9b36b488240f7fb86cdff303f26288a8e3c008aa5eca3af2402660040d6543f33023a47ed8a541290eb553a8adc5305e11";
   hasRunfiles = true;
-  version = "1.43";
+  version = "1.45";
 };
 "glossaries-finnish" = {
-  revision = 45604;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "f4008f165ed34678a9f9d1cc2fbf2f2dedfa66d31acb5449da6f93a8b19a7ea6b7a7a584ff7c744e92637cfa4a7c98a478b096be73a3abcbeadf7d2af00a607f";
-  sha512.doc = "46ffa9e86596919c6ee001bfd425fbe0c58e890e8af3131ad89b4e5ae8ce20c8f3266f2ffae6ce039908a137180c0552b9c9f2a729bb55094f999a0bdc3443a7";
-  sha512.source = "e21f3dd39d6c5adaf829657c75badfb9bfe71f57331a89ba196e34a042a03f308206f2c3cdf7e1bf5dd82ac230c0aa5c48fe982e017ea7bebf2a40bb2e664511";
+  sha512.run = "ad6109c67ecfc88da631b3f42aa91b95720619599721a6c6d87b4d8a668cdcfd5bdedd333a43bfff663f5f26df64f4fd8268054dc2dca089ad34177e6e5b9078";
+  sha512.doc = "ddc0047503a68316c3d2e18d22c7ebb861aacbf649366a60ee186ff31ba79846b461d3fde029bb5b0a3ce8f07ef25b89bc46898047176160815570f68b022b10";
+  sha512.source = "0be0af63020fe9bcde5ef0f3b832d5fe90325de0412f32b3c0f34b6b00126bd2b139f0b3be376d54a41794447dd38564fd248ce30fc08f68a607fc65daa5d503";
   hasRunfiles = true;
   version = "1.0";
 };
@@ -15889,6 +16732,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.0";
 };
+"glossaries-nynorsk" = {
+  revision = 55189;
+  stripPrefix = 0;
+  sha512.run = "8f94d41ee925f91b8646a9e01caa008a56757a46da5a642cc0142d0bee5fbc192eaed4ef914c93a40840606f569c5f20dab5c3d6a5fae26f64e981d12f868832";
+  sha512.doc = "aae437c721582343ee9395881479cf3d0c0b7d26ad6642311a63f0ed1e0aaf03a48e456f3e21d530dfef012a9f68f346827fe1ac5e7a509e1370bb60abc39e41";
+  sha512.source = "29a038a405cecd5232b3e015ee9e431e206f61691404309a9f7b47333f5d892ba629c9545a99e1a20a360ca0b3a72acca85ecd1f333e8615b856baf680d206c2";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "glossaries-polish" = {
   revision = 35665;
   stripPrefix = 0;
@@ -15935,9 +16787,9 @@ tl: { # no indentation
   version = "1.0";
 };
 "glyphlist" = {
-  revision = 45696;
+  revision = 54074;
   stripPrefix = 0;
-  sha512.run = "d4b606f0aafd19d642be4e18c6ae4a6fc2051f0359bd5f15cec2b398b097e204bb9fdfd0b0925f3b697658c671e598e7b2711a85d0ae13d21af1d00040cd2354";
+  sha512.run = "c050808623d162ffbfba8742c9aee6c92555717eb3ed0a0cfb0e3cd6696c4f6d940aa494582011e6d0becc3c5572ddccac2598ac8d521b58a323768272f9125a";
   hasRunfiles = true;
 };
 "gmdoc" = {
@@ -16007,13 +16859,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "gnuplottex" = {
-  revision = 53218;
+  revision = 54758;
   stripPrefix = 0;
-  sha512.run = "2a7a885bf212c0abaad8bf9f515b6d3743c09cb8e6ea21a3fa95132664a8724ae549d2d91a630783959b16c83b85bc54fa96fb281f827d33948cc9476c04a3d2";
-  sha512.doc = "b4fc6a585bd8b86eaa5dfd6ed0f68d557e9905b5a0b8f6dce3aebf4b8cc1dbb7e588b9e73ce39055ae47ac56e837f882acbd10be94305272d47d29be7eda17d2";
-  sha512.source = "e2248f82d7f6bf47b931e8fa9f1c332c9f7eaf8459b55ecfb064c0cf488143093ae57652f3ed57d125a10d93db49cb8c65d319c5a11a8d4f26a9c825b394080a";
+  sha512.run = "5bc237b3bfa3b31eb4d6d2fb63280ab89fa929b531ec83dec362947f49ad0316b9107abe3a876f79e4c5b283134c859e4908b300a592aa69fc7ea20b80af7fa9";
+  sha512.doc = "c0e56811b5b4340c770d61ab605961bcdd5ab1abf72b9fcdb0c13c5e56a7481944aedbab70bf5d2daa90751528f0b9d7efd04a1453c08a4a6e40a46a41a1296d";
+  sha512.source = "9db5deaac39afbef502db7cca3c28d0669803af3d927d6650ff39abe365c39be8dff8d7ae7537ab139fe747b7acd7e9fbc3a66dd30ac8495f30dff143dcbdb5e";
   hasRunfiles = true;
-  version = "0.9.4";
+  version = "0.9.5";
 };
 "go" = {
   revision = 28628;
@@ -16024,29 +16876,29 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "gobble" = {
-  revision = 49608;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "c2426530cc89a96c8a8e6e01c936053c9eb9c4a07cb46369f3dcf6d0d74557421b1a749a112f561f7248a34a46262fa0b2b52d103bbd8cfed720285383a5ff8a";
-  sha512.doc = "1f4879234402deaf684312daf31abec8a9c36c04ec52ce9b48cf6b7358153b6feef328f2c4f704a2ac7a0ead18a87e35e3ec21d9e22b1a60311aac56f6b48413";
-  sha512.source = "ab765f57595789abba5fda194d49ce1c267541a4b22dff0b4fdbc6f2690700503c28f860cc21eb585894318d2bb88ec9f0dd6b48ebd515c8b23ac4c0f46de195";
+  sha512.run = "1206d7ff1b34bed829bd23ae88b0505e699a30088983d8f7cec7ff77f87774406e82442fc51f1f77d3475474785087d4f2f29e62fec34ef1db26d8a52a904970";
+  sha512.doc = "9d862847c9b2596c061cf898e23b0a1188fabb7636f8a5dfded5b08fd4422531fbbc6932af788c9a15b6805ecb4c254c82a37700caa03975fc2ff8c6f3f539cc";
+  sha512.source = "6e9178359020f754435ce675f7c2fc8a184f84fe86e990ecd254eeef283ada2576a8f634034fcd083d199d9e92bbc874b91a724739740e707525e83e1227d0a2";
   hasRunfiles = true;
   version = "0.2";
 };
 "gofonts" = {
-  revision = 52366;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "564685c341571d012c0ba80b44470c257714cb03644791bb4d0dc771a4c8234aa980adac503caad9defb0a6230bbb65c6aa552989c25fe59d42b0e623077b538";
-  sha512.doc = "0ba8fe236f77ca7bb32fa7420a8c6dcbc1a493837c6fb78aa5f32fae80614c4e3a413aae9e691a33eccb747f297ae0c2e3dd3da9d483b15ed043aa21c0a01c74";
+  sha512.run = "277e9765c5568f84df7fb7fb0004a4ab9cf5dd2beddfe8ba1beba2db069213bef814ce07a714262701dbaa1e371d311dc99052e1239c18d321b7044b4f29564d";
+  sha512.doc = "831382dcea6b990aadfe38ef630951f0cb10ab093581ad67e3132d69d00a89cd64edb8350fea729fc2c02960a38e564b893ee07b203e3c79ec184aa18f544baf";
   hasRunfiles = true;
 };
 "gost" = {
-  revision = 44131;
+  revision = 57616;
   stripPrefix = 0;
-  sha512.run = "81509f8eeda503dbb62d696adebf15c7f5fccfbd34d23ca8d83a9e7e2fa328c98fc1acd1fd99061c260ace3895cadae8138f0350027c6e81a0b52fb2735a0cf0";
-  sha512.doc = "4a1a95d8647cc0e2b57f7815b4b06b7fd009e78a6aae701248f70a73825b394ff508a558a03386871d0a2ce22d43af81b677a2eeb3c2f2475a64a13d87493e51";
-  sha512.source = "4d54271026bc1490882e207c079a4caabb8fae9075fa39a2bab4673a4046a63d175e12182fd536d8c2e4bd049858add1739da987a4d99baf3d61a32fc0596687";
+  sha512.run = "13bd2ec15fb4b61fa1a318092e27f9e94761af1fbb379e52c5143f10802a4bb77be35f152e33973d078e7e3d4554f89f66fc344a7efec9d5a1e0593f4eea0e5e";
+  sha512.doc = "af9cbcd39b0ed78157040634ea949152f972a02e2b19c4ffc679decfc4d76b161b591ebe915298bdb6927bfdf70b6a6e80bd119f52355fceec8829b20909c4c5";
+  sha512.source = "d375e1f17a9693ed87a840ea11157b5c496ad2495dfeb21bcf67e0b82ee6866ff7072c132c0bbadd5655ec50d791454d63290c32be04be63eccb11617ae58223";
   hasRunfiles = true;
-  version = "1.2i";
+  version = "1.2l";
 };
 "gothic" = {
   revision = 49869;
@@ -16099,13 +16951,13 @@ tl: { # no indentation
   version = "1.3.5";
 };
 "grant" = {
-  revision = 41905;
+  revision = 56852;
   stripPrefix = 0;
-  sha512.run = "849bb84949f2fc2f766556988eba540ed1a63ffe1d3a16279295cfcc772ab027dc1e9e5d55a9bf834c24e97a0bcdb04bdbfa653c71f99cf55ec3e18a83015a40";
-  sha512.doc = "bfadcd59264fe3d3a6914267cc9d26c5bd6f7aa2061160a6547b04f448daed041d2c15633a61a246ea7808b778ff32679249f4c68e15b84e8502a454a4cec1dc";
-  sha512.source = "183057279f539234df3f3354e0aa569679ec5a265a515dbac71aaf9cdb430d17804c001772a6ae69d7918f248d3d641c1f04740c5e9bc578dd65607cd3e4313a";
+  sha512.run = "212fec263131499530ecb81d7dd23ad5d162928d4bf8a888b29c190f15d1d15df71f50ba5c243cc1cfffd324cde3362e98d2932e7562f69cdb77eb09025ac7cd";
+  sha512.doc = "5170e7f01087c8198220977c1c5bef2bcd2d1a2b824122a9727fb1504576433d682caaa6c9a93454aab756dcf654875fe129c0fbe32452934b1a8b08fcac079e";
+  sha512.source = "7894584e5cd67051423ec0febc19e67ddb83e6e183748f9bbe7f037073f8f3d271a6903b535cf699960ea8e8bb5a7fd47a8108cd7ca32e12d309133b9497248d";
   hasRunfiles = true;
-  version = "0.0.3";
+  version = "0.0.5";
 };
 "graph35" = {
   revision = 47522;
@@ -16126,13 +16978,13 @@ tl: { # no indentation
   version = "1.1";
 };
 "graphics" = {
-  revision = 53640;
+  revision = 56514;
   stripPrefix = 0;
   deps."graphics-cfg" = tl."graphics-cfg";
   deps."graphics-def" = tl."graphics-def";
-  sha512.run = "e46cb5c148958bfb538bfb0a3265f4b33c9f950285e39f9e7bb8bf2e8a5bf801a2baff9bee3268c072ed02c8f84097a4e7dadbd5f2a2f50b92fb8e7f9585f03f";
-  sha512.doc = "5b978813cf8fd00523cae6b543af0ef2f50544211a2fab6d2be84d778cf6c720ad2c4c91ef44cac21719358568c5728892a15b29e0b1858d61592d6b196e5479";
-  sha512.source = "bc052e0d9c2d0ee0364511b1faf6965f656fff76ca7961598ba168ceae730e22b962adf130ee5f7b2a44a77cc80f8d54eba3a1438fa3aeb5d400994560bc45c0";
+  sha512.run = "a04c805985e40b4db0abe1f308fe9f2a0ca4d1736e38d8390294c648935ba1d10ed2c0a16af0eda55736f699359c38e6117487a2c37e2c0d73ce588fbe438e17";
+  sha512.doc = "34382cbc4b6d48e60b00ec9eb1fbfbe786d339206e7c7ee3e33163ac41319e0646382745760d546b5946f54ae53882d8dff88bac2c0db117185be66f2f450673";
+  sha512.source = "f34cac380d7a42ad97f52aaa07bba40194d88c51905ae8e36b3559cd7dbea0152fb0ab09da353aa694317c360d7abe649b12477f9e2a59a8cb280175df4b5e59";
   hasRunfiles = true;
 };
 "graphics-cfg" = {
@@ -16143,27 +16995,27 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "graphics-def" = {
-  revision = 46267;
+  revision = 58539;
   stripPrefix = 0;
-  sha512.run = "ce101b28d6a62698636e03bb1f79ab7450552d15603e1d8df416b2fb55d397b3d696152c05e84e12415790b7e634322eeb6266435b0d9ff13fdac28ab164cddf";
-  sha512.doc = "6c8d0cb49cfe1a5abf60a1473da509e34685c4ee2525a3d0e895b9513550842ed420d2bf6e949e8cbbaf543ad32e18fe1fd8434b16e46e2bcbd3ff7f50154e99";
+  sha512.run = "441fad3649b85fec474e9191f03b63b9e6a9b594db159de8740409f3cf79544a5aa8b9ee6d939f17dcb4b84507d105bb1bbdd7c25239d28096e99d97ea3c9bec";
+  sha512.doc = "9ad910e5870eb492921b40ef516f0d9e5b571b9c8129e5dc46f40c01cedc1724b0ab01191e0b37adfab62825857847b3ba6b8acaaea24d0da6b38d4b6191b41e";
   hasRunfiles = true;
 };
 "graphics-pln" = {
-  revision = 46363;
+  revision = 56823;
   stripPrefix = 0;
-  sha512.run = "fa45e825390e1a7db1bde443e24a73fd84ae45c1403391bd2d4c944820a3bedddf388a29998f92af7c3c22c895fc2580f827808e84ca1ba334bf5bdce38f37ff";
-  sha512.doc = "8df46cfbb8fd1a6c2b921030645f70795923fa21046dc209414fe3302f0c920cd47b432df22e0bd77574834dc67ee68fe4f307d79ccfdb95c1f8bcf0c6d5691c";
+  sha512.run = "cbb87e4d040c6844cb2e677d352f9fdf9dca7848a894225944f52abf4b1ab9c03d6ea2881074b30bb618eee647ebfb70d8baeb2a82c3446bef40a47487e6b9c0";
+  sha512.doc = "8051321f777155c8bb81d8e514a15e01d282c8ba73ceee6c60fa76201c1c91ba47299bc2ac3b21cd210a457daa1c549f73d299f94e4a972d2b7467ae9f7b9a87";
   hasRunfiles = true;
 };
 "graphicx-psmin" = {
-  revision = 15878;
+  revision = 56931;
   stripPrefix = 0;
-  sha512.run = "852b917dd2f4e4366516db9e7e22a6f34fecd1b69dddf687bd79b1dd995b1bb94c8372b85214e4d4c668a4a8d7d84a8c6e246a09e9d36937cec380c65a14c12f";
-  sha512.doc = "7b2872618992fa6363b8a5a4e1d72f51779372475e7b7bf8ec3c5b9b571e77c1d80be42f2958d7c89ee4c09ce87f7c3fb76533010b0266d5108cdb89a81c49f6";
-  sha512.source = "7916831178f04abfa1e9a87b993880cdaf678f567fd9bfe37a05529296c7b19ae9d1227711b7ecb829542aa49bbbe94db523ab1492e649304091a70e942ce9a6";
+  sha512.run = "d0cb1283998d0ba654ec75e0696bb2b6102968a504e3dee457826cdf82d7cc5793dc8407d0145f314a780b3e015a7be49e70ed21c21e68a3735bede1aacde6fa";
+  sha512.doc = "149f130b4e47f60ed3484267486033fa92aa7529169061a2dd9582daef579b6aeaaef4001261ff7bc301c17ef2817bf7bfeef909d22be44079a2c3c145c92040";
+  sha512.source = "20cdc55b6645f661f5ae9ebdccbec0506c4e2a4a699dfc88aac9bb6d0ea1b0c308f7ef08abb4525faf498edc77eed5051d9130cc12769dbad7c2a31a814e46ba";
   hasRunfiles = true;
-  version = "1.1";
+  version = "1.2";
 };
 "graphicxbox" = {
   revision = 32630;
@@ -16175,12 +17027,21 @@ tl: { # no indentation
   version = "1.0";
 };
 "graphicxpsd" = {
-  revision = 46477;
+  revision = 57341;
   stripPrefix = 0;
-  sha512.run = "b9a6cd054b8b2bf80372d1e4b7d8a29e1d0c6d0bf0b3d67d961e37ddb433a73678fbf99cc6f2b00d94e6111871b0b267b8541762b52100ee7ead3ebaa6257543";
-  sha512.doc = "61d86c6eacc90a74a349eb52bbc7ababf6aa7dbd881a22ab39e06c0abdc6b8498cca525c431b2057245b294096a01a22d40c9dadbea91565b660f59c7b08120e";
+  sha512.run = "c1327b1adc6657f423bf8eb0d29224773055f434cf749da8a8b2d1713c2a90a6fdeed2bded223c7cc941cb2b7403cb68927d72b0eb085e906750ce64ffcad3b8";
+  sha512.doc = "082a8e580113ef796be4cc750d98f6dd0bf783298fef80a06f5387f352183d513e0d8b90dfb684bcaa575ff7b9307fe11e55f84aa66d7f29b411e06af76e70e7";
   hasRunfiles = true;
-  version = "1.1";
+  version = "1.2";
+};
+"graphpaper" = {
+  revision = 58661;
+  stripPrefix = 0;
+  sha512.run = "5081a2342621a69d4cc4bf70b129f8f28f769edb5e4b4b4b481fe415211979114583082b8e26524b98385dd8058fd415ebf824594714a596483b0e8b228e5283";
+  sha512.doc = "b5a206b9bc0bf3860a0fc5188d47b40b79fa413619ec8f3c015077fdf850090ebf7a4fe5da7ec41e191a68ec0e30a2e3c318585af9484b1037c034229fc8ed23";
+  sha512.source = "23d7730da8f4df9b38cc1bfb8b17049eb77e37af8a4c19c7a7ab99e8c40b0d5dd585f983cade634f22a0cdc476092c1b27698b8673d9f736ba03a8eeb2c0d122";
+  hasRunfiles = true;
+  version = "1.0";
 };
 "graphviz" = {
   revision = 31517;
@@ -16200,13 +17061,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "greek-fontenc" = {
-  revision = 53955;
+  revision = 56851;
   stripPrefix = 0;
-  sha512.run = "4922c34492ad12bf9d60eaf8ea8b5c40dde4fcff13ed2400a059f2ee53f0e15481d96535db582a1439e52f0ab0541618ac52a8fbf871397c5cd197cf964586d0";
-  sha512.doc = "ea33ea77cc01ca580494588e6cb00002f456859f9e698533b32e712184729d0e21d47296c594148dacd0e6adfd9349a5a7b533cea78316ac1a099128105bb633";
-  sha512.source = "c52b4980244acb31be51b6b1e9cc792ad34c3845e1ef4bb7acc2c749887f886a9ff595df78758e95deb26289dcd460cc16ca1417249abf33e309c2b26a1ed04c";
+  sha512.run = "4b7189bd9080c0c34bb61c5d47dcd09985d61875af06c4263c408be70e85657bbd36b94a9f183b409739ff72ba59b1add5fdd8e42a1e498bb3508e3d997d2b53";
+  sha512.doc = "5d6495f824069c6866f3821839b671ef872dda96435ad0dd95a2b719dadeda5325d1d96bc8c4b68876b0812fec878e0d0770ff82c73fa4ec020bf9f0e059150d";
+  sha512.source = "16049d6c57eca659c9aed41e4ac18417d667d5fb39e1bfa5976b5f8980c33425bf2301288b9284b39ae00e39d9c2878d09b25cfc793e51c09df92e703f6a968f";
   hasRunfiles = true;
-  version = "0.14";
+  version = "2.0";
 };
 "greek-inputenc" = {
   revision = 51612;
@@ -16247,11 +17108,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "gregoriotex" = {
-  revision = 51029;
-  sha512.run = "b27e105c26022f7a9d04d4990f83ed6a73cb92fcfde1698c4be81faedfbfd67730d4957db1ce5b865820cf714072c842b85fc698dfe6cda0bdba100b3d4d60fb";
-  sha512.doc = "66e5170d2084c01b2a9cff2ec344322e1b76942d7424ca75306e7163ffa592806240ae0f1dab176053753dc3dcd2ea7f0db9aa9afd5d7dca8200e593b2158193";
+  revision = 58331;
+  sha512.run = "00dcd5bc7c12374a15d778cb903715036bd29a7a07522446cb5a5cb14509956db71df518d97e44d1e89366402281c26b96eaf39cc9f97d624ecb40107eae3db4";
+  sha512.doc = "67f018fe0eb9568b0ecc6977de8eb8fc1b0b9503372e2f674a97723c537d8a8fb4f48d48b95ee8979e4d4490d3725cf4a1411ab9d7da2ea14f72d0dad0fddd95";
+  sha512.source = "0ae6211b33a256f1b10a2b167f3f5886f712688ae73baf13f698af37f69f83a9be754efbc6b0d5b3a1cdf11e7d459a98986b27c27b6318cba8fbb3e48d7f682a";
   hasRunfiles = true;
-  version = "5.2.1";
+  version = "6.0.0";
 };
 "grfext" = {
   revision = 53024;
@@ -16296,6 +17158,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.3.0";
 };
+"gridpapers" = {
+  revision = 58723;
+  stripPrefix = 0;
+  sha512.run = "17f9b6b16a0d2f45648b131623c243e0b62f5e2d2fb1c1997af921a1307d941ffb07729d5e4787b4627961160a75de98165e97a42331b07a3259e91c987f27e0";
+  sha512.doc = "0f4fed3e0d17f317f3d56f69a7100d36ac6d022f7c7c81c8dd0bb1f740f782ca5a4064cc2c80daf865c85e7ee84027a97fe675a13f9d0d348e489a2a8afa2ed9";
+  sha512.source = "962b9dd3c99ce419e58cc1f146406b0703807d365069a333971c1b0ad3409f64c9c89d6dfb9c4ce80731164af1d6dcde6b510c156602b0bdde2f231d7da45406";
+  hasRunfiles = true;
+  version = "1.0.2";
+};
 "gridset" = {
   revision = 53762;
   stripPrefix = 0;
@@ -16306,10 +17177,10 @@ tl: { # no indentation
   version = "0.3";
 };
 "gridslides" = {
-  revision = 45933;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "222ba30817fdd016d80210e25300c925fc45f5a0e5eb02d569f8e709ba578a6ac12aa3f2ed16e5bd6fea3e4b4ffd2356a046a27445e47f79bee9be93ca5aff96";
-  sha512.doc = "6d8a2f2a43b7e0b6232aabb78b25bbbb2f256e9afd54c704b818958496f7ea7b38a2741a60b3d2f3f7745431c302a7106ee015fc18d5c50349ad3cce375789ff";
+  sha512.run = "9f9c3fc88cdf9e3641aae264eac0c116c3dc410ddab4c688521289baaf67cb4c8c605c734fbf45538b6498f7c337aeaaa4b90d2584c6becf06a97b81894c63c9";
+  sha512.doc = "ea3a2ed6334a5e160cb27b096e0868aae28908f77d67626b9d1d86840e615bf1b296ff5813ef5ed24ca0435eea39f4afe601216f243f2be585eb952f4df33255";
   hasRunfiles = true;
   version = "0.1.1";
 };
@@ -16330,11 +17201,11 @@ tl: { # no indentation
   version = "1.02";
 };
 "gsemthesis" = {
-  revision = 36244;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "7debd75f882855b45665937669a3869a9268d2184b22da3d344a4a6182577aa8bb440a6f4e48123d359c23b630b61016331cad94f4a08acc3295dcfd722c40ea";
-  sha512.doc = "41ecef19c29f63970dbee2242fcdf612b7619a6930002d8be03f4116f3397a619951f2f19a79f0e3772f17005847ea5a6a20a91b6ba9dc3529fc4e84dbf7833d";
-  sha512.source = "757fad4bcc2bac03acfcbcf5dea53c30e7902cb0a53dc8116fde2b28ca9f85861b08f19a296096253a4e21e1d3513faca3e0f206f9f0e22e3699f32e0a5edfe1";
+  sha512.run = "42d5d8461d5f8ccf461e24d04fa61991507eb545a60b7f7bc3980d39c9f767aa155164cbb914ce961204316b1be61f5622f21236154013c6404a86ec30ec18ce";
+  sha512.doc = "3497f766bc496369a2eb9f829b8ba3f0d73bfe7ac11c4afd7f9ce06c21f9aaceacdee0456a14624ffb38bafeb978c5a4787ce824143693e4c3d99a227a994cb8";
+  sha512.source = "813f4825450b66024ea804e0f36d1df721565b046979d822830b87ef9cbd8a01300d50947ba9344c3e21f9624af573d7a9844d60432dacbeb0890944a9e11dc2";
   hasRunfiles = true;
   version = "0.9.4";
 };
@@ -16378,6 +17249,14 @@ tl: { # no indentation
   sha512.doc = "151f9765d6da2312a10523ffca06cb4e0529d4ebf8189e9ddc00f86510c9cd13be9a04e47b85dc8cd815461c17f7e4b8be9604a1a605c86d7228d1113f985a23";
   hasRunfiles = true;
 };
+"gudea" = {
+  revision = 57359;
+  stripPrefix = 0;
+  sha512.run = "e32cd699f60de092f9bf04e0eae725555735478db9ae7bf0a01a8aa78ff303c5dedee7eefcfa94bc1d8012f4062160dcbcb25cd405debccf7eed20abec056cdd";
+  sha512.doc = "633f6cace4db98c88e3a7ea1f68deeaf9b0fe980ace490807688b629b1e3b2b00a12717b66b641dd9949065e4f72f423f78788693ddfe2128752f8ac990fd43c";
+  hasRunfiles = true;
+  version = "0.0.1";
+};
 "guide-to-latex" = {
   revision = 45712;
   stripPrefix = 0;
@@ -16394,10 +17273,10 @@ tl: { # no indentation
   version = "1.6";
 };
 "guitarchordschemes" = {
-  revision = 41880;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "3d4506825043357708cb5fcfee6ba7d6cc42fdcbdbaa772628bbcc89381afe40c58bebe9ad01343b96f3535c80c217bac5b85d5079d1e83a42bacfec995bbfa5";
-  sha512.doc = "ae3e21f74e66ad70a60403c8e9a06e747b770af3e586ee580686095fce8b405801e9c4d1bd59cf429defff61fb087974ce305c5fade387d5be10fe47be46e6bc";
+  sha512.run = "777af4d4ad1a35bef3f0075e2df707c3a3c98969ee688b71c3d13449b04ecfcb2d82ed9332a8aae81a3bd825462c2cbbf840b16a72fc6e3f65e7565ef6b1b164";
+  sha512.doc = "f7508a78fd341e4d4d0fa8a0f89a14420ca50d590bc4a1f5208d4130a3aa84048faa8720545c24e8f0243b1f062a6f40cb5cccdd9ed7db583a11fff1a40c7eeb";
   hasRunfiles = true;
   version = "0.7";
 };
@@ -16409,35 +17288,35 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "guitlogo" = {
-  revision = 51582;
+  revision = 55741;
   stripPrefix = 0;
-  sha512.run = "c4fff100ff6eb6c73607ce83ec90057a47628d0d354f24176be02c8e9e4f62311c466cf7d8e7ec27787fb83a4c35accfe06d01055ad1db2189c82b9a7277aec7";
-  sha512.doc = "e60d42b6db1db84688fbc657b854cb17f60657c22e296d13677e462b39090c8e99e83b86227ea65fe60dfb7616619f0459aecdfc6c6725db68567f458d0a4308";
-  sha512.source = "65773fd849d06d834505c9ee4e97f7ec6d30308550029e5a71756da7f70fdfdb8245bb6f2fa0ceaf2cc3ad5c9b865f7e617df0c763695bd0cca60431da2bbd5d";
+  sha512.run = "42fe915cdb69b18182222843452627655ba1d619c2ae9eb469673a35aab31967afc3cc2abadbc2fd13d9215555a2f97a54a6d3b1ec895fc3d3f6388819bbb9f1";
+  sha512.doc = "505a1f12e772f2f1cebae02164793b0416322aa60cde58a18ba0e3fea0a7072d07d0d8b1bad9aaeb9248dfa89b4b1730e0e5c2a2581b41a7a3a80636fc161b66";
+  sha512.source = "600881490f339ffe540248d7c497a970ee606a9e8167036043b833b24630171d44a58a262e79ddf72fa9308b45bd70c28893251b8c185aeb955114a11c70794a";
   hasRunfiles = true;
-  version = "1.0.0-alpha.3";
+  version = "1.0.0-alpha.4";
 };
 "gustlib" = {
-  revision = 45712;
+  revision = 54074;
   stripPrefix = 0;
-  sha512.run = "cb91f48e66063c784addd1a208946343cdaece3ae0d28d3eb697add3bf16d82b7d01535018984434a882aa5d1901cd05ac68e0966554b77f4a2feeba933ca880";
-  sha512.doc = "0a472bcba101b759b0864c09fbb28fd7473e8382e73cb5c2cfa8fe97f075a9a0ccba1603e0b08bb17fc10faa53907e52d78efb7ab09a7d5cd06bf1e17d82a1be";
+  sha512.run = "e752e4b53191a9c5b46d1aa5797d491b98ab2585873e9a9a1471aa89accd898cadc5a9332ab36828b4baa6a3d3d69b311794e1948b788db755dc8f066a68550b";
+  sha512.doc = "9c1c0279f18a37b2a500e415364dd4404a7dca8b6e0f85b053db5511826eb401865984ee3471fbe607e4cfa605ab50c08e6c11b166dd629e84d9f07db4af7114";
   hasRunfiles = true;
 };
 "gustprog" = {
-  revision = 45712;
+  revision = 54074;
   stripPrefix = 0;
-  sha512.run = "597abdd6c2eec380c531ef7f89ac0d2fcce6e33dc2d2c5040a58b5da3bfbdf2dc75cad926291c94ff1207a47e66cc213c7b7f76890495aa9ef6466bd830caace";
-  sha512.doc = "7817b203f9722409f10161072096dd410d34c2d84ee0ccf332d717c2eea0f408c76597fccea18b6022088cff0155433f77d085a8e8d5f28b72c4c227f578cb0d";
+  sha512.run = "bd9cf1c174a5674a0b71f07bf76f46ca4e15dfa194372cb04e63467c29ee1e07b03d0e611afceae80ea192b6f842fdbfae0bfce7eab2ce43a4e448058521cef6";
+  sha512.doc = "268a01f59660e5225c1c21539076e6239381294e6aaa31992032ff8e3d777cb7e4195247c92d9f22efbee498c8bac34cdb915e0a5b0f6cb2b5c0b72c15695d72";
 };
 "gzt" = {
-  revision = 47381;
+  revision = 57765;
   stripPrefix = 0;
-  sha512.run = "7e0f493dca3e9916f28509b94bef393e8ff7be95f55e8da937b4922139ae77f4f4197586c3bff343f1fe1d22dcb4a803e2d4a3a115d201cc0f2c5fd71ba8a836";
-  sha512.doc = "388aa99642bb838ae4a81a665bb90019c6e31b3aabefbc2c49396edc98d8fe2d00986023699b849162a69db6e6dafff26602f61540758510acb1aefcd883c4e6";
-  sha512.source = "f6c4b16c47fd5773f6a25822d7cea758b5e612603e8004ae462b4e40ce4ef45e6fcbe8ff62b41828bbc3c7b83b8596919eb88864833546b9d785b865c475b312";
+  sha512.run = "b09bdcde2891d6d84ca193a6183b4286d1912c98fdd7cf6a7e737574f352d8eea2fa5cdcf71602291e9f1abd8f7aed3ad9fd6d56571f62a59e9d9bc58c875637";
+  sha512.doc = "a44bcb21337d7799d6fec0da69784252bdf74be493bfa75fe425a83e7f6d71b1ba46e45626d94b5a1b6234e0c21661cad68e0a95339d19c99577ddaa31a1a451";
+  sha512.source = "48073e4390ca1e8c0fdf1c95069439160b77ac2277dd1452b36c48172589b4a5aca1b5a2f040675acba09f5f60d80fa241475c1eec828d13d21f942ded6714bf";
   hasRunfiles = true;
-  version = "0.98";
+  version = "1.0.1";
 };
 "h2020proposal" = {
   revision = 38428;
@@ -16463,10 +17342,10 @@ tl: { # no indentation
   version = "0.1";
 };
 "hagenberg-thesis" = {
-  revision = 51150;
+  revision = 56798;
   stripPrefix = 0;
-  sha512.run = "a8515fd281f726029f3bcc170f60c8a98447d8e16cb64ad787fdd5576ab5fb58a077666f191a02f46608e1aaf84bfcc8f1064a28e00c77f62505134a5508be28";
-  sha512.doc = "e7f1ff1c796b7ec2dcd7758a46149a20ce3d33fa6bfc3dc93a0d7dc4832e4f4692e1e74037c1f9e990a0245fd6cc5791ff998439ea6604519cf40bf463be7476";
+  sha512.run = "abfb384663a77bd084a7a4f3026f59015b1cb70a851e25153c921ede1089bf43b6abf3a8a50469a55cfa6598d54983604d395eab8c5115ecefe7250ba872462a";
+  sha512.doc = "78b8f4fff31a9f0a63b6d31e5d07bf8bf76aa6ad5b37e8ab7a28522bb9f9963d0b8e99925681286696d8e6bb688af8ea02788faaa7bff0ab50d2f166b6c9a4af";
   hasRunfiles = true;
 };
 "halloweenmath" = {
@@ -16532,28 +17411,27 @@ tl: { # no indentation
   version = "20120102";
 };
 "har2nat" = {
-  revision = 17356;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "b3e76b7c4a3a241f716de344481c9927daaa73badc2f40cade074402629cdb3ed02568d9cb3d6276b0abd59ddcb34254fda419f859633281870ebc394c4a5a14";
-  sha512.doc = "927ff5d03cb3559dcda63aa2745958722ab9233c58e55cdeaf7e1c441146991d3edca9c3a40fae2cc147e5e69d0c44c0d357ed37ef0e02bea41952474b36f88f";
+  sha512.run = "b88cc102c09fc86a762da6c16802241af705a0a7da8707d072f051dea7b5836af9bd5cd46e7c80922877dfa389aace6b7713b10c4f1da75cd0d03c7bb3e68745";
+  sha512.doc = "de971a2f65481fda590a1ecb254663778a9260e65d26efdd67c739f02099baddd4937edd1bdadbce5020fbd9ad227cd525ad524dc4ea5fc1e563369313f5ae22";
   hasRunfiles = true;
   version = "1.0";
 };
 "haranoaji" = {
-  revision = 53810;
-  stripPrefix = 0;
-  sha512.run = "4c137f99d91640c805bfbe9555de08ad1d5e8a2c9aad32d90a3061b8408c8f5cd05ea41150fc09813f02ffe401f517e6cbabf4b5eab4d793b9324e3d00dc2b44";
-  sha512.doc = "5b3edc1a1db549a596cbfd383fc5b8e27d7d523e7276e2a79a7aa81f87314d0586b9f4277bfcf79a4c44e2202c80dfec31266384f9f15cdccd14a251fd6e207b";
+  revision = 57574;
+  sha512.run = "536b8f30134c8ec45e7e55981799520214bc646fe1f8a5525797612d130a9897070fd703b5920a7039192e4411ccdef6d23204c839be2320dc5f557380a55070";
+  sha512.doc = "45edaf645bcec4a88496d17e497b39267bdbfd3b112e68bb78aa6c81fc30dc2ff9f14c980526a444e36a9dfef75f7adf3ac33c3cf29fb7b080a7d43c8461adc7";
   hasRunfiles = true;
-  version = "20200215";
+  version = "20210130";
 };
 "haranoaji-extra" = {
-  revision = 53811;
+  revision = 57573;
   stripPrefix = 0;
-  sha512.run = "0f5997b425e157a5b6ea8a4202150c4ee1d696d6ea956c990f249df8db2a5ecb82f4ca25228905ef2b2ded38f13a9a1c35ae444ae9f2f60f189e293947349ec8";
-  sha512.doc = "d3eee236a541e1b20572d8f3386ea9d9dd630f6c1cce638e5afde8291f8cea16cb9e3ae790f09d71733405f8ebbb2de0e7a251b5b09fa48bcde9acdd988126e2";
+  sha512.run = "bc4256282c9bd61ef820cbfb337c456f6bbb5db8b3988c5c600b69dd91193478e62930a20f70733a6cd1dcce7d1520f7f1a63be7c0b0ef06b1d11698adb752ac";
+  sha512.doc = "3884f3ba53c433f0d7019bc7773c5d147e9947b561d99e66fc2e5218ec167bfd9e6ab0bb368368480045ee665d89ba89ab2913fd920d404946283ea398cd4f32";
   hasRunfiles = true;
-  version = "20200215";
+  version = "20210130";
 };
 "hardwrap" = {
   revision = 21396;
@@ -16620,13 +17498,13 @@ tl: { # no indentation
   version = "0.11";
 };
 "hausarbeit-jura" = {
-  revision = 50762;
+  revision = 56070;
   stripPrefix = 0;
-  sha512.run = "99fe789073c76535c9c8a307289bc29b14b0b7a45adf01459d76ee67099d56c9cf36fbe3587b108c99c1563cf077066ad6408955bd55f31cce6b4e53bab378ca";
-  sha512.doc = "cd98eab62d47ae03a5238702ec5a246496880e55dd8a1a9913b3639197d0fe65d607317d9cc9cbd578bca6bc64babc80d257c2f8d84b7327fdbd77537ca1f660";
-  sha512.source = "2d8edbc3163c00117f9c1297970f2309df35ccb6d5166c723365c1267af736c05dc5eb4bf77cfe6bb6e25a829bba83007fa95bfcbe6aac7473f4657cd450fcb7";
+  sha512.run = "bfee6719ea75ee672a39234d9416a0415a11658c45f4e5958bb12fa67ea416f9da83d2583e7007e3dad860a18d207c42e3e0fbaa3f09afd0b3825c170d00c63a";
+  sha512.doc = "76898cfd9d4bd0f34632092ac7c1d913f4d460beb9b9fd3d98c249156c406b81fe42a4bed754fde79c497f9e674f50c698de598c9bb675270e7ada1c0002bba4";
+  sha512.source = "3346edf31e0f7545c1c53fbe88fd12a902ef673cf5dff0858caec415e1b30e3c26a2bad613a947f5897b6867ac5730deff8c7cf24f51d9078ed0494104bf5a1f";
   hasRunfiles = true;
-  version = "2.0";
+  version = "2.1.0";
 };
 "havannah" = {
   revision = 36348;
@@ -16653,13 +17531,22 @@ tl: { # no indentation
   version = "1.3";
 };
 "hecthese" = {
-  revision = 50590;
+  revision = 56181;
   stripPrefix = 0;
-  sha512.run = "5cf62262cc231f229c1a66819e620fc55f798d8152b09434c0c288610a59a6ada5a9703e903b7d0fe761f1197757a1594242fc181928f6c6a5bad1c3d7dfebde";
-  sha512.doc = "3d06c52646c4985df8fe71bf07ae0f5305dc719c03025f1cbaf511b1c1de99e02f381740cd4f1074f0fd4b211a16575dcc7c1def28d9d75e615dc1d08d5257fa";
-  sha512.source = "76faa35c65aedcff2e177c40f08e4d5a031f3804f3c786e38429c55b55a2f0261c66c8515691d2e23b0ef954316479d6d02e57388896f1d4bf79e9fa24e277d7";
+  sha512.run = "8a2d32907fd13e505bb0d7a3c2683cca93c3fd40b471adb622ce06a315558c9ac8f991a3fffbcd52a6be93cb027785d4814e0f9364370cc423a30b115ad644b0";
+  sha512.doc = "efa6e45840e77b4a9905cae13b7dc3322d85429c5acb4c59d81a86833b0bf0d92f38fdcad00f5befc32e883ee4c530abd6921411ff7c5c2df8dd25507a6e1480";
+  sha512.source = "940e0bf6cf217100912e5950e5a345e85baeeee109b3da2c9f0fcd539fa886241a7fa64526c61b0233f06462ddba07f6aba5d3cc3795a2bd17f694178828465e";
   hasRunfiles = true;
-  version = "1.3.2";
+  version = "1.4";
+};
+"helmholtz-ellis-ji-notation" = {
+  revision = 55213;
+  stripPrefix = 0;
+  sha512.run = "2c91c08df5e97f9f7ee17f40408d8810cfc3099b5e125b5445a89d2f0d35849f32be0d4150bf7b9f812d5c9c0994c714430fd8d015b9d4ab3bf9879deff5bb43";
+  sha512.doc = "20c9b9fce33ec63cd635751acec1d25fb8c5cb4171ea06f3313c839ea400943926550098cc520c4d5fced46c61756977c6294e435821330715ab82cb894222cf";
+  sha512.source = "bddeab10a607bf0cd194f9725ffe66e103605c5910abd6fce216c579ba2722afbec724f8717b52b2ad6fdc8f472553519e000d7df41c5a26a157e8eedb41fee4";
+  hasRunfiles = true;
+  version = "1.1";
 };
 "helvetic" = {
   revision = 31835;
@@ -16676,13 +17563,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "hep-paper" = {
-  revision = 53393;
+  revision = 57045;
   stripPrefix = 0;
-  sha512.run = "3b0378e1ee99a8fbda42713c61969c967357b645745959a3e7e3a8a182789b2f2b1855cf13eff2fa9f0c4830b1814bcff52e2503f4c7c289e7d554775448909d";
-  sha512.doc = "5d9b52511d2fdcae8f16c0c9eb0cb4306f18c06e3a97c7a1b3b9246d736f823642bd0e7e178ae4f379445fe0dc55f6172c5c4ea4c7740d94b79b4fdf6b32bd60";
-  sha512.source = "fa35abf6157e74ccdb7d86e1d55d688a2fc7bab06f4ccfd84253141cefd265e872a494204425ee643c35490f695af4566331f456d752444acf7269c75f87758e";
+  sha512.run = "e7422cf1015b554b20d6fa6cfca317fbd2e057ef31f6d57448ba11126c3b6b863fea428c642f15b8cbbf46929ce943f362cb99cb95cbe7d1bfe821c4315661f8";
+  sha512.doc = "29f71a395be21b72cfd2c0f167e11475215dbd7005529a89032a316d5802b8e2feffc7670923ea57b6f2bdab4d298b7798f122263ab496f4a4da323f8a44c483";
+  sha512.source = "7610edb2223471f6ad729dca66145bb0686e56fdcebfab9260288c3fbaedad0be638f300f789158d824a0a04828297853c5b0774c4c2a96cbb0d48f2d93fd61a";
   hasRunfiles = true;
-  version = "1.1";
+  version = "1.6";
 };
 "hepnames" = {
   revision = 35722;
@@ -16709,12 +17596,12 @@ tl: { # no indentation
   version = "1.5.2";
 };
 "hepunits" = {
-  revision = 15878;
+  revision = 54758;
   stripPrefix = 0;
-  sha512.run = "b6abbe3a93eac6c7c159cd9c305fbf61664908b93956b90cb413e2220b12d183e4fafcb361d8935bac16a39d14451f538d38d9452ca78eb4ed03841f3e5bda78";
-  sha512.doc = "3247cf7865444fc2a600c05843c55ddca792b59b5906326e79591822c0e2577880d55704d4e726447aa503983644e7c0b7943482045b5c9ce6e8fc765bbc67b5";
+  sha512.run = "eae3b071eb3c81e79f166a925f5a3b16ffa3e992073f318b8a193a8188bff5b5222cef7533e398f1481671e17849123947577c13a182f40136124fe6368547ff";
+  sha512.doc = "86f0080a818aae8743f9c2ef20a3c87f2f23e29641037e91a89e3f195f55fb6653c1ebf1e990b1a984f2acad26243bc07afda6cb2b00d58e5f2416a0f8fddc04";
   hasRunfiles = true;
-  version = "1.1.1";
+  version = "2.0.0";
 };
 "here" = {
   revision = 16135;
@@ -16765,14 +17652,36 @@ tl: { # no indentation
   version = "1.15";
 };
 "hhtensor" = {
-  revision = 24981;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "387fb53bc2c9b83d2f34d9fe7856e3e7c54e2403378a1f806e29549e1d4b871cbc8333b64f721230918b96b9082ebe0ec07533cae9e4ba54d73dd8244a95b1f3";
-  sha512.doc = "30de49c3074840066555f2363f2c4120d731c3d515c2b3ad6839bd4e04abfc7043930428f0345149c6da1b5396950c8864baff6414a42769f1652a057817616b";
-  sha512.source = "10c1cb953af7cbf3c1f31d06116833eeb4a3c81d66671ade683ad38cf97271e4f05070cf065389211baf8df13415d74086329d2e83f141f4167f0909214973da";
+  sha512.run = "ce772bed045b85de5032e3b4beff52958e18513e2c9628e67505b75baa17befe4e3a5eb86f812305b87dbd15dd2f483df78ca7c5db54b64cf18abc75a2ae8f59";
+  sha512.doc = "aca1224b327f448bbb3f598b350fd4e569960bac9d05b8674b4cde79c4a13b376dc2a932b8fbd315f63f9dbc930ea28599afc18340eb36d4a38d967c14b62152";
+  sha512.source = "6cf27dcfc865514e9274053bace69bd71e6699a501195c553ab3386723b375714f14829e70163539443c4c63b2821be8357653f137943cf49f26e0569c0fb0fc";
   hasRunfiles = true;
   version = "0.61";
 };
+"highlightlatex" = {
+  revision = 58392;
+  stripPrefix = 0;
+  sha512.run = "befd40ea2efc15015a76f97add004e33da86c628b3bf58277f8a9feff9396544acdc6603cae74e7bb88d2c819656edcbce9897e32f65156f39a0667c087a491d";
+  sha512.doc = "20760262af6cfeccf512ab205fb874b3f1c9b3c15637ed6500bf5b627ba2f319963eee0f76aa480e1257b0cb31288829bfe324f05afde290c3433aa9a018c10d";
+  hasRunfiles = true;
+};
+"hindawi-latex-template" = {
+  revision = 57757;
+  stripPrefix = 0;
+  sha512.run = "1f6651a4aa033a7cff44caff62d01f3dc5dc280bd19d8a0541c78cd35116e9f765517a078f6f6f7a25f9ee42fc4e4e743b86a746e80583b491ac399d46e94ff1";
+  sha512.doc = "459a131616a15431dd489aaa87a23533ae5eb58575f38757a81af8eba425bd4e5c0c0f3a11a3c030d04ecd7d29e9ab08b3f4e270961c4c8e8791c15a497ba7fe";
+  version = "1.0";
+};
+"hindmadurai" = {
+  revision = 57360;
+  stripPrefix = 0;
+  sha512.run = "24a585a4452895c901b41e64613d0bf3b2438c0bdded45b38ec6b61206cca96d5f0dc12ee5fb0073bcce95f208971e0838469e000108bb2d24567b2c239ba936";
+  sha512.doc = "9cde302caf78d14cef5c191c6df0179991d07d8dcf40dd46941a966062d3df2ed5ccd21b6f5e5333bbab9245962cfed9ba75161c16bd8e0a914c231f9f420ef6";
+  hasRunfiles = true;
+  version = "0.0.1";
+};
 "histogr" = {
   revision = 15878;
   stripPrefix = 0;
@@ -16807,14 +17716,32 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "2.0.11";
 };
+"hitreport" = {
+  revision = 58357;
+  stripPrefix = 0;
+  sha512.run = "e91894f8589f029d9cfe58d743d495131c24f0f6d6705d52d34ef34e1cbde5ba6dfd8e256cdd09ad7fa3080c613c3feaeaa15d3ca6ddb51fb82ba0a4bc333b99";
+  sha512.doc = "e7f0b2566042a8442d5fd5cf36e4eeaffdf093a682b8c640ae8b059016997148d17d9449fdfc6026ba169731e0a7e2bb60c525a4ace29e296fbf1a910e887e9f";
+  sha512.source = "7abb2458fa0a46e21c4d7e88699a3768555e954b37d2406a11d26925f520cad6a02e22282367d6787c560d0cecd34a1ecb6e96335b3f22930a083db5aa50e649";
+  hasRunfiles = true;
+  version = "1.0.0";
+};
+"hitszbeamer" = {
+  revision = 54381;
+  stripPrefix = 0;
+  sha512.run = "a90ea22943c228d15f659bc562d79b9e50b157451ee9d06b02cbcdf5a1ef4c1eb353c756e0963d113d6258c1799ab22f71a79905387c78638c01abeb3d936e00";
+  sha512.doc = "84d8a9edf719b1af7ee9d8276d91bfb15306bc3a5632c5c0290412533a5c321c1087bb642104d47137007c9328a346f72c8ab87b9d5f8b94e3ca0b6d2fd18a70";
+  sha512.source = "4e62661f3e51baede19234e9bea18065833ee07d1edb6efbd434d8cc194f04adb3ce48e74f93050a4e9fae1d4b77f5efd0346925b6ead46a344503b9af96a23b";
+  hasRunfiles = true;
+  version = "1.0.0";
+};
 "hitszthesis" = {
-  revision = 53887;
+  revision = 55643;
   stripPrefix = 0;
-  sha512.run = "7bae43ed124d9e37af7d7bed2ec0ea81c9de93f96b1cdde39c292b5f28095e87319ce2fe6b5881baa599b8df6d5bedcebd41acaa2162f38d849b27c098f809b6";
-  sha512.doc = "c0d1220af85f6a1e21f6580f322ef021c387efae3159e319309aceafe8188b0a7dea26cc593ce778e5fcfa458b2a9e0b8fb397df34a0399b00163cb938c77b38";
-  sha512.source = "cfa589b3f4a66a1580d9967c0e2f414b98f67c0ae9b15cdba7b2d12a160554315e9d7e3708c3f0cd631bf02f248ef9e2a97d94ebd225558de1c1b238d09400ba";
+  sha512.run = "2661153465f8b9fc3f4feaf23859ddd0e0da863d0cdc3c0e8b14997e192260cc252ef58d95082b54b9f7299347ec72a9057e11d6656c5e26c9f3e6285baf6484";
+  sha512.doc = "c6d12b3779c8e67050bd77f905741c1a496379f76c001f3348bd9f8fccfb8c25dbb58acfaab76901c1b01fcab260a206ba3a0337411881a21f46b1888b684195";
+  sha512.source = "3a39f1bf764f53cf149db0fde6e60d28fa290acb9c2506e5fee8379642532d51b29e3f0151ec577e258bb95160387a1ff0e9346c05e64cf18882e12f9b542b78";
   hasRunfiles = true;
-  version = "2.1";
+  version = "3.2";
 };
 "hletter" = {
   revision = 30002;
@@ -16833,10 +17760,10 @@ tl: { # no indentation
   version = "0.11";
 };
 "hmtrump" = {
-  revision = 51829;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "62efa57cc09a2792fb755112defae31666d44ef295f75f1f04b3742b63ae5696352bba7369778a88f822ff3e09bca00ed58157df6afdd664f7090c084c28f9c5";
-  sha512.doc = "58a765a12ff3ad55278502d8396c3580f971cb3af772acedd54d29fd47b73716ad543561d7d7f58a97b54c400e827e54bdaae3d6a599999ed12ef8d884d2c7fa";
+  sha512.run = "34b2e61744e3f8cf180a61ca13788834466dad7bdf831e576829e0f6613c5e8a6330075e89516915728a5936a68c14288c79e0f050e5956964d69bab3784d9c6";
+  sha512.doc = "36c1a35cb4efb4dc340a439a921252cbaf48d3f0b7fab0010a7fa22d8b03e7b5b644244410efa9fdc63b5fbf69eb9396cc048908d00210e650941a0647d3f4d3";
   hasRunfiles = true;
   version = "1.2a";
 };
@@ -16879,14 +17806,23 @@ tl: { # no indentation
   sha512.doc = "3873c4714a8a6d221f860a5d0606113c64482b363727067e0017d27e99d73f31cfdac88a799fb1412225baffaecd7bb03dbdc66b607a075b1e4539ffc0df2a9d";
   version = "1.1.2";
 };
+"hopatch" = {
+  revision = 56106;
+  stripPrefix = 0;
+  sha512.run = "1658c78cf7671e821ed38825f8b0a0dd96b268c80afb0e64b27129c08e6c9375a7c8e3e5019361e100cb11691a0d27fe533aa2d000306a38b752114a0eac4d12";
+  sha512.doc = "57441e01ba72ed0fe8439da5b41dd7600ae43eab90e06150e58704c9fac5a0047c6ab3f7d581310972b973006d9a98ee52bf782f0f2fca151c59050e5bc402f3";
+  sha512.source = "30537bb32dc82ccba9df85129db856884e2a948cee2cbe500a6208a5c3481b8f55253d86ed744d939e149c784e5aa6d8f843434629dc39a291762df863ad959d";
+  hasRunfiles = true;
+  version = "1.4";
+};
 "horoscop" = {
-  revision = 30530;
+  revision = 56021;
   stripPrefix = 0;
-  sha512.run = "077b7bc742d0526daf7380a080e640de72d61d5e65cac441d3291e1dfee8c0240be8817328e7080fe410fca9ebc8b5d13e8719ed48bd7d412485d7c5d2f67ce0";
-  sha512.doc = "b7cfdfb772f5423fe4cdcd914a4b0934162ea33542a773b14d91d057efcd05b7febfff46decc3760512b0df95f52180a4de0dea2f0dcc4b504945ee572f832a7";
-  sha512.source = "2e132bba43dce98d65a717f755062ed6f63ecc0775134562d1061fc28d7776fb02baf7502273d1e825306a8a19eecd4d4e94d4603687ebc0df1923b27a213cb1";
+  sha512.run = "d00c8ecbc9c76c2864a52a8bc9f802477e402a59c86789252bce1b8296735035b7b9cbb1c3a18baa76cd1d308d4af53d7d2f64ee9aa37a70e33bf27e1465207a";
+  sha512.doc = "9bdd655263da0847bed65c71e423e301a35e69d7cceacd650c0e9d4be91800c0de5fa0d7aa917a6d5f5abcc585ed031e6ec84ef003bb813be41e3daa3ab95f82";
+  sha512.source = "40627807a0ccda26d1ffd1e2340542644b9d38f5344e427bf33c2e6ef72acbe9de9b7c11366d5ad258361b217373c13a9c8fa88da7f8176af6c738440d054626";
   hasRunfiles = true;
-  version = "0.92";
+  version = "1.01";
 };
 "hpsdiss" = {
   revision = 15878;
@@ -16916,22 +17852,22 @@ tl: { # no indentation
   version = "0.23";
 };
 "hu-berlin-bundle" = {
-  revision = 53196;
+  revision = 57580;
   stripPrefix = 0;
-  sha512.run = "c81c1260c626d46d2b10a060f03b30b797db0f02fe42535e2311b91ec8db7da94c83afc99e0e1e91a4c1a92bcb95ad766ef08d3b08723cd7750fb6b098c0061c";
-  sha512.doc = "61d85bca6fdb3f5d725eac008be499241d98a3a6fea56f24be09aa0fa470c30dc28f44f670e6d9beda8b02986bb40f23bdf90131bd39fc81cae28480caafb1a2";
-  sha512.source = "2e06738bf926085c044bfc22795db7acc63d3e37d40b6a29687d908c0bb2aeda49d3fce88be7cffa27ef81094da4c5d61309659a2876f4085eb9f6ab1214fd52";
+  sha512.run = "78944145098920198c331c54572acea4238fb4344e2ef7b8a53f587b4d1754a0b6b677d7d6ff15ee4edf19b8ecaa08e1728abe00a4a9f0c0300e8b5b11ceff82";
+  sha512.doc = "47cef7dab327828865e2cfdd50873d6b50bd370caeba4b107390895c99a0badfbf7a3778e1f6f2a850ed213e95f1f6a52e0f0ff3fc2f1f1beaebd3c177b82cb9";
+  sha512.source = "08f7fabd4df92fe01790f6cb843ed912dae1e554a15c4cc54d13121a3f61797ee292086de8312a7df50171e385c2b531141a1bbe93bda482eeb936e6eacd4dcc";
   hasRunfiles = true;
-  version = "1.0.4";
+  version = "1.1.1";
 };
 "hulipsum" = {
-  revision = 46803;
+  revision = 56848;
   stripPrefix = 0;
-  sha512.run = "c43867cb608e955254f2c597d3fd9938fe815c1683c9d61dcd1cfff29608b5c391d7374a740646dd915fdcf282d9adb8f83d3dcb6781fbe547b685de81f67143";
-  sha512.doc = "43dcdd731116bd1eac309b1213b3c961dd189f861b8732d73127ba6b4c20d3ea3584f03340ff5973b4aab11744e61069edfe6736d389e1487587d0372591e343";
-  sha512.source = "e1290087087ab8d63d2e2de72cbf641ec71ae362a64faca2e362cccfb05890abc9cd970a2eca1b1c10cdd95760dd82e8bc90fe0e8ef4d99df6cbabba24c80be0";
+  sha512.run = "32e981937f3077fb1310205f17bd10c93ae20c98e098f766b0a90218d81c7708071aa4ca605bfc55da1614116cbd8299f9cf1853426dae04a99669839b2d5c83";
+  sha512.doc = "862a91b902cc8bb0d71efe3933bd0a1b0f3aba1023586595d57cd45e15a0b961cc3c56a59315eee02337f89d35582497dd6894bf3ead060d2863823765211e1f";
+  sha512.source = "6de61158c97297d4c76691f6aa2686d8ff88317de0dcc951a23e6aa93c63a4fecfdcabb74629e2e12ed7878a8a74987834f36faeae3c5fd661bacf99aa7f7962";
   hasRunfiles = true;
-  version = "1.0";
+  version = "1.1";
 };
 "hustthesis" = {
   revision = 42547;
@@ -16942,13 +17878,21 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.4";
 };
+"hvarabic" = {
+  revision = 55643;
+  stripPrefix = 0;
+  sha512.run = "be0e943f505edd7c8e0138ccf101a821791fc7560a6e5afd41c57236fe6fd632c0813162bd9ede8ff021cd5583a739ed7871cc6453a3bae8c0c917740bd06f48";
+  sha512.doc = "1e08c4864ef4ba5f083500b55521995fbf4dbea9c53626ff36bdab438db25f612d5272a2d05b72c7c6eb3a72a946179819b4ab52c7eb79ec699ce69d112b2cc8";
+  hasRunfiles = true;
+  version = "0.01";
+};
 "hvfloat" = {
-  revision = 52010;
+  revision = 58411;
   stripPrefix = 0;
-  sha512.run = "717fd6f3a1b9f7fab0cbbfa929b09e9186637d56092f50d1f0d1603b7b7d67c300587d12e9ec25e73a89b240ac3744bbf232802b2046d34b8606263a7fb6064b";
-  sha512.doc = "98b61ee75c06007773a5119a5c9ded7d0ff9579e016dd024265329193661771ae246b9e0e44c55017dae9754219f2898abf221a4affb6231e0d7ef775fbfc30d";
+  sha512.run = "f4c92c223eb209c3dba56f708ee648d35026658f6e252956b9de2c4d83e2c0069a43ef80bde88556be7a85cd76da3f07954ffcb2376b3b86de7a1f65fdd3bab3";
+  sha512.doc = "2cd49a5aeaf51b185c3c83a02dbb0d76b1c100a5abae8e7a16e9cedec3189431a009c2dd34d36e8bc32f9da5e0150c6b1248c77f96a6049dea90c7af51a59ad1";
   hasRunfiles = true;
-  version = "2.16";
+  version = "2.19";
 };
 "hvindex" = {
   revision = 46051;
@@ -16975,6 +17919,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.10";
 };
+"hypdestopt" = {
+  revision = 56253;
+  stripPrefix = 0;
+  sha512.run = "784fbff599b60abebd3ae794376a65b460c0ac4aa189319e3f245c1feefa5bb501acf75ed345bb6099e301070d0c1e1eaca62129c4e82fae5611526b6aff370d";
+  sha512.doc = "cde846c9c4da226d27bd15881577ad3f1c3f0639c3e37fc86486af40939b0efb2d22d522646136b1b2fe2ebbfd5f2338e347b7476be7289d2a3710d43c2fc8ac";
+  hasRunfiles = true;
+  version = "2.7";
+};
 "hypdvips" = {
   revision = 53197;
   stripPrefix = 0;
@@ -17010,12 +17962,14 @@ tl: { # no indentation
   version = "1.0b";
 };
 "hyperref" = {
-  revision = 53837;
+  revision = 58024;
   stripPrefix = 0;
   deps."atbegshi" = tl."atbegshi";
+  deps."auxhook" = tl."auxhook";
   deps."bitset" = tl."bitset";
   deps."etexcmds" = tl."etexcmds";
   deps."gettitlestring" = tl."gettitlestring";
+  deps."hycolor" = tl."hycolor";
   deps."intcalc" = tl."intcalc";
   deps."kvdefinekeys" = tl."kvdefinekeys";
   deps."kvsetkeys" = tl."kvsetkeys";
@@ -17026,526 +17980,592 @@ tl: { # no indentation
   deps."rerunfilecheck" = tl."rerunfilecheck";
   deps."stringenc" = tl."stringenc";
   deps."url" = tl."url";
-  sha512.run = "2efe03b554745ebfdd0939ce93aef7cb048e296115b07129c5d0f16ebd91658bdf216830ee8ab6fcb06a5da72cdbbb148be65dab10d60a403985f79b262768ae";
-  sha512.doc = "15d78301321738026532c5bcf926f4e20d2eac8b66b87bd1b38b79b3785029f05f8abe4a0300d23f2bc68edd923bc0e49c01a32b81e6493faf3f2f04b2c11881";
-  sha512.source = "94763191d72329744ad2f76c08dfdce5d0b320a31788d13db61402a7d42284b002d35fb70ccb7272547e18a8482947cee1f3e2558a1d08c88990737eb84a3b8b";
+  deps."zapfding" = tl."zapfding";
+  sha512.run = "00c82f1b64272ee6fd3728e29edf8e399a08eb3ffb9fb4fb011f4d0caa38970a351c132fd7096954a32ce9c730d798ba606f59f0ad6bf1754e43462067dd6c49";
+  sha512.doc = "9005eb33d3f8b90199131eb2104fd961fd7d248c17c67af73162a0b90f0b90de1e5f5c79ffce59564f7d19e835765c59b385fb0e9e19ef4935f1de49655b03dc";
+  sha512.source = "be6c8585a89c5c17bc38704251c9800073784e0fdfce6441a14ab804e9de0b23cebfcd7ca94f366cdc12e37b20f571f68b309df483691ebe3e065af4a7876f68";
   hasRunfiles = true;
-  version = "7.00d";
+  version = "7.00k";
 };
 "hyperxmp" = {
-  revision = 50812;
-  stripPrefix = 0;
-  sha512.run = "95ab28036eb17cc540ade3462c3f205eeb07e6dbfbb6d150bff2c8264c3ba344dc7e977391a2c72c0d2d26f51e5cdb56751507b56da8d6862b7a2eb941929694";
-  sha512.doc = "473038ca262432f860decdb67c4fca775bc96ff62da4dcff7b6f6b5c681302f32383c112b46b470fe0d96edc4599b4c2e328fbacab0ba091d9d1e9e5e837d1d4";
-  sha512.source = "bba2d1f71c938ac57423e792ea49cd6008f97a3aeb608359780370f832157ed716759460dd1daefaf6b88af40ab03ab7ccb6237202e8fd7dd43c0504df1e2daf";
+  revision = 57004;
+  sha512.run = "559312539407e1ec8eca1e476d015baa88631b8750249c724a9a99a2bb0644680ddc7b4d9c1aa8cd74dd9ff366b2e1821a01bd6d6eef54a14a72d8877f86b7d7";
+  sha512.doc = "e63bb28383038ca1ac45bf0af92a95e50383b1a9dc3714b3e077a37d92022c4304dd00ab313979c7b7763f2ec6ba8946f6ba71fb09fc0870d02a0ac89be25c53";
+  sha512.source = "8c7aab81881bf79fba919bb752a5d9f5c9653e89755d1c4bff5c076dc24339dc1327de57fb35393c7d80ee0ad46b4c787c81d73cc15d8d3111a580059bc2e361";
   hasRunfiles = true;
-  version = "4.1";
+  version = "5.9";
 };
 "hyph-utf8" = {
-  revision = 51186;
+  revision = 58619;
   stripPrefix = 0;
-  sha512.run = "51fd6b51c1292b74c7eb6e8ec3fa7cbc7e02b8c5d716aa55e378a4103d21f7c4dd5298e2efdc47378d27d5326830b9b94846fe3109d3bbdf60f8e038969ad95e";
-  sha512.doc = "027285084e97c6a51296e532d306dd22d4b43ef02928e06d9d684d0137d0379d4f67f83e0f16e472fe37bd285793615af8bf082bbf7a959d586173a04bc5326d";
-  sha512.source = "10c310af9e16263817c400686b7894d6b62f99c418972e7f494245e2d810e8fa02464ddf7175d64a857a3b1237059df5d63277ff7852993bc0f5e6680c82111c";
+  sha512.run = "dc14e4a6aa57764113b9945c76f3f485f370e6c399196916bea2e0451f8238c577100c0db89e742d1233a16b7f51f56674ef1f458dd04f49e207f62744e8ea47";
+  sha512.doc = "09e4a5ae3b0541b5e6b721f164592c364ca00b0c96986085632461b9201a81fa3f0fe375156a91fdbcdd1f4d5f207d8e7c16d35b6fbe2cd196b4c7025a933d6f";
+  sha512.source = "3dcf4d89d34db765459694329be8cd3182f0021ebbead0ffaab9ae3810c8392b69bab6d0baf433c209becd7eb5ec55b8fdc4c3f145d7792b0c7456129c997430";
   hasRunfiles = true;
 };
 "hyphen-afrikaans" = {
-  revision = 51186;
+  revision = 58609;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "71da785bd33d3c4ebb5315696e1fa9466e188e13a60fd60920e923a49e74b593fdd0f50cbe5350d28921739a0f3e72866e04736d95045a670f53c36b6ae7e83d";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "0f969847994b3b377c752c23f802e8c51b4076efc2d43ad2560a72b83cea3bf0a64d7df18a59afe4289a4547a9f23cf81b0c365a499be85a2467579941fa9700";
   hasRunfiles = true;
 };
 "hyphen-ancientgreek" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "ee5105a58c49f808594d9b2912f85f15617c8187113663d3de3bee4824dec509f8010d89b8610b67c074b38ad7e7aff835994b044dc40c8ba72f2d08e370bb9f";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "3f91560ecf78c5540fd4f5d9890f6aa7a57bcd3a41095985785505b82e40793b91a5da3a01bdc021b11c32db3dd7030a104686b34b496c9094acfb85509cd007";
   hasRunfiles = true;
 };
 "hyphen-arabic" = {
-  revision = 50805;
+  revision = 54568;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "1b43cfa50f074441f757b841b00656ab383ccabf5f2fafd8260e4088de13aabe8e2c3e7099e3d84ef0dff49fd312f17fe11e44892f95b6d7e149e2d4cd023171";
-  hasRunfiles = true;
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "85012062097dd4b624cb39c68b293169a25ab3c9cd15b4474c3a3ffbe4b8ab13d6856c6c70a580da45a2d210952df2d9760682da3917cfd24d17772dc2ccce7f";
 };
 "hyphen-armenian" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "a9963cd663ec8e060619d01516fe326149666d3b34e1f1afaaae42020d17c40885599e485d60d0241c9b3b54bfb9614725d2ff39a9bb5f002a240b2c54d2d57e";
-  sha512.source = "8c2177d07755e7a0255057cbe8f9620badedef5fe70b6945c467b555b079d00b7de42ba4b65be095bafb88b2d867e2cbdded53be5bd5c6b5d6d3cc9b55471584";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "59538414bf5a4701199100fbd9d5247999a36bc28c7c6ef2a28deb9024e01605d48839f00f345c848365853ac3a9f1aab7402f44860532d7a5c099d2f27ee189";
+  sha512.source = "d25e6347545e00a809db1dc8e48ef3fe67678b9ec93a1f3619d2a5a3d786d6e411c2e9f905120e3c5d01d9489c0a83035ce8025836249c88ee768bf07b8e2ca7";
   hasRunfiles = true;
 };
 "hyphen-base" = {
-  revision = 53326;
+  revision = 58630;
   stripPrefix = 0;
-  sha512.run = "f7084afba6bb1e38629f551d3334fa6d66d0fe0a9450980911adf7f3869e46ab486fde0c2fb3ee1dd6358a4d9cc4aa545302e552f1a7b07a0329e6f556c465d1";
+  sha512.run = "15daa4e0004bb55601db85cf796761c1feca5f4668a5894df820a31d107ebefde74fd4d3a997191d9049ecb0fa3f4678a6a0b1fb6506b17bd24546e942d85510";
   hasRunfiles = true;
 };
 "hyphen-basque" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "dc57f3ec18dc77de7f638084dfd42e236fb53cdd4027261f81b1425e89397e3343568558c869bc2def57cadebaa5ad113e9993bbc903b157ef3de88d9b6ce23e";
-  sha512.source = "7828868113962bea3e6465f7d7bfeeb9e1c065180fc11faf8d4c17d855931cddbcf4194d6ff65f0af71edbb6d802ec087aa9f745dca9e311a2391be642d0be99";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "b90680dc5692824d60ca603e8bdd2fcade7cc772c8c0f9538d579704fb16165db2baf0c466ccaff46d92491b4a678fa86a127c0d106dbef6d640dfd2f887663d";
+  sha512.source = "75a20da77fa056c719ecc1f014bb09c67f62f1c4a3abe04b7cadf45c7a4e06e4492cb0d34a8025f19f3ee5e3330e488212885095335d4a7e97baa5b106576223";
   hasRunfiles = true;
 };
 "hyphen-belarusian" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "2da329c3f21b3422294bde8a9cc896aa3e65fb892a71e98a7b836d681b8f3f3b54dd3fa609a3e4c2a46776a0556cfa190aefae10de2f4e20a686c1c15d18c913";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "19b9bd10d2357d0cb6ecc9ddb5e46b65b3c0eec1b2917a78311f255c1609bbb86595ce617d331271a72de934ae4001597f4a04d61b3810e34f3b197b21cab193";
   hasRunfiles = true;
 };
 "hyphen-bulgarian" = {
-  revision = 51186;
+  revision = 58685;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "32a2745a2d94dd306b852ae0d86f26fceda1fafddf0e43c36b323b521b77526ed1a703fdcc1fc7c0548563cdecb80bfe60218c1c939aa5fd595e2ad7ae5552f9";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "9763e6ece053594b01cd9255a8a3551eb6b86ab082f6f9283664e256c55d43b9513b624774a650d83215d656334751f569496030187c1c78e2fe80f2d10f2f1f";
   hasRunfiles = true;
 };
 "hyphen-catalan" = {
-  revision = 51186;
+  revision = 58609;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "86979241d2a216460d2cd53cb5bb5a6df257b0273c4a4f5b1b799397be48ab6783e37fd041cc8071a1433a8af138a4d3a777cc050cbaf4907578e7ce0645ab5c";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "37189e09ee902f2c5145f30180b51211091b07d7d04125c98f1b7c424ad27f6899424b78cd17c559509076eeeb957b4f268fb4130807e7fafb461174fed8200b";
   hasRunfiles = true;
 };
 "hyphen-chinese" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "1b37c95821b46758e2ccb089f3897c1691e76e7c7aa760e45c0305835c8e4719751c53e6a1a28d2153184e6c1aa20bbd4595a4ccd55a7fc196dc36cead9e2f71";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "a78b70095fcfe297e2d85a49108affd5d48451ff4740461eed46d395410a665011614c9a89dff37e9477ee3803de6ebaa68595ac39222f2968a4124355ea7fa7";
   hasRunfiles = true;
 };
 "hyphen-churchslavonic" = {
-  revision = 51186;
+  revision = 58609;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "5a2f3bd482818959c2abb74587c04a46919cda5f7ae627a830e2eff6f51ce233e8a2ec8fad727eadb7d18dfb1d2c19b589d94dbdffb36d7af4307e16ff6d4ab5";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "c44b3f5fec7b44958336dcfb1a43c5b71fd1715262278863f5fcd74d7ec0cc6f1d572b741256d791e6979f15e4b0fcda8058725e27f17e1deb6e5df5fdb007ab";
   hasRunfiles = true;
 };
 "hyphen-coptic" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "737dcf70c32e3d39a8092e69027663e9ee173116c14219dbce52f583bf33015035249d34c8cdea4317cd1d94b658869852aceeae1279ce784e9754149f420465";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "fe36adfe900e23f2b0c3e9c3a3d96b608c49bf597222537d355d6a68e2f87f587db78a1921ab1c9a80ea175529e353524c35e99b83ef7f5515ab7c0aacd2f680";
   hasRunfiles = true;
 };
 "hyphen-croatian" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "97c4b047a94488d43a1542ed77ccaefc6d369051707298a3f86926e0170c63647a40e0dd2eb4363a7d5bf526358ba48e5674a386451a41877c9176f4ba49c994";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "8355d0aa95bb2e72bfc45015f9ae9f6a138f94441387a4daadfec5be4060878f6e69d05eab15432d99c256c1a3f68c122d5c915164fe343459d658a4543ddf42";
   hasRunfiles = true;
 };
 "hyphen-czech" = {
-  revision = 51186;
+  revision = 58609;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "ea97fbb5b273238881865f8499c300d9b1886e921eb50ccf01291c40059cde75088890d4a06cdf2e43d4aaddc7aa43ab82174c0a50097044a69a53a694b47aba";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "f5c8b08c2db716dfa6d36fcf337b4e18372978d04e28ff2c8ed0a0b3866f4bb3efb7b498fedbfde5052fc504b8677ae553c2dce73701e219632d8c5460d7e826";
   hasRunfiles = true;
 };
 "hyphen-danish" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "b579b6d00c0139fc5fd1058b5b1333a231a21738a44152346b69d04b39e02ffd01c530ac89f98d2566d17c765c42461c71985b645fc2e62a380814051d064f03";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "954543a3fb81ff00d9c58315ba59d7a5e3430217dda6c1453bcb7ffb0516025dea4b877eb9d66c9f80ccc69d3d4895bdc6ae1b611d8394435fa647b8b806559d";
   hasRunfiles = true;
 };
 "hyphen-dutch" = {
-  revision = 51186;
+  revision = 58609;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "934483760e5a81a65ac8aae0b7d910b5fdea1a62ef7d9575e1a15027309e19b12cae27fd36f75b5336f6f0b38de33530bc4222e27ff3afe60f8e94b16897b816";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "111371e47ca29069a5a9144d694858dd899b19e2b38d0c793b1e4884c69ae2d62398aacb4cd89e23246fc025e42872875bc808c1f327ac1502fac88c962e6c14";
   hasRunfiles = true;
   version = "1.1";
 };
 "hyphen-english" = {
-  revision = 51186;
+  revision = 58609;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "ce688320bb2cf250f9ef4089db9c5d8af38fc1fc12c289ac87f1508f8f5ac09a5fd0fb9206a1b5d446488e68ec3a7184ae45038501afcdc1cf52dabb6cc7ca50";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "a305cf89138e4327844d43a7e21773e31ac97a4655e4d58ae9a46dc0df565e432330debf704c37b4ad552561357521eba0b676755544ceb9c4f21ace09d6dd2c";
   hasRunfiles = true;
 };
 "hyphen-esperanto" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "da7b5bcf0bd6d6f2a34d5b5330f9a97c73f7dde48b28545f8c6d21b5235156535b2910d386fa9f3b4e68915b81f534421022be345da967bd90723be7997f3b6e";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "ed2976e9fb3eec5d2f0759348b284129e43bf161db571dd21270335388b8aec57e1b8393bc9b246f8a6e9cde22f93a4cb3c1a03dcadd64fdda3d70b576789050";
   hasRunfiles = true;
 };
 "hyphen-estonian" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "899452321c4d907d7f811f044d9d8552d522ed53446419f59a5f8668dae977a3bad3b1dc02bba05c803cfff9a61b4394fa7bf879e1c85a8ff7400eef672d6d64";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "0eb91153214aaca8c3b5816f5315f9afdeb7c19521c87c79ea2b35e82217bfb23c8bb774baf810206f4413fc663e441ebe6b4962880ca0dbcda9209d2acce3b8";
   hasRunfiles = true;
 };
 "hyphen-ethiopic" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "da5ddbbb8dfd8cc8a0b02ac5d8a7b9056d5f5d3a809b4afa41032c5288dbb3d92ef60fc7edb0196448f055aec0770687cf54490a6a5b99d7a3608318c9900006";
-  sha512.source = "0a68114396d036f1a3e63507a381861865ca7c69ed56de3795cdffad134c76a428bfa1dfbf45edc5456d02aac917a4d8690938f935594450a968ff3471c82923";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "a1532603758e7f774acba7c13ee74f0046ff187598ca86b2e93b91da31317f03fdbab5d4d7c0814978fb2ac159bd6e5a48e6e734c19758da21ad0a031844f52b";
+  sha512.source = "9d6c8c1b0ce5c40d388937328461336a97fcf1fe780fa6198e029f12ef118d9d98f6eec03ea217743851f0217217d6548298df9336fcf33e6c4c196bbdb9eef0";
   hasRunfiles = true;
 };
 "hyphen-farsi" = {
-  revision = 50805;
+  revision = 54568;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "196bd0331cb51550437f634bc37c426c8006a297a6f16d7c43dc291c92f3a635d5a0825a96f2b4be0d30e9b850422fabf3f404a262eba1f65807c59ad8213e86";
-  hasRunfiles = true;
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "5b02582769a55bb07d81e748e83170c16aca1c33b0a240cf547fa9c2212f2be52223e258229c760ddc5dd730419bd9e761614cc4fb3b3ba8102841bb779af511";
 };
 "hyphen-finnish" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "29e384aad09ab8a636ee47433f83a0147cb4c55698f821b5d40cef74cc265c85c15903d84d721a6bc4921dd0dce0347550cedaaa4bdc58c85dc93043e6a61738";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "6aa171d77952165cdcb1b667885f16dd382124ed70ed1db80a9a89553d972720d8ff5f0da1b36669e02c3030d9ff362ab77ba1fa2ba45cddfb460018f0c0191d";
   hasRunfiles = true;
 };
 "hyphen-french" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "625087254c231e68c1f9abecbc3b315c08021c22d9c0332ae07eea8e600b800b12ac5147ce11488ec99d6368d695c0766edbd78115c8d5ac6cd6fb71478723d7";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "b9d2d05311a90f4caa6c4e8aa8a2e80e9c15fc3552f03f0ac6ec70d386610612715deb6e778247248355a3a209fb2413d6d2aee12f18bc35d5a334870b612507";
   hasRunfiles = true;
 };
 "hyphen-friulan" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "fa724316ce1babb63981a51835bae3409b23e23bc0a65cb1bf8715073d076659abf8b4ae942b79257a92080857b67f807d7cc56859c45d8d4874dd0c9b26f001";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "d1775a9b6e6b7fa155e44c93271e2ccb41bd1ec143ea0cf624841ad48a123db924dd134e6e60b862a808ad2058ed5b86cb34d98e5728b9dccd3997ba2f06932e";
   hasRunfiles = true;
 };
 "hyphen-galician" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "fc4bbfc8f824554487670e115d9844cdab69e4410d8db6382c87386513627a2a96c3a5fe1278102704abdff04f859a51db79316f695ee259398723a32d4fd64a";
-  sha512.source = "ae42aea21c42d2a823e0b1fb8d1a595681bfd797fd5205516b5221d2c80845ead8dd7a9d80c205856a4c701a942d1dfa407150edb0a4236e9a069f02d2bfff17";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "2d707542f80dc94ad20c0daa776df23b773a5e6ccb261e11db675e1e89f5f303a4f5cd50d97f491cc7ea8b0f3c0d3f6391707812a95d4e72cca3afa7815e566f";
+  sha512.source = "b9925168b1f9ae5139ffc3bd34810cc05a27475cfae31e98fd0d7618575fc994ca95d7479506024abec2c33bb20121811244d69c490df18a29d6c93fe02174c6";
   hasRunfiles = true;
 };
 "hyphen-georgian" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "ac68c0ce6febdf76178e9fb88b88aecac9ad4cf25977054a8276527d12ab55da5be080b01fcc8111ca4996af5d76c26c7f883f9bde5cbd38140e9785ef45713c";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "edaf041a2f92b0f7dbf28042c81838e8fd781cf9c3ad529c314227c94917ce4e8728ca676f8bd42e2a81bae76b11aabc1e22896e3ef9cd38ca4b718bc58fa0cb";
   hasRunfiles = true;
 };
 "hyphen-german" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
-  deps."hyph-utf8" = tl."hyph-utf8";
   deps."dehyph" = tl."dehyph";
-  sha512.run = "e3437e3838dde9450c755e442b5d90766af9b2c63e9a806bf4aca97c6527fdf5ca38e0a057c8241ba3706508ad9cb5bd4562ce30c5965efda282a66c83829810";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "bea7d4605b1a18d3e7845ccaa06951b62178b3abbdc13dc59d3cbece3fa95fc4fba7e4d60dd253cd9fc022f804975cae5c4996fb99d3037c29971ade9984abce";
   hasRunfiles = true;
 };
 "hyphen-greek" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "7af2a6fe7f302dc537f6087c004fd38ce9269679913765c08820c6d7e060b14ae104ba8ce0ef2c54131c62a3731c926a7c521a5ff9188b622c6fb2bf588b410f";
-  sha512.doc = "289e4bae20e0c52e7ccc4156908fef8639b2f803381bc362d1fb6a764e708e7a345fb14d2614ef1d46617e63f0cb4b4852c336a78f34af30ec66dcf9601599bb";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "3da84f41aaf7e5d4be0ce609e4d119e65c9189ff6662051cb7e879e9e373d990ef1c59ac7cfead1bdbc6e55b52d4b3ed28d157b22dbec43e5226f16872d5a7de";
+  sha512.doc = "865aaf1f9f0fbe130f9006e41ef677713667832745fc24c28cffe805a540a19f7104a3f0fef3258ba0e16c1c456959904887899a4c584338c58de7fcc80c5419";
   hasRunfiles = true;
   version = "5";
 };
 "hyphen-hungarian" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "54d8a0c0ae2040934f14bf7ba7778108eaafeb5408e448d23c72e2e9a3cd79251b06b5a015fe2a74a9264de7100fc9b9f7f66e89b89c731198aec5b0a160430d";
-  sha512.doc = "1786a4b29cfaaa1b0f3cd2d9b78b980490e2fa5848e6f68f7c9b23d25410eb7aa6ea0dcdd2db0e2270e804746d4523a7a4f40ec53b890acf8a894ae5489fcfc9";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "868a4c3f4d0eda078054026bd1ec35e05c2f4013e093bf58147bfa2d861814242b55a900ce60384767558c9552ff9d41cf447e2a157bae83bd2877251012d96b";
+  sha512.doc = "164180f0485e16a49ba83dcb4721902e8a29f399032d4f5a59d55e424b8178a25dedd9fb99919d9d772142342fb78fe0dbf7a5303382a0b7feae4a381b76f8bb";
   hasRunfiles = true;
 };
 "hyphen-icelandic" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "32faa121a9a1ae6d21551b01fc953041da3b1d7beee179daf0fcb022a99c15dc519ff2d32d3e8f3294e6b9d7cd5be07a91d21f7422fb85bac2a890835784c588";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "69add7ccde189e86810e2a82692a260de9a9fcc0ba011352881d202d4f4c94c4dbd84fe36dff40ef9b9ad3e8e990947cc61022307790f13cad56744f3ef5e41f";
   hasRunfiles = true;
 };
 "hyphen-indic" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "857d447939444570c5d34639789f2846d33e11e434fb708c2748d275b0673de72b001e6c6c724271496cecae5814e02fa0a96f765cec8df27b719a9e686e2a07";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "765be1c13ef3445b056b61c24460cc2f18bad038c04541bf4773c7f61c6d26be25d3079b260a1b9623e2f01155ec52eb5bc87b0ea9234e50a5ca24dd8a7a5937";
   hasRunfiles = true;
 };
 "hyphen-indonesian" = {
-  revision = 51186;
+  revision = 58609;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "53cc5ef4877c98b5507cf1952cabc009c0c74e3a96bba42cd5742626ba911145ed44cb711cb5f19d37fe93f15e26eceb3027bc6d22a542065d6bd1211b8357e0";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "3f04a63010c02d77cb229c90aec9f1079557493958573be9ce992ac5ae3c229f01f9abc0cac785d9340ff48aa169a01f8b327ecb2e255bef57f1fe85d04d1d2a";
   hasRunfiles = true;
 };
 "hyphen-interlingua" = {
-  revision = 51186;
+  revision = 58609;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "f341dede7a02b24952a18dd26310386f9dfeea3ceddf6cae3e589528991fcf3fba889096b920bd85a20f5405150d374e2f35f520fba693afba52d071765e9493";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "dfed82ea70f25d452726b5cd03d8e060bddc23cbbc5deebab2ddad93ce6744c38d357327fbe570bf7a1444f62cee0cc422a6c7d066d6693a238d851b4fe46e32";
   hasRunfiles = true;
 };
 "hyphen-irish" = {
-  revision = 51186;
+  revision = 58609;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "f0f577439fcc997b0b634c7fab538d56438a670f4f08b7189bddef7d5a88fd842c4595332544ea4ff2bec70d55c67a8684de170db0388a13251f3f5b2079847c";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "478a77c4ab8231a3041c3427075f16c072f58a394eced8ff0cd5da6544f3f2fd65722f33fd8344e18060c96f09bd18b90af71f8508639fc9c59d29d704d9e348";
   hasRunfiles = true;
 };
 "hyphen-italian" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "f873581b4e5f674e4cd37101d89fb3d5099930bff904d2c7a55512ac4dc7dc48e050cd18615bfebc269d894bb46b65642badc7de37e95e6730d8312afff95b65";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "4e79ee31893d6c948a3aac8588d4beb75d89f89df973b1e39cd63894e008af55f8dca774194d7eb105fb0aef692b17bb645d5bd85cca7debafd74aabf241bc30";
   hasRunfiles = true;
   version = "4.8g";
 };
 "hyphen-kurmanji" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "fb7bc7353bc20cac4a76330afda172f56048374dc231df8cb171f6a8fdcfb05ffe720ea358603df991e6ea34cf83495e573a95b4195f545ca68fce7aff0f5679";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "e5114da178fc841b1079130c01f8729ac94f0e3592dbd479f44a978ea009fd75b410d6130d9badd6227d115d8f6dad3ed4b553dbfbf4f80be5d1c2adf108e2fa";
   hasRunfiles = true;
 };
 "hyphen-latin" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "2b1c40f68c25421cab3fd6c9b805c509686c4cefb5e8de18490fcbe8a4556892fa4e4b692ef26ef388a7a9a7cf690828fcd5a0ff3d2c374276b4a12087e1d58f";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "9d0db7fcad4ca764379957fa22f9daede79898bcacfbdb62abe54318a52dd82a66f8e39542c18008e3f6b6d0db284b1e9b891531d3c8f3c9cf22c764e83d57b3";
   hasRunfiles = true;
   version = "3.1";
 };
 "hyphen-latvian" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "6ebb6611f20d90ffc57d4f67c5fc4987e31da62979342dd0143fb51126a6400c634e9bbabf4b2383ad71619833280c30fc22175d394800ad5960b33434c38c52";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "85aeadb0cb3c5de9ef48057132ccd958d17f014b07b56b9ebe2186a709c4e7646fad260e156718e43ec3eac88681654f88c9b53a6d71fb3eaee934dcb4439ed9";
   hasRunfiles = true;
 };
 "hyphen-lithuanian" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
+  deps."hyph-utf8" = tl."hyph-utf8";
   deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "7a691e3c55c768b9ea5ef13552dc42025ab613df0a0d5c0d54aad58b63da11a93e59bc53e6a8211d5e054cbea8500846da01e9619bbee723d648e2d369a49d55";
+  hasRunfiles = true;
+};
+"hyphen-macedonian" = {
+  revision = 58652;
+  stripPrefix = 0;
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "7f1fc26d4554abbfeeb1da1f0eda68ee163589f519e3eee958fe1706d2dac7ace451da18e0b1ca8078a00319e2bf6ec6da8a9bd75d5d29824760194c1d9cac87";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "f88208291212874df493151581205d1b270b2d4278176c42e11edac9b344b73c2ee859f93b6947e4a6003a00abc4d3753024add9caf84f114c8a0cec72aa8c8d";
   hasRunfiles = true;
 };
 "hyphen-mongolian" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "0a4f14b167afc1bb4b017978a61aacc40b27ab13f26aae90f3d970a5ec97f2d8b2ddda992bf83488821d2fc58238c4d4197f91586e36f3812271d2ff5ef66663";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "159562a8feb25918bc422e7dc78a46423c7fff2f3c61016a0162761411999a5555be3c6e36cf967d5034f65c12f4b0834ae0c0423c2f3ab17a65034b1803dc72";
   hasRunfiles = true;
 };
 "hyphen-norwegian" = {
-  revision = 51186;
+  revision = 58609;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "3bb97aef0042c3d863659a3f8921290ec9aab46f731a6908262f7f35f3843a4b2a0caaaa1d373d643e1bea43ddd57ad85b3c0fbb9a576461bcbe21fa8a067759";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "8b02e90bfcdf3c6d4bd1966b21e0512069f1749c638d537e9553f68e61e0bc325db8d3b462f45650db4376c7a769c2cde3e0c0601d7de272898a23cd2251c064";
   hasRunfiles = true;
 };
 "hyphen-occitan" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "8bf003921d4b93a73013e7511d3ea0a11f1f9a1f927e46ab59e65952e7e51ccac69ccd52382e37785a1136426835d7d88ca71241b29ecf7a1d582e2294f449d7";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "b0743d1f6083dac7a347e22aed19d0c5d76119582e4862557a55b817b17dddaa69a2150f14daf6b08689278dd61b27c1b6ed45df5601dd6327bf185a7a46a5c6";
   hasRunfiles = true;
 };
 "hyphen-piedmontese" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "cb302bfcca925b09ee9ea9f24014249ffc48dfbe16d3ed8c4a4503c036df1a15af457e1a1a3069d4f8f00c511d4099cf1a3541854a992b0ab5f0825ae1df378b";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "fa7fc73edd582ba20b8236507385f0a30f477bb9c79e35fea56aa4020be966b9c4a16a327848dd051fa4cf6e6117ef8a51eb92ed6cb72f6993cb290fa5cd5ca3";
   hasRunfiles = true;
 };
 "hyphen-polish" = {
-  revision = 51186;
+  revision = 58609;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "c36d67a9ed57e6fd0d683ec1c8b86ee6e1336ddf8103c430d074b71b0710a1fe64e7915de32eb3a789aa42b0576d286e11cff966024e6eac83b80315101df529";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "5580b3865ff8d20d475cb962b0257b909ff0e410b6776cb8153145fb0ee42b2f777069413bc6b3622c8c52318aba1ba836210e8972c5b6a47ef978c24fc8848a";
   hasRunfiles = true;
-  version = "3.0a";
+  version = "3.0b";
 };
 "hyphen-portuguese" = {
-  revision = 51186;
+  revision = 58609;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "ce865fa130f7d616aa0dfaf3bdae399c360f624245fc4af156ef4deeed254cb66b549cc64ae5727bb5f538ad9b2613bd2b4ff64ac0345b8ba59dd172e778e01d";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "9d9ab3e616522ab9837bb7c7509127f998c442e96f96ee6b6fc0fdc9ac53fd03319d0c0ce28e23a35f1ae0ebb840cdeb19e8ab6444549c33059b28e7b307486e";
   hasRunfiles = true;
 };
 "hyphen-romanian" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "2c49bc2a8ab1dec522ee37a0e235b4dcb327545b072fbda972c68c4dd7faf8bd029b74316861168352effcfdcf022e37c42d079f71f5e719764ea2ad50d294e4";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "124a93a633731dc1b3d6cbf2fc9b8489bf0737911a0c25ea44dbdfffa07c165ba5804dfd7e9cbe0be3b6eceb9fd6e95daefcae2356ee140f644416bbe1b13507";
   hasRunfiles = true;
 };
 "hyphen-romansh" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "d2d107149d51fbb76813ae495127b1965002d38494cf933adfd17fa613db8658fb28d5303222e289e81c56639ff40001b73804474f7d8b09a4bf763286d5dddd";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "a69d3881493c70cfd58e3d79ed76ce6f18bbcb43e1683f31270eafeb743b366a3c52c9945ff94db333e88ca18145263ba74002f5e78bb42d7aefa48c66af7955";
   hasRunfiles = true;
 };
 "hyphen-russian" = {
-  revision = 51186;
+  revision = 58609;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
+  deps."hyphen-base" = tl."hyphen-base";
   deps."ruhyphen" = tl."ruhyphen";
-  sha512.run = "b13290533a666b3377f9d0fad9d441f6475a3363e32e3675ab836402ed03083b4a1ddbc2fed946e7e7d048a4ef9a8e6d13ece7c98e77a828af3ba6e7ef14c0cb";
+  hasHyphens = true;
+  sha512.run = "f17852dffbb8f5c337b8316b92c2b0a60a318df491231047d9c0930d55d8b2be3274ec94d0d87085d53e06e89c585d47250f046300bf3890ce751f6f2052d348";
   hasRunfiles = true;
 };
 "hyphen-sanskrit" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "5dc85b741c8658af4c9ed02a52c394be315e2a076f91a98ca44254bd7006f585c44539f1a911b6d63fab17e2dee7ef89cee74c878348115eeb9d7aec2e253595";
-  sha512.doc = "b93af3eae61de575fa8909a8cf39bd190585ac702577c76df655ca94fdc3d1d5206d4017c80641e5351b894cef9d214ed18c3d5cb1a30f5e06388445724c28fa";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "e84b6ca93e922c9c6edf03f4dbec1fae9eef2462379ef2fd0f3508a5048b54819c5ba12e0d76bafe1336666ca74ba95e27f63224fa048068bc515f3bc41f6eba";
+  sha512.doc = "95c6ae15687118ffc9019c8634347a602e6590b4a1d18bc060e57fe548a81f097070322975be1f62fa2685c5affff7f31b4854b0ec941bbcb9377ecf16986cea";
   hasRunfiles = true;
 };
 "hyphen-serbian" = {
-  revision = 51186;
+  revision = 58609;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "979ec2b533f3bc90b672a856237489b78e11e1f78782d0c14320ad38da08514ecbdc1b7d3d42930280324c36717c11fd8e3d57bfea74e3fe257fdd84138a144e";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "390aa9c116b6db7b362fc57aa0758a4c489c5fe33c718fb37675b17a9772a463ce532a2ace3e1ef90275b4afef5ea8d6cff71a7abe625d84e3f461c115306452";
   hasRunfiles = true;
   version = "1.0a";
 };
 "hyphen-slovak" = {
-  revision = 51186;
+  revision = 58609;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "08ddbdfd97d005f69829477f0f269c168dcf68ac2adc278eb91db91a9e61bd8ddcd3890781ddacd623a12aa6698e6a46651d8e26bf9bff3a817c655448f1747e";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "a0786980e0cda7029a72075023520acdc998b83226e85deb0b8186ee4293560321517d507f74fbe68f1d68a16cd8af67aae68baead9176f9cc687bcc7d0a72e1";
   hasRunfiles = true;
 };
 "hyphen-slovenian" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "3caab81e3d46b889c1f72bf4a2bbac5a03ae6581eadc919f21eac47af8defab69a7fe3a8e975d8f578cf4ec6c56458f78428ae621fbb2334a605b3480426a833";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "a605c9149ae452df8b2c25aa0f6bcdde53150e4485147a065f1f56c9740c3544c5c7f9c6049aea913916a62aabaf40777cf6f0f76a858e485c0bd09826a6ef5b";
   hasRunfiles = true;
 };
 "hyphen-spanish" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "171417a27ac9303f124cbfe5e2c788e11148426a16336f2b2f3f9651c67090b6a72f32ed681a7415f886d5e18f6075c6ee0dd421b22240d6a130897865953488";
-  sha512.doc = "e52e6f19134c653772b6b36a37b00a6a1b83ccc93716eeb9215b1d7677a1df5d203493bceeed312cd668e4de123249b41368b4c8d0479684b9b5099ac5ec9f75";
-  sha512.source = "3e010822e51974cb70c8e551d0bf31b13c754d3290f04e8829dca6642a0135636255a578bf50ed2642d3aa383bc6acadcf11d25c8184833d692817e518a83e84";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "d6783537ff44a326b83c2004afd63f5bdbd162fa4865138c2e6d34c9e6a103ac41dd7b382454646b09c74970f8e0d5827a5f4af617936f74fd300b2054a096d4";
+  sha512.doc = "263fd9480c5f225c7e36169b86e846baa64745b83c1072c9602e873f2e7cf8e63b07ab85b29e9d4263656faff58a39fe83e1eba34517b8ba34720f189c8e7f43";
+  sha512.source = "b1ceb7602a46ecab68fb767ffb154f0dea9626d81bf6c46dd43be328204f72141842c81efda9d7d51997ed25356746e345f7cd9f9ed88ac2f99746794becb75d";
   hasRunfiles = true;
-  version = "4.5";
+  version = "5.0";
 };
 "hyphen-swedish" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "bfacb0ec44c522f993000db583d495107da1d98ea905feccf36a3fc517058feccc8f4868065bedcb6dc64f0c6af7f1a2cb082179b6d86f15befb4c712bf5bd31";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "5f993ae6b22eadb87b6a1839bfa7d78a0dccc1107c5afbec8c248ed001018da38bb179e29f2430cffa90283221b20c5475346a8d5566edf16152266257f2a37d";
   hasRunfiles = true;
 };
 "hyphen-thai" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "4c47391ca4cde10be3bc50594eaf506172c0cc12066cb028073845868639e1ad18dc6d57dc418176695df1a7cd7d8ad29f3b4c007c746a39026646dbf2b07123";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "8336eee03250859ab4328ad3c1fe437d2af688ef56b43be49c45838965ffe033befa84cdf600e9f48cdf60cbbfbff44450c830bd4c34556f680c5096ed3aecc4";
   hasRunfiles = true;
 };
 "hyphen-turkish" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "d65df4ad0364fb7da5cebe9f39a2351671cecc49d050882399630975c5ac468dd1e41de9609c0581322937dd683056335fd78c7bbb1423610441e0bf4acfdb72";
-  sha512.source = "27a469eccbe748ded0466c4034dfaf280bff3e6448aa828f2411bad7b9ac8e875f172eeeadd077670f851e4650600c70b222b6325dfc3d362b6737bc988a20d3";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "5c7023e01bf59af4d36bd451f51ae00c445711c7ecf109c9d835f1d689446d7b0b1b2627b7f9e84e4f4a8ceff52227ff280ac64481e1d29d538a30e093dace85";
+  sha512.source = "2aa80889b9657b03b6beb6510b6790fba13811b97abbac186eaf4d3f40212b41db0dd2d21583429820faad558b0415a09aa8254d2edd96812cf6396fb18ccf5c";
   hasRunfiles = true;
 };
 "hyphen-turkmen" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "e4595aff01856c97ec6bb178a0b045868e2edcdfa23cf24e20942b4130ce46ad42d7ce6f13edc7c7bdec2482b29d21a0137f0cc8b77c85e044d85fe3955aeacb";
-  sha512.source = "dc3e3f607c25829dbaa3193ea92ea16dc86503189eb19d66738c0148507f3db9cbff0b2a0700a19ed994e7ad518aa0938c1fb4fb28bf8d6c14c2b82cc130e6da";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "c984bb7f09c5816c36a7a790f16df1750ee90f36e2130994ecd1db63f26afb650245985699a80da9b4d7004ad67106771d8c7b79262438369aee3f52fd8374cf";
+  sha512.source = "a496f681db0b4b85d82ec1dd60c057f63b6d1c1b52d391e7bee98d3d6e1fb596701c91f2ca400d0df13b96ec7a43d275646b7d2874fe1e4efc9d9b2b47f6cc5d";
   hasRunfiles = true;
 };
 "hyphen-ukrainian" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
+  deps."hyphen-base" = tl."hyphen-base";
   deps."ukrhyph" = tl."ukrhyph";
-  sha512.run = "4aa80aa8365598bdcae2f7dca2a1c7ec7b1f4bf4a5ee434e2e8684263478e6b1346d18c64756fd40c7007f73d3e69c71f2868862cae0c983d9c9eb9e645ce237";
+  hasHyphens = true;
+  sha512.run = "05a9111b358c659159c6edfd38b9ce3d78febd794cc82968dc3e2acdc3612786304721fbd07f00f0a8278f4c2e46a1bfad821b5da45e60546d6acb5bf9068d08";
   hasRunfiles = true;
 };
 "hyphen-uppersorbian" = {
-  revision = 51186;
+  revision = 58609;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "b60b36ae0816f11b6064285d79098ad6aac605bc1b20bd97191b97bb10a28b445e0e71d1ea2476c0731a72d96c20d114d640c3d4471d53a8b6726dc089377a0b";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "b2cb1bcd953ffabbd3f5acd8c72e9c60415fd300004de56ee446fc77d381aac1db65d613a2f591d3d0e45f2a12ff5340457ae3061b4c77de502923932383bdcb";
   hasRunfiles = true;
 };
 "hyphen-welsh" = {
-  revision = 51186;
+  revision = 58652;
   stripPrefix = 0;
-  deps."hyphen-base" = tl."hyphen-base";
   deps."hyph-utf8" = tl."hyph-utf8";
-  sha512.run = "e4b61366f67645bb8ed2b848a246cab0c267dc626c7a033627d603c91b7061259d2b95e360f15672aa03197b198c4a45152df4dc88f923fdbf8c1ddf92a5f33a";
+  deps."hyphen-base" = tl."hyphen-base";
+  hasHyphens = true;
+  sha512.run = "12a23e0b9d00eb4381e3c97ecbb449faf5a73b755a17fc0301f1cbad5d0babb370aeec16dcdd316cefb56e142873abaa685288b1a1d3c7dcb76a07a9ef127ac6";
   hasRunfiles = true;
 };
 "hyphenat" = {
@@ -17558,10 +18578,10 @@ tl: { # no indentation
   version = "2.3c";
 };
 "hyphenex" = {
-  revision = 37354;
+  revision = 57387;
   stripPrefix = 0;
-  sha512.run = "dfa1f625e736c2c4125209552f084fbd5d64109db5dd5b8f37b5add3fce90984bfa5db855b581396ffad20b1f5a3461cae01e031c086f7db5dc98203bb7bf8d9";
-  sha512.source = "cedcf83033a5aaebb44a8270b5e670b9db2fba2b8f65925cddee4684bf50fee5dcadb02921b04288d02c91ca3d003c8da143c7bb1974e7af26b1f392dfd4283f";
+  sha512.run = "77ad574e0786d7cd8e7d731fa7666a6a531b29a914759ecbb9b5d6e5f62e9ec9027aae7e3b9ffd62bd918bb0354c41e865779b044381bc1b7256528eddb34754";
+  sha512.source = "d93fbc4f3f1a711967f40bbb492e9f6497b7a91b90d42eab92f3815fd0d15b239286c96519acff2d6609be00809a86846ba2cea4bd94719a35aae024e5785a4c";
   hasRunfiles = true;
 };
 "hyplain" = {
@@ -17572,6 +18592,13 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.0";
 };
+"ibarra" = {
+  revision = 55820;
+  stripPrefix = 0;
+  sha512.run = "f02661a9cb6b3004bef8ed740cf9b1921080b4e332600e83d2d8c0da1ecbc5a895f026fa178e9b729d3b59457e778d4a64de8e2111e2dae51feb09ae9b2ddfd9";
+  sha512.doc = "2f39336d80282c1bf03cd4749b04ef0da513cd1fcae54cce7d64f017ae284c79423b5f17502742677922a9ab9052f2e8053efa70cae2956cc30c6eba1e2ea4a1";
+  hasRunfiles = true;
+};
 "ibycus-babel" = {
   revision = 15878;
   stripPrefix = 0;
@@ -17590,13 +18617,13 @@ tl: { # no indentation
   version = "4.5";
 };
 "icite" = {
-  revision = 50429;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "1a71e185bf65c65f64ffe49d4b7cda415bdec89a7f92fa45914c0adccc2b1430f0022f9c789c2e13c2acb0a780ef90360a22247ba2aecc171a3fc6e06b8f05b0";
-  sha512.doc = "efad2e573358b64b6d6146fa80011b033e4acd7435d9b0e32778240cf8051c732f1617614cd4ab56c91a03260b203084aa5c15c03208bc86686ad18d2c75e93c";
-  sha512.source = "a0c728f3896f269ab6f91945e1ac984bd3b6774525567f8f196c46ea8edba2cc5f6e6886b26a9ecbd2b1452e9980ccf4e3ae7a7a5dee852c073cb9349a6a874e";
+  sha512.run = "cee4e7f2fd3a007c79966520058ae3db836fca0d9b03dc264d2889ac399bfc7db58e11f3d65de4eae8fa378a774908d36e789441fc244b54c86886fe568cd2d2";
+  sha512.doc = "09c862c89133912f7ed714678b3e1d041e529f4c8123e0241e1d0f531bcdd3036f9307ec8a34cc1f25df8cb38b5a8b5213f4a486204b21e5481f65ca1949db33";
+  sha512.source = "068a63ac822952f6a14eb12362cb94f4f8ef3ed877ef7e40f55e0a234a1736c6fa60276ba80c793c15562889a1cf20caec6baf67daa5e20a3c46cee2c10f6474";
   hasRunfiles = true;
-  version = "1.2";
+  version = "1.3a";
 };
 "icsv" = {
   revision = 15878;
@@ -17616,10 +18643,10 @@ tl: { # no indentation
   version = "0.1.0";
 };
 "idxcmds" = {
-  revision = 38115;
+  revision = 54554;
   stripPrefix = 0;
-  sha512.run = "ec7d58e5f52472b0d359f84afcba179ce3428638ad8c45293b7de2346d4ba84c3b22792bec27a10328dee9f0f186c2536d562ec47e9f6aa2103e708788a553f3";
-  sha512.doc = "9c55acca21ba10f051c678f0e59d68f4a1231c744d7b470f7a905c81226a23ae0eee03b02b9466b5fb6c92af1e884a95d1f6644401f83a50441b7c77becf0874";
+  sha512.run = "ba1737eac5f6985ab4a0bb25aece07fd0668533ba046d9f980e4c4ba4862c9045e19c06a477e498df027fc0cc2af5503683389377287d58ae89690c58b5f6683";
+  sha512.doc = "1894abf19f05ea74aad0ac1fed2409478dac130a019a44d6bf2c909cb1de66e4c9ec543c75db6d9238982f51af066a4287bd8827f89a59d3d9ba6d3f79aed4cf";
   hasRunfiles = true;
   version = "0.2c";
 };
@@ -17683,11 +18710,11 @@ tl: { # no indentation
   version = "0.3";
 };
 "ifoddpage" = {
-  revision = 40726;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "f6ab9abdef81cbcca8728bac7e1f94e2b72e5db6a8e17ab13c8d56477e98fcf7fb20f006012c3a3cf815378d8bc9c5cc4d39e2767b7d634d1ad99bc24dc1d1d3";
-  sha512.doc = "80f1431a4da340b0b2ba6f396c618e2923457e95b5de01018ef7f95937e55814e3c3e96b2f45f18e971fddd29021a16852b57bafd0b1ba50cf2626b4b784541e";
-  sha512.source = "dabf25b7588f3fe4dc92c4a4e20f2293ef62878d60f1ffa01e1e9efe564b930d7cdfeada5f0e6765a88c46d55aacbbd1dc692ca26168c86690db6c229b79836e";
+  sha512.run = "f56738031814ba4d980455765212f074979b95ccfe62b1661e2017a839bc774b5423f994196a23e763644d40b9842221a5c862f9b427f335f5788d34bbcb9acb";
+  sha512.doc = "e9fdf6ca02d33a52e89046f4d648204a0e560d97e9a12aa5742971e654bdc05867460ec10cbdb5441fc66ba02d2e078007593d9c4c898f290e61965eb6111007";
+  sha512.source = "d6e471eb7014a93a4593234f3f2c81fcd1b7a758d73bd3b659c86812304e9eb9a9a29b8a653653e4672a79f75c2399bdf30491069bdc26c0e45ce9834fd8de40";
   hasRunfiles = true;
   version = "1.1";
 };
@@ -17716,12 +18743,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "iftex" = {
-  revision = 52711;
+  revision = 56594;
   stripPrefix = 0;
-  sha512.run = "a40cf1fbcef9af4cae18c045c051fd63fa6e1403ae83b12d635317bd60e7f677fa0b13252ed272a8855351bcf139b2bdac076a3c74b5bd93059a4478bb2d8b48";
-  sha512.doc = "f499cb46462f43e89d76a84f8c32983bd332a502764c8e0a5e88ecc696c35470f663719e443a36b0740cca40a5b8d9e03aeb8f1a93bc375900eae9f2a05607b6";
+  sha512.run = "07e15945295e3d5c2f6a6e4087d16f1f5ca6014f2ae98bfd25a18d32efd07c4da4542676fa164ecdbe326d478b1370337577638ed2031cdb9f0b2b1961b86855";
+  sha512.doc = "a0497c07ddc2087b8291c9f017101950bb774ae387db082497b859491e38d4fe22d7f69ee9bc093ee9d70d7b67796fdbe643b76322f5fa3577aba5733c7aa105";
   hasRunfiles = true;
-  version = "1.0c";
+  version = "1.0d";
 };
 "ifthenx" = {
   revision = 25819;
@@ -17805,22 +18832,25 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "impatient" = {
-  revision = 53321;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "dbb5efd07c2a88643c5b49a9d835061ac13c1dbf4356769b30b7d7ceff8c29d75b3abc00dcacc9cc901a449bf18b95781916f9b33c3917e86310b0923033301c";
-  sha512.doc = "7558bb2138f0b09179d3979f46328366a410a540e51aa59380c6c5107067dd5b9b350be2f38255a271f75b01bf4669fd64e75fae7fff88d4239b459f70cc5988";
+  sha512.run = "8c606388baf92ebfd113a2e7332c479f1428f4c9b2c5b27f04d9504be29ad20e38b3b538366c2feb78a43998460d362156e9abf8fdb3f8457ff4c8452aeb2141";
+  sha512.doc = "7b0811a691b9ff35fe245df7929164420f2155b4797d372988c7cb7f6052291c5735fdf44a0cd3f7a956be9dec424b5b59385b3f147f39b5beab7b56d1eeae1a";
+  version = "2020";
 };
 "impatient-cn" = {
-  revision = 45751;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "216d5bddef463d26c6cec794a38f0b6d325aa1d4cb9792b642715d71d4f30f1d73396036f8eda79b12498c7ff2b3e1e3d2e17d04e3f071f90e8ca35b3acc04c3";
-  sha512.doc = "00140f4b38177ad8c3040cb29a90545da65f2f6100d7058b1974a174e3cb9e4ccf03f0f9ba196953fdf6636bb44d46a1346a3f812aacd177247f40d16f1b78d4";
+  sha512.run = "e75363bb36568ec42f13217dc740b839e109529e41ac9cc713e8c7eb620e557dcc08d20f36cbdb5f0e3145d9201d659fc8478d40fae4862fefd3eec005a3463b";
+  sha512.doc = "ea0918afe1c785d864bc280a6b64a87cc62cabb02540cdf64a7cbf4b8f81afcef9ac85a6f28b5bdbb42a75b6ce1e12139c12d0e1af4183a28115f8d740c6e78e";
+  version = "2020";
 };
 "impatient-fr" = {
-  revision = 15878;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "41bec2d1167dc2f57a09d0028411147f8bf31d5e020408bebbd1b6c6577d531a38f83ae395146da699a53d9504f7f6ec1ab5edc5d6b559527867b352e4a8a551";
-  sha512.doc = "ca3f388df4f17940ffc3b27ec1bb6d07d3b8728d8de011975b4f2696a96eadb45f208f5455890491af6fb169c30d6cbc6849dd3d25b6aad0284f0a65a81c8e9e";
+  sha512.run = "f6a9a69ded33199fcd46d518fe8ed7dca48677c78fac5f90cdbbed2290558c4a9d7c9b0721c188023384acc97ad95df29565b06abc16fa33deb04490ca50b4ac";
+  sha512.doc = "963a379e3fbf422f4f4d53a41d6bd074fd077360908eb0db1db0a50699e12f37dc6b3ec8b42812604de4ea444ecb38cbfc81d3445cd67626a65fa9b520fb8550";
+  version = "2020";
 };
 "impnattypo" = {
   revision = 50227;
@@ -17832,12 +18862,12 @@ tl: { # no indentation
   version = "1.5";
 };
 "import" = {
-  revision = 53932;
+  revision = 54683;
   stripPrefix = 0;
-  sha512.run = "21f83a762b00d159f157807d8e2bb4eb4737d3989f2d01b4943e6000b6f7b4791b084b39e532ebd34443c90cd213d7889c319343e64f9eaae6a06314d7302810";
-  sha512.doc = "e3d3016d04bb3b069f9dd291447fddedc3db7c498fcfdaa6b6d44f63e7cbecef7cf4068c92012f57151d2fc8b2a5286a3a2df47e7e65c08ee39ef18b5c2b3a94";
+  sha512.run = "96a92584b4ff4a4bd3b345b446f2802e34d59ebf8c14469a5b5331e6d2f92b63f42d8f5799bdcefc9ae3f74e5e6f93aad7d5371dbe7d21e84ced3890a76c7a19";
+  sha512.doc = "967d456dd18c8838db7d2ed64016fa0f77f2ed475e5cbe36389414849786d7e7850ea43e8bb00d8aa06e3ba06f62970a6525ee1b5a5109f8cbc77a0baf894b50";
   hasRunfiles = true;
-  version = "6.0";
+  version = "6.2";
 };
 "imsproc" = {
   revision = 29803;
@@ -17873,10 +18903,10 @@ tl: { # no indentation
   version = "0.1.0";
 };
 "inconsolata" = {
-  revision = 51433;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "0356a6022a3370663382f887806a86adc20d9ab7943c5840eb9344a6c64893819d0e3de6b42aec599cf1cfad0cea5724625d96f032f67c45ab282aa386bde484";
-  sha512.doc = "bf80610a2a64c12098ee2c9d6d034791cac79154869562723321c715a008479a267c2f4b8cb490b6d4de041c80bbcd25cdc3faef2b1986f2b53dd463c4b81be4";
+  sha512.run = "3b33a1627083b50019e0c66ad49319d3ae699943f217daa21f57b19dd2733d29c6f1e9fbaddc1e3e39ea96623581b1d6a388f1a0009e84e4c3f381887b05d4c7";
+  sha512.doc = "9139f7769536398c2822c41fe1fd0850a81fb54d70524904b266c8e231c95e344e27468187f474d51a9ab8c4028d6e5f9cc4513d1b38e306b739a1572c387e88";
   hasRunfiles = true;
   version = "1.121";
 };
@@ -17908,25 +18938,25 @@ tl: { # no indentation
   version = "1.5";
 };
 "initials" = {
-  revision = 15878;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "65b2ca2049dbeffca1a425530ea36357b0f06ae8cc744f16471a29dc9f1668023a7edb184d23c80dfdf57d74f24c9425b48a90133f9fa6c794ddf495e3d0413b";
-  sha512.doc = "ba6943a564c000f986a4029d31ead6ee4cec028496636090fc56267dd8594bb20be94e4fa4e4a2f39b5b4c7af1b0db3a74111e45a8ad229f6e9fa8862b11c68a";
+  sha512.run = "442ffe7585c725c62cf9edf86bccabfcc0406b7517f145567c952ff0de65dae94158f586a1c0081afc5fe3320494750ddc6f455c78ba96e91f409bb0f5905d8a";
+  sha512.doc = "c8e837291eb7dced1d4bc4d94e7e6bc042ebeb5c561ad3688a491f451991f122896d7df01040575ac6fd705d3ad55350e12afc986dd619c4303ba2919f64dc6d";
   hasRunfiles = true;
 };
 "inkpaper" = {
-  revision = 51447;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "a5357a2401cb104c64f64d31e9583b9e427673233a4dc6251ced5f23bda1ad895fe499f806aa7dafa3bfb2cb4f2aa9718868d6d3b0a71f249a545960232a78da";
-  sha512.doc = "ecd15bcb523948b5dbd89ac387fd427a5041b39f6ae1aac26888632096fd1e797beb0cdee926dfad1b3abc5b55c6e1f599a07421e7a52953d0812261df21fc3f";
+  sha512.run = "d07bd9d2f32981607f4baf3bc348fdd99aae0c331423bf1f678231a2ab9830e4a824357df067e52643e6c89ecd1b850afb2444686fa33d75e6a3e598b003553b";
+  sha512.doc = "acc6ffc291db3164d8428a50ee0792907435b90d3677a0e9ec883e0d3b81b6c04785a08217bd6c9554545eb5bc328a702c2958301245bcce68949ce76726c389";
   hasRunfiles = true;
   version = "1.0";
 };
 "inline-images" = {
-  revision = 48415;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "60957844daeeb2e4956d83e1d57e9721b2dfaf4ad2fb4358f1d27cbda225ceec7cbc78cdae5144d28a946bb9408fa960748ca3aabac709bbffecbbb64356f8a5";
-  sha512.doc = "5ec326c1323cdce80f5a83052302d2e18de3b0f054ddb7a29da5002605e1020c81fe0219ee68866eb5d8c3b12b4c138ff56f8a630e6f0455b27eb0a0c905d027";
+  sha512.run = "7706dce6a4c0a6dd9b3222d296654c974ee3d6265ab5baeea762c708863f45d7f351158b04075f4365de5a5913fd9cdae5e777ddea69e19d7feb4067491d6515";
+  sha512.doc = "1c24afd0757ca9b9a0cee81192498b15a250994ebf45dc1ad4e26800a1266cad6536c922e97b11999a6b2999ec8ab111de0ff8de46baead06510d2de2296f737";
   hasRunfiles = true;
   version = "1.0";
 };
@@ -17946,6 +18976,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.0";
 };
+"innerscript" = {
+  revision = 57672;
+  stripPrefix = 0;
+  sha512.run = "0ab2851bf450b502e1f04f8c529a2cee149ce5ffb1a091b6870189f01398ec1aaa7c26e5bcfb4ec6e156cbf3e273a4c4677dac7c6c93078d5eadbd478add7d00";
+  sha512.doc = "52684da615ec9caa76e144966be1c3f3152cbf757822b5b2a277c7f40a847bba20d03f1349770a6955daade85f97bbb03572710af39ba6874cf3ff0c422405c3";
+  sha512.source = "b5396a9f73446721e7e8d2283cb10046242e31c9ed77800b3a9e3d825a57f2e81ef06a27ca67b2bee2e88b281329b5f05e230de70982ed937d698cc4b766dfee";
+  hasRunfiles = true;
+  version = "1.1";
+};
 "inputenx" = {
   revision = 52986;
   stripPrefix = 0;
@@ -17965,10 +19004,10 @@ tl: { # no indentation
   version = "0.3";
 };
 "inriafonts" = {
-  revision = 49826;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "fb8218a74562131139d0125a40d04363df7f50e43c8207181f3c72210fec7f501497b5256cfa38d663c21b466e6c7fa94ad2fae9612f4f9767b32a7f5784f7b8";
-  sha512.doc = "b55bac3fce4d012be6d8d604faeff7868b62fda93493e49d7a0a0cc7d992c704de5a845ad7ba4cbd97acc787155b33fbd939954001dc6d4a9b29cef21b0004a5";
+  sha512.run = "9c960dca72d433a5ee20b2afe843b92fa98060e67638676a8e92ce9c7dde872be4bfdda6be7a76ea90db97e51784db4487ce22c79cd110ba0214ba54bc8fbe18";
+  sha512.doc = "352e35b1b748f502db20c76f670c8eb6d02f672ee743518113a7b7807678ab45f2a628980229d8dae67df0dcd3581a5a28492adce8752a1a5f914fe550bab01a";
   hasRunfiles = true;
   version = "1.0";
 };
@@ -17980,6 +19019,13 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "2.2";
 };
+"install-latex-guide-zh-cn" = {
+  revision = 57590;
+  stripPrefix = 0;
+  sha512.run = "c5f11472922d7bb05b8c1bfaeac6862af0e3367a7cf7a0201e09ac030b44c15965647e885d3c90a518e8cdf6816756873184d7835caae28423b505f15170ebb2";
+  sha512.doc = "e0a934c670f06a175e1c2805efc06df559c3436656df7d0191a204c3be0d0556050757378f9a4b0f403862dd747f783941281af539d534caa5b1dcfc27b0b885";
+  version = "2021.2.1";
+};
 "installfont" = {
   revision = 31205;
   sha512.run = "cd5133b93c5daabaa0ea13649f3d34c28f9af9f92db54917e64cafca5f5e7fe5169d87e36783036850ccde0002d34860eceaea528ad06e21f08141106e6599ae";
@@ -17996,6 +19042,13 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.3";
 };
+"inter" = {
+  revision = 57213;
+  stripPrefix = 0;
+  sha512.run = "44de293fff8e1cdcf36796db13bba42c7a95f3ea49b48597bb743bc08bacfa504ed5dfac1ebd7a4ff0ed02c88433679f164f2d2e406051b1d0f3e32218df4747";
+  sha512.doc = "df5ce5a034ccbcf9a04f89f362a75191c6254f55cadb1abb10f51fccadaead4d9efc160df19e6eb7f81161716d27600a3be5db1a482cf23ff3416c19b3a172a3";
+  hasRunfiles = true;
+};
 "interactiveworkbook" = {
   revision = 15878;
   stripPrefix = 0;
@@ -18037,13 +19090,13 @@ tl: { # no indentation
   version = "0.4";
 };
 "intopdf" = {
-  revision = 51247;
+  revision = 58743;
   stripPrefix = 0;
-  sha512.run = "e1bbdb7fac641a3aa6965cc6dd7fe1c2df56026991277d25814e07f22722ce9bc3851db045611b121b358c46afecc2d8072e36f435cb56f4bfcf45859741d2e6";
-  sha512.doc = "b56f170934bc7d3528604c27d4153800e1069b10ef98f4dcee6276d0c4259327160f8acd381c294490422e34dddd2ebe690d7143aa1493ebe36280323cbdd633";
-  sha512.source = "dc48d013cad264045e8515bd8e87feb09ad0fdec11a811a0933263949fd6f93c1ea0abe5a4d40553e3d37e43aebdb67dabf6715ab40b3abaa2971b2843a07df1";
+  sha512.run = "555c9e4c98c5d123afd706ecd02b9983406268ccbe32cb06f1072a08d5b4d035aa76ac1cdfb94015b02458405cb95f175ef719a477be593318dff2f1b1e2c0f9";
+  sha512.doc = "dc4524ac96a3d29ad898e9bf9c34ec3d32716eb3ef9c7da217180ead49f9926883a2a26116b1f7a18635094576e93f6bf1b5110002f14674dec19d26e37da0ce";
+  sha512.source = "75b6ee9b8b878cfe666d9d73c68a7445a6ab1520515bf6e353d2b27e0b388b28e36ef4508892eaa9647441ee988a1e8607a6dcb94dc356c34ae1e7ae986fad45";
   hasRunfiles = true;
-  version = "0.2.1";
+  version = "0.4.0";
 };
 "intro-scientific" = {
   revision = 15878;
@@ -18085,12 +19138,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "iodhbwm" = {
-  revision = 52118;
+  revision = 57773;
   stripPrefix = 0;
-  sha512.run = "694c87987c02504c3e9d4db2c094582b0ed979d240f569a8d8fde37563885b23fea977c6671cdd7be464d7fe1fe2870dd321afd59ca5a33fcb7f0dbc6d6a485e";
-  sha512.doc = "a94dae7e699365fdedda975b69905861a2187590269ffa65256d97e28c8b7a89facd79edda6b4b177afa18df3b790c6a2e95c82cb59b475a7a2e57c7e26fcf3a";
+  sha512.run = "a0a6807c8715dfa5f4ded44f66509ecd6af804d5dbfa44adb4fec3454f39be633fe17b79458106be0a6c35086dd1d3e33aec19ec657a6cb6b3903695b5019cac";
+  sha512.doc = "ed3c906cdbb26c095f5078dbe961781ab1a31f8c1a7b926b0a8082b7bb41b71a8912774829135651937bdcc5f2e53880300cf9b21b6ce35430fc443d30423244";
   hasRunfiles = true;
-  version = "1.1.1";
+  version = "1.2.2";
 };
 "ionumbers" = {
   revision = 33457;
@@ -18168,13 +19221,13 @@ tl: { # no indentation
   version = "2.28";
 };
 "isodoc" = {
-  revision = 47868;
+  revision = 57811;
   stripPrefix = 0;
-  sha512.run = "09256daeeb683ad518302f29d5385b4a084dce7fb6add48249fee7ed9920c1585f6c7033b19f466d9bec3c396c1b7950c65cc736be650836e09d3304c14312cb";
-  sha512.doc = "0e215043768c2b55d20aef9ada76bf0820e9207ecd3674e4769944885477db9392aa978a90f221da17d75a010844e87988a3f449a29cfccef2c9560d5a98c903";
-  sha512.source = "ae4f54b4c8f8b2d1d9caedd6a89e45e66eefa47a155808b8c9f842b3976fac25769dd349cb5d2bea006dea042a275d5c1396b8a98e4c65a4bb29f632225ca49f";
+  sha512.run = "b26c7f3b87f4892f6f3c31f62225b43918be6e168dbb85d287fa708069d9560312d00bff1198842ade1a0a542da59dfd5d802d59ba6f62cc1dd15ce75ecde015";
+  sha512.doc = "11cc576322712103511c3025524fe068a3f011e726a2335051ec6eece18a6217931071ccae412ee46148d4665cc3526b0a91fc66f4455ddfdae7af9974ae5959";
+  sha512.source = "a56610f50bf8e9286e04f8d505158dc2d4838731e667279728edc5e46cb92ced25c4a23b02b6c0cdfd4830fb09d093ed1c87b6292a2917ca5b8d212317b59e3e";
   hasRunfiles = true;
-  version = "1.10";
+  version = "1.12";
 };
 "isomath" = {
   revision = 27654;
@@ -18275,11 +19328,7 @@ tl: { # no indentation
   version = "2.4";
 };
 "jadetex" = {
-  revision = 53786;
-  deps."latex" = tl."latex";
-  deps."passivetex" = tl."passivetex";
-  deps."pdftex" = tl."pdftex";
-  deps."tex" = tl."tex";
+  revision = 57186;
   deps."amsfonts" = tl."amsfonts";
   deps."atbegshi" = tl."atbegshi";
   deps."atveryend" = tl."atveryend";
@@ -18293,12 +19342,15 @@ tl: { # no indentation
   deps."dehyph" = tl."dehyph";
   deps."ec" = tl."ec";
   deps."etexcmds" = tl."etexcmds";
+  deps."everyshi" = tl."everyshi";
   deps."fancyhdr" = tl."fancyhdr";
+  deps."firstaid" = tl."firstaid";
   deps."graphics" = tl."graphics";
   deps."graphics-cfg" = tl."graphics-cfg";
   deps."graphics-def" = tl."graphics-def";
   deps."hycolor" = tl."hycolor";
   deps."hyperref" = tl."hyperref";
+  deps."hyph-utf8" = tl."hyph-utf8";
   deps."hyphen-base" = tl."hyphen-base";
   deps."iftex" = tl."iftex";
   deps."infwarerr" = tl."infwarerr";
@@ -18306,30 +19358,37 @@ tl: { # no indentation
   deps."kvdefinekeys" = tl."kvdefinekeys";
   deps."kvoptions" = tl."kvoptions";
   deps."kvsetkeys" = tl."kvsetkeys";
+  deps."l3backend" = tl."l3backend";
   deps."l3kernel" = tl."l3kernel";
+  deps."l3packages" = tl."l3packages";
+  deps."latex" = tl."latex";
   deps."latex-fonts" = tl."latex-fonts";
   deps."latexconfig" = tl."latexconfig";
   deps."letltxmacro" = tl."letltxmacro";
   deps."ltxcmds" = tl."ltxcmds";
   deps."marvosym" = tl."marvosym";
+  deps."passivetex" = tl."passivetex";
   deps."pdfescape" = tl."pdfescape";
+  deps."pdftex" = tl."pdftex";
   deps."pdftexcmds" = tl."pdftexcmds";
   deps."psnfss" = tl."psnfss";
   deps."rerunfilecheck" = tl."rerunfilecheck";
   deps."stmaryrd" = tl."stmaryrd";
   deps."symbol" = tl."symbol";
+  deps."tex" = tl."tex";
   deps."tex-ini-files" = tl."tex-ini-files";
   deps."tipa" = tl."tipa";
   deps."tools" = tl."tools";
   deps."ulem" = tl."ulem";
-  deps."uniquecounter" = tl."uniquecounter";
   deps."unicode-data" = tl."unicode-data";
+  deps."uniquecounter" = tl."uniquecounter";
   deps."url" = tl."url";
   deps."wasysym" = tl."wasysym";
   deps."zapfding" = tl."zapfding";
-  sha512.run = "5aee50d3e9bf30a413222e9432ecec830b8556f81913b5e02bb7bdc06a42799f91895f32a9aa059f304023e36d67c8ded0006e83f503b1ed831345ae6b8a7a31";
-  sha512.doc = "5d2a95dbbf86986aff08fd66f8ec1c5092d79dc5803a7d44e98bbcec722edc594595db1c7d646d2923f894ab48c40dbc2904e5186ae659bd8e94906409892731";
-  sha512.source = "c156127a7bc71c6987339cd0ecbb7b81a6f474d42b53ac583bf6380fdf6680b646582db593b646139fd93a0dc40c79d962f874840db09f438824ca1762e4dd25";
+  hasFormats = true;
+  sha512.run = "985e1ed14e5db0a23e9be510e5a52456fdf07ff8c8746add0d1123fa8b8684b3a0c5d9e99e06aa193c667ffa2dd648419d4359a75685d6514e81b9ef0d92ff22";
+  sha512.doc = "bf83fb4dc700f10050d34905197a630f8de75a6a27146188efc254b831ad0d68cc873b610f7457a3dc1140a10793aa05c567749efc38225089014df99fc2c895";
+  sha512.source = "63bf7f94983a971833e1e1b7d33afdf684d83117e4ce846334952176641b45acfe0c18b2fe983c2f24d98e68e91469560c2c10582d53015d069802a38066280f";
   hasRunfiles = true;
   version = "3.13";
 };
@@ -18342,23 +19401,23 @@ tl: { # no indentation
   version = "1.12";
 };
 "japanese-otf" = {
-  revision = 50769;
+  revision = 57826;
   stripPrefix = 0;
-  sha512.run = "e62e32e37fd460dd16a5bf62423564a83c6fc16a9b485dafee5f00fd4c3342e3b94c78731e25a9fca3aebf9cdf91a4bd1ae6edb8213699adc4c8e7d139e14ecf";
-  sha512.doc = "90d9247aecc96871f1def7db153266d9c42292c5f0fdd7b835392cdf61d2b15c908e2895868121dcc5dfd508c75c1b7424104412a2b75e430a8fd2f0107cb085";
-  sha512.source = "e3cbd6b664fdaf62ef764bf10c3f42086d541805d8ddcae3557f19bb607678fadbfa2e6d7dd97e9fa914a7153765c63eb0da6e8a89506a8e3b453923e785e869";
+  sha512.run = "09c4a30bf8ea079119cbc094eb21591e8402b5364e4a497abaa2048278b0a54322f012c7bed44b4a5b30eff44cdb360be66d8271d8e6fd22dc92622862693f47";
+  sha512.doc = "92f23d5d376451a6103183e6924328432e3e983577a98f8a911da5cf2421baaffaf617065c48c339bdd0a33868976c55ba2a8b254f3f0a3d7d8a85414495c902";
+  sha512.source = "0f429dcb8ac083503d65dc73e065746d6b2e5849927ceb013e708df4567017ad6554d50cbcfa5cec8da8cbac8461a66599cfa7e26e246a01951ff72d0ed634e5";
   hasRunfiles = true;
   version = "1.7b8";
 };
 "japanese-otf-uptex" = {
-  revision = 52048;
+  revision = 56932;
   stripPrefix = 0;
   deps."japanese-otf" = tl."japanese-otf";
-  sha512.run = "130d2667c3829311153121415d27d880e475e121a16a8f739b018894b93d2f45200e50c53ead912419900100d596ce2cf6c047a201423690ea52ae415d82982c";
-  sha512.doc = "fc672ee767090c52c2eaffc6cd42e74763f879e66f45942d30515a498eb83b14786e52afc98ea4a47b349687dcaa7e782fbba4534a7adaf56cc46796f79a6481";
-  sha512.source = "0ca42ba766cca6d917cb5fd435720bdf6ebffc0aeb5817e725977da51177178b14c15a8f5dc1d66a463934690abe338b669aa968927919882359f39ae01bbed7";
+  sha512.run = "cd95656f02cd97a06119134406b519928ced50c31647a4dd421850d7e83b3705cd2b715be2e23c45b77d1634c47fd5cf8733aea05c654a0d3fd7fd223a3742a7";
+  sha512.doc = "c67265456120136645bcd45f099e62174efa2350acbc5a13e45e35e959421f94cc2f1492bba9605b087008c3fe565ae8a52f4842070ac98039d7b6d8a9bf2172";
+  sha512.source = "efb029012b07e8bffa1311424138f923b4fec963bd2373a9aa083ab048007b05a2cabdf1fe53eadfc0d2431d0a48209f2e532e9a36d914868cb0dd932ce55098";
   hasRunfiles = true;
-  version = "0.24";
+  version = "0.26";
 };
 "jbact" = {
   revision = 52717;
@@ -18368,11 +19427,11 @@ tl: { # no indentation
   version = "1.30";
 };
 "jfmutil" = {
-  revision = 52026;
-  sha512.run = "8aa9ff7477739e75824f7c7242a02cf6186fa1a7a37ae145f7fbe989d6a7fd774c0428c60575609b235cc8d1d4f0f108cf6bdd7cb1003a0b12b6b6700e9414ee";
-  sha512.doc = "b607607ac051370a5374d57f2aebe33a2763029bee0e7cd8816a614e3a49728d4ef4777ed5c8de4d9f09edfbf3524959c3f8e644d811105e5c69d93496ea3dca";
+  revision = 55044;
+  sha512.run = "ba0c853d1624ef00407e9eb4c6051fa9f71f505e0e55ea2a698d4a9f7fee241c1339d46e873d77573252c781ccacb05b9d447b80aa43887ad76da667977c666b";
+  sha512.doc = "d4b255cccbe58ec85240be3f0a390dd2fd716fd40c744732494d3e113899747133e99be75f8bab888d240e66e16195dbd2b12188f3551e5535a2cbe157c5bf9f";
   hasRunfiles = true;
-  version = "1.2.3";
+  version = "1.3.1";
 };
 "jigsaw" = {
   revision = 49111;
@@ -18405,13 +19464,21 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "jlreq" = {
-  revision = 53717;
+  revision = 58472;
   stripPrefix = 0;
-  sha512.run = "0f51670a5cf6c7e7adb2c0c8b5c155d67574ddc5d1c73026bf18a5f6f4cad26bb529a98d32f82936a2740184bd6ef4dc04eeff1b194a2439af9da53f6c173c18";
-  sha512.doc = "8bba85d024192315137fcbe494a2ef3c397242d34bf1278dfb6ae54115b8a6bdfe45206b5abb8af89ba39dc16e97d4546ab05d312d2d8a0fbf5cf26ba1ebfba4";
-  sha512.source = "e8e1c0723a61c1e75718382af0648eed242de51256d16894f5bbb84bc0889703de83b0f3582905411ce3f5a8d94bc6e7c97752f4ab1708d0c944b59e57672101";
+  sha512.run = "1a2118698ae25d3f9a3d9d41c7bab2b3d56e58b9fea73d977114f6cae429d2e9ed0b410a0537531e4eb6559f2a6ebda47eda0e6b3e1d1b8ddbf567dbe1ebf26f";
+  sha512.doc = "e88a88d7d70a03e8dea569f198690278ddb2233df7dbca0733c60d6f5d4963ad9cc810c7764365646302cd529ac70a29aa258a577adc2958fed9da5448f52299";
+  sha512.source = "143b2d7bb6ce740c2dfcc5295ba568189041091118e6cdd6856b7ce6df2b267ca9a1d7443e752f22cb9d4668971cc559609434d091df94906c04ccce066d67bc";
   hasRunfiles = true;
 };
+"jlreq-deluxe" = {
+  revision = 58329;
+  stripPrefix = 0;
+  sha512.run = "b7b3e3c5a9de849ea79cf84d6fde1d9594ebb3c5b8887ef682c2973227f7d60a159a3f90b05797c9bc59eb030bef4853415e02a98ccccc2f914b29c1e619b27e";
+  sha512.doc = "956be7405e5aeeb7c56e6db88465950865376e14a39caaee61be9b77fbd859f509dc9dc522e756382a0276dedac85a23cd43c2f7034d1d8482bce5b305eae75d";
+  hasRunfiles = true;
+  version = "0.4.0";
+};
 "jmb" = {
   revision = 52718;
   stripPrefix = 0;
@@ -18420,13 +19487,13 @@ tl: { # no indentation
   version = "1.21";
 };
 "jmlr" = {
-  revision = 53616;
+  revision = 56395;
   stripPrefix = 0;
-  sha512.run = "bb293ba280f8b0d15fc2d3fd997a8992f0664d01bf56d42151a6f71633d077cff751302188c857b4f6c8d1381bb37f1807c1c3ca85ae0427846aa1189aeb5c3d";
-  sha512.doc = "d32cb5cdaacf8c865bca05ef170cce5cc92f0a5d77a33162ce5de6e4f8e77c729d876afd682f1972e3207427557d68ca9a822ab3a6ec9c08b1db7241acfc4e47";
-  sha512.source = "fb5da231bf161f0ad32d0c4617337aa36a5d443bbda0e2def547434744253b5476bd7696fd4bd025ef601a7a71800e6013213e3e5357ed7fb2956be4c0cdf47a";
+  sha512.run = "950f1d737ccf93c12d497ae04192f63c861a3a03279e69aa54c28ab0dbf4299dca3339ca19933c96f1c5f42dd9e2d860dda9c201d2f89b6aadbf75d73c16a878";
+  sha512.doc = "c86b3f5c1e1522009b2a31fa532c98a754354ef744be12ddaa24f1ae0c3c7f36522d1ff886aefb220796375541949a55ddefe0a085fdc0b607383a183f70234f";
+  sha512.source = "163df127f2f448d0ae23144d91fc7aa28c423f3d2ffc63d7cd34d6532b734721215e5f3f31cb3f6662544d3609da83a9a2fd3970a8169841b6cdf129a58a575f";
   hasRunfiles = true;
-  version = "1.26";
+  version = "1.28";
 };
 "jmn" = {
   revision = 45751;
@@ -18443,12 +19510,19 @@ tl: { # no indentation
   version = "1.00";
 };
 "jnuexam" = {
-  revision = 52696;
+  revision = 56867;
   stripPrefix = 0;
-  sha512.run = "9fc6ed0fc12a0eec779a511de2582cb6278b4576569cfad310a26bae0ae024336b335b2ff9760f0055463302c51933ad291a25f542a7974c56e17c3013c480c3";
-  sha512.doc = "b9650a69d2f8b7c78e165d35c3b8cfebb8e76886f5b20a0592ab6b50ec63a659c5b76c6cbe02b8c5aaad5a7733623fd8c73bed624dbe9651bbb2263339f9019d";
+  sha512.run = "36aa8858e22affb522332de4ef06a2760c5f4ecf24858fcad34655e0062cb319dc27a34ae1648fc89ebbdb2d3d79f8630d4d3663956022ec345a31cad58a5d1a";
+  sha512.doc = "e80d4db8fd0f094589ab88ef2afb01f17be611ef07b0b6fe827e8940227c5c47fce7841881dad4ce2805c0098f41eb27da5491cd50825cc70b5aa2c5bf4b1926";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"josefin" = {
+  revision = 57152;
+  stripPrefix = 0;
+  sha512.run = "4f0a7e6095a676878617bf05b1680c5482b3f5f43d00abf2460bfe1d09568721afc2808081001898bebbc8e16e54f9faab0a0c9c41b0d6aa0bc43f7a829f1b16";
+  sha512.doc = "2f59d8fbe271d00673bb78592d4f3a9ba70a5004236548dcf49182c4efc458b5973d1e01a3f97bc3e6556d8b70d4e20f52d7f268dd7ed2b875fc1656d6781506";
   hasRunfiles = true;
-  version = "0.7";
 };
 "jpsj" = {
   revision = 15878;
@@ -18466,20 +19540,20 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "jsclasses" = {
-  revision = 53641;
+  revision = 56608;
   stripPrefix = 0;
-  sha512.run = "e9a932b1a667b049283eea0a75d12cf83513b4d4f97d50a8c9f4a820e139fbd922c8448ea226a367be1450ab96e2184ef4973043589e0f84b8a1d55b94931ebc";
-  sha512.doc = "b19caf831b88256aad481a50a6c3cd73f088d7a8514476b7b8c04be39990b341d79437b4774a3291e4af8cd40aadc83cad75fc50f1b8fbe91fce0cd366f0c0d7";
-  sha512.source = "09ecb81467d6ba54254edc317c375f858b8e7c978e4bd07667fa2456b05b142e653de561ed2c2576fc368f1ee9bc4c20ddd02950458997b5600269a887317cc1";
+  sha512.run = "18c5cd1e63e4fedbf1ec0faf069d40d34dd72ca18af0d634eab16b5c7ce92139cf4892492782f816c0c0deab4706ee1c5a83d052cd122f7d5df35f1d5d2ff4dc";
+  sha512.doc = "f9d477ca10dfa4fe83e2f5a981f7584555e06968417c542cd09e223a0ef30074540890b3f5b28de12b9d77e9a45e3bae19590cfec31d3232528db1d854514083";
+  sha512.source = "c4b4d11b3684122e47cb3b1ef59001e0163297768743b570f4c64c3eb0ab95f41a6660b44f6048acf4e9d1f4b949eae9883ee97cadec53798d363f3630cc4fca";
   hasRunfiles = true;
 };
 "jslectureplanner" = {
-  revision = 53672;
+  revision = 57095;
   stripPrefix = 0;
-  sha512.run = "9da09cb979caa5ea54466091c785bd6c66e46b93c9182ba426884cf973cd1a9ad0662e9d9053f8749862ad237e7379fa83fae3a43de96712e59267506e0090d9";
-  sha512.doc = "758ca6441a1ed9eb9ac8a8445cf1a3bb14a796d888aeaec374abdeee824c1578e5ef02ed204cdedb17dd96ef5ae35f42a8b32ddc826a73d638ff3d250ea259ff";
+  sha512.run = "022c878b95fbca48c7cd3464a12d5af8b29b26c2fe46f3c4dc2f27e6c3b3660f78f3baa7b9d289c3444fecd7186f6d6cb18d8c6c94b9ff27842f6c9018e9762e";
+  sha512.doc = "1af4d1a75b6f5f056f0426f00c8c26493638e8efbdd5ff7b746f45cf4ca3c6648d97b3832885d97b71124cba7e57eb22fc2018619e5a33c66ece10ba20528a2f";
   hasRunfiles = true;
-  version = "1.9";
+  version = "1.12";
 };
 "jumplines" = {
   revision = 37553;
@@ -18497,6 +19571,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.0.2";
 };
+"jupynotex" = {
+  revision = 56715;
+  stripPrefix = 0;
+  sha512.run = "3b5cca7c6b8b14eda35d52a6db5e7ac027c0b29ee08a7b8f58411886963d8dc69348752d6cc1f010d11b9216026b705fe4cc915d2c60cb3ee9f3950fcc6bb308";
+  sha512.doc = "35b8d2dbcbecfb4e7b2bfb0ef39f2d076d6f4eec9189e89cee3bdfdbb6f57d5c1dcefbca3eeecf4842f7f94616030d2e73588074618b39e232f40104e371f3ea";
+  hasRunfiles = true;
+  version = "0.1";
+};
 "jura" = {
   revision = 15878;
   stripPrefix = 0;
@@ -18609,12 +19691,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "kblocks" = {
-  revision = 52382;
+  revision = 57617;
   stripPrefix = 0;
-  sha512.run = "dd234caad6b289f85109303a8e3f770bf7393abcf1685f402c3d44234d6ea4da060b9995b8bd2c11450e463d4b729538ab94d41e76deb9a0fec07bc1f909ea5b";
-  sha512.doc = "924ed5dbe96eafc0bf8dd2fdffd4cfed43e7b8f236181553c999ff07a40aa3396e0b7fbf5c474b50d7c1c5cccdc364f941479ed710003055fbfefe2a34cebda1";
+  sha512.run = "1cf755fb680b13d5298c306698bf41cd0446f7ec8da321b065ed549c1bc83bc352bd4a44d67eaff6fd1c253b2d92768f8ddcdb6a986febc4dd1abe6884a2354d";
+  sha512.doc = "7aa79c73b32d4098bdbf6152f28de628083639fcea2b7338e64fe6108aa605662f36002d93268f67fcfac59798369d392c5c4b79adcb18d0600faed8d804d8df";
   hasRunfiles = true;
-  version = "1.0";
+  version = "2.0";
 };
 "kdgdocs" = {
   revision = 24498;
@@ -18626,12 +19708,12 @@ tl: { # no indentation
   version = "1.0";
 };
 "kerkis" = {
-  revision = 52753;
+  revision = 56271;
   stripPrefix = 0;
-  sha512.run = "07d24ba7d57e46d8a2484ed9a7633cdd42062f99c9c48b0dd385159707dbcffe3abb2fdbf8dbb3a22c2532ae86e0c4ee6709edc0eb9cda030f78f7563fdc3646";
-  sha512.doc = "d6f17d255a04ad88c9ddc6a1f50a18e98a06222d9153b6fdda96bb9858bc7bcf26ae2797e617e69c6b701eb5705d71f29ae4644c98eb0c4af9e3db00cf929250";
+  sha512.run = "b4a8465264a174320180ac5f9bd89900f7a3b351af21d3a138db40b0781228bac8f8e9ea66a54a1910b3750d65eed17f74880f1c7396780dcd631eda164aff58";
+  sha512.doc = "b9c57f71b2c5e48ab3b96984b231f5ad418d884caad0a3747c78bdf0a5688c4ac05993e43707236b02650750d5b7507d39e50668b7cc16e00a35547d63d0bbb3";
   hasRunfiles = true;
-  version = "1.1";
+  version = "1.11";
 };
 "kerntest" = {
   revision = 15878;
@@ -18643,9 +19725,9 @@ tl: { # no indentation
   version = "1.32";
 };
 "ketcindy" = {
-  revision = 53233;
-  sha512.run = "a65dd1d1ea906ecb1ee232029230005c781066bca2d7192893b5230a06059feed4416b78d4670df104cd7b3f5afb6c3463868340c7991f770026da2294009c18";
-  sha512.doc = "e387f94fb712b223864ab615c26c57b505a313a657f54830a61893cad2273ee82ed362438963ae6447496c57474041ebfdb528d92047e6f6bd214c35d4d37cc1";
+  revision = 58661;
+  sha512.run = "da33a0bdc989fcb6f4521d23e5d44bae70d608ed8ac10f05d6962a252e99bbd80380afa2cbe9e02b9c652b044dfff79218f951144da6ce55f8a53033c11ff346";
+  sha512.doc = "1704411b3e7c41b6318ff6f8da56007dbf1bec67bb495d25364d6274d9b8acf234430081c22bab6ad13ffd0ea47586e6e24c9f27da8a97a309e2128ec74f89e9";
   hasRunfiles = true;
   version = "20191225.0";
 };
@@ -18701,13 +19783,13 @@ tl: { # no indentation
   version = "0.0.2";
 };
 "keyvaltable" = {
-  revision = 53861;
+  revision = 54677;
   stripPrefix = 0;
-  sha512.run = "7d60a87919114209b20bae17603f53b8b22bb1b4ec6b9e411488a9e0eeec661376c0f74c7fa0f229c5bbec771b23e1d0fd8b8ec1167a8f98432f2f196568bec1";
-  sha512.doc = "6988e60ca067d77b82c5c339bfe958c0d486c04869c0b74f9c92fe87946079a380a0863edadf136bc54a849f4a751621f649feca591a8d89a402a88453a359c2";
-  sha512.source = "c1b6c85c3c292b3dbcc811fdce7d1e9fc45ae03717e83c317c4623c9f1edbb06a3ef115dbc742be2b440f9642bc8c95e77d33bf3c5adde7a92da7bcb0b008002";
+  sha512.run = "5f3f337347df00a955dd7d7694a51ecce15027580d2264da3f580cb9ea602f6e1583f41e72cbe39a5d4ffb36640eb26cd39132967e0e5a138de8703eb1651de7";
+  sha512.doc = "7709c3ea7ad6fac4625620bc86bddeda751c6e36accf7b14b3dab2d5280c77ee4b704b2657511c4226efaffc7db79cb8eea068566ae099354920a522975dbef5";
+  sha512.source = "aeab384eab5a414cdee5162ccfea90284e9ccaa96129a2fcd77059abcdf2039350a8f6e17f4d5a7ea8759cf414daa620d12eb85ac42523ecfca70e6424e5df6c";
   hasRunfiles = true;
-  version = "2.1";
+  version = "2.2";
 };
 "kix" = {
   revision = 21606;
@@ -18724,11 +19806,11 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "kluwer" = {
-  revision = 45756;
+  revision = 54074;
   stripPrefix = 0;
-  sha512.run = "36f0d6ade1e6afbc7a021780a9d6d56e358805be8a8d5835ce256c87f426aa4110b9e395d6406cd1572a362557ba0d914071a6589a65ca064cd77c9310c284c5";
-  sha512.doc = "9990c4fb99023e6262c1c7336f4b8a98e3131ae60f380652469f7e2f88a8793d745655e0fc13dadc78fdb8c2beec6248e54af661bc81a8ec016af58b688e583e";
-  sha512.source = "a6ead8f091ea55b4443da5d048df1e27a2f2af0abd047d7585490cdc27b9efd1f3a59a5eaf6b77a8b5dbe676ea89dda8e96e80b833bfb995605ca36b21e3cecc";
+  sha512.run = "25210201032ab5cf867e8e46de560a2232e36cb636db8d6d533a6052ae125024f2fdb3d016aa68d49d5be4ded676a1e02108094c366fbc9cc443035edbc82107";
+  sha512.doc = "0908a60833ebab53fda54708cb332f0b3e2ed6c071daa1b231570c6dca57b09b6c9e7e52afb606300b04f9c42794d6d6b7c2387ab35fdebae0ef4d346ca068e4";
+  sha512.source = "12f20e51c0c7668761c2894ac6559f16f853c4d255331db36d9d50e21ac92103828d661d2df8358de24c8403f7a0292866ed4edd5c64e54e555e979475bb5adf";
   hasRunfiles = true;
 };
 "knitting" = {
@@ -18747,33 +19829,39 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "knowledge" = {
-  revision = 53572;
+  revision = 58724;
   stripPrefix = 0;
-  sha512.run = "6f5d172b155e7cde0a48ff6fca11e4ae8cdf45eb29bbd4ab9a708f62d25de70c9e3607a80364aa1631b828c954dab522748fe3f651be6583b1918db35e1a5b93";
-  sha512.doc = "11328ab7c3d5f64c97561cf43167323e084d978a65e2f352e37baaad4b89ec6893bcaa8e90360a971a352ed77d9560713eeb0bc902996c858a3584e1a0c1ff67";
-  sha512.source = "bf3d6310aa994cd36d961c20a0f473576e33f5daf1d0a54adef633fc53aebdaf1957e1eda98c31d071d71352b26aecf2513aa4d82a20a1002f9467c060b064c4";
+  sha512.run = "22b67c0c0833f593ec0ca072744986212d34765945e8e18e0ac37c1ceba26109e98e41ad6535df066cd8091757a55fc644c311159b734fe69952845fcaed1c31";
+  sha512.doc = "99b2a1f7bf227317dfa946d0c500f4b3b018d9348b3e71eae188fa3b14df61ad0ea9a63297e186b6555c0ac002150fda71aeedf8abcea20065a13c6c39f0ccae";
+  sha512.source = "fe2cef9c5ddc8cfb133291d3340546d75168568211c99f3db5b87d6029fabc85027d382df5210d70e52b782b15728493932b9f15e5673911d821cf656bc56f57";
   hasRunfiles = true;
-  version = "1.21";
+  version = "1.25";
 };
-"knuth" = {
-  revision = 32899;
+"knuth-errata" = {
+  revision = 58682;
   stripPrefix = 0;
-  sha512.run = "0444090d99b39e2cdb47060ec7eb07704948efba49d4c9ced27a0565e34bc31cc81e10ec19559d3455ad2da79c5117da3f2d84f2cdd080cf97d5c14e6d02f707";
-  sha512.doc = "a2ec4befb238f3cc51593e0aa145d02f40e3e792d4ee13147cf58baf366f9e019fb874179940b7beedf859c9d756a8fde2b6f65e8c6c20e9c2964e980e7dfabc";
-  sha512.source = "a5e53275149199e9bbf88f6f6f03759b39ab0401eaf1fee4cc9875eee62a82178bb3f79deea9cbddf5e3153366dd57e43733f583bd66327e73b2e78b0765964b";
+  sha512.run = "f74443cd6bd0ebc039ff7eb0f5df2709b28c34c1fbf49793ee6d8ba2477337d8b7d0072573c32d67da17f7796efa058aa0d2d7cc2f7e196111c9ff90668ddb97";
+  sha512.doc = "86abd134ee7d4afd4398735964c83340b67edb9b41a960d205aacb3dbf1c702a854eb469d3c39b06a7ed1974c8e2a951dcb1c3fcfdeb2c394b7d21e4205ceca4";
 };
 "knuth-lib" = {
-  revision = 35820;
+  revision = 57963;
   stripPrefix = 0;
-  sha512.run = "8925cee55d97e93e9947e62581bdad06cece4448b94516c72cdc8826ecb8148fd393c0621f57eb92dbc4752626a38029bcfb30963b618027e0fb5459e0b29bd0";
+  sha512.run = "47d50b1966dc5a3adf4921c297d9ed5917035e917098154fc08d1c72ebd0ba70ebfa41735c7ae52c5087d62242bcfa9b0b49914c6da4f392e2d4c56a6d72807d";
   hasRunfiles = true;
 };
 "knuth-local" = {
-  revision = 38627;
+  revision = 57963;
   stripPrefix = 0;
-  sha512.run = "8ff3f05e2584cbc5301ce6fe74e469db70438f689323617ab0cd762af9f66fcc8db10ef687dbe5a97deb0771a75320ab099cfd8cb7a900f5ce6c65e2f6fc9edc";
+  sha512.run = "91962f359e8b2f668130a6511e7fafad26a0c4c14a46f715172aa28723f743e08c50be666cadafd7a591f2283daec4fdd45039afc714115077667b66e67cedb5";
   hasRunfiles = true;
 };
+"knuth-pdf" = {
+  revision = 58470;
+  stripPrefix = 0;
+  sha512.run = "281dd6f88f543a84b66ecc6b7f53cf1b9c7c295079e97dc722212fdfb337dd5adaea510d687916d477c990042382066e80f0aec3b2eb29d22b29cdf0968f7e1f";
+  sha512.doc = "b6bb93794b064466c8bf7f79425a55a111a276a9888b720b7780756b5dbab86c6a573dedcd3946e4f7aa661b6bc6eecbc5f92068a50c0f17a3676e4077acfe0b";
+  version = "1.1";
+};
 "koma-moderncvclassic" = {
   revision = 25025;
   stripPrefix = 0;
@@ -18783,11 +19871,11 @@ tl: { # no indentation
   version = "0.5";
 };
 "koma-script" = {
-  revision = 53617;
+  revision = 58585;
   stripPrefix = 0;
-  sha512.run = "b8d227da363192b4ed7e4b9dd65e0e94fd3e77405598b8a10e6e16255c4814c524c5bf8238861f7461831d8258d6e00cb2da29f9e3cf61c1260b108a1fb8f92d";
+  sha512.run = "c7df4ac717c0b1ed2508ad52546b3cd1ba84db401f32888461cb0e558bb434abda933bd91b1a9f01b42ea0db9754fbf230e5915caac823d67d8789ac4f7c0f4c";
   hasRunfiles = true;
-  version = "3.29";
+  version = "3.33";
 };
 "koma-script-examples" = {
   revision = 47523;
@@ -18804,13 +19892,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "komacv" = {
-  revision = 43902;
+  revision = 57721;
   stripPrefix = 0;
-  sha512.run = "007ff84d143bf46d2c5d0772111e26a459be663ab40c785a8dbc8b787202f4ccff15060fa7d52cb547348ae1b128a9f66256259c2f72775d4278ae0f4e04c0bb";
-  sha512.doc = "58548f1dc27a80a65a275140bef757329a49255353eb09c0c41e7824985603799620b696fcb4af454d85e90b61a6bdc6965cd0f3f2f603674064be502674cec4";
-  sha512.source = "eacfb8e12e043f30daf41c3ce7b4a72bf46170a1c5f9be5accc5c8b414a2a8a69b3460d26832806eca69c3285d0ff87014e50a411f8bf6ea1d7d82fec250ba9e";
+  sha512.run = "028e8d2a7e5ea450ad8d6f2b14ad0b84b319db0a234f03f8a6e1efc781fa7e60a67a67e4aa5cd101eea59e2c93a073b635d74bc6443d84b01599575466994a6f";
+  sha512.doc = "d016f4bd23fb08fb932c3d1516167619d239f8cebe8d2ad8e6fcd07aa945c2df17d6e05e5474dc5522ce4bff1d72fa7879bf9dee4348eb8aa8624d1fe30ea86f";
+  sha512.source = "ab1dd4f3976bd0b1a81c7772a92f1c015f2a0a662c65f474bc36b9bc6edfce6756f428fe9e45d969dcbbbeda41a0b1ffd463c3fe5cb286fa9722de22c59847c6";
   hasRunfiles = true;
-  version = "1.1.1";
+  version = "1.1.2";
 };
 "komacv-rg" = {
   revision = 49064;
@@ -18822,14 +19910,14 @@ tl: { # no indentation
   version = "0.9.2";
 };
 "kotex-oblivoir" = {
-  revision = 43130;
+  revision = 58436;
   stripPrefix = 0;
-  deps."memoir" = tl."memoir";
   deps."kotex-utf" = tl."kotex-utf";
-  sha512.run = "37aa00c2558500c5c308f7ab5c0d8af0277009ddba2615229f718f4e7f954708dd8d3942e03f5fbeebf29a7bd49b81c24c8364fb17468ca0e998d3235bb68791";
-  sha512.doc = "907fe884a715e82367ade24d3053a9cf4bd06ab276cffb4622932de1d485813ba9ebcf631680963e926ab80d18838f3c078434843c398000df9a7bbea5543f4a";
+  deps."memoir" = tl."memoir";
+  sha512.run = "af873efba59c61bfacad1914a9842a0240b38ce064258a1e4ad0317c396df1a82d62e3372fd4d1386ebcec8c74a552c6a0f9f7f8a950b0b8a4b638b6a518ca73";
+  sha512.doc = "921b184ffe6ecb78e44791d86cc622894232d7c4ff439236f2439e501634cd97e3ff1d4432d58fd1750e755010d169ad79c1c9a82941d043bf6dbbf5998d480c";
   hasRunfiles = true;
-  version = "2.1.8";
+  version = "3.0.1";
 };
 "kotex-plain" = {
   revision = 38630;
@@ -18857,20 +19945,28 @@ tl: { # no indentation
   version = "2.1.0";
 };
 "kpathsea" = {
-  revision = 53977;
-  sha512.run = "69c660f750a66974e2678cff84f0d6537fc56fd1f35ab9eb9485a29d0332c702afbfdddfd29d5ae5275ba5306a7d79867a027c89728d90e725837a4a576d41da";
-  sha512.doc = "fff6708f75f5704698e5d339d3fb57232ea64de7c01bd5eef4279dbf4ee9ab6fb3ae940ce688a7540e14bb062278c701f78d98206cbaa8c9d7a9ee0f60030df4";
+  revision = 58622;
+  sha512.run = "33e8096a1798a6204c0a6519cd13302e1c80797937aae4ce9e7c4928e4bd75472cd0864cd00ff88d3d6f01fcf1a2e027efbd5d1768024fa5ee23e56094f1b308";
+  sha512.doc = "9d34679ffecc16117ed7d1d6207602ab9466266b48b15d303764fc27301eb9dd4621dbf9ad2dcff85bfcf0c1f762316a412b3925e91f6b31e4da03e46ee51893";
   hasRunfiles = true;
 };
 "kpfonts" = {
-  revision = 48470;
+  revision = 55643;
   stripPrefix = 0;
-  sha512.run = "65cb12b6d10c91605db91de58fd33597720a4d8a7cded8a4b60c5bb3c1f2e7220c5354488a75e5a25ed0f8162d42689b6877b3a7efe5c1a0758dab237564c5ae";
-  sha512.doc = "5157ad4e67bfb1f0ba54cb34c2896a856d167bdd89a9f4bc4d69ad0b6f4899ec53cb1d22582b352adbf28d7af9458e2d78147580740e7c41437855eb30557a17";
-  sha512.source = "f70870ffa7dd55da69af7d8274fd3089c047191197f4f4afef4908a93e56e9f1b8b1655cf8042138ddaf95c24240df73549bafc6e2a3b3002b0653bb2e2ac592";
+  sha512.run = "80ac89fcf4e17560781d3f5774d39b47dee0851938409e0fda6837f99d9781c5669d1e6f3c7f27b08ce2e76bf884da7de95d5e66664a1b9e4c012063ed4a6f45";
+  sha512.doc = "fee8417e0bfb66a6ebd6869eba5d5cb64ffa64259925b9ef8c150c24d0e3ca5d15c82d3769542245c835189d7afd128a831f567dc642df00c6dac2d536b2e94f";
+  sha512.source = "387ac06bb251c84b0da03e25f530eff8f8c0ac134fc7b33b1fa3a0dd47366f8a78e3fba8bb9dd0bab2094d1082bc5e08dde7c198e302654bced7ff01776e5317";
   hasRunfiles = true;
   version = "3.33";
 };
+"kpfonts-otf" = {
+  revision = 58435;
+  stripPrefix = 0;
+  sha512.run = "7daa6cf5fcdedce50ad5fac45abe82c69f695d8f42c95bece738ca161b6b494ef4b008a769f3989ac800d9970888e5c205d87ef7c33ba19a56883547f2957c61";
+  sha512.doc = "29affa9fa075b00abc05332a214ed6abb5c0a8e79a07527461b813d335ace02e3e2e04e32abf823d2a327721b69affc4a2a065ba6b1392afa04542ab37cd9efc";
+  hasRunfiles = true;
+  version = "0.35";
+};
 "ksfh_nat" = {
   revision = 24825;
   stripPrefix = 0;
@@ -18929,22 +20025,25 @@ tl: { # no indentation
   version = "1.6";
 };
 "kvmap" = {
-  revision = 53249;
+  revision = 56361;
   stripPrefix = 0;
-  sha512.run = "4c860279b96a34755f7ba16a7f3c80557e223bc0a4099f4dd72474abe3073be97026ae2593a24cafa1553b936181eb2fb11c7c47a7b7f264a1146803fffd08ec";
-  sha512.doc = "0e5b4dacb5ee5f7193b418f0b9740e1a3fb139da2136e5939078d8e3ff2b9ae3a909a3559821dcdf5d033e04af062ee42de84d1bab4d360bb20bb6eba057d788";
-  sha512.source = "d514d398f65729d96e69c0a0231bd266be4ce707fec171cd01fd222fe623ba2b1ee2d60a7e26fdc81990e2e585fdbfc33db1dbc9dec8af979e334cfa4fb43397";
+  deps."amsmath" = tl."amsmath";
+  deps."l3experimental" = tl."l3experimental";
+  deps."pgf" = tl."pgf";
+  sha512.run = "54a107c866519e6ce6cb69bd8c13ae085813c4adf235592e32cbfb2bd7eb8039ff8e1fe165f43892367a28ac0984874581424e733b1d3722796204df96d840f3";
+  sha512.doc = "41fb3957c91e3127b5d7c78fe2114cb4fe6c8167e6f7f2bbf3a5b7c0fdb12c0ac79e47d84fad54c4b6a3165114c333c575eea01d5c0c886c19b21643ab0fb03f";
+  sha512.source = "5dae9b0972acc7c95b148fb13d9008b27591aa9ff9065c1c43dc799c5096f89a8b6b2da97b17bb5e544b1a10702cf247d9cecaa39d9790993996276741c0d792";
   hasRunfiles = true;
-  version = "0.3.2";
+  version = "0.3.5";
 };
 "kvoptions" = {
-  revision = 52985;
+  revision = 56609;
   stripPrefix = 0;
-  sha512.run = "af26d9fcf6f3afbd4e4dc105aa84e77bd737649864b3a8b4ba822e1dc62f4fc95e916df704249757d1ba4ec3b8281b510a6c5278b1f82b1a3af558b67790a781";
-  sha512.doc = "6f567a5310250dff8d15de8d0fcda8c6eaf392fd9e221b5ea50c0de0bab44324ffcc42902a9d3b6f13cf6090f5e8ca513b5abb218b0f1827e953d76d377ff1ab";
-  sha512.source = "ccb433710f2337e3663cf295b951e7d83e1fd46420a7dab127ff3f0c78f0f8e82ec064639f9c071f2a1e4ccb454776560bc25399e22fb6621c53c984c75f34bb";
+  sha512.run = "47d2d386a418ffd07810589061d13e625b691fe65522ccf5efb514750314933aeafa75f1e2a56df9851b2cabf3bd54be9bd1200df59c671f0f7c92e90d9aa9b9";
+  sha512.doc = "dc8fa31afcb9c86d5a94ffa4bfd7e02fd186b27d1f645a5317c718d8079e4b003426e9202c49f6cf3017cd49a59100d8c2a6a553d16012856e340da0e9ede0ef";
+  sha512.source = "90a0c6d2b03855dfa7716eb9a18d3c412e51a5bc592650677298eff8040acff81e3c2cda492daa0790372034f33e93763f4ac02821587d095f77dc0810a52b25";
   hasRunfiles = true;
-  version = "3.13";
+  version = "3.14";
 };
 "kvsetkeys" = {
   revision = 53166;
@@ -18998,46 +20097,46 @@ tl: { # no indentation
   version = "1.1";
 };
 "l3backend" = {
-  revision = 53888;
+  revision = 58509;
   stripPrefix = 0;
-  sha512.run = "bda67ee1c48c06b4d399664c352267a3202b5877eb324cf413b7a6ad31d94249333a22bb8b6cca285135c36e46d01cf8bbfb5f2f5c9c8d70f5fe48da20a42a5f";
-  sha512.doc = "7c193eace43f388843c9bed21d1cea87be8a2cca86ac2d8aaaa42da2409dc634628f38c1a51322d76233d2abf82490551685086c458729afdda6d5b3f093847f";
-  sha512.source = "507f472439d2229e501642f6774911bfc8edb71e0758d9fd27d7547822ee5ff5945fa922f760a33cf5a8d2e357ff090260842127cf620f8f11ed4f9a52b53ee5";
+  sha512.run = "4e0fa3710748aef350580d94d95b788dabb5d1ea86b2fe6e70697e9baa0fa7f254d06cad4c4ce4a3f9ec5b5e38be1742887051a16e327c18fd754cc500f74c75";
+  sha512.doc = "5255d75a9804c1b1c5505873897145d759aa57c7bbaff7d1c2eeaa3677af6630c984b48984ba397cf77a0c9c564d110f7983c6c024c3623883edf3128e769ebc";
+  sha512.source = "f4fe6972053149b04b9b88b4c6d231a04a6b2d6eea5c96b7a9fe7589657917bb330152840b8c008e5e798c54ebf4a6fa7f038530bdbb36cf9c634b5396e7392a";
   hasRunfiles = true;
 };
 "l3build" = {
-  revision = 53862;
+  revision = 55426;
   deps."luatex" = tl."luatex";
-  sha512.run = "c18aa191efa5c9af53a7012e4453ad615178e90798377ba0de39434c917c99732799edd3a3b89f719ae4c79da8fe4b97d867778d9cc01db81e6ff68fd9a441f1";
-  sha512.doc = "94eea53a369def65df51ad48fbbcba851d1c6d9208c7ee1475af284752e853c4f9286e70010f494803bc02fe26afdc421143cb5eb659093d2ff0580e0f4c5b40";
-  sha512.source = "1e15ccc9f0b71115935325eb97698b2660ad479f08e66a18634be2a5703d3b86f6953f4bc3570d95a1964d841dc026efb1663923ce962db767aa2711b5ef259c";
+  sha512.run = "1311812fbdba6a8c8d2ff565916ce3da9081229f9129fe8323239eda53ba544686d9bba184112bfda4304c5bdd51c944bdb51e3d6b70c2b2a90ad4ffdf0a6254";
+  sha512.doc = "33bf3c01ec1bc38122686b55bea0c6c096bc2332ca1e04b23e582b9c1754a4c76537e180fb636952cafe63639a883592b06ca4245d3e3f38b944e03dc38fedfe";
+  sha512.source = "ba5051894ce861a2f833d592156976aa5ab3a1ce9d6c87e8b8eda33f32820c4d1bb0884f193536d8ce9362eddcaf11b113b9cf9ef2ce8b551f739951afe7c4f8";
   hasRunfiles = true;
 };
 "l3experimental" = {
-  revision = 53394;
+  revision = 57789;
   stripPrefix = 0;
   deps."l3kernel" = tl."l3kernel";
-  sha512.run = "30b8d6b71c62cff716887c08830ed6a28c39056a833722e7cb93163e174eddae21ecf597f9090b12887fdec7da447ff7f4a00fa0cd352974e5de838a4858d264";
-  sha512.doc = "2d050b481cfef489a6373b4ca8c7bb765148d11dc90f49c86d2484fdee58be940e7e294168c0ce0fe62fe9c4ea70bc76d915a0ae3e55148a66a4a2355c74ca1e";
-  sha512.source = "4fb4229da07eed9d0b79fc08082255a04a3b9d78fd0c9190afb25708eb44c07f11544a55eee7afc4faff53dbaa7454ac3573b8beccfb5b8dcd7e79bf49521f44";
+  sha512.run = "b72f9d154fe57effb38b8da1fa1e32e4343e4ff8eee094794c7d3864a2b89f4ad65f2c744de8033e4371872c325462f5fac9886e5037a965d3a5e242a916a055";
+  sha512.doc = "b0951f18b213cbc9796eb80ec688ff7bddb07606a756262a252ea0572e4ae5b4c562af62bc26a13ed4512ac82c92a6eb3505d39eff50df16de1fbb924bf3d499";
+  sha512.source = "2a48f0bbb8d53bb95939376a91a08523233f002eb9c4114c36d599c89a8442a960df52a727605a4d8c5ec96e89e131ba7c3cebbb575aaae9d85b0a60f02659dd";
   hasRunfiles = true;
 };
 "l3kernel" = {
-  revision = 53913;
+  revision = 57789;
   stripPrefix = 0;
   deps."l3backend" = tl."l3backend";
-  sha512.run = "95861694b7406506eaa4d158cf8187a0f0a919b225ffcc8c9dcec78cc41e928276d9f6d67de746ae7c566f93b8ac4ffb3c6a295cfb611f742829d742619a0486";
-  sha512.doc = "4a03e19c4d45e01e0773a3de2caaa6c13ad45535b91703215c108fc8cda657591492b8e22b292d5cec6e5277e4eab177698f4405d42309489fd6e58562165c5b";
-  sha512.source = "0e2ee5a7ff9098b11f71f9a73005661503d047f73a6d42a3b67efbcc3d162206a22723b49d48194ea10011e1a74ec39681e20b6145318aac651f1dc01c0a1539";
+  sha512.run = "6cc0245c0986c964ba8a41430c4c1a794196f6c534fffa8bb87a43687d60a5f7ae686cbe09e36845898e60d13d6503448c81a6d549c7793f799c241013ef41b6";
+  sha512.doc = "70150363e1f09627e3040aaa7f1b0aabc3a62e5f5d81c00b8991895873bfccf764164dbc7da4a6ff7c5e12513d343a0eb6e38d7a173050e0db53a6c7cb66f6b1";
+  sha512.source = "5f8837dd921469ed84e48ace634a00e450cee5fd8306a7236279cdf86b842ed2134f8960ff58bc2cf15dbf26ac7d407bc2a1d1ca48179d6666e88285a210d4b7";
   hasRunfiles = true;
 };
 "l3packages" = {
-  revision = 53913;
+  revision = 58296;
   stripPrefix = 0;
   deps."l3kernel" = tl."l3kernel";
-  sha512.run = "804fd6b5d2835c23324252b627491e083931f0a78d9f2140531da5f29076b3c5e8af1b264c0cd82a0fd30300c3ed96c9b02354635798dca91d721c415da351dc";
-  sha512.doc = "c1253c55b434171fa77b3c1954a8cdf0f1eaf44344c6f24b4a58939bafa66313f12652184b443fa9eaed4b9dc46ecae908e52920ae64dd71a3cbe2ba84f25b5e";
-  sha512.source = "bee101af17e2a73f2094a0ef4a45203d22309b5c2feb272da872e6a8fe9a1c1c49219350756554403235c1d4d132ab11ceefeb70ab964305a194709293c35c3a";
+  sha512.run = "9ce87e6667a601818c586a01629ff954bd539075160a11e82bb8f53bf1306255584fca6f3ee36327fed5c78c43d7ecabcecf4db1b09410a70ec77496871ba4e0";
+  sha512.doc = "782e2a1d9d49264eab0801c625940c3fd993051f879f1e525a685572ba08e949368f429a01574a2f94d9b5dd386db33a6c75aa3eb485c725ec9c8007f5f5def0";
+  sha512.source = "b78b37e60af618bd2bb527a7bca77f99d2e977d4baa8a1899275ebd1ac0ec9f71b6553a8a83a1b8df763b6a4ea9533fb5d0bbc64bdf0e7b29c9a0bb850dce59a";
   hasRunfiles = true;
 };
 "labbook" = {
@@ -19083,9 +20182,9 @@ tl: { # no indentation
   version = "1.0";
 };
 "lacheck" = {
-  revision = 50602;
-  sha512.run = "7b8c4c7d15618b7e0d860afce675124372d31bc11b5e89ba169c355401714929c2c192912e7d666a3ca98c805e2f4942bd6173763a5a9265d1f19467a29223d2";
-  sha512.doc = "59202286440ad95fc96576f6915843adfb2b3f0092509175c759c690069e36c0ce1ae66ef46c1dc1b9c33e42e7819b1f3490b45d3c3933233201d3e86eeb5746";
+  revision = 54070;
+  sha512.run = "30241d13ac35054017c6240ad066ae84b11c26757fa895ffdc1444b0825e50a2a89864ca85d710882be4105127c4df203ad4a403504a6c309b796c9b9ee5b589";
+  sha512.doc = "a1ef923bfe1c3496651052b4a8b6978665b75f43b7dbeb254fb61657050427aedc8415218f988a7e727849dd0001b67ed023ecd252bac2445b0965a58800187c";
 };
 "ladder" = {
   revision = 44394;
@@ -19117,12 +20216,21 @@ tl: { # no indentation
   version = "0.2";
 };
 "langsci" = {
-  revision = 50706;
+  revision = 58476;
   stripPrefix = 0;
-  sha512.run = "de35684ed71408adbda8f7238c80bd4e453761e18dd4083ec4680ac8cae711dfd0aa8339cc0ee211c231b17729d6e85316845586f6f6ee70e5c0577d84b1c9ad";
-  sha512.doc = "439ac71163f1dad47fd4f2eb533f4a17a84bf3258f31baecf941242ea845d37b55ee88e8b879b3cdd070caca8f98b6b5d591c07889214ec1d64e32c3112d8476";
+  sha512.run = "d89c4c372b6caf6b2c5ed76137e8f3d89b984ca67a1c80b0a7b174a99dd68b1c6e1483380023670129e497f90d7a9e5b85d5b9a91344c0c2b047312cdb80526a";
+  sha512.doc = "4ab637562747443f5027ca38ae2a77c87e47a627c22cb56bf77d60ab2f9ed72107eb7665db526d2a8d5d0890334424e8f7aedd93fe928a4ee4ae3340a5f40db3";
   hasRunfiles = true;
 };
+"langsci-avm" = {
+  revision = 55846;
+  stripPrefix = 0;
+  sha512.run = "45e13bfd02059c610e29e486effc0fd6b2b9f3c6ab2ac12dc52de45f8ac564215141450619c6d10021f649114c9faf84ff7b6ccfd5c2ea29d0cefce188b71615";
+  sha512.doc = "d1430be2082f046538d035ed3aecd3be47694ed251a51e542a26b2206686d08594d443107fbb019732d06152d97724359b8e42a3be4bdcdf6ec778e80116df9a";
+  sha512.source = "4f7432db385da2317e11a7c41d90d06f47ca0867897db38c14f91a138d6b671fe808800eea40736266cb6b49c1f7ae30c62be84af64cfb47d986672bb9a27a16";
+  hasRunfiles = true;
+  version = "0.2.1";
+};
 "lapdf" = {
   revision = 23806;
   stripPrefix = 0;
@@ -19150,87 +20258,95 @@ tl: { # no indentation
   version = "1.2m";
 };
 "latex" = {
-  revision = 53958;
+  revision = 57354;
   stripPrefix = 0;
+  deps."latex-fonts" = tl."latex-fonts";
+  deps."latexconfig" = tl."latexconfig";
   deps."luatex" = tl."luatex";
   deps."pdftex" = tl."pdftex";
-  deps."latexconfig" = tl."latexconfig";
-  deps."latex-fonts" = tl."latex-fonts";
-  sha512.run = "cf8f91ef3dbfe100597a779a369adc5ebb18c298408d60f6c4453abdbf40315e32bc7b9a943ccaf03dbfe6cf0a43cb0bc942c6ec04ca07cd7bd23c7cf239a7be";
-  sha512.doc = "043858d0c636c83f1e641b72b330475383e0ae04de43bf80437fc51130519c8ab5985a60a2ac5a1bc77a1ce0072ca7367994728e8d83a6cf7796ef50caffc23b";
-  sha512.source = "ad0d796bffb1cb8622cde8f7e3d59d748763bdaa6477bd01a3a8644ed28f7d95150d981825e7b8f9240ff0c775d73a7bfdc0080553662ff7d4fdbcad22528faf";
+  sha512.run = "3dc7384b2074e86b6c45f5096b7a85a03064b0d9be4e74b46adefbfcc1fe80d66700f38494961a806ccd4710219681e2968fa5c0c071b366b197114af7c798b0";
+  sha512.doc = "13b7a880f89a5cb1ea79fe32f8fcc20679ed30fdba4c27837b29a7c861f52cfabd614622bcdaa7805bd0e8f1abbaeea0336d346d3a8b990e94bddb516e093ce3";
+  sha512.source = "39703818293b0deb2b337ac23e8ca6bf55c982b71e5753dbebffbc3627729f6334e60fb44e68d372401dae03bcfa3a3afedc0751dadf3934fa8037365a390f51";
   hasRunfiles = true;
-  version = "2020-02-02-PL5";
+  version = "2020-10-01-PL4";
 };
 "latex-amsmath-dev" = {
-  revision = 52866;
+  revision = 56791;
   stripPrefix = 0;
-  sha512.run = "92a2d1957d2f79bfa96aad5ce8aaf56b76e01aff51971c18fe139173fb90a22884830769eb090e68acb84a6bdcec18540e29461fb3f76eb6e9e62b82b9248e36";
-  sha512.doc = "82fdc4e2ad9323a28f29d470841be560c37574acd4ef864003656f38f7ad80279ccfc5774311c90b7741dca26c3b6a38187d68a40a1b9b262cb2c2d351ae6c54";
-  sha512.source = "519dde0546b8c548e09d2df2ba1840da4cb877d0656a620476717f4a3997776c9846035f8dc7f1db63d5f5b6558e0268f8cd335078a7dcf64ebff7507af3e368";
+  sha512.run = "53089df5f54a43f8e6e4835df89824ebbc7ba53d54a96dcb3419be22fb8151337d5b03dec8db095a808135e83de9739f8dd314befb52d3f3340a7f82d8b0d0da";
+  sha512.doc = "ec111f9ae7c306c4a028ece6edd89b205a47d05d82ad9872235ce189354cdb2415f64a401c150327dd6cbb1b84d0ca495236b733000213f7fc9865a9baceb8df";
+  sha512.source = "13564f9aa92a5e6577caacd4c912ba7b8ac1da004092dd911bc311818689b9cccdff8c5b9e6ae9fb3cbac4cfb0eca0a008d83603a0e793739f02cf4cecd307cb";
   hasRunfiles = true;
-  version = "2020-02-01_pre-release_1";
+  version = "2021-05-01_pre-release_0";
 };
 "latex-base-dev" = {
-  revision = 53885;
+  revision = 57982;
   stripPrefix = 0;
-  sha512.run = "5ab3580f08bd80592fa2276c66c4d5723ec8d68e6d15a73a47caa66a96c03c0aef178e93e6c42be5549df1dab8e64eb5dcd45517ab029a528470a16e3a91a622";
-  sha512.doc = "677e656aae83503deb68ce955e31df1f5b3465cf4d9c6b7558f6fca6354bf85c7b5f11a4c02bd8fece14726a7a1da9b7d29598015cb08c74003c010a9f88d974";
-  sha512.source = "51b3fede4db7a512d0eab48ae75a3afc741e0a46e961983a3af025c48ad85bdc82a6819ab697348ab721d28cacd88907a832f80b5f1192dfcb9eb9d5681c8cb2";
+  sha512.run = "3507b1e8df4ac9324ff9069f3fde6e5eafa03ce4a13012f8b52f6b8df7a7f2b2d6cc0046282724fa7a564a0883cabba9b2b6c5f1e78daeb8144d30c7a5cfa9e5";
+  sha512.doc = "321b6d36ed15df2b17ad5de07e588b9983b99b62b9e4af102f976bfd951f45368449d29c463baec44de02c1167d3fdec0e073367e687607001c8abacf4531d42";
+  sha512.source = "3cba58ed6cb3bccf4fba253f0c2757a0097c2dfc0abc1ed8846bc8639d24f53c0ad1fcf0fb35a2b13d30786c016772d483f67ae058be2b814369838be95cc6c2";
   hasRunfiles = true;
-  version = "2020-10-01_pre-release_4";
-};
-"latex-bib-ex" = {
-  revision = 25831;
-  stripPrefix = 0;
-  sha512.run = "9f91b724d8fb1bf1c3140632c4ba485350defdfc926dd3d558d2a318affb5b6d56cfb1d0f8651d0af878f165148a5a1f06c82f71b8033187ca485fee1bb6ec0d";
-  sha512.doc = "127f8ef52da49a348e79b062e16dc6a5f2b1728fd553ec3eaf824117e764e11d8e9dc63d34c0eb86417ddeda5e7f53403fe2361d8f959acb697330148f5d64a6";
-};
-"latex-bib2-ex" = {
-  revision = 40098;
-  stripPrefix = 0;
-  sha512.run = "cabd865b67e6e41b3b0745557b25d03cc15da1f1de41c79f92274c05e6d07718a598554b25c096a4261b202a20134abbd788f578e279ce6d57efaf1dc133eaf7";
-  sha512.doc = "2b5f1cecb8cb5d3ed78b10846b6f5ae38e02b930c2012353e7064b12865b155019924aaf48d995910b6cb7594928276e896421e85e71bef17822237f8350dfde";
+  version = "2021-05-01_pre-release_2";
 };
 "latex-bin" = {
-  revision = 53786;
-  deps."latex" = tl."latex";
+  revision = 57972;
+  deps."atbegshi" = tl."atbegshi";
+  deps."atveryend" = tl."atveryend";
   deps."babel" = tl."babel";
   deps."cm" = tl."cm";
+  deps."dehyph" = tl."dehyph";
+  deps."everyshi" = tl."everyshi";
+  deps."firstaid" = tl."firstaid";
+  deps."graphics" = tl."graphics";
+  deps."hyph-utf8" = tl."hyph-utf8";
   deps."hyphen-base" = tl."hyphen-base";
-  deps."latex-fonts" = tl."latex-fonts";
   deps."l3backend" = tl."l3backend";
   deps."l3kernel" = tl."l3kernel";
-  deps."tex-ini-files" = tl."tex-ini-files";
-  deps."unicode-data" = tl."unicode-data";
-  deps."dehyph" = tl."dehyph";
+  deps."l3packages" = tl."l3packages";
+  deps."latex" = tl."latex";
+  deps."latex-fonts" = tl."latex-fonts";
   deps."latexconfig" = tl."latexconfig";
   deps."lm" = tl."lm";
+  deps."luahbtex" = tl."luahbtex";
   deps."luaotfload" = tl."luaotfload";
-  sha512.run = "40445a3b11e87d12b665b09300ab634a90bd5a9d8b63475f8a81cd50befd9274558fed2d6c3ee29819feb09d87c79047b0deb198e69e6cd031c99b52c6c1d378";
-  sha512.doc = "c444005a8b8a81dc2f21c5b030b075d1c489e6a73d384a47d39aa87cda4dfe7846d09e2badc009d7c96a1970def48fd985b2ef210a39ed4d294bc41bce7d1492";
-};
-"latex-bin-dev" = {
-  revision = 53786;
   deps."luatex" = tl."luatex";
-  deps."luahbtex" = tl."luahbtex";
   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."tex-ini-files" = tl."tex-ini-files";
+  deps."unicode-data" = tl."unicode-data";
+  hasFormats = true;
+  sha512.run = "b349e8fad2765c4a87b471532dcfafedc0a9711237c6e967011727da7bad3a5ed27a89eca81af324aa84958872d0b78c68e6d9490fced44eb7636b2fbf36611f";
+  sha512.doc = "7cfb465f4db5089e7fa41762a0437f5f51445efdb9aba5d676dc5933e0fbcfbe0fda31baf83e20f2d16e6a7a0019c71752af8744d02ad12636adb9afb8cb3041";
+};
+"latex-bin-dev" = {
+  revision = 57981;
+  deps."atbegshi" = tl."atbegshi";
+  deps."atveryend" = tl."atveryend";
   deps."babel" = tl."babel";
   deps."cm" = tl."cm";
+  deps."dehyph" = tl."dehyph";
+  deps."everyshi" = tl."everyshi";
+  deps."firstaid" = tl."firstaid";
+  deps."hyph-utf8" = tl."hyph-utf8";
   deps."hyphen-base" = tl."hyphen-base";
   deps."l3backend" = tl."l3backend";
   deps."l3kernel" = tl."l3kernel";
-  deps."tex-ini-files" = tl."tex-ini-files";
-  deps."unicode-data" = tl."unicode-data";
-  deps."dehyph" = tl."dehyph";
+  deps."l3packages" = tl."l3packages";
+  deps."latex" = tl."latex";
+  deps."latex-base-dev" = tl."latex-base-dev";
+  deps."latex-firstaid-dev" = tl."latex-firstaid-dev";
+  deps."latex-fonts" = tl."latex-fonts";
+  deps."latex-graphics-dev" = tl."latex-graphics-dev";
+  deps."latexconfig" = tl."latexconfig";
   deps."lm" = tl."lm";
+  deps."luahbtex" = tl."luahbtex";
   deps."luaotfload" = tl."luaotfload";
-  sha512.run = "4870115605106d3954bb2ff7a78e2c823306b293b8cbc960462f0b9b82e6bd6bf996a6d05c0efde82dc24004e591f2685770368aef9cd1b4f8aef55f464626e0";
-  sha512.doc = "3e6a442ecad5f02132a8936b5d353223360754fb2e69674cc6eb63da3d21a5cbf58de3e89095b3f10a73a2e062398b4de7c6f7a20f4e35ab7778b6d5bf344f84";
+  deps."luatex" = tl."luatex";
+  deps."pdftex" = tl."pdftex";
+  deps."tex-ini-files" = tl."tex-ini-files";
+  deps."unicode-data" = tl."unicode-data";
+  hasFormats = true;
+  sha512.run = "31c364be709db593c1a1d4e5250a7d8899fe0f5eb534c61c5f67d1a032b4afca9a91c5d2d1a541e96045d294c87d7ca1758a6a59bce8a3e94bf5511e20cf8854";
+  sha512.doc = "94474a52fb6a2bb801405c83562d6dd69038cca8d73705f382c2acc6c63d57e057a6b6c1b93556e41f5d0d9f9adfa269f0857c35e6523108eb230985752c3261";
 };
 "latex-brochure" = {
   revision = 40612;
@@ -19246,10 +20362,19 @@ tl: { # no indentation
   version = "2";
 };
 "latex-doc-ptr" = {
-  revision = 15878;
+  revision = 57311;
   stripPrefix = 0;
-  sha512.run = "dfdaaea00e167fa3e4183b6e6a223996d1364707a7cdfc0bb8cc76d02a0c5b3739d8171979dd80540edb571cef84167b24639b265349fc9646d5570e6c48dc61";
-  sha512.doc = "e5ccf3968aa02ecdedc2a64f0c53b2eccfa3c4df66da5255068248de013753ec4be67937d9c41552f302979edabc53ce64d902a9f13e4174d67f39909adf9735";
+  sha512.run = "22017cc47746d2e14436915a0d649b31050debff1827cca44a3ab7bf9b240f40450d445a8eaab811b8737f589839ab7f2078aced47b65b320237ddbcc443b99a";
+  sha512.doc = "c7d7217a9136785cfd6ddb000e51d455e7482bfe395a9131329767bfffc71f918c2349b1426b615a6740263c958530c68c044ee3ae78300a004a8acf20bd8bdc";
+};
+"latex-firstaid-dev" = {
+  revision = 57981;
+  stripPrefix = 0;
+  sha512.run = "d15e218f16cef0e7ae518ee567d9d3912b20e1e62781f0aea4d167b1922ad28b5ce946609fd2f2a9e3c2671f096a0e34c0f88d30877dfee466ac37130cf20a18";
+  sha512.doc = "870a42973a33fccdca2c176071bb5dc9f52f29c69fbe41633f75097b3b42e63db0185697ac0bbeb487eed0bc35df61507a934f2ab47c413970fa6ee1eeda73e1";
+  sha512.source = "d9b97a9c8b659ef4a4ff3a67a4593bf95bf5d01917b0c550017a4a2085d5acb127a1028920d4bee04a7b00c34219f001afbdf8b34c51a0b04bcca2e2c70fc3bc";
+  hasRunfiles = true;
+  version = "1.0k";
 };
 "latex-fonts" = {
   revision = 28888;
@@ -19259,9 +20384,9 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "latex-git-log" = {
-  revision = 53942;
-  sha512.run = "c320354a35d98a3e32c835c2a797100dc2a4417dd3e72169c35baf1dc2022b7aadb3f8ce124ab6ea6f7d6b99728aa438cf4d15f7f6635bf3850e271679b07603";
-  sha512.doc = "5ff991cc421b7f44f975119f0d6445d5898e0a2534adad4ba0454d70645e7f9358321ba2d6465fc0d89bdcfe2f70eac6efb4d93a915cf23018cae835d3979328";
+  revision = 54010;
+  sha512.run = "15994c6eb9ba1b194df270c68a3d74ab3db11974875ce192559182b2dbfa9b308d598056a3145f2cc2f6718865a5b140ccb95dea22a9e23edee527e5b86362ff";
+  sha512.doc = "52bc94324c64caac9a5b25b49c9ea01b8560433d640646ee70830d27637482cf50da95bbb86db93006f2be4ab9f5f79fa144e4b631d62c05f0a11ab45e639cbf";
   hasRunfiles = true;
   version = "1.0.0";
 };
@@ -19272,29 +20397,29 @@ tl: { # no indentation
   sha512.doc = "ab9d885c811af3964e8cdd8576349059bd45d660e6b9a7e931697f7c7fa5282c725e044817de8f2648ded59519d1592945e0804ba7cbe0054ce2bd4d44606af5";
 };
 "latex-graphics-dev" = {
-  revision = 53651;
+  revision = 56791;
   stripPrefix = 0;
   deps."graphics-cfg" = tl."graphics-cfg";
-  sha512.run = "52dfe7ed351ab0d02eb1de79c8a76f2fd0c8e2e566539a2c688abe281cce1e018ae56d1a4451c180577ad7456bb3ee90cad6bbbd4b05d8bfefd98777c096b20a";
-  sha512.doc = "e51cefe0eea01972b029655605942bf78519ecc0d4d0e1812ed755e0caa91492972e627c0fae61d0166bf49f6d1ee6279249592cc025dc1bf31f0f31ad1d5a7b";
-  sha512.source = "e146e29297ffd54555590b2eee36d35c4cd989dc51ad1d96ec20a416b6b9d24f2076c4253eb16226d394f6a1a0175fe27917ecb8d5c1475623c71f6987999e58";
+  sha512.run = "0c92c61b530930e7e1d7d0343bc5b471b340d9bdab2b277afce01140d1bf7c6f7b0d7658309173d480ecffbe764ab0669335d3db9bd3c0d4be10aebd19243133";
+  sha512.doc = "5ec398dcd9ba55e35f1575a09b10d6d589238089ded1653f00dfe15e60cdb1f46df88fe8d21807aeee598cedc66791609a525f01bfdef14c1d5225ee4295cd73";
+  sha512.source = "db6214e4fec5acbd0c9f23d64f6e1a19e8ffebf2b2e5240498067a1cffb96b66abbc7d53d2ca02cf1b4962ffc34d79ac0ec6c53ba4a250ba5b518b54017f11f7";
   hasRunfiles = true;
-  version = "2020-10-01_pre-release_0";
+  version = "2021-05-01_pre-release_0";
 };
 "latex-make" = {
-  revision = 48925;
+  revision = 57349;
   stripPrefix = 0;
-  sha512.run = "cb48ad252c77ca6271a527718872f95f28d64664aa62aca9ed11d73b1fdf29dec1cefa6c2fc07f0c95e16495a0a2410b59087e88a889b1047ce24bff71495ee4";
-  sha512.doc = "bfe0143040544987d9e89827b79a847657f9b705ef3607ec2757ab7d5a8b4e005c64060ba5d3cf4066c4f21e622cafaf5e7c442aadd53f6583230e7f276c317a";
-  sha512.source = "c437e31d4cb28c8ad838545aa0afe053318986a8fd9efb8dea0500d544b94bcb2a6b89c96d079ddc640477bba845b84f7f1fd8cf86ad689c04628e274352738b";
+  sha512.run = "1813e8f2c768d7bc33a44d8fa11609915bb392d08da86718ed969fbe3c4284d57619a39284e611ab454d207edd054b36322d5e621cd23e302e85c17c52c5060c";
+  sha512.doc = "71111a4f203b1ac200515ff1668831265733c9b7fd6884c4612f1261e65ad6cb1336258e7ef47f51f0d0e12a98f3efe4884f38426c0905164b3a9b8ffd47895b";
+  sha512.source = "9aef117c9db4a8e59715ea906c8293fb460ea4026d583d33bb34c3e14ad92ccd536d831cd2e3eb8729eac3b4654236e73419a2bacf84e1c10d640ab9274db2fa";
   hasRunfiles = true;
-  version = "2.3.0";
+  version = "2.4.2";
 };
 "latex-mr" = {
-  revision = 44601;
+  revision = 55475;
   stripPrefix = 0;
-  sha512.run = "3c5b806bb100cd7280d4a7e97104f21b4260372292aba60264f88fe9a7230fb42365ffea15a948d4334f8f74683d9a79ca40cb9b87c49066d61a2b0f101dfb8c";
-  sha512.doc = "6022c2e3642928e716e6ed2536c849fade08dd26138312567b139a450032ec75d029ea5f1103bfbfdbdb7bec4b35d972c08e866da8d5eea89012b7a1fc414678";
+  sha512.run = "eb9b8b12f15a8662eea0e3df907264093074cac1d8f8e1f027186b35f3f3318c4b8c120d261be21350fa660b51a5f33e196d957864b0676395ded0f70940464a";
+  sha512.doc = "51dcfff4a8df46a8715d07d2528d3a1960479ce4bffba9b8eb5170d5d6307f0c776e197bdbe788d316067070c1d5f5d1382c32430e94ea83664868931a844e52";
   version = "1.0";
 };
 "latex-notes-zh-cn" = {
@@ -19311,13 +20436,6 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.63";
 };
-"latex-referenz" = {
-  revision = 36671;
-  stripPrefix = 0;
-  sha512.run = "b61dfd5317eaf0ef7add1f80506492390d5ba0c01480e83d384e60ac0aff39710945ab81e030e7882fafa77a2913d88efd31f3cf05729ddc09c63243e825260f";
-  sha512.doc = "e71abe8a8384be7b0e343657e992b7703d30b38bfcb1dfb689954bdf84581336e099059bdb14af464c951777a8a6809f1161955868dd2f3b219fee3d2046ef94";
-  version = "2";
-};
 "latex-refsheet" = {
   revision = 45076;
   stripPrefix = 0;
@@ -19325,27 +20443,14 @@ tl: { # no indentation
   sha512.doc = "77149dabb1fe5c4a46591b3b307d02b2e2b33a07267afcdb44b77a2a823dcea9ea76b4be5ddad530151b638cfbcaf5d87ed0fed59a9e8ed99acb0895717bc71a";
   version = "1.2";
 };
-"latex-tabellen" = {
-  revision = 16979;
-  stripPrefix = 0;
-  sha512.run = "ca056b194690d7b71429022c4b80b9d171cd7aa2e580921eed556a11fc2e3162106a06d61333dc69495d801120c35528fdc74b9c282cb6baa3391595e5f28d76";
-  sha512.doc = "7f3f4ee26f1f9f6bd6d27cbde4193d8e2607a34ee2ebcbc44934b17673b60375a566828461ce672fe8d4404e32784cc62a54b51873645592079aedaa7c82e081";
-};
-"latex-tds" = {
-  revision = 40613;
-  stripPrefix = 0;
-  sha512.run = "a688c4e6790460f3155110f31c36c240fc1d9e9b8c3b2641a1a186c54d7939bbb4f779e80cb125d34036b64ce8da26d3460365d34d23d49067bf8438816cdaa3";
-  sha512.doc = "cc4928fd82e07cc0b601c702444a84475978671e3c86280cc8aac334ca562f3841a9f8c191bc174522f5c00e45cad519e6ceec1344e229f4b125611f60e43766";
-  sha512.source = "0f1b88a565c417a238476ab3c91bef40d265388458473f1ff3b4dd5e6b6897e8d8cdcd15f9eab17606aadfd5ce5ac978b81385618d8d3906defe4d13d438f72c";
-};
 "latex-tools-dev" = {
-  revision = 53773;
+  revision = 57982;
   stripPrefix = 0;
-  sha512.run = "3d4c711d21b2a64ed895bec4a144c22db6f2df8acf396cfb490c61ac924f2a73af06e28a4c7b1e4ec034979edaea62bdf5041e10145b4883186c190a91ecdcb1";
-  sha512.doc = "907666c610d9f56e2f182c7c958bd83dd7fa48dd259bb7ae58e1e33a0c7349f694174324c6eedae9a1cd2476ae68b7c6beffa337cbba4d0b92c1fe03de2320c7";
-  sha512.source = "c91c08cb02e6429e92be70af04d1442162e7b8d1b4caf02cb6a61b2032d557dd7850d7c5dbdd2cd547b6daf3f5d29d5a6d01db768a901a025c5e9c31014932e6";
+  sha512.run = "0d7ea543bdd7bf257290cf0731497a0eeb6438b28ec2e4b978fe4503fb09b81cc77b8eb33283446b93b66fc76fd255b8f76dfbc9d5fbbbb3d91b8f5cf336d987";
+  sha512.doc = "c7653f174ce48bcc10753970cb10140a76f0eae9a7a7b08fc35a107d71fcb6b62adf958a07f319c694cf09d449956bf060416f86bd9f5bc89aad919ee8421992";
+  sha512.source = "a20d49e1cce2ffb9f510645e4b5f047352149328e1f5f4092523d5785a0c23739256079917ac636b19acf8481981f6edefe6c6246124a3449521cf53556780d3";
   hasRunfiles = true;
-  version = "2020-10-01_pre-release_2";
+  version = "2021-05-01_pre-release_1";
 };
 "latex-uni8" = {
   revision = 49729;
@@ -19356,10 +20461,11 @@ tl: { # no indentation
   version = "0.03";
 };
 "latex-veryshortguide" = {
-  revision = 41844;
+  revision = 55228;
   stripPrefix = 0;
-  sha512.run = "239b6ae896eb109fb61aaa96149e3b3962fab250a4e017baf81da0ba7836837c1920456eec8fd20999535c96fe415115a621e73e639cbebf64cc2b14989c93cb";
-  sha512.doc = "aa58ce07f56dd819b6a3b618a518384547350a4582828020f5b45752c1dbb88d5f36c5b5bb831129352489bba8f5c19f89d38c99585da9253f01311ea63d3232";
+  sha512.run = "5c32c836c5ada42858de4579167848ef51c4b7626601fa95fe56175f406cb747bba5015ffe369ebfa93e789d29ba5329e1ab3e42262699695fa59b6cf047a581";
+  sha512.doc = "e2c521e768ea425312a400d88c893404c0f86c5886f595162b2a03493836ee1a949e2feebf8a8b3c9d6450630ff644b8973374f9963c67478af29e2a432d2f9d";
+  version = "0.7";
 };
 "latex-via-exemplos" = {
   revision = 53248;
@@ -19375,22 +20481,22 @@ tl: { # no indentation
   sha512.doc = "a972860f65d763c6fb45e9726e5dd7b8234509b90634f45b8b25e090da92d0ac577bf8b33ea7b0a0f91e4e5639bf62c07086dc36708ae697c1e16e644acc83f0";
 };
 "latex2e-help-texinfo" = {
-  revision = 48918;
+  revision = 57213;
   stripPrefix = 0;
-  sha512.run = "dabdf3a20bcc6740b7feea1c444b2423dc54a97d0118411d44acfaca31259782eb49bf68b144ab553a9f865ec47557bcd47503b1f1dcbb69ae3302d94bdce715";
-  sha512.doc = "0a3cd8f22e15709b056d6ace9fe0c8d348ac8bc808fe8cc98498b3d14747eba9f6e9838375b0ab8226694ac8dd45027c62ffc1949c3e1a42f9f182f346df0123";
+  sha512.run = "914b0959cd94f13c8c8a9e3bf4ce88988816298853d73e02ef3bef24a03e621a43d6e7e2a33a0253991c32c4a02b87bff7eb6d6a8cec7f4ca80142308c4d79bd";
+  sha512.doc = "d659abed2563ca91820af487693cc91919ee3ae10c077c40a27fdbcc5ef1b7fc223007945bfe15ba6e5e8c2522b0f46c78810342cbebf9a6e9a96563d42c583e";
 };
 "latex2e-help-texinfo-fr" = {
-  revision = 44997;
+  revision = 57275;
   stripPrefix = 0;
-  sha512.run = "6023d1aaf419519fb35f916be296e9681dd2e2912b35d92da5b59d5ab279154eb71813f49b159c01bad045246a293c8e6552d2a469cb69916d169ac1b60d9daa";
-  sha512.doc = "bb1ad23b5a46e00193b4e807aecd0a439d1d5f7c15736e748b002168441b5c7fccbcd8f7f6361a1c5fa3175344c9aa1c0ec77e20be450e653a0354a87643b9eb";
+  sha512.run = "d531614aca1d80614fd6fd8f56ff8c5542c5c2f1c944083d151317820b9019395a7d3ec4daf91d7afc53d3852aee1fbfaa6ece12bc08783d508e996b330e5059";
+  sha512.doc = "91f4166da251720271be473412764934212e19fbe21a4487245a0b19e08967c2693b81c89d98788ff7a768f1da462a5cd44aeec95ac459c912e0f128ebe65ecc";
 };
 "latex2e-help-texinfo-spanish" = {
-  revision = 49023;
+  revision = 57213;
   stripPrefix = 0;
-  sha512.run = "65faa42d1ee01399e1f8c34cdcd1a5d1ce6841f144e7b582aa4c3586ad1426d879c60427944a9524f16d48c8340028f1929dddc04f9ca4f8e634ffe29eeebf72";
-  sha512.doc = "b6f612ef87c52c9b67c65ed79f8b2e4b7e089baff3da617951288b57124d63f53acd4f48edebbcd7f27855b3bfff14dd00aa5a2c277b4f89b8f49426abb49c6b";
+  sha512.run = "d6181f2049056c06911b5eabe977d07d24099bc2bfbfee3ff4d2bee811af9b2a6165fd8ee464fe68172f5b8d47d85ac9ae973a2bbe8dcbe0529c9d68d9c3c692";
+  sha512.doc = "8b8bc956d914b97d2679274e6f3e4ef62022eaf32e20dbac83e0c995e0c85ae33e8cf707f94a2ae9890747bedcc27ec46f627dd4a2923f10a4a7ec62d039194e";
 };
 "latex2man" = {
   revision = 49249;
@@ -19400,11 +20506,11 @@ tl: { # no indentation
   version = "1.29";
 };
 "latex2nemeth" = {
-  revision = 45934;
-  sha512.run = "ee82b11dfd3ede3b926a034ce8a7f46ae2bdd065f648fc0375a62392a8be605e391c64726eea03efc439b7a01fcd3cecfd70106335c72927e45c70ef0c8aa48f";
-  sha512.doc = "a674eac6b80811890433c613f7ec9c6fc4667791c5b4692606e88d3e38ee59a3b68951e5f19b26d2b9f9de3b79002d17f4c539fdcfce37b82c3dfea5cb811086";
+  revision = 54389;
+  sha512.run = "37065f9916e6755c1a97f2b8a1f1cfd838008b5da2d2131938626ae4eb6872af30e5b4b767ff3204e271a86b7245b54d9146d9fdd8c807f882ca28e1663d2d14";
+  sha512.doc = "e2ea8084bec4d41a4b694c3b46788e3170043ba1f7ce4096bf029a4de61b76cb504b532d7e0c454943980d44d1c145a78a9e4a7f20a6654aa9cca63d388bdb5a";
   hasRunfiles = true;
-  version = "1.0.1";
+  version = "1.0.2";
 };
 "latex4musicians" = {
   revision = 49759;
@@ -19428,21 +20534,21 @@ tl: { # no indentation
   version = "1.0.10";
 };
 "latexbangla" = {
-  revision = 42409;
+  revision = 55475;
   stripPrefix = 0;
-  sha512.run = "97e4a88b3028f3836a82c80bee739393c0ebdd219ac3b78acfa00f84f5b5857334605ee4719c8dd40d1cfcb44a4f9f821d711401d091a3ab46204d2457559fd4";
-  sha512.doc = "dd88aa9630a08992348699e71c1e1ac7a697c0279a83daa333f0bd0c098d564b730f7bff829e7489000ce09331c9f13a804badd4bc253dc181b09646f8c0b991";
+  sha512.run = "8b61b8aee0e95339b356fa85b9bb7ad3833ccf410267eb31a84a811c25c4e34ac350952fa26ed6461468bfeca37121e809ba560fbed7a0d8e747613708ff7795";
+  sha512.doc = "8d8c686edbf3e70e70fa577c7d09f2e3d3f1ab938253ed01892ba030be0ba948bba48d67503a6f215628e03160bb32878f868d8a72b5a0d65ce3400fb9011ac9";
   hasRunfiles = true;
   version = "0.2";
 };
 "latexbug" = {
-  revision = 52414;
+  revision = 58151;
   stripPrefix = 0;
-  sha512.run = "ff27b7fdfb53b0c2b0ac4b5aa12d98e30c09bf50fbc7959930b35721924bf52c361581ddcdf8dbfb03571f676ae9f659de2bba137b937d37ec11a0da2bc721b2";
-  sha512.doc = "5e86be0719138bf111b6d655b2aed620be6a490f772906fa676038f2a5f13875d3ebffea2094f8c9001d2e70334002498d8eaf5ef96f14cf8458ea0b03bf8723";
-  sha512.source = "7c00729fb9c17f3437fa1839c0ac12b51407c4ccfe2566b0d0a19701cf124583750c00030f359b70cf0280eec29f55d03d0677628b2b149f37219e880d56dc94";
+  sha512.run = "167fd3afc056f1a17510ff3040208686d71939e2bcb8f09e4d21ebd57420debd0beb315d0c6623ca2525f8ce7d50c063b3761eadd1764a8d369768edabde2d69";
+  sha512.doc = "4875fb2f4533d884259ec3191625b252f2d922ce8e992adf3c58eef2f1263e7c24121e6cc43d16e617da2dc66abbc6dbe9899cf63ee1592c42cf61174d77c763";
+  sha512.source = "2daca13020e5e605e974dbf4da0e83a1941496202b2908f6e4ac40666d715cf4a8edbc9ced512974d88b05812e62c0f2e856c564a9116b95a530dc18e768a0d8";
   hasRunfiles = true;
-  version = "1.0g";
+  version = "1.0j";
 };
 "latexcheat" = {
   revision = 15878;
@@ -19494,20 +20600,20 @@ tl: { # no indentation
   version = "1.1";
 };
 "latexdemo" = {
-  revision = 34481;
+  revision = 55265;
   stripPrefix = 0;
-  sha512.run = "d8b6ceb9aed4b2edbb4fc9e939dbc2dc5b6989fd04703dce2e504135d2c1bda46c8dd78e995d41a7e8727563c72b4f77979a52513ab0d49d8c95f80246a94fa9";
-  sha512.doc = "34a0ed1b5e9ce5f2b71d67384427b4a7d69439ac4eb5113e1b8e270618164f883b05bf7cbdff9da57fe2bec7cf43bed844ec77b90da00efe30fe9061b3ca0339";
-  sha512.source = "7416fda5909c8488b2e7aa6fce9b1c0e747577e82a2fcb44df617c493e768b3d86310b1817ccfd96edd22aafdee45d32eba1495949c44aa9c1e252abece321be";
+  sha512.run = "c93e3d39dd042ddbb32661b3972d153ea3905726fd0961a4162223fee274cea0c95f0978233c4619e00a043189e9d2f2c285767e33890e30ed118f099ef9a5ae";
+  sha512.doc = "442a42c51eab80a28152a53f62b792108002e912dbb0e9ff6afd41237cdf2e954c57c46b0ddc382c0ff0877ddf9747e22cb7c7ac5fabb79080cdd657a1c1422a";
+  sha512.source = "2bfdb3740b0118a362e890257a4f38271d6ac24a4b8712edb5a646eeb8ee14787d913d7d8a171ab9a849667899cad3b2089a9eec2fc7c21bfa21e91d900c9527";
   hasRunfiles = true;
   version = "0.1";
 };
 "latexdiff" = {
-  revision = 48926;
-  sha512.run = "64b3c9906ade859568f67b235192ff29b70cd4ba94006a86cd1f7872d88ec7cf274fe89a5d292737d86295d7f92ff9be7be46936192eef2e5f99aabd116e9479";
-  sha512.doc = "665d2029e8fa0eb6c1fbf3f9d99d6ae92e43e422bc59da6cc64b5119f3ffc46c6310acf8a95861ff3bc4d5ab6ac5fe78290c0454f9bcb4ffe2e815872f6b8c55";
+  revision = 55540;
+  sha512.run = "cd69ad7bea121664c600e77438eee882e71447bfe5ffb034773a72269ea856f41b54b1369aa701b755586e12f121948d9773688f65d6b0bb161e3a052d95c5f6";
+  sha512.doc = "33931c4a47ce1ae61119a54caf074049504ea044159afb6a8ad59dcfea1d54782939ef5d2e8f3303f0aa623c64c4dc84a209eefb179fd057b6903ef6c9409f67";
   hasRunfiles = true;
-  version = "1.3.0";
+  version = "1.3.1.1";
 };
 "latexfileinfo-pkgs" = {
   revision = 26760;
@@ -19526,33 +20632,33 @@ tl: { # no indentation
   version = "0.3";
 };
 "latexgit" = {
-  revision = 41920;
+  revision = 54811;
   stripPrefix = 0;
-  sha512.run = "5076ebf74361a6997536988c5204a72ffd761a40c33acac03bf2a104bfac3661c91b320f47bd264d607df7dceff41a18670e7c18cf19cbb27fba1d5f273c58ca";
-  sha512.doc = "dafc932c2d0184c848b7f7ca549a300f273fc7e358c6bfbc6b5698aaeded12071a722c856255889438e1dafd1c64d6c2adcd60766f8e1a1652a74591d5e74161";
-  sha512.source = "58097f88d70518c49bb0900c595eea40241a600745a8fb8a9c6f47a3deccc97aacb195305ec48fb54acbb95324b2ef27b35467bf90c27c88a960efd6d579a0ca";
+  sha512.run = "4e3787d5e9bf950e796e7eb475c825f20628ec5ed5b99cb145036fba99c4941ed81b347acba1548dea624d87a03e0cdbbc28fc579cc8edb0aa36460e9df0b6d8";
+  sha512.doc = "bfc6ce99ca1b66c0b1d5d98453716cf9e3a7e65ac55d7d17e5b06417f57d13f532602b537c804581e2e81b5265d554dd99e4d4307ef6d634d25916aae1892cab";
+  sha512.source = "8a09f128428644335c9d909d23acc91ede2020304ebf009be00928cdef670aba23d245b979e5fd8d927c9d0e652bc195c717a744015a31fbb2aed1c566abfaf4";
   hasRunfiles = true;
 };
 "latexindent" = {
-  revision = 52050;
-  sha512.run = "0aa45877dfacb861ff325c13518abe9fb15b6a07a2c6ba93fa7d8edf982be40c26d46c439875488fa468490e5a74e87cb214dba05346a8946addaddddb44a3a2";
-  sha512.doc = "0257dec625380e5c31f982499738d67c0294acfb113f6c0bd6a81b6f725e400853405a60829290e3fa4626625a01df0e838d6d9c07fe4caf7a7949cd22ab690c";
+  revision = 58790;
+  sha512.run = "d33db672ca71557e5a2fe1a59e95c78a4da49ed0d9a73da5b1ecdf9b36d1b4fbb61aa6f9ec47d7ec5bbf8197878692758cec937879bce94d1f8505b47514a050";
+  sha512.doc = "89bfacb4bde1abd385173bfa2b02a7f0c8fac437f557dac027e4b7b112a27308b91844217c6fcf46dfef2141f9efd1025c17b244acc8b87b56a72a5595beaf28";
   hasRunfiles = true;
-  version = "3.7.1";
+  version = "3.9.2";
 };
 "latexmk" = {
-  revision = 53293;
-  sha512.run = "b7e3971cd1aff149208fee6857066c83ed9af9229bc7402c7003480121a06684b9932deed33b8bba9bef544e000bab21425c51412cd2f7e273e0d53eecdc13d3";
-  sha512.doc = "3008825a99898209da2311ad09e6b0ead8d8557c2e47cfd6a668b8711bb22102b89a6d5326735c306e3e21b824e8df4bc2bec864958a2f3e1a8a2884175f7b35";
-  sha512.source = "eeecd1be1cce9a2baf33d544bfb7726b0c468d223006241f15bf6f8a0134bf1987be49b86fded6ed5dc40acc42523373cb2407ecd5d41e7641b1ae0fa64e55fa";
+  revision = 57213;
+  sha512.run = "6f27053fe1356cf751b39801a2d1cb208b5309f45202ac11d87a4b8a573291aedabefbffb4e355935dba8755862a89b5d47eab820d939e6f5f851a7009933d7d";
+  sha512.doc = "fce0c767ac6aad345b5cbadb31bda92e1483723299e877ba83983c1fb9346bf776ceaefac89be265d45d5348777f8e5d072306432fba9a81010d2cd15944e48c";
+  sha512.source = "32d772c91be32f870d11891f4a34bd7bc903b95d27725edb6e9e3fa8a2b163ea4730c09ee4e0f93babad123f5f25c30f5efcbcfcb64837a7793e9c3d51da9ef4";
   hasRunfiles = true;
-  version = "4.67";
+  version = "4.70b";
 };
 "latexmp" = {
-  revision = 15878;
+  revision = 55643;
   stripPrefix = 0;
-  sha512.run = "e63d213969434907df862dba2684ea76f8603a8283764ff431edace0802a61cbf3eadea6a532a21cc83d722359ac39680e716a24859b85f526dcfd809ca319d9";
-  sha512.doc = "7668afd5cc1dd365811f8e4290392037adcf5f3bb220e062588a446827f1d39510137185699d4b667f2b452809704d3c08caa889bb52cecafd0e190b0e7c49a5";
+  sha512.run = "e32eddbc519ed33687c1fbe36b2cf45f9ee886a78c0a088f6648da42dbebb0a72064ec4b9d5333656cc3bed7b251ef3a758926db88e6bb79ffd4536489717db5";
+  sha512.doc = "02cda290799bde7288220d0b634b970a6ac543fd63318bcf90c4ad06eab074f5851e7bc42c9359af709eccc0c8847a0d3d1a9e27cdfd3f60c7143de7ac4d3901";
   hasRunfiles = true;
   version = "1.2.1";
 };
@@ -19572,10 +20678,10 @@ tl: { # no indentation
   version = "1.2";
 };
 "lato" = {
-  revision = 51462;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "1243f2c4fdea9ac510cc99bf4afae173378b47caaadcca88251b53badc5f63bc465e19247ab10605436ca07d96ba4966460f35d8336462950253c4eaebd80bb7";
-  sha512.doc = "28053a4561422f721c6cb400be57a0aa18d18173dd5c9b46b806dbd4c8decc5eb65aa5dea509b42909791bfed7a2a8772d3ba9917d3bb1f6fff742caaa5fdbac";
+  sha512.run = "2f8454888913ec6a024c53cf157509b8b769f948ac2c92d0683e80ff8e22865545a6a65864876be35569bf4a5d56ed871c8112b216561e3ce585136bd062c9ce";
+  sha512.doc = "0965bdda9b3c106bc49d8156f497c4c85a80d76a4740964b2d24c58155e8afed57989166bc5ac3eb44daf377b7e8985b406a0955dc419ced4a7011f328ce0c62";
   hasRunfiles = true;
   version = "3.3";
 };
@@ -19665,13 +20771,21 @@ tl: { # no indentation
   version = "0.6";
 };
 "leaflet" = {
-  revision = 43523;
+  revision = 56878;
   stripPrefix = 0;
-  sha512.run = "b819cae65ac9f38d7170f4aec4f94adfc547afdeadc345091fad170def744247ed46d653975e493aa64a28117e89a5414463f693a4b2f7e28b9bf998b8859915";
-  sha512.doc = "d2355c9b93ae490f4087bca09ed3acc815abb714fa7508b64155d8b5994c967b7296b79f8b3d68cd59d082d7d3d7c618c0d4d0fa50df23724ed50718f0433f8d";
-  sha512.source = "38cdcd9b452afc6ff98e946d162119615e44f372322664894a479130035a2a05520b7b1e7f616f17b04914c5caac6910ff18fd71c06a31dae9d4e044c6106627";
+  sha512.run = "ec809f2aa4cbc16dd26aae988e2e3b5fcef9284cd31deb126d26989358e52596a50fd63df07095f0bf081c46d1e8af3b3f59572d372be873d9afe1f3db3cee95";
+  sha512.doc = "ccfee44447524b112f47211729bcd2c78021dfd19394b82eb7024bd10a68d1a04789d01d16cc9f3b5eab7feda884eae6bbd47b6abe8023893587c49613b44d6a";
+  sha512.source = "cb505761b78adbc0dd69fba2888ab86394c7c32fd590969f721cebac249ab8298c87fad284fbb8bd9d557e4f7741559536e504155ee3b4f771dd135204857337";
+  hasRunfiles = true;
+  version = "2.1a";
+};
+"lebhart" = {
+  revision = 58503;
+  stripPrefix = 0;
+  deps."colorist" = tl."colorist";
+  sha512.run = "9f2e2a2b45593dcbcf57bb5a41b0785c73b3e920d26b2311f25776d5902b325db23931f3d9fb642804c374ac00495b350af5559b9bf7bc7fd367f90919a4e94f";
+  sha512.doc = "b3f9af0dd9a4a08034bbe769a3d8a0f76aa741431646ce9be168d6292688c63070d57c3757c799fc2d37391cee12e65828e31062c9abad80b2ca7167ab881f4f";
   hasRunfiles = true;
-  version = "1.1b";
 };
 "lecturer" = {
   revision = 23916;
@@ -19688,6 +20802,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.0.5";
 };
+"lectureslides" = {
+  revision = 58393;
+  stripPrefix = 0;
+  sha512.run = "8d5c2e6872ae1f6acbfadabf997ff8b4286398afee2cdb01a0be17b243df25fa9677d360872e422ab62b1c8f3150c6fe4e896eb2dc802752ff362df51d684004";
+  sha512.doc = "77822069774285b57a68ae543a287d09dde276266f3a4acc767f101eafd113b74a53fbcaa0ee71bedda18edbbca23f2bde5b77a4f33a0f0dd26a631e3b0945b7";
+  hasRunfiles = true;
+  version = "0.1";
+};
 "ledmac" = {
   revision = 41811;
   stripPrefix = 0;
@@ -19705,6 +20827,14 @@ tl: { # no indentation
   sha512.source = "3339968b569bf6fba6d7332399d0727148add95c1c0dc2ae06626269c156a4e365dbbf672b652d3c5d097d0570b0955e6cb34255e3f8383f05ea52fa2c12e375";
   hasRunfiles = true;
 };
+"leftindex" = {
+  revision = 56182;
+  stripPrefix = 0;
+  sha512.run = "01e0687f0205c40d95e23b5a9fea2dc8aea95d2e8d5abc54a0c21c1b5934dd68b3705cb625b7e7c34ee30d590cb3028e816719dae6eaf80e5c435078fa3b908b";
+  sha512.doc = "93b1c20788bc707ad90efd69194d8ecdf5154afe89870e51397c810e292b4e52fc7714de844580d0af5be0434a4493bca7464ca0d0b5f2641d9cf46a1f9c77ae";
+  hasRunfiles = true;
+  version = "0.1beta";
+};
 "leipzig" = {
   revision = 52450;
   stripPrefix = 0;
@@ -19715,11 +20845,11 @@ tl: { # no indentation
   version = "2.3";
 };
 "lengthconvert" = {
-  revision = 30867;
+  revision = 55064;
   stripPrefix = 0;
-  sha512.run = "71441058a60d5c642fc7f162952f8e7e696f25ed40e56d5b61177efe6e0f4bb3f55a8ab616e52f2555836d5205f1c09cc75307ca3d0f4fa964347d731c6924e1";
-  sha512.doc = "756564bef540ac96195b9846d79cfdc8a553c25e83313c3cd22b7926010e65033e0eee56899a0ec1deb92eb34a1c7c74ea541e4881962d6bbf34a16ab5462b49";
-  sha512.source = "fd9f190b1b388e17fa0bc9d8307bf1dd654184c3da7ee69534b7fab2d686b5dc096fa3656d0620ccfdc1da40f581ab1bd163f82d2f0071062fd48468200f39a2";
+  sha512.run = "7796d45d91e157f2e901a1a48a7841bf222f86540ac00d59250e3f47568ab86832bc115340c0b65b27c12eb1a39cc2729cffb5da71afc413dbae737341d8eb63";
+  sha512.doc = "4191c3ce9b546f885c61243a343761a9dbc1ac031b3878a87c292d99a70effc89d927a1fd35eeafdd6523aea7c4bde0c90255057177767f534b471d4e098d3d4";
+  sha512.source = "ae8d4f8563c86a5fbcd56d40dc39df2bf52bf4dd5098b4976ddc6ec00b8512e2d6cf4a4b3f6fe83e27188ea24ad954c8043daf49aaaa15e503bc2f84f740ae75";
   hasRunfiles = true;
   version = "1.0a";
 };
@@ -19732,6 +20862,12 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.6";
 };
+"letterspacing" = {
+  revision = 54266;
+  stripPrefix = 0;
+  sha512.run = "30fdc0f87976feb698b9736e9deb6726746e4c25e4ed4a4637ff26699e171738be6447e8e2d02d154cf57944aa988208ee97859c0a7fac784d55fa6ef889b86c";
+  hasRunfiles = true;
+};
 "letterswitharrows" = {
   revision = 53709;
   stripPrefix = 0;
@@ -19741,21 +20877,21 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "lettre" = {
-  revision = 44950;
+  revision = 54722;
   stripPrefix = 0;
-  sha512.run = "7e50bf7d6109fcf0e128c35ebaa034c3301668f6e3bd8536b4a37c7e721592e28561911f922cfdf740d0c397a8375113dce0b7a00388a11bc4196b4b33fc04dd";
-  sha512.doc = "308122fdd634c278f6e05e85a3a052e4255f06339db0f744fdd4859f6bc2983b7150c8fbb5d85fa71c39bf71ca6aec9d6c3d27707da0f95252beb2fb09dfafc7";
+  sha512.run = "308dc21e8be8d8f6952eadf9b5e9002fe32e8ea3b79ba679606badef75ae346721270e85e3fbcd269ee86b9ae049390164c57cfd73d7f2efe22fe82c7466a813";
+  sha512.doc = "9962763ae46836874eccf4ea5a2dd695eaa1ab890224d6a54e83670618e2cae4a917fb6bf05610c5104f4d241e0163e079628e79ddad3edf374b513cf6a457f6";
   hasRunfiles = true;
-  version = "3.000";
+  version = "3.002";
 };
 "lettrine" = {
-  revision = 50847;
+  revision = 54560;
   stripPrefix = 0;
-  sha512.run = "6d52341ea517e94128da35dfcfec9344e08a23fd933ef18e1830ce014e6906bd248be4161439cb4d48e1bee64d3b9896cb866a78233c86ce72f87ac5a788e98e";
-  sha512.doc = "4f12fa28940188c95a3d707a97b18c7b30803d188bf7c5c46dd74a13589ca15609f47bffc309474c43966c3c2ba0fc6df09db2d85af1385b82ffd0a10e148c59";
-  sha512.source = "d77bc694777fe902889aa15ff12396dbc388c73fd89c815a17bd4557a340deb2f1547b357bf270c4cedf7f97edb4f33faffcb65efde9e36978ad5b6c81b76356";
+  sha512.run = "839469d3cdd53698bd9072451e7b9262633282cf46c32ecf23f3b0f46ae999ac259daeb6b4cc5c43222f9f788a95b85cc406857b19bf4eea1ac1ff3b00caac60";
+  sha512.doc = "3ef14d7292d3653acfb5bd47141d16cdeaba393450fe27fe1b91b1f2c171c46949e7336a5d9a384676f3bf0d01b8297ff81f732267d94491460c7d883a520763";
+  sha512.source = "0f80bf599a303757e2a8ce836d50bd4a4ab701a623d5ea218d23c8c7ef267756cd5320998570962f9679f17bb26d89bd353ab99c3d5407aa535355239856465a";
   hasRunfiles = true;
-  version = "2.22";
+  version = "2.23";
 };
 "levy" = {
   revision = 21750;
@@ -19773,12 +20909,12 @@ tl: { # no indentation
   version = "0.1";
 };
 "lexend" = {
-  revision = 53845;
+  revision = 57564;
   stripPrefix = 0;
-  sha512.run = "110cee53edf1d3bee06f93cc1bd7543a1da372d38a0ae8e8aa495a87681b565503e9f44d691dcc3a742ef245cde9e285b10b758742d928431a4f09d5df55a674";
-  sha512.doc = "66615fbcfcb04e7e833ff587d948357ca1f9318a3bfe6316c7883a65c16c7014720894f9bd40c0af5eb094d1a9898d6541527e2e0cfcfca132ac399017628191";
+  sha512.run = "6a9e4ab844e5189e996b73ee95d5ea5bda0d5d9f7b00a707d5bf9b7ceb97eb2f37baef9310252227701d6fc280a14a8a79ff524b5cdee3610c4dc48968f6b3b5";
+  sha512.doc = "fa21e0311899513ca5f7031471189ce0269fcb35b5bb38d2e3d2e8015dab11ab2a10cc086ba6d41f24c25d99b32f91750371e3297c505ef4a522d61aaa24e5bd";
   hasRunfiles = true;
-  version = "1.0.2";
+  version = "1.1.0.70";
 };
 "lexikon" = {
   revision = 17364;
@@ -19838,14 +20974,14 @@ tl: { # no indentation
   version = "2.0";
 };
 "libertine" = {
-  revision = 53310;
+  revision = 54583;
   stripPrefix = 0;
   deps."fontaxes" = tl."fontaxes";
   deps."iftex" = tl."iftex";
   deps."mweights" = tl."mweights";
   deps."xkeyval" = tl."xkeyval";
-  sha512.run = "d52bf688d69ea2ba5de9c455ed61e4f084cc9b003cf075a319330ba0281bca5e4f3ffdf5c173fb77c831b9e8b8363da62c937ca13882194276024867573c47eb";
-  sha512.doc = "a4eaeb71df66f5533024024c77090d13bbf8de085848ee20f8747a26f958f877f90e1f94414fab3e8ac632c482413a842a6568f166de7777caa615a0fa7f3ee6";
+  sha512.run = "b4c3a52caa463b8968862de7c9442da09af1bad572b4f59a31cd349948365fc04a190f876b99dca61cffeaa57faf26658c1e44bca6e27ea03024fd50fb665d5b";
+  sha512.doc = "185faa15915e8224dc705d6555c35877cb82f6a752df67eb8eb78f05ab8dc7dea228bad5828764551df7f0509668287575432cb864e1365d574d5ffd53e122f9";
   hasRunfiles = true;
   version = "5.3.0";
 };
@@ -19858,43 +20994,43 @@ tl: { # no indentation
   version = "1.01";
 };
 "libertinus" = {
-  revision = 48588;
+  revision = 55064;
   stripPrefix = 0;
-  sha512.run = "ac413716b5316b11d09c30613461ebe432502d4f6b776aa3931a6e8e15ec1afe56d60632a5d9f941ce4acdb89e45914f2b072c95d8160fa1132819b8a0c67bc2";
-  sha512.doc = "4a01523a5d8211138e873e15c9ab7c7b1f62900d64c7c75c08daae3114cea4fea5ae3a18d81b3210be78866887ec1cb9d38fe0d4b7e9c7e498f75d65f3eef5dd";
+  sha512.run = "ec36e8d1184e4b8aad46391bf6cfe54a48006af6ab70cc2a4e20892bdaabdf39ec145e216a12e8be389e3080a51ce5d81be2376be631e32f48ddd5f9548cc564";
+  sha512.doc = "35e7c7ccb8c10bf2d5d24c03b47174a6e53dfabb9f7629f778f6ab3624f146371b4970f577d28765cbcdb1094dbf8414a729a2b808a7f41f418b911899ee0698";
   hasRunfiles = true;
-  version = "0.01";
+  version = "0.02";
 };
 "libertinus-fonts" = {
-  revision = 51614;
+  revision = 57948;
   stripPrefix = 0;
-  sha512.run = "f30ece5291ceab44ec15c8eb6f20593e78ff2b31b27f49d9472f22ca63746099cfb9493dd9522ce3ff3b712eb3bf22d981318e985461fa53c01f399ecbfdc788";
-  sha512.doc = "8bd8dbc35aebe0596173b93ae56f5547b3637f9973802ebe215216c485731721bb400b7bc8c404644a401062eb7efaac612f03ad431257a75cb36c59eb83c4b8";
+  sha512.run = "5deeffa40e2399169a7ec16fec4d417c27350cb5ccb7f59eb1638172758e88167d24470d889b311760b0739b9fa0251e2389f7ccda0e4e8e2ce3a454406f13be";
+  sha512.doc = "410edfda953b321c9fa53e99854eea206177e4486c0fdd6ae3cc20eddb31111f28f17dfd725c5f2dc573d82ba5daa1f75c544709accae84292cff45d52b10c18";
   hasRunfiles = true;
-  version = "6.9";
+  version = "7.040";
 };
 "libertinus-otf" = {
-  revision = 53871;
+  revision = 57398;
   stripPrefix = 0;
-  sha512.run = "a4b85c7861aea614fa87a44314331aa51a53de6647f83f440577b3840e3748c02da110824b64188be9f052c4542a747fc44bf6a5119c30a7bc1f0b4e16e6499d";
-  sha512.doc = "437f9151d0bc948ef3a70984769c8cb53a658d1fafc2b774f6f8573eb6ef5e89970fb4ccff3e3c7b3e59584b06ff81ea308d78287412c5e552b9c9b457801bb7";
+  sha512.run = "12f6bf40c77850714880d7f1e91629e2242d206b2f672b2d9d2f18d567e0e6fe47ef161d03a6351d0e1344048dc8b92b755d53153c164e23177c0dd29ccc3372";
+  sha512.doc = "a55175cad1b7a407e827b341ab742f6a7ed3aa92984c4a39d534a76b2c733b4aec939609fc77e0e319f2eb2589f2a96c5bb0f8d2b00ecad7ad74932fd8959bb1";
   hasRunfiles = true;
-  version = "0.24";
+  version = "0.28";
 };
 "libertinus-type1" = {
-  revision = 53159;
+  revision = 57754;
   stripPrefix = 0;
-  sha512.run = "14bfca077c28612598abb0b0f422586646c0e43d6feca281b2965d22260c816ae23ab5e4e9aa22afc8c2d35988718729fe3777c1222427caf85cb0999f95e7ae";
-  sha512.doc = "8cce8f098880a2efceadf7f3ea8a703ed4cdcfdc33463c23b0d021d677bb7959d2111c3226f90493491296bd23254b2f79e0d283ac056a2d698041e16cd72ec4";
+  sha512.run = "cfd0e2f07d40389fe0a1dbbcc08b35da4f2639c235c0bf4f5bcce92c09fce6721b4c4f0870e8e09b18e8bbf239b79fb9c6603e6de4efda9958e111b164ac6716";
+  sha512.doc = "92d0df6163e0fe5951b73b938ee184b30c3443492cb6844c1ea662ae47889434afbbad77463da051358835eeb02b1c1730351acab75fb2530782f4a37348ab2e";
   hasRunfiles = true;
 };
 "libertinust1math" = {
-  revision = 48862;
+  revision = 56861;
   stripPrefix = 0;
-  sha512.run = "e1495d0bd0e0082b54748cc6536a2ba0c0664da049f3ea99cf3df3cf60066fef11854738fe89f477bea879db9dc49199fcd2e8c3c4676cd3bf135122e011bd10";
-  sha512.doc = "8816d8592f613f9776d57bf1c71a0b4018a056647be658268f8d13135deb2903b7b31e4be11098b6aedeca852bbb889b23110f76c98bbee7cfd26a2c0ad29359";
+  sha512.run = "a0720e690aecd6e8239aabacdb815ebd70512b067782d0efbef9da437b8cbed9edc70f5650eae18f51e3cd37b4dc966af472690fac9bcca0dd025faf591b26fc";
+  sha512.doc = "d963d7e8541a8a7df1ab8da508cee578abffeebae9d1326ed0d11f1c28831b6f6656429988ea77378477d7a5680aab1fcadd793931908a93cb16548265c7a96d";
   hasRunfiles = true;
-  version = "1.1.9";
+  version = "1.2.2";
 };
 "libgreek" = {
   revision = 27789;
@@ -19914,10 +21050,10 @@ tl: { # no indentation
   version = "1.0";
 };
 "librebaskerville" = {
-  revision = 31741;
+  revision = 56018;
   stripPrefix = 0;
-  sha512.run = "03f47456269d8fba252415fd2d13faef8efdd3895405dd0385eeb2bd44a9ffdcbf410c5cc0f63a2f9df349b940408a1bbe492bb8c8c71e756ab184b6ff75743c";
-  sha512.doc = "c6fde0f97c5f5ce27172fb3d9b41499c45679fe65ad980916b0d4af5e6bc9a0c91eeb33b2a30967267887197628218772761e5a909703d1807d2b4d8f34fd4f6";
+  sha512.run = "49e0fce1bb4d31cb12f323e45a9e9cdd8688951f89e69c22c9cb576d2d0e222eafe74e02b07a9a854fdca2a32debadbca32ded1ec5a0b2efaff4a0d20e7ea3a1";
+  sha512.doc = "f90a5f6d2de21b15d53dc047771412fcd7ca7b5332a667efe1bab6c59eec59c474b5b6042fd1d81e70df86b3a571f3fd64799fd5e7ccac9362a9fe0b65da63ca";
   hasRunfiles = true;
 };
 "librebodoni" = {
@@ -19928,17 +21064,17 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "librecaslon" = {
-  revision = 52536;
+  revision = 56003;
   stripPrefix = 0;
-  sha512.run = "ffb0cc23fa1bfffdb26f44cf174d0acc066790551609440a80be026abaef24cb99e261b28aadb323a830e7c50a07646fb2e304c074a6eb7a8d765155726892b6";
-  sha512.doc = "f5f618eb1a691e24acd624c065c79608f326e01cb01e2d6e535b23450a5a9e8ef5aca65989c689be996a23470664122c47176349a44200688ea4ddcae68002a5";
+  sha512.run = "83f7bf4212aa4340cb12ef5ab6ba447860793c8e2f1e8892e43b28d7bb19f3d20bdd58b74d9362fa21afd2bbd7f374d292635f30be91eddfe091a005703cf7ef";
+  sha512.doc = "c41ea29708c5f830ef69d02444eb2735a307c545bbd3b876e9d367006bcea0df55d43fb740b15f1fba2849a9133ecf9edc617b9f2e143789c317821ea5573cdd";
   hasRunfiles = true;
 };
 "librefranklin" = {
-  revision = 52520;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "9aa9b1d5d56875fad5e494c6d07da8494d12c3bbc37c99ff1b5917654e253649636e76d5c1dc92a243378e82e1d4a496c234a0acf18be810761c4eb534075bd8";
-  sha512.doc = "34ada19415b6ed29dd5bd35fca644d511669265ea3162d10aa582a5de9733bbea19e53d45a22c4f616ccae6d85b3f59883b54e69699c1b4e0c9782388acf6762";
+  sha512.run = "793a8b7048c96bab41620464fbac38adba4a07bf1cbe167e12bf56a051183b5af599f2559ea00bef51f1dc9d8851c41fc8bb65664a2544278b9b66be66d2f9cc";
+  sha512.doc = "54b3c072fc80d07b07a1388988d37ba39a1ee302e12e99d9b9beed32bd547edc4bdd1134888cc79922a59347bd5c03724150eab7fcd84431bda31cc8a04eadaf";
   hasRunfiles = true;
 };
 "libris" = {
@@ -19958,13 +21094,20 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.0";
 };
+"light-latex-make" = {
+  revision = 56513;
+  sha512.run = "ef43711feb7a776c094dfb0fb87d8f1d64f30bb4f5872cd47ca9f9bcbe7aaea84158b54414ea6e3cfa6a8dc58035eadee7835d175b8a6829b5c7298c33723d26";
+  sha512.doc = "5e25885e1a537a435b7e4d71969046918c0221741ff9d90adce0ac03f4ef3208e18af58dd007a95c62261ce4c2506724244d4a3706a0ec9c8c527a0596c0da05";
+  hasRunfiles = true;
+  version = "0.2.0";
+};
 "lilyglyphs" = {
-  revision = 33164;
-  sha512.run = "8d0d8b994628731e23b1a579a141cee66043838bf254306af91f9edfe2848379492baddddd1018b7a8b7c5fc7de33f4895884412b21d1b6825856f19b7da4a57";
-  sha512.doc = "8c834cb3ca5bff9538218112523537417bc41b05e34f6f6a1670c3f6eb573cc223ec8be121c7df79ebc746afe427520eef6d1ab0f4e569339b542ee67a6549fa";
-  sha512.source = "810c33637a1a8484e28b4a3b60c4a5ec281928d049024c2e24aa0200738a9d07eb9d63f2d5f2263c90376ab071dd8b4d8ed40db6d5ebefd8f49ac2aadee869df";
+  revision = 56473;
+  sha512.run = "2616757691d289e859fb2bc161c2a5b5312bb1cd824aa15854520e004a639e597f42515756b3cad383e4e33b3057a1579ff5c2ea7c39d8f9bf9d36e9c9b58b70";
+  sha512.doc = "4d9ac765c6a4b2b736d08569eeb6d0d8b168fe96563526264f2485d3d27a944a3e81c6144cd8f1d8cb5162d425b436fc688172db18b09610b3088df4ce868a27";
+  sha512.source = "e0a1db8b5c4e57374ea19a7f8da3f4a89a2947869eba3f57411a9e815d645f4cb4200832276e3d3c869e2b3a8e3018e8e0f20f942f2396395b7739d7e9b23951";
   hasRunfiles = true;
-  version = "0.2.3";
+  version = "0.2.4";
 };
 "limap" = {
   revision = 44863;
@@ -19976,13 +21119,13 @@ tl: { # no indentation
   version = "2.2";
 };
 "limecv" = {
-  revision = 53720;
+  revision = 54329;
   stripPrefix = 0;
-  sha512.run = "9c1eee074b9ea30fa42838f7fd7455c374a504dadc3bd81f3bd43d494e881f5b7fd2637341bb777c73a25935874b508ee7d197f2d3ac5799ab16365a29b1c28b";
-  sha512.doc = "43f9572e3e0be38f26b1ff8cd0594706ffdbb448d6c3c3152216a887f2317a7b35f202046b2ab363abbe944a1982379ce6b9b439452968d56d996b44e785879c";
-  sha512.source = "c9132893f514f5fd1ae29ff07aef16de1a4d3fd350bfdbf7456d3ca76ffe281bacb91f656591808714c31e7c9475494b75e67083bbcaccda8e031e3908da59d1";
+  sha512.run = "90614eceacd921cfaaa60748ebd342eacc66f580879e0d2b03641b5c4b587e5559242c17240f248bd8ba227976d07a58553cc529bc6decfe40e8fcb3464669a0";
+  sha512.doc = "53859b21cbb3786f84c5250a8decc225a5d7208cab54ade8de28026d7a47a38daa841b89bca76e2952240d05d91a63e6cbc8afe401adb721dfad9417e2369089";
+  sha512.source = "e140a18b0c7956fda5bca6d75d0d4d89c7035f6cfe5cdf7245fbba47a095323813ca45ef5b9f5dfeb75e63e92cdd48e4003abd23666a8d70d8be8f3bc9a60e6e";
   hasRunfiles = true;
-  version = "0.1.7";
+  version = "0.1.8";
 };
 "linearA" = {
   revision = 15878;
@@ -20002,11 +21145,11 @@ tl: { # no indentation
   version = "2.9";
 };
 "lineno" = {
-  revision = 21442;
+  revision = 57866;
   stripPrefix = 0;
-  sha512.run = "c98bb4c84d6473c3038a359872442ff8387ad8f111ce1d82021728d9bb8e29ca08cc65d5705261bb347a2da2fc27594cbcdc8accbd59aa03c91f0c25312578fb";
-  sha512.doc = "da4fc0ca69d434c6d97cb87390247b3efd3463f5dcfa7e828d2bc840d2636036c097d6d54bb2e89b5d9b5f2a95a41db89af415d08ceacddbc4642883ebc134dc";
-  sha512.source = "9598996c2796de011a31a8b8ebd38fa343ce856fc6d291426074da40bc557359e9ff40039cc48faaf6b4a3d039ae091bb7d7dfea530e449a0be3a34dba1c997d";
+  sha512.run = "be1b8112411650d579727b5f30b0f9cd2d716b43ef5039b6ebfdf6cd6f5b39d948dddb7f41531a91fc5df4bdfc51d2182d2bb99f1c22e3a88cb54d3364dcc5fc";
+  sha512.doc = "440a8d04ffb923991699c23cae01ac2c5bc5a050c9fe66c3893d50db2138b7b204ca649303be244a03cff46f9ab19750ea1f5233fb24c7918e631fd72baf827c";
+  sha512.source = "919c0b2b98257ab3106bbecd3c25c35c723e9d4105cef3cdc8dec0fde81fb82b9da7f53de81971a1ffd9f7d1d8b6f90bf2ba7035b88e0ade1bf9d04227d21ed0";
   hasRunfiles = true;
   version = "4.41";
 };
@@ -20026,10 +21169,10 @@ tl: { # no indentation
   version = "4.3";
 };
 "linguisticspro" = {
-  revision = 53157;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "14666fba12a28f8ca8c1b939582778a7f3f0532df489865b92babd80f89453c69b97d987cc8c8449dc0ae8f349c47014439f476ea9cc5f48f114898d8a8e2321";
-  sha512.doc = "af514187b84cb6c6c5d623c76dfeaa0acb0b4186ecee83674266a5795d1b5ba909da1691891cb1c4a6d7ec9ead00341124922081798b19f2aa5521654277c146";
+  sha512.run = "62085ea970d1cebc752cc5dab4b84487bd99e0e99fd48a2effa44fe9ae0bb86aa91966fd81639aea7d4364d3c3d97046affcf2693d8b4be8fa016e91014604c5";
+  sha512.doc = "4ece804238885fb37505222218c92c923804d032e5e150de3cfadc62f0eec73e8acc47600ddc4d5af0f7bacf9f54254b6ead43a3f4a084aeb40dfe95b53d2965";
   hasRunfiles = true;
 };
 "linop" = {
@@ -20041,21 +21184,21 @@ tl: { # no indentation
   version = "0.1";
 };
 "lion-msc" = {
-  revision = 51143;
+  revision = 55415;
   stripPrefix = 0;
-  sha512.run = "93a6800c371a2444c34de2888d09076cd41b9cb773b39af1c6772928087f4c0438e85a58267e9a0afd309722b5eb16907a553c23d2cba008a65b6e2f3b3edda0";
-  sha512.doc = "d3df6b66fe429e565b9f336b2d864458de759a907fe1c0ea88e002738fa7d7122a3dae0951f596c56192ec5b44023eb604eed7cce357521e8295431675bf2e67";
+  sha512.run = "8eed5de445edcd936654a9d7ef8e227d43b479f39279025115fd8586cb7fa107dbacd8c7272e868eb11de0e320740fb8dc5c1fd26327fc6e8394c8924ff37cf0";
+  sha512.doc = "87d5b7e8fec95c857f6c45aeeab3cd6eb70e9b7a237eea3b5a4deb8e92ec8ddd5a381c88ae4919bc1841df15a4b93a569a996ed032cf2b0b7a5bb088c779e873";
   hasRunfiles = true;
-  version = "0.28";
+  version = "0.30";
 };
 "lipsum" = {
-  revision = 49610;
+  revision = 58123;
   stripPrefix = 0;
-  sha512.run = "f5d2454f160162fd1272f5a43e021e1050947b527614c6450a87e1ba8aaa8151dad281cd962142d5ad39cec9f44ac7b313fdcc44da94db0256ab9a2e14b75b0e";
-  sha512.doc = "fae8e8002b33c26ab34c53d09e1bbb76f46164e2fa8a59517dad19e81c1b84505170e675cc2d9072e30d5e5314f7ea7b72d61e273de9ca9f898d97ec2143e3fa";
-  sha512.source = "1ac058c3c83d14701b54238aa78aac52c1495038985e30584e948842d5a6486436c733df790fb56b405e99033496921d9401e6d73ee485685e46586a01edba00";
+  sha512.run = "6d93dbb16d94f7aa199e59b85096583a9e8e7a07b107bbfe1e0be7615717c29d94ecfd308c4adf462062251adb03b171a332cd688425f6854ce442c390c47396";
+  sha512.doc = "6d7e7f8037cebffac9a3725b5a7b32eefcb458ebd86cbc9b0380d05d2b1926c3a70e7032629ffd4bede5102c3a36d84e1b2bd21d2b7f9b3e9c642390822fbffa";
+  sha512.source = "b2f55edabef986f5e792509c6db58f89f2bfc816cb07968e21f49308df4fb37836798f28d84a91b6020b6003b441e697800c2087b9e3549b2dee3cd1a393c5f2";
   hasRunfiles = true;
-  version = "2.2";
+  version = "2.3";
 };
 "lisp-on-tex" = {
   revision = 38722;
@@ -20082,13 +21225,13 @@ tl: { # no indentation
   version = "1.2";
 };
 "listings" = {
-  revision = 52079;
+  revision = 55265;
   stripPrefix = 0;
-  sha512.run = "ca15ff0ea1958ccb4d7e464245f7a214a509341517b7bc71823823f5673bca3d7ce27b6b7236f195078c7f9e7e3812a5bfbcc1c0b59196d06bf28cbd4ca63acd";
-  sha512.doc = "38e7e013f56787a025425342858e2f1933f0f6295876fd9c2d01df568d76b51aa17e479fab968a9cb950fd77cb0810faf4b31b267ad23c32ad26f6e85ec32d0e";
-  sha512.source = "50d5bc041b885ae0e35934adfb3a76b048d8c7a200081eedcff4984b433e498444f4230baa63e86669d526fbccb15a232b8b2faf2f9787fb63eabc3da14ca28a";
+  sha512.run = "b9e3dc1a3394305803007927e2b9d446801d59bb7b8a62d4fa757b7d42b56c27dcf9ebaf6ee1fb1e7d8e437182df9fbbbcbd7ceb8f42db7d1999cbcd6b9d6f6e";
+  sha512.doc = "0a19a7148ec9f902e7eccb3d65724db899e030d326dd0291ed9fd15a540dcf4e3e61a15576fbb16ebb6736751b484356aa78785108aae44f866de97f56d34b09";
+  sha512.source = "be76355265cfb208ca069d79ae598fd317b6fe3cc1d81f0ce02e4154e3c03c2b298ec91e8e95cede3a8bf301ae1b6156cb42740e38e138c66b451f561ea49073";
   hasRunfiles = true;
-  version = "1.8c";
+  version = "1.8d";
 };
 "listings-ext" = {
   revision = 29349;
@@ -20166,21 +21309,20 @@ tl: { # no indentation
   version = "3.1";
 };
 "llncsconf" = {
-  revision = 46707;
+  revision = 55117;
   stripPrefix = 0;
-  sha512.run = "9df2b2ab5fa1434263f4df8a4f5c5329d38bff47a3f9178b2b220b50d34e410ce2904df5177076131ecff1a5a20cdb9cfd6cf84d986210df1ede7ee61f73b255";
-  sha512.doc = "a0a9ee4372d9afc48fcaa16959a9c54a3d10216d6196be963f9b35c66f13c970a4cb4a01996cb2397a10a6ea36c445a75541f7bdb9608c759e611faffce56574";
+  sha512.run = "76531fdf2031c7442ce0ea5f63e6f625a976b6949e6758ad77b19a0c50b9dda01244949b32297815137cf40f4697faf3264f1f972952d89559b0c37c21493b7e";
+  sha512.doc = "bbe6f93431219ff18bc2aafa423337fd5017aeaacb91c14897c950b7eafcfe3e124b8403cdb66bc89a34537f1b1e79dfee73cf971767024772b8a47d647b8588";
   hasRunfiles = true;
-  version = "1.0.0";
+  version = "1.1.0";
 };
 "lm" = {
-  revision = 48145;
+  revision = 58637;
   stripPrefix = 0;
-  sha512.run = "f94af6c169ee05d3a2dceb00794feffb7808a4bedc05da7655ea74fbbf675047661f49f4f2542373e5fef60fc0f91ea9931b25bb10c1449f593b84ebf65cd154";
-  sha512.doc = "baa33984a243c1000fbccb73f853dfab7c935e2da5f68294cff38db950d85f09ae9ab63f01178028c5f77d00c03b919487e73eca78dbcca60b9ade73a0773b18";
-  sha512.source = "954d7cf62a32a4cff318c9e51f0f9d5e4b2de358e7f8830b1dd6e4515806b9e446d6f1f0b074bc8a7a8cb20ab5f8dbe715bb0ca8b77c4c8265d868d821335c72";
+  sha512.run = "d758e51742787410416bfa4ea4e32951484435b977c9ea3bc7ce51d919ec4d28b2ade387d3b1129f034aeb41db481bf72729fca5d24177e65d2719200798febb";
+  sha512.doc = "c8d6d05ee42d060505ecbdc3e4a5e1d0e6e3c5e919fb4be04162b45723abf697f629d412f359b6d205013d5716f575bfc4d6a7dc115fad05ab47d12ac0dafe5b";
   hasRunfiles = true;
-  version = "2.004";
+  version = "2.005";
 };
 "lm-math" = {
   revision = 36915;
@@ -20200,19 +21342,19 @@ tl: { # no indentation
   version = "1.0";
 };
 "lni" = {
-  revision = 52401;
+  revision = 58061;
   stripPrefix = 0;
-  sha512.run = "8648f9a39d982e99f19af652e39ad1feb98c01ee2a06b3912dc609213673bbd685e11969507842caea4657d8ec0a33f7b3a9ceb0a4cbfd4a9c4939ac1d30e42a";
-  sha512.doc = "7ee44a6ba2782b28a81c8d907ed11a07079b4e8eed3fc1d8adff80274df471637dc69e15e6012d9147116c76d2faf9beca10b22a554a03ae6985c9f68791f104";
-  sha512.source = "ee33399c5fe757c19b4e297b184887aaf44fd011b78b2ba84b906955c2da3ff3e76c6400a9f21967ffaef8806f12a3ea3c82a4a20d24c737e0c3dc514ec5a0a0";
+  sha512.run = "5b9de3838172a042473eb03ccc26cfa701c027c33db9c943d4efaa00b22854c67b17e43d20ae8fcb2960444e817c05860a67aea50ed7047cd7a4f90b059f59c3";
+  sha512.doc = "87ad80c4a70772177ddc7cfe9b90c0fcfe3d7bdfd583cde52837b8fcfc85aa1fd21fa11ea562fa7169adc7ae954185696c4fa8bf655916e149f57a95bae4627e";
+  sha512.source = "be7bf7271556755196f8921c0d261f308dfc20e0df81261015c4001c53b537948d1328ee33a856c13e22dce7ac6056904f2b2989073f95ea5d61d226ac7977f0";
   hasRunfiles = true;
-  version = "1.6";
+  version = "1.7";
 };
 "lobster2" = {
-  revision = 32617;
+  revision = 56019;
   stripPrefix = 0;
-  sha512.run = "97692ee9293dd7fce8a3ca01f29a11daca837baef5d55b2c85339e1b2656430d009b5beccf7f04c5eaaf9b1643624fa259e353bf7f8afd6ad78df00999c252ba";
-  sha512.doc = "4efa18df18dc64cdc88d52b3b4bd9936f021a039e62eeeb2b028461328f2c3fc5b0bb0b661bcb3d2db155c48c270dcf1c2dcc2fa4951666597277e8ab1195494";
+  sha512.run = "d104589256496cab2cd55625f9ea252d21971eb2bb97ec91a9515ea8fd8d749ad02d1234c16bc3bd378f2a509df510951fc2764a73d839d982b630505ef44041";
+  sha512.doc = "330f73cbc97686cb1ed53dc2c66424cbdc62b5728790b7fc1256ee8b858d991fcd897fa47c9bd6c0fa9979ef13a2b47e004c61d06a52e88b487e394fc0de0b84";
   hasRunfiles = true;
 };
 "locality" = {
@@ -20225,11 +21367,11 @@ tl: { # no indentation
   version = "0.2";
 };
 "localloc" = {
-  revision = 21934;
+  revision = 56496;
   stripPrefix = 0;
-  sha512.run = "ff1e797efe69f372e61272d187e758e303e505128549e02d8fe45c621a28e55337d13b0fdbf6065ef97d4f8c51018ead4e97c1c4b2d9a76f9a6d299136f510eb";
-  sha512.doc = "13e03c65221c892acf80a51bedd6a18232e9e9adc7ba92f34399e678a2d88d7050b94f8047087c891075c2098bc759c79f1276ab2ee8cfe08dd7723f2ede6f74";
-  sha512.source = "04da29e24ad627fff42fc88a5fcc480ba42eec235ab2e283a89efcdc87082bed4b4b988dffb5ea2456212cdfebe9f66937c54ca799a3253c76884e86b13f2d0f";
+  sha512.run = "abd3aaa28d6c90182990890ebc8aa0ab1d71833549e9a1ed9a09d7fc2db01cad45efb231cb8d3b09a849c948a6f7ba309954d38152af88fa8cd3e38cc857fe68";
+  sha512.doc = "40fa07b0d5a5fe0603a087ce9440dd6d95ab188b83b4adf847d7145f9e1f1cc8e2d8ef49c7ee206e341db26afd885308ef349ea5a8c2b826ba6664c347c7d8c5";
+  sha512.source = "9a19531358e4809a90c1e571a8f7c507ec1b0807a009627ad2dfa3ebdf97fb749a4f57441b0855e44cae93ccbdc64e79b640de078fb9ccdca1de891a2d156eae";
   hasRunfiles = true;
 };
 "logbox" = {
@@ -20265,12 +21407,12 @@ tl: { # no indentation
   version = "2.5";
 };
 "logix" = {
-  revision = 53317;
+  revision = 57457;
   stripPrefix = 0;
-  sha512.run = "5d392c564c4d4a5827a2fc58b95f95dcfb51e32c116bbf94834831ef2eda9880a07d0c21032a6a36f1a694cf184b5d4f306c0935f1c80ccb6bcbff97e9d6d37a";
-  sha512.doc = "2a12509e023fc089166aefff11174470856225b610b87f1707d775cea2e9d60da1ed047ae98a62ad7d923ceba2f71d30576f262e0db0a6dbf68f89ba612a64e0";
+  sha512.run = "fc499a8c77e2d3a285888ee01837c88077906fc57ac73223f5887796e0f32bf4179b5b2df1a87d4535b59137ca12b6dc9ac1f9084dbd158b038ae622aca92eb9";
+  sha512.doc = "b483c80466b883cbc56fdc5807420b01ee5c720d262908d0ec5bd9b61a51a15be5e1de90097026b1d2e87b54d19cf3dcafec33b5d8075edff46f2b4a6bfb6bb6";
   hasRunfiles = true;
-  version = "1.02";
+  version = "1.08";
 };
 "logpap" = {
   revision = 15878;
@@ -20294,18 +21436,19 @@ tl: { # no indentation
   revision = 45678;
   deps."cm" = tl."cm";
   deps."hyphen-base" = tl."hyphen-base";
+  hasFormats = true;
   sha512.run = "81557b83acfa4ad42dfa6fb1a65ea42bc33885da444ee23bc3c67a899df7b3ac2c19a1607305b5ec10b503980365c5d29ac3598339fc186a05417ea5bca60a78";
   sha512.doc = "206dee2be733e3ac04b5b259862b60fb3641fc44ea182da601ca54a010ff8e42f254dd01c03be7bcdd2a6258110c567a596ee82b4eb74d04ca8ed70e50cd6a86";
   hasRunfiles = true;
   version = "1.07";
 };
 "longdivision" = {
-  revision = 50586;
+  revision = 55117;
   stripPrefix = 0;
-  sha512.run = "64669ae90bcf3c98d4e58e9ff016bd03e151f57a83c6a98e71eff714017c4e9bab95694d33fef3edde79001f0f90a54e4f64514488b00d1e373122914064d8b1";
-  sha512.doc = "679f3766529588f5319f511178ab84e636d9e888a3f2cffdb6d94384042bcc7deca14821fb5010e7bec65614bab9adf336346bdcc38bc8908a29a6e9266cdaf6";
+  sha512.run = "13595c314837df4581f424d753b4afdba62f7d9c4ab4d43d1b756d18ace7cd5a53cb7783366c0e07d237333d5b5eb9e85a91d1041055707cdd7de225d748080d";
+  sha512.doc = "71f18b1f4f87def00c504b2dd67e8f7c2d9510f3f2459e8dbf1380948e501eb9b2ba4badaa6cfd2cb6440a0c6d0c9bb048c21664e6b37f85cd49c6a8a0a39d86";
   hasRunfiles = true;
-  version = "1.1.0";
+  version = "1.2.0";
 };
 "longfbox" = {
   revision = 39028;
@@ -20397,17 +21540,17 @@ tl: { # no indentation
   sha512.doc = "7cd22cad45d7ef2972679cf2a3653c3bbcb1d9bcfe94a65fb9dac23760de05b659470ca45cf8be13513924fa1cbb98599a304a51bc18f8f4d6631f082e662bc4";
 };
 "lshort-chinese" = {
-  revision = 50986;
+  revision = 56036;
   stripPrefix = 0;
-  sha512.run = "29c47ba7c96ea569e85df3b94962bb60e9d81259c9a30e04ff2d51bf667bab0fdbebb658f432907f4cc813bdf0f14acc0cb28b24e35f98a9e4278e1c591e6b4f";
-  sha512.doc = "5365dc7936d87d7af00909d9f3f3cbf4f0423777862407cb264a6a2d73ab9ab90586f7396ef606baf94ac95257742fba43aa1a4b48f59f01cf33bc15ae62b572";
-  version = "6.01";
+  sha512.run = "f78920a3adac063cddd42284e325308cd124d5e0f2f1ca6f92111edec872ad1325b99331615c8643dbc11ec1165ed0b0320c9a8b1e3eda0dabfcf496ae0d47c2";
+  sha512.doc = "0f8950630220afd353d05b2f4d146ded4eb24fc163f19510a3d57ea680fd06a1dff064c35a0afb8625b32741d1ab6543cde20d5269a0914e0dcff7c42bfca327";
+  version = "6.02";
 };
 "lshort-czech" = {
-  revision = 29803;
+  revision = 55643;
   stripPrefix = 0;
-  sha512.run = "feeb9c7244f686767c5f72ab3da8aa2bca69af7e6446e1bd8eb4dd858ef92e4a4eb6f42cf8d429127a20e84cac894732f0e05a360b47af02f67340b09311e495";
-  sha512.doc = "03295ea4bed83fb67a370ae547945335f51f6441ef913aba0ac3364f258153c6f5013d57e6579f3be6a9746a22cc4f34762871569d9d68c0b0d2acf40127fd80";
+  sha512.run = "dc967aae970e535c5dea48264c30f01d5ff3521851abd718905b78497c3d95d403c4f1ec8633cd2a7a55fe0a6bc1e1523391b214fbb8a0e2ed03737b09080e40";
+  sha512.doc = "10de238b8152907ec04834d6b4737cebb13bd6567c9867e19e2003d123299c733012569cd64a66d31a79894f9b37c1fc409cd5b76ed10832762988fc318875e5";
   version = "4.27";
 };
 "lshort-dutch" = {
@@ -20418,11 +21561,11 @@ tl: { # no indentation
   version = "1.3";
 };
 "lshort-english" = {
-  revision = 46763;
+  revision = 58309;
   stripPrefix = 0;
-  sha512.run = "88214b8addd6169f3bb1168e2b3eaaf9786e0c20e9261ed403f8ee6c95a22252426438b75d0ef74770ec26cce1da012ce0d908df03fcf1aa0458294e8e6bb603";
-  sha512.doc = "14a1bd61570b2445bc8f38595260aa791760a0bce82419acfcce0109698b5600b727c78233edf3cce25b1e2b17dad97cbd8829b072fa7b33d71a3949fc74f303";
-  version = "6.2";
+  sha512.run = "73e7cebb51b9ae5ce2c6ddfd191a1d7e5358e5a1bfc61ff8d921cf0928e2cde839f232dae6cb0d9dd1b05df907c8c56c3f72a4d89917a6930762a46e1b1aa286";
+  sha512.doc = "ab6dccb0110d7033a36d743b9f8132ec5ab4a0b4b334ab7800dd68f9e65bdc7de6c5e766fba6a7a3596d3fd8d6a3a16299344fcbfd67585f1fbe5e519876d7ba";
+  version = "6.4";
 };
 "lshort-estonian" = {
   revision = 39323;
@@ -20445,17 +21588,18 @@ tl: { # no indentation
   version = "5.01fr-0";
 };
 "lshort-german" = {
-  revision = 47401;
+  revision = 55643;
   stripPrefix = 0;
-  sha512.run = "92795389c811be26f98af6df5bde8c521ceecef1861facab67622811a9d6859ac83daa78f0f37257588318a87214f1ece3f0ada40790661d09938914b0cea437";
-  sha512.doc = "11a2745ff16418ad28dbe1cf4b88225a86899c30d102ea8fa6f3775aabab102772173335cd4985b8fa9b53e324e060ee11d8d31ededf0f6b7f5020443c835331";
+  sha512.run = "c937bb8da86a3ef6d428d134903bf8af74a286d644bedfe4766841b2b5234b34e2caed70460ecaf7a1b1dc57f1faf1396435cca7f714f84d75f15acea12e79f8";
+  sha512.doc = "69cebdd6a1444670a154d5cdd199022f6f1d6612b24b05fc8dc1e9f54a89fb65cda1f545341cd37616dbf6dd94077ccb924bf4b49f1473e45eb0bcd33f5f33a6";
   version = "3.0c";
 };
 "lshort-italian" = {
-  revision = 15878;
+  revision = 57038;
   stripPrefix = 0;
-  sha512.run = "b92c1566d1a7c9a079d3d770e9d5bc8e33e61da53100c3cb4617e37765076accd16b89210da12ff954e25a97c55d8a2168f81789ab31c05f66bcd6a19168f719";
-  sha512.doc = "2f46613ff2ebaad079a8f2bea6756932aa9dd0840977dcbb8ee195072c1d8c590549e362dc979e9bd373a46ec44d21303aab72f351d799d2a7a3f5b6883e2c06";
+  sha512.run = "05435f3a1af4c589267f1841e9af267fc12e2a3fe5b3ea2c586fd352f4a1184f1fc4be408780ff6db1b9212e1e4d1bb7263e3b35e7be9358e97e1712e9abcd6a";
+  sha512.doc = "6caa8b7d2795779ef010c0ef9ac387c73b15715929557a6227e0a8112f4d99717ad82fdcdf8d1fe18ad5ea9b502ed559bd7b44f73381475034b481eeb6ab1c9a";
+  version = "6.2";
 };
 "lshort-japanese" = {
   revision = 36207;
@@ -20464,10 +21608,10 @@ tl: { # no indentation
   sha512.doc = "83292d42fa21614a055420eeb372ae5cf21a9a15b999e0b39f1063f63ee7fe53f77ce771a8aa649e860827214138fbd435161cb3dc4b3fdf2b75775979d904cd";
 };
 "lshort-korean" = {
-  revision = 51035;
+  revision = 58468;
   stripPrefix = 0;
-  sha512.run = "3353534a09681a9f1187156bb6cd9a3b4586b135328a7ce606a0e3ef15844d57ac76b5b55ee7cd42b1dfe3d67f784d4f0682c3ad0af0468ec2433452127b52ff";
-  sha512.doc = "046095e09db9664f68b985882ac92da51895342c79a34f8045853df40d868a2d60c1189b93e47843ffe6fd4ecaa5e7144eeb68bb2954190a9d6bd99e9bd50de4";
+  sha512.run = "3050ad46874a78c36d8bf247c00e2369c18e122ec89a36b0423df290ba8e06e9c5dbd1d9bba5485e370cd73dc500a6d2415b3d8f6de0eabb3932b9ae5515fb8c";
+  sha512.doc = "6789054257f176828b341fe9ad258b1f7100d2fc880aab68244842317b45cea872ee49031ad2c1d376011772fb39d2ef05a700f962279f5ce3a286270b77ee1d";
 };
 "lshort-mongol" = {
   revision = 15878;
@@ -20484,23 +21628,23 @@ tl: { # no indentation
   version = "5.01";
 };
 "lshort-polish" = {
-  revision = 15878;
+  revision = 55643;
   stripPrefix = 0;
-  sha512.run = "13c52981d80ae9f9da34dbd14abedc166bb0abfe3dd31ba11f684b5912869be62e61a28d57d93dd81fe46f4d694429b3406bef774fa8b18b9918989fb839bf31";
-  sha512.doc = "a284230f6599cef5fadacad2a3cac07f829cc8ba35a64b798fc76839b57a8867f745ecebf75d41a0c3bce05b3b868451ee141c65fe0dd8365d1807a38b8dc237";
+  sha512.run = "77927173ea8b2608567a330fb0b76663b7389026de4066b21bf4c460c4721d57badf65179df473f19fc94ba60b56c8ba9f3e99073f500f31c37dce6ba754b3f4";
+  sha512.doc = "5fab9a867d78fabec9edff0148c1134d36ddc8b19140e5fa20752fb5315b30dc3f144eed08fd2f6849581d5ea1a515f350428268fdf3d78fbc92644fc1681271";
 };
 "lshort-portuguese" = {
-  revision = 22569;
+  revision = 55643;
   stripPrefix = 0;
-  sha512.run = "2c2d56eb0313dff9c2c102ef9d80d8e6029e35ab1ed8df5442c68b80fe4d746b3fb36b91b40cd831127e3004e1015ef61bb4b1c655d4e521f699ffc301f6d98c";
-  sha512.doc = "d9519e2dc7632c1d933c62696aec95402ba0cce9fe6ab74758073f23ff474cede7af24d97c9a480e734f801547c062956cd4541dd61064d004f00410de88bc15";
+  sha512.run = "70031c79e7124b9c839571fa95d8b141035a0d8f79665f1e79df8a3154b81f0a7f8b7d371cd00cfec11c141165ca5e1fb0e1cbbc4d0de8c52cc5e0b77c885f5d";
+  sha512.doc = "19c55e5547d83fbce705121dbb09fe329c23cd42c1cedb812cc282bb447f9cc51ce0861e61a984e2863103a2bccaa6a4c7ffe8bd2913637930e42747c6947b02";
   version = "5.01.0";
 };
 "lshort-russian" = {
-  revision = 18906;
+  revision = 55643;
   stripPrefix = 0;
-  sha512.run = "71e40e2502db0706d5ea1776c49888a05229771eefea3d17b8260d489099249c59ff3b94f53eed14fb7b53806e1c29f99386cb4118bc28e2bacc3dc3875eaec4";
-  sha512.doc = "65183cee479c3f3afc909616f39c6e8a51c4032ed67563709713d8c1d9a6d2f681914c2ace4bacc88cbf37a4bab4fb400b2ec108b257b4e3e67c0f0611de6eb3";
+  sha512.run = "d6641dc4f19c740898dccc357aa1004860952d0a2add37c6c37fe69ac222dd8396e506ff6a00ef98f77d8cdcea2287c96258214159f08d8b63184eb014ececc3";
+  sha512.doc = "b991cb5fc833446ab36c82beefa82afa026eda6b1084d99e6c4525687b82bf7c2f64f9cea38d244065cecf1b12a00331d4e70716880c5bf2509add05257accac";
 };
 "lshort-slovak" = {
   revision = 15878;
@@ -20509,10 +21653,10 @@ tl: { # no indentation
   sha512.doc = "8ee79c17e5ccc9dbb9f833b4f8927b22e7ce368f49f4d016fb936d2a5ec964791d9473b679a037d704efb269dc6caa1344168927a90a8e859527c64b0410996b";
 };
 "lshort-slovenian" = {
-  revision = 15878;
+  revision = 55643;
   stripPrefix = 0;
-  sha512.run = "933781a7b3b3481ad955aa346fd1011f9e6f8b27cdb4461f081a31331e8dd5fdcde72851b44aebfd9707a422c133099790d1f304c9f24f35d9fe2e12927061e8";
-  sha512.doc = "21a7611b67d9baa0065df15e86b38872f057bd4b3ed2a337e19f52a5ec49b409f4b1297d7d0ec951f40d0b1b4cd18cba1f1ae33228142ac27178520579659065";
+  sha512.run = "689ca4286149002f840e2ae82d7d9c8eaadb3471db16d935ef82c37e25560200ecd2fb95bb6fba61a1deb1fe481549073893df59cdd37ff9aab3c55679028492";
+  sha512.doc = "13cafc10d15f89945f020743c10d2bc44b226cfc9c7217be32b8c2affed12602cf024295c75a929478beb3fe763eacdcd47bf80615826472b85cb4db7454ee8f";
   version = "4.20";
 };
 "lshort-spanish" = {
@@ -20523,10 +21667,10 @@ tl: { # no indentation
   version = "0.5";
 };
 "lshort-thai" = {
-  revision = 15878;
+  revision = 55643;
   stripPrefix = 0;
-  sha512.run = "924081bb5ec18ffa92e92f71a5eb6da893ffe0b7460f757360e3bfdf15c08d4cbcad79b4d45cff702915b98ecea16212c4d5ab237c11410376677de527af71aa";
-  sha512.doc = "a9522c99f62a8f51eb751d220495526f40cc7581b8d0fb120d6e9510b1af68e2c97158ec54fb220dbab4fc8d0070c93027741b549d01cfc3892bf373e3320f4f";
+  sha512.run = "e81deefb7fa47e336a6b9fc363fa75c35576fa40de1771fff207dff22106b33d185c267d76a3897f2188d2dbdf9d2b93a1caddcdae38eb770cd7c5d6f1ccdbb2";
+  sha512.doc = "fc805e2749305cff0164ccd8d0b043d26731fd6f39e19c0023c87e4812f8509b923d4c1a97594563394dd7bbbe4a99d3b25aa37366f6e5bfb3cc1c2aa21c0606";
   version = "1.32";
 };
 "lshort-turkish" = {
@@ -20537,25 +21681,25 @@ tl: { # no indentation
   version = "4.20";
 };
 "lshort-ukr" = {
-  revision = 15878;
+  revision = 55643;
   stripPrefix = 0;
-  sha512.run = "18754d10f48df3ff86d644b772daf7f6530c4e03f0bd3373ccb12df2181aac26b4b5cef6bb673674b576a07fad2f3a13a5fde954a389090622f4d6f5ba9a4bac";
-  sha512.doc = "03b8947d0e1d6e9d331c6ce6d60ae485bfab1b73ed936086a21f26b3d87116de99e535cd42f16561d3b839c84cbd343f8fa3167b1c478d6f8d0df3964d800e56";
+  sha512.run = "82600643c91120d732d50dcc6e14a4b4b4c471bf6c0031890487215d952cbb9675210f11fc40b039aff529bef90282d432966ef9547fc7d0272f85c02a288f4c";
+  sha512.doc = "f707d0491bb6a246243035d1cad265787ec4aeb7cbcc73e3500295dc67bf3a3a06b316f9f82d559502b7f108ab636b90fd01c3d1b0ee5f13fa3418910557c8b3";
   version = "4.00";
 };
 "lshort-vietnamese" = {
-  revision = 15878;
+  revision = 55643;
   stripPrefix = 0;
-  sha512.run = "ab9369125fa7283dc2a2b58999f57db3e5767e1e6810000fb71f2f0abdb693a60c2133703cf3427d35732769e393cf389733694aaa6d9e41f9ecf28073d06112";
-  sha512.doc = "ba2fc0eeb69f845ca306c7a03c7f7a46cacd3304c420c048284d248202a12f34b176d91244ca25892a64f6ab734e852ea83ad888684cdafb644da7d665a02b2e";
+  sha512.run = "6192e85537e184137189771d2180f1760db5930ad5a8c3dc8788ab5ca502a92b433224b1cc1afcc4e2a493fd17d4e4c43edbc84e4893ecf0770bd07579444eb7";
+  sha512.doc = "a0bad6d83fbc288ac1f39bee6bf1cfb3267a47852a0860f56b8251b67b2dbcd526d203c20b91f7adbe42034481255e5e3128b525e49f8cb341f18d9fc2407e14";
   version = "4.00";
 };
 "lstaddons" = {
-  revision = 26196;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "8b2b14b28bcc4a3b4f26d2f48bbb59c111d4fd33d5479c20f7e03ac838c6b6631b99b1a5211b383e58dec74d70d9130af2a38e3b85407c4376f81e1b52c212b5";
-  sha512.doc = "82bb6745b9f2342628bc83f356313c0de52148eef25ed3ade22f899693abe190de1a09347ebd2d03b06a5976d8c6f42994e2495eb7c4e513ddfa8244ca258cfd";
-  sha512.source = "048555cb2355366b87d527a39ab64ca91226d366d52e2352c1f4d503daced739508e217893dd0d0b405e99b5927efdda0f68c780215c392494dcde20b30a88d9";
+  sha512.run = "a0fdffdcc648eaa59145c2668412e02f1ca6f5617c5068b80a767e1efa0df30e9c6b458279380bf062ac8aabb0b531585f65f8c9e7bd9d2d6ca057395cb7fe9e";
+  sha512.doc = "823d63d53a4c7abc108d6d72244acf48a6197de00d3fca7b3f75a082c2b051091497c354429aa9aebb64682b65c6e45d5a90413f2a4248c8c47dddb0fecdf5a7";
+  sha512.source = "33c8822bfea19259db8792ece9d2796aed34323873dc18d5a0827844b17e6a43d9337a0f55e0f183e18cbc338f0b54d105860993462c3ccea595c7af4df38443";
   hasRunfiles = true;
   version = "0.1";
 };
@@ -20609,13 +21753,13 @@ tl: { # no indentation
   version = "0.01";
 };
 "ltxcmds" = {
-  revision = 53165;
+  revision = 56421;
   stripPrefix = 0;
-  sha512.run = "9cc445ad177af9b8f942b0c5096f83200224e0cda838441d28d5a188fee50d6c24dd4d415c2afb01792f57813558400826ead9336200f810336c26852ef61ad9";
-  sha512.doc = "bba1f1505bd24d62c82aedb28382cce9f80232b45f9ff0002c94dc6c26de0937cd6c1757396c2ca5a0afbb44d25dafdb4a4da1df46f88757d9b4cb03c912630d";
-  sha512.source = "035c7436b6000f4b17c41b8fdd71e1497cae824e20a8c872f7f4cfdeb43d080f6a7fb1c193f3718cf725ae5c79576c24616c36ce38b8705d05a1f1b9a5eb50fd";
+  sha512.run = "052303cd90b960cc5a9bf89c8938af95d8959ba6bdc603b4d53b68666b443b620417c9ec4ac65867b04eae8cb0a88940f905eac78d2c3718ce7a40ea249c9f94";
+  sha512.doc = "d82f046eee3892b5a241f78b44910c801b14583cf7f9a693f861ab04d9b05e0cd7639d8f85eaf46f95d2d325688fd1ba3c76421c6ceec5969046db497b0d698f";
+  sha512.source = "55f04ec6375c0b38b9e9d78fb658378c0e35c9d72127495e824376b1d54155138c65f6bfa804f7795b3a4514fbf1c5a7505e7500f51decb9b4d7c65b47d2909b";
   hasRunfiles = true;
-  version = "1.24";
+  version = "1.25";
 };
 "ltxdockit" = {
   revision = 21869;
@@ -20641,21 +21785,11 @@ tl: { # no indentation
   version = "0.2.0";
 };
 "ltximg" = {
-  revision = 51951;
-  sha512.run = "28486dc83e37120eb5c8e0218541f17f6d9f631087b56890cb0bb9a10e3599d4afb31e997f736ce99476491ffae01ed9ae3b4194205e366dd0a2ea09dc2dd565";
-  sha512.doc = "c8d688e451537c6b08556f3d021cd552ba491f0b031c253e0f914945604b492c4d2cb2b7423ad2f95cdd4ed180c8b0bee1501e28f7fc0b20a551b735a47a2094";
-  sha512.source = "ffaa0f7f2d7a6bdffa12aa333a50e3729853f61684ad85a06e6583fde646e968e9ae3ba12a98655f3cd230c9cdd7618715bfb6b268928a06b3361e8194bdb1d0";
-  hasRunfiles = true;
-  version = "1.7";
-};
-"ltxindex" = {
-  revision = 15878;
-  stripPrefix = 0;
-  sha512.run = "ff757a44f29820ab29946f66766b11a928db11b90269781b8039428aab4bf0b243b317176aebc92cfe95bf2e390be125012daa72ac4b8bfaab81477ed8129ba7";
-  sha512.doc = "119f18b8337b365e09b5d6a22ab447bcd0d4d516514c7bc6622d8b1f30aec5746f45d81cfbc07a81aed9de7f47627797b9c7cac3015092f7ca72acd79d5263ec";
-  sha512.source = "efadcca7c0224c4bb3814588947f7dc507140dc3624c5cdb3c7a788afa763c1cae5f607bcd4a67872dad97e725afe7e9f99f3a694c8398aebfaacc31f2b737ae";
+  revision = 57521;
+  sha512.run = "9aa5aacc687d31bc76fd81a2c26cef98fb9328b90c1d97c439f323fe7962184eab2b571431fe208823a6e42fea6c036128414474ca815517421989916a94eeee";
+  sha512.doc = "5fbf8faf7bfd95b4f35e755ec1507f155647376be9311b97dd7c2924c9958fb0c42351eb43728018bc95e12cdec1b2b8ef89a7a2245e532dc8a49b4c583f54b9";
   hasRunfiles = true;
-  version = "0.1c";
+  version = "2.0";
 };
 "ltxkeys" = {
   revision = 28332;
@@ -20689,10 +21823,10 @@ tl: { # no indentation
   version = "0.0.1a";
 };
 "lua-alt-getopt" = {
-  revision = 29349;
+  revision = 56414;
   stripPrefix = 0;
-  sha512.run = "94d186ff2dbaae126995eb2ee71e52145e88b32ed1fa765a6011c0d3935f19dcf41692e47699abd176f680ba8ebed58142cdad7be19526f7b8c249dac43bf3d4";
-  sha512.doc = "b7cbb2dff24692038f38e6185fbd6471a6979dfd8b659fbd972c810cb701aca59aeaa4d30c510333003819ff08921f3d57b9c43a7044827a35472ee54e3990fd";
+  sha512.run = "60ad4731ac61f9b5c4360bb3d0c6475e2abd358418e20bed29cc94761fdfb97fcf02829b9785e559ca6052a1e82ee7f0b104b166592b9fd87237679ac3caa2e6";
+  sha512.doc = "5921a3fd6846b15b0564b9182fdaa5aa62ee6897f3ea55eefbfd07f30f556633668755ee6e356dac23c9b61fd7ecf4013da8f87ebe151a2bd855c36d45f60434";
   hasRunfiles = true;
   version = "0.7.0";
 };
@@ -20704,35 +21838,70 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.7a";
 };
-"lua-visual-debug" = {
-  revision = 49634;
+"lua-physical" = {
+  revision = 56306;
   stripPrefix = 0;
-  sha512.run = "2b809e240570105b46f361ffcc031719f4afcdba45d14b4e51d4cbca10a7d189b385c00c9b277180bed4ceae45b8ad58e2145ac6f8de5d0568ff5f86b67c2cc5";
-  sha512.doc = "814f650ce8505338b41a91e1e7e55872f1f35252ed5f1c3c74f73379b4c60c62e40d48a2cc5eab62b4a726db29fce70761ad7a2a0a17b7d5019859fcd72098f5";
+  sha512.run = "d7118f61f0a64ccd3e67b7197240a49c841720816f9d438959413c603ecce9b332c9d253f21dbcc009839220540f046b18b4b009d3ad5f35a346d8276be47229";
+  sha512.doc = "e3e50f9994656b3f6049f40f0cb9ecce216869b439682560f9f51496fcb43b94f33d14e1b9f0f4a160c9af848c58bf2fa7e6d2dd1def46ea029ebfcc4410f1e5";
   hasRunfiles = true;
-  version = "0.7";
+  version = "1.0.3";
 };
-"lua2dox" = {
-  revision = 29349;
-  sha512.run = "24b6cf17ee55a9699077aac82263e442f1ba3e7843742baf425a4d4c514cb2f4b1ea8a4af9165997559560f2ed060ef818d3a57f71a79d6238ed29ccd263d787";
-  sha512.doc = "96746e4d0401cb0bb9cfdf7a44d2935d4e257dafb0f5099faf647aec0b385745518f160bfad8ae54a1ec018e0afcf4a7dc998cf9b7f310e0ba867bd2e6213960";
+"lua-typo" = {
+  revision = 58744;
+  stripPrefix = 0;
+  sha512.run = "940664d9898524e99966b6116056bb4f811d39c58a29926afee82846dfe6c77eadfc7e8cc37a3e417401cca1cab7f16043677d84947c51f695109e3f2eb58655";
+  sha512.doc = "18485d5b079306fb6d943256453f4643f33b9b6781133a2fb0f1ecc5b87d8a755bb0c60428d565a6e42c6aedd3f23f0d03aacd3af5ac4055e1950289fc99dcec";
+  sha512.source = "348aa0eb23bd9a94f50851a8e71633377347c1ce1942d4d84faa3b8d612ff26c2d0be192fa1a14097be6fb8fab3e363de0b1f77c2bba737a027e7ee279c55729";
+  hasRunfiles = true;
+  version = "0.32";
+};
+"lua-uca" = {
+  revision = 56414;
+  stripPrefix = 0;
+  sha512.run = "51223bc90b7d9c8da149133b5fc019e968da2d82c089a6e5884cd9c32b5306c3f7e575708229b1e6e77ad2840fcb0d4b01fe1d3973478385579ddc4a2d473096";
+  sha512.doc = "462d46a84532e483f7d70a6b16bc9b3f7bbd7623b9fa5ec237b8e5fbf5254de69bece3d7a494e87c73ded77852b72b1b5ef43b7b5b6e02f1e181f82727069352";
+  hasRunfiles = true;
+  version = "0.1";
+};
+"lua-ul" = {
+  revision = 58745;
+  stripPrefix = 0;
+  sha512.run = "3589ac691c39e8b37a29aa0481547a8e68adc00fc8afe60f362870fb058d76cb8753a1e60df52309093bd2759b9b9f013a37f0f7fc94af7bf4dabf0d2d48fa67";
+  sha512.doc = "d7bff6936de4e36c335d9811ad43d107a38f0a6d7a9ed217e7da39890a671d36ff11484949984252858f05961a667fc3f6585620d0cafc6d8fd5e674a6086bbd";
+  sha512.source = "301bfbf3f0c4a3b745855f682cbec973d760cfd0273d52a431b7942012677b08e6e4e0c14fbd35acc266f09fe80429fe3e0f06b49bbf839fb8ddd72e1653ce33";
+  hasRunfiles = true;
+  version = "0.1.2";
+};
+"lua-uni-algos" = {
+  revision = 55206;
+  stripPrefix = 0;
+  sha512.run = "cdb671d19ba69f6b2c7a5f55127c8f97973c9d9c962016729dcf2ff0ee8abf649acce51bc45c5ec736f243ecb56e98de7c1d5152827023c8e19af3990ebf840a";
+  sha512.doc = "5ec98605457ad145e63186ae1002f6c2fffc9bba2e512a3f982540dfe27539d848cfa05a8db55f26263fbfe60521ad7795bd6b474b6d29880046e1699daca074";
   hasRunfiles = true;
   version = "0.2";
 };
+"lua-visual-debug" = {
+  revision = 57349;
+  stripPrefix = 0;
+  sha512.run = "f98f686ab3d03e48e377ebec624297f858be03097ed66b6448e82869942ce87f8d1699e4dffa9fc3294a3a8a79a2f547efe0e006eb132ba77eabb714e31d8b40";
+  sha512.doc = "dc1deb6a514397c745001c5635d5205f03b44cefb43d6618f83a2314453928141ed9591b5ad8539db96998901981f20ffc80f89b4b7d5532abf736cb9ae0bdb3";
+  hasRunfiles = true;
+  version = "0.8";
+};
 "luabibentry" = {
-  revision = 31783;
+  revision = 55777;
   stripPrefix = 0;
-  sha512.run = "00349f5a6f5ecd5478bb718bcfc419953db4f90c9b2a70aab2e2bbce4395d189066b39cca743e5b790f588a3f2a17047a6e233258c4ef389ad6fc5338184af69";
-  sha512.doc = "9ec19b99275e3117f07e445e2c039bd504537fd470f62fb7f7f7fc428842ba86ebdbf0bd6a6be7a3b1b99100d209c6c47a9795c776287206afe331601222acad";
-  sha512.source = "628ff69779b5eba6056bb49b3bdb4017a10c3c4afd710319de9ac3168ffa44782969ed67399f8c1a945cbf77f1bc44ea33b0776a9f1f14aa2e5e29afb8cea544";
+  sha512.run = "ea46242da727c40f24fa232e1cd1db4bdaa7391aa372ae7dcb0210e2755fdfa2155de5c80a61b0c4554ab1c23a14bf286d00f07b34aef5edf416ac6b06f031ac";
+  sha512.doc = "9b4954e294173699cef6ba965948bbc2518d42158c3f80cfa5bec17c5e58166240f8c8d3864f5dda94ae325aef688db7003138ccdf3d6eb249b544baa72ec13e";
+  sha512.source = "d43a9d2024e5293966335df592451e3bd44e3f3522a06163c93da3d242b3e70377dda3612333a64e57d9db8ae8052753cebe9a73e01125b41e495c7a0f3a7592";
   hasRunfiles = true;
   version = "0.1a";
 };
 "luabidi" = {
-  revision = 52549;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "0cb391ad3f17ad8a85e7960ef11e4f0eb007fd255ed9eded40ef3fe5c81187b1d2d49c68b0411b813aae66fb252d9d1a9b3bda984cef2d034e96e06fe44ced26";
-  sha512.doc = "cabd1899682b7f1608106d6d36cfbfae1684fe84462420fbd9ca9b342c95f73750ed40d086553404f0a1eb34b56ee4026c497e42dae42d3348fa01cdc7a5c454";
+  sha512.run = "917d0d96748f2b70d368a2719bf6fdfaada3d24e2e60c97b6d412ba2cdd991a920d86a94d19136e075605095c19331e1dd37c3a059a9e8f772479ff5ab53550d";
+  sha512.doc = "92345c9f8e50eefccba39f294841a7eaff7d0328ef445106dd436ff10a994a8a9ec027c9400f8b4b1f873ba1fbd92565e21b1cf2c73d40d3468ce27ca7ae128d";
   hasRunfiles = true;
   version = "0.5";
 };
@@ -20746,34 +21915,36 @@ tl: { # no indentation
   version = "1.2a";
 };
 "luacolor" = {
-  revision = 53933;
+  revision = 57829;
   stripPrefix = 0;
-  sha512.run = "2ed3a27258f4cf1fcb82abd6dbf660d090dc8dabefb2352dbb0fe15d32d7a0af33039c0249cb3c06dbf3b56a6d41039112ed9e5f2abfeb5bcb5ca50bf5f798c6";
-  sha512.doc = "89f13ca9832cef55f75bdae2933e1fa1f5c9d678c5980805871f5b7f2e13f7e406d50b2cd0366b6f191a9ec03e293ddd11163ba6a52260b609b6a3ca0c677795";
-  sha512.source = "5be92dddca40a473bbb1b84ce85dab0073594a2ffca4d3ab00a84209789c0ddb06e7b9880168216780159e243a75b2900bd706fc33749950f36b4a0c1e016c2c";
+  sha512.run = "39252eb36291bf6023e8ab24e7f4cbca10caa9d89204e8e80a5962b08e66c6ba5b588e98d17f9b13be3a52fb5c392499ebb73ded2e43a4ce7ccad4cf30a24302";
+  sha512.doc = "4aeb524631531e6d18decde7b01acae4aaaee8f80392da87a2e7fadec9d353749b2d1dc65573ce2f184c24494ba340589fb83203ffcd49271e05dcbb79a1fd19";
+  sha512.source = "93d7f9ac094612760c7cbaa1b591dee5f31f8278f462808a484311e2ba6dd6a20671e7431e7f22985a7f77e23436eefe02484026820d4b125a7a1b4b9d6becbc";
   hasRunfiles = true;
-  version = "1.15";
+  version = "1.17";
 };
 "luahbtex" = {
-  revision = 53216;
-  deps."luatex" = tl."luatex";
+  revision = 57972;
   deps."cm" = tl."cm";
   deps."etex" = tl."etex";
+  deps."hyph-utf8" = tl."hyph-utf8";
   deps."hyphen-base" = tl."hyphen-base";
   deps."knuth-lib" = tl."knuth-lib";
+  deps."luatex" = tl."luatex";
   deps."plain" = tl."plain";
   deps."tex-ini-files" = tl."tex-ini-files";
   deps."unicode-data" = tl."unicode-data";
-  sha512.run = "3eac2b2d77d5d348cec5bd36fc11fde18371ad34345900384b76d06b2edbb05513a2697b36da7ad1b1a8b55bab87294bdd0fbf59b10cec604c4171a3d4520f09";
-  sha512.doc = "5faa6744ff98cb424fe4bb6f170f22be344ea9d58bd967a997c0f3ba3f8adb64d942cb2c637f77e4afbb9d5a648598832f5b129bc8c506141c0e05ce6bbb18e4";
+  hasFormats = true;
+  sha512.run = "bb198606ca33912f75327b0799061a81aeb9e2315182001710929d5a7c786fc11b58a5eadcc186f2db21df01777904ada31058c0a03376c04020b213d9f7c519";
+  sha512.doc = "9b7c72ad24d459b345552ee8ae05c047c61cf3e0b6eabb927e2a02bf62558f143e937463574bdb0cc60a0a4c8b2da3f86b1d9361275142519044051039275f1c";
 };
 "luahyphenrules" = {
-  revision = 42670;
+  revision = 56200;
   stripPrefix = 0;
-  sha512.run = "f1486d23a51111023fca3771ae530ca058c582640ddfc17281a66ec055b05aaf24021c724566f5e9c9a5bd674eb8724964fae78762dab30182d8a95333293efd";
-  sha512.doc = "152f690268e3b1c6073b36a66965c84b6bc6f45050b2887b7a2ed67be9497ea7b1708cfa1335fcf296d6a2feb11924120336cd89ff3017cb7e77808e9927e9c6";
+  sha512.run = "01025f1aa9abf7fb0c06045e8bebba3572b1aad06bb6edafd916e721c8ecb295fc680bc4da968e4fb059173ed9ba8e8de72ed42923b458a8dc42de4424b6ef9c";
+  sha512.doc = "1487269c78bdef7aa626bee1c339358aea03af7df17cf92d48e56a1530b5e4bb7a5dd56fd7e094512fc3c149343e35e9e1683ffcdb8634042f26e86083f3ca69";
   hasRunfiles = true;
-  version = "1.0";
+  version = "1.1";
 };
 "luaimageembed" = {
   revision = 50788;
@@ -20809,17 +21980,27 @@ tl: { # no indentation
   version = "0.03";
 };
 "luajittex" = {
-  revision = 53322;
-  deps."luatex" = tl."luatex";
+  revision = 57972;
   deps."cm" = tl."cm";
   deps."etex" = tl."etex";
+  deps."hyph-utf8" = tl."hyph-utf8";
   deps."hyphen-base" = tl."hyphen-base";
   deps."knuth-lib" = tl."knuth-lib";
+  deps."luatex" = tl."luatex";
   deps."plain" = tl."plain";
   deps."tex-ini-files" = tl."tex-ini-files";
   deps."unicode-data" = tl."unicode-data";
-  sha512.run = "781346b437fd5fccd22a56d37fbe42d40197173db24960aa435d75fcf7fbafc2bea362156250cee34e1c03c8aa9ee340d97327cbafa32a202eed1af032370ef5";
-  sha512.doc = "045e424a75a951d6c6af885f952831d26cc44db785c5c802b7e88e37540c110074c4d2adaa872c1ff230bc0d37b247b0a44b9621f12e7e37f170b81abd9f7191";
+  hasFormats = true;
+  sha512.run = "01777af9a468b6216417c5158034c3dea3cfb1c3ca7d28f1c4ca2b239fe569fbde410d17662bf9a10f5fddfd1bb6541c505d772e705832b52a1c2d6225d0fc6f";
+  sha512.doc = "a6a17f70a44655e1aba11ac1353cc13b36bee762083be76a31c04d90ae73d021659219a3a741b70f0b43888d6b6a6ab356f378fa5850a23ce7423b28a721e924";
+};
+"luakeys" = {
+  revision = 57463;
+  stripPrefix = 0;
+  sha512.run = "873879c6495479db77cf0e7a0f5ac99ad2eb67088d1d4abaf55e4ec341c07103ced954310b67f5ee0bec6986793f9e68613b7a85c3a8fee8b5697e0a05f1e1c5";
+  sha512.doc = "58b2550998915a20226ef4890255c8a90aad9faf248a0c2a880b086941af256d9f83edc2b29ed615da6355a5bb5d95605580824581ebd7ed191d82b92786e8ac";
+  hasRunfiles = true;
+  version = "0.1";
 };
 "lualatex-doc" = {
   revision = 30473;
@@ -20836,15 +22017,15 @@ tl: { # no indentation
   version = "1.0";
 };
 "lualatex-math" = {
-  revision = 52663;
+  revision = 56541;
   stripPrefix = 0;
   deps."etoolbox" = tl."etoolbox";
   deps."filehook" = tl."filehook";
-  sha512.run = "c976e181a84c74dc7bed8512cd76dba5cae0fb799c5c3e189ad89a131e782b380efccf9d625e6c1a68b813aa57adb018e25ab763e97bf31a40e48f03503e8e3f";
-  sha512.doc = "639bcf68bbdfa7e1992e2e5e8e5ae791f58250d098e17224a94a69b994d51f5f22dc95cd7bc27d968c5bb9ee49bb17d6825c18c65012c72bfb1bdb1e8bede9a5";
-  sha512.source = "af227f41bf4da5ae22cc17fa114fbe80f3de12072d9321cdee72409443e31fffa017e5762ed1514224edd19fea8d6098ce894f4bc00d1f4c9f507c2728532396";
+  sha512.run = "a5568fa178fef7d7348a8e1b72f5671a5dc00c9c8ec59dded7da3fb62105697cb09c2cdb4f0c58fd5cc16b8966a66554cd7ba0650d757cc16377406de35d1005";
+  sha512.doc = "41f38f8e1bafbb63b7a83f3087bf8aa0bfd7d946206d07bba2dc93d99049ca101869c575d3f2c8b732f9beda719bdd08127a047700052ed915bffc88001299f9";
+  sha512.source = "c06e83d733d9d8e380b2f688c8b21db85cd3d18be8b9cf37cc0af6b9dbf279db70d2f4d12fe879c8ce2628a1966708a117be5c72bc4dd535fa8cd431f8ed88f0";
   hasRunfiles = true;
-  version = "1.8";
+  version = "1.9";
 };
 "lualatex-truncate" = {
   revision = 48469;
@@ -20856,49 +22037,59 @@ tl: { # no indentation
   version = "1.1";
 };
 "lualibs" = {
-  revision = 53682;
+  revision = 57277;
   stripPrefix = 0;
-  sha512.run = "bf41a6bca45473d40f927ec019434612947fe79d70671837b2b1ac53cfc727f68e436cd52bf60d12bca5d5dd0bf89e49fbf610107458ab4078b8dfa3bae25940";
-  sha512.doc = "3703aa61ceb2fb0cc79a33972e15f1e8d19a2f597eff19b871233422b78dde4cfcba2145cda33c0352cb54a014b7773c3fcee6819b547fb6d91f499f4b464f97";
-  sha512.source = "9975b9391ead3221261494bae828b0b2e618cc686da2bf27b6d7ef2d034868a6428fe9cf274a1ae87bcc42ea6c9d898254df93b1a9d0da21b8e6fefaa7b86468";
+  sha512.run = "ccdbde1b5b9abd3478e3912ff20b1639c3504f06433eb10cb174a3a413642629ad9eb0ecb3fc7dfe3ee1e7e2dac2e552dd86de98bd89e3a65bc6736bedf181af";
+  sha512.doc = "4d3771a5cee5a1ef7a7a7d3d88cf44020563c8bf50328bd6cea42a8ddc731da294e6b300ed9318030b00f0ccecc0de8667382d41727dc02353e68fe635d0aa19";
+  sha512.source = "f504562bce245c51567eb54963de87702a4651b73bce71144d2dbd91e6f9894c5d20fc43ae7a7d68c92995f6cc077bcf76875fea7309a09b288e6bdde2d55222";
   hasRunfiles = true;
-  version = "2.70";
+  version = "2.73";
 };
 "luamesh" = {
-  revision = 43814;
+  revision = 55475;
   stripPrefix = 0;
-  sha512.run = "f9ae2e27725aa78c7a6c7d049d0c25f4a4fef260dd2a813a9cd6a4f49f5ef1a786540c77c88c0778c5ebda5f188ca8b62be8335d5bcf0ee1a5f22df193875cc3";
-  sha512.doc = "f25df210662af9d91229a99228a7f15bfc58510adfa2f5a91c586b4ec30b2482ed044b30db40cff0a5c70dfc70ab560367efa96bc077bf412d536e15f1e32e0f";
+  sha512.run = "22938a5a3bc612727a5075dbf63ed60be78629a72a9f9c495f611b9e33e2da2e3d9a4df2f2bbe787319ce91e1312e4f7614f95fef071fc330694004d4089a085";
+  sha512.doc = "22a8a27a6591cc74c0063c12a895a299a080302981d632048405a3adeadbd12e2f72e8eb58b94d72ab26c966ad68193a6f129dd65860a021d56edde89e5e4932";
   hasRunfiles = true;
-  version = "0.51";
+  version = "0.6";
 };
 "luamplib" = {
-  revision = 53904;
+  revision = 58279;
   stripPrefix = 0;
-  sha512.run = "fbb99aa90563e6cce2e5e9c417f739868130f8a2dd9875fba8a44e3f92e94643f2a9446cf686f222067c5aec66e5199eb5fc134458d2a72f2fa8bc949ed51a1d";
-  sha512.doc = "e0568e3547253f6dc9d12f927c3d7025454520ec8611ede49497f80a6354518d07eb9d300208fa4a8173b068ce65904f45c071d0fea5bfb3bfe8de1d29e6a0ec";
-  sha512.source = "3a00f23c25b683b9c8949a7cb4841fa92babc470d40f756898c68fe2ed82e090cd7cca2dfaa4fa7894d7a4ea96ce5db5936ed2b1d509af118cdf039ea7a8e7a3";
+  sha512.run = "516d5f55c367bb2275268e4ba8bcf45cdc576986c866dbf435d3ccdba1eeef799db03d704d452fd49cef559bd5a1bc903839a0b04a926694e336a4e5652a07b8";
+  sha512.doc = "c503945573406c8176ce8f3461ab9b4fc07762e029104e582be2ae9cee46b4170916426d384b363bc30e12e83f39e0bfaf5f1998e8012b29c8133de23b39427a";
+  sha512.source = "f11aca288e535861c365259a1c0e1d0a42137898282d2e6027952df827f4c52ad8a5b8553fc0cd692fc0ae5d0f0c60db58a147bd30919a1d04efad4501580b08";
   hasRunfiles = true;
-  version = "2.20.5";
+  version = "2.20.7";
 };
 "luaotfload" = {
-  revision = 53652;
+  revision = 57443;
   deps."lm" = tl."lm";
+  deps."lua-alt-getopt" = tl."lua-alt-getopt";
   deps."lualibs" = tl."lualibs";
-  sha512.run = "0c61957b2276d8657ae5ab8e5274245ef6840b2258a2225a04aef269a3f54a98b6ec6206d02008973a4d1577df8a2234194faff033fcb8f1ca4e0341b2766fd0";
-  sha512.doc = "540cb93bee1ebe59eab60100e37177fafc83243c944fc87834f60cd1d50c0f6af466e1376aa5cb460176febe0f937f93808b6d0d20a096b344f5b8d48ff4cbc7";
-  sha512.source = "41e183b98987423fe35105b2b6b7aa0dd3784daff26e7e1101b1725689a7b9ee518b1f2c55e2f4c87b1332ef833cfe287bdedbd4d23c6065f23e84c620302087";
+  sha512.run = "5b71f8fa12e21c16d1aaac01a2f27f3220b1da0eb6aea77ae3767e25a15d03180b7bf3587eac9aaaa61658fa7359e6fb2c28e588fea80d4f7b46150f55c2fafa";
+  sha512.doc = "f900a29ea21b654b03671cdd6166dc353bf54eb761757849da96fb74ea398d6ed9fe33f1d602e0a8e1353395cbcaac9cffb4b26c1acebc8105f119271fe8f51b";
+  sha512.source = "d422a64b7251f566829c5603957c3b2247cf112f8c3b30951ef3e9584a78b758f38e4efd0b399f35832f5e2f8e405901a13688c6a62bd86f2892ba44a01dbce0";
   hasRunfiles = true;
-  version = "3.12";
+  version = "3.17";
 };
 "luapackageloader" = {
-  revision = 53211;
+  revision = 54779;
   stripPrefix = 0;
-  sha512.run = "4e8be545786285cfea52ed31ec3eee7d69848d2d400a12ba723ca1b30daa214b7e2a8bcdf562cde6c7916c9b8ec6a3b04d866f0b8521eed169de8222a27a4e11";
-  sha512.doc = "93e063959a82368f1cf603c7b77b591b236ec95dca3a73f7ff0188cfc05462fbb4de53103b3b3bc0d241eb1efc43295a4870c52702df506a1adb89cee699ed83";
+  deps."iftex" = tl."iftex";
+  sha512.run = "7f2558dc265746f143520c2c6f3bf2ed05ac8c54988e573519321a7fb5a2a991220d0eb8906893f77964dc01f0e3f16b783dcd20f809042a11d29cd137f557fd";
+  sha512.doc = "64719d715fc98bc09ab17db5f2053ea3e34d703adda6677f50ffe178a974230e8a03a9019b995238d073580e1faa745e655a7207468965ccb9f67bfccb5b5a49";
   hasRunfiles = true;
   version = "0.2";
 };
+"luaprogtable" = {
+  revision = 56113;
+  stripPrefix = 0;
+  sha512.run = "68ed668fcc84eddad444edfdd18ede2c94ad81fd61162d62c5a052fabcda6e5bcb519d6eb473721fc2cc090bb7f642dd55ac35b9f1f0a682b2fb8c480a0a1014";
+  sha512.doc = "d91bb2fdf9851b1aeb3dba0b5eeb75bd1f9aa8c806fc3a99e063af7f56e0878152630aa18731c1c40aa00de72a0d192981a272d586fb25f7a19d14b4fc25b5e6";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "luarandom" = {
   revision = 49419;
   stripPrefix = 0;
@@ -20916,16 +22107,18 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "luatex" = {
-  revision = 53977;
+  revision = 58702;
   deps."cm" = tl."cm";
   deps."etex" = tl."etex";
+  deps."hyph-utf8" = tl."hyph-utf8";
   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 = "85552efd1a47071736ecbf93db6b569a7daa2cba87a1ef7f381cc808c893b40e53b3c2b405648253b83b1883b9a8e4aa8aa5d1782bbe7db79a9f223531707501";
-  sha512.doc = "c844d4407c9f31bf43319c64d4f6e5460737423e32edb7ded2824615eba653d82df793fabcef9ebeac7fbbe61efec9582d463cf1210966b699ecfe9171deb29c";
+  hasFormats = true;
+  sha512.run = "c16a8cfa5ce0991d4b667471dd32f692c4e340d1856a36fd684811d40322f912b94125ae101ba095ca6c54b2afa3a37f1ab9af83e4a10328f8c1a1906a02a44b";
+  sha512.doc = "0d2492075eb2bb6b9cc8a67b0ed53cf5a8c4c700797d8bce8061a4cf938db5cf19fa4ed6f7adb59b1da0701ff365504e813289dea3c245ad717c82bc58df9128";
   hasRunfiles = true;
 };
 "luatex85" = {
@@ -20948,22 +22141,22 @@ tl: { # no indentation
   version = "1.3";
 };
 "luatexja" = {
-  revision = 53983;
+  revision = 58542;
   stripPrefix = 0;
   deps."luatexbase" = tl."luatexbase";
-  sha512.run = "f58bd79f429be61a69883435ae6445514e5c9a4cc936bca14e5d26da8ffd5437137a8d14b6d591e385a3e8183ec3248c9563b51dd3526554a4cc3500702cb708";
-  sha512.doc = "53aec90f642acf910a14cb5ca2b04cd1187b9094f01106227342ae51304585d01ec771551d67b2c916d05fec2179bd9bf33b182c5f5ff8c328159571db4aa947";
-  sha512.source = "8b8137f7f9db6b8e45b029f99f93b8e1c05d47394438f0de2f859e47c9675a6f9ada56489c2ef9e9cc3f51a20431397a4e4ca45e96a6377e3b1fb43c54496e11";
+  sha512.run = "be42a930c9b89695ac5e69edc2ac28c8f9956f616012826932e56af54f3aada99a02de72c87f4a285e3553220be1583bb60d98e3741abd3d12d167d26b778047";
+  sha512.doc = "667bb90edc5d4f4d706e3f0ca32cecd2c3f63e5b7a10debe1adf3824ff745f743b4dabacd6eac970b328096018b03186c10789adc61daa0d91c4fd979aa5b98c";
+  sha512.source = "8472ba4ca610b6579549435da7bf3bee4680a2ef44ed9c2073cbbdc4112f4f1604d30d62e91a894769e98cd1c3d8baddfddf406cde79bbd8539e441c9d2b3e01";
   hasRunfiles = true;
-  version = "20200301.0";
+  version = "20210319.0";
 };
 "luatexko" = {
-  revision = 53824;
+  revision = 58085;
   stripPrefix = 0;
-  sha512.run = "50408947cdec08f41d081829f4cebd832aa817c233feb1fafa5e88bf38386232c2d04485e7feb8ea3056a0d0cc057975da2ed985bb485533f05c4cf7e56f6fa2";
-  sha512.doc = "645725cb6fae45627c9524ff45bf2851553764d0c1ea5fa2c6024aec1f00963f9c5baa787442bfb1ff9af0b70cd63ab4aada40dc32b11274e19296e9eee208a2";
+  sha512.run = "b9132deca6c059e3b77ed12f1e8c40b619281836188fdffe01eeda270adf9f1e46c1966a741d7801f7542fc076b20321216b9fbfda2e703396f9f721bc9d10e4";
+  sha512.doc = "804571c4ed04b9eae4ee9375c11beca755c02e58b79add2d97ec75e3eecaa3fb267ce9da1fd947e526f0dede0e405da0b29c2f0aa6f96d04bbd8d83d0866a296";
   hasRunfiles = true;
-  version = "2.6";
+  version = "3.0";
 };
 "luatextra" = {
   revision = 20747;
@@ -20984,28 +22177,28 @@ tl: { # no indentation
   version = "0.5";
 };
 "luavlna" = {
-  revision = 52682;
+  revision = 58087;
   stripPrefix = 0;
-  sha512.run = "048347c596056e587cf0785359ef3dd1ac1b86929be10ba1f8471fe53054e75cb815fb67d61fb15953285c240e81fe8e48e72518daedc6943287f1d518b5c0ee";
-  sha512.doc = "cc352d3acccc440d682fafe4978f65e6395134af29f9588289200992ecdba1c6bced1000aa1f20065feb2c6f0dc0db4de868898a22cc2fe64deb07980f5f2194";
+  sha512.run = "ccef03e521ab96c6ba786bc6d2651c1178935902c6889fbb98156f04105498292b500c824474551bafe23ab76967c212730cdd781d8cb7f86cf8c8aa1aa64d56";
+  sha512.doc = "7f484b73c1ed198a325a7835d647b4be21db1fdbf4065988d2f45f0a07bd6ca1697509186be4b911080bc8e5e753262a2a62f1f89cbf8e95aedf3cc1e21844b9";
   hasRunfiles = true;
-  version = "0.1f";
+  version = "0.1i";
 };
 "luaxml" = {
-  revision = 52137;
+  revision = 57183;
   stripPrefix = 0;
-  sha512.run = "95279ba444644ff60cd0aa812690a5f60aacb4c921b9e3fe1b714f8574b0b01692cf8042fdf34a044e162b7e231bb31989e256c4a4696f1e3358df8088114707";
-  sha512.doc = "b5a7fd96f95350b8b7c781d1154ca2a46cb22b0413165f599e5d5614b411a1f1e5ba236862270855bc613e3d9d4503d9f9460fadd7694f719f8bac6d354fc8b3";
+  sha512.run = "53c98fe9b23a51e57244d73e5a4c572a14f130da4ee34c441d953d4ec0f3f18900df9f522d7710fc2b1ad25dda672c8d4c49e29e2a0b764c8df542fac024c40a";
+  sha512.doc = "9985335dfb4b95482f685af3df692b8763815cf38439743dac4d993fe215a27fbbc08e1193f46a19535ef3a210540b57ba10f1a6fb0f66b4c6e5789354cfb4a0";
   hasRunfiles = true;
-  version = "0.1l";
+  version = "0.1n";
 };
 "lwarp" = {
-  revision = 53847;
-  sha512.run = "a22c27a141c768d1e6e50fe847ddcf4b9fb7c6010eb3569590bf6da200beb2112d133c71d6cc38ca6a3e79558162fa5e3cd610679a3879c01096b0a09f1e2bf9";
-  sha512.doc = "4ba898d997ffad75225ae9dc37f24e9458f6e1129509131bac328587b3243286a7444d782c3905bb61eb0d9db73b8aab282fe5d59f10475e08f994bedf6ce801";
-  sha512.source = "a6148d128777973e3712e0e05cce24005c82d2ffd9d5efc1217f73fb13d0773aae91adbd7e1a14db90ef9d19114d415cde92232b3373683a1736f5db823dc8e1";
+  revision = 57836;
+  sha512.run = "7399b81b9388273a19bb24f8a834f084f961907eb55b97c474eb2a741e2847da93fd4a7b191e5041f0346e84d47798f1a4429f9726d5a4800fdf85221d36f18f";
+  sha512.doc = "84f55b97be328a79c2248e4ad48ad033ae9b214e39cb7118a0f5a60b860df2174ac53ff82da0c82ce5c82a109705b07df9cd4cf5b36fd7b1ee5c04f95f665269";
+  sha512.source = "c5ba17164443f355d83dcf6bb3fc524628de2628ebca0f3a7decd2124360e878a62594a45295ef2bb4a203ad262842201ccb13321da69c84a0d8e8145eb16738";
   hasRunfiles = true;
-  version = "0.80";
+  version = "0.895";
 };
 "lxfonts" = {
   revision = 32354;
@@ -21039,10 +22232,10 @@ tl: { # no indentation
   version = "0.63c";
 };
 "macros2e" = {
-  revision = 46026;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "5bb8ea01d851272306a4d9aa1897d879eef53a1f7262c83a8cec81a7e00334a495eb89926683d42af29f38aadfd1461893ad7bd72cae3993f1ea63a7475dcded";
-  sha512.doc = "0a089e411cce517581166b359ff092b7c98d09502afc83a4935269ed2520ffbb044921e5432238e999cfe85c72371bf8a45bedc07c6ecccc14cba2f4e7b6b6c7";
+  sha512.run = "4e187cb2c5d6a2c165e7f74d8234dd5a609ea1462dad0a268bf17c6e21acf22d9c6f54a53930dd6678b1375cb8878fecea22f4f132a8892aed7387d29fc239c6";
+  sha512.doc = "ff2e1118b718e17a4716a84bea265acfe47f2178ab6c0a44d39e0320ffd6f0dcce7dffa37eddf14a7ea41dd4b3431ff7c102f6c3c6092e9562fc60de19b6d89e";
   hasRunfiles = true;
   version = "0.4a";
 };
@@ -21080,6 +22273,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.7";
 };
+"magra" = {
+  revision = 57373;
+  stripPrefix = 0;
+  sha512.run = "2b182272dcf5bf3469ccc38daf9ad24081002d118de77d2dd012b136152f2147a63c6c8fad5ffe2f758efbfbf7665ae0c61ef6281cf16112b740da95d2334b63";
+  sha512.doc = "8364aaf47ee07d7462dcb13bb370c88c47556e23491233e580dee165528b417bf3dd139f0cdb3db6c565c0ffbac40ea2fb995a0dd2981dd227d1a70561f2f619";
+  hasRunfiles = true;
+  version = "0.0.1";
+};
 "mailing" = {
   revision = 15878;
   stripPrefix = 0;
@@ -21098,11 +22299,11 @@ tl: { # no indentation
   version = "1.0";
 };
 "make4ht" = {
-  revision = 53514;
-  sha512.run = "86578903b820e3011042dfbb6d18a436cea35a780691d3aa82f468518f7666fad343d6c91c91dea0bac47a06b6a812ca5dc95e474f5913f305c22adc2636d422";
-  sha512.doc = "ca138ad89fd6b350dbb3fa6b22649c3b0ff2bb802e5273f772765b6b7fdea4211eb41ef3a679af2d9d853578a9256f84d492be7699f4b5d33660ad0d59219bba";
+  revision = 58563;
+  sha512.run = "dee613984e389d3d5e85c64bbe99390eb533551b3d03d3f9993cd8d92fb5dc7495456e51281ab204670a0f42139111b27b45c132075eda47c5604e50f335919a";
+  sha512.doc = "f153c737e87821a478fbc9712b320647842b3851094c851b4619ebf1e658ca944adeb2f19d197b57aaa649be70cabab9988ba33914a10c3708c75ee5370b2eac";
   hasRunfiles = true;
-  version = "0.3d";
+  version = "0.3g";
 };
 "makebarcode" = {
   revision = 15878;
@@ -21226,10 +22427,11 @@ tl: { # no indentation
   version = "2.7.5";
 };
 "manfnt" = {
-  revision = 42428;
+  revision = 54684;
   stripPrefix = 0;
-  sha512.run = "6d4282db5f5baf92e6dfcde9b8a1e78027a5d6bef4e27b8ff35741fd8bcb35ca0a0d4e3db996ffc9a2e50868b1f849f961a4d0179aee0f580b33d79972656d4c";
-  sha512.source = "1f8b2acaf18fd350ee0359acb4771245eb3d5d750f92a637745ca01f4100be9526ea323ced82c6a6ff71eb6b9dfdefa2c44b21f5ff9c15f3f2fc68536f5f8ad3";
+  sha512.run = "492dff2a46b9c0e89b8e29149546dfc736195f7f264b156fd91f4e8d1396f43b149948df656c7b148a2d54064fba89e033179b31eeaf03d0037875e36e9b4244";
+  sha512.doc = "469280a4576d3b8396f310ba627f5a69f8fe47604f39562321d9b3b7d2f3e81f8d2c0ff7cd18ae4a93d9125df0fba79744edf0b30d036916a8259dc39adbdddc";
+  sha512.source = "c90ac97080e2c0c767673f7128e1850427218bb4b05024401fe37aae71ae65f1feae2e11301055dbe6b74fe56e7b16bee4ba1fe0f1a1defbc07763fc5f5cdeb0";
   hasRunfiles = true;
 };
 "manfnt-font" = {
@@ -21254,11 +22456,20 @@ tl: { # no indentation
   sha512.doc = "e8d9c687c1b3525c5e4d218a380781f1b2e7d512b053a583b00c97f0b7eefa1202dea310454065194039841bf8763acc2b0c4712ca8d5e9d31b57cf03c50b928";
   hasRunfiles = true;
 };
+"marathi" = {
+  revision = 58760;
+  stripPrefix = 0;
+  sha512.run = "d3ee0acee2b3a7f7521e3af6406ee747e1af4ccb8b4f53701d753e174f5784df6bbd64d662f25254ada8de9bbc147bedc42d332f0b1643f19cb7c914d0389000";
+  sha512.doc = "efd2f3ad9a08022009823700d9afd0f0928f304a363ce2ffbd5485448b40e426efaba8187a6b3cd144ba6ba82476f9efee8c71e8fe00f6c6d9d3faa405ed22ae";
+  sha512.source = "f02b1245d7ee3d5516e66f4176bb30ee44fdd47daa4189a2b8cf62359ba12d2cfde331ef901a64f54efbb739bbc9b555d7d94ff755ded64961769f63407291be";
+  hasRunfiles = true;
+  version = "1.6.2";
+};
 "marcellus" = {
-  revision = 52367;
+  revision = 56016;
   stripPrefix = 0;
-  sha512.run = "dbb5f27d0bdcc0ac304a45b06afb800c002b299cb70f86fefcc25f9aee288c2cf4eb8bbbc37eb97d380bf1d1e2371fa77c196e87fbb92c22d2cb248243dc35d0";
-  sha512.doc = "a9c4fd90385e9ab3b39e4744084d2730dabb4091b09270855ca0d1bbd21b3f0518300a4f2ae0243121f5174f3a491a460ed6c5d617298bf4392a23368cd57f8f";
+  sha512.run = "2958f2c7aaf431dd220ead4c6026ee501d46da5a98274a14b15215e00bd0d43e49bffdde0a66149c8c1d0a6535b3661d728537fd24ada2ef3e286d485856f755";
+  sha512.doc = "2e28359a2e08837e2bc6c1076caf5e45b59e69bfe0d6ebf8763780642e1454a481b1cdd635f8dc804b8e75ed3251567bd895ec3eaf9d523454b65a5179393d6c";
   hasRunfiles = true;
 };
 "margbib" = {
@@ -21280,13 +22491,13 @@ tl: { # no indentation
   version = "1.1";
 };
 "marginfix" = {
-  revision = 31598;
+  revision = 55064;
   stripPrefix = 0;
-  sha512.run = "9b9649077a93599c653d0e2d46e6814eb378ee8d2b531e2b810fcf0a6b698899bd13041d3b7f4aca5039bced2eff4789ad21587ccc596f70a6105c2efc89ba59";
-  sha512.doc = "fe547fa6bef7d2417447e4261fed0b43d2f88c944c499a55c5959a2e7d9e169e80a06c9e191edd76f1ce7ab4da9834b8b216f0881d93095e9c41ba5b7741d845";
-  sha512.source = "fe914d9e7094f64f3d94969691e02950fc10a69c7237d5ea42158a1ffbc983cce768873ea734d1def8562ab70294af0f13bb1b9cd80a2b1526394f2e151c3b31";
+  sha512.run = "70dc40b9823cd82a52a7e55e5af47e5b2373fd7cf16567f6eca2bb886d3612473141435444b538f81ab9467d1b3e5ba04424b1ca47d95cc0869dea02faf82b03";
+  sha512.doc = "16ab654dd8957bcf37351b7c766b787f27baddd4e73a6a4c3a07f5b1486f5ea73c9028675b5830b8dc1224eae29f50d61bb579aeecd9af4aaafaf78259bca900";
+  sha512.source = "5e94ffc102902ff040162f5d9fa39f1d812801d0413befa5db7cc2c23d91ce24d47317f411e64f2fb2e22fb782c9cf1f87780c2cf2eccc50214b502402032eb3";
   hasRunfiles = true;
-  version = "1.1";
+  version = "1.2";
 };
 "marginnote" = {
   revision = 48383;
@@ -21298,13 +22509,13 @@ tl: { # no indentation
   version = "1.4b";
 };
 "markdown" = {
-  revision = 50906;
+  revision = 56414;
   stripPrefix = 0;
-  sha512.run = "c17f37998b3623bdd94f074d4f47fc871e8cbf3ffe961d1933ed2113eb90219cd74105d5e35675597376b64a854e89eef07c629335079a9b131f827c6839713b";
-  sha512.doc = "34562bf94ae2a4c9dc415b8c4213b6f81d1fab8e92d1b6da057997c6e32fee652fbe7245bc2c7b9bc188bcd9d0b64c7a01eb1795874df473833730a551980cd6";
-  sha512.source = "b90130e216957b4612283e3316192d3e0118740a9d43cb205bc429e008832054a23818eff2bcd3b23f12a3f27fe3a72f08e361b15c84cd6efd13173909c61ad6";
+  sha512.run = "892bdc84562db375dcd5824f43e93466ca1b833de08ffa247e5e2fc477f6f92832e51feeef8056aac2d5d895e080eb1bff674fffaa0a3d2da8aca3fcb51f0ae1";
+  sha512.doc = "b00203a7abce01e87a9e54b170bc68bd19bfa5ec346d37ca8805150013d1327b038be185753a0471574b88c1a4d572bfdb7e2ff6bd7cbfea74aef02b489314af";
+  sha512.source = "b8936aae408dec7c7a5d286e0c0f52f8d3d36fbe6ac70da50a3921ea4338689d8f9633f9b22bef36a428ca8cbbd4fc0ecadb98ac9070f3afed02d8ee9ff67163";
   hasRunfiles = true;
-  version = "2.8.1";
+  version = "2.9.0";
 };
 "marvosym" = {
   revision = 29349;
@@ -21315,6 +22526,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "2.2a";
 };
+"matapli" = {
+  revision = 58635;
+  stripPrefix = 0;
+  sha512.run = "540a0ee0f38d910995437efabff5b4775a5ce496275407dadb99a24d969a90bef7127abeab535f00db5009db0e90d3ecaa85651f735db027ef87ea93051421a3";
+  sha512.doc = "907b09780665470c0055594b3908fb875a9af575195f603e343e877a47a8e8d35d492cf2e03bf1ec9f62bdbecc973384c27bad09ca0ecff5636f16c4cfdf6b2b";
+  hasRunfiles = true;
+  version = "1.1";
+};
 "matc3" = {
   revision = 29845;
   stripPrefix = 0;
@@ -21340,12 +22559,6 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.43";
 };
-"math-e" = {
-  revision = 20062;
-  stripPrefix = 0;
-  sha512.run = "c51c61baf8a8189fc2facc065d2f80c75026f5dcca8ee79c6d72ae9d71f0dd7fcafd7a230041db55c07e065838e865a56129c79b502c5f65e41ecc7b03e1e5f8";
-  sha512.doc = "8f2356c61cf47332ad4b62f2065ba7f16173aae618e0d387c6b5f9f97a47c6b3fa14deba24e93ab7b359571ce732023e9b062342da0effc16aa6ad13fca71c5f";
-};
 "math-into-latex-4" = {
   revision = 44131;
   stripPrefix = 0;
@@ -21454,6 +22667,13 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.6";
 };
+"mathlig" = {
+  revision = 54244;
+  stripPrefix = 0;
+  sha512.run = "1ec5761aded23b8ebd4b9afece00ab1f3f9a18886edd12ffd2a2e0b5b9fe9adc9a4ee6fb629933f36f6a161c76e85b54e3d9855871c3387cb0f70f90194b2615";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "mathpartir" = {
   revision = 39864;
   stripPrefix = 0;
@@ -21505,13 +22725,13 @@ tl: { # no indentation
   version = "1.13";
 };
 "mathtools" = {
-  revision = 53442;
+  revision = 58725;
   stripPrefix = 0;
-  sha512.run = "c7da4d6606302ca3d569755f2cb532f93db37982113b8b632d486055ab08c9bbd1ffd0d285fc868907be3faf685f7dd3bb9b00570e75aced623a48c78c9f7937";
-  sha512.doc = "1b8bc4dcfb70575aade3bfb2f110f6561de4e4ee4ec0f39fd6c2726ded19a455280e131ffdc35840c3230a466996a5623683e94796541de3ecae7c58bd7b7f27";
-  sha512.source = "b174478ebaa04ae0fa28c78af928c3cc9bbc74939da3f54eb7a90b2b2dfbfd7f96ddf3d422419b25c2894f44b66e720b0495ef46a5d04d7f102a1f4f19f16028";
+  sha512.run = "52801da9fe4f3e0dcedd34cb8e7a4a3dd5220f2437f62f32ddd56b99cccb302c7fc138f058f3528e28aabfb8588735b950d1afaf054fa0bd1766ab997ec03e05";
+  sha512.doc = "ed6ba30e370b3a1ef394e4bdb8301e9ac2f101faeaf0c8260443842d16ac88e665a8d6450472fff1c4ada3e3d4ebd41820626704dab37eef465fda36112ebd77";
+  sha512.source = "7d433c9d835ed64a485293d68a06953368fa9b16c60da2e20ccc59d116528d83b3a6fd2272332c8cb1c5a359bde5339c869d2a97a6fa3d236bf3637d8cfceef7";
   hasRunfiles = true;
-  version = "1.23";
+  version = "1.26";
 };
 "matlab-prettifier" = {
   revision = 34323;
@@ -21523,10 +22743,10 @@ tl: { # no indentation
   version = "0.3";
 };
 "matrix-skeleton" = {
-  revision = 51823;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "2adfc8591ebb043b9b962167c4cc393d5c5e8ab2587c88407530fa8695210800b2a2ad0944d43b12c9cbf2e1018645d3c32fbffa4dc480d287a034b2387bbb68";
-  sha512.doc = "768d78c3b5752f04f1ba4c45b0151659ffe5de91d976abb7b6a374b18d148890a7edf743215f263c6cee08506ee10725b8a1bee786977f998a546dadda1494e5";
+  sha512.run = "19c2f1b0fedee30735177dd509d312f128f44943ff6ad15574faa9ff2a9bd0c26ba7d5cfbbd11f3caf69d8c12a4ac3adac6ff83232d2ecde6858a860e8140d47";
+  sha512.doc = "645a4e02d88f9f4e6dde2bf4d8cc4d5d0cb4ad321f54089874e1dac44cbef13602356f5bcff68b982bcada21ac985abbe4a78e2d93e3053c511eba6e95569e2d";
   hasRunfiles = true;
   version = "1.0";
 };
@@ -21571,12 +22791,12 @@ tl: { # no indentation
   version = "0.4";
 };
 "mcf2graph" = {
-  revision = 53550;
+  revision = 58756;
   stripPrefix = 0;
-  sha512.run = "39324ce41fd8bf3f6c478533bb96f8c743d183754e28ab68f431fc74b1e873221a81fb782ef5f8b897dc9f929e19b41e617d042adac54d8b3c1c3b1094dbc3f0";
-  sha512.doc = "e005ebab9b4ccbd6766ae91a59fea1be987ce290c56569fe754ab0ac4fd7c68046345704d7fa17e75d4b3b5ff361ca907c34965cb6eff26549909ef55804a145";
+  sha512.run = "2aa95a3df195a72ccba635278db0ac7aea1d382db3aa7bc913734405abbba9b4e98d62991178e3706e6b940caede95a6225ea5535e52a4308e57611e86a02fd9";
+  sha512.doc = "e778964cdb0d280df0b3341b4259c40032188c8af2125720cb7d0adaacdc9dbdba03513a419338875b97449901f615db25f2397071776e551d039cdb86ed6e52";
   hasRunfiles = true;
-  version = "4.48";
+  version = "4.62";
 };
 "mcite" = {
   revision = 18173;
@@ -21596,13 +22816,13 @@ tl: { # no indentation
   version = "1.2";
 };
 "mcmthesis" = {
-  revision = 53513;
+  revision = 57333;
   stripPrefix = 0;
-  sha512.run = "5768d3d07c88c186c9b1937efb3b4fb21cdb1cf9b05cf653657f34839e812c0072b0b0a24f05fc24cb29fe084fe8d26a099481c8b753e99c08b481957635470f";
-  sha512.doc = "5bcea5b94809ebf47416a9638112979d47a64aaf7ec02e1729bd8004f7159383f2c07db03164f44fc450548a80a7905569aaddd0fbf89775f3e1f894bffb20ee";
-  sha512.source = "23016bb72ae6eb43af0903440fefcd59d0a3b3b7d23afe5a834f1497d4cfdb62b88ecf78232909a33efef3f15370efe116e193f9904b9aca9385c282773e1548";
+  sha512.run = "128de0bf3c8f5ddd7ad5b456d92ee434573bee9e7df028799991068802c0997330ad6a3c8b0d295db7d9eac9e7540d5159cf5ef037ccb1e54cf95dc31c8cceec";
+  sha512.doc = "d93bc6ec219a32ec688933f598042a04f0f7642dc875291ba2437085349e4e697107d2a4bed2c22b2abd3f00009d92fcc01930060ba38aef3444fdbbfed811d1";
+  sha512.source = "dc9cb93c8975fa3e7d50e9067dc39c29875f6086a4dbfe657ca77e38feca4af419eac429ed97df41d442ee016f7f6205cbd1aaefd2a2e734af7ca2ea4c79344d";
   hasRunfiles = true;
-  version = "6.3";
+  version = "6.3.1";
 };
 "mdframed" = {
   revision = 31075;
@@ -21639,14 +22859,22 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.05.4";
 };
+"media4svg" = {
+  revision = 57528;
+  stripPrefix = 0;
+  sha512.run = "8d8d7ec31396da81dec9b089c02fa496cb1d07106bbe96e78c762b83f27b7109d6517b85250d7d8440b1f169d1b1bc2f3d64cf56723e20da9af72f6573740158";
+  sha512.doc = "ebbee7e14288fa3ac50d77e40056cbcdf53d5228e2accbea579cbd004508b12e562a3a1d2e6e6c5b20b42267335c9ba6d81a34a04a5f2fe8e9826f93de97e298";
+  hasRunfiles = true;
+  version = "0.5";
+};
 "media9" = {
-  revision = 53573;
+  revision = 58025;
   stripPrefix = 0;
-  sha512.run = "087c7f30c59645c06c7c09d9e48294f04a078baa1fd4c955ac4a7fcdfeab6e4ffe71a02c3ad77729bdf7bde16b15c940f38faab6a4a29ff594fd0a3185330e65";
-  sha512.doc = "ff27d8f8c4468cf3d6a34b8f9e677ec0b4a9b1765dd3c6d216e2fd2cb0b0fee09ae77c2237d6a236758ea6bb9c6250ffce49c282276301789a8026ca820f56bd";
-  sha512.source = "e281484f1dabfa99517810989492b1681327dc9c30d993ad0e9db89e1b4e64921a6a0b5a46a86e48048a7fa96e38eb16eb392e5f7008aa5728669e00c47e5e9c";
+  sha512.run = "8074b787eb47d82d9ea38ec1e3261deca554902fdc4acfa140de33db4ed2b6de1b0f9af761f27cfcb1ad90df6a02e6b0e697e2ebcebe718eed6d95ed1c296ba1";
+  sha512.doc = "2a28cb6f7b10eb19767ca75e51d16406319fc22967af38b170669f46627d0978065917a028d1f0ac480680175ba0464e27c367fe2181ad36c0cd057cb1beb286";
+  sha512.source = "954dac82dc95330b16055b5096b03c784363f34833b6a30d19b785b621289408b8dbd574e8d77e59ad57216af20b65071e55e1c228ee1dbdfcb1d5fb2b9d0410";
   hasRunfiles = true;
-  version = "1.05";
+  version = "1.15";
 };
 "medstarbeamer" = {
   revision = 38828;
@@ -21664,6 +22892,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.6";
 };
+"membranecomputing" = {
+  revision = 55918;
+  stripPrefix = 0;
+  sha512.run = "78cca23fdfcbce0fb0105559966c88fe9337148035721c803174c828b94a11ca74978125f94e06904e293d680e071a97c48405d490d785a155aba98be71a5dc2";
+  sha512.doc = "b41ea7869fa0c1bcd2bcb4ccc305b6af1ba3c8dc539cf5d21bc48fc7123d70e1c6945ef06f18eb8b64d01748bffb64fda0f6596e7683104692698fab496fcff1";
+  hasRunfiles = true;
+  version = "0.1";
+};
 "memdesign" = {
   revision = 48664;
   stripPrefix = 0;
@@ -21679,13 +22915,13 @@ tl: { # no indentation
   version = "0.1";
 };
 "memoir" = {
-  revision = 52879;
+  revision = 58666;
   stripPrefix = 0;
-  sha512.run = "675bdbf5fd7843e44f747f720fe5fd85cead9b7179c5e3ca2a0daf14986eae7b57503a7ba6c2046169c3738ef2670aa0b013d8b1e9219834f4a85148107dfdbd";
-  sha512.doc = "a1ed8ca63f64e27fedb42c02bbfb920f8a31be0e4eed4f2fcc06c02db74b36b619612e6d721a73b453f82873e6da27065a91ead1444f4892105bf5d9aab87a06";
-  sha512.source = "a99104d5a94d53a038fe1dd771de900d4103dfcc46c4e8abf58beb49fc2e775ea190ac0be775eebdedf72d877d9e69d5de49e9446e08ee08dad85e3bbf6e025c";
+  sha512.run = "a09bd87ce8253d6af82c0e8816635c1c1b4986ef51f72f671cdc9a74b7088b41889039b9af174620013d8ef2017a3db660c9fde7c56c0fcf4618bb419ea6e220";
+  sha512.doc = "f17446fad66433a0e10287c5c040e6ecb45222c3061dab28d4b2a5541ba1527673e0040e267c8af0bf0e63c45d1d42ebe0e336411e11b8b963caf1147cb5829f";
+  sha512.source = "60415bbbbb1e3a42227b24f74617d0a572346ef30cacc366ae07dd887eb8606636e25f6a3ef8ada6f35fc3e5aa7c5e2f57e383d0f6578044cbaf2688daac9576";
   hasRunfiles = true;
-  version = "3.7j";
+  version = "3.7o";
 };
 "memory" = {
   revision = 30452;
@@ -21736,30 +22972,48 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.994";
 };
+"menucard" = {
+  revision = 55643;
+  stripPrefix = 0;
+  sha512.run = "2cdbe2b8acdc12e4fc0b7d8a93afacd30ea2a8bef6a3f1766d219227e77cf06d26f1fe24206f15dbfd6d0a7507780955060df1056f14cc546e9a3c781c36f307";
+  sha512.doc = "0133f249cdaed1bd565047974868953dce96c4b9ce143cb8c1170194d0ef1b1e6d2e4088004edd831ae0ee1f5e736a1a297bfce75c1bd4b600b3b14a270e746c";
+  sha512.source = "d493d78656919b30822bf5e95024b3a85c8912936d2c7835af1ecf50eeb04c81e6262da230241c9bd78f0ca5073a1a4cfca4bcb43ef528b8623f0fc21671d38f";
+  hasRunfiles = true;
+  version = "0.1";
+};
 "menukeys" = {
-  revision = 41823;
+  revision = 57172;
   stripPrefix = 0;
-  sha512.run = "690a07e343a3358179b271fb51b33f6b9dd952fead758405bdbdea9afc8d410d1bc72a15557d90d0699f26dcf7e51a6df3aec1ddb7ca752f5088de46dd5b7711";
-  sha512.doc = "4b962d91d637a69f7443fb6ac4a94fe63901a7fe7a2d880eed320314ac6114c341add9e589547649331f123d9bd3af7830c19f83389581a936c67fd0dfc4424f";
-  sha512.source = "35b57df92bf1eeb8ecec107c913ee8be0c84d27c2f98e7f2c7ee42b182905d3da1ac0e0969056d4d5db849c47d6953a8d2c6555259dc37fbcc432df4dd0e3808";
+  sha512.run = "4e046853dcf7daa04a1375e19f35219b65177479807420d8bdb2e4449324b9fd38a17535e170b46a64de7a975fd0ca39c3150014ccfcc80f544f57475483727e";
+  sha512.doc = "9ee80a77fabaabb1b29826e2d54dfcacdff7b758bcda83559d694a76cee579d4815e346c314d224001844c64cad40f04980d7dc09a45918a664f8cf76723b91d";
+  sha512.source = "e4c6817611e5dd8f33e0e9f5771ae6f7c04b76d49002e6fcc466090cf5423ad4335d2d5d144817c6a03518f338256ca383e0b0df88947087c98f60f07f3dbe6e";
   hasRunfiles = true;
-  version = "1.5";
+  version = "1.6.1";
+};
+"mercatormap" = {
+  revision = 56060;
+  stripPrefix = 0;
+  sha512.run = "552c0fcb0eb72d55c51a2e9e4d055cefa27859d8e1a4410934fbbe6c139b4ddbad7e2444974acf4035fb29cc4bc8c3f76d33ef6c6e73e91e57e4225c102afd9f";
+  sha512.doc = "446be6f13150ba3490890b528fe04c8a8080213aa6a5b66fe61e3e58ea4fc0bd03581aa96b0ec355c5ec725187b7b681507f961a9b29350cf07bc19bd2c0fdf1";
+  hasRunfiles = true;
+  version = "1.02";
 };
 "merriweather" = {
-  revision = 52380;
+  revision = 56365;
   stripPrefix = 0;
-  sha512.run = "58f56dded4abe3724411d3c46e338fd5f7fc2c8ef9788939077981503383783b005a7e691478621437b158738129a7dcedaae45b397e1605805beff04437ebbb";
-  sha512.doc = "54d8337ab007790d300ec6c9d8c0f24964693863bad3057d1f473225187b7c6b7315c3425fcffff3134cf8fd96d65d6d4311a9f4c6019011fc8c2e11f8ceec76";
+  sha512.run = "72f7dd8c8a8055a4ef953e459188bf2385e6e63943d425bbb69b128e3c0a5277362bb3ebddf38225c20e480ab2a6d8d7b413a0db1d4ad7003f855ee6430266e4";
+  sha512.doc = "d67a277eaa4e4783d9014ce5d8fe67f7c7cc17e04474150b1c5a9df13d894ef7ddecd599464a68aad95ac17393b1a3ed0bec6fcab5aee0b7c53c89c8674032fd";
   hasRunfiles = true;
 };
 "metafont" = {
-  revision = 53585;
+  revision = 57972;
   deps."kpathsea" = tl."kpathsea";
   deps."modes" = tl."modes";
-  sha512.run = "35013e0bed6fa909f25ef74210986c3010b0c8de51975895e71c532a64f1d262324cde90f6fb2c956dc8efa454b14c5872bb9b3b91061c31a007dbadbbf59eba";
-  sha512.doc = "5feac4038689d6447150f7dbe1a6309b5b80e0b960317771560b1d5a70d9a56e52cf56363a4107b5adcc9d95cbdee4044fe771b33d2adce53831e1ba26508020";
+  hasFormats = true;
+  sha512.run = "7ea3271c2a9682ae5ee29a05a95e794f4a6dc5a6244a6c243e856aaa857310127d5593b0643d4ca53eae7feb9c205574f5ea216b7c3c0b731e7f98be99bf1588";
+  sha512.doc = "95e7221ac9e3438d4cae336296e7db855df9a7e49ebaaec5dfea294565824938f3d6544459cee9ecbf17312daad4e44c92a7a9a65269feebd2b819f226f305bc";
   hasRunfiles = true;
-  version = "2.7182818";
+  version = "2.71828182";
 };
 "metafont-beginners" = {
   revision = 29803;
@@ -21793,6 +23047,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.00";
 };
+"metanorma" = {
+  revision = 55010;
+  stripPrefix = 0;
+  sha512.run = "e9ca6b583cfc64ee78abdfca2520083dc231afd7bcc0b1b8373273c23da3f3bb961bad04d752cca38113d3a4d8e1ce54b401b96ea29e00e78be97d73bc528b4f";
+  sha512.doc = "3750e580e3d7d0d69515e0de7a88a161cd8e7092af41be10fb4092cb519ecfebfef900e691d0c92ceb95df236cf040b2a314d54bfd8a6f7a09cb3c9585f15a32";
+  hasRunfiles = true;
+  version = "0.5.0";
+};
 "metaobj" = {
   revision = 15878;
   stripPrefix = 0;
@@ -21810,10 +23072,10 @@ tl: { # no indentation
   version = "0.91";
 };
 "metapost" = {
-  revision = 51290;
+  revision = 57972;
   deps."kpathsea" = tl."kpathsea";
-  sha512.run = "a22902373feb03ba91fedd50274fc110bfbc5d53a016d18a5ffea87946db7f534f0d68c50aa28292ce0a8ecec4808541fcbb4ba94ca3a1db52232c59883bac65";
-  sha512.doc = "ad46b27fdafccf2b6699dd64aca10a7f94916719d13a10bea0c3359577cbaf66324084777400c7c8ea531d911f0529bf7be1f95cb80d187d9b1a2b97a5077853";
+  sha512.run = "3a3e14f2be0ff7eefe322d4cbf961e62376ec1815a5aece95dc028ce6e75978d272ae04f972aa686ffc7eda27a9c1978f9d4201d33e143fa3cb657f57b260d47";
+  sha512.doc = "a0962cc5094703f577bff3c1b93592d93684f9b3b3045356db3461cbf52ba853608dd3af1432d42e55e2f13cf7ad98c41232f06556f42006c3498e23c87b7f82";
   hasRunfiles = true;
 };
 "metapost-colorbrewer" = {
@@ -21830,13 +23092,13 @@ tl: { # no indentation
   sha512.doc = "2a3aec80b511864878e07ff973e17ed4fe1aec692c7e6983b57dde586aa19500cdd373687b0e081dc80c8584f116f0fa3de7ed4f09ba232eee8adce5e998c954";
 };
 "metastr" = {
-  revision = 53700;
+  revision = 56246;
   stripPrefix = 0;
-  sha512.run = "c7a99993dbc27d883a8d1dc6e1c95b64db6b173b534773c28906966aef4f1036f27142fc04e927a370acccd02f16d139ee10f0cbdc649bbe49474c475293dbdb";
-  sha512.doc = "fccdb834bd22eb214eab42fe18afa3b7106099e3e589f3c685a0fb36c2226bcdd73ef5ca46ae48bc692e9d7b5868b8b8c263c3b02c796688466b7a54905b451c";
-  sha512.source = "12c5cd5c449f211aa6b047a19d88239d91ccdf73ecd7dd7d9493341fd245a5e3b5d3fd089a3b5c0d3d5f904cfaba5f4b3e821021e667da4d8046535da57a0619";
+  sha512.run = "fb3a0484636e17b763c1229eee4736a13820a852d977b11d9e8672e08a8ab2f9438bba0ed53286dfc5b1422adef1cfc1c393d1eeda5d3172848c051d6aacd211";
+  sha512.doc = "367ccc05eb31c50519e7324093759d6452081075d7e9435cb9e37e9787fd35666c1c18c822bfbff2b6dba0b312cee727ce8b7fa94ed627eb439c3c00e5b3d4e6";
+  sha512.source = "904c3cdfcade4637a16366bf511094f4a33cd2614ee3f47bcf4cae7c2ffc0d0758633a8ff556ef9494eddf76969b235ae599e1df28bf9cc7537ddddfe33db157";
   hasRunfiles = true;
-  version = "1.0";
+  version = "1.1.2";
 };
 "metatex" = {
   revision = 15878;
@@ -21889,29 +23151,31 @@ tl: { # no indentation
   version = "1.5";
 };
 "mex" = {
-  revision = 45678;
-  deps."pl" = tl."pl";
-  deps."hyphen-polish" = tl."hyphen-polish";
-  deps."pdftex" = tl."pdftex";
-  deps."tex" = tl."tex";
+  revision = 58661;
+  deps."enctex" = tl."enctex";
+  deps."hyph-utf8" = tl."hyph-utf8";
   deps."hyphen-base" = tl."hyphen-base";
+  deps."hyphen-polish" = tl."hyphen-polish";
   deps."knuth-lib" = tl."knuth-lib";
+  deps."pdftex" = tl."pdftex";
+  deps."pl" = tl."pl";
   deps."plain" = tl."plain";
+  deps."tex" = tl."tex";
   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";
+  hasFormats = true;
+  sha512.run = "a79d6a1ecb15f7962826773d7eab4b1ffd86a5c15f8076f096fecf63df1bd661449eb7d14251a57a1eb2bede030ddf93aac170fc3c59ae0a124da6cef69e55be";
+  sha512.doc = "091f2825376718d8c2190555af7ef54d0ae5202425d57b986fba861df2f8604301df5a121ccfcfcdc91032d07dcda8289fb8de5d81c487b93b0e202a2a5a658e";
+  sha512.source = "6f20a7e4f80670f7dfe5b2cfe3357a5d16b0f627b5e9e95c2d7d46598e00b989d5ae8c797589c56c594b7d3610f5f79cad42f3bb64a628be968e4e9e5d541e98";
   hasRunfiles = true;
-  version = "1.05";
+  version = "1.05a";
 };
 "mf2pt1" = {
-  revision = 33802;
-  sha512.run = "87a90bdf45883da1291d8ef5a21e6f7fa51480f9933b92ad4a87384037de991ce36b47c238f822d466238f4bca6aa41a123c76a34f9f6efc2e43a2104f85182e";
-  sha512.doc = "8e672808d60133e8a06bfd7350b1f9f5a4b1e706e565382b015f8eb9dbdb6da246b12815388f445fec87e63305381717d817c1eaae7762fd7b8043c89e1f2401";
+  revision = 57018;
+  sha512.run = "87df5858f4a383f4915d469479460d55a6975a841d31b9993c9e3c9af422965d5eb869eac82c2dda968c17160e96c794ce85760c56d3d931d09fd13425d3c508";
+  sha512.doc = "5320e1d724fde19f8c0c1b85902e57609e938243baadd00edb8294867a1df792ac2f72bcd1bf7350f4a9efab1563c9fea4361e423079b1f75ab9ecdbf2da4b90";
   hasRunfiles = true;
-  version = "2.5a";
+  version = "2.6";
 };
 "mfirstuc" = {
   revision = 45803;
@@ -21932,18 +23196,19 @@ tl: { # no indentation
   version = "2.0";
 };
 "mflogo-font" = {
-  revision = 36898;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "8be2b2456a14bc9a8a741a11b033a844bf529b511eb1173887eefab646922a37b82b5847cf94331ad34ad19bf6c75629687a7e490dc57e7ab7be473f751945b3";
-  sha512.doc = "aec625435ec638a6c36b7303d9fa81681f355460392f42d78cd820d98f7b6489b978980ada6962db5c1143057133d32fc7f314dbd60f606db4b69209de5626d2";
+  sha512.run = "4b2552a2f38c68c755f3966aedee8e054af48e0b0a61267d7a4b1a29a4bd6be15c8754d657a2f08d88dcd42a03ed768d336747d2c35107b4dd2d5bb0e1f649aa";
+  sha512.doc = "8ce49b7bf7bdbc46589da02c461f98746e13e13f19eb79af1c2ede084174204c128b27f88e164d5192415b6f464238e7f04fe95fe8e0873ce8aac84bc1e56713";
   hasRunfiles = true;
   version = "1.002";
 };
 "mflua" = {
-  revision = 53322;
-  deps."metafont" = tl."metafont";
+  revision = 54074;
   deps."luatex" = tl."luatex";
-  sha512.run = "d7e7707c9c44f0e744326afcb58e3cb5f71451530503c0b09940db3d5d29d6d0d6e0b3b258dfc6a85d8698afd85a61c196c0f9d47ed804b7b2b12c94a1e229b4";
+  deps."metafont" = tl."metafont";
+  hasFormats = true;
+  sha512.run = "ec89212e9a1518f5502f93114377f07e88af787f15c64fc61f40f22a679384f8825384c694dd365d5a74bc5d9417dcf3932c634279550603374bb43df1a7a0e6";
   hasRunfiles = true;
 };
 "mfnfss" = {
@@ -21982,9 +23247,9 @@ tl: { # no indentation
   version = "1.0a";
 };
 "mfware" = {
-  revision = 50602;
-  sha512.run = "9379a31291d572743dd3d8f82e32e7057d686ef12d321e1f4c179df1d9d64116a61c7741b2be5b08a0f396e69b6c567e40cfb66141dae7a95ae3910366214a37";
-  sha512.doc = "f22a628dfe7d1566efa13502f38ac399e17bd90fd274a0fe4fba98de25bd24b6a3526bc0124e24277979ca42af8c01898f71e9bd9e1027a899b12c74c6ac205e";
+  revision = 57972;
+  sha512.run = "77b679b6b81515451da4b6068b5e7ee793faf8bb209b3a68356aa131e0fcf27ffed912ee72a3bb8f347e7db2893115de5843351dcdcb6a3ac49a7e88eacacd56";
+  sha512.doc = "3655d6796318db16f26dfa3031a0339608cc9e6d7d18698628be0ff1cc9234c95d4914a2fd047d775b83bfb9fe3a2091e52e4a8b96dbca86ee901fce0e99fd5b";
   hasRunfiles = true;
 };
 "mgltex" = {
@@ -22027,28 +23292,28 @@ tl: { # no indentation
   version = "0.6";
 };
 "miama" = {
-  revision = 51395;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "f7a23b5d536b8fcdbab50eb86727a3e2b88c079f3e0a137220459522e4c939910f9a06ca55e944c1e9cc65301836aacd45aaaf8048d35397b3919220afe8ec95";
-  sha512.doc = "415233ee772f2c1758f1a980c5a7d320735125819c5c7ccdf2d4a21a2c02ca20dd741d64fd3b3fa5dfd8e0f0b69e8b669a319745f30b179ec345ec4ef014bca4";
-  sha512.source = "29d11b1a7e711a5c5d1deb35a7009a4532adcb640af64d23f9adf60eca35bbc3a4bafaf66c536a2c18b30d8944de810cfb1021039b0c73449d0ba799b55e3623";
+  sha512.run = "b9a5416b1de4cb487575894f3dacac8b07eda2b37b90fa0c5ca0ebc5d9d412c896fb7cd028c6af5627368c44d442670990949c9ceb9fe3a60179d3f70874135a";
+  sha512.doc = "a76db9f49bcdc225d9206ebaa3b7ca42bc7148a44d1d66b72d2033b68fe9a1137eec265316d3a24077e3e3712687e80ea948d4f1c9cd819e6a4afb8c9bbf91df";
+  sha512.source = "2b9e1a649f944ce6b36b1dc09d28112f7d5ea3c0a26a1f292576448171aa2f51449988ce85703ba7c2098f6dce62093ccf5af256bff1993268f31dc884bd3b63";
   hasRunfiles = true;
   version = "1.1";
 };
 "microtype" = {
-  revision = 52853;
+  revision = 58394;
   stripPrefix = 0;
-  sha512.run = "eba24c7a1e0f18e5d559d559745cecc9398630e4491b5c71f695e0e6893e74a87171e6cddaca8345e99ddb63558ad2a712822819c17fe1c20684e043adde4fdf";
-  sha512.doc = "b0222af67733ff7e11717388d10e0b57fbeca805c85844360ce70bfc3b5d0c18157a12fb40156edddc263b8970c9b172d3fd4a1210450efc250aa05334d2c5b7";
-  sha512.source = "638efade6088401e90aed764f47927b28d8840dd4e8fa1db2d1ca160a746e0633ae5da9f4e9947fde49ae2288fdf48dd37e7771b4e0011d10c2066a9cf4fb4ed";
+  sha512.run = "07f2e8f56fe2d18efc0b07fd1493303ac3f3f347550bf8644c2c6782f510eb57683a313bebcf63647664bf3dde6a7ecb1127a14d79d1ed3d0ff9f4d7651cdc76";
+  sha512.doc = "7804243348e470dd5fc5bf087daf8292664e378161faabef20d1be8dfbd461b7654fc55fbdba7674d18d4a4d058572968fc3ee05e036b68a67a43d366923cfc3";
+  sha512.source = "e7dbf9965a74255e64c8e1f4743fb6acb66ea19b493fc3ae095932bc66ab71e75f090c74a800b4b05c6cc6d20bbfb07376812f3782697737d7166607aa70a347";
   hasRunfiles = true;
-  version = "2.7d";
+  version = "2.8c";
 };
 "microtype-de" = {
-  revision = 24549;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "bd9b7ad26bf0d4125d1631a377328d934e6fb8b619e7040f6644a6df70bd43cfb8a93e8ce6b49afb90d824b73302d063bb23e67fa172d635e952b035510dd6f5";
-  sha512.doc = "1024c46f6b7dfdf4aae45090533087d1cb495d737856fdbd9691e7cbf489c19ce229d35ad55237e30998f154c9ef524c78068d338c236634df8922d50ae4fc17";
+  sha512.run = "cde294b4dd73d5948ef16b314e70745eb98bed30b4343c04885686533e2457a4aee07616e84eba6b0a552fb342331114de835d777d882308bdc1dba75927b17f";
+  sha512.doc = "fa524a0225a57fc60bbad95cdd7855f4ba73691a6787c906ef5091183425a650f583340d65ce8b11792046c767b0b31e5131c62dcc281898457234134aec291b";
   version = "2.4";
 };
 "midnight" = {
@@ -22084,12 +23349,20 @@ tl: { # no indentation
   version = "1.0";
 };
 "milsymb" = {
-  revision = 51566;
+  revision = 54361;
   stripPrefix = 0;
-  sha512.run = "45e601def6cd11cd58f0d30e39f243a48be800861b0c1c787c393f39d5620e53ff43759e31e87e20aee80dabfb96da5bd5f2349b83fe2c4f0b82455e461986ee";
-  sha512.doc = "12550ee788252597671d8f19f5fdf412999ec80d3319dfc92f48be5800dc9882b57a98ef898c79d5e22f333528a0db248edb7798ec28a9e41c9d2542dbe1cc62";
+  sha512.run = "51dbdca0783519a3f7cd5ce78cd3c8e0b36c79d24781015a71e1c26a3d9a98e549f50d6d8c6044be0fd32642a3cf91e4a80009dc237b6eb5dcb1c4ac055d0732";
+  sha512.doc = "cad4940b3bd462401ddd31b7125924e4b25b02d46dc360e7e4f3f027ec9bd905ea7c1a1cbb26f7a40a247aaa45e0b685d8fb4aa4caf01fed6d0a0c9c1c032471";
+  hasRunfiles = true;
+  version = "1.02";
+};
+"mindflow" = {
+  revision = 58475;
+  stripPrefix = 0;
+  sha512.run = "05338ac445658a80d5e204b742f3eca75fc460db578227c2418bbd5382fb23afc1fa8ba8658578659a2a617f8c843a4c116cd6159ab05bf6c7fc7283492e9c95";
+  sha512.doc = "d887f56208e8ad5c79223a607c48f5deafe8578cde6aaee46761424f251f066d0b9ad59a8a0f073965d418c0a43d08ad5a5a5f10efd9007e9d16d1080ec2ae4b";
+  sha512.source = "68b7ac026334ec4fd095476bae34fa6c8f91ccd3c1c7b3faa80026d6baa78559ee50cad511e059897d753311ff469d8592ea04bed9674c3b15382ad066d10ff7";
   hasRunfiles = true;
-  version = "1.01";
 };
 "minibox" = {
   revision = 30914;
@@ -22118,6 +23391,13 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.96";
 };
+"minimalist" = {
+  revision = 58395;
+  stripPrefix = 0;
+  sha512.run = "4ce14a43f724cb6dea4106e6a25b345cca94208724828383add74386943a1769bb5fb756424290cf2b49baeb4cb93658982d38c43ecbe6fc338bdf534905f4c5";
+  sha512.doc = "d10d1a10e2bf8bcc6cde857af2e94a0dfe7edc4c1c1013646273f0add9cae841b92a47313dfe6ebbaabf70132ddd9ee67c3588a606d084357ca937031289df7f";
+  hasRunfiles = true;
+};
 "minipage-marginpar" = {
   revision = 15878;
   stripPrefix = 0;
@@ -22176,21 +23456,21 @@ tl: { # no indentation
   version = "1.8f";
 };
 "mismath" = {
-  revision = 53245;
+  revision = 56949;
   stripPrefix = 0;
-  sha512.run = "0bf6eea83401374473c001b3ec6a39c70d14551983a89fafdab854b12000d7806b76bbf10fd3fc393d5e7bee0880bb9fff9087da274b643a1123c128d708e22c";
-  sha512.doc = "359a86cc49554c0efbb932b0cc8e7698582b01fdd7935d88d50a754d91bbc7bd8d69ab3cbb18a81ce89c3614fa5a22ff27bcdacecaee1dce3adf35be9dd119d3";
-  sha512.source = "bdf6b92a81afceff6705e7ce4aac5b50de44dff45b84043638c807ebec3435d732e1dfcbb91118e1963eb7e585d6f22188be75abfa5b34c14af3c5e7f0e42046";
+  sha512.run = "68bfec9f2b2d88d248416c43368831f76a8b5700252cd2adb4b7dbc0ca05d66243d1e8c8f587bc39da32f3f0db00be60a7f07047af2484ec9227055325a62922";
+  sha512.doc = "70d308ce935a64573b9b9e96b0cb158518a61748c05ab79d9abb0445043ee3343b18d5babe5c3436f42d1e277cb374fbf40c470e85ab99dcf8da841bf0918bd8";
+  sha512.source = "938131fb63838e1ab7e2cae20d037c3cc24d22e152cad295c227e7fe12a3b4cfb2ccdaa0a1b3753c63071d253ebbb8f26c2ed7fa1056d4de517317c3fb3bee34";
   hasRunfiles = true;
-  version = "1.7";
+  version = "1.8";
 };
 "missaali" = {
-  revision = 42810;
+  revision = 58771;
   stripPrefix = 0;
-  sha512.run = "d16285296232f45ba3eef2e427ecac59b248f9788abd5b2e9b9007f2013bcc52ceb482063290e3ebe6ea625adefdd05b5948546e0a4c17377a6e4de30ecca041";
-  sha512.doc = "c786638ba6c5d03395e8efdcc1295ec7b7470daa058b7bdaff4452e4524cc2467606bd7eea5591826c8aa50ed22baecd18319dfdb28bcaed6d2afce176e984a1";
+  sha512.run = "a077053382e5ea428b274239732f8bac2a4b943e19d40110df76d19499768e12f47c37f7b9d132cbe2023821fe82d4667b414b9114cdfb23df9534bdab2b5214";
+  sha512.doc = "2ba1713de8741c0c01eac1e35ebfbf544baeb2e92ffc587960c969e0ca01a141fcf983e99796e239cfe639ab4ab686875393f12649f0528024c0779a8f549893";
   hasRunfiles = true;
-  version = "1.004";
+  version = "2.0";
 };
 "mkgrkindex" = {
   revision = 26313;
@@ -22223,20 +23503,20 @@ tl: { # no indentation
   version = "1.02";
 };
 "mla-paper" = {
-  revision = 20885;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "01e6bcd07d5dc7ead0ddb4f5d8ad537738bf0b863d2b43f04f0136a33627941b377e53d29808cd284dee3601bc7839c3f0697178ca586578207f9efb60a6f70c";
-  sha512.doc = "1367bb1bc5dd62faa89294141b74c7d2c9f5fd0acbfc37285421f9ff514ab67201de9c6a9070c5aeec396f0923afc8e10c5ec307fe89ad016ac167f33247154e";
+  sha512.run = "e82a0f04441b08a8f5b2dc0bac9480ae9ae8c169c7e5a1d1795315d3e103cbf3a07f726eb41d7dd7b1ffd1443fe00bc686b37c62edb59481a110bfd34944daeb";
+  sha512.doc = "6bf3856fced879c5dce5cf1442ed0302453f7a02ec30b4d1a2cd63228baeef58d11999d56f505c1aab6a78eff1e4671665da381b7e319a467e42f70c56cfc89e";
   hasRunfiles = true;
 };
 "mlacls" = {
-  revision = 51865;
+  revision = 56878;
   stripPrefix = 0;
-  sha512.run = "14397d8a4afa0cb4aad0749dd4d4e32c6384d8cc40d302504783ddf86756c65abef878fc7bfcffc150fd5b73c701c6d79a8f5a5a085a7bac00645bfa1b997c30";
-  sha512.doc = "fb0c75e2f3a8f9f543af670309ec035e3f539cd642a8d829b88a733c5fc7656b86947c6b56d36dd8b17942f72b4023fd20b21a0415aeacde878b95e6675132dd";
-  sha512.source = "4f087636bef5761a97ed2a4c48f207b92e290683d92975a014670194c0e81d598aa2282e266dae2a329d7a47ec777b06754864ba32bda2eddad77635445d922b";
+  sha512.run = "08ca934862fed7674f4b8a77ffbc1e42a043777e6baf8b1cf52ce6cde912899bf92d74df52bb35dc6cde64711b8d375266695d1eb4cb301204d90ad27fbc2a86";
+  sha512.doc = "687c4beca93574ee7687d7586eda818d94538782acb9b7cca98ddfae6921af5c53ade7b87a72006d8271bb517d02c7a5575043ad8c94e4894d53c58e2c6f6d0f";
+  sha512.source = "46d2f1929f334932409e3a9e04a698424ebba99337c4ce48d4dd2c8d63f828ad9c7b81dc4e550e69ef5ba2d17d359a0e1e4360db7175ecca63456aa1c1213c56";
   hasRunfiles = true;
-  version = "0.6";
+  version = "0.9";
 };
 "mleftright" = {
   revision = 53021;
@@ -22256,24 +23536,50 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.6a";
 };
+"mlmodern" = {
+  revision = 57458;
+  stripPrefix = 0;
+  sha512.run = "6fe8c67f768cde92e38741885c336786f65f9793fce0027b0476a8e45366e33c4a559c3bb6367014646e89f0ac39bd92219bc59921c3b3e0fa3a9c4314f2a632";
+  sha512.doc = "bd5ac414d3b3ff53b059543d25cf0296d59365dc219748d849f89a085225d864361923b4220a0a989585d99e9dc221f9a4209b622be5f279e0f02e5e1cc2d966";
+  hasRunfiles = true;
+  version = "1.2";
+};
 "mltex" = {
-  revision = 53786;
-  deps."latex" = tl."latex";
-  deps."cm" = tl."cm";
-  deps."hyphen-base" = tl."hyphen-base";
+  revision = 57186;
+  deps."atbegshi" = tl."atbegshi";
+  deps."atveryend" = tl."atveryend";
   deps."babel" = tl."babel";
+  deps."cm" = tl."cm";
   deps."dehyph" = tl."dehyph";
+  deps."everyshi" = tl."everyshi";
+  deps."firstaid" = tl."firstaid";
+  deps."hyph-utf8" = tl."hyph-utf8";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."knuth-lib" = tl."knuth-lib";
+  deps."l3backend" = tl."l3backend";
   deps."l3kernel" = tl."l3kernel";
-  deps."latexconfig" = tl."latexconfig";
+  deps."l3packages" = tl."l3packages";
+  deps."latex" = tl."latex";
   deps."latex-fonts" = tl."latex-fonts";
-  deps."unicode-data" = tl."unicode-data";
-  deps."knuth-lib" = tl."knuth-lib";
+  deps."latexconfig" = tl."latexconfig";
   deps."plain" = tl."plain";
-  sha512.run = "b03ff5cd8548afa5d6caf9d8d3b03e662c515752f957c6876653169de58bf0af01dc40f57aa9b6a43541d485b8b9e633276b791466a60de9429db875fa81f8d7";
-  sha512.doc = "32a8a3a1e4f482db22586466a89a964a5394452b375b3b0babc02c720f7ffd02786297a2246858ba23c9d8b8d276a3396ac15aef721658961b04faaa3a8911f7";
+  deps."tex-ini-files" = tl."tex-ini-files";
+  deps."unicode-data" = tl."unicode-data";
+  hasFormats = true;
+  sha512.run = "0b3fe440055cc4c943fe8cdee93997718a3625782c5b2962cb514011f2038ad14518f7cffc55dee41f0a57f7401b8f2f493631a2b9cbeb806ae75ae80269f3b5";
+  sha512.doc = "a3b962871878f3f34c2d419fa9ae1c27518f3901212796d32649b5524f49fa103a71f46403726b9568ac358ab98afe7b23356a0f2d2d8592c0b84cfc186d5f53";
   hasRunfiles = true;
   version = "2.2";
 };
+"mluexercise" = {
+  revision = 56927;
+  stripPrefix = 0;
+  sha512.run = "9af80a432fdcafefdabe9697cdfc16dcdee9f6a15d85d3e15774860e94bd579ad523c370b289e823f82372dfaead086ae0ed175fcdc51cafa53bd98076a8664c";
+  sha512.doc = "bafd00d7a14ddafeccdfb2bb4df613dc0ad6428445722b29ba6875d0dbc3feea9ab5ff86d8e7799f4a907840c584c2e37cb54e89b5d978e67b8f7e4b7fc7ef51";
+  sha512.source = "aebb67b8257f675b1237a362ae5ddb523d983717056915db5e482da90fd5674d7620aadc9b81b2667c9e78ad590b2cf670463eada81154f379e5693f411bc3a6";
+  hasRunfiles = true;
+  version = "2.0";
+};
 "mmap" = {
   revision = 15878;
   stripPrefix = 0;
@@ -22292,12 +23598,12 @@ tl: { # no indentation
   version = "0.8";
 };
 "mnras" = {
-  revision = 37579;
+  revision = 55729;
   stripPrefix = 0;
-  sha512.run = "8c8c49846a2bac72383b0481b0da0cbfeb67bcb0787815d3509e4b55bf5afda5f3aa74f44d03267891b42b609b1a10b1e1577a02e9a3e4c8d9cd5ec57585e9bf";
-  sha512.doc = "e90ce259881ebc34dce52eeef5b6eeefe1659a3e8b4ff5a749604d5f3061d38e1cb749d8dadce757a173c1174fdbc9bb3b272ff1bc344a55ec2dbe946e90cdb2";
+  sha512.run = "dc964c48272c36f81e1370ac3df6fb3b4e873294f69a565ba240a7c61a5f78fa6b493beae8e78c1ed469c4f34c325af3e53739f1aab5a68e9af356fe6945fdbc";
+  sha512.doc = "5a6f55ad7e0cdf270856a5efdb6891e2da00d813b2a4279e323dca188d3b3ee43f89ed3fc44452583d45ad83b7c63cf2470371c7975aa068d2595740d31163cb";
   hasRunfiles = true;
-  version = "3.0";
+  version = "3.1";
 };
 "mnsymbol" = {
   revision = 18651;
@@ -22317,7 +23623,7 @@ tl: { # no indentation
   version = "1.0.1";
 };
 "moderncv" = {
-  revision = 52669;
+  revision = 57496;
   stripPrefix = 0;
   deps."etoolbox" = tl."etoolbox";
   deps."fancyhdr" = tl."fancyhdr";
@@ -22329,10 +23635,10 @@ tl: { # no indentation
   deps."tools" = tl."tools";
   deps."url" = tl."url";
   deps."xcolor" = tl."xcolor";
-  sha512.run = "d45dadcbe35356b64c6e81173e02d08f03f148333aab7f40f7ade71c6818a9be0fd649472ee9b7605bd0437054e304ba9fcd991c9092f7550b8cc925b66b6522";
-  sha512.doc = "ff121a7936943ca52f5bf9007b34004e8a8af6a0161a96e42eec9b08947df72df289e7dd324eae539ff7eba93f512ae441118d53dce1bd7763c93adfbcc32ab4";
+  sha512.run = "5afe854478a689c648695480bcece97a3c940e1be7cd0e32f3e1ddb1240e823ffae82f53a5b6a127c62f30a1e339f5dcaf9f7ac8b5da361fd3de80feca719614";
+  sha512.doc = "032a9ccb6e91fea7db129146292f3e59866019729f056e4f9e6bcf8db42a0d81a181b214240689fc6643d49a63580e2e8c61e0b9a47562f04af0d24f14bd37b3";
   hasRunfiles = true;
-  version = "2.0.0";
+  version = "2.1.0";
 };
 "modernposter" = {
   revision = 47269;
@@ -22343,29 +23649,29 @@ tl: { # no indentation
   version = "1.03.1";
 };
 "moderntimeline" = {
-  revision = 50228;
+  revision = 55518;
   stripPrefix = 0;
-  sha512.run = "a38ab33c0ad2384699954688bed05d9ece3ba54107c962dd5e76fcb586699887ad5553dd12f801553ffab5e7a459cda9a9178c0d37d6eae3796766fed428058f";
-  sha512.doc = "dd5f43c4287f5a5a23366c3cb982afdbf3385da2c19967e3a77ab42476536d2ba44887fe5fa657f18285448b0d7d3ef99b6f7003328924967529478e174625d7";
-  sha512.source = "4a794bd422b800ad7cfc41c47838798b6e1f3eeb9f7de10c4c6f99d4f2127b8f22e0d31875bd82595e6a99d5995648a70bb006c41dbc70c50379e8d37570222f";
+  sha512.run = "3e32e360bd8249cded439fc563c8fd38e53314fb468251368aa5311463665771748b605c247c63e8e5aea2654dd05c4b12aafa073190b883d21469bb14333de5";
+  sha512.doc = "018ad6b095dca602021c45e04a526597ca61f5bb6ec7adb52d86c221649c4b3be94761e826d09ed9772c0628bd9d719f6a4db6ea1411e6d34f94f8c049130855";
+  sha512.source = "e86a6e1175c1d86e5c0b035ff925107ad0dc80e00f1815161348608e90a7ed5bc9828f896c0d072c386cf695a5f9d1b894eef2c864d403b74a75bc89a9910510";
   hasRunfiles = true;
-  version = "0.10";
+  version = "0.11";
 };
 "modes" = {
-  revision = 53604;
+  revision = 56303;
   stripPrefix = 0;
-  sha512.run = "85e7cfb20a26d64f007def1edf1353b225dbb1bfcd4398d74727a02b345c35aadb486e45c526202c28d6617ad079de57811fcc6dca1210eacb76df7a7abe7add";
-  sha512.doc = "4e6e9cf770c72177b729812469cd25f11967cfc90eaf7557d182409f8f1ca1f438bdaaa20a8935fcbdaf69ad2b7c60e55c00c76a3f506fbfaffb5b74336e0230";
+  sha512.run = "09318fcdb58e5175882fd7a2750ae71322d0be227a2131e05c8b9d20879260c9ac906a735582c1fc8229f3ad4e7df7b71d6a2a6ba9b82c653463947d59f9116f";
+  sha512.doc = "dd7d78b8b355d7d056d288c0026d83115878abf91ceb183b48a3505620f0be4c8ef04ed0259a8f5a079c6191f33fc1331e9a3b1660b9312d165914b9176524e8";
   hasRunfiles = true;
-  version = "4.1";
+  version = "4.2";
 };
 "modiagram" = {
-  revision = 52589;
+  revision = 56886;
   stripPrefix = 0;
-  sha512.run = "aee09f61375cde8fd2ad80099fc42234a4ba787b212cf8f5e5e28a09480bcda5c307bc3e2b0e027b18666808debaa2f5215d3e98f9cd816b9f31192b30f5993b";
-  sha512.doc = "d07402a534917ec27c6415503c73ea5b680515a223d41d2f16ceddbf6805c61c29404d4628cec21cb15ec8e8cf3ac62c5756744fe5eb0545e9381d001d05a3e8";
+  sha512.run = "3da30c6f2759d1beebc0f33c61846343b505da9527f2a34ad7e622958802cfd08e1da9ca297003330451aa913b45c872b4eed4cad3f5bf5f8e597a2b0800a09f";
+  sha512.doc = "cc0513fdca073761b8f6f9e34c826af2de587c9c6ef47bbe54b45e60427c5536a2c4743e2c187a9b089eeefe82359962d1081f5dd66fad9072e4c7adcb580763";
   hasRunfiles = true;
-  version = "0.3";
+  version = "0.3a";
 };
 "modref" = {
   revision = 15878;
@@ -22429,21 +23735,21 @@ tl: { # no indentation
   version = "IVu.04.092";
 };
 "montserrat" = {
-  revision = 52694;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "c6794b165dbd522fdd5aa2a57518cd8e1377c5a54bf4031c85804104934b4dcf0bf5f806bcc57b0683fed9b3d51ae45ffea6c6f27552f0c4072d9588e077df6c";
-  sha512.doc = "9ffbd4159c42506df109d62f380f3324929ee0aac5a3af5f42e7ef57c9dc51b0f543e52a2f6651cee7300117a8cced44d529f6e93f8865b0562e8bef01615cf7";
+  sha512.run = "58c8b4a1f6eceb10c7fef8e6dd951985ae6108cb3f93eedf20949923237cb8af6a834674dcea48b1c68b51284ef37fe2d4120d52fee82753fd873f60b585e685";
+  sha512.doc = "694ee7f51b0fe1622981bfa636263bbe18f89ec481071af587a683648f4ee900d9100864e51669d65b9952e6acf64794b5610989d2bd86f6e4701e1e41193242";
   hasRunfiles = true;
   version = "1.03";
 };
 "moodle" = {
-  revision = 39367;
+  revision = 57683;
   stripPrefix = 0;
-  sha512.run = "839db4d5082703e0b6d5516b6ec3c18b4fa4b449e732904569e839028bc3f7e27def83c56eb9929f65b0527cec9b180fd743aa3d0df2194aa6372922582173ce";
-  sha512.doc = "9448341e5c33054a39f6990b4f7942f45fbbd884cd5691fa8c0b82fa1b3f9cfc887a02edadcb0df0a7a62c53c9f4b20496db5e6e9ecca4bd6ce8bddf2749a71d";
-  sha512.source = "332251d2357ce64268a1bddf7e77f28f7cf4be10846da84c1512bb39eb804e671f38aea4843af0f1357307869794029c259a52f6ab62d96736fb691436d841c4";
+  sha512.run = "b2f992d02b16711eb5a79247d0f0b7b590ab21f419f181dcfec33006e08181f035c502f3a4d473fd211ed391f5d6225f2a91946649911db7af851f97d1ba2da3";
+  sha512.doc = "9c609a686d13a8577f672988fa037ec48cc46b4006f7d42070c1411978cce615ace296a10d9a1140671c9972362a4ddcda5ceb80ab35e8b9c0628d90032b53a7";
+  sha512.source = "3dde72eb7b513695ad3d59dc51bb8f5ba93ed3c2d6d8e90bcbd65e6ec3f86c3ef392eda8537f7a096badf0fa97080b5fb2d61831b38339946b0f4b734ac419b5";
   hasRunfiles = true;
-  version = "0.5";
+  version = "0.9";
 };
 "moreenum" = {
   revision = 24479;
@@ -22554,10 +23860,10 @@ tl: { # no indentation
   version = "0.20";
 };
 "mpfonts" = {
-  revision = 53619;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "20406681edb69ad3a366483ef17d2ca735ba61479458475b3a0f010db0212d1c453a8d152aad97a172f66ff68cbdb7b5b070a9eb630a60eb141ee21b60ef40ab";
-  sha512.doc = "98d9a49b711d6889da96765cd24b1ba308d2030133fb8de13e5c69724d1c540a1d9f479a1c11b391f023bcc00a617b32e66b2b05e00701e9d9cbbd5e0ca87b4e";
+  sha512.run = "7d602bca0f33f83033cbe15cb2376d0ae023a4d02218f10b64965580842f269a7065e6c2154bf78c7a72a46abd0e41214dea4d2f012f1945a17fb5b8cf0fa832";
+  sha512.doc = "4aa1296012f4ed3483f444320d7d28d942823da0cd58c1350dc4a90da1fa5e51cd5bac86f257290c720f9808b74c2cc87c49f18882073ac44ef7f577248f57be";
   hasRunfiles = true;
 };
 "mpgraphics" = {
@@ -22586,10 +23892,11 @@ tl: { # no indentation
   version = "1.5";
 };
 "mptopdf" = {
-  revision = 53687;
+  revision = 57347;
   deps."plain" = tl."plain";
-  sha512.run = "1c005dda3caf90966782bce15e6f82063c8b87cff0b5458519f78a7e064fc0ec4eadc4aa3644d61770cba92a1157ade059f8baa347868c12741090ab370f70f3";
-  sha512.doc = "2ecc946c3a7027e502a468c8fe8366c794b4c1c8c3bb5c1f58a2ef127317f89ba69804de10070844c7fd43ab49b8ee66b0326d882a5aba615a4fca6f7f4fd1f1";
+  hasFormats = true;
+  sha512.run = "69181f1facef413b4e2317180f8dba551fe40bb06e6af8d9378319d8cd3fdec985241e632f19888f32b70f16a40d11c66581f7e3c409bc38b7cfad3733cba2fd";
+  sha512.doc = "f0cbd95500324a6b5ca835d62065c83028241e0ce5fa35a313458dc30e6726a21a6d1c267669627061d23f2dd7d7397f471581021e03c817c281cb6efa1d2769";
   hasRunfiles = true;
 };
 "mptrees" = {
@@ -22601,11 +23908,11 @@ tl: { # no indentation
   version = "17.06";
 };
 "ms" = {
-  revision = 51784;
+  revision = 57473;
   stripPrefix = 0;
-  sha512.run = "883832298e0135980808249f5af0b28e3dad7941f401e3ac031cd558b9c6b895bde1f5dc459de9f4c5f6ae41d6a6aac08137be09f9a91b26761399868ac7457a";
-  sha512.doc = "adc189823e89d6cd90369497dc4468b72a36af808eb2c8d6738b3a00082335f139ecc54ad6b601a027b6961890b5bb6975e46d1de26a1e0ac7dfc9e8766fa6f1";
-  sha512.source = "41bdc589f6553ca981a7f0e7340f4e1163396a12acb1b7210fb5e9efc83924961d0e04f8ae1aa10b0db3266f63d4cdfa4f52d59f7624c321dfe0bda53ec6776e";
+  sha512.run = "73d46ed7ba85773f4ba7c261ff0ea8f2e751e53659fc19686bddd9523b160dba5e367c8fcb30a20678e4a3df26c0812a6b771736eef8616e112cbac3a25e7b48";
+  sha512.doc = "d112ff182da85ee8d84d8e7cfc50e5c13ad2e555ffe4dd2867a3439d69193ec7bc24fa87d2527936a57dbdc8e98df8d2862a740f91d497a8eba7108973a637aa";
+  sha512.source = "b03f9ac6bc7ab56bacac4053d278d0c826925f4f81df80e73ee2a48209e1e51c48b0706dbd0d69ec9a068e4a59a12df104b8e7dfd60cd0cd5c6210f43d528ce7";
   hasRunfiles = true;
 };
 "msc" = {
@@ -22626,10 +23933,10 @@ tl: { # no indentation
   version = "0.51";
 };
 "mslapa" = {
-  revision = 17514;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "76910e823a3d1114a2f7497c49d7a9edeabdfc3642309604654f244b060c4ef456aa170f677dfaa719d36416eaa41b68ab28c5cbf869f611a33155250bb44423";
-  sha512.doc = "af01997554d68c0c779950e3be4c92fe7ab0616eb2c5ab55c5131f17ef22eb6e7066c4190607b77c9cc44aa50c15a472ea27733add54fe82b7801c7724f1663c";
+  sha512.run = "28a13eda4b10f25e4887feb44f64e23cfa683d28e57b66a64d2a15c627e5f7aaef36e9fbbbf3c2320891a0bb9a5270fb59ca9044f1822402d82bc494f41dc3a9";
+  sha512.doc = "b53311156cb6872ec996130474f18d8735f9fbba8d53258638f78d498b3cb294eb490b6eb1460546dcec39258e0785401dad5ecb66c82e2cfd7814bfa852908b";
   hasRunfiles = true;
 };
 "msu-thesis" = {
@@ -22666,6 +23973,15 @@ tl: { # no indentation
   sha512.source = "bbbd79aef8db604e5349cfcac7fceed96d8b2570cbdb455b36f96d99e52660562b6d84bdb5a9e1a4c9ff32c9199867f491e91f96758635ca800ad5b69039b120";
   hasRunfiles = true;
 };
+"muling" = {
+  revision = 56991;
+  stripPrefix = 0;
+  sha512.run = "d5b89d93bb67e46618a30e5bdbc988a6849a7cbfee84f4486cf4557e750ae53f64aad188f74b1a96b1dfbaddfaea3a6a0380bd955ce79ebeb095fe1a54194e5a";
+  sha512.doc = "ce1e2ac1e50e164bba6ff3911fe9ecb8f85ff2930f21f21e6721e153ffdc9c81798857cfe73c62f783f8909a644efd9f5a048565e054b0543973c4625d96976f";
+  sha512.source = "877f34b070dd1549f649ce99a322f7221c9dcdaae5aa80ab36c6e340285ac9ebea09e9496ec87e6d881608f30d9d7b24faff6f8671f57a2b18ff96a127a30311";
+  hasRunfiles = true;
+  version = "0.2";
+};
 "multenum" = {
   revision = 21775;
   stripPrefix = 0;
@@ -22717,13 +24033,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "multicolrule" = {
-  revision = 52283;
+  revision = 56366;
   stripPrefix = 0;
-  sha512.run = "591a7aeb5a918fcfb847cbd7f91cf389b6131472e62dea411b04e9ecd0c4eb1e203a31bacc69721f444c6eabdd44462e84cd263629ed4d6566840da2921c843d";
-  sha512.doc = "ade3f0e13f39a4173d6402ee2521232ff42ebfd8ca55d491f27c1dd35caeb06d92d7f53c1f897d71752a9013f1383eb9cd6b6f250c9ca535a31c21f751db4abc";
-  sha512.source = "e1b2fc58fbb95f6d12b20f02a503a62cf49f4fe1c888dd7185cb7bbf1f5a7644af1f14a380a44e25ef33d87387e152eceba602897b60f8b0d79112cfea4b2492";
+  sha512.run = "46c8745965a2863f3ded3aff6a910e1971d9aa3127a33c36431d68d1150075f52444495c0fd16fa1b737d2f1dfe7058879f7a50003f763cd0d28781f62bfea0e";
+  sha512.doc = "42d7798d38abce4454a726dd2998b94e4171bf963108a8ed18b05b5acae739e19e8e1189e74cfaad02f4ca92b32e7fd0afe9496fbd35983574da8607441a2295";
+  sha512.source = "53c008ef7b7b6505a592ac3684ae51224e9a1d7def82822a376b7b4b6e6f1ccfe3cb2e2dc677efce6ac3807b5ac7424c34003df2006b8682c89ea78a060178b0";
   hasRunfiles = true;
-  version = "1.3";
+  version = "1.3a";
 };
 "multidef" = {
   revision = 40637;
@@ -22744,11 +24060,11 @@ tl: { # no indentation
   version = "1.42";
 };
 "multienv" = {
-  revision = 26544;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "b387532d90db9f46cb18518b27eb8853dd52366434c69693fd08d36942564c43a45605694a55783fe244690f4cb64b94f3082235e465336cb7536543b00b6f20";
-  sha512.doc = "1ad0cbfb0c6029b77f2dfd71100ac43cf3c7512df88837c6da5c26fa9a520f4dacd970e331083a56ddf3d9cd19fd9934e863e4bea9e62c7a0b1cdd1ac6eb2a15";
-  sha512.source = "5d22dae7cf44eef6e63cbda2e9421903f56a939c0393d3b91e9d009b29cf0b748215b455dd9143cd7e13b2ad81c08d7dbe447268d7d01ba495bbb307cfc8999d";
+  sha512.run = "61ebdecdbe9d1fc963a9625ab1d2811c967094f3aa983a08ff20d5ae1a7e6d87290981c4063ded7edb87ff248fe9f5499880ad5e602949f18ab3419c074e775d";
+  sha512.doc = "ee1cda148f6f1f7998b86b6f36256c69ac399d32f6bf5443aba242ce93de8c0a64d43eeda32287dca7d7e83498fc26253be724b1231dd399b903908f4acf7430";
+  sha512.source = "bbd36e000e4533f3fb423d6d758fc7fb4e210868a695bf13e7ef8cc266c2875719c85c57aec0fa27bb4e174291321452a88bfda18004136e5bf4a99154bf26f8";
   hasRunfiles = true;
   version = "1.0";
 };
@@ -22780,13 +24096,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "multirow" = {
-  revision = 51278;
+  revision = 58396;
   stripPrefix = 0;
-  sha512.run = "61a072b45e6caac673ae4e5df536f12ba0bcefb3457099a0a03c73f5177bf94b1f0da056f622d3963e07dd82fc1f18eaf892f2205ad34e221963a07a9458cccb";
-  sha512.doc = "ae7b86866d6271f99bbda77e1df62276383b3759f59c30c86eaee3a5e14e0633dee081bcbb39fc9e52a5f4afe43ab0357aaeb11d81560a7c1c671d8773de742f";
-  sha512.source = "fa10c678e843835d7d6ca2081ecbaf3a5347eee25da109e0db85be9422c2d0e8d2844e7e66784761f0877ed52f860bf1242aa05ab3015e6698891f3629fdc377";
+  sha512.run = "7591c7994fcac6fe351189c1364b448ac8b82e88bdaa50ec87c72123961a1bddfc02b397d5955eb96b9d47b4bcc9b6c1352eab0016b1dec24e034a95c53323fd";
+  sha512.doc = "c02af3deb73b076662da0f45769dc57a7e11546e225f0df76f1fb163251e070b09203c4434382b7d4c3ad110460d0a1b6b0b384079b4a7cb54d105173fc7c575";
+  sha512.source = "0b6880a377534734eec1945b91a8479bbbaccb61c3da5b4986e53ed0d9e0837f88ddc6c1718a36482070a12dfb490c0295123684707ad531213b219f314d2d1d";
   hasRunfiles = true;
-  version = "2.5";
+  version = "2.8";
 };
 "munich" = {
   revision = 15878;
@@ -22795,6 +24111,14 @@ tl: { # no indentation
   sha512.doc = "ed2dc99df090a012f1b1b922659eebe4c2d8523127e17341b9c4b66413acfc89f8b64ed639c8fd40ace0f4fddc8662f42630411c67026311a26fed436a363b78";
   hasRunfiles = true;
 };
+"musical" = {
+  revision = 54758;
+  stripPrefix = 0;
+  sha512.run = "4bb8bd0781cd49950f2a80ed9527de1b0e49ef6eefea5787d1d13efa3893d57b48a9b69ddf0f62bd2695a61d9b785cfa1dfad2217f8cd97929e1dfefac9333c6";
+  sha512.doc = "c06f45815ff65fa7c492575731bf1aec0e774cf5a81907d1e381ac8ab366c167ada688b8c8fc82293c96980c5361a688eda666b130c1ac3f39976d49bf78f60c";
+  hasRunfiles = true;
+  version = "3.1";
+};
 "musicography" = {
   revision = 53596;
   stripPrefix = 0;
@@ -22819,12 +24143,12 @@ tl: { # no indentation
   version = "1.2.2";
 };
 "musixtex" = {
-  revision = 48353;
-  sha512.run = "2793fe7e110e97df26dc0a681b24cd738eadbc6bf322b438141b66718b561af3d1c7cb029e465827151be5242d620a3182aa304467f3e8e7c58f457310881c0f";
-  sha512.doc = "29e7bbfda630825726d716ec45e4112b7d35e180a5d9294a5d1f7a1c8a8c544a8f9020021d17a1db74068ec23ed0c744593f74426fe465182d139d3e9e70e829";
-  sha512.source = "62a04ce4d437ada5b2a267b648844cc6702194979530f985bd7fb96b2242d9e92d9fd6367917352aa7f9a699f520569acd2fbfc4d6d56f2f33e9f6173f311909";
+  revision = 57353;
+  sha512.run = "890faab60e994520b74081e0709217549d4d91bf0d9cd28bf8b08d33b474edd584b1af8810bd9e8f1899e9de9ab88f4091594ce3ad25671312856b1870711a51";
+  sha512.doc = "65380d56ef9403c633f3459192f21191912065d2a6b34efcba1c002dcf836353be7a6c532f66a11478002f34e2f53c35ae9e7d705ff716fb9c4f929dbbd82490";
+  sha512.source = "bc2d254ec56217edc6f5fb75229f0484ed8ae494da9dace2e86f494670e49bbc60b962d59397c0dc1ef40e7633cc97c9f75b4ab26ee7ff528fb8169b4e625660";
   hasRunfiles = true;
-  version = "1.29";
+  version = "1.31";
 };
 "musixtex-fonts" = {
   revision = 37762;
@@ -22875,11 +24199,11 @@ tl: { # no indentation
   version = "0.75";
 };
 "mwe" = {
-  revision = 47194;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "fab45c12e55ddd3b748ac6a07041c64efd1b344cd8375d870ab3ddda155d9c43adb1fbed21c82237732c8d15ad68201ade3eeb54714e4737a79ee3fe22db48bd";
-  sha512.doc = "361130c8fd556a564975ed94286645e1b2ebb399a4895b59244bbe941cbac20d0e4271cd74cd122595faad4f2ff1db24ad522c04bbded59df2ccfdbbfdb19c7e";
-  sha512.source = "3511bbe2629f5a69023836495e768ba9fb218d23f05f2587c39298c007017b272bece226dcfdd9f9b6625891d6d4be5622c4dff35ed413c797adbe1db1c60c00";
+  sha512.run = "cca88398d3410ae13cd555f77f050c8091cab1aa4f5baf3f1dd277aecc3634ec63077e836b0bd9a3ef987fc508220202c16ee805667d0b97f33d3e2a8676941b";
+  sha512.doc = "1db294e9e28e08d9a91462b2f5b8e368b340f5fe54193de97c7fc4b76287ffad3b72ee41fbd644f27a495d35f87b430181ad776891043838952d13c4511ee56a";
+  sha512.source = "0ad6b31acabefc9ab8ae66b5c8962de6a4de7692021c2ae35ad488a73d44e57bfb97a54ffce1a4c1d8dd6cea054029a4d82d5fd788b7a9d52f509d72952e36fd";
   hasRunfiles = true;
   version = "0.5";
 };
@@ -22898,14 +24222,6 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "3.3c";
 };
-"mychemistry" = {
-  revision = 28611;
-  stripPrefix = 0;
-  sha512.run = "bf8fbe30dd3d1637db289bb92f6339545f4d52b3876e5a81e5153b4ac72be0b54af48f46fa7d1dbd5a129bc83223c53163a760e6cec0bc61101496b25b677f68";
-  sha512.doc = "7f9a9d6c6e0f66805dc37120a4c76787e60452067d9f379cadaf4993a76d7363553699eba7af1b9e507bab4e68e66791a5c93d940e6079521de5d1b7a83e5a58";
-  hasRunfiles = true;
-  version = "1.99b";
-};
 "mycv" = {
   revision = 26807;
   stripPrefix = 0;
@@ -22915,6 +24231,13 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.5.6";
 };
+"mylatex" = {
+  revision = 56751;
+  stripPrefix = 0;
+  sha512.run = "b7ffebb46952c41818081cc14545d429fa65e376a2214d0ed41b56cea05cb1d3146d87513b4a701825b01bcf1ab268cefe6e9d709cb627dbe7b95daaf439d509";
+  sha512.doc = "791cce1eb8370e62642b64389b26a91af563ca875268039ffa978cd07a743b999573199f1a3851ee65f8118cb462ab5d5c658118a735875db90eb8482246e889";
+  hasRunfiles = true;
+};
 "mylatexformat" = {
   revision = 21392;
   stripPrefix = 0;
@@ -22942,12 +24265,12 @@ tl: { # no indentation
   version = "1.0";
 };
 "na-position" = {
-  revision = 48071;
+  revision = 55559;
   stripPrefix = 0;
-  sha512.run = "1f5d742e5fcfce8495f2c772ae166775151b555b1e4922615e5f62ce161a167969c8d6043d542018debc69ef75f472995f498ef9f3b1f094b97d5b986285b1be";
-  sha512.doc = "569a4c0a03c224195752a072581e4c8a2ec428fc4644ba66c43c94e322ac495137f52b3b1cd5cf40741c83937ce056e610a2fb4f4b02f3f8a73d43fcb3fdb4d9";
+  sha512.run = "fb88693c5d626331b9deab494bdb0fececfcb3d6f76e91f76f467ab8f152fe857e4ef41f87b38092118646961c0f64f82501f0f75f5610d793b8158d77bbbf9e";
+  sha512.doc = "abe7a0a765cfdd1d4ff454180b32d4153cd715d9af333221ed3213082dfbcf5ae0562617a2b30835a8aaf2a65c166e6fb3941d3bd6c781d83d65e971bd53f356";
   hasRunfiles = true;
-  version = "1.1";
+  version = "1.2";
 };
 "nag" = {
   revision = 24741;
@@ -22959,13 +24282,23 @@ tl: { # no indentation
   version = "0.7";
 };
 "nameauth" = {
-  revision = 53940;
+  revision = 58026;
   stripPrefix = 0;
-  sha512.run = "847d9562465a4b1a8d126b2f35acafc9c2121ad7dc2ff6cea5ffa4edd744baef0710192bd196fa8f11f9972f5ea57db1df7ec2b533cbd473dcd241a1f9ed3794";
-  sha512.doc = "4a57f0325184b04c59e9686d64c2361cc139000ecdf9517cf56f2f9023d4c8942ea7104524583eb8b8bff1bcfe9f2da9b26342b5df146ff5974c5d70c037948c";
-  sha512.source = "2daa93fc8a1177cb1667f8b654399f6e90ef79e29130a2a802ecb976c2b5a7478484af6c207eeae8cf350d300cd43115196db8d199637bf5390d7282911b865c";
+  sha512.run = "7557d11e5f8c46aeab49e45d0a52c0bfe4b8754e4d24b4490a4912bbb7208a4f178320fd40530eb79e251c493129f2936982e3cee4212c05c295f4346b43b091";
+  sha512.doc = "1b22c9593ba4eaec9113d4fa7164a14d130a4b436ae082c9b9e5fef523df2b1a26f27f15d503e956ab75f5d75b5d7a33a4ddb27c90c79398195126bf54fb1131";
+  sha512.source = "363d6cc0cb052a3fd6e5c2df1725210b1a0dcadff08c272764e32d3125fb29c02321b388c43e1cf520f6362a2ba92d26e780b5e1beb3a99014ba053af94d95f7";
   hasRunfiles = true;
-  version = "3.4";
+  version = "3.6";
+};
+"namedef" = {
+  revision = 55881;
+  stripPrefix = 0;
+  deps."l3kernel" = tl."l3kernel";
+  sha512.run = "c413d600911ab1107554ec2aacadc80fad12a95e7486817c002274f282e047915d06f4878e68e423af649569752cd27d7c1b3a802a9abff68e91038719b2fd28";
+  sha512.doc = "72031cf2858a3b68092c852c216f96aaea212c721e47d90e870c8153f83db921590246fb11b59009d431754720791e3c625fb3abd7bdd9010cd1a49894023ebb";
+  sha512.source = "adff08a774126c8faff52ba14044a8e2140f9586358dab6ce95e7a941706bf57c32acf0ad75282bd3b01dec8a73fea105c0c65a1453f5903d5eaeb3fe0349b15";
+  hasRunfiles = true;
+  version = "1.0";
 };
 "namespc" = {
   revision = 15878;
@@ -22976,12 +24309,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "nanicolle" = {
-  revision = 52237;
+  revision = 56224;
   stripPrefix = 0;
-  sha512.run = "3e495d68e20596ada67e55fa7d7273aa0bb19ac8ea41abcede5ee66da6870d3a1703c464c6a7e911b0a202c6062bf1afd7700755fcca0abbc80d0e0c8afd5fee";
-  sha512.doc = "007352388b415e597da827b25c2b8773e64fddd1b2910639139add09e07076a0f94b0a70422f1ccce0c00b7b7ed5f6534a8467e5257dc4670819dfb5d9f61fda";
+  sha512.run = "e9f90cb21730e34fe03961281527cfdea0f7c15e349b9d441747be7ba591c40ac876ebed92f884bd502c3cf7a99f2f6f6328bce515680100c2f9a3d7e04a4aa4";
+  sha512.doc = "3d159eb9fd84aa8bc6c183ae6a42aefc331b9bd606abbc1b2c3c53776d5b8f1554a4ad304d0555b8d2c95be2e8000eab0a3ec6a167e089292099bac6751782d2";
   hasRunfiles = true;
-  version = "2.01";
+  version = "2.03y";
 };
 "nanumtype1" = {
   revision = 29558;
@@ -23126,12 +24459,12 @@ tl: { # no indentation
   version = "2.0";
 };
 "newcomputermodern" = {
-  revision = 52877;
+  revision = 57801;
   stripPrefix = 0;
-  sha512.run = "24720e53923a2669e8bae12153c86e463215dca9c11a1cf19bd4afe71181324b598f217bd49b43b503c50bcaad33e42236549f57122e1d1906882ffafb0ab51c";
-  sha512.doc = "8c61e46f813cf230fff94e2875acfa58cc38663c66ef8ce1e6af3a18e9d9058276c670178ef4033f90599e117a0b880bf6e7753e25856113e407e57177470bf6";
+  sha512.run = "65072672488d99cf5d3b66449fc18da0539e75fe009311a7ac1d572888a702f0cee7cc928fc75d552eb81a6b8a5d604089a5d2461df397424259397c8c08716b";
+  sha512.doc = "6d2ce6b57fe538c52e57ccf769e30672e2844ec13b2af0cdd66e1aa1983e8966eb3b9263bb4186b0825c6878684377de74371d68819dcb957d03f3bcfbd11e49";
   hasRunfiles = true;
-  version = "1.001";
+  version = "3.02";
 };
 "newenviron" = {
   revision = 29331;
@@ -23168,13 +24501,22 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "9.4";
 };
+"newpax" = {
+  revision = 58212;
+  stripPrefix = 0;
+  sha512.run = "8285b8a9ea9f01668a8b21b2fb45846fb5c6448546fe9dca50e76d59a818d5e6abab83b1712e24339ef8071c0f20e1b6d731fdb80a1f023b9583cf071ddcb371";
+  sha512.doc = "e36ae86249580c4a3063535b5fd5daa70f4cf5a98dca1f3e27de6e59ba8c124451ca2ab6a68e96251b128d8ed01265a544c70b6b5c80e5dff343b476878dc7bc";
+  sha512.source = "c2c240f9ab2488b5b56577d058dd6fce1eefe7eef79936181cb2e3a2369fd3052e892f3bd076fea1d53d35f1861c008c32911e9fe28641ffcf928b961c4eeb5a";
+  hasRunfiles = true;
+  version = "0.51";
+};
 "newpx" = {
-  revision = 53792;
+  revision = 56845;
   stripPrefix = 0;
-  sha512.run = "014a13ecb4a30f957d99ce91c81aa40e246e8f270801755c374becc056d7e91eabfef9cfaa26ad1ec1a1b15dfc2bf18749682ea2370299844c0c16acd220061c";
-  sha512.doc = "b7c008b06ffb4671f3a33e26296db91186a8db2748830524c4878c6714717fc9effb9d26a07a270c75e514a9c2914df3482a19ef0b5e5d4e9e131d6f92c796e7";
+  sha512.run = "7dbbfd4e3e32b0c5a303ecfeb776793c1b1eeaa13b934e9e02ffbce49ca6d6409f5b920dac798a3abd52ddc87eab7ec9937060f3ddcbff5023005a6cce363899";
+  sha512.doc = "49e38fe4adf7291e3c174c9bf91f1f48ebe22639c542cd4fc707bce846e6fbb38a8bd0ed8a459c5dd61de314cb1a8a24aece5efc1f3febd5b0ac467c3051e3fe";
   hasRunfiles = true;
-  version = "1.410";
+  version = "1.414";
 };
 "newsletr" = {
   revision = 15878;
@@ -23193,27 +24535,27 @@ tl: { # no indentation
   version = "1.0";
 };
 "newtx" = {
-  revision = 53549;
+  revision = 58748;
   stripPrefix = 0;
   deps."kastrup" = tl."kastrup";
-  sha512.run = "aa18b291239e3cf2e2e974e276b4ec01efc4a214628520af8d09ffe0910e1d2eead4b9f40b081d69be1f6ebd7c06c356eb26ee0d7e653cd82737f85f097764bb";
-  sha512.doc = "20fd1a381fe48338992151ddf1696e33fb01191be1b8a2e05121d84d531bc8402a0acb9284a2cb13ff090f052a190be1b0f2baccb581f5e832045eeff2e86de2";
+  sha512.run = "2ff1eb8ca3fbda170c466e64ad874abcb17d657203a84809fac9e4f909d776eed95fbd69438b9fcdc3f0fd8f76ce5e9e662768e3ee51a2ec22ca4b071fe71b6b";
+  sha512.doc = "d6a89d72862332f08134e1a47ec53de58eb0fdfc7191f380ba8eda740a2118be03cb5898f880a1bfa3778e2e107096d5e9062ff875269a698f79e3506043de6e";
   hasRunfiles = true;
-  version = "1.624";
+  version = "1.642";
 };
 "newtxsf" = {
-  revision = 47958;
+  revision = 56527;
   stripPrefix = 0;
-  sha512.run = "ce1497bcc316b555b47dcab2bf68888fb580e0f1252fa1e1f73f2b3cfad2b9754ea4963ef0c39b967ac374323b6f75cdf28d0d25f93212b09a1e66bf90976c51";
-  sha512.doc = "426c11211d3f66c8d87b1b2522ed8bd9b2ed0e4e006dac4c0751d0b479100e2cc1aa60ab2c32b8e6362b767300f568ed295bcabf4a86c51f2ada7ea868483066";
+  sha512.run = "14fdd049243799447b0ba9380cfae1dbe58496e67d30cb7bb3a82c685f449c6f3070e1bce674ac173a9397ebb1a1d40d1dc8db05f04174908dd157e919e7c7aa";
+  sha512.doc = "bf4ac517cb79ef6b1e541b2a3eb8b5ebdbfb5e3638234438453f79ce0bb1d87f815d20c761dccf2822e581222cca0439c189e02b307d8c0044fd194aa1d2016d";
   hasRunfiles = true;
-  version = "1.051";
+  version = "1.053";
 };
 "newtxtt" = {
-  revision = 53809;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "cba0af119d5c1dab0e62046c2d1deba626885be3df5a79b9ae129a143221f1062b33eb91af146e351ee1969157c915e39b96a5ff85116b87e16d5498101fd2f3";
-  sha512.doc = "2e96ac40334c855a12da28024aa05df5139c40b99a86e5dd5a94998453c187139eb73c927fccd653e4e99199b894620620dab4705064f99def6565f7501dca3a";
+  sha512.run = "8d453dd25a50384aa0ffc620448a7c1ecff58b51b2cefd0ee2a3ea98ef274ffe1a11e6e26ccabc1d218d4a3f69da4cb254b3e9c6ee9fa99ac32d8714c15a9164";
+  sha512.doc = "0a29f11edadeec4284ac9c9c04230a925517b198eb3653a456ab68bf495a9dd0b846cea4c3e1a425539f0b834d37f8f9a7f20e5945e8c8efea7ab4bb9342f6fd";
   hasRunfiles = true;
   version = "1.056";
 };
@@ -23236,13 +24578,13 @@ tl: { # no indentation
   version = "1.1";
 };
 "newverbs" = {
-  revision = 52074;
+  revision = 58256;
   stripPrefix = 0;
-  sha512.run = "1a076aadfcc8b82d3b003c0f7bdcf17e3c66aff17c7d1c3946fda3d67d44e6885f35f84033cbc1cd8dc3b0c3d90aaf63ace3152fb7619fcafa9d1899c45140d5";
-  sha512.doc = "0c29b76949918fa03f4e4b506f35ad9d0cff6036702330d4e7771325869b7f5effd4f562dd2416d7c15d704fac60efa525f187ebee67a29d728a0d2490d2d266";
-  sha512.source = "d5869de6c0ba7dae4ce3ef4573efb43eea0e769974519085b26a519174c3c64481775385b0c51365464526d304424f9ba86949c22e42af1a914e9ce62c1bcf2b";
+  sha512.run = "146e0d503ff458d22e002f11b9ec89bf17595ff758c0b0a1644f340ece93553b86fa46e8aae590e4973603a441634f86666a4926e1c828523a28969585546dea";
+  sha512.doc = "950a4763975bfde9c28101e90f26e590d00889e67ae78e0d04d027bd9c5ec050c2d24c99e4c1ebb13f06b5a75c7ec16ed24d30c1d95ee5c121feff063268cd49";
+  sha512.source = "aaaba6fee806ca1f85cc0ea822db6cf8ff508f0fd27fc7b9de2ced527df5c1464f30a049cdcb5bee1ce66c619997dda1253c9b6030c99572968f5480f7306cb2";
   hasRunfiles = true;
-  version = "1.4";
+  version = "1.6";
 };
 "nextpage" = {
   revision = 15878;
@@ -23284,13 +24626,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "nicematrix" = {
-  revision = 53721;
+  revision = 58667;
   stripPrefix = 0;
-  sha512.run = "8b84e5ea01033d93c7b8fd5764dd003c80c54fa5d1464972948308d611851ec1dc580b434f0bc0b7d4821b2617ba61231b017dabcff71f3682961edb9578c103";
-  sha512.doc = "15827f045d16f7ea6412b651e1d105fe55e6a1ba926d80eebf3350e3b8dc49554947499079e81a05748ee07db607b6a5275c0d1dcaf198dfb97e6dbb2fd29d6f";
-  sha512.source = "663a363591f44aa3c29dbfe1650370fdfc256a76996825d37dd60507c87fc39f6c1693bcd88fd8dbcf5509923e1ff3b5709fc9a7657bc8a65efdf205b96f88ae";
+  sha512.run = "722540fc909b7053b6146230deb30afaf59dadbedfc0af56a95b8080cd02cc1fa3ef3dbbc8d820780df835941f7517d698e3783b2105e98fb89ce54219e3ba3a";
+  sha512.doc = "0dd62f857d50bdf11a23d4553edbbdfb7388c5430bd069d30df3f95a34f1ad3fd6a0a8cb3a126652a7498cd1ca05cc8d135c9ecff25cf57b5777a06f345b95a5";
+  sha512.source = "50cd8cb63abf8eb180d0d70b45f46e42fc61ee466daf110322d726ba39c95c6abf3d2ac306e6f53713331764739369263ce9cf37595508f0e3bbf3cef1c0d0fd";
   hasRunfiles = true;
-  version = "3.11";
+  version = "5.13";
 };
 "nicetext" = {
   revision = 38914;
@@ -23317,21 +24659,30 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "nihbiosketch" = {
-  revision = 39460;
+  revision = 54191;
   stripPrefix = 0;
-  sha512.run = "fed3f5fc0886ad44c9f442cb0e4d3289d9027375e3b0563be9fdccf2a963cea09a0b16db2ef51a57e652f27a5dc5c20a36e9d284162433b958cd4fcc905989c6";
-  sha512.doc = "707adc7971861a35b352aba04521caa61ea3d84e15cf698f847be43e9a22e6157ba133f9d787c8c65610706481880571e82a1037082d00efaf08a5812f612e94";
+  sha512.run = "ce64ef60a007e8a955dd48f9f9f748a738aa57829116f060b3fe353308244db0a2c1d56d139e2b1cc1a6ee4f243eb7ea2339a2c927966d7418e6b553600b9e53";
+  sha512.doc = "4315c32e1ba43339b609c272fab7aa0b18c44b2c323f43cc303210f37c44c5a08d0dfcbf62e450bdd9ce899d69afd5eceafad91074fec73ac9bcc1e5c8c8540e";
   hasRunfiles = true;
 };
 "nimbus15" = {
-  revision = 53742;
+  revision = 54512;
   stripPrefix = 0;
   deps."fontools" = tl."fontools";
-  sha512.run = "f045c6f3cd8ff71b05a1c323ecef4cca9b6af2d1921bdd7ef916d40064d2eda0c27c630de9eb85bbb9432121d5e0a2994778c7ea506202d093d95942e41eddaa";
-  sha512.doc = "5ed10efef5b70100d304d4a55656e3e2d101adc846019d4a4ef69d491c66a877c074a987298843e2fdc0d6e2a440452f3ae746a6d2419bca9312c76b6f2b9101";
+  sha512.run = "6a1e1a91c5b42e568299a850052578897631573380579342a611adaf3d730fa452909650218cc75aba5c92204c01d830aaa2c305939e6b85f9202eba0d5e3fe0";
+  sha512.doc = "23de0b8f674692f1eebcce8c1c308e26b0311c12e4fb61fb6f1a925382bbf072d81047097b0a8d5abbf86f641f7b1fc59c64c16dbd8534db7f875d5b64a2d77e";
   hasRunfiles = true;
   version = "1.013";
 };
+"nimsticks" = {
+  revision = 55877;
+  stripPrefix = 0;
+  sha512.run = "d2f984ee36ca3084cf3a03e05254c2992af1df4c42ceed8bf83bdf3a0bbc6657b22fb9734976b2ed79433150d479446cfb8d0c04a7758887b63ab49958079588";
+  sha512.doc = "b4595bf2038cc5a6a59d910a32c56ada717fa4b8880db7c8dee33fc7de4fb7061fe0ab61f433b8a341869cb15dacd648036d6fd0d47cc664d3ed11c12115aa45";
+  sha512.source = "4bf6734b74d1147a0a64a2a5be3a1bf0f5e50c57275e826104641b5c67038ac7e9aefd2a797a8e26b70dae9165f9aa06f5aa657c30bd4bc60d71b9b31a19b159";
+  hasRunfiles = true;
+  version = "1.1";
+};
 "njurepo" = {
   revision = 50492;
   stripPrefix = 0;
@@ -23350,6 +24701,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.2";
 };
+"nl-interval" = {
+  revision = 58328;
+  stripPrefix = 0;
+  sha512.run = "486597624d640ccd13b4cf4e913b5735b0f2a36910f563b87c6ebc6f38e2ad8df99591fe8dfcb503750eb6a98204ded9bc80d3cc0f8e2441257d6f9bd2167cb9";
+  sha512.doc = "8c9bb64229464a05f51396d50143688b8f108ba47ad23a01ddc97039133cc3dbfd51a6a58e36e946145ea483d3d06f36926d8e881b2e07c005e637338092f75b";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "nlctdoc" = {
   revision = 53768;
   stripPrefix = 0;
@@ -23367,6 +24726,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.04";
 };
+"nnext" = {
+  revision = 56575;
+  stripPrefix = 0;
+  sha512.run = "406e846ebe7ed721218368cd00a021edc41af41f1ccb5989925abad92d4cbf4d604abac8144945599530c85917d9404141052ba9891b778d1006b7d339499041";
+  sha512.doc = "6efbea453691fe2af7f436e79e1a486abf5dda14e2457ca3c1c2bda9c8461016d4436eee82a18b079a2491e1c4eb2f7dcbaeaf8fe8b8c7846e744f02da8e3b6f";
+  sha512.source = "a0cc70a3bed51b403ee26c2fc583642ab25565c1ebc69945a831827bfd2c192946142ad92bbfa130f891bf9a36c18bf50e5b424ecc119081d72c7efa1654310b";
+  hasRunfiles = true;
+  version = "0.0";
+};
 "noconflict" = {
   revision = 30140;
   stripPrefix = 0;
@@ -23376,13 +24744,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "nodetree" = {
-  revision = 43011;
+  revision = 56742;
   stripPrefix = 0;
-  sha512.run = "bc333202800520cf68e2aae42e849fdbbe8b2a1936245f35805adb3ba6795d724b8c6c5bf3973d760d5bb1327324c43721bef909d3440a3e7b8c559dc57aa61e";
-  sha512.doc = "d81032f9f78e49d49a6e88c4017a6f95ca8e3ced2a24210716d456ff4ea1461933540d0b553eb66e6b74c8c94e3f93328b9ab0cef2ea91c2ac37a1ab4a28ed39";
-  sha512.source = "a702d084e98c3a79df85baf0155d33b7187b31ab4d0c32af4cf3e1147ea5abcb6a989a5f09983d1e2446c11f9f99fb6a66f9c714553157e4acfc39003e770f2b";
+  sha512.run = "315216d397894f9b49109c4749dd91953d4bde0c220c37eebdf762f2427bed4f5bc9657a7088a479c78832fd7dfebbbec1b09e25b0a2f5600505a8d5cc58869c";
+  sha512.doc = "2a20d35c7a1f01657455b239916ad7c9fbdda81aac26d1cfd01d9c4e193ed75d02ee30dc884fef6df722042c3096fe350f6e29b73c00a3edbf4d2a85d364a1de";
+  sha512.source = "579e92f7185814a062cc74619641a3010b55c3e21fa2a8cc13d402b50db4ab5ba05527174a90361521d13e483a87b73758c4c52068b6e94d8e73d8aea76a88d4";
   hasRunfiles = true;
-  version = "1.2";
+  version = "2.2";
 };
 "noindentafter" = {
   revision = 35709;
@@ -23410,13 +24778,13 @@ tl: { # no indentation
   version = "1.2";
 };
 "nomencl" = {
-  revision = 52911;
+  revision = 57263;
   stripPrefix = 0;
-  sha512.run = "420d6664ef3fb6cf6f1491325d7fee3435d9adf2f2a5920fb09da27303ae29a41403ff0f68e36dbc897a5811472e880324aa9f145d4018e24c595e331a0c447b";
-  sha512.doc = "69c83da8e9260447741dbab2006449acdd24d290f472d1522881143506baebc11f87ee0664331d1c4206b799b996d9b3fa9783cfd13a197ac5cf5a0af40328e3";
-  sha512.source = "8adaf08bb427d8bb848236bf8c80f060099bd3d8062aa2c9c0a007ccace86d036e0fbca6d0e5c98cad18a71dcf5ef833f11ce858f4732deb8967add2965cf2ad";
+  sha512.run = "f63b053f8d95a58e2d8ec5d42177f13bdaa49f6cec710e166a96f45187b51cbe12b34c68918c0ec42b12250ecf1af80f5dbb83f4161b2d0dc94d51ccf218391b";
+  sha512.doc = "cf29a353af0a32e41d18087d3ae9c8447d52cb0f95dabfbde01150d15637022d53a8576c362bd7489e8110cdc5dc1892159652d67e61f165f25a78b64d8e095c";
+  sha512.source = "e64dc93929ebdf9716208bc51af759003b7e3263a95d58dab5bfe740a71c966d4f51d561e4cf2d82f90bf3e081b4cb0c7a50a1e0a657d2b33b3a065a2e88a557";
   hasRunfiles = true;
-  version = "5.3";
+  version = "5.5";
 };
 "nomentbl" = {
   revision = 16549;
@@ -23520,10 +24888,10 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "noto" = {
-  revision = 53953;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "ad8c28a9d05c2dae3bcb097989debb110e3a8600567aa007c93f1782cc151d74abf62bacfa0bc52b758ce1c4a40180ede55406c68593983b1344d397d9efb7fa";
-  sha512.doc = "3229be953b5d4a4e642db5a0f8067ecd2b9788d96890640367105902609ad52ed56995671c7de9470cd295e0b77d1fb72fa600d1a52ec3e244be37a2da8c5e3c";
+  sha512.run = "731e33665913e4e5deab621d44f0fbaa1a9853109f6f76b2d2c65efcd2a227369e17bee3cd18b00a0e3314db61026c2d2138943b3420bb5da29b7eeed10c6cd8";
+  sha512.doc = "6ab7fcfa88f6c4739038db08afe172387ebe3cd391180efb9b745096ad0d24f7a80b4866698ae882f34d4e6482ea477b419c9421d2a62e71c79e2b66bfd21d94";
   hasRunfiles = true;
 };
 "noto-emoji" = {
@@ -23541,11 +24909,19 @@ tl: { # no indentation
   sha512.doc = "83b3d2c7b97bb88af13d888d04f08ebb7e79661b4924ed6e328f26b9d19e4c6eea6719b49e6f227dc37c96201a901fe57da3745dfa7151bec27c7e8bfb81b236";
   hasRunfiles = true;
 };
+"notomath" = {
+  revision = 58726;
+  stripPrefix = 0;
+  sha512.run = "87ea63d518f58926be25b144f1a76442873e991207feca20d32d5615c2a52cbc9df9547c081d220603cfe26e4e02f565de60d510d63dcd8179b2249ae2f764a9";
+  sha512.doc = "fcbcf7df38116022d439d6eb3b98e7e8979d934011bff5d7241e2490e83f4ae19168a4aff1cf4aa887c7aee90ecd82980679d21e53fd8780f5aa13c3b2681857";
+  hasRunfiles = true;
+  version = "1.02";
+};
 "novel" = {
-  revision = 47492;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "ab6fd183a8f1fefa9d7e56fd234cf577bfbfbf6635d8e8fb6665e05b5d2f98dacf285731b32df64abc3d314865409003d89a935e2af2cce8990e0cc3c4510998";
-  sha512.doc = "3e1bf9313cf7e52f1d08f94b24be24153f4f2b68c19517e5be81c2bd224033fbfff5a17857866ad274cc54a96c0bb9f9da6536af5213bd561ea48b7ebb4e7cdb";
+  sha512.run = "967ca49cb355529bd6c3435aff389ec5b72b5d715c50a86f73b2cfe8209436046f25e1471967259adf8592fec317632193af00c7fe18dda967bdc510096580bc";
+  sha512.doc = "22b489764736c8fe428a5860c7d19cfe4a7e222d4e69005235da6bb6acb9aaa3ba4a66648a29f6a8c07fc39e72b73aa7044f60d2cfceaa0b78ef520e0291a10e";
   hasRunfiles = true;
   version = "1.52";
 };
@@ -23583,13 +24959,19 @@ tl: { # no indentation
   version = "2.01a";
 };
 "ntgclass" = {
-  revision = 53882;
+  revision = 56959;
   stripPrefix = 0;
-  sha512.run = "c92ad04449f1cc888b80d0f5a6baf318bbf2f743f5131f8c3fafb263f88a2f9df2037c1e8172806a41dbfb96d447c1e55c949e99745a60073431f4affc27cba0";
-  sha512.doc = "18703b1ddaf9fbfebb2a546bc8e63f5e15958c6f07087d936a0751786f5fc620011654649999c815c3cc0e78a04c6efac736e1f36708ec858438770c27e9398d";
-  sha512.source = "1ce750624629809e1a13ff91be63584528c5d7a85f44304ea21b1beb6a01363d7727c1ff1268c1c373e3d0132b0e6701e3cf65c3be7ea01848fd08578581c90b";
+  sha512.run = "bb1cd3532f91bde7768a027d51216bd56c8401cbcec4996587760e3289d892d2f1d4efe834d55146026ecab413b04d1f4e8e132a53e3b6f925f4aaf0bc1124f9";
+  sha512.doc = "a58debb1c6a07c63dfb45ea6647db75bb09217a2c7680318cd6ee56575dfde985ae88ba361ea9ed1adb26ecea430e851599ccfa900292e4847b70e02eff65887";
+  sha512.source = "989942960e4cc5320f3bc877cecec195dca4f8263b3de1b0d2a233adedef0380cabc5d017cb256ff8c46889df8878bc68a855a754cdc8b9dd0cd6a7b05242c08";
+  hasRunfiles = true;
+  version = "2.1e";
+};
+"nth" = {
+  revision = 54252;
+  stripPrefix = 0;
+  sha512.run = "e94365bee89f78b13ec22d8d34ac78aaf50f060f9282c0529d98518ce1e5b7f7995bd2da1d17654ed795f7555e7dcfd9d51399f4a83affc059eb3a760a76bf97";
   hasRunfiles = true;
-  version = "2.1d";
 };
 "ntheorem" = {
   revision = 27609;
@@ -23641,6 +25023,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.0";
 };
+"numerica" = {
+  revision = 57759;
+  stripPrefix = 0;
+  sha512.run = "2d4b5de317de660b01cf242fa623f5b37bea19cab30c7750b056560c1956718eb4903fcd4bc32323ccf0888ab4340c7d70e9cb8b66bb4aedeaa07a9faad32880";
+  sha512.doc = "062ef217d285753caef67842b30e395799236d0f989e2ea943b64b92b468c2426203d41a08f869f0c8c30554dc7391f5a097b99f9e4f4fdd31c1ce038ba33444";
+  hasRunfiles = true;
+  version = "1.0.0";
+};
 "numericplots" = {
   revision = 31729;
   stripPrefix = 0;
@@ -23673,35 +25063,43 @@ tl: { # no indentation
   version = "1.39";
 };
 "numspell" = {
-  revision = 45441;
+  revision = 56912;
   stripPrefix = 0;
-  sha512.run = "bf6d58521c82638b9f9e93fd5314db075fddd4cb249d7e8fe8b605581ed19414d259eef98a4f205d497fe4b9c552427ac202c0c0b5810e81ce1bf7ea903ec3ae";
-  sha512.doc = "6f3f26985e8c656fd68fa716fcd3ffbdc890da7cd0797934351b4d128444eeff4b2f2adb05210fe45fdd627c0da22716153aa8ebaf4b5d7644235ed8b6c2b507";
+  sha512.run = "e3731b00f027319e67ece82e727fde32be4fd80ba508b173f54f89edab3fdf5a98148ea925f68039adec2c09fa7d2284d1809d5a95aebd0e0d364f1b8b82b698";
+  sha512.doc = "368b5af91cf3d8142bd243d42a6f3f939a2172aa4837487b78de51caa5ff5801123af307c14aa7b66a32fa791268503bc7ed6ed1cc7ddbaf59c84a57914d615c";
   hasRunfiles = true;
-  version = "1.2";
+  version = "1.4";
+};
+"nunito" = {
+  revision = 57429;
+  stripPrefix = 0;
+  sha512.run = "920e074987e7e75fa6db92e3c05d76f7aad3e7d9b4f0166a8a8ca79bc5183549299b56a10f1cb6c7fdaa63f7f55aa6b9c1b2bcb4cbf03567b26e9fcb0240472e";
+  sha512.doc = "e0de75f22da96d229a6465a4d47baa8e4c3199567f8d2e3255893e5b2a2d16ab73eabec1a103b355518c4cb98ea3146ff067af54938c21a910aa65aee3f429db";
+  hasRunfiles = true;
+  version = "0.0.1";
 };
 "nwejm" = {
-  revision = 53597;
+  revision = 54392;
   stripPrefix = 0;
-  sha512.run = "7bb333e3041a8cc20acf7b154adc8cf6008a759af22031dc2ac7f0c04fad341cc911a8a3ec4ddfb2048685a628c3042cabfdeb21d7f5d0128eb0844cea381b70";
-  sha512.doc = "5636fbded79f0ee81148f3367a88548b408928bb441e17c65aec16d75ced7218ecc627f7dd306baa4968d4229e81b9cd23361cf1adf833d8deefc3104632f7c3";
-  sha512.source = "d45391e905fe71a0c49e82e9c1e6cb019e05135d54e3af7401f692221ac76620d214095961360be6d903a132f6c9323db0680330c9b98115122282604c0851e0";
+  sha512.run = "5a7e400c00bc8d5d607a61d1ebc30ed2d36bbd1b270868c89f654f84fe9f6d4259863b047bed1c1dba9b79a8a1f1b1ac612b95530903f81dae52114e420a32e3";
+  sha512.doc = "06da866b9f491a5969460f52f9496f723f8fb3347c7b0c78e48f07987e953994fe658743c6eed5c346277469e89b07a13a3a727d6df7838a8f5e66dead1142dc";
+  sha512.source = "d0afd2dadbfe524790f5a96ff37d3304305cada1291311bf724d30f216208f6f9d0ca6b6461792b17d1e91c8a1a13f235543071a2d8589615898a7b9a5407f26";
   hasRunfiles = true;
-  version = "1.0.0";
+  version = "1.0.1";
 };
 "oberdiek" = {
-  revision = 53283;
+  revision = 56291;
   stripPrefix = 0;
   deps."auxhook" = tl."auxhook";
   deps."grfext" = tl."grfext";
   deps."grffile" = tl."grffile";
   deps."iftex" = tl."iftex";
-  deps."kvoptions" = tl."kvoptions";
   deps."infwarerr" = tl."infwarerr";
+  deps."kvoptions" = tl."kvoptions";
   deps."pdftexcmds" = tl."pdftexcmds";
-  sha512.run = "6e3aeb760239bd3f8ee92655703b6155f9f096f4baf0cd8efa3b6cdfb67f96ca16149ea3e11dd851960d98304eb88c78373241d0b00948b3d717ed92e32d858c";
-  sha512.doc = "76baac4bb06b595e05bf235a6436e8d59b06ea6917ffa66d6e82ccba994975b6992caf422b40d864ecf7ba7152446859299cb158eadef3c37a6d96354649f6e0";
-  sha512.source = "79b9c0a1e6c01cd20f8d9d7fbba82b0f4779d1724cc8b777e537e289833cb6a712de8ad4b2fa44083e3b3fdfee375ffa68c518779ceb7944091cb3e3a1e1d207";
+  sha512.run = "a110b9f65989da3cb73bf37e09d92a89352177c45ac2b60a98341829e833e9ae3055e979f9bce5fea57f44e751efd70cac0eb5eadbb7efe512d0277f3696dd00";
+  sha512.doc = "631f11d270e5bd908b3d1c51d96205046793e529ba18a5e442280e6cbc1cb67850dab25984747f3871cf200dbae340e19cf327a21d5b66fa55140e1d76ae1503";
+  sha512.source = "a58f3c55a38ec5e2f373428702a62fe55b2af7db5de59ba53a16643f1b4ca3e52ed8317594e8403f0a95b7705e9213b8400c040329408ad0cdbc77bc8ea54bb8";
   hasRunfiles = true;
 };
 "objectz" = {
@@ -23729,21 +25127,21 @@ tl: { # no indentation
   version = "0.4";
 };
 "ocgx" = {
-  revision = 28492;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "5e8e27f2ad058f30431a78d006869d4448fcb722c6b86a306505afc54a4e39e9136980affad1267da479bb175b8608d093ea531f85302e1c4f450ee93451ac33";
-  sha512.doc = "62dd19282c5ff9b030b1caa8a779590f46aae1bafeb4ecb90195e2e0469669c21e130408fdcf855a0a0859100d04cd7b3494ce60bc21e32ea5c3c6fc162ea69e";
-  sha512.source = "3abfd38cb39915bb6a1a5610c5d760174cf0caa7de99b8f975f8084f01579a2211c45ceb0912b84f9ab09d26ad091801869c11f393d1b59eacbb133dbd6b1603";
+  sha512.run = "33b8ab1b03b7a887127dbe589212747c8cfd794c1b1c9525222cdede3f941812007441ff2835386e59a19b253e5cdef27a83dd958506dbf7dce6988007befa3c";
+  sha512.doc = "c3c28d54a06a5010d8b1c266b1b9689cbf41050e8427689015ce0016131cebaec87ca0c416b865b5bf9a386a2cc33326da5720d326d797e94c41b8f02e160889";
+  sha512.source = "633326b032b98f52375e75cdbc55165e35ee4d531d4436df6575ef54c7897187030d99aeeb0de26622ce4f5e56a10df3c381ab72c0731fd8150d677f1fa3c09c";
   hasRunfiles = true;
   version = "0.5";
 };
 "ocgx2" = {
-  revision = 52730;
+  revision = 57531;
   stripPrefix = 0;
-  sha512.run = "fc31e8980d802d4ead440341d898990a083a537e9dbd15b0d2a0a7b0059b2513558c3ab6565536dcd9a189feadb4a5381a40c7ce7b81afe1ff53b9deeebde87b";
-  sha512.doc = "07078404f77cfec61516cf285246724abab8569967fa1ae3ccdb741e357031742a9e61782c48e7faf402cf38507a5c9b4063a543dd6e608b095d353344b13b04";
+  sha512.run = "2b09a488d273992f02034b66ffda3ac7a7f9251e8b57c7794cd50d8e68f5bc2d1b55d1388bfab41e3a46ee037cc5de4e1e137a7175b5191fe9d68fb6b3513ffd";
+  sha512.doc = "5f310667aaebcae98fdac38c301ba587c00290d6fe21944a0f85f87cbbf393c02179621886409956739696137900d119d3c69cc3b597bc38fe283315af03995a";
   hasRunfiles = true;
-  version = "0.48";
+  version = "0.50";
 };
 "ocherokee" = {
   revision = 25689;
@@ -23837,12 +25235,12 @@ tl: { # no indentation
   version = "1.00";
 };
 "oldstandard" = {
-  revision = 53928;
+  revision = 57213;
   stripPrefix = 0;
-  sha512.run = "a009e523f070a0cd626df349e9f7ff4c3b83e24bb996e8711af52dbad178c6bb051eeab59e8c1e55a5a8eaf22974e063ae5a8cb0613a60431503a6f76ac568f6";
-  sha512.doc = "5fc4bc632bfd76a78b16bcdd25a30309725d408dc6e0d11ea31b2deeac11b3b17f1299465173702c33993085fa99dc3d42c8433f99e3a06467fc77cc18d0601b";
+  sha512.run = "848400b102d5ba0ceb56c4d50c65482bf5b3c468f4ed71d0ead25f0612d54552150bf467b50ca5686028797a25e46db195307ba0764473ce520e14e93403140b";
+  sha512.doc = "13d73f373b75de8be6e013595eb257ad4f2cb601f56ce5ee57a16cb427068ae597f3fb802b781f9c60e5e1e502f253b09ec3d2740355929ccb236a1d55ae1933";
   hasRunfiles = true;
-  version = "2.5";
+  version = "2.6";
 };
 "oldstyle" = {
   revision = 15878;
@@ -23854,10 +25252,10 @@ tl: { # no indentation
   version = "0.2";
 };
 "olsak-misc" = {
-  revision = 51063;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "17f360186b44fbeca93ebbe6bb99c51b1815bf376272de824e8a62474e59a1cecc09757639d0542270aa1f1c84ad8042f5859032a141f353b112ffeb8f5ba866";
-  sha512.doc = "da6afafbde8ece27fc082b15ad29fdf53ae08ec8674f138f1a45afd39a1cc0a906287390986406b4c5aaabc009aee1843560f078fcac1aad2d7739ecf3e16a68";
+  sha512.run = "2645f2964d95754cef9b3f500fe909bc379caeb95ffdc7423fc729f6abc134ea9eaeb54b5190884a1822009be3135b752efb1a7ae5b2b00635226798ffafb974";
+  sha512.doc = "d9c3ddc194111eb16dc025f2b3540e7f295e2c52645269bd06cdc448e528841da6367739d8a5a7e15ee5ac2adb04c2e9068d1a7da615bd6bda2f983288c6aa0e";
   hasRunfiles = true;
   version = "May_2019";
 };
@@ -23869,9 +25267,9 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "omegaware" = {
-  revision = 52851;
-  sha512.run = "3eeaf55d52884639dfc3448e4e9b61434fb47fe144edc7bfb13cf0e45eff0813e6fa79921d81bb1ed14c268904728e54bba6922f79dbb759f06dbe0758a157b8";
-  sha512.doc = "aa72ef38e326aacbba3101946ba2cb001ec6a8a034c10e047b716fa810062073e1bc83c15dbcdcd8d57860f5bf480a2595fdff1c07f85cff45daaa1070273168";
+  revision = 57972;
+  sha512.run = "229b5609618caf2122d084955ddc57804ffa3b3296beb00d11bc783d6740008a68d15cfef5c0dd5acfaf572fd8bb204b8c161267b315b16de558f71d41ba5b8e";
+  sha512.doc = "8a3728aad3cc5ed99305b5fd8e2301c13ff2734c685c506e5cb00c7412c3f946631f1a86fe086277f85a61fbbf80e447438af6cdd67319b5d04f57f02569a49a";
 };
 "onedown" = {
   revision = 52525;
@@ -23909,10 +25307,10 @@ tl: { # no indentation
   version = "1.1";
 };
 "opensans" = {
-  revision = 51458;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "892cf5c5f2ce29049a8a836a94e64981bb51a9a7b18bd3d003cf9f3a233c0da0fa219fb24ce5ac07e7cfc2b94862bf1f201f62a91995ea7f45e3a9a657a875ab";
-  sha512.doc = "e8c005fe3c22ca88ffa9f313bd1735dc879167abb17e9c3ba1ad60d609fd95c61377fffbcac15cb5fe2f3e855765b0981c7a602235c3ba5eaceb759f3c92236c";
+  sha512.run = "d92d10da8d6d8adfa62d440767ed1fa9abf413a575b122dff275eb2e46d501436edd90c215611cd943308f32a197c72b8fcdf56b72268f76237c2227cc9dd5ff";
+  sha512.doc = "00e5243e465d948b6bd63bfd161d4e549cc6e5b008a8cf8aff1ea5a31bc7a1406858c045cf6fb52c254d61869f1bcd5ef8c6a43ea66164e842fe3fcff2b26540";
   hasRunfiles = true;
   version = "2.2";
 };
@@ -23933,18 +25331,19 @@ tl: { # no indentation
   version = "1.0";
 };
 "optex" = {
-  revision = 53927;
-  deps."luatex" = tl."luatex";
+  revision = 58515;
   deps."amsfonts" = tl."amsfonts";
   deps."cm" = tl."cm";
   deps."ec" = tl."ec";
   deps."hyphen-base" = tl."hyphen-base";
   deps."lm" = tl."lm";
+  deps."luatex" = tl."luatex";
   deps."rsfs" = tl."rsfs";
-  sha512.run = "9aeae528f488438fa8fec80aff5def3c402139d28b65541920898f6e16211ab7f68fa91477af2a2a10eb981591e3d378f6a163673341b7e747566ffc6513881e";
-  sha512.doc = "52c4e5c72c71097ad634ff3e7551750de906f6639ef3c40f0af396227e99d4221d08107674b4e760740846900891deac4c069124909347ba1b6a502b3a31c047";
+  hasFormats = true;
+  sha512.run = "d734139205c47599f3490dfbf13e6f71532ed7c311c3c76b6e444e539f1be6dd1bfffc612f8d019c38923d46ea7c98be72b28cf83c2b00885d787f6f526b0f0a";
+  sha512.doc = "285d74614c05d3776a41269da1156930024359eef282b3d5479a5397bdb928357ff3020d3fcf47bc92d8ce4ae37a9c4fd68c9e601d7083911145a2bed2bad4f9";
   hasRunfiles = true;
-  version = "0.05";
+  version = "1.01";
 };
 "optidef" = {
   revision = 50941;
@@ -23970,6 +25369,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.0";
 };
+"orcidlink" = {
+  revision = 58432;
+  stripPrefix = 0;
+  sha512.run = "c4f2ce57c5c6a792f7d1cd0ef835e38cc582eb7df9655ae3d2555e3c9d389787ce0a058973dbc9d453f063247968957b2ba9ec1ed62499ab731b57fb96e0a342";
+  sha512.doc = "8b18a107eb786e45fee9a1a16c5e88386e80db353e729e1288377aec3a87ed7433d189d0acbc1e8065a72b3fb7bf86cd8f635fe870735ddd3ebabed5aab8ba03";
+  sha512.source = "f1d11f008b85d65228d1284228e4839d340fe9e661c0cfecc2e9c76c2433b0e7ef6a27b0a630ee7458e4f98a32f12d0356d95bbb9756348e2070175b6d32aa5e";
+  hasRunfiles = true;
+  version = "1.0.3";
+};
 "ordinalpt" = {
   revision = 15878;
   stripPrefix = 0;
@@ -23979,6 +25387,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "2.1";
 };
+"orientation" = {
+  revision = 57390;
+  stripPrefix = 0;
+  sha512.run = "729921d3152b76fc4c6c8385ce0b5a8ca2491670a7082133084c2e09774bd5c94b7c6c6b8ace1db787b4626f68a9b184550d43adace8dc6646ad36d2d9703f8d";
+  sha512.doc = "75d3d1dd0a71d34429584dc1519b9ba26e329f58f468ae8548e7f9ec9f92e6877917bda790b61af9642e595d6b42370e8fc511b2e1d9b974617a6f5bddf96821";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "orkhun" = {
   revision = 15878;
   stripPrefix = 0;
@@ -23987,12 +25403,19 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "oscola" = {
-  revision = 49772;
+  revision = 54328;
   stripPrefix = 0;
-  sha512.run = "849e2daf4a7a48c6a2371b01392726c28d55d4da7ab7fdecdba545d9a9f8a7c2b026e856cdb3ff1104c1872584d6f180d5ee3e272c8b2adc3325a846a8c0478f";
-  sha512.doc = "3d38a95beb8d399e33d6c9e1674410f14d7941fcd83524b658373d06c897e8bc5474eaf32063077b4a9ee9e5db4055bdf908ab8574b74e44b04dc1977714c1e7";
+  sha512.run = "831e450ea6fa77f521eca76aaf281a0f7425e28d889c7bc919cd04c52a78c3a0665abf011ec4ef722f47e737c1dfb48f8aac231aa3f370d594cf5300d84c2456";
+  sha512.doc = "6024d48e3b6f68037a68dc04051451be2ea7a952e5d8f55b9bd1160d11900751b5a58cc8662e5c38940bee01a442f3691a8cd8329ee4bd5749cf7698adf72cef";
+  hasRunfiles = true;
+  version = "1.7";
+};
+"oswald" = {
+  revision = 57253;
+  stripPrefix = 0;
+  sha512.run = "faa9493780681b7485a642e45cfbb71e81ca408e2e65acd77b22f0655a0d98598558e4557737fa0615794eedaa42cd8ccf9bd04323b55a39db6251f52b11897c";
+  sha512.doc = "e20776527a53c7da8a07d3c08314768cb3c0e2bcdbae90b30e7407c95546f1187f65fbcb8a52915ca3b1d26ffad2191733f26b9f105403ec574ab4912bcae915";
   hasRunfiles = true;
-  version = "1.6";
 };
 "ot-tableau" = {
   revision = 44889;
@@ -24031,6 +25454,21 @@ tl: { # no indentation
   sha512.doc = "c97f91df77f64d824605c56669136585b94d95031ed5a4a67f3404c54b2c96f32bafaecc06d114755d0e65c3fcd0379d63f28f94aa32ccb8d23730f5f3eaf63c";
   hasRunfiles = true;
 };
+"oup-authoring-template" = {
+  revision = 58661;
+  stripPrefix = 0;
+  sha512.run = "138fe4a15f05a1c5b952febf0af211d1b3d13d202ce3cef953b770a1779464da6f7fb1cdbe77ac0f617cb1a1eeed4cde09288fe61cabea439570fc2a0a254df9";
+  sha512.doc = "35c7e4e4597924adda46994a50e9e55f8af9f440899bb8ed3c85549d94f96cfc601436eebe0db730dab68762957121e1ddef094f60ed7eee041abbf80a841aad";
+  hasRunfiles = true;
+  version = "1.0";
+};
+"outerhbox" = {
+  revision = 54254;
+  stripPrefix = 0;
+  sha512.run = "954af6a75833dc388c430faf538415457d0526b85060602b93584a45e6b0ff9bb83ab1d2117ef58817f08b138146873ff74ab045f174e949a0c9fb9f042b1121";
+  hasRunfiles = true;
+  version = "1.2";
+};
 "outline" = {
   revision = 18360;
   stripPrefix = 0;
@@ -24064,18 +25502,18 @@ tl: { # no indentation
   version = "0.1";
 };
 "overlays" = {
-  revision = 46122;
+  revision = 57866;
   stripPrefix = 0;
-  sha512.run = "6ee154baa88428dfa149de77fa12e9d37ba6e5dda7c54f5e7f28b9d274be7457ae9a71484f3cc588a0797d4209bdef37a15de9e3175f0708711a54a845274084";
-  sha512.doc = "3e9962fb56116a4cfbaf0e54e95a3129aa2414be617a12cda9b0d6199afa24021ab9fb1f8d5ddbad8edd7af915c1b80ee42504ab7873385a391916c96fefd6c8";
+  sha512.run = "93d1b7bff165da32f509e820cf88c08e8dc17ae688814a6913357ad9884ecf9fe94334be82e54c4e902935fcc38a6dab5687a3f5d4e333268d03df8e977611b6";
+  sha512.doc = "d1db70b9ca58bf23946a824c9b9ce173f008b45b608f409c6230403c5f5c1c2e6dbd22f7ec416e9869d3dd98bb0cc2b5a4a0e1d5bfd0a39bac36675d46a5b4d2";
   hasRunfiles = true;
-  version = "2.10";
+  version = "2.12";
 };
 "overlock" = {
-  revision = 52408;
+  revision = 56079;
   stripPrefix = 0;
-  sha512.run = "449caa738b2af059871e8142b6257a65bcf02001461c64deb4e785cf1cec6406ad3d13f9b39bb0c06fde690369cf44c64f9dbc869a3269eaa1161fd840334eb3";
-  sha512.doc = "5083d926ee34f7df8ac55111fe503d31589ff319725aba1a726500c3ad935974a29c68d677035a9b82beb249295513d4e3f70310cf078d376f084e354de81d94";
+  sha512.run = "0c3754d8fce4d3a9b68cd4d8e23d8f53d03ca3e1a1fa81e1af9fc7148bc5376cb8fe15869696667bb109829817178c1f5a6262a10f42c55c00ece4a3e8beef5f";
+  sha512.doc = "e65417e21722d510ff6b41286ea5018513704f0bd346a77c8984b70339346a555dd1ade9c944868318f25ff07e73401807b1882a0eec90259ed55bfd50ff4382";
   hasRunfiles = true;
 };
 "overpic" = {
@@ -24147,6 +25585,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.5";
 };
+"pagesel" = {
+  revision = 56105;
+  stripPrefix = 0;
+  sha512.run = "c07cd3b48fd5cd59ca685b1ae39da7e7d8774348241c26d29a74b41ee6c29fdae0c01a47a79aa669cf6651b0b83a5b79f8424c139c17db5bca20d30186e5b655";
+  sha512.doc = "eeb70877276b393cccb1c0e301c191480e5aa52715738ac6d01b58be864b065b3b72afdbd90d3a398284671682370300537d4953aa2adf4355fc6d2278d2819e";
+  sha512.source = "457c52df8dca820c8ee39494630a077d0a14f58f7308805dd0b5f5dc374fdaee83581cab3543d7a9ded91ef94f7555f2d2b2420a6ff2c9ddf7c790b5407f468a";
+  hasRunfiles = true;
+  version = "1.10";
+};
 "pageslts" = {
   revision = 39164;
   stripPrefix = 0;
@@ -24238,13 +25685,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "paresse" = {
-  revision = 29803;
+  revision = 56621;
   stripPrefix = 0;
-  sha512.run = "92c265c8f34f24ea37a478926c127b203b9ddd143015875869745ea1633cc1458cfbbf4129f24ff141e91724f9bbeb1384912ee753ab7a26336c8470897430c3";
-  sha512.doc = "ac71db33fbc694555438441de4d03d5277c598f12a7a59f8d0b4df05c39bb29571691c3165dfe121deebaa4bfb90fa5e7b1a2460d8731bbaa71502ee79b37a00";
-  sha512.source = "4c442470bc63c0cf2df221e02c890aeb1375c51e02753618ba51f13f20e054769e700b6d226c8d2690f8b49d86bc0e0306418ed741c44c4bc7127986b6941935";
+  sha512.run = "7be25fc749a18d1cabc6ee720cef15b89e323d4e07716b63aa49a5eb4c89208f730513491a7b6740069f0daec3015ada3d673aed6407b21a8a1ae1dd09f60d7b";
+  sha512.doc = "cb01df5ac56c7cbeab0cbfdb99950ddbe58cb432885702b2212c89c654cb2a88536be20a4abfdda5321f2cb36e8528fdbe2b96a129eb8afa2c1e969c0f22398f";
+  sha512.source = "50f683ae5a7d46faa5740766e01a7637e9e1f149b6763e48ed0029814add723b551d76fae9baabf562b1bc5268ed015b7619fced2492478b2be2ec4c4f63f57f";
   hasRunfiles = true;
-  version = "4.1";
+  version = "5.0.1";
 };
 "parnotes" = {
   revision = 51720;
@@ -24263,12 +25710,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "parsa" = {
-  revision = 53130;
+  revision = 54840;
   stripPrefix = 0;
-  sha512.run = "5056c44131038c65cb945ce5f7e8415381be16c6c5186ee4f747acdfe99b1d31e94f5fe1bd038df0423277300d92889379ba080c30bc5dd9f76c868474d5a553";
-  sha512.doc = "3e99c9ec2faafbd53a95ae6ba1641fe4eb0857f1a0ee46a633b162354e6c91f406cf438fac136d2e6085704bbd3f79a8814b6e4b4fa9769454b1812b9528bcf0";
+  sha512.run = "76edfb996d6354536b009066d4916b5864b0be1a55954a627380d4927eb05bb888d80c0259d52d367a8be58f5b20309cf65cbec0e8d4ebc6bef2b3840bf4d207";
+  sha512.doc = "9cf2df697f90c46bc119f4df1816a734344066fefc54acb37a6fd2c127401a4f8ba12dafe0350d7bde90212924e40f08a500fddceaed44d735bcaf0ae9e48cb7";
   hasRunfiles = true;
-  version = "1.1";
+  version = "1.3";
 };
 "parselines" = {
   revision = 21475;
@@ -24280,21 +25727,21 @@ tl: { # no indentation
   version = "1.4";
 };
 "parskip" = {
-  revision = 53503;
+  revision = 58358;
   stripPrefix = 0;
-  sha512.run = "783e6be1ac9fa993d73c3c68c2fa3a96484e191e97a7f9b5d1027ed7aad11d3209f6d56d25c5f5f982cdb249c7cdc8dabce51bd8fb5d919da95665da04c39893";
-  sha512.doc = "fe5ed5b4a7a89917603859623cd053c7a4b78de2f90c85bcf18e829b4e44e7e72a094408008fce88e2bbc0b2f235b38014aecf471cb8c7554a462065df60280d";
-  sha512.source = "aad22e5509a07019dec39da136b9e3754235d4151c19d44006d5b0ce7f56e85903a7568bb6006943db9f1e6a54eea9e012c4ee29db2ef06530152bd30c0aebd2";
+  sha512.run = "2d64232f41b2607712bc67ce77ebc987502924ebaad4f799b6ae2163862a8b833a9c1a7c8871a33b4ed9fdeb74c8368897e1b831c485ab82e084fe3ff0552af3";
+  sha512.doc = "759e9e8d698f8ad77ce388ec127f158a7280586338c6e56e1f9188a9a2e8106cb482f8ebc4e252749331e65ac2a771884124b16e3ea5e9ac76005439ca85876b";
+  sha512.source = "4783fdc97f269963e4d5998b2d8066a676f371f5034bf5204bc9e5935928f153dc0a4aaaeb11a403baa0631d545a18a1cc19dec4ee42314e1f33b239a9cbeeaf";
   hasRunfiles = true;
-  version = "2.0d";
+  version = "2.0h";
 };
 "pas-cours" = {
-  revision = 42036;
+  revision = 55859;
   stripPrefix = 0;
-  sha512.run = "0110f82a7e0fe6219b44f645bcb01a5ff97a8a6800c06cb9b6bf10cb15a5a4749d82728622e23e11f272bd2250f3e1757edffe3c9d27f808a3e2bed5f4439166";
-  sha512.doc = "ff7dd904160a21ad3d84a71f75f6b25fdfa3aa0687128f2f2eda19b2d590a91d0db1e654dd7d1fd7be9bd643e008db1f0c30b2d46ee6e3b02d0d71bda2b964cf";
+  sha512.run = "a2a96c526de2581461941553b0c47bb4b08b3a9df03ffd121d14f3ea6e8bd62227f12acb4853f04240608a805189f4d90459324801ee25def1b44c48ebc83bb1";
+  sha512.doc = "7bbfff0a879ba2287e528a63815b005a2159800656078db2ea2c0460887dd15772e04b1eb8953446c86281037180d82d84172370e015d2c66dcbf23651c6a182";
   hasRunfiles = true;
-  version = "1.6";
+  version = "1.9";
 };
 "pas-crosswords" = {
   revision = 32313;
@@ -24342,11 +25789,11 @@ tl: { # no indentation
   version = "1.05";
 };
 "patgen" = {
-  revision = 50602;
+  revision = 57972;
   deps."kpathsea" = tl."kpathsea";
-  sha512.run = "524ea5aa09feba7ef5efd47e35d8d94703be4e191bb081d0b13007e853e88729c6029451e58a7237ad5ddf524c4d0798421316c38d1d9374ed7cd05f2744f761";
-  sha512.doc = "136e6c23505593788da8343f4dffccee77ffcf9fa63382871507db47c3ff23d6c25d0cefc985f67e4ee137840aa3af8f1738a5b2dac5272e568e73b18b71a5e2";
-  version = "2.3";
+  sha512.run = "35e75b2c644238784e3e0fe51726a6675e5b56818f37d2d0b6393de14f03832bade756eac1f8ccadead1a287a442363eb1ba356b29dca1e7b3dae3ce276f2cb6";
+  sha512.doc = "a6523561f63e016bb352ec6afa33b5683c7f8ac76a5442cc8d329a1246b7f5b78dc62e9f7da2f33ee50b851d73abba35fb61fabbe05e6cbe21019a9fa5a1d898";
+  version = "2.4";
 };
 "patgen2-tutorial" = {
   revision = 16490;
@@ -24381,10 +25828,10 @@ tl: { # no indentation
   version = "1.0";
 };
 "pax" = {
-  revision = 26112;
-  sha512.run = "3fa85993a3cee32753a6b965a2e7a97cccda36f2c32941e8650026d90a8a69c93ba1f762f802f15999b3c32e327e1a98d970217613a660cc5fac68cf3afabd6a";
-  sha512.doc = "e4a2c6b4220bb498bbc1f74ab8fdfcb65d261ef944a43a86f9007bfd0073c9c6aca08fb136c8b1516d78fd3a37bb00388afc95874778fe453e75f0ea615ef1bb";
-  sha512.source = "ad5e65d29d540d3736bf7045c0c392d79d2ba9c9a194a7d04df3c76729105b95c609167900e9b4533d0ea353312c452de0cb02f303b0d5e777c0eddaac0c18dc";
+  revision = 54512;
+  sha512.run = "ee6d006f6f4dbb16cefde5362c9b1b43e470fe03565724ae4a64f8c889dce3d2415d7d1da10bddd1bd137ee042ca2b6369e7a2400ad888db060b44ec2f057a3f";
+  sha512.doc = "4495f8c1ce62e37565947c520f7cc638c61d984a394fdc833146c1010a8ef5a17a56340eb70a980fdf16ef21483f33ebfa7cc02d6b212ddb074739862f0ceff1";
+  sha512.source = "b47294dd79cfebd9f0ad48d3a17d54e6b4d8e8ae9fa2618f4299c6cf263de9f3342675d971d8585f65f906aae45a5a6ca26fee999f30137897a25ae59177e6ab";
   hasRunfiles = true;
   version = "0.1l";
 };
@@ -24396,6 +25843,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "5.0";
 };
+"pbalance" = {
+  revision = 57161;
+  stripPrefix = 0;
+  sha512.run = "7db75e950aca473dffc3d3efb419bbe33b5f04d1a0295a73de3d7385883d576f46bf377554ffaef44608cc8c6df3f3594bd0a0e5ed7ca649c7ced5c5834192db";
+  sha512.doc = "98828ffca4f1e4dab5b51e45028058cff1af38cedb05f1b0a201bff1ddb508374da6fb0d77ff4d14bdef6ec04a468435dd9870ce0f1e34685fb982f21c982e79";
+  sha512.source = "21236f5d7cc9a64472d9f214777331d3b230773d134b0ed5a83d1a3dd21c2d4a76df78f42824012d4edaabfeab612684fa2577bac3bd4070ed2b5956d19272dd";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
 "pbibtex-base" = {
   revision = 40986;
   stripPrefix = 0;
@@ -24479,11 +25935,11 @@ tl: { # no indentation
   version = "1.7a";
 };
 "pdfcrop" = {
-  revision = 29348;
-  sha512.run = "eba7fd5c529e1b3a29d00ee679c24748050f1a6005391de4bdb6e6fd537cd447b01e6569e0eaa87251d49e14f548dfc80d5e33f037862a4e978905af37e9e186";
-  sha512.doc = "5deb207030892f9e351d511bba20e65e957b5db17df6af60022c3f069cba127be6e9bdc1e94600b6f36af8f35697b041ac5aa529ef7997f57264b1dcbf76ce2e";
+  revision = 55435;
+  sha512.run = "ba611ee2a516fb031a7f3c93f563b2aaa2e50d4ef95433a5d83ee46191c2a6001fdd4ef25f33166c0e3f9791e85c200e452684974d54d34e8d651a7254f6652c";
+  sha512.doc = "786fe00793f62e09f225ca0decdd53ad3b2ce03a133a2ae4ba20db9d40352863dc6a8728e005aecfcaec06072e8a0ef454d1f7fbe90bfc5997cfc65c6ab97170";
   hasRunfiles = true;
-  version = "1.37";
+  version = "1.40";
 };
 "pdfescape" = {
   revision = 53082;
@@ -24495,9 +25951,9 @@ tl: { # no indentation
   version = "1.15";
 };
 "pdfjam" = {
-  revision = 52857;
-  sha512.run = "9515d6156948df018b5c775e0882912aea5231ba73a30c5dbd33c258542a6afa936eaf9a366a0d498faf231e4e5ebe7485ad928c78114ddb9399b6f26f48c5ea";
-  sha512.doc = "b2d6f867ed37f8f3443e0a88b2e1547ef755756409ea0f25e0982410394807f40a7b0bbb89d56e6bddd8fd65607d43bb28ff7bed6751fcabecb284ed1c2aee89";
+  revision = 56991;
+  sha512.run = "1b1084859a811861e60e27186d67d267d3740152331f50fdbe67ce7226a76b4db24d79b674e6511d2f3de9a711da3369c565d781614f5d0c1a8021bc1ac18827";
+  sha512.doc = "a29c09a2e843188135265aaec690e09cd08fe29076a0378b308ec0e48aa7936ba0edfa7d6ad3ac808ec334bb5c2793a32d8ef625f4ad9b3fea40d4db567cae56";
   hasRunfiles = true;
   version = "3.03";
 };
@@ -24517,6 +25973,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.12";
 };
+"pdfmanagement-testphase" = {
+  revision = 58511;
+  stripPrefix = 0;
+  sha512.run = "fa4a79e078e2aa29862db99a336a614387df52a019d0a42b6bbf4ff8d222bf44a16577d3d491ca0f3c8527a0dfd1bab1839db891092dd0a8f3480744fba2fcba";
+  sha512.doc = "03503b2f0e4390bcde34266610fa822c192fac1cf5c800edc2ad77c1b925a964e9564d12fe9104f675b243bb757a96a355aac26b0cd95ff701210b3afca2d15f";
+  sha512.source = "8bf95f64fdee7517af5f3c312c32f1c705d9b2348cae1ec44c76855b7729641509e6f89192a5d415357fbcae794178767fcfa5eca72e0d688246a6a5c5ca03e8";
+  hasRunfiles = true;
+  version = "0.95c";
+};
 "pdfmarginpar" = {
   revision = 23492;
   stripPrefix = 0;
@@ -24526,13 +25991,13 @@ tl: { # no indentation
   version = "0.92";
 };
 "pdfoverlay" = {
-  revision = 52627;
+  revision = 57923;
   stripPrefix = 0;
-  sha512.run = "089e33b32284fa775bd8a5e9b47604f5639060928f54397f775103823822eab11640660a982ff8229e8c1d63baaa26086bc144f2160401fc25855015638c5f0b";
-  sha512.doc = "e4d21dee8c619fc301a75637f2f5fe8279e4deba63f627d153d47a90ee0cc19031547631acad2e9936aae456c330a7242aac9540a0b5c217ae7fbbfa2b15a29d";
-  sha512.source = "ac11650b32810ab9b1b05892d301b089eb6bb81304720ea258d7ad7efccc036528dd2acf5b0d0eb8666a238e4c01557c60d86571cbfb083475904c52f6a2c5fe";
+  sha512.run = "abb74e43656273b8b7944ced516239ce7fb33ca57daf137d1576dc3c5d013982a10f26e0196669f821412a58dd2da36411ef1fa8e81e4e61103ae583ebec0494";
+  sha512.doc = "2fc549ab29625cbc2876655d6414dbbf211ce935ed9e676561c40c96045822aa128d7d55f0431ca059e3f37ae6d8e68984652381f31809dcba378c85c6f15b54";
+  sha512.source = "d89a4cad67a338ecab1c413c36a451018d7ad86452a470c437a91f023019c78392403da4f4c57c199a4487b6011c8b43b5f51607a6a24014b7cd4eab2e063fc2";
   hasRunfiles = true;
-  version = "1.1";
+  version = "1.2a";
 };
 "pdfpagediff" = {
   revision = 37946;
@@ -24543,26 +26008,25 @@ tl: { # no indentation
   version = "1.4";
 };
 "pdfpages" = {
-  revision = 53583;
+  revision = 58212;
   stripPrefix = 0;
   deps."eso-pic" = tl."eso-pic";
   deps."graphics" = tl."graphics";
   deps."oberdiek" = tl."oberdiek";
   deps."tools" = tl."tools";
-  sha512.run = "0f8b9efede65eacc6f0a970ac30bd8839ef521e01ed2cb4672882eb768ea36f1ac2b6df72275c681a952e827253d35e43c77b4cff675c5eef3673ad7fb94675b";
-  sha512.doc = "1a0143d380280618be15f5fa2227ef27969e96dbf58ee8ef1d167b5864ef2565af0225ba2d6c5fb5e81ea03f78ba4fb8f2d4a1266c5e4a7ab834186489fbc66a";
-  sha512.source = "a833ed5aa8059e344a6edaa9f499b419b3f0fd3a0d23499219d4a3391c28a0fcf9afdda0ebfba4ddb9233a47f80b71d07fc87773d0c7ce9a51aa9954e8c9198b";
+  sha512.run = "a2b9394389ef8a14f6e82b4b62e33fa1cc18c2f7c1069109afdec8ad5769b4869c10b8cc50118aaaa6af87b08150979744cd16898804bac40daa043e49d36aa9";
+  sha512.doc = "b71da54d15d16ea74e72e09a46403d545e32c8e0fd44abf2b3bb7dff7ed1cc51c93bfacaa482037adb2b0010b060366836c25e66def3144ed504bb6623629f80";
+  sha512.source = "979c80e7590d9d1b40d667a69da2e2311ecc814575189d8411f13a1095ca3f09dc5ac97a40d4eea2d6a22616d1312c3e4aca45777610f365d24ef97b9acffd50";
   hasRunfiles = true;
-  version = "0.5q";
+  version = "0.5t";
 };
 "pdfpc" = {
-  revision = 53902;
+  revision = 57735;
   stripPrefix = 0;
-  sha512.run = "2f7a04d3cf55e996bb6507b7dd85a1816bd0ab2c26025b9a46f7c111912237b91889731f656b2490c06db5756e5241cb77c00c59215fb5c56a6d48d16bf7ed91";
-  sha512.doc = "b49f357c4d08dfa8802218b30b1dc94f8db8fbd612399245333a26d93e543534899d7f0884222481fc5758b90220779330a85094317636860b44c9ab16f8f6eb";
-  sha512.source = "ea5daef06e63cab760cf70c51c3777a44b223737709a65ef6ae232a0c040deb38e58983b22e862e1a8bad08383fddaeebbe0ded9c0b384d0a283a21925052aa8";
+  sha512.run = "d6999d1240945d2813e189f836b102a4ead5b1ccfd469be794a0bbc9ec6c65573783b9409f8a1ab352f2742e435051d2ea0ecdd6814adc629da525a89e831e2e";
+  sha512.doc = "d8fc1f2ac7c4e6279ecb1515d845e29dde39bae7166f44785064d7f7686e8775ef69e82480c42fc68a8d6cc92b9ad7deac3bd236fdbf57a93596e5e99835a068";
   hasRunfiles = true;
-  version = "0.2";
+  version = "0.6.0";
 };
 "pdfpc-movie" = {
   revision = 48245;
@@ -24613,17 +26077,19 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "pdftex" = {
-  revision = 52874;
-  deps."kpathsea" = tl."kpathsea";
+  revision = 57973;
   deps."cm" = tl."cm";
   deps."dehyph" = tl."dehyph";
   deps."etex" = tl."etex";
+  deps."hyph-utf8" = tl."hyph-utf8";
   deps."hyphen-base" = tl."hyphen-base";
   deps."knuth-lib" = tl."knuth-lib";
+  deps."kpathsea" = tl."kpathsea";
   deps."plain" = tl."plain";
   deps."tex-ini-files" = tl."tex-ini-files";
-  sha512.run = "703fc22a4d9f9251666491693b526a2622f63ae05d1caa402219b72d680a43a9eaa1294dea53144a7f0ca326ab7b88405d0fbca9e9652444bc1f34144917df99";
-  sha512.doc = "cf15ec2fa6cb7230edf4a22a6811aeabb48b0420275bb6be4b2976593e33865837e50b874ab7da7a7b536cf48b74a805b93e154d4cafc42542995acbc49e29a4";
+  hasFormats = true;
+  sha512.run = "17c2b07af5e14f9f581d1094f4a3657ec1fe2b19fa96d952d1e4859265dc26e42743dc1fd7e8d6a7de56867be1b50a7071524d0580a8a680c605146893e7ff1b";
+  sha512.doc = "8422210dceae381676a4c03784ab2c9b0e9233913eca6d25a9a7d5c5675f9ecb32f0a93dd624dbcc715f20d7e386a7844ea00e6e85473c1af14f8e384cd3f61e";
   hasRunfiles = true;
 };
 "pdftex-quiet" = {
@@ -24634,18 +26100,18 @@ tl: { # no indentation
   version = "1.1.0";
 };
 "pdftexcmds" = {
-  revision = 52913;
+  revision = 55777;
   stripPrefix = 0;
-  sha512.run = "04bccf5df6e3d0e70673cad77a778c47eaa3e733ee3b30062bde6f19126aec573bd8bb3e669b98ad61a5a3e04af4a92fc038340761ec5da955254c2874a669ba";
-  sha512.doc = "932a1d8224152e54b34e5dce7f2a2ebb36d7816e3791b3d95399fe34a2c2dcd2a9487caed2e082c5e5e215e64ebc8a095a2ac6e1ee898546ea1f906634dd1ec7";
-  sha512.source = "628dad73557d9bcf1debd807618e6954ff6a844ca1d89cb3c96119ba6ba42b7cd88cba9035bd1ac43f34499b811aef1f503c4fb9f52de47137afe037df6a8c69";
+  sha512.run = "91054b61b76382813d80e873d908cc07f8571b7651f49a3dc3e87063507af43bf31107c34187b703b0c4462eafe0cd605159803c72cbf2821cf6ab3afb78fc6d";
+  sha512.doc = "a16db56366e80b1694b78919a245336c37690ea9a1305a606a3bfa85a73c854e92d1cd8b9ddb0bdfdea82f1ef684d06d8b4649e4111c39f24f321dbcb01aa036";
+  sha512.source = "f3e62a5f9029f71c652105b137048cef4f5562dd0848bb7a94d251e2af579c394322a70f40aadbed3ac56312005d59124ef3fd5a2436127a72c430d344ecede1";
   hasRunfiles = true;
-  version = "0.31";
+  version = "0.33";
 };
 "pdftosrc" = {
-  revision = 52960;
-  sha512.run = "6b6fe771e5dd9523fd8d35456865068d980dbaaa8a8c3228ac4578b1b218c48e2fa851a7bfc89a77ecd9ee6c2eb743fd9da8351ef379a149e5318cdd3dbb41e4";
-  sha512.doc = "96f268374f722248cba88a62cf81ccab39414d031345496044b4d2fa1b966d7e0722fa265d89f91ad755096920e937775c78dabcc4f60bd06645ddd990b18daa";
+  revision = 57972;
+  sha512.run = "5332cc41dec6d5a7f4386d05368f21bae2aed20be6244873243fbd5e47a4ce257a64c4b1afe3be88c6d4745b655d61091e5efd6a86464bb6e20cab076ac32137";
+  sha512.doc = "07836f31e216591fa76bccdfc0adb60914b9284ecbd9097a16fb92e5d31adba9a2a9558821d028ac71fc846a3f051fe64afc0c2b5fdeb91e08308c1fed39f5ab";
 };
 "pdftricks" = {
   revision = 15878;
@@ -24664,10 +26130,10 @@ tl: { # no indentation
   version = "1.01";
 };
 "pdfwin" = {
-  revision = 45797;
+  revision = 54074;
   stripPrefix = 0;
-  sha512.run = "7f1fafb7396eadc81ae39727f35b1f49ee0fecf7ca1950d8fd5b80c46d24811cfa779a6d53b10c007a7916e14584de5e88f2bb5b1f3ef8fad739dde63e56bc0d";
-  sha512.doc = "d352311a94d9f673ea8c6460f6771747b0523e2c354e5c7114cc58d7e0e92210f4eedb70a728d423de387a2ed2a3460f1acbcaef38579a26d2225f713e606407";
+  sha512.run = "13981a137ab920fe72e1f79ae3bb14bd9e37cd4eb4dbb66095926e54eddfd28903b403a896a013ac40fcac80736c566e983e34fb9b7a54d0759148ce33af14aa";
+  sha512.doc = "2b8d546b5591773cb9ec3ee407d7390b81e8ec1a6232b626ddbf9bb2cdbbc8c9c00e08ae4772a4b67cb38e96ec2be3db981eb163d412738e5e7bf94e5196637d";
   hasRunfiles = true;
 };
 "pdfx" = {
@@ -24680,11 +26146,11 @@ tl: { # no indentation
   version = "1.6.3";
 };
 "pdfxup" = {
-  revision = 53345;
-  sha512.run = "db2713a1f00dc2bb641094b4f1b84ca233ee3a28ac9bb70f41703937f51aece3d4f7b8803fe158cd4a470a859a81fdb68131a95ca32aca50eb9e83fe76b26f11";
-  sha512.doc = "8d37a4bd8592ab172e59b9722712b4019d47cf6e732e6eead889119bdc396b4620b6aeb33d27def1b3f641e326cdefdf80191259386cb2a18292890ffaee9b14";
+  revision = 57166;
+  sha512.run = "c000299a0f21b6fbc60e23ac163c55414e939f5542006a1508e8f5e143fb64cd40b8b57e986c07d99e4bec8e9f1d0d325955b4d34af08ba73a58f77c1a0d442a";
+  sha512.doc = "9ffaa67a311531694f67a88cf41266858ba1d92a6d390fec2885a30a734922a48f4afe390eb6b3ea980c7ac79ff67f0d393927f7bdf3ad0bd3d30e64fd098d96";
   hasRunfiles = true;
-  version = "1.51";
+  version = "2.00";
 };
 "pecha" = {
   revision = 15878;
@@ -24702,13 +26168,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "penrose" = {
-  revision = 48202;
+  revision = 57508;
   stripPrefix = 0;
-  sha512.run = "2d61b2b6a46cab4a0cdb5d306eaebebb85af41ef75baef395dceb253ac68966fdccdf2317c6d26c24fa359e299f13823e4f69c40959cb2e88045b65ecc1148a9";
-  sha512.doc = "58bd3b307c33494f61a28c897ac25a6587ab550d4e1ccbd5f05d101eba6466fb3981410084f34d7fa16570b3af6ed1e56cb5d9cca18429fd23d3371601daff42";
-  sha512.source = "43be9c9925c707c96292d0f7d6d7fb9f745582cd0d39e8a0323d3de766e56d9dc4964800568bfd6bef83231a91ce4ee17274491bee931b2214e5f4aefbc18b0c";
+  sha512.run = "b8572b376e006126dfb925758e907f3993c7eb0a157a57a6a36c99103f3ed7ac58ae406f6888b7303fcea4c43b67e50162af0235d7d923e79c497c60403a3e2a";
+  sha512.doc = "a02fb2976c23ec8dc51ecc70fb6e702f62ff6c8e14de437e2bb3a478a432034e1a87f92266930e5c56931e4db8d2bb0bb8ab1c464ee4c8ccd15cea0df8624e61";
+  sha512.source = "d40b7a787431ac7ad6af14de17bdf749ec5743f3a95226f084bbf3bdf4ad720b43b597dc432c9831d871f030eee049e08e8bad9d2efae63e9d588db31ae15178";
   hasRunfiles = true;
-  version = "1.0";
+  version = "1.4";
 };
 "perception" = {
   revision = 48861;
@@ -24718,10 +26184,10 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "perfectcut" = {
-  revision = 51744;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "3537b9010fe1719e6f27c800d6b81f01007d0c223a11eebf53daea4c67dab02ce94def02591b4663a7dfbec3eb9ebc4e7d9aac3db92707904068bd53d8567367";
-  sha512.doc = "41ac483d2c8662a29f85936445ced063f0325045513a1b703828f8af8b2f544a3054d9a65bf66669025396da698b8e14533f405ed24f37738236b65d17a9439c";
+  sha512.run = "edf0b4dc69d24b4515b0285dd4f4c7a89dae239eea2cad7cd194e9625dcc7e306c295ae67869d1e58d64e0f68d8c39779e0cd90a4c4f5a4e769be73037cef75f";
+  sha512.doc = "84443432cdd05634c4f75ce3b912bbb2f1681237cfcf3c34ae070fb07e0342b7a5a0abf7dc4d26994bb7506ad3d6b5bd008d4a2cc738b418cbb9b397ecb1d2ba";
   hasRunfiles = true;
   version = "2.3";
 };
@@ -24772,21 +26238,26 @@ tl: { # no indentation
   version = "r36";
 };
 "pgf" = {
-  revision = 53349;
+  revision = 57240;
   stripPrefix = 0;
+  deps."atveryend" = tl."atveryend";
+  deps."fp" = tl."fp";
+  deps."graphics" = tl."graphics";
   deps."ms" = tl."ms";
-  sha512.run = "afeab677fa457cb4a12c9e3531749fe0389e8f84f0fd46fb077ea898200f3fa5f23fffd81c430d36f67078a42c8ecf624b6ff1a1809f17d2223dde72249b729e";
-  sha512.doc = "538a31e071a8eb8cd8b96046032e6ff059fc6841c908d89a29e0f3c16773658e6bf51831f40d261598ded5a33f33e03d3363dd701c183bc7cfe56028528671b6";
-  sha512.source = "ac83feec231dfcff261bd0afccec5e1961d65f8e5e31e7f493c61c9e5a02c1e76db724a32eefc5947df72d2714d1c533820033c1aee4fd8d7201832a541e6551";
+  deps."pdftexcmds" = tl."pdftexcmds";
+  deps."xcolor" = tl."xcolor";
+  sha512.run = "da45fe7a5b4e9aacf39c64da1596a30ceffc8751ceb6543b20f6d3f2134da75eff7684a72ce15fee9d1e4404efcf98d9fd3354d9c178caa3881a735be87c9073";
+  sha512.doc = "697cc2e2503f3d71cd751530e1e9d8c9ada584690b212f03b7a15808b9f973de532dbbc144ef924b4e806d849cabe2850d1ae802c51b073d84e567349c29fb90";
+  sha512.source = "2fc269eea7ef0c9ee04e15961494f4efa6c12a03a6c0a269a400d031fe154796c67ad96e22efc4ae077a87c38802471b4e0add5e1187249a2b939f8e8fe13d77";
   hasRunfiles = true;
-  version = "3.1.5b";
+  version = "3.1.8b";
 };
 "pgf-blur" = {
-  revision = 48446;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "a341495270be35f6824a10edff85edccdfe4d9a0f3cb0ba50ede1b8f5970dbe93b0d5567f113b5c2dfe0661f7201fff710cfae0d9f3f1420245520486775e399";
-  sha512.doc = "4cd2faa5160e0286f8b23f518c857b957e9873c0f8f1ec54f8156acfa1e15f7e8c22e6b4691d07ea929b6cc3c76847413fcb9223852bf26efb1c6455909e1816";
-  sha512.source = "b254cf39510bc1604af7f238a00d9ea9ae615a1a99da8714c11079553fcae3e26dc8534e6fc7797dcb1fc02dd68a6b236e05bfb4b58bfeef8f1cc8195e4c5c05";
+  sha512.run = "95093365a79d7f8a2df134decbac172a080711bcf8e8f77267ea4520ccc9aa398f5fbedaaa5500fa189b3873d8897350dc2c99f142b6bed1a6e7705293a3b8b7";
+  sha512.doc = "d313e5ed1a0b5637996d6bd1827b909a771fcb44490312c502acd89412966d7662b1482fb8f3347b8d658b336051773c3d10e70df9c1f22e810802936eee816f";
+  sha512.source = "c8b7baeb30d520d05d53d6c37f70e028d8622d59eadb7b8aef9c26147e5ae4704fbf45798315597f6ecb65a15e4c8e8e18dcc0cac98b0cb69efb191645632710";
   hasRunfiles = true;
   version = "1.02";
 };
@@ -24799,6 +26270,17 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.2";
 };
+"pgf-pie" = {
+  revision = 55342;
+  stripPrefix = 0;
+  deps."carlisle" = tl."carlisle";
+  deps."latex" = tl."latex";
+  deps."pgf" = tl."pgf";
+  sha512.run = "b187fcb3e38b7538b1f0f52b94590198310e5518862c8ed6e0c5a01f66328e15f3a425eab827bef4a045ea7f7e822bca4f213ed5a5bf25c429f00cf0939bad88";
+  sha512.doc = "9828ccd5976095450852f2b63dc3937ea24a1a80e4617d9ff183ac80ebe69913ce8cea13a90621e352762e904f338455412148c0fc4159747dc13cae3b2d828a";
+  hasRunfiles = true;
+  version = "0.3";
+};
 "pgf-soroban" = {
   revision = 32269;
   stripPrefix = 0;
@@ -24808,26 +26290,30 @@ tl: { # no indentation
   version = "1.1";
 };
 "pgf-spectra" = {
-  revision = 42986;
+  revision = 58467;
   stripPrefix = 0;
-  sha512.run = "868fbaa9606718d30a18b710f2295f6e17f31f8a30b724802c765cce872b3b6623539217912bd20998f43777d0a10a036dba01aa65f66f0f89816872ebebe5a0";
-  sha512.doc = "28c0aa31dce7627d9c9db7ebd0f9d8efd6e01b5c6cda5b417fb24c569df5c097745b95e94d0ca328ae25649505fae154976e393d60abf39ad775ab7e73b12af7";
+  sha512.run = "4f1b4a80df4243ab07e52795573a7e3f8e151353042a0a360b01d9b46f44077ce5d71342f187355e74c3bc23bad3984c4d0aae9a970a28ab014d403cfdbf46f9";
+  sha512.doc = "e7710b4c68ed835f7d2ebf16db0c9a1405ad8b3a2824aa4aefeb118795eab12ee6b22e0b764e815b6aea8c37d06d2fe51af472adeea6f587717a1b4831667007";
   hasRunfiles = true;
-  version = "1.0";
+  version = "2.0.0";
 };
 "pgf-umlcd" = {
-  revision = 33307;
+  revision = 55342;
   stripPrefix = 0;
-  sha512.run = "323572892f452d609286e507032c03d7301b5822dbce0ce3bf3a588a75a307dee0981f2c6c49cf17017c967bfff0d23bac24d7bc06b66475b8a9cfab9ae906a1";
-  sha512.doc = "18a494bc6e6c016b3da4d5d51c2cc529ad515b69c6a150623ffa6dec4cc92474766dfc50cbd9c894f491f594ba5f2af4b1796d3a92da21b99272bba9a65bc92d";
+  deps."latex" = tl."latex";
+  deps."pgf" = tl."pgf";
+  sha512.run = "800b6f5772cb6e20d5487263a35ebdb1ef491eb3dda2f37a2de89040758c7ca8f2a3541a4ca7e64155d18595ab2a814684a044569f87810d6431aabb938d87a4";
+  sha512.doc = "2b67b6e216f43efaeb33089a830786dd03137b2d0f43e8a998d8381eab8491e095251d0d534c34112f1b10758454711d0a4607327ae385611f8a4d576cf05b91";
   hasRunfiles = true;
   version = "0.2.1.1";
 };
 "pgf-umlsd" = {
-  revision = 33045;
+  revision = 55342;
   stripPrefix = 0;
-  sha512.run = "e32c27e2c779ba362435fd0901703dade14836347afd99b7f8e55dd91d5724ba69fd517c39bf52d95189351376ad505a56634c0a751bc68df36dea952e30e7a3";
-  sha512.doc = "de4b7c62d79400f107d94fe3101fbbf87ee6bb2cdbb04aa6c1d5eddc9271fc4090b39a79dfc18c45d9f73371f6de09707c342e2cd5ee6dece663ee4494d53ddc";
+  deps."latex" = tl."latex";
+  deps."pgf" = tl."pgf";
+  sha512.run = "6b015603e3daa362e473d795d32fa785ce247b58ec9f88872fe4bdb4fa660000bd87da2369de556f998485a6fcb6dd49aaca549b0470b41adacba5a278453197";
+  sha512.doc = "968d23fcc4f114bab204ec53281975a6fee5f81635ece256351198075cd8463a706954f463beacc162180459fdb3652657f2c060a71c588681f8de6e788a4e6a";
   hasRunfiles = true;
   version = "0.7";
 };
@@ -24859,46 +26345,47 @@ tl: { # no indentation
   version = "0.21";
 };
 "pgfmorepages" = {
-  revision = 51051;
+  revision = 54770;
   stripPrefix = 0;
-  sha512.run = "6e40413358c57b2f16153c12a9f227563f107bbb966c795bd2d1d0dc7444b2acf7ad72631f23903941516bea803e4c539399884fb4e479abb61b4dc9a5bde428";
-  sha512.doc = "b8e0949fc1aeec50514fffa3fdd88ee96017207a39f1d8c15b326604192eb2277ae6749c5faa8f531bbb0e3ad3d0e25d3c0478583538b2a8ffbba5e3f780c9ed";
+  sha512.run = "9a4fd2f42276cb72cd39dfe3cb5b6c43855e1d7f01f47c53b23c8aae7bee98c89e8a8f784a917c0c4ebc35f9dcaec18b8d4f6bbeb05ec5a80647ff7ca23c02ab";
+  sha512.doc = "3bef05b263791c9b1e92868ae22966f5638a900d44ed9ab9de5beeb0dd25c7e8745d09da4cd3c2c7a9e9e5c710126cb7bbcb67579e770c43e6c7e057dcfdd1b5";
   hasRunfiles = true;
-  version = "1.00";
+  version = "1.20";
 };
 "pgfopts" = {
-  revision = 34573;
+  revision = 56615;
   stripPrefix = 0;
-  sha512.run = "39b29273305a894c37bbb8f2edc899eb69cabed78623ec5ac66d6a75fd7d6b344c1fe4813f56383acd1c51acdd099fcaf3e97af294c5fd63ffe47e25e9cb9caa";
-  sha512.doc = "8c5df446fe33e40503caeb8740becb28b3328490fb6aac2cf858645a5d896681d6448e5160cd32e7220c164838fb65dcfd85a22a6c6b9205511f6055f23dcabf";
-  sha512.source = "ba4043a5ecaf21c1afc3328160c6832b67103a9b9c278665f0ebd91f21d842f85eb70e7a2d7385d66f9910006205d59042aafc994a2eb62762f3dfb5917c10f6";
+  deps."pgf" = tl."pgf";
+  sha512.run = "7d672d626428c37fa749a810c57be43c6102e1325a6d3e16c57bc560b6d65a57bae94e619a73f3e0efb46ce7b4783d05a6e98c64b1e90c6e0f94f1dd9acd676f";
+  sha512.doc = "ff82e0502fdeefe6afe90aad4e7615de9be4ef8e2e6a69e7a537202af77aed00c0895269ceed3d38e0f34345efbdd771d22b0c8759fcb46ff8e91ce639dcd21d";
+  sha512.source = "758da1f3daa0ef888b484ea657fdd4384102868e4eee543bc97e73f103b67c367277f5c00efd06a2080f9ac3fb82c909cd30f641363120e70357450179dab6c5";
   hasRunfiles = true;
   version = "2.1a";
 };
 "pgfornament" = {
-  revision = 39988;
+  revision = 55326;
   stripPrefix = 0;
-  sha512.run = "bf930b8abf986df03e46e8c228e82c4015dd3f671688deabe3756815d86c2ce21d0738e4172874d233c3c7c28792ea7081a32011a3db64d93dc4a8b4c9f56162";
-  sha512.doc = "6909f93df3cd162f36817ae99c7f7da532b9a44b6621d303ec4f4828c22d99d25d4e4c1ddc17f81ce2b070ac8fa40bedf5790a097d3d5ebc095abb88a92fe037";
+  sha512.run = "3d5742197af0b6bc11a14ce5b2198aa7a580655f29757f825c24b4081dbd318d45d4dfca065fc04f0d5f47d92fca166a185c878c8d7a506e4ae7547def41592b";
+  sha512.doc = "b35295915c86e4ee5c2fb9b1ec2d545c8d4fc1cf5e65f3e6247e4de1e77e2f789f7842cf234546d6e658a73b4837cd50f8216cd9425f588cfe4a12c76bd134d1";
   hasRunfiles = true;
-  version = "0.21";
+  version = "1.2";
 };
 "pgfornament-han" = {
-  revision = 51863;
+  revision = 54191;
   stripPrefix = 0;
-  sha512.run = "a53e1595e0ac579cef90379a85465fc3c247b803dea104ce7111de68c6c7ca114c6364ca50cdeda051e2353b85e91b39118c31c3d8e464943b8ac7f07d3e660b";
-  sha512.doc = "d2f429a40d6e1ad24b098039cd212f7667442eaf47b307eaf81585f9443028d03bf612d5f080acc5fa20a153283d49eb8a9550f01596c8d6a38bb9eea4399b31";
+  sha512.run = "7db1999c8f76addc56ad84aea76617fb61d3407bf28256379526058eca3dbc2f69442c6d0214d31832e31048fb1b8419125dd3441fe039a832d573346b15809a";
+  sha512.doc = "68e6720389bebb23edbd5387a3e0b3c9162b8cd0ebdf96825bece939b983033408d01b4739ed034cb9e0d3fefc21c87049f6ace1abc42826757ee6bc7a86da9f";
   hasRunfiles = true;
 };
 "pgfplots" = {
-  revision = 52663;
+  revision = 54080;
   stripPrefix = 0;
   deps."pgf" = tl."pgf";
-  sha512.run = "0ddb564ecc457328291ba09e9162acfdbc19d50d1b6aac3ebcf0d6de0c39aed6c3b5efc8957c59850fb49269e6d149f73f4aa5b41e176bfd8d3b99ce38a15a61";
-  sha512.doc = "b9ef06b1d001a2dee3474ba75d202b428a50319f3ca90c06cafaa3e514f62abcbcecdfd8880d486ee363d15d6122b2c1b25b4051442e690a7beda0365a1c850c";
-  sha512.source = "908b71f3dc64400be750d7b602e94d864d35c3f7593577610507ab7fcb959afb2b46bf6d1e3cb4b2382078861c21279665dd2f7387c2b0f2f0db57f10b84d220";
+  sha512.run = "65364a44b5950ece4c6b6797b149a147dce134f89e2d9402d9a42e656c4a1170c23cc66c8357599addb8283617061850247d9d679fa2ebdd2ffa90b311492b6c";
+  sha512.doc = "65a01a28b2e9e14f5277f3a6c91fcd1dbcd255bffa7feeb15132aa24013fd59fe5f5feb6b7a2521328ca2060c7eb8d2eb70b1433f32452b2f661c5ee7142f336";
+  sha512.source = "26eec6b3828e218f34a92b1afd8d457c67340289b85678baf7bb6daf5b9e82db44aae87a2020c41f8abe0f4b515b9c177e2a970c8821b0396164e3d11e62366f";
   hasRunfiles = true;
-  version = "1.16";
+  version = "1.17";
 };
 "phaistos" = {
   revision = 18651;
@@ -24990,13 +26477,13 @@ tl: { # no indentation
   version = "1.2";
 };
 "philosophersimprint" = {
-  revision = 41788;
+  revision = 56954;
   stripPrefix = 0;
-  sha512.run = "05f9639dbc34d0fd653f2609c581df2e50825cd61af7eaca55f03fddee2b0bf1c0c6bb3258fe10265cdadf0d8371d351aa143327a07f3739defb4ca3ca9b4f16";
-  sha512.doc = "45bf6648cf92ee58d35847845094614884ad300d5ae745a57bc036d72bf7a1cf8dc7596daab8c606266c717b0114727072298f91b61e92c40dd180bfeb678a3b";
-  sha512.source = "9522941d5b9fdeb2eec1f3f91bdb6649da45ba930ccf11599e532352170279f67e40779b9af5d46a4dece5b14ca2ef421280ea31eec24b686db6a9a4f2709a93";
+  sha512.run = "8b4a1b9bebf971b0963fd20c01807d5d541a978b88a1b07bdb950c1e39fcb20b8750cc0c78bb97d663c00bac2a714fa95f0a088a1c84f371261d236c941cec4a";
+  sha512.doc = "9c6d1f01b2e815c4c33c4e95be40d1a7819568bbf22edacc202c3346ac4f7373ce4b6e8316ed194a32551f07296628d1d8f971ea856ddc33c1d964efd6388d4f";
+  sha512.source = "12c557b2f273c06ccdc322195340e10f50d54986ec8aea4ac103a173c9a31514d5fbce39413472fd530f0c41a21e1e5d7fb5ba03b8dd3008efb8056adc22dbee";
   hasRunfiles = true;
-  version = "1.4";
+  version = "1.5";
 };
 "phonenumbers" = {
   revision = 51933;
@@ -25007,10 +26494,10 @@ tl: { # no indentation
   version = "2.2";
 };
 "phonetic" = {
-  revision = 21871;
+  revision = 56468;
   stripPrefix = 0;
-  sha512.run = "fbd137931a2571d542b8cb66f8b613a57925277112c2160e21298791a65d91f4d1a6d3d8be5d6faba9abe033ded174d9d301f6ff1784dda3c1a9530f5f7a0a40";
-  sha512.doc = "710233d18f904db9eb8c235070681b9789177b375b538c743424252e6434dfc3a16fb4c6c1e19617d939a31eb75b4823bdf30e633bc240b7b24650cb411f94e6";
+  sha512.run = "655dda5113926fe28ee0695d8d87a18c1ae63599a2d476f7d9b3e3a28bde475cfe33fd06aa70d709fc05a2d43026e91348bc0c5435f4a9132859b7afcdf41a7f";
+  sha512.doc = "626ca0614b723fc3e4b75ca977c7a12e77908ca710ec52994e62e9e89e2064f973ab2bda3182a3b466eb2df2bdf030e0e6432cbf9f984bd7316b483f9c310b47";
   hasRunfiles = true;
 };
 "phonrule" = {
@@ -25030,13 +26517,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "physconst" = {
-  revision = 53674;
+  revision = 58727;
   stripPrefix = 0;
-  sha512.run = "9d96b559e6e9a67983b55fd5393386ddee8f5e3b42b38ead8f860f8141dbda62bba20a83ec2e7b53db455718eafe8383ac645f062d848fbf52eb41e50b8b4556";
-  sha512.doc = "1fb1f3dec4373cb95b9282dc059a2997d05874cba9c08934770571357b2afece06806ca6615a8089cdb4832094dd0fd7f4abdeda812a070b100e1444c0ec2652";
-  sha512.source = "afe9453d9410f191095803a5974711db3930144e5680cd63afd7a2c9ab21ba200ee60daf9648ce21ccf27d65253d080d912c18e0d57d9fdd8c5747c6ca883e49";
+  sha512.run = "3655aa79c067d01831e6f30d85f13ba7b06742d4731f2f2bbea8066205256fd4f6a5d3290812e667bde8805b9bcad82c4713d49e3eb357cde56a1f50ad065877";
+  sha512.doc = "1824589dccba975de608260ab460a8a6be0d8aecb099571fb9e088e0ecd53f2f6e854a3f21eebacafd06717bfd53290ce23fbdc85467798c8f9b1189d64a58e9";
+  sha512.source = "9e21baa7fe13e2ac201ce8d3d01e5217d078a5300c580fcb9e32fa321fa02ae5da58a4d44f81b4acdb31dc219ae6544196ab6580a123c891021185b65583362c";
   hasRunfiles = true;
-  version = "1.1.0";
+  version = "1.1.2";
 };
 "physics" = {
   revision = 28590;
@@ -25047,13 +26534,13 @@ tl: { # no indentation
   version = "1.3";
 };
 "physunits" = {
-  revision = 53574;
+  revision = 58728;
   stripPrefix = 0;
-  sha512.run = "904be8c48e61e663936daf8b646f36009e287e8656b08897b5572307a32768a442b16d10a29d5f981bce5d8eb6638320e66d2551a36fc6e4cf9448eb57f96f1f";
-  sha512.doc = "e49086ad63a4dd87227e2433277b384015dbabbb7f1a5de4b46a2599a82978a96bb0553c336452c569a00372a7c1783f5098e0d765b9986e5778154ba3e7a52b";
-  sha512.source = "5deb57ec5afdd0404da24ec5678a04b2818b469e0251e0abdc77e59c0957b8772158e59f9c68e58c0b79e48f2a07d4202030de27cd439c8e353f6a9952681ecf";
+  sha512.run = "96f700e6dd103f768383a78645cb32e363b83c459a0c764a77d127bbf2aa7c143105752ef9910a2d9d6e659547931b01a2bb0683b41d8870c0fd850d7e01de3f";
+  sha512.doc = "e0a3fe337242d4da26153258f16dd8f71c2a704ed89fea8dc0f58b1fca7ecbf9fb168bc05adee988aca61883bf94272ec2f1ed841d99e47f0992b04f6c5bc371";
+  sha512.source = "59ebd20b6658b4f4082e56dbb2017b4f63fbf9d7a61dc6c5b91a1da1be4794b1e555f2c6e68cb19ee6bd4c0e860eab77905eadd7fd4f72ea83f4b251bc8fae14";
   hasRunfiles = true;
-  version = "1.0.3";
+  version = "1.2.0";
 };
 "piano" = {
   revision = 21574;
@@ -25064,21 +26551,21 @@ tl: { # no indentation
   version = "1.0";
 };
 "picinpar" = {
-  revision = 20374;
+  revision = 57349;
   stripPrefix = 0;
-  sha512.run = "9706ae1d10df99327d4778ec538ffc9aec465a04382b0732005d25660f452dda539b736be50a271c9be623a823be113696471da6c2d482dbf8a269af7c1143c2";
-  sha512.doc = "73b28f87550924b208b48ca9a066861e02b1a8360151ad89609e6d8c36a772192f174befd87fb02b65e92370fec332fca5d67a2e84e97c7549b86825384dcf34";
+  sha512.run = "e6c7beec7eb6beac3ddf2621adc68ffa90eb24d0df02b8be23de1c1c59ffc76709307116c9d305db3735cd5c1cb2276ad11f9ce4c9fc171f67ce95293264f4d3";
+  sha512.doc = "0e79c8b6b93fd8e424504286d1010879c52e83c2f216c55e34d28dfb94ead43d43c750e637be938c9b6337e6b8e07f6b6a34271cc93db3ece846d5e4d55671d7";
   hasRunfiles = true;
   version = "1.2a";
 };
 "pict2e" = {
-  revision = 51918;
+  revision = 56504;
   stripPrefix = 0;
-  sha512.run = "9f8fc3acbfb19b9e45579c2e2b0013dc84b9c670404e71f94b70c1e8a91569731a3b6b44e17e3d80bce5a099c3f16d6d74b7788daedeb48262971ad001d38472";
-  sha512.doc = "43297b99d4032a53b8dc36ae64a42ba12d5b800a352514e9678b0fccbe5798eb8c780b5b950f72f322eb12b9b23266d57df6d74409ad17d413d08028b033c6ce";
-  sha512.source = "847e0796c5dbe144ef13c196a3f472622db7bfe5a83f6457188739b82ecee0113ed704846019bf18e514c0914561dce35419287803552f98775f59a7c293a382";
+  sha512.run = "04c4fc0ea9647c0a434be2ba709f539392685233adc92da262fee4d081b6d31bfe88d8c537c19a102bc7200e2adffac4f7a4cbb3a7a47ca47c26e93e96772e6e";
+  sha512.doc = "90fe6e6d6fce7d2a679bb511e2b0bbca2edc42f332886962aa227536558083897e1e3425b6c7efadaee6aa46d1e404ab5d4c18e21db52e723be8d4f0566eb5c5";
+  sha512.source = "0c637f9979672267e73dd762b43c3339f41ed8965c12fff1141c757572ff7cef7d7f2d8faf50d855cd22a3810b9ead5318b6c20c3e5218f01fc32252f93d29e7";
   hasRunfiles = true;
-  version = "0.3c";
+  version = "0.4b";
 };
 "pictex" = {
   revision = 21943;
@@ -25101,13 +26588,13 @@ tl: { # no indentation
   sha512.doc = "148b7c29cb8189174442b95cd39b0d5fdf9f937a7a44a17314b93cce555cf3db459e21ae2c4eb9098c15551bd7aada2804855d68f9408fdbe974f6c12dd724a2";
 };
 "picture" = {
-  revision = 53081;
+  revision = 54867;
   stripPrefix = 0;
-  sha512.run = "6e6db1ced24b2e3d9da18df7001a5bc371385dbced53d9b265dbdfa7adfb07f91ecbada1eb3a8604b4f83f2dd40ca3250d9122262ccb1e8bdaf7ed7111540511";
-  sha512.doc = "224a67a0e32f9713fbac6df806b0fabe47bf292d26ce4b4723655455c2396d9bba9c28f805c592f8247eb362bb28f9a26e300323d2372ad03c971b8b8af2518b";
-  sha512.source = "7dee50f956e046d868629226ef708672b11b7694633e5d43da4fe7acd62872cf2185c893ca24e158699c943567b2a1eaaf235c010af588dc1a33403e19f4cae1";
+  sha512.run = "9dbb4e17b455a6a18bae6309864412b975d07a1a11e908e1023ab8e990ded0956ccf3826e72d9878f3597eaa4d185c8b147d2c7d2149618bdb0b09fce8e20e90";
+  sha512.doc = "ce60fbc915b3c07db6ebf4bccbd0e2e8ed6f38fe0c07075af2c433b2bd7f82cd191c314ef3ae1fe9b4a02c2c27d75e97a5831c45b833a33373d545a977a162d8";
+  sha512.source = "599ad9e192d2ee50b7037d93c3a8541014ada30c13a9a8b637ee33ee9dec476a46779b06a44f56288e6fc08b29408af30310fbf0ec951aef3a8b0d8dd776aa2b";
   hasRunfiles = true;
-  version = "1.5";
+  version = "1.6";
 };
 "piechartmp" = {
   revision = 19440;
@@ -25141,12 +26628,12 @@ tl: { # no indentation
   version = "1.2";
 };
 "pinoutikz" = {
-  revision = 52999;
+  revision = 55966;
   stripPrefix = 0;
-  sha512.run = "e59a8a5c1d40fe81ffefb91308adb73e270ea1f7fe6d6e3cccc5a950b5acec6ef2a50c20430365e24dee5fa6459dc78325c18cc3ff150fcfaf79538bae085f00";
-  sha512.doc = "ec0f726118a9a05aea49c498e60932492308d3f9fce70b2ef458b52a26465659175149da3a54a2e1ff76d4209f637a11cf8956c22ee9839a2540e1bcece023d9";
+  sha512.run = "88ecb08a15725e4afbd296cc7eba16583cbe260989784e625eecf008441ac54ea53cba81801d77ab8439bc076c32d6c09d62305ef589d739ec1ed59e1f907755";
+  sha512.doc = "9fb1acfa981b7d38b312d089be9b9d5dad22334960133377b06910cb0df39c8e556ca86d5f9b959b27ef4c7fc2211b97507b138f026df58d439fe3ae9fd3f420";
   hasRunfiles = true;
-  version = "1.1.1";
+  version = "1.1.2";
 };
 "pitex" = {
   revision = 24731;
@@ -25165,11 +26652,11 @@ tl: { # no indentation
   version = "1.618";
 };
 "pixelart" = {
-  revision = 46740;
+  revision = 57508;
   stripPrefix = 0;
-  sha512.run = "9f9839c0d286262560f24c7bb83603c227addb9d5e969aae8d0d943cf305c25b06f74b3a2a3fcac9e6ab5f2473ea0e11b94283b71ee3794bad21c22212d05e28";
-  sha512.doc = "8ac425c6345b95739a4864f89c967170ec121e0bdcc4b1c3aec9b60430ae7c240073439270db1311f9383c139bbc485aa2a39248c4ac5f788b8ce37345e6c65c";
-  sha512.source = "7e8962f9b1989fe23c62dac7003e0e1bb5ef1ccade7b2e07f761f3cd6c44ebda85758fd2a2b438ce725179772d8520ebaa2037920844000714229b53d6d99ccf";
+  sha512.run = "47f667a417ebe5a7cd265055d6a4c88bb8f561e020069ddc0bde818aa2394e69d6a575e48bc6d4feaf5761d356a6554189ba6c1a57cf2bfbf1099132b8398805";
+  sha512.doc = "5221b337718d13512359c3e0d349dd83afb9c2585f013501badb06483e8ab23f146672860426047fbed3d55471e32301ed695b6c416c31683915f569c4b3c3a7";
+  sha512.source = "9b69ddc19d4ca5ca050ff22ea88dd5be1743c5e910066d8f412ce59620906e642dc979831d571ebe44e05b5284cc4f36ab05935bfc03c4a82b869bad24672199";
   hasRunfiles = true;
   version = "0.2.0";
 };
@@ -25181,11 +26668,11 @@ tl: { # no indentation
   version = "1.7";
 };
 "pkfix-helper" = {
-  revision = 29725;
-  sha512.run = "4828927668f21f465ab672b92e6e3934e81e60bd9b3bc1f28a65b2c4dd26d2ce244258ac1b7d8846c0bfbb653a2fe009875ddfcc0383b34249e775f675497478";
-  sha512.doc = "146bc49beeb779c4815737cffe1bad30c28e7e44409a3e7036ab82c58f6f1b7e0ea3498f1a19cfd312390bcbc31c72d9f61a92501d87690a61cdc7c66c2fd2ae";
+  revision = 56061;
+  sha512.run = "e5151d85d2db65f41b69320ad92611adcc8d211719aa06f39488ba75972f6bd4eda3a9ebd9f13e8889eb84451a640bbdbfd8862c95620304917cca3dcff4a194";
+  sha512.doc = "50103799bbfc18a728b6510f9cd3d9aa4cbafaebb1e68f2f3280b3a57efbdbf75ff68f36e72b4442e49bbb04801795250fb3e2d0728968e30c1e70fc5b7d15d0";
   hasRunfiles = true;
-  version = "1.4";
+  version = "1.6";
 };
 "pkgloader" = {
   revision = 47486;
@@ -25196,20 +26683,20 @@ tl: { # no indentation
   version = "0.7.0";
 };
 "pkuthss" = {
-  revision = 52836;
+  revision = 58729;
   stripPrefix = 0;
-  sha512.run = "866cd78cd589dbb4228aff9464943bbe4808df08960000fc7916268dd2df5c85102c95c01072fc03714680e6f250d13c7abd83f25441bc924db9d819a2f18b8c";
-  sha512.doc = "2dcb977727324cf981f262aed38ba4d8856338a37b5499133c46348002335893b78f8efc0959d7c225c32eeca43a743c446f448b9e55ff354cb977ff9a86fcb4";
+  sha512.run = "34f4fce7ef86327be8353d8a5634c8498007a8b30ee847b01a577610bf1d1a31f862bdd3888888a022563333e275f74f686efdea5ae8d7fe82f99e6d8e71f212";
+  sha512.doc = "ee343be7e84257bafd28ed10de0e5724c19c832a170ab8b176a0681da3bd108ba2f914e214e1c7045ffcdb981e72b3ba08c736c6486ad756af736e48e13738d0";
   hasRunfiles = true;
-  version = "1.8.2";
+  version = "1.9.0";
 };
 "pl" = {
-  revision = 36012;
+  revision = 58661;
   stripPrefix = 0;
-  sha512.run = "8647d7f075ff8c4559c1549b0e1075790b3fc2890b55f2d8612ea71b385b9a90b25a1827fd99b823ed945c801e1dd1773b28be3fd9b8e9744048fc370178e599";
-  sha512.doc = "f9e53f7d006b671d788ee888432e62a98704ac5ec964ff6b65704a2ac9afd056f1de366c4ae60460de3c112fd9267e8ac8605543ab7d8cef345d4603c93070d6";
+  sha512.run = "bb0d16d92272c6233284fbcd94864c381ce60343e5b9ac23a04871a515f36c18d5eca92e7ad4f80b1335348f62baa703671984db2c85d5a35d84f725f699db9a";
+  sha512.doc = "efde952f17a904492b2c36e49801514b97ac5302b406beca7680a893051bc3821e70cdaad8d01dab479476298154c5ce2db99d43b04cf51cbcc5e16358c9b9f0";
   hasRunfiles = true;
-  version = "1.09";
+  version = "1.09a";
 };
 "placeat" = {
   revision = 45145;
@@ -25236,9 +26723,9 @@ tl: { # no indentation
   version = "2.0";
 };
 "plain" = {
-  revision = 43076;
+  revision = 57963;
   stripPrefix = 0;
-  sha512.run = "66f585e1fb6b95913ce71406e840bb15953b2ddebc3ce0344eed791e496ea75b93c4969abc363016b71dcaf65c0c676064ec778bcccbb2490031959ef3276bf2";
+  sha512.run = "0010ad47f363ddad3a0433fbc48f4e39950eddab3d08e2eaa6d5eacdc620265d45b09ca23c48f92ac8bedf222f98095c4f91d424a27ef0e8e50ed6d673780c57";
   hasRunfiles = true;
   version = "3.141592653";
 };
@@ -25272,12 +26759,12 @@ tl: { # no indentation
   version = "1.0";
 };
 "plantuml" = {
-  revision = 52175;
+  revision = 55214;
   stripPrefix = 0;
-  sha512.run = "a7eaf9dfd05377787a9bf18855506506a8252f0a8c44aef2d452834ea1f7091ecca66dceb6124e44ef117294d526838944884ee815a8dbf48ef4558da1284eb6";
-  sha512.doc = "ad2dc0f8696e15a55dca16c3a45a6376cd423c31722376b30fde2ba2443a4b768d02f745838ee4c83a1a228b6cb492367127799d9483a800f2da03ebd0eea214";
+  sha512.run = "30e49185f2916a0ac1234199e80fc4c776eabb69e7cea9f8132e7c32c074dd2a24cb100b1f6f2f80b314cef9e7099f881605ee3fe19ee180f2c6c856e33c73d9";
+  sha512.doc = "bd04f4ee1ebde123f718b147b407f65d0549171fcb3cd9c07381871a23034520563b02edc1675aa3a6a975da6d811674d653c5527b6ba99309f479ecad136cbc";
   hasRunfiles = true;
-  version = "0.3.0";
+  version = "0.3.1";
 };
 "plari" = {
   revision = 15878;
@@ -25296,29 +26783,35 @@ tl: { # no indentation
   version = "0.1";
 };
 "platex" = {
-  revision = 53975;
-  deps."ptex" = tl."ptex";
+  revision = 57972;
+  deps."atbegshi" = tl."atbegshi";
+  deps."atveryend" = tl."atveryend";
   deps."babel" = tl."babel";
   deps."cm" = tl."cm";
+  deps."everyshi" = tl."everyshi";
+  deps."firstaid" = tl."firstaid";
   deps."hyphen-base" = tl."hyphen-base";
-  deps."latex-fonts" = tl."latex-fonts";
   deps."l3backend" = tl."l3backend";
   deps."l3kernel" = tl."l3kernel";
-  deps."tex-ini-files" = tl."tex-ini-files";
-  deps."unicode-data" = tl."unicode-data";
-  deps."ptex-fonts" = tl."ptex-fonts";
+  deps."l3packages" = tl."l3packages";
   deps."latex" = tl."latex";
   deps."latex-base-dev" = tl."latex-base-dev";
-  sha512.run = "6e799696653ec8071bdf07f2e8646885b7c1aa85d1e904211df1177ead04e95432e6599a986dfc80acde29db7c9c789d5d16d26212dfd206af955bc7b909de85";
-  sha512.doc = "208523e476031fbed134feaa2dc91217492efe42d4d2d0b1e95745c7b1ab240ccf559eae21d82cb14d83cf37d1fc09bd36017eb77b85ba212fac5d60e58b0f14";
-  sha512.source = "112db9ef61955dc071a9054c15257dff686eb04e086f1293cb16aa805d88e7768735a432f01000e47be41ee077a6020fb81b2e0d1fde2b460aa551a10405c827";
+  deps."latex-fonts" = tl."latex-fonts";
+  deps."ptex" = tl."ptex";
+  deps."ptex-fonts" = tl."ptex-fonts";
+  deps."tex-ini-files" = tl."tex-ini-files";
+  deps."unicode-data" = tl."unicode-data";
+  hasFormats = true;
+  sha512.run = "787554d26ec4acb3811efbe96349a51b517e5b3b4677754d94dfe1d0ce61088d016f21995e5e9f49e1ace76a1e1f2c057c126981a9e340a9e047597f637aae3e";
+  sha512.doc = "f0085548bc20f0389d475a9abf294a8713d36184aef1c65e12d5a7621a4f60e26cf8b63f6a1d558afe964f633455fffd9f492e749938c290b91c10e02c6cb4d7";
+  sha512.source = "50afb0b5a1b766f89d7f3dda64b74f080a06d25d66618a4466018209fe4e3245f8deb274b22e30b45fac0a8a9f903ae70ec0301bfb72a394ebc3759e065205fd";
   hasRunfiles = true;
 };
 "platex-tools" = {
-  revision = 52049;
+  revision = 57729;
   stripPrefix = 0;
-  sha512.run = "bd1b61377f9793cce68a18c43c43316aed3f6382d031e7948e5ab6726b9be18d5b819ab3fb4800dd9fd1932af433352c7285eb9498925f54b66e0f87b0d293f1";
-  sha512.doc = "a58c732af05538e8450b9a329754d576cd0c606a676d2451212d928d39e841bcf702cb5e096405c455f98cf012bf4f75d39295d7ac5efc1c6d3647a16345434b";
+  sha512.run = "5e5352dd6813ed5f90d1f9f1efd4e4f8bc53e6b6f0a932f2d8d5715cfa0f7b6df96320381daff0728e64f4df5239aebf65c2fd7796310d080ed857875732e7d9";
+  sha512.doc = "0834655e25b8684ad5e51dca1e128a07da38ce9b012205063feb7a54aec2412d706cb4560a445cc80734493c84b54d86b912bf659a72baa642f26174e0063875";
   hasRunfiles = true;
 };
 "platexcheat" = {
@@ -25329,12 +26822,12 @@ tl: { # no indentation
   version = "3.1";
 };
 "plautopatch" = {
-  revision = 53906;
+  revision = 57731;
   stripPrefix = 0;
-  sha512.run = "a50f5b0233e586d25fda8d2fcdc8817ae4ae56b13a2c3dd505011d17a30e7e5d3ca10547416fd2d5df9a628ace79f575307049510150c4e925fb1fc30871ec6c";
-  sha512.doc = "984daf85b86d3b1c308c52520148fef9cfce188a6d210514e44efc3dd7427e80c5e179cbed077e4b52b2ec6239710e64c18cb1b7f8f6734662ebd4cf1533cf5b";
+  sha512.run = "df8d83e2c12167d32d114c61737bd4b834ddd3f9851c238ce1b07c1aff3469ab2bbd7eb6b90047b75ff36a26ed4ba53c97782dd7462bd559615075cd38517c0e";
+  sha512.doc = "afd9185a9bc5a7f403b24bc948da9ac6939efb0ccf2c9063950297183c3dd1db08de43ff98824e66b0c497a2fafc3689678dffafc67ef92bf035a1a0a2066a4f";
   hasRunfiles = true;
-  version = "0.9e";
+  version = "0.9n";
 };
 "play" = {
   revision = 15878;
@@ -25345,17 +26838,17 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "playfair" = {
-  revision = 52409;
+  revision = 56005;
   stripPrefix = 0;
-  sha512.run = "cfd2c243878c3d2bad12bd6e284078b76097a43cb01e9c35bbc4af753502bebd49e73ca49dd91575196cd27d2e391511bfd4a268cdde20aa948f835d877a16c5";
-  sha512.doc = "9b60309afe7472f848be4b85dbeb4a5dbc422a0b0ac480a2f97c73a7525c9f20289133dc33e6e49a029d9e277536df5dd1bfefb57d65341a5d2061b3877e898f";
+  sha512.run = "bd9c88074757e0b34fc569e3f383c6b8045216ffe5da4ec897d0c28365063d7a66511ae190017c24dbea92782be05735f62a0684909ca76731a30f6d9855fe5b";
+  sha512.doc = "03dfa23f74a3f1f23b4bd4d28ff6580e248074e07f2fc515db3fd917bd10f998886e3ef987e934b8fee7be5467b9f8d9810e9ccb6844af9bf67b8726ddff9773";
   hasRunfiles = true;
 };
 "plex" = {
-  revision = 53058;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "d25fef41064797f9cbfaa2350b8868ea8291fdad3bcadb48021e7795f0d31ff86beb21dcf5e5a6749870354b3f77815191572423c3956946c60c5232cde02034";
-  sha512.doc = "9d42faaf2fe27f38f96015899960d6b0ac8f423f0baead04a7b740b28e052b00f116bcfdaa8f435d1b61e6e697f55b5c5b8cc766ef11377f48580ce888b203c7";
+  sha512.run = "4d23f567356527629e7eb6cec23287c1e55db3afea71faf8ee86a4288378fe2ee7fee6d34c311f5f5e3b66300892664013752f2f0fb802d22ecc76980c27da87";
+  sha512.doc = "1ea960e85e33c4739da58cc8a2157672daa06dc7257c23c3339673cb26eee549bad49809330a05867c24759fa907721aaaa48e9d43fb6118e7b465caf4532090";
   hasRunfiles = true;
 };
 "plex-otf" = {
@@ -25366,6 +26859,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.07a";
 };
+"plimsoll" = {
+  revision = 56605;
+  stripPrefix = 0;
+  sha512.run = "c0b44cf022ca470767d296af1ad80b2d5ede92adb22635f7ef34b9fa81ec523f769dfbfa6a78005a46bd9a4886507fa7b3a4f761bcb8f686dbf736e3ad92676e";
+  sha512.doc = "9ee880e89387986e228f357f59981b18fa8565d60e88d6f1b15c4109f9f7f20108c447fb995f0edaf64723ac37635b56cb5d097e93e0374a0f64adda4215eed5";
+  sha512.source = "2967c9b53daaeba02405da837050a53c69b725da8daeba1d6a9c58dbef0387628aa6dceb07815c5bb0d2cc37c6a1b66f5c64037ad33d74e1179dc3fc0f0431a5";
+  hasRunfiles = true;
+  version = "1";
+};
 "plipsum" = {
   revision = 30353;
   stripPrefix = 0;
@@ -25400,13 +26902,13 @@ tl: { # no indentation
   version = "3.0";
 };
 "pm-isomath" = {
-  revision = 46402;
+  revision = 56868;
   stripPrefix = 0;
-  sha512.run = "2ca05438d8a9e4b2a9d1e4a9232071d34a915d9f93cdd865191e350b128b9ddbc9f0af67d76eb49ec2b6f2a1485a5a792850f0abbe59de0ba4f50c0c10b89a0a";
-  sha512.doc = "76876cffd5c59b2ca74901c5c83e364c0c7982b947efd869f82ba801298f5b57d84f292015c8da28a3e49aada42eeea9c35d11660c3b61abd0ccfe31708e8d9c";
-  sha512.source = "55976f387b8a2ae1caae8d340abb37ad1187efd4017a29243c474e8d9804ed0bf83a7206992dc2428a229a0bba1cda60b2b5e72235a79cbdff6e47361e03f814";
+  sha512.run = "095ed443c74eb0693331a6ca3c736f61ed5c34314e207cd379e26e523507f48c160671136b36dcbcb287bc1165da8223048e18261a4312ef07c129b79ad57ecf";
+  sha512.doc = "7c5ee2ad9ee1cfcb8e6766de6a0aca29524dade913bd32e54fee1f5645934fb9840764b98542ed31bb94560f6589c5a074c2b3dadd59b7f20515fbc47c8ad981";
+  sha512.source = "3f69521a43a3fe5821904adc9c15d7dcb993b1bc8f86c2ea7ff5729945b45af955c47a89e54b031b596d47fc83bf983b6eb18f15e5b1ef3a97786b2e5b80975d";
   hasRunfiles = true;
-  version = "1.0.04";
+  version = "1.0.07";
 };
 "pmboxdraw" = {
   revision = 53046;
@@ -25426,19 +26928,19 @@ tl: { # no indentation
   version = "1.0";
 };
 "pmhanguljamo" = {
-  revision = 53693;
+  revision = 54378;
   stripPrefix = 0;
-  sha512.run = "123367842e0d4ba5521a502b322bd1509dc6cbfd8cb5de1c7d94bc2f96032aeec70277aa6e742a78a1bc989bfd5efa24a5ea95ae320fa736a2a2972d8eec8086";
-  sha512.doc = "366c1f364922eb5e00caec1f2922061ab9a80707e7a04b4d42dc077bdcb744026a545fecb597bacef7d1e253ec53ca7f15fb5e21d3398b9a18b366015e158eba";
+  sha512.run = "a4b16b981ff495212daac434123e0ab8d91ac862acf78f92ecab20c793bfc60e1b0e159113c9a5dc15fe06653531c1ac4a4de6208512baf089c299dc7dc75642";
+  sha512.doc = "7188c7bd104bb507866c5b793a3da3ed640416847a032b6c2df8eb94a47ec2ff17d11d3494b2f2755c2ce3b01a12c12a2d6abd374c887c2f7418a6fb8c93aa0c";
   hasRunfiles = true;
-  version = "0.3.2";
+  version = "0.3.4";
 };
 "pmx" = {
-  revision = 46823;
-  sha512.run = "d8c20ad86fa90531b0bfb1e7af06492e31a4b3a46331fd36d60bf46275103672b61a419eb671a3c89f098e0c74a580df313d75001e52b27b148bf322c7df1593";
-  sha512.doc = "37405b45aabf5bb6027b7849bc23f263f2ab9ffec515c3d7a2073bd7030580898b1c2171c760a9da40dcf0cd4cde890e235dde572b22e69e6a273b7bec4ebeb3";
+  revision = 57672;
+  sha512.run = "9b798a99cff71901d5200fbf843746de4c380cbf0aa5ab00c19deac443b84bb891a6ccca953dfb9f384a53f5a9a96c81fc5da0a6887bb4e7212cc977ed2a2348";
+  sha512.doc = "7ab725c1d6d99e25379d4373526f12e14770f7a1f9b610fd8b09dee121b00f6b79faf4e548ef13a1429f00dcad83755acb47c7f7bf01c5517e2de852b30b0853";
   hasRunfiles = true;
-  version = "2.84";
+  version = "2.94a";
 };
 "pmxchords" = {
   revision = 39249;
@@ -25455,13 +26957,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "poemscol" = {
-  revision = 52574;
+  revision = 56082;
   stripPrefix = 0;
-  sha512.run = "ff2350ed68690432ca368330f50c5a76ff586c2a09e7e487ea114d75b9b488652ce561e40d69ee02a5271b4ef93ac3dcf888cd64b79a33b8f7b5d95ad7972e81";
-  sha512.doc = "89a929f03afae3c1a48aa4289bda29b06664d4583c6474fcc3df041b809c240114f1f5a14d2f1d1493c1c36d31cb9344a4ef6ba9ca6e00008f3c9f1dc5ffa0c8";
-  sha512.source = "5261ade28661f2ee8cffead2bbcbb6254a49477adf206303baa7912852e3a8562e3fd2fbc34dda8e4b6b3b86af6f8a81bce9158acb21342cbc238be650fe4353";
+  sha512.run = "e9bba80cd6fcd7b1e7b0e46fe594b3e25986dac5fe39d329ed4b8e15bc6b542e033a392abcad4e0c67d5401066703a1a89658ebc612d2adcf846de81b34fb78f";
+  sha512.doc = "e8e3ffc366be12ec5273c85a352a6c44ee22af072fdc9e63db390c0d3435e390c28ca83279a1a54f95af991890b7e47ba896612407ed605e229ec184cb1e5096";
+  sha512.source = "cbb9340d8241dc8616f997dd962fb913ac6d8d46241c55e37bd30fbea12cbe8f331d07268653c9100928b92a171245489685761e091b6d3e2b6be6558779b683";
   hasRunfiles = true;
-  version = "3.141";
+  version = "3.1415926";
 };
 "poetry" = {
   revision = 53129;
@@ -25482,10 +26984,10 @@ tl: { # no indentation
   version = "3.0.1";
 };
 "poiretone" = {
-  revision = 51396;
+  revision = 56070;
   stripPrefix = 0;
-  sha512.run = "b270f09c59711712e27b3a0a73ca6109fd0e2580184fc5df02fe55140eb7db7b4e72e190309d12486d49593053ec50048c89c6203512cb451baf5aa2caa77c7e";
-  sha512.doc = "c9bb0616d8ce72c114178b4e0ca26bebcfb797af701555d53b3a1bceefd556eee2bf91fcde891b9b2a7b8650bccc9fd559b8630904e678adb4d2caa912da003d";
+  sha512.run = "5eab5174f3f31374fa5095946555ca7389ccc4675e479324f03f1c33e07981d2731a86b516c5cde41a9e97a2e5751c4a5ebd58db4a1f76829a6638d8393e6d47";
+  sha512.doc = "07dfd772739d214646d6779311f4e3c4c71359303eb8fbf53ca40b9df628c3205fe16889b93476e3eb74d2786559ab75a66916067ec974b3349f89267d1ff435";
   hasRunfiles = true;
 };
 "polexpr" = {
@@ -25499,8 +27001,8 @@ tl: { # no indentation
 "polski" = {
   revision = 44213;
   stripPrefix = 0;
-  deps."pl" = tl."pl";
   deps."hyphen-polish" = tl."hyphen-polish";
+  deps."pl" = tl."pl";
   sha512.run = "8d4c05dae9e5cf8ab36bdba5be8b0748d5d283a6a77c7fa18821ab3a20fe5935f302a8ce9b1a1314ef128a20c1011018ba7bd04d34466d017e16fd9bd087e108";
   sha512.doc = "a619719518e3d9814907d33756c4a3f2494c3a94b0a717e6f848e31177622bad6ba2cf595a23ff2efb65ea04b70b267aa87cd87caa56c91bab7b36bef82cd2dd";
   sha512.source = "fe630f5992e79ad211ac4537cb1fc8b40154c2b43f34fb15594e662909077eb0a58f2be41aa05ad647a45d2d00c8af82ecce2afc5eec46c941d1060f2728a4be";
@@ -25516,7 +27018,7 @@ tl: { # no indentation
   version = "1.101";
 };
 "polyglossia" = {
-  revision = 53592;
+  revision = 58444;
   stripPrefix = 0;
   deps."etoolbox" = tl."etoolbox";
   deps."filehook" = tl."filehook";
@@ -25524,11 +27026,11 @@ tl: { # no indentation
   deps."iftex" = tl."iftex";
   deps."makecmds" = tl."makecmds";
   deps."xkeyval" = tl."xkeyval";
-  sha512.run = "a0b93306e12b29f327bb2545c7fddb1804c0cea7f91aded57aa1bc673857722a462eae469a8557671f3f1b10dafc81b7021be838ba943262897ac794728dd9aa";
-  sha512.doc = "65cf1e87d65ecdf0e6b43a00f391a8f70c4f5ba628dec15b9594272ed3a1f2c9ff8827520e4ea0f226f8d396afb412d770b9886c8e3fc6ce329ed1a217ade8a3";
-  sha512.source = "c345d4cf7de96638b7da0dfc23eb05eb5a1a35450b310f237bdc029298fdca7e5751c3b2ed0b144fb0c281ae855b6c82090d99f6938dbbabae2e66cbb25bb1db";
+  sha512.run = "30f5fef2ba34bc8b22e5a5f933f4566e1e28ab0a161bcf01f7a0143dc906e6f46b71f0fa379f42ce057128f69536d5b6e7987fe2fc9f36ab48b64036f5ee4b8e";
+  sha512.doc = "4a5f24de1d1f9abd64db06d0df75752d44ff8b3d0bc476b50fda71be41bea07eef678d5c37334188b1989228e75ed1cdd7ff17a9b302b8b8a65130a4576d7e72";
+  sha512.source = "342227a34b54cada465436a7866940473452039a8b1c12fb97254d01ab12ca9ac373398d74188dea00d396f8ec117a369791930d185d505337bb815afc7db39e";
   hasRunfiles = true;
-  version = "1.47";
+  version = "1.52";
 };
 "polynom" = {
   revision = 44832;
@@ -25549,13 +27051,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "polytable" = {
-  revision = 31235;
+  revision = 55837;
   stripPrefix = 0;
-  sha512.run = "a83f8df3e09fd112a6f83a48f803847cbe112f2d18db803226e04efb6fabca1a8e5cd03d2ad1a3a30eb07d3590701b71b24f03b1e38d49f41493ddfc67576dbf";
-  sha512.doc = "7e53e2956145c29d7b9775ad8fd757b5dec4d2651683f0a48507094b86a5b6d42f1b659ffc72cacfc0cd528a6baad03cc19aabd8c0d1afdf57bcf365a5fca1ce";
-  sha512.source = "673f5f8cb4840074c2d33de2e53134a6e8288af411b6e61c1268dc11f5051c6cb65b8746fc2e2e959dd5ae2d3bc36a58770217c159c611ead0019c84918a03bf";
+  sha512.run = "2ff55bb460357dc11b274ad3233e5ddd67fbfe05e60d25bcc69f1d06f9b0f247831cb5db4123b7ff859dfa88bd56fd5bdfc24aa992e98f5a17d0f883b40fcd2e";
+  sha512.doc = "5bdc4a4c8f95255343fccb6db79da434a6b883e0e2a769eac5c8accbb6343d3f5b8de2fd465c5e229ca0ac3e9964fbd96c50062440970921ebf70f01a3097943";
+  sha512.source = "dc5c2c007012a4a57a20b569adf784afef0db7b22ae88ac91f54bcab5f8a25a3dbde48a118ff5090d806d42954ea28276ed2adbddfd974972012a645805d9fc3";
   hasRunfiles = true;
-  version = "0.8.2";
+  version = "0.8.6";
 };
 "poormanlog" = {
   revision = 52080;
@@ -25566,11 +27068,11 @@ tl: { # no indentation
   version = "0.05";
 };
 "postage" = {
-  revision = 47893;
+  revision = 55920;
   stripPrefix = 0;
-  sha512.run = "97315373848a24fb0c49e184cb5e4980e6c124d60bd9141f7ecb5ecea9e81097e4005ee29fc45d828a206ccf8a23a936bbc27cbc59fcc7b6dc4b75cbe4f9105d";
-  sha512.doc = "102b88d87ba4b371b16e1d1362f1ca42fb9feaab3f1df4d56176d353e90d68bbac535522e7acbd741be78f64624223a55a6f3802e8a190814ff9a71abefdb2bd";
-  sha512.source = "390567f792284e372089e8c8141daf42d44eda52a14118c60ef23911e405dbc7481453cadc1de9c097056f181909004a7a489c0040dd733d8c036bfa2022b3ce";
+  sha512.run = "1b7ebc9b82ae1dc0a642892b6d74ef94ff0810ff3dda1628f741244dd17dc8d5013b42e2369c1dd6c27e65b965a1482814c62eaef582cd3bcb4c945fe0aa76da";
+  sha512.doc = "5f0d2dc0a4986509862b17af55f590f110b3dbdc697ed4cc704d31215945e224a0029087e04cc8602b059455447fa9214bede0aa63509958972c9dbe2cc4a0e9";
+  sha512.source = "68d0ae1488f2288b7b5ae3aba79ca877ce6f97e1134e61859a81c77bbed47c9b79d3eae07a6ce0bb5fb3645078fc67d2c6cd4a5baaad1460e09b4b34d3d597a4";
   hasRunfiles = true;
   version = "1.0";
 };
@@ -25590,13 +27092,13 @@ tl: { # no indentation
   version = "1.1";
 };
 "powerdot" = {
-  revision = 45165;
+  revision = 58730;
   stripPrefix = 0;
-  sha512.run = "20888eecfbf1e390ff32e7cea503c1c9bcb5910044fc4f41238b63039b56da82993fb38c4f24fbcc43c8a4b451b59e1010fb81bca048d5ded1cd6455f7568bc2";
-  sha512.doc = "ba3051425104a49dc2d553d93220b569dfdf548090a90348ddc0286a36cb9f00e7956c617a133a0ef69bcf69cb5325b4f12007f6ce56868b6336d422183777a4";
-  sha512.source = "573248dc8e8e0a248c652baa3a57ca411302b40005a4e095d594f01cfc3a51789ae3a0c90b48d125f863e09a7672020a4fc7e51e45a1a75d8434c30fa41979c2";
+  sha512.run = "040d634225ba154fb76145815b923ef9e266a48bc41f245098b70634d6d8fe7890e65a943c44a694d889252de3f66ea49bdb7d56ad7c8ec0e1ac563469138f97";
+  sha512.doc = "8b3076cfd45d3c6774e0061b54d63bf89245b16ae704b0c7541ef61b62e0b4972d28b31493fd8e4c167cf87388d87b74ca5b8335b106a310cc78a4c8175330bb";
+  sha512.source = "e1882bf2cedb5a4146cfcdab5a89618a986c5dab64ccc4953c90157060907c18429b834e2b4dd0cdd38969c30697a354f024bd6e2c4dda88a40acd664350ac2d";
   hasRunfiles = true;
-  version = "1.5c";
+  version = "1.6";
 };
 "powerdot-fuberlin" = {
   revision = 52922;
@@ -25640,6 +27142,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "2.0.3";
 };
+"prelim2e" = {
+  revision = 57000;
+  stripPrefix = 0;
+  sha512.run = "9f9fa79056db5be108c3b34b2ad61d964ba35fc1b6f7e9375c9e2ccbf66cd2028ef9e6689751c90c9ca236719ed1a001ae26753305fa3454bd88650cb12ae82c";
+  sha512.doc = "196640bfbf73f3f269f5b27f024f4c1e677b61b6cc452d796f025196786c166f60bd2f41ad83ac6cc6b9eca56778a07b77af05fc68f05330f14c92cf391bbbc2";
+  sha512.source = "1f2629a45183a026fe7bb3c83baa96ccf437846f902b5075fc210e47b6e3b99e81e5983bdcf617ba7bcdea60851154cb70bee3abe227420b5cc3c5a65e631973";
+  hasRunfiles = true;
+  version = "2.00";
+};
 "preprint" = {
   revision = 30447;
   stripPrefix = 0;
@@ -25650,10 +27161,10 @@ tl: { # no indentation
   version = "2011";
 };
 "prerex" = {
-  revision = 52801;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "7eb12c59d75d6a3f08dd0bbe8928626b5778acf01bff4caab1f214f2ce42dde798a2823b47b6c79c94c471f8924e79474c00ef9d6e251757c3d221bde06b410a";
-  sha512.doc = "3e10f4810b05377d5e54bd12a5303c781c36467479f30cc0044c24019aca81c155a90ca01d3a422e01b1bbb4d245d34bc51cabd4e97252ea8e1a6da747548d4c";
+  sha512.run = "4238f65f9ef42d218f092bc436fbbe95ddcbcee44a9032b74020a989696db3ce1481460162171f5feeb16f7507a41643443429afb8000d5bea0d7bf16e8dee96";
+  sha512.doc = "af17b95e20638fecfe6d431cc320b6d3207dd739779636206899d7bf39c26018718521dabf76adab33db28f975e99d2b2dcd9b13a164dc24927d2017e947bdba";
   hasRunfiles = true;
 };
 "present" = {
@@ -25664,18 +27175,6 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "2.2.1";
 };
-"presentations" = {
-  revision = 43949;
-  stripPrefix = 0;
-  sha512.run = "b93bd6875538fb61fbbc737625da2d89fd7cef0f6b59999f78176f953d6eeecc2d44cc242bc89f85e293265b26a36eda55ab3fe6804a8e8cee2144694eb1a2fc";
-  sha512.doc = "7767c2b3fdb77078729f25ceec85906722d6e2abb6ea45fe9e03e7c0653edffdf1326a055175f309d3afa1f1a30f64c708cf0c6c2c273accf777abec088336fc";
-};
-"presentations-en" = {
-  revision = 29803;
-  stripPrefix = 0;
-  sha512.run = "47c4c3e2b1dea3473daf00f1577a2cdbfff2a3a64d5f39507a9486fd2e77dbcd8ea1e3bdf4069aeee620a62047b1890eecd588b50bad2f1c33b739f7721b205b";
-  sha512.doc = "f9d3b24aabc47cfaa0487d683708fed12489e1aca7e7107ba9bf058864f0dc5967fc7a84eab59888567bd47b06ce96a75dd50a132e6e929d206e30c30585d346";
-};
 "pressrelease" = {
   revision = 35147;
   stripPrefix = 0;
@@ -25695,21 +27194,29 @@ tl: { # no indentation
   version = "3.0";
 };
 "preview" = {
-  revision = 52590;
+  revision = 56708;
   stripPrefix = 0;
-  sha512.run = "176ec9db33dd9d95583216b4003921842df3e2eb76ceef40abe3a6f39daac058fa9807ddd2f2b789d011b415473b88d15f60916828317d30b65c8ceeb5d45422";
-  sha512.doc = "b6834905bc34836b33970933cb8a7b1a94a8d030e0da112a3092ea3ba3abe1fe1ec248aca3fd362eef653df5b05ebe7b2aa04338e721edcbd4358ae83b034566";
-  sha512.source = "c4d3f247edc4235ae2a4fa6ac6d0a8cba2f6f6b56b650b3fdb9c8b585d9f7dc9549aed6b5f072c7a89a6baf31ff4f3a5ad08dada4ffc8dd6d0e748644fb087ba";
+  sha512.run = "8a582c5e78e5a4ef28d3857e397d62579be41f4445a3b0ea1ea76b9080997e5eb23f2bb90197237101d03fccc8cd53c8a3263d19385dac4b63161a568528b017";
+  sha512.doc = "d6edac136429cc1d0af86381812c798d72e15b0e33cc0dec643e86fc5a323df057bfe196293381f2d85644f6784cb97bd7a612828ce829d0d8baa57a51f00bce";
+  sha512.source = "f9e6df7cc6c5649e103832477218237d4008e66707a229680448a05a058d5b9ee47775c96466068723a6cdba362a17420d3154d69535c7b3b65c1e752e6654e7";
   hasRunfiles = true;
-  version = "12.2";
+  version = "12.3";
 };
 "prftree" = {
-  revision = 51404;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "c0e5f5134606c514b13e5fc3bc58a583f13ce844bc1e8fbbac7aa09d8a59652c50edaa986c5004619219fe4c72cb963fd89dff5119b3eb0f02fa74cdc1ad1374";
-  sha512.doc = "d81403af762fc0d3ee9d7b53f9f0400dba5a50f8bd2feab92186db85c18011aa3170b9173530cea5e6e2aa7bd2f475e3b3016e5ab79e990c6abca3d5239fb6b0";
+  sha512.run = "d73717b68ce3d12108a76a3850f3a09b9e1100969e79c745b7b08340175ea9599f10f928809fcdbf8ffbece3a60baa41d84dae182ace8b85ff511082f1db70d4";
+  sha512.doc = "3b4d81db24039d15e76e0b237ecae6454d54b452b542e26ba8e0c45faf4f512124f0c1d1f5fef3ca6e6dcb3c7cc09eead3003a53a59a689e5e917583585c045e";
   hasRunfiles = true;
-  version = "1.5";
+  version = "1.6";
+};
+"principia" = {
+  revision = 57902;
+  stripPrefix = 0;
+  sha512.run = "2e9857cf6eb9c7ae733ad781d3e50668ab76a940a26051a61ffc1d1c33ca020f3cd9c6fe3051b89ec9e28b1d2032239e34e782221ee1e65a9167abaf97b5e478";
+  sha512.doc = "b581402582c1d48300b0c6f59adcfb00e349381e5a646ce7cb4003a6ed9cec850c66458dc7c5057666bca79935743487854dd3d7619e5c24faaeb62a141f8f38";
+  hasRunfiles = true;
+  version = "1.2";
 };
 "printlen" = {
   revision = 19847;
@@ -25759,6 +27266,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.1";
 };
+"profcollege" = {
+  revision = 58710;
+  stripPrefix = 0;
+  sha512.run = "f9929b2fc8194df27deeba118cfe1c922c42c602df949999154fa5aa37251c6f5dbeef46f25fa9816a97aa2ad37f4dfae52427bd3381e5a2abb63f6cde49f8e6";
+  sha512.doc = "fe78de237160707ac036812730a6460a3a63343a5d11df45e1c793a15d8316886f8565160a8fd0db9b7c10fbd519acaf182a7dbb7323f88d1d4f9df292341cd6";
+  hasRunfiles = true;
+  version = "0.98";
+};
 "program" = {
   revision = 44214;
   stripPrefix = 0;
@@ -25876,12 +27391,12 @@ tl: { # no indentation
   sha512.doc = "c5b22a86807378fd7d6d83e8802780567a2473e87875bee4c827a48ff470911855bc4a1db4f439fbda1baf71f714086b96e6e78ee059590fb6ebb45c58abca4f";
 };
 "psbao" = {
-  revision = 15878;
+  revision = 55013;
   stripPrefix = 0;
-  sha512.run = "cec6c6079d7a8757c9c01315f3b035fce1eba2dda487e3a9da21a2bcfe6c7f7fe5f82171ac5b850fb7f673b56258f7b39c2e0b74c421e324475b02ec13671b32";
-  sha512.doc = "1a9d1a0250bfd82d76ff1a3feed17c016f46e5ef199038bb569708989f7a243682a9584c1d293807cce09394a70a25a2f8b31189d81aae89336306f3f146dc9e";
+  sha512.run = "eb391c615ed622d928725b3a227ce0141e75ccb49a0e2e915d41bf12e343a9622d9032c4c3d6935cdf6e36c6afb4d3138d5acf17febe4691fa6e5c34da01c2b8";
+  sha512.doc = "8fedc9f84eb5f640ff9644c933b5eea71c1d4f9e03f861ca7e8820a582cb31f38e3a9e4625fb1b28ff189f02b3546734eb71e1491f63d4508d3d7b5f7ac635f4";
   hasRunfiles = true;
-  version = "0.17";
+  version = "1.0";
 };
 "pseudo" = {
   revision = 52582;
@@ -25892,10 +27407,10 @@ tl: { # no indentation
   version = "1.1.3";
 };
 "pseudocode" = {
-  revision = 15878;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "28acc4dc69e5f4e181230f06dda363618146d30a3f7c6be0d11b258980bfed5636606dd808c1deaa627d04c526496152fdb2ddf56866b63a4c4313de423493a5";
-  sha512.doc = "b11d8ae45d5a4564dbaa2669db7b5cd4f9b87bc9efda3da47ce652245b140cec1b2c569f38fd1ae175215ff422cd2df3919bf27126c9d9d661dc4a147963bcb0";
+  sha512.run = "8335336bb46c0bc362bb10b6bed547d95230a29ba8144549476ec984323bc79475b11afef91409761e4f651dc4c28669639106d14c4dcceef7f90290e5f77b12";
+  sha512.doc = "ad53ed572d7d79caa21baa8c34482ca6032369824967e2966479e85a95d140a6477acf0e69ca7bc2d6dda6f8b161253b1afd43cc53ce4d44641dda64d82abe13";
   hasRunfiles = true;
 };
 "psfrag" = {
@@ -25940,23 +27455,24 @@ tl: { # no indentation
   version = "0.35";
 };
 "pslatex" = {
-  revision = 16416;
+  revision = 57434;
   stripPrefix = 0;
-  sha512.run = "4e6c2163fe9d8573012cde55d7a9686d45276617d6368a2191b2ca5ecd9e2e88f9ea07d638c726cfb43f0fddb5d8c8b1b8ca1eb58177517b6704776f792630db";
-  sha512.source = "27e8f6f5c30338cccfded6805b713b74b6139841ad81a10a4a06ff5acd5a189733e2d6fdc80c2483c5fc8beececfb91a0a9d03202bc44fea753ee6bfda9fe649";
+  sha512.run = "64dc0f10f3aaa78a4d611d21601e5fb3f27c7c97bcf04f5dd3192f5253660edc862481f3b1bcb8b18b6cc07a6064e78953c31470bf36bc70103f2a83374483c4";
+  sha512.source = "086805aaf0b61b8e3e561627388ea1af67ef8dba3a0b5808ef3d9719652e76abf4353345ca2096e31fb33c9c960b01b4972754f29532a25e91ad59dc6c1d6cae";
   hasRunfiles = true;
+  version = "1.3";
 };
 "psnfss" = {
-  revision = 52663;
+  revision = 54694;
   stripPrefix = 0;
+  deps."graphics" = tl."graphics";
   deps."symbol" = tl."symbol";
   deps."zapfding" = tl."zapfding";
-  deps."graphics" = tl."graphics";
-  sha512.run = "d1ac5027602b905a359974f9049b8e52cd4366513923483a3109ea21f042f3cd0cff645280de3438f615babafabae1a7b14a046acee8d6a48794bad89a3061cf";
-  sha512.doc = "18e539fefbcfb68c6f4520ef622fa577cd7f91e32cb26533bfb0769893775787dc0b1ac39080bfb5993f6f3094a3aaba3d177a882d51896823415624d3107998";
-  sha512.source = "6da773da315bcbf2d9a8624309f6f8524cb4e0eaa1ac6bead9490fe77a0997b7996c526c0ab959da5e32e504095fb868191eb57f7b9884716be9608b50f8ec3b";
+  sha512.run = "f7d1acebcd1d32a691221f396220358f3bb15dff2e2cebec4b537b1b790b68d8ce1164711983a52b4f04d6e470df2e3e5fec63bb1d3bf39fe205d5f0351299de";
+  sha512.doc = "d1c14edccdf43ed2c786394bc04e9fd683b683532a9dc18d592f918ee8899234d23feb738128aa1418f441288cdbf0c6de832f8c4d98023926baeace36365a1d";
+  sha512.source = "6862a7e74be6a575996e6f45a2236db810f1c030d3a0c53b2b97c2e803fc7e29010108e4597d637b8abedd63b1f956da268f62ca2c609accaa4d035be7bfd8ed";
   hasRunfiles = true;
-  version = "9.2a";
+  version = "9.3";
 };
 "pspicture" = {
   revision = 15878;
@@ -25984,12 +27500,12 @@ tl: { # no indentation
   version = "1.10";
 };
 "pst-3dplot" = {
-  revision = 43703;
+  revision = 56758;
   stripPrefix = 0;
-  sha512.run = "a509af726d13fbf9dd0f3b1181a1dc53a31fe007187ad345c8e3c6c65d52d09f6de422a723b472e3b8e5f1aba1563dea06b79e82a7940e018cdb9eaa30a40632";
-  sha512.doc = "2f261cb9d32dfbb85b626238e25d8c9198ad50df008b54f800d3d5b404ea5734da8636c05c33ec30311c60f6e41ece1071a04af7affc61badc3aad64a5b9b194";
+  sha512.run = "6b12d6273f5025b4afbb1adac35e73f60a1ca6430b24c40c145af1a50e35150a34cc70ff14e9904caff34be6955146f358f4231785aa8b7ff662978a846857f2";
+  sha512.doc = "615081d1b54074e8cff1dfc9eadee490526fa22673204fe8f37554474cf89688507989c8701e3633275558165fe91e6684624ebcb0c2b2983cb38c5a2d55d014";
   hasRunfiles = true;
-  version = "2.04";
+  version = "2.06";
 };
 "pst-abspos" = {
   revision = 15878;
@@ -26100,12 +27616,12 @@ tl: { # no indentation
   version = "1.06a";
 };
 "pst-circ" = {
-  revision = 49791;
+  revision = 55289;
   stripPrefix = 0;
-  sha512.run = "608ed7ffdea15309a69d89c6a6107b9b71838e789f14ca78f92922cbb3d5e5929f61e0510b40e5531900099f805ae1d4acb2018984aedde05352c8f210573a77";
-  sha512.doc = "575ab4e17abb1433659b60dc87920fe284a12d5cdc98dcd091df372437f165033872c7a7b3f27e17bb27f5a51c2dd4e5a98925e06e54353a8e51b77958b63afa";
+  sha512.run = "ff5ea04128d8d7646484849fb0539af8cbd8638442de65f9cfebfc874a71f85b534488ef516129346984d31a01e44521c29d7c5293c30ea315a986fde6a953bb";
+  sha512.doc = "a3991c3c7fb781f6735de799c325bc19ef82cdc4ef31f2d4b5ec22ab3961e2bc450084285176172bf583869ebc2d7d35800ac75caf0caa99ed3c050c48f49960";
   hasRunfiles = true;
-  version = "2.16";
+  version = "2.17";
 };
 "pst-coil" = {
   revision = 37377;
@@ -26176,12 +27692,12 @@ tl: { # no indentation
   version = "1.0";
 };
 "pst-eucl" = {
-  revision = 53929;
+  revision = 56474;
   stripPrefix = 0;
-  sha512.run = "fc8a821de4589ce130d3d0f6057f657762171564db00f73576b5e954107785be5d6d9cf809ca21e96012243822347ed75ad8c5dd82bf86e0bb9de21ebcfdf8c6";
-  sha512.doc = "fc34471747331cf42e003fff20c975036965180c600e6c2051b68e9b49c9266f272e124675a6accdf96f468da3d117eeb1e52f9919462b8e54860e6814b9723a";
+  sha512.run = "a076efb338fbdff19719156e32cfdbf74500de253ee358dbf64207b762333ff2d3d167cea84ef4ba906d247d96adab9705091c5dc7003400097356b1f54f9305";
+  sha512.doc = "24df2d92c6879f20f4515196d5390fd9b0d97476b662a8e7302664be5afd08a3127dece9a530df5cb972feff6552321749b38a682a58d7924393304ea1c75a9f";
   hasRunfiles = true;
-  version = "1.71";
+  version = "1.75";
 };
 "pst-eucl-translation-bg" = {
   revision = 19296;
@@ -26233,12 +27749,12 @@ tl: { # no indentation
   version = "1.10";
 };
 "pst-fractal" = {
-  revision = 49295;
+  revision = 54376;
   stripPrefix = 0;
-  sha512.run = "96f38a81d57046ebb50e90cd7c06191483eefa8234ea73f706e6086a3f0723b3ecaeb0157b31c1364717c5f0643ead9fe94f9cf8fac8a8b27e0a3b81d3dee048";
-  sha512.doc = "4c3793e65415b2fc394fc46c23d6a912c9288e77fa2f08e5d7a97de6beabfe2efd323f13b0f2bedd1bc52bfade476abc0f8edae38108de6419e6d4b3c854f82b";
+  sha512.run = "7c37dce7409f524dd67ee66a79af3d8caa6be5c184c5e6a3c0711810956f3d1623c0266e902af163e8bedf4d8109aff7266d6c6e351485abcd9e300dcf554799";
+  sha512.doc = "e089a681d0fb6d8505fbeafc1c194d0cc4f81f250e4d53843f71dbe6fe62732bf18098b61ebf70d1ed890c57300b9d64d7b7a2b0fd0d3ba9b831579837308f0b";
   hasRunfiles = true;
-  version = "0.10";
+  version = "0.11a";
 };
 "pst-fun" = {
   revision = 17909;
@@ -26250,12 +27766,12 @@ tl: { # no indentation
   version = "0.04";
 };
 "pst-func" = {
-  revision = 51149;
+  revision = 58786;
   stripPrefix = 0;
-  sha512.run = "77349856b50aedfb4ebe05b2e3747b2bf98715201930ac374783172f0688c723405c069436459598744c681a5d8f42aa7d14bfe41adadcff69b6bf0e45d2df94";
-  sha512.doc = "91acb2009228f42b79a85a4d343f484066ee9b930ab6e7acde69d796bd54185ad8d979b3fcfd72127203e91afddf3720a627895567e769378fdf0069f9cb8f87";
+  sha512.run = "5e609eb9600894ad217c6fb7af7a134447bec166527caf9041c15394666caadce094b1a68c0b365c8863974ab2a850e881666e685943452d12f4008198bfc9e5";
+  sha512.doc = "86bf5a719310809cf9ec4222c667960ed1734a8d2f9a340c287ef241929ecf26048dbc937bc0aad9ccd5179f3918ae65706759757b32b53381be1a3c3395fe4c";
   hasRunfiles = true;
-  version = "0.93";
+  version = "0.96";
 };
 "pst-gantt" = {
   revision = 35832;
@@ -26282,10 +27798,10 @@ tl: { # no indentation
   version = "1.1";
 };
 "pst-ghsb" = {
-  revision = 45797;
+  revision = 54074;
   stripPrefix = 0;
-  sha512.run = "3bb85212ac247b5d6ddabf8d98f7ff5621b78ae2b83b08c00ce7c2831f6f6ec4d621a4e5f2ad00e2b5d8883f95aed579f0d17a5525c9df5ef9939528ec736325";
-  sha512.doc = "cfe4f9f8b24fbdbf22280b098c32c1b9b368fd6f74cd20c1ee7b241bf3a9afba822fda33b9c9365cb9c20c76ca658123039eb27828361d74e4a31fc8e170a6bf";
+  sha512.run = "53f608d40c000f69ec0ac8d4b04799a581296765e8dd0a083a604aaba77eb456fd0f733435455bffc702e19d5083788b12d3bec3476a24f03fdffddd51f1b479";
+  sha512.doc = "818108e58ff02cb7733ab00bc9d5112821dfe22b62836c3114154d6f4d26f4fb8e2c9baadfb3c4600cc32d667a174c1992f44260208cc295310326893f806174";
   hasRunfiles = true;
 };
 "pst-gr3d" = {
@@ -26429,38 +27945,38 @@ tl: { # no indentation
   version = "2.1";
 };
 "pst-node" = {
-  revision = 50215;
+  revision = 54687;
   stripPrefix = 0;
-  sha512.run = "b4feb98035acf2fff9cab8c21c7e408fdf20dd6f12ea5209719eac9d77db51cd907e345daba876ab0b7312bc9dc4a51be17097d3fb02f0a181c006c4385b2096";
-  sha512.doc = "2e47bab65f6077f796bf4d50cd4f5911eed2eea658701c46e47d65543697c68209aa307a5f620fedadee8ff2ba28f6ccf92dd9402bc3264616cdd3291b8673a2";
+  sha512.run = "655a9f7a373415c1721a8192aff5868c6eeb20fbbbac394b19ff15a66f6322c9cb3e2a6edac3210b14f94a62bccf18ecff1fe3af21951f382477ed27e37ab36f";
+  sha512.doc = "da13d6f9584cb2810b0aac8ed65af49a48128049433a845b6a2d73bc2395e043f6ce89ca84978eb52455cdc713931a610cb1047e46badaa2c6b4baf5073c15e6";
   hasRunfiles = true;
-  version = "1.42";
+  version = "1.42a";
 };
 "pst-ob3d" = {
-  revision = 15878;
+  revision = 54514;
   stripPrefix = 0;
-  sha512.run = "1b4eb87fd2c9c63edd4d7388b32c5e6a8f4d6ecc87b9c1129540398c607bdcd258b4f182710ff12d6a7a5e8b8f34c6686203d5c0ff9a60a1a6e462ccb3b382d6";
-  sha512.doc = "f934cc75f6d2e6f80bddeda8d2226e6ba0aa6749adef4f08b83036a67f1b8406d1fff61a01862eecf48ec6e3ce76af2ff7967db67a294956fce50d3c7497bf00";
-  sha512.source = "4dc8b724abb5a48518edb8f0d39152fe99fb2ec78c59fb8729f151865b9fe50105cf4c3027361d4e6a75cceba99a7e399d7e522aba70f27d4e4816037e87e509";
+  sha512.run = "19cdca2466071a1c6236fd4c149d4962dab3aa0b0c097fa408ea60c2bb46011173033bff02d33f596c8a413ad781c14f785b39bc28be4c85aa66480cb8a7e295";
+  sha512.doc = "78ea80a6d63ccbc69640e6e18e8ef43526fd4d4b51a63dccd23429ea44843a0f99f522bc34a7cc88d6ffe48843313da64c550464f28ad48726554bf74b9e9cc5";
+  sha512.source = "a0827ae0fb0ba2072894bfc284234eb301c982972d8333866cc8b66ff754e85b837fa024083ae31d637ba941569ae491a85bbe62ab32adf0fb99bbe3ecd019ed";
   hasRunfiles = true;
-  version = "0.21";
+  version = "0.22";
 };
 "pst-ode" = {
-  revision = 50587;
+  revision = 58293;
   stripPrefix = 0;
-  sha512.run = "eb00fab8b3932a868526aad8c1623ac7939d45a26b83374779f4eb3d25807ff58a5a75ce31adb84af650939d7e6957336f44d8f7a15de33262ee7b69c70fb002";
-  sha512.doc = "5da26468c9426f614080513d9dd031bab06fdba87a899be28e09a21c7de75b50c4dbf00ebb569bfa63293bb7881fbdaef76f6bddac5a7e8084796fbec2e7ddf4";
+  sha512.run = "96318154dd048b4f59c1f0b2dfda1f92306df9d91b4d5a0903410ab5d4ea5ffb6f0355a060a027e8b64061ffd65d10e702305429c5209d3957f0641b70df6416";
+  sha512.doc = "c98cd3511934fe9e3e145091427e2caf88b0b92711fd5593206c7b6b50c97ee486fd36515cf75f18231cf3a3642a16253641f7ec90294dfca10cc8cddf5a90ba";
   hasRunfiles = true;
-  version = "0.13";
+  version = "0.15";
 };
 "pst-optexp" = {
-  revision = 35673;
+  revision = 57977;
   stripPrefix = 0;
-  sha512.run = "7d171906d8fc840c8003e82b3ac175360dab625172b389c6205371bb432e280195c2daf53671d8ff2ab43d24233ab2c8bd3002b8d4489c7395533148bb40e939";
-  sha512.doc = "f9c5f7bb43f9171b53a10941db9baf3f7e7b8e50620679f176a14b0b384a8a79118361e0e7afc2a8c44a2e9916313da6321cc5a08ceff5adfa4a678e35fdce46";
-  sha512.source = "ae5d01a591bdfb8128957bc992c07c7e609c4a2e2b8a1c43e30960f85774d5fd56702eec761430f26c3ead975144bf196c397233decff205071afe60be0b948b";
+  sha512.run = "92302c9c3c4a5a0e7a82fbdb6c72f08aae2ea6a5286f6d8916b19021ace0bdbfd1e935ec4aaac8a18c938c6bb0fa66520f3d98631de419111c43605ad2dc0fbb";
+  sha512.doc = "dd920f80c8f271737d8dd8077f06fc851034812233b4f7c30e0ccbe4fc57fc08b430efa9b4eb737744acbe0a0c2e898797efa939bf37468f90e6241e1c28667e";
+  sha512.source = "ccdb1330d6ae5835927ce28c5a38162ab632a0b113d74854d2bb8cabb3d0da7d29e39f74a6245be9e30c03a765c383830cb76a9b6bc8d39aece5b0a05be3824f";
   hasRunfiles = true;
-  version = "5.2";
+  version = "6.0";
 };
 "pst-optic" = {
   revision = 41999;
@@ -26479,12 +27995,12 @@ tl: { # no indentation
   version = "2.82";
 };
 "pst-ovl" = {
-  revision = 45506;
+  revision = 54963;
   stripPrefix = 0;
-  sha512.run = "2777d0d3011ba4ba911dbed78bb3ab29eb54bf392a9aaf73707f17e5fd9ccded0198d0b42bbdbc6879b2f07ba84ccf9d121748e3f0d3f931a8fb6b6e2a904b8a";
-  sha512.doc = "9b7057b4316adf9f0fa30561c658f309cfc1be757c0eebfb63bb5cb94dc9b8b6cff502f056f9e1d64b207cdd154c0ec64b13c51639ae46377c4d58d51aa00725";
+  sha512.run = "e3349edf9643e5d9e370b5dbf1c4dc3078ec82520c943a81ae353e1ccd0e2476105813b0cbbbeb707de5419035edcc39748c7e86a69cb90f8bc0d61d70f553c5";
+  sha512.doc = "755c786cec204ad3dd41043d8dd1bebb33ebbd889580a0a85390ca8efc318076ec9300a8e38b99788bf348a49dbda8ba5f3c758ace788bd9de47c251dd4e0407";
   hasRunfiles = true;
-  version = "0.07a";
+  version = "0.07b";
 };
 "pst-pad" = {
   revision = 15878;
@@ -26496,12 +28012,12 @@ tl: { # no indentation
   version = "0.3b";
 };
 "pst-pdf" = {
-  revision = 52819;
-  sha512.run = "e262eb62c86631aeb04bd4268672fcdb7da5eb458d91cfaf78ed668e0afe585bada46bccd9eaaa7374e23d9efb79106ab7ffde1ff879993a7138475b8f8d6599";
-  sha512.doc = "d16ca8328cdc79dc6c3488a68a537ace21d2f124604b69c79be6860d9913c8eac3d3093b9fcf03a17dbfe184a73c168a13d2e5a54056fe076e0e01941740f4a7";
-  sha512.source = "67286e2f38bb3c88d48f0cde11494a64e0bc751d65b997ae50f4f50df980ad396b58e1eb37e544d050b52b691bc9fedaa0a15018d8d1836b22e3dff6253f942e";
+  revision = 56622;
+  sha512.run = "5f5850f0e908bf6b10977bf616aa82ce05d1f0afd4127b5db14379a510ca62614a3552cc85ec0136805fb479201c817442872f9d1074fa6cc1367f41403476e1";
+  sha512.doc = "eb5013040f3774e81d019c0010e8fb507d22cb2fb9c74e75f2c14aa0e4edd20245ddaaa3744fec7204c607b5f6329425f8f2b6e09bd153e6df6a3ae39d1e1625";
+  sha512.source = "1c353ad8d3b62fd5e5bb8746f69f00b8df2c7b53dd558ec8b24d571b1fe84fdab02daa4d7193f67a258c7390d50f25cd5270578d742b085634980eefc744b09e";
   hasRunfiles = true;
-  version = "1.2e";
+  version = "1.2f";
 };
 "pst-pdgr" = {
   revision = 45875;
@@ -26530,10 +28046,10 @@ tl: { # no indentation
   version = "0.01";
 };
 "pst-plot" = {
-  revision = 51650;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "58b2d0bec5abad6a4f1c2467badd6ca7cccbfdbbdd0a838493aceeb37f478f4500fc95463176fcc97e34111249512d50215a319b01a847d863d54bcfcf5e73a7";
-  sha512.doc = "748945b66f21c63a160b793720ba5bd9243c73602e68e43ff72a5f52ccb4004de186e648ad0e5b5e883c3772197eb2a36ca0cab046f8313a7ed8ecad522fd761";
+  sha512.run = "7e784c8c50671da1b2efbc191a4afc91739718d9c117aa49740e869296a415287031c91c79f750eceb7f90b36f8a6bd5b37c87dad7d84b6776a014cfc6a4f88c";
+  sha512.doc = "9f486e767bddf56647583d598dcac7b64c1ad390d94fea88a285d3aeaaa32d8151883b438c48e0d75b3ba41fef21b38cdc2fe7dd724978827b55dfc6d3bd54c0";
   hasRunfiles = true;
   version = "1.92";
 };
@@ -26586,11 +28102,11 @@ tl: { # no indentation
   version = "1.2";
 };
 "pst-shell" = {
-  revision = 42840;
+  revision = 56070;
   stripPrefix = 0;
-  sha512.run = "d91fc81c2140e0ff4aae4e190b4816887f0c068df42022b6b6545adec400920a69e81bca1373efae4249a95cfb1b7f6b712497d72510aec79954feb7a1ec07d2";
-  sha512.doc = "a788f994d6003ca6a650cbe042b57a712fb91da2146b21fe3023b464487e5a56699a2aeea56be77aa26919f6c1fcaca6d49bd3ea33ccd2fd7a06e5f95a917803";
-  sha512.source = "0a5173dcb9d58eca24cae2c385db9f0225bd5feca124a3f86e3f4991a689c6bf897b48ee2c756746e337a7aa6ec7758b3d54c90f7895b841fd88c3c74eb6bdbb";
+  sha512.run = "e6c12f5a1c8eb6b521e6bd3d76609a750bc12633de1645f6991a177d633043f1c5597091b34639079bd007d81302ecfb6715f826ec42353720863885e1d3a1e7";
+  sha512.doc = "72185b764b1c282e772341b9c616b27252759f8e0ca3a776770e976a31d160cea7ac74f23a982e088dee50a86a9af73d19f3f695a24f13381e88281c8c33577c";
+  sha512.source = "b49620358aa5b8d57c4f227770a59ffe84a751a494ed459c8a61602b3a32621df6a31041311f939c4da6ac2114c5c4381d2ef0cf1ce870ea41081d9d920f5902";
   hasRunfiles = true;
   version = "0.03";
 };
@@ -26645,21 +28161,13 @@ tl: { # no indentation
   version = "0.91";
 };
 "pst-spinner" = {
-  revision = 44507;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "7014c371182a354d11bc76c60bab01321d60af9559098a353c3e7a5a88d2e251f9362a24872b60d2214450ad3d423f3868d219bf109f0524a6431db17ce1c881";
-  sha512.doc = "90ac8da08b1be6dbf3bf126ed49279fd0f593a586a3bb7e58b89f9b9da361637ab4c9aa133ee2f798b7d49c420a4765cf2fd9936410d37ac955d661196f1dffe";
+  sha512.run = "230405003645525f89e4713cd38d2dc015a5c41218202003626a154a620354fcfd4297480415771064ddf72768afd15d19fb331fe7fe3029375b681487e09f58";
+  sha512.doc = "998388d1098eec8f15dbccc5852b4577f392c9e01dd0a258927086940b5e8fd33021101244403c3d81b575bb1214ad0730160828a7fcf83630bdb765d4c34444";
   hasRunfiles = true;
   version = "1.02";
 };
-"pst-spirograph" = {
-  revision = 35026;
-  stripPrefix = 0;
-  sha512.run = "701964d1fad3d757fab421a9458c5983e11628d965ddabc2dfaec0259b829ed96f699a2361043c1f08024538b10d9b0ad36e921b704543288da5c5d5cb6e58fa";
-  sha512.doc = "2b3a0bafb00c64d1ce883995f983b626390ad73492bb96ace3d2cc5df05e91bfb6f74d96269644b99f56ba0a670a94dbedab663c3dc3bff3e099d141185ae331";
-  hasRunfiles = true;
-  version = "0.41";
-};
 "pst-stru" = {
   revision = 38613;
   stripPrefix = 0;
@@ -26692,12 +28200,12 @@ tl: { # no indentation
   version = "1.0";
 };
 "pst-tools" = {
-  revision = 45978;
+  revision = 54518;
   stripPrefix = 0;
-  sha512.run = "9803ddb2afe664c53c1bede5d3444dbb4adaebe07c3a3d5b06cf7e0775593c13e6af5803584fb8b9afb12768fdb382b8603b0024fae40bbecabbfa720d87c4ee";
-  sha512.doc = "48b440cd10fce6da42173d90e2e7ca1454cfb6ddf556836ecfba98729de441f6521e7fed0b95bd20a570c06c3b1baaee285b52ed121d4c16679ca6530b8b5ae7";
+  sha512.run = "b6f1432b44483470d2dc740aaafd254d0f7051e37e9b8675aa85fc50812b9f19fb8b021cb00da405734c25a3dc6b9645d25981c7b603e3a01016421c2d1b4140";
+  sha512.doc = "57fe008fa8ab2f8ab0682d29a6e3b7c285a84c54eb7bef068fa2ba1aa363792f6a497a548cfa6ad171990e344215db7bc5a7d297bbfb17026b80601ecc977edb";
   hasRunfiles = true;
-  version = "0.09b";
+  version = "0.10";
 };
 "pst-tree" = {
   revision = 43272;
@@ -26766,21 +28274,12 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.0";
 };
-"pst-vue3d" = {
-  revision = 15878;
-  stripPrefix = 0;
-  sha512.run = "d2e5829b3c241f33a69b1c59b5aa360f73948a6dff70d39ed41b82c67abc2b469860e0bd91ff131dba6392cdb3eb9d78638928052175e65ad7aa94fc3a8d05df";
-  sha512.doc = "70d297642f7f36539cb21c12b46e2d5e4a6db244f203aa1b009c500876d2def37224579cd8ad54e5b5004f26c41203a0cb2d0a321d38b15051605c2f9432bcc8";
-  sha512.source = "660753b080958b11891954b27b39dcf06ee44db1a582376824c517d41996e3721c21066e430b633c7ed56b053b9f4c91dd3e1c968c3209b0426e840653c23563";
-  hasRunfiles = true;
-  version = "1.24";
-};
 "pst2pdf" = {
-  revision = 45476;
-  sha512.run = "ece2fc7c670d6c6895d364cf316facc5898c83569640f0c261ee89dbe3b302e5c6190e95c6eb08b132d213cbaddefbb1e589f1e6979a9540454ef442ec94bfad";
-  sha512.doc = "79cd5a76de8c3cd53b96adb498ed30afb5a8f9b8cf35009fd4e1c487b7d381dad81f46d03e85b1896ca712b02cf31732a7b9b84d4e7f75b0a7d7b6e0032ad559";
+  revision = 56172;
+  sha512.run = "a266409d6740653bacb23e83b98e545dc462ed879299b195d65761b10e4700a797005ca231fc24e37a42591c09ba93b5ea6b8b82ad8b14a29a7649cdb3f39b33";
+  sha512.doc = "5805c535c8a043fea721093a4b7d2ab06c86c80d4a45eb3d603986b898b6d2053d041b638874e53c79e2d815a929749e02ca0986a2f8cbb400a2fa87581462dc";
   hasRunfiles = true;
-  version = "0.18";
+  version = "0.20";
 };
 "pstool" = {
   revision = 46393;
@@ -26791,12 +28290,12 @@ tl: { # no indentation
   version = "1.5e";
 };
 "pstricks" = {
-  revision = 51102;
+  revision = 58731;
   stripPrefix = 0;
-  sha512.run = "4c674666903d17749de9a99204e59ceeadee66d3fff38cc0913efac0ca34fb0269c7e5e836543d28e998277537fbca4fe64889cb71fda2dfb258a5aee37f3260";
-  sha512.doc = "8fae1af33f0d89b9da2d3bef0703e884ee0c0adfa187434e58a83fb84a999d783cf2e6483d4c67b247a34c5c3f87eb184f11fd34ac1ea6e266ed29d3552a625f";
+  sha512.run = "9d7eddbede84ccb7cab9024f4ebeff688707f189012c3f71ed3a57963bacb13fb7aa6ad2af136d11b9e530ea4b1b74b9c06563954b81a1cd41c65f3a2c8e5fd4";
+  sha512.doc = "f3decc60f9153b5eca7a71c72518cfa9501c5e970c0d2957dcd866296c883070aac3fc11016e74e6e703927bec7bf1135bd2a20d5a8a5d937ce7d95e8410fe13";
   hasRunfiles = true;
-  version = "2.97";
+  version = "3.01a";
 };
 "pstricks-add" = {
   revision = 53763;
@@ -26828,35 +28327,32 @@ tl: { # no indentation
   version = "p17";
 };
 "ptex" = {
-  revision = 52851;
-  deps."ptex-base" = tl."ptex-base";
-  deps."ptex-fonts" = tl."ptex-fonts";
+  revision = 57972;
   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."etex" = tl."etex";
-  sha512.run = "fe00cc7c0b2f84d3fa86dee33102428ec396d1f6458c0cfeeb11432c1616e1006d46974b9914f8390212e8b8e7b55a5fdbf83fa90ed49f4af031cfa66fe53ace";
-  sha512.doc = "38213de7cb55c5ef1dc8e0c289c4bcb6910980dc81f1b035d223dfb9956353fe3423b34b665666177d2f3e6087f8c763109f9ba61a2e02b62c4dd497604bc352";
+  deps."ptex-base" = tl."ptex-base";
+  deps."ptex-fonts" = tl."ptex-fonts";
+  hasFormats = true;
+  sha512.run = "d59108f06a06b7ac46195ef05c0ba6fb4873a88d327839a6143e94392faf3df73ae7b128548ae1ab69915f9883bad554f0e2dbd8d36b8f8c959897210895fba0";
+  sha512.doc = "4f863d89fca4c137a84fe75365f600da96f3901d29dd98e9d5733523648b746861a22284707c6e9df90a9939c83adc7bcdf21b310785b8d403459d65294d1133";
 };
 "ptex-base" = {
-  revision = 50731;
+  revision = 56487;
   stripPrefix = 0;
-  sha512.run = "616ce41d8fe02c6d38dc638d6557ab29580cc57e52977b27d319ddca63844f91d7b0f0373c57bb039a3f70b6ff462eac179d9e816933b2954f2af1b00c3fa0d1";
-  sha512.doc = "e4aee26d3ac73efb1e0a2b4579e7e8cb1ae46925908ad407d8772eefd310fb5ac969c5c53303eb7e5ba6d0cc115f487fa600b5b6446ebaa52f9015ece56cc19c";
-  sha512.source = "0f5a2eb6e73c1d454efb9e7a0949d0baf49ead997bbba4ca01b3f6ad894b050394430c194fab002bd41bc7017e578818677bf0eb577bf34c7bcc47bd243159d1";
+  sha512.run = "37809d10840c61c7b5c17be0174708b3c66d7fb0b48c58f46aabcaa2e44abf30abc3aa437131ba1148f11bdee3e2fec1b8ab0787310e8924acc7d90cb33c0d84";
+  sha512.doc = "98844a87ac2a83d55c04bca34a53e1cc5c222ac5d359d3c24648a8c849443c5c8829bb0d911d54de76fefcd2d0c4d537feff5effe7591657de629b2ab24e5c2b";
   hasRunfiles = true;
 };
 "ptex-fontmaps" = {
-  revision = 53823;
-  deps."arphic-ttf" = tl."arphic-ttf";
-  deps."baekmuk" = tl."baekmuk";
-  deps."ipaex" = tl."ipaex";
-  sha512.run = "948d156244b16385b0b4622662bcb12651be4bd5522b335bc0b24f1e0ddf48241a5fd4e7aca976e471d418a659b777735f14948b863894ea1fed0d2b5e44e4c8";
-  sha512.doc = "2e347f1a2be0c32d90daee6c351b6c71e757a3fbe694f97d50836a6a57187f72004d8cd8051a9bf1a22d77ea618566dadc7027fe24bdd0dd2dff3d8afd290231";
-  sha512.source = "70ea9c04d3a1c4d4e066036e6b1ff328e7c6903e2b57962ccee08c85820d0b2c20a36b684280779301c903c1706f95da5122cbde5c706329e304bc88cf3a0575";
+  revision = 57239;
+  sha512.run = "168de4ff3435d1148bb718b15953dfa79172c6829e95824d998d9fff193c27f7677ae014ba54c507840b9b630dea12168f9a70d30a4cead922a461a52e63d8ab";
+  sha512.doc = "42e7f0eeab1000b2c49d714c40405e008cc7b08648bdac1bac8f5459bc64eb3fd6fb526fabbbc2c7774a1b12abd37396e389e7c90351eba92a5aeef53ac3e558";
+  sha512.source = "f7875a39315715c60069521903a103e5ab12ec52970ee00f3b95a498075d39e68d6f5b12373b4b31f6681a31561d740b584a65ba566d1db5ffadefdb620cf1da";
   hasRunfiles = true;
-  version = "20200217.0";
+  version = "20201227.0";
 };
 "ptex-fonts" = {
   revision = 46940;
@@ -26866,17 +28362,17 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "ptex-manual" = {
-  revision = 53007;
+  revision = 57128;
   stripPrefix = 0;
-  sha512.run = "bbe8cc1483d48b4b77c3ad00b0159c65b1a0dcdb2a860bc38993150e60f3b2a92ae61d3e598a02afb06c8b3810b85e64a179a8c2088b2b342c6c8148af3be2d1";
-  sha512.doc = "5ab04251235c4cd5c13e213f66e75fd7176bd3b393d4f7b74d7b5cf96620154f76f50dbef02b2ba65ae8ea47557be57baccec5e92a60a2b68e8c9b9e2c44ea8e";
+  sha512.run = "ea2bc5648ea4dfee37b9df34ed786ff2fd400644defa7b2623435d4e448161b8bf45f07d5d2caf18bf280008d5e4253a4ad2f62dc88375500b635bab1c201491";
+  sha512.doc = "162b7d40353fc0c892b257170cb5a335930936c776ff4b5bb91fa41d27a859d43bcedaa053aa5c2ca7d732993212c470670e1abfa4b1149c0867cdcb4b68011f";
 };
 "ptex2pdf" = {
-  revision = 53457;
-  sha512.run = "674d782ae7ae239971244cc5079a1575c416be8ac436c3d458719526fd5432faac2c42993418e4d76aea41a59c98d5ca9d8f2330ff08aa1707c505aaea94716a";
-  sha512.doc = "de114f20e22caeb6d03e1dcc2b59ec180c311f410e24b421a4e27e1988d19e024919f5c5d0fd33451516ffc256d02222b64bd54f1e644f2d5df79255530d461f";
+  revision = 58632;
+  sha512.run = "fce87deb2ee9477d81d9e7b69c2f934f9918c8a299d3e58ae8e9ba95121eaefedb935c1674ecb8bf1a081f6a21f7359e8cd158b0cfbc7faf234bd33925669939";
+  sha512.doc = "83328ead3446c41e42687819d9dddd6f19ac0292fdc1ba99eaa9a75ad9e2fad8a05e2377c196d605e9360d383881194d03930d286c9c41706eea839d19d6ee66";
   hasRunfiles = true;
-  version = "20200119.0";
+  version = "20200520.0";
 };
 "ptext" = {
   revision = 30171;
@@ -26933,6 +28429,22 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.1";
 };
+"puyotikz" = {
+  revision = 57254;
+  stripPrefix = 0;
+  sha512.run = "635d17a49a905c99e895df3e777eed02f4c5e91a38d083e57890cd13c927bc68098d5f0864d6e32b2585d288091d15e5cc1303e04e26b2267d7e78a07f77ea0d";
+  sha512.doc = "64750274694fa8c7fc792d6f5ba19ab756366eb87668469aa6da9df74f4f7bc571772cc6a406f7c3453f306f36516aca9c2444ce126ff4968d1cc49d2c4585db";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
+"pwebmac" = {
+  revision = 58478;
+  stripPrefix = 0;
+  sha512.run = "5b8b6825d84e6addce3491bdaaf30a6127d0becd26956066dbb2dc482d4942087b9423affe02654f28d5f7b1bd0e7743fd731ac2201b394630bf089deae8de59";
+  sha512.doc = "6078a4a0263f3c342c9814f3ac8d5028f6d73871e89c64859e86a7c694a5a6392873e592f5daba7c6c2b89c3eaf6bdf1a745618999bf448edc8007d3d5a541a9";
+  hasRunfiles = true;
+  version = "4.6.2";
+};
 "pxbase" = {
   revision = 44756;
   stripPrefix = 0;
@@ -26942,12 +28454,12 @@ tl: { # no indentation
   version = "1.1b";
 };
 "pxchfon" = {
-  revision = 53629;
+  revision = 56537;
   stripPrefix = 0;
-  sha512.run = "2c81f0ce0c4f5762805cb86e6bf9a3965887e9beb5bdf7292d1a5a274d7728becc580afe0893621bba8e5c477da32936607e0b3fb5d3563f9c6f9ce640ab8859";
-  sha512.doc = "3284966056d60f10b9f6636714fd64c580ffc53c03aaaf225e59df2574642a7c8d28f8ce44eb46ba0a5c809476a2bac4891ec0589c87c37f9a2fed9f412a20cd";
+  sha512.run = "0883ab31076052a9f970e8a2704d6fe69e4cc4d98e5e58528b48393c4878177cc206baa454539a6f228252c82199a409333ba9dc250b6c79d429e00f8da26cc1";
+  sha512.doc = "4bfdcbf0eec187e6726978dfc55dab1217f00a06063d43fdcd6ba640739bedc72fcaa9f5d51f9471173f6d55085076155e7dd2f549739fd15cccf74bb03206f8";
   hasRunfiles = true;
-  version = "1.7b";
+  version = "1.7e";
 };
 "pxcjkcat" = {
   revision = 47266;
@@ -26974,20 +28486,20 @@ tl: { # no indentation
   version = "1.0";
 };
 "pxjahyper" = {
-  revision = 52899;
+  revision = 57950;
   stripPrefix = 0;
-  sha512.run = "ba1a25007905af5d61b2ff3805e09853de8a6c6463d1efa8c1a9a4de5266ec4db23b24b26c3511c72860264d8032059ded26f7e57f4d4da207fc032c1d79c07f";
-  sha512.doc = "f2b6a6fd0164321a1878af5daabd23ed7f82abdeb1a7666095779c9ff5cc39f6584282a0fe7f65c59080bb8f25b803e713832a1ecfb50654acbf2a3d6fba1269";
+  sha512.run = "42b0383d98741bf3cbce1267b4ab4e32d48039b7497e87587f3adefc2da5e7316587e5b138758f0a6816f49588aa774bc4754f9509f7211d7ee3497c8f178324";
+  sha512.doc = "00d954e31c1ad90f2953f9565d24112a8b108ed1d2ed43304813b36c6c3c0c05c10d44d02dd514f4cac055ae45889db8ae91187ace305870eee8266aa48c28d1";
   hasRunfiles = true;
-  version = "0.4a";
+  version = "0.7b";
 };
 "pxjodel" = {
-  revision = 51379;
+  revision = 55006;
   stripPrefix = 0;
-  sha512.run = "a8b4cab3c5951fa07659f323804e7037919d4a8b46f73fe14d3ff920c54a17dd41fe813a7991102cda4743b51152226e60974da1619cf4108f5dc77d63349d20";
-  sha512.doc = "424713f3f6cfd46f75b05ae6f8f0ef59e4435f970a1bc40333e80a5ab1ba94a79a333314f683e377232f929bfbe8c99d5c2c59393d1c9db6990e2343778f2c09";
+  sha512.run = "dfd7032b250d85c37d983e4b0e8d480bf3a36822a7c9993e423ba2ce7320c1e1305106aa6abc5ad099a667c4821326792b4344d17e6a34f33e02b4612451f9e1";
+  sha512.doc = "e7f8c3ae9e32ac296116743feaf6cca0be3b376b3c34adaa2a90e41f0c4aa329f1330e257e99fbd43025f46e340be48c1d7cb2f1131c7a722a4f7913ddea1a81";
   hasRunfiles = true;
-  version = "0.2a";
+  version = "0.3";
 };
 "pxpgfmark" = {
   revision = 30212;
@@ -26997,14 +28509,23 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.2";
 };
+"pxpic" = {
+  revision = 57445;
+  stripPrefix = 0;
+  sha512.run = "f187fe6370e817ba7d3b6d7c0899bceaf898685d2ed2e1707ee18e0623d95489dbcfeacd1482ec540307ce5095f903e1499b4c01fb1634071f3edac626551c1e";
+  sha512.doc = "1ca68d3e7752fb37482c32cebaae0753c31284e593d3e161a46bab54d98ae564857ea80553e3937e3b7710036e722acc3eddc23fda4941079e050f20bf0ff5e1";
+  sha512.source = "a9fbf50b12145c2169de1733862dbbec0870c0863caf3544117b8c87bb0dbe4d637ad8b8507102ce83b1f4fe2e6c03a704d289c8c7e15e74b8859b6988240a3f";
+  hasRunfiles = true;
+  version = "1.2";
+};
 "pxrubrica" = {
-  revision = 48421;
+  revision = 58168;
   stripPrefix = 0;
-  sha512.run = "42de048a96a4d552726de6abea4e8903f7c952c02259001d66655f449bc4edc7bb25b351be594bca205177f31f09525c9b986629c6a964e8a2b50c66aa01e1e5";
-  sha512.doc = "92c0b794ea85b1b685bd94fde0c7b7b009ec4069f99705e9fb3dd93ad67564952925bcb4d6442a669f965700e658eb0c15194ffa55da86bfb1867b0d8b7bf5c4";
-  sha512.source = "17ff7e06e0ba752044f7c65925c3a0156a566b03504a4cf0f55296d8deb316eda79ae015963e1011b20c51712d206c921baf3a39c3f63d05eb1420915d4546c6";
+  sha512.run = "bde5699cc92196e844b052c9116bd081960a34b239bd9fe5271f0866be3c4edf0a8bf8932a99c440dc58db7624c58fc3af4e2d2c0f76230f1248da21ce4410a9";
+  sha512.doc = "df0b339e6ea2ac03d47161fe7eb278df31b391fb129f2f763f87e9e27a6b78f8da8172baab154e9b9f3b62e7fed88b400654a7bc47aaf0222a47f4746a48f5a8";
+  sha512.source = "a51ae682aa72fc60d80c4f4ae9489d2cea5957dcb61d5ed09f505cd1023d9d40b89dc594cef7756c24b6a2aa9e11b5c3f53af178d0e885fa94344a8ace00d8f9";
   hasRunfiles = true;
-  version = "1.3c";
+  version = "1.3d";
 };
 "pxtatescale" = {
   revision = 43009;
@@ -27015,10 +28536,10 @@ tl: { # no indentation
   version = "0.4";
 };
 "pxtxalfa" = {
-  revision = 23682;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "ac1972a7dd5445bafca244e04663e09c4e939eedf31e8038e2ea41d255bdf6a4721bc53a443f6663f989b21494c61b3dae9ddc9940e283cdb49723e6fabbea69";
-  sha512.doc = "55d06ddcb52e79ea590b24e8aa53a41dc18162ef9a8871ea69eafe53c6d0f5ecd5b548f97864c0253f543ca9f4eda17c665f1a6de1115cd8052670c934fbe52d";
+  sha512.run = "6d03f8d9be9d07643de2ef1f35fe30981861d6c230793912b3d093334260e53b3bae9ff178e97442425e527d1dbd0eac366fad16b0276d44378511ddd97eff52";
+  sha512.doc = "0ed329847a91c8164883b873fc7a98cdb1571cc733d9d71ddd9bbe52b591a71b03cf0d6bfe83d63e41f6524e01f38a91c67d370c661e02816622dd56eacfd462";
   hasRunfiles = true;
   version = "1";
 };
@@ -27031,11 +28552,11 @@ tl: { # no indentation
   version = "0.6";
 };
 "pygmentex" = {
-  revision = 34996;
-  sha512.run = "d6e6327d0bce32aafb4be5a30eae63ab0418506367a4a18305f2fa45156b27911bf2cb945289323839c82bfacd6d8d3a588a302bff1cfc29911cf7d761d83cc9";
-  sha512.doc = "effc3db243edd25d4aecf7c2de6eeeaa18ff085f6304bc390ee0276c07d7672d17202d8832a012e9fedcf3bbd16771aaf78a4262366744f5a27266693fb0e87d";
+  revision = 57190;
+  sha512.run = "6dc3ca792953c15b2777457b62a08c8d3b0275df8f8da9442590f61b64cc0640ddeebd7190375dfdb8d4bbc8582ed6da5ab7035bb0ff6617a27c2ddc0824d523";
+  sha512.doc = "a4ef61d97ea11b6595ab94b68697091b88d4b1b83a150f7faf30863ef91e7d1681662410d7c45bad9426644b554fa078979d0a3b3c8baa11a6714d49b811f5d1";
   hasRunfiles = true;
-  version = "0.8";
+  version = "0.10";
 };
 "python" = {
   revision = 27064;
@@ -27091,6 +28612,15 @@ tl: { # no indentation
   sha512.doc = "6b6fc20f5ec1269d318813b1ad34020e2b5341ed8891c11d2eda6b84884b3782e992dd9dde16d14b2030f2b57e1146fb6da6e761a35b12a3d88e8d865285668d";
   hasRunfiles = true;
 };
+"qrbill" = {
+  revision = 56190;
+  stripPrefix = 0;
+  sha512.run = "a0b85af4d872348264b7a8ac673bbfc3f4e0a7c36fa7edfa2fba78ee144bdce908adff6d3c363182693bd4ad8a75c0cca978ecd52c1442656ec1cc72f1506f0c";
+  sha512.doc = "9aeafdc2506e7a885dbd1f54bc827f72c86b994bc766ef570ad82b16e960f54547bb6f970772dcd58b75304ae33c00d0d339a969c902fc75b8431037af9dd9b9";
+  sha512.source = "9849b7e74ce53c526b8d28122852ec9c5ceb9873c1f57d067aaa8bfe09f09a6d996a45695a6e564bf395275b0b0e3de039651669e2c287cca1095cc628bd27ea";
+  hasRunfiles = true;
+  version = "1.02";
+};
 "qrcode" = {
   revision = 36065;
   stripPrefix = 0;
@@ -27134,33 +28664,33 @@ tl: { # no indentation
   version = "3.1b";
 };
 "qualitype" = {
-  revision = 53247;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "612570ea01cf7631d277a8a152540784f24a0c33c059e35357f5b753a213a0993ccb297dbd11fc831a7db3ef14c648bb1e39399187b42bf74b93c8b1c586b0b1";
-  sha512.doc = "7fd5285546fc3092165dee74c32c4622c3ef49dad0760b14ee0d1bfd3289ee837ad79cbb47c70c5ce1aeb665692faa660f9e6ae42011085ea0fb8a42eb25d337";
+  sha512.run = "c507e8b712f2ce40474ebf2c072654f00d71f1c21156cecced7ed40ea9beac07790a67250ebb7a535c19a266573edb5dbf8d1fe4d661b7828428cd1c7574a1c9";
+  sha512.doc = "20ddd865622520e4f9a7a1472c03f3c18bac039dbbe10849364a8ae1d0ee7d8771f30a02511a701962b2db25c79c74d3c2aa14f42951c7df9c0feb199092d510";
   hasRunfiles = true;
 };
 "quantikz" = {
-  revision = 50934;
+  revision = 54911;
   stripPrefix = 0;
-  sha512.run = "0d6946eeee69573a3c014a16c985da8ed193be32511723dd6302978851d9ac729aa7248be6cb152bb519b36e1b04bdc741b440d9746fc8106d326af67d8d10e2";
-  sha512.doc = "8dad4e65191d092b497216ed8d57249cb6edfcd54481bac8b1ca8af9734608b9f4f54e260be6ffc3df93353f81eb839db6c68e874a24f62acbb4613370578efa";
+  sha512.run = "e31e50dc3f854f7e2914214efa945e881ecd7ef17eb9a5b8017d911b0ea7bb8f57029a956aea9afecce551c289f08d5c9faed5f9b785d26f25cfd52f64a2ec6f";
+  sha512.doc = "aba9b0f6466f62bd806b5c02671d42d344c18a353f292c3193053908ef948801b0883bf9a47c51ff12b0059a2dc6040028bda01fe51f113ad576f0e8c90c95c6";
   hasRunfiles = true;
-  version = "0.9.5";
+  version = "0.9.6";
 };
 "quantumarticle" = {
-  revision = 51925;
+  revision = 56862;
   stripPrefix = 0;
-  sha512.run = "71568c84798b4ca114ccaa98475d84efb0e0332c12617bfdc72694aadbb3f6e30b9ff5a762baec0781420b02069a0a5874367e5d52089d6bfcda5d2af789cd69";
-  sha512.doc = "99930e86922c19d13f534f5d04a0f29cb4ffaea04e8062bb018c6a848dd7674becf8a515f43413f3edf48c5c485d4d680b371c857b24dcae6307ddb329307dfe";
+  sha512.run = "2d06c5ba42e81ff65171a37ad78e6bc8331bb4eb294056d6955bd1cc48e8c257c6eccf1055772147f6435094b934ea6792ea638c9eca58e94f3c1e387ecf3375";
+  sha512.doc = "6de1d9d40a6055f5e7282b532c6f4078d749620fc720c9d23841f5a335bd7bf5d37017ee82fff8f91811b2ea32b8792936592de20c9e48001bbc942f673f09d7";
   hasRunfiles = true;
-  version = "5.0";
+  version = "5.1";
 };
 "quattrocento" = {
-  revision = 52381;
+  revision = 56020;
   stripPrefix = 0;
-  sha512.run = "04184f6e4eeb1dedfc165778d2886e5194e48adb5a17bdbd91c1cd408f42287b501a35047c761dfe6114eac1cd9cc68ec204f73e7c7946c7cb44b9b915bf1347";
-  sha512.doc = "ec4fe49f7b5bee5ac61d39568a900783a21e67d36e77e0af6e974f7dad27821a01cda8ea244f40b02de7cf4d427bb8e7d5fd3db6bcb163f84310083dfef68278";
+  sha512.run = "8ef86d388e28f0fcfd66bfbf190f4a997029224387d3c18e81f7f1790d6440aeff72125608b471817911cb2deec1f0641e7a1c166bd0e04b8ce550800169a691";
+  sha512.doc = "c4727b3aef74633921949c5efc9b7486cd3537fa8bc738b36be5005ba4dd599f907238a6ee6d1bca7907b1b23c64d1e7d32565959a2d172267bb0910339f09f7";
   hasRunfiles = true;
 };
 "quicktype" = {
@@ -27180,13 +28710,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "quotchap" = {
-  revision = 51591;
+  revision = 56926;
   stripPrefix = 0;
-  sha512.run = "df77f5d148beb1b70d0d2683c1be2a1b556ff1fdd90e109a29fb222b5eadb5008dcd1bee4e36cbeabf484fe90cfbc7bd07f87d40a70cc0675fe18b9019ed712c";
-  sha512.doc = "b705fe959bdc23b5633f850831fe7b8a5261e55cc7cf71e75f4b626cd6a35201f0dbcbcdefe1994c5b4eeeb6d914cb07a5f335a165835b26a45d256772613403";
-  sha512.source = "d1aceae7227bd9080cbbd015fd2e3954e12330bd33ae06a6b98c9c63717a30796034d8bfc5dc1cd30ad07b2e55425ab2cd71e9145100dff87d98a11b11a84ce3";
+  sha512.run = "7d94162630e53133b79e33b60abb7c4664d3e486da611e37d48593757f39b0526831cedd0c236ce9b4d8ffc85b35734acadc98236435345180b999d7ea68c1f9";
+  sha512.doc = "e2fa71ee21ad019ef785a3c74ddab5f232d3a6d1e9fcdcedb34c216eb5e6d44abbafcaae5d1c4557bc1e4aae92561a75ba2c3723707328a12cdb6ff4c1b72dbf";
+  sha512.source = "eed36464f1b04852e8af08c5fd91c42ccccbbaeccad565e6f338ed5c87b003b2dd1704e1dad0ce0e49651461b637e8ed613399a0ae8122081e9084e47704665a";
   hasRunfiles = true;
-  version = "1.2";
+  version = "1.3";
 };
 "quoting" = {
   revision = 32818;
@@ -27207,27 +28737,44 @@ tl: { # no indentation
   version = "1.0";
 };
 "quran" = {
-  revision = 50980;
+  revision = 57601;
   stripPrefix = 0;
-  sha512.run = "0b6488c5791f3afe774d0cec602e0da69fc9d5c5a83ee0f660d87e7f58e43f78c5e25cc7c7da446c0bff1e69a1857e9bfb920d03efc8492f5a2e226a2caa6dad";
-  sha512.doc = "15d704615b7b08a570ede940ecd5dd73a75fa1ee07631b7b9354fada53ca42c87129b63a3c7825a17f37579b099131666cf2d20e81b9c09030eb7bdd8b069ec7";
+  sha512.run = "6df94a192fe113d39dd1a8e3223f7261caeca26243c1a229d7fb2aa4a34e976e23865b7c680cf9ef768ae182a418da64d8a52a757fa4d9f242a4e34aa3048a6a";
+  sha512.doc = "e8343ba6708d1268082192dfb0bbab200aa5a45da958d772dd18af21d466d069558755ef9d738a680537e7efbb1276c6c52125de0eec7222f4fe2089bd500d67";
   hasRunfiles = true;
-  version = "1.51";
+  version = "1.81";
+};
+"quran-bn" = {
+  revision = 57602;
+  stripPrefix = 0;
+  sha512.run = "1630d336c3be2cd93a338f572f96d35b4ea40862fa6dc3549a8e2b5bcc3b83e663592c9af362fc06a964e1206c0b27d43fda99ee1cd1af5d00f53ed45b52c0e9";
+  sha512.doc = "871baeb8f1af5e622d587144095a57fe20cd74a5fc95831581aae2f327163bdeadccc84686a4892e85e038b5a3611139bdbe001fbc870341d83bc30d478b3929";
+  hasRunfiles = true;
+  version = "0.1";
 };
 "quran-de" = {
-  revision = 50979;
+  revision = 54191;
   stripPrefix = 0;
-  sha512.run = "bcd27ad64c01fae92d91155c918e4880837f657cfe5dd849a8bc137830a8b2bd6eb9942c1764e60f65bde41ce2e4397d755ce621ab83c5c56d181b60042a503d";
-  sha512.doc = "baf460bbda2bc6890585dd21d0f86208501ddfa4443ba0d4552e1748ad44ba578fe78e79928a0c2556eca543089c2802616b9a4f9637c64ace7d01ef30168e39";
+  sha512.run = "d969c3fd171102e4c47bf4eca383a22498fb6e95a5f8be288a137e12e1c92adda9e92587c402ccf87fcb116597c6074e64eb70b8249b208e7d1bd684d6ffd6d3";
+  sha512.doc = "4a371576e7754789ec67cde04f533ade561d770cbf410e31c8fdb737d127dd36e0f8f6a233512b147ffd5692acecc43e1977c76efe04b1a65de3c6297038a954";
   hasRunfiles = true;
-  version = "0.141";
+  version = "0.2";
 };
 "quran-ur" = {
-  revision = 51013;
+  revision = 57597;
   stripPrefix = 0;
-  sha512.run = "0a6f214eac72a453050de2e2bac8574bbf746c3abeb528ed08c816633f2ea216a9e08f9be517c4bfa2a43924f5ac1921291c7f598297ac23848568f6ce85ad47";
-  sha512.doc = "9bfbc6ee1896e1586150fd67443626b6808e9d15efa5552e5ad238c3d704868121ab93355a0b170f7bd958992b42b1553006bc2e28ad01bb555735da70ed1fe9";
-  version = "0.1";
+  sha512.run = "217d3bdf7ae9391dd300ab0ef390dab34d83675be41c6049897914c24abacbde29d57a68e6321058d91cc63a1b5143bba3b15c7bccc8d55f50cc3efa0e3d4016";
+  sha512.doc = "9be2743ee3d4e0cec70731f5ad5bc71c574ad122aff7b30ec50635a5c4d1c87801b324f048e141e2208bc59af5995b9ff166c7eaa06306817629600348f55cbe";
+  hasRunfiles = true;
+  version = "0.21";
+};
+"qyxf-book" = {
+  revision = 56319;
+  stripPrefix = 0;
+  sha512.run = "be1be15996d6db58200ced70e6b17d29ad015bd1f1ae1dccb7cb50e225e9150db76511fbec37d17711e10104322782f92bf9fedecf990fb4358fefc2df7a78e8";
+  sha512.doc = "5bd3f6f9576ae2cacf3351db9cfe59ba519953a6e25e32b2ab4215a928d7a0f2903a9c75f9432c8fff3d9b7221d6ea09c439421eb5c5ec6830665d89836b9d63";
+  hasRunfiles = true;
+  version = "3.1.0";
 };
 "r_und_s" = {
   revision = 15878;
@@ -27238,13 +28785,13 @@ tl: { # no indentation
   version = "1.3i";
 };
 "ragged2e" = {
-  revision = 51780;
+  revision = 57638;
   stripPrefix = 0;
-  sha512.run = "fb74ab5a4aef68ead15246701eb7ddaa07cb0efa66f309fe1dae067cb7e8fe38df9ab9d47338342895fccdea30fdb189e1868e3338cf84f61cc787a704697b22";
-  sha512.doc = "f15fac0d6949fdac80ea27077720d72ffd7ff2ae695d4716875280d045b25c485016d8e72528957c10f93588d5942f440e67d79f1544d91c3eaa912c2f0e8067";
-  sha512.source = "f64a195e25aef5c691e1a925d9b2739a7dbb7bff3b8a100ce8f0c477ef222b01c52dec53b5c7a80f34be3f425f58ee6d88693b7a42c188569c08a4e0f5230abb";
+  sha512.run = "716cc6067273735be2f4c9922b043441076d37f7d08fac0603564c9cb8f082f5dd91bceb336ecb3ad69e6d9a88367067c71fd08678c1ff606c21109daa66a140";
+  sha512.doc = "ecc36350f01e86f63ca54a2ae5ca1ccd17851756731af3997d9b172753673f39c05e82d9b3f736896b2be1c971bdd0c700678a6d44aec2226a7f57bcdc085e51";
+  sha512.source = "2a9a755a3f3978c3e9077e3c36eb642e18895e3bd5fce44af71d2fb094f1a46c3e61cce21940eba5b6d7a3d51aadf6229fd9e0941610e9bc42dfdeb67ee49514";
   hasRunfiles = true;
-  version = "2.2";
+  version = "3.0";
 };
 "raleway" = {
   revision = 42629;
@@ -27255,13 +28802,12 @@ tl: { # no indentation
   version = "1.4";
 };
 "ran_toks" = {
-  revision = 53271;
+  revision = 57520;
   stripPrefix = 0;
-  sha512.run = "44c32e48f06a6c6f71a1a205ed4e4a818b100698e04828a2e5cdd305f1309f736a77945b79939258edb9606f8542a1327766e120075476168115d35a2a298fb6";
-  sha512.doc = "35b639dcdb54196bd73489e1e7c243d28c5cd24e957c06184c2e2d419f73433a140856313dcb67e2ae7b42d3e0833a283199fb2d251b16710c1ef50827c1bbb3";
-  sha512.source = "7a652b339f7828493761e1345299fd6ce70f04c228459d1d8f7b628851cd9dcca4643a54ab3ebf69435cf923e57cf5cadf5520d2a764eaa1c742b63e47b490e7";
+  sha512.run = "01bb17e3c2713e482670d3229878ba85bae5405476708b18367f0bfa85766b72b82471a8ff47993f88ef2bea72b1dc4019ed874185c94fab3171fe02f984c4c9";
+  sha512.doc = "607924d3e8f09070318a5ef2354acd12fd0c57b3e7d42f45b84048f2cd0693b72811abe0485dfc45aab224c500fa4731111ae66c3e3aa25eaf27e1976b63d938";
+  sha512.source = "5aba0e7472f214e367dab1a664f61fddc4b2a4b3eeb5737f2b476d6a196f33ccc4d28a6d3ab00f85c41291b27ef0699f362460fb6a0fe60dd28db67138b9560b";
   hasRunfiles = true;
-  version = "1.2";
 };
 "randbild" = {
   revision = 15878;
@@ -27272,6 +28818,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.2";
 };
+"random" = {
+  revision = 54723;
+  stripPrefix = 0;
+  sha512.run = "a93eb4d5b526285da18105f67bef5cb4451b7b71be50581936a4718ad99360dfd8141ee9437d374c56eb3db3aad9af4ec8e1555a4a5b8654711bf64aea3f419b";
+  sha512.doc = "f2aa83c5e34707ce9f7cb46e6f3b1632784ec741a68ba9faec0d323aba2054de55f184aa9f1120491bbc60db2040087c4b2dadbb9a4b3763b84358c1855974dc";
+  hasRunfiles = true;
+  version = "0.2";
+};
 "randomlist" = {
   revision = 45281;
   stripPrefix = 0;
@@ -27323,11 +28877,11 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "rcs-multi" = {
-  revision = 21939;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "156e3f47b8f4eae8cb959bd561cca2c592a43483cdb99fd04a88593ab5fd585a814b0e3416a835ce8d249969eafe119cd80c9c5364f40a9e595aff2c5f2e6f65";
-  sha512.doc = "2eafcfc5c0297c021ea7f35abfac9526c4a40cd46efb88ee6f41a5c0f5d68586263d3140db73c1f9026cc0fc856a888369b21f5d85679f5eb60dccbe111938d3";
-  sha512.source = "6fda675809ee257aa7f96a3ddcca5e3ec8577bc337c3f303ee6658bebace26ba271a367b116abc32fcb2633bb5c57a442b2e12fc2bf67b8326ffaa46f08f6ed4";
+  sha512.run = "4b8cda573edfeed6f5ca2c993aa72c6cbe42f8705e42e9004f6dd4ef85e2e6bb4b9ee9b6a865ca7966ce70d685ceb5255e87545c2159feb30986ff8e896ca41c";
+  sha512.doc = "a2a2cf87235015aeed11a1f924fd7d719e568c99890fe7434dd1ecf7853247e50f8fab4c7a800a19e4390c953d940107de009e74695248251d76f773d37cabb4";
+  sha512.source = "2f72796d40de09422a67cadb68a093d44b5cff71f51c33c681117891fae080bcba43baffc4a12a7daf8b486c75e8d20c8b86612d411af67458a1f7e3c69e1d75";
   hasRunfiles = true;
   version = "0.1a";
 };
@@ -27340,6 +28894,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.11";
 };
+"readablecv" = {
+  revision = 57433;
+  stripPrefix = 0;
+  sha512.run = "2165f742cfad485942ec3ce085c3f9eeb7de1b75028020f143661e69a8694ea4f321779c79ac04895771170310e85e4f9019a86ffea0cc4cce97eab2f4ae055a";
+  sha512.doc = "78d4721ac35a4361141f0a1d84a5d7d7a416976a1e8445f96c02963fbd924e86555f6c0c7a7beaba1573b9488086be4a3b65ae826ae7db3e16de6e386fee2fda";
+  hasRunfiles = true;
+  version = "3.0";
+};
 "readarray" = {
   revision = 42467;
   stripPrefix = 0;
@@ -27349,11 +28911,11 @@ tl: { # no indentation
   version = "2.0";
 };
 "realboxes" = {
-  revision = 23581;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "944de8b761acc0949ba14c0d506287b64a1cf8efe20fd26dc74930e589f4d0651ffc3f1c4959111091f90d0f869ba18cc9456a5c58dee0a1b4b8ae7c1c6c02a9";
-  sha512.doc = "cd194a9fd0836c8cefc57c26394f7e7f684974c374f787f3ac6d82daba3ac1e9f17aaeae06f26fb9851255bf53bab6290124a1878289651dedec824238e8193e";
-  sha512.source = "4ea18fd3ad7988447d1c2ad993d76dd1f2c4802356885636e80e5157a3892ecc235d9fce90093044dc9415056a986ccd5fe2f8eabdb86bee3eeb27eae5509be8";
+  sha512.run = "fa998a9ec7865f65c96fdd2c7015646db01f72a6a3d291c98c726fa295fb883f0e6d7fceecb1276bd2668729bfeaf0a9f9eaae19913ed6af2f54530243205d16";
+  sha512.doc = "43d982eeb7c7f6405b35c2b37ec20fc92fd46a1f3e1a1ac8fe69bc74dc5bcffb3bd50c791139621d9927b07fb80e78283f3e98d13a552c5bc29d5b147fa28b04";
+  sha512.source = "5976fa640a0c85e837a606e286ab50baea1a75283dea9a0d152a901ca2f565327c27a0f30539b7536bf00614cc998e1c7b8c6b8a28f22fbd121beeb8f4503b47";
   hasRunfiles = true;
   version = "0.2";
 };
@@ -27367,27 +28929,36 @@ tl: { # no indentation
   version = "5.0";
 };
 "realscripts" = {
-  revision = 39706;
+  revision = 56594;
   stripPrefix = 0;
-  sha512.run = "20301b045034aee5650a976de1341cb0d1629d6d622e75fd3c52aad8f1cd6377d3e1095e75ff0552b9cba887f332205f861c24c4fa453bb9f957f1dfb2aa2968";
-  sha512.doc = "5bfa7a13e824a6d7ade0f81fec6f0c9164035c8a5b512d5a49eb4b47b0b47ec514aa430a34e6cbad463674a180a3119305b5a6525cad824b8f21d4b15b03350d";
-  sha512.source = "71a4e590c2e3b7d6755bb2a65890e75ad2d380f26649600dd4e222ce9045d4a7bac371d37fcde0afd51a09c213f5234ab2e268c45438b49d846f1de12fe21293";
+  sha512.run = "fc0c686971c536b3490438e74322aec06371857a987bd70a6def7310441229fc4813d2080c5aa9b5e22cf78dc8ab1c3ed75b301acd987117d3e6f1f589f78981";
+  sha512.doc = "bddc4958f2c57e5e05fa31912a6c19ee123be463527f2e1121405194ac47b6a806790c204268bcf590785c927808b75305079ed44537ec84284c594d691c906d";
+  sha512.source = "117c3dadf6aaf7a46a3290f6c49d23f62af1206e512bde7098068071e9edf00bc7da0fb34392b0911a4ae525eb0a99b946317d31d12d3312879debdfbb345a84";
   hasRunfiles = true;
   version = "0.3d";
 };
+"realtranspose" = {
+  revision = 56623;
+  stripPrefix = 0;
+  sha512.run = "413eb0a65d79521c81417afdb2d7f0ed8bc625d107d2fa19db84ae04a1f27f2da8f07fea27139dee411e1850d8646d63412eb581b08a9c4dd69c886457027cd1";
+  sha512.doc = "a2382dcfa84f3a2773ef6cfdd5a10bf23cd541927e2844419d75be6206ff5b42f37243ab2157ed5765c0f9c090340b6b75b35271157daa3440ee9d81ecdff9b7";
+  sha512.source = "5fd124830f8e5e29cc9b1a2ef967a21c2065d183bb8ae1560b95e66b09d1248b8bb6a65e6321651c23d309c2508c05629c2b7740e8c57e4130d2f06b99347097";
+  hasRunfiles = true;
+  version = "1.1";
+};
 "rec-thy" = {
-  revision = 50047;
+  revision = 58732;
   stripPrefix = 0;
-  sha512.run = "cd3d8c9f6b08e4471fb377586ab928c7173e72162269eeb9856d4fd50a2c89a1e1509bd36356ed0d37d89eeecb22391ca17bc5a214813acd3496d4c669f261cc";
-  sha512.doc = "257746313876d190f62d50dfea03a614c5b6732d79b7f43b7d6c41be54c8827f82c996570c50907641536e1e5ffe172d495e1f3db94d8d1e13fa5f630225337d";
+  sha512.run = "6c7b66557d5d7b834c2838415744ee1da8eea05bd25292a9793b3a992174ff250f0f66b5ba09d962bc8d1abd0414ba0ef639539318ca1a30a877ef8c06a48a42";
+  sha512.doc = "a11ea08603dde4d2a8896c5ac392efc93de53f988b2d7dd458d06a66d91f8f014cb08b56349be4aae7d36dc29b47fb8d6a3e4d74978cddf85d12e596c42cf384";
   hasRunfiles = true;
-  version = "3.01";
+  version = "3.7";
 };
 "recipe" = {
-  revision = 15878;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "bd6046896b15d362fbe91e92485cabb1100485b5c91d4ac0214aab12e0debdc900d8693e1ca345da0152cfcd400a2f4e7603fc3e8476681127e64313e2f9b954";
-  sha512.doc = "b21b70e757a0d842adfd70f0bad21f46fe9b3242bacf4861de183b833edc950eb2cc06f0d3569a48c8e028283b1526741a309abd8fa9501f9541256bbb357ddb";
+  sha512.run = "03e9e48a2e423f36ccfbeb2e61ffc7c3588658a158c1729f697ce44d98079f104cdf1c17d85ffd5700a7532f762e22da0c4388350007eb13226cc0da43b08678";
+  sha512.doc = "4dfd27cfbb4f5f5f45a5fce25fcbee4c9881990dba1009337f41e4080686e993246189595a7c28b8d56bdd2e81a70e9c6fefcfef0897736d5400888bb9fca210";
   hasRunfiles = true;
   version = "0.9";
 };
@@ -27483,22 +29054,22 @@ tl: { # no indentation
   version = "1.0";
 };
 "regexpatch" = {
-  revision = 47601;
+  revision = 58668;
   stripPrefix = 0;
-  sha512.run = "ef1f12a2480834e447110945e685cea36a5e72abb462106bdc42b086cbbf0d0f9857429d1c5ec243eaba74ee39ce8af29a758f8741a6a7dae05f376786971ea4";
-  sha512.doc = "6c6ee8769f2a602c4afa9e043daeb5151db1d5aa92732201f0d3c36d07cc754a9dcc09a15fb2cfe69527aa80633b26cc522bff0b696d774db933b6dd0c916369";
-  sha512.source = "596024cf733d8a0e51d632ed2b1c9d7ef7594636a46be04b80dcb6fcb6b5b4cb45c8e0fcaf8b6ad5c1dbffb2206eec8ef6c2eb20a2af59258edb72983169ecfd";
+  sha512.run = "80b3be47155c8cd654d1b3ff7a1e261da826d97237b15733e6f63f6e3e9f1e40fb8f1cfbff48b38c4ca3acabdd3209147664aa8aa408b4601751f58d596c0f38";
+  sha512.doc = "7cb6eaa1ba3e7ffcb80001b2380171204059907fa5345c3c684eb84861340f70590a8b5f1f3fb30a84516ccb2d49b3245a6a697b328157f7ed09bf9caa80982d";
+  sha512.source = "bbe6ee9178c3f7d3272fd585f50f0ab66a86d38bbc65ba40a7deb8e22c6d300299c8f4203d3849b5f3c068f2194bc2ef0206ed0c0e5ebb3b235d8a83cd367d08";
   hasRunfiles = true;
-  version = "0.2d";
+  version = "0.2f";
 };
 "register" = {
-  revision = 49581;
+  revision = 54485;
   stripPrefix = 0;
-  sha512.run = "049cdd2039a37857bde1ef3f7296da1b6e95a62f366e43b508db8ef70e6afca7a763632078a5379c620692febd49df3afe4049d8c97971fdddd37afd8e357515";
-  sha512.doc = "fe09f70f908d9b96ad961bbb6c44731572eec871f3adde68dd5b0a094ce932ed15e8bca7982997f17e771d202d9bee6d397f1c4c6823022faf53baa47e40dcb0";
-  sha512.source = "631a77363ec20f7cf849fbf17604870bf7868ac3d4a89768b7ae72abef34f2862502ab51bcce7b164fa497f5922a29755ac4e1a2d3ee2d7471a28be9bfdad89a";
+  sha512.run = "709694065b22e33c9d3f8d859ba8632672bd5e3fcf6102d0915c203b4fa6773e0e78f02b1af537b3ff2eabab5dffdae40e0dce63232037c37d4e50ff325e8116";
+  sha512.doc = "08ee956f1f667245f3dc63a27f10b898a03929302f68f1fe19bfa3cc923a890ca72795d4500b16da31e7f69d375fc60e5023ebe404f3ee8b0ecc289fb7a6af5c";
+  sha512.source = "9bccd74449f5b20fdaae9b1a6e9178a1849f711bee6ca23229c20bdb78f036a81d38a370cd8dbd0a092d0f9fbd0f97b71d61e81f337561e7345610e04412dcf3";
   hasRunfiles = true;
-  version = "1.9";
+  version = "2.0";
 };
 "regstats" = {
   revision = 25050;
@@ -27510,13 +29081,13 @@ tl: { # no indentation
   version = "1.0h";
 };
 "reledmac" = {
-  revision = 53675;
+  revision = 58763;
   stripPrefix = 0;
-  sha512.run = "fb2864ae9a8efbc466c7ac1d741fe4345e31fd59f8aee65f43a8ed3595cb13806030c71fe3678ae4e445b8a4d96e38028424dc1b28029a7dd099143151809558";
-  sha512.doc = "4caba1ec60ce639eb856be255348dde680edc7bc60e276ae9fea638abe0762f2ba45f67ee1050f529005b7fe0ff265a4abb6f868b80b36bf54745bc1d428e264";
-  sha512.source = "c506b4a40c663ced144b5712e30860be7072e8eeed1d596d18810e780b0b10f081515650757b70c99c2ed46717b2fe8e52e84dfdd57f4b1f3265741304e65c41";
+  sha512.run = "9e735a11d0538d2590ef9f4daa93df54fa40678e668129b79aad193c65374895f4a11a519b714c7c3d65174af054853bc777fb4d5bdf41ef456c7896028b0d0b";
+  sha512.doc = "7c4d169751893332c65cfcd25b4f9bdc902ddd5581d9df9787149762cdb623e63c580f959bb40c03c5d18c1356d461b94ea13255faf0fc75f49ee35fd6e68acb";
+  sha512.source = "ec3823d10f63ce6bac7090acfbb8f1965704fddb1a8164b435f355090490ecb69beab7af79bac9f30abcb21276120e6cc86f05057a30c5884baecb8f421b0035";
   hasRunfiles = true;
-  version = "2.32.4";
+  version = "2.37.2";
 };
 "relenc" = {
   revision = 22050;
@@ -27559,21 +29130,22 @@ tl: { # no indentation
   version = "19.06";
 };
 "repltext" = {
-  revision = 33442;
+  revision = 56433;
   stripPrefix = 0;
-  sha512.run = "32d4e90befc06db973de384855c174ea0ed9ae938a9ea280118d82387fbcbdeeab8fd1143a96c9afb2b904766e5fc43c0d4eec93d763b3e0e730ac06f6883c9b";
-  sha512.doc = "ead39615e96c4247be7072dc4fd715288ee1c8cddeb4cf88c5ea79a6659808936fa6eaba3dced3efeb6802e58bef4632604e92d1f00c29b8f0bb3a241d56559f";
-  sha512.source = "f01bb1d0ac9a4ae0303770faf083c447d3d800b43848d11560f67ed43c50f09e742e27683e911395b9ee7d29bf962f4b3b6791d3d25fac630d57c967bd14db4c";
+  sha512.run = "a5deadeab45a6a2ab4732e91c26da32f276e2d5b35ff357faeb3361c917c3b47c81e59cb6934d052d3525df2a810510e6fa7a8b9e9d6d272c91b4b558de7132d";
+  sha512.doc = "0694a76754c98bcfb6999ddb96c368701556eb1de025af1ae32ab8e39361d18405fbd2c1438c1ebafd2cb06f2d9884afc08e1c94f57eaa89313f54d58a289808";
+  sha512.source = "79a4c693599b0f20e4e1b2210f65dab3b1cc276bf3a661f385a2ec70c703846e881bebd2d6ae8913a007b832206e033f178c4017fc69ef099c3ff87f4b40f651";
   hasRunfiles = true;
-  version = "1.0";
+  version = "1.1";
 };
 "rerunfilecheck" = {
-  revision = 53837;
+  revision = 54841;
   stripPrefix = 0;
+  deps."atveryend" = tl."atveryend";
   deps."uniquecounter" = tl."uniquecounter";
-  sha512.run = "7c4e3a840b0c02b898182271c35fe36b3c0f77250a8e1629901df500ac12fca887f9f21aad62e3e43f747e409184e5646efd121240caa20f83d785b9b2aa1ed0";
-  sha512.doc = "d710c123a00a1b8a286dd9973356772402b6cd93d4debeeaa2e961b1bf7fe2714c8b8a12ad877f66dc5a6ae995235555838f20835f5f4522d110de07abe2e1fa";
-  sha512.source = "38c2f878bcd0322fb2606cce01f64b402acf816995696bdac58bbe0b8830ea8e3f09645d74ece6ff073e236996008eb78be332978441654494ca0377f44961b0";
+  sha512.run = "0ac228620001a42add1da0ea4ee7511413789e6c8e139a8a8a9f5cd0423893b324c1ca3644cef7b16bb5d2d4df26baa73b61d7aea2592b752e446b7185ff0cf5";
+  sha512.doc = "5aac852ec67c34b6b2f7d040f7791ff9d706446b5b2a395177753d279718d5685a99b25a6f4121d532a395a29ead4f62d76760de48b0beb65adac0c08fbe281e";
+  sha512.source = "5201946b44007bc115cd7840f20c9948dd1a6e403290c301e5e735be80eb91c8913630d0d1e41343bdfefdd18ba0a247869d28ab152a21de67b932f1d181fa39";
   hasRunfiles = true;
   version = "1.9";
 };
@@ -27586,14 +29158,23 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.35";
 };
+"rest-api" = {
+  revision = 57068;
+  stripPrefix = 0;
+  sha512.run = "a5a8f299d6feaaf4079e4a99fb84bdf7752016c92aaca0d0060692c13a7656c230e611e06bdb805712e7427d2e6cb599b96bee77e0c51ed769c4bc49cec32f1d";
+  sha512.doc = "b823828c122f971101a161168cfbd489985c159278de80db86647b0c0adff207747b6877795ca97b27f541c7907aff90213feee61d4b039dffbb8b7514923e54";
+  sha512.source = "2869854fc933ed536ef425d8418303e3558ed8e0b3681c2d7042e1386b0069dcf70286ee732e0f8ace19cf6965e3bb046caa0384ce1423e1c71d9591012e5a10";
+  hasRunfiles = true;
+  version = "1.4";
+};
 "resumecls" = {
-  revision = 38427;
+  revision = 54815;
   stripPrefix = 0;
-  sha512.run = "b7709500024b7badee75ef912158b368e9e3d01a6051b75ab0fbc4e5c90c6bee36226096a29891a32e1ef6dcb87a10e23b4fa1531c34caa48443c22726b07c81";
-  sha512.doc = "a99f08f236cbcb321a106acc6b768aaa0aa10a7d101dc635dbadd161e1681531950cbc161553cda82f2edcf0cf94af7b89f5d53d504c049181c3f63a0d0ce527";
-  sha512.source = "071e7d3d835313f0ca38d90f632d8c83583fd552de2b612cabe0f4c6bec097c944a1cb18f316d74cabf6ec0a0d4d3e890f2adb1904ca01af939cb97470430a77";
+  sha512.run = "1ee39179bba50d32bd3d6d9a00dc9f77a9a2b1822e13958b15804307e36ca208eed327f4f8ac144418e2ccde8d9e248dcf4c72bd137bf440f956d60d0bb11634";
+  sha512.doc = "23a3484a598f3b18763443fd4131a2e0278f17788aac6b640b00f0935c43ee7c3da5850892b525eb6bdbb9fb01d543f7a22b93cd5ffc64290ca0fa4f41a31354";
+  sha512.source = "a2c0f2062f30675fd4c336f618e7f25e1abb2737aa98f5bcb499c5941ad4615246046f9b8a5aaa57d94ed3b40906a73985c2045f8e571c2d86cc0e7dd2c243da";
   hasRunfiles = true;
-  version = "0.3.2";
+  version = "0.4.1";
 };
 "resumemac" = {
   revision = 15878;
@@ -27626,22 +29207,31 @@ tl: { # no indentation
   version = "0.11";
 };
 "revtex" = {
-  revision = 49751;
+  revision = 56591;
   stripPrefix = 0;
-  sha512.run = "c3303edee2d0d7f160381ce91c4018023d70fca88c215d5ed9d46abcdb71eb79ec5a06a899575748dd9d2572323cf80f0ddde75b9c7ab72deca5fb9bf396e0dc";
-  sha512.doc = "ebf8f55ef5775b38cde9199e6c604e71400608e6a06bc59482fd017be8d5be68ed08e21ee87a11eaaf59e09af0f89fd7be1f6334fb67e3ca1914ef2c5e382e8d";
-  sha512.source = "544482b0bb2b9a0f8d0d520cd22c3030bd2efaa88bea1e4f2ff032dd3fccb440766503c7d1a2b467c5de1386509e319235794659683c2248987b743c5d53f3ac";
+  sha512.run = "3ae6c843dea5ff9f91512a1b713aa2dd05f76d7116d2af3f005506864062a9d1e27888c33fc12aab96d5c566e9e7dcec0f91189f957bb4d2aa69953d6b10c316";
+  sha512.doc = "9110bca4c358d5364acddc8a04d95df821249bc93a9e811a4d94b703b6daf124962fcec404354bbecc32557ddb7ce67993a6dba7ebad514672dd586995cb23c0";
+  sha512.source = "88121fba6636f753b96ee19beea708d642c20292204e30e0be85dbf0e0af8e2e87386fe6596841e8c89861d2b4e6247913bf26fac35b1eeb33ebc0469e1be5bf";
   hasRunfiles = true;
-  version = "4.2c";
+  version = "4.2e";
 };
 "revtex4" = {
-  revision = 45873;
+  revision = 56589;
   stripPrefix = 0;
-  sha512.run = "7b4902efc551bb4224304adc3553a229393bcfbbf8c052b6e3d4e0f800ac3bb2f2f838f3e77144aa1693fd09f06c7a05c22d7ab0de9de382c53829891fb0f44d";
-  sha512.doc = "d0757cce30acb2703a78310d1a9d27c7d28f5c697c3e70e5df9b2cc63ea122604b618615fa07da586cf8f78ec04b5eb9fb129a59a9504c6cec5acc07d05cf1ec";
-  sha512.source = "ac0cef14df3a8398ea96a0fa3d947f550305a45928ed539a6760e5d8812f8a4c69f94352c36bf86584ede364220fc1129ffd54281fc98c62f01fe51d23448fd5";
+  sha512.run = "cd1f83a7f2664c6002b93bf7ac3b5dfef4767b79f66cd03ed738e395027736d062d23f1a6a9354834093857d467664168295e615ed1c734b708c098943d7bf87";
+  sha512.doc = "3e74689745c65b4ae0aa5afc946983aad0507de7cd382db5cddfad6bd13e1414d5f72d7fa1308b3fb65b34eca82ae632b772690a67c643eca6a26490508f7597";
+  sha512.source = "32be85786fab483ac0bf8ce8e0bb314a3920e17b3102ef7ad719a4e43c3fdae113089c76587ff2075f7bedd1a6dde3fae6123a0f346082aa7a7645e7c76538e5";
   hasRunfiles = true;
-  version = "4.0";
+  version = "4.0a";
+};
+"revtex4-1" = {
+  revision = 56590;
+  stripPrefix = 0;
+  sha512.run = "8c3e7c3845cd070ec51430a14a5b2d6f5b49821a837a6ac1f3a8889b353324479cf6121de0084b021c46722c425caa997b1b14df454f70bf7201ae4884de0f33";
+  sha512.doc = "d17acddfc14e54d74b874d6d7599a3d20a2e314072a760b0d03ae7e17184e0264fc2d98f0d3b32109147f9b4e0a099e0c7f7e8747730a567d3a2b44d4e4d22f9";
+  sha512.source = "d21d299085b7ce98e665cdd28754878c95beb7b0f0dbec970be3e39334bb520eee0ae4784cb4118b60edc0a92c6abb5bca8ad567cda65f5acdfd72449b15f2f9";
+  hasRunfiles = true;
+  version = "4.1s";
 };
 "rgltxdoc" = {
   revision = 53858;
@@ -27677,27 +29267,27 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "rmathbr" = {
-  revision = 40415;
+  revision = 57173;
   stripPrefix = 0;
-  sha512.run = "71ad547496a4159f2ac609bd695bd3a38879dad118cc18bc58d8fc4c5a8da3d77abc609a0638584495dbb77bdf2078a30ac82f2534bfdf5b620d056b20aa7a8b";
-  sha512.doc = "ab1b89d94e5fe92023ccfad1264aa38dac9be485d2717b4afb82a441e6bd8eb5813892c20c33a65741f62e6a8c4bbd3e3c778fe86f7d0da72080d51476f49a38";
-  sha512.source = "255ef1cae8a42e34e11e1cc4b8599afe1f166208bef00372d89ab34baa55d3fcba298e01bc2d639568135c66e77e7fe62e558a6e3ba38485dde387ad76e0da4c";
+  sha512.run = "d1394e40203bc7a0adffd26587870ad4aca0faaff6226047cedd5ece5e55e6a99e56829a38ce40b6736c1f9a03b9bc4b337a0e4f9eadf0617ddc385a60372176";
+  sha512.doc = "e7c8d4f198399ac35e51a0d1c2c6ec420c746768de362a8179c0208325a45b11a8ba6445c2b7a433e7689e677505e3baa4b87d48a749bea5f3243d10f43deb83";
+  sha512.source = "44e4859933c2a5f664feb1bd40ce1e51da845fed56b8594d3fcbbc814654c80b18d20760db3c2690fbfa74233523e4e8492471415154942cd2666cc52837a98f";
   hasRunfiles = true;
-  version = "1.0.3";
+  version = "1.1.1";
 };
 "rmpage" = {
-  revision = 20002;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "d1627cfdf5ad3f23d03d4d06a4fa039e2ec7ca924245bbda7333b90a7cab8d1e22937cf23968eda45a2c3ff60dcae8a99e2223f9e235485a30ae68c4db7f901e";
-  sha512.doc = "25fdd83906edeb10e5493bdb00d05469dbf323bb7bd3df587a5f6dec5af17ca844f27cff4eaca3eaa6b75928cde8a633f59b2029b60f03220d847222f589ddef";
+  sha512.run = "13c05ff27a2b5979102c80bf30cda04d72fd144ecf43359cafd427417ed9f8921332a0cbba704061847c9f1d740f795ee1135f6ba2ba183311496884189e3fec";
+  sha512.doc = "e4de990151be0c984486b833b9f883d1f3412371fdbcc09900b89849b943800cb269fe0164695e95472b463bb4dc81b92fdc532dd59a9c3ba451fb961b89211e";
   hasRunfiles = true;
   version = "0.92";
 };
 "roboto" = {
-  revision = 53095;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "f52f94089af19aa4ced216946f8f2f1f69364f012dc16b044221c66681dc4aa83837a05521b973f8e6e8f8dba86bd5473d1b25887ffb3b4479fbe00c21af22cd";
-  sha512.doc = "1478c55c0d2857dba5a64e8ba7f19506e58b57eb10b913afeed9c005ff9c859ca22d26ca9ed7cffc7c30dc33ba9b11f8f9453a817fdd7b4d60bcbded149f0975";
+  sha512.run = "08e409a234850d70207bc7551d61bdfe40869af032bba2d81a99f7507d399badaeb9e8dd8d663127d01ec78520c7dbb1d60b5de8395ed5a180de2d7b8c59aef5";
+  sha512.doc = "f523a6017869c98991c766ea1ca3febc36e780fc66c0f9fbdd00036708865663670d6de178781489f49b2a0a0c7d3fc01c240fffe7cb06d6cb98fe355b15e549";
   hasRunfiles = true;
 };
 "robustcommand" = {
@@ -27723,6 +29313,14 @@ tl: { # no indentation
   sha512.source = "d89d02dd79142344334678f2d8ec4f34eb825532e8be9260cd08a43b28e1aa94ff5655c1c1eadb2f9a365e51693f6195a4851e1420072c867d8b2c0f1cbcbbb4";
   hasRunfiles = true;
 };
+"rojud" = {
+  revision = 56895;
+  stripPrefix = 0;
+  sha512.run = "cd7065dc6a916941a0fd05ea342d29499b6f7496d1934e06c49e7ea1a99c5be5cd515bbcbc2b5935ff8132adcc7b94e653d55de967700410ace55697f6fc156e";
+  sha512.doc = "fb9c9f00433ba959ad8f7b5acc93b1e7b0db1cffec96b7c988eeaaae89ceecc815071a1e21f78d36279e529f4e9095602b1887d3c5d4164494be502cf4a19873";
+  hasRunfiles = true;
+  version = "1.2";
+};
 "romanbar" = {
   revision = 25005;
   stripPrefix = 0;
@@ -27881,6 +29479,13 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.6";
 };
+"ruler" = {
+  revision = 54251;
+  stripPrefix = 0;
+  sha512.run = "a0ac63735eee4be96fc368bece6eed80058b79689954780990e1da5632448203c4f99d9b13f541a89e523f4a531983d5fefd836b99ed64c2f177723c822f8749";
+  hasRunfiles = true;
+  version = "1.1";
+};
 "rulerbox" = {
   revision = 50984;
   stripPrefix = 0;
@@ -27898,6 +29503,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1";
 };
+"runcode" = {
+  revision = 56594;
+  stripPrefix = 0;
+  sha512.run = "f7f9aa70a4a7201841eeb20e173c8f550ede9716d4608c5c2e762c03945fa8b279da9b2081ca1fa1a15ae19a75860507a51c78bcb13cef48d2ff37a1d9d169da";
+  sha512.doc = "eb9d3cb287e94da44d921c471e429d3ab0e70e74df2a7f7b19fe4efe514641d58f8fe5a74facbcccfd6b4c45ab2af95121912980d61e57e3ef6a3ddabc861359";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "russ" = {
   revision = 25209;
   stripPrefix = 0;
@@ -27973,20 +29586,29 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.10";
 };
+"sankey" = {
+  revision = 58661;
+  stripPrefix = 0;
+  sha512.run = "be2f6f2ce386abeaba3537ac4f4c89b1c880241193661a3079f0603451ff8675409405717d5d8c34b7b6478d3b340c453929fa371ce2564215a7fd833749f1a8";
+  sha512.doc = "4264cbfa8089740fbf05867886ac157383cc019eb61f9844158acd8fb7dd1a65b48fb648b8b4b258ae3c66e67f18a709502177aff35fd4f7ac3a676127258a9a";
+  sha512.source = "9a43e7b6bd6ead59a6fc56e27546b998565b97ce9e83821df9042295e7cf031f5f2506bf6f8ea6dc2ff306fe827b50b48aa38b4c76b6ecb45ea5d16099dcd98b";
+  hasRunfiles = true;
+  version = "3.0";
+};
 "sanskrit" = {
-  revision = 42925;
+  revision = 55475;
   stripPrefix = 0;
-  sha512.run = "0dbfc19e366fc2e69c3700e0c532c280f1e444d0d6b44b37fd1565a64b0f883901c209fb1cab7c6a35cc9ffc23d32b5cd78ad2ee3e52d7cccf41a80a8fdd6c57";
-  sha512.doc = "a5cb05e7fa966cb09d84d0dae14eec25354156f8acb5811f4867b3724fbed62df94305ea9062772879c5cfadffde8265e7c9de062bfdf6756cf2843053caf9fd";
-  sha512.source = "b2644a58e3a64122b5b5765547959d888837b3353b70b5bfc7a98a17f380de4f6e2fafbdc20c0458860baf28fc373ddf9c173737d8c776867bfe7c3bc68ef40a";
+  sha512.run = "c435f80d675ceceb104166c11c1aac700f29fb315a87f992fdaee079eb2b92b20c18cd4ccf5eec3a87ae0306084f386b89ed69dde775b7a0b574f0447692100d";
+  sha512.doc = "73109f0b792b81d86a4db8e4ece3817709e22f5d9f60a6a97238b94faa3f620476c77a2820154719c0829d5d476d44bd608802634d379042434644af107353a3";
+  sha512.source = "6ddb854e0881d61e352bd4fd52ef1ae74b87475199a819433aa97ba720d88db0c52c045eaaf47833c82bc14e3937da7c40e060924cedfb370a1180148497996d";
   hasRunfiles = true;
   version = "2.2.1";
 };
 "sanskrit-t1" = {
-  revision = 35737;
+  revision = 55475;
   stripPrefix = 0;
-  sha512.run = "8db4a734c40bcbefca8d1ac4e82b01b890bda547d3aa68e8f3a93a06d75335cd41a6c594563d0c7ec9a18a08868ff7b5e8a04b11a64110f80ded65cf5d809bf0";
-  sha512.doc = "68259865bdde464c565c50497257c0f45f6cc1fcd01533087afabae35ed6d2d53e2160c9c3f867c254e301058e599bbcbf1c3fcaadb7ee7ab25c364642084073";
+  sha512.run = "50f7a12443730bb017334ed1bad840dd2086a0225586eeae02f1386f410ae802fd043b1ce8a90e495aac7bdb20e2a8532c4cf98d48f0fc32b96da24f28de26bc";
+  sha512.doc = "11a0bbb4212f72a18df5eb1ce1e2259774c6376a3c107fe32bed4176d23da2f5bda5cab71a7df618c67113ac9d65969ea8e680ab939c7c6cb2542ebd4c7e5efa";
   hasRunfiles = true;
 };
 "sansmath" = {
@@ -28119,57 +29741,57 @@ tl: { # no indentation
   version = "1.20";
 };
 "schemabloc" = {
-  revision = 15878;
+  revision = 58212;
   stripPrefix = 0;
-  sha512.run = "5b875455f8a567a97c5594f1366fff624228ec2af396bf8cee73f32835d9896c41986b3540f215cca570f21d1531d248e315da5336c0323fb57c3f796ee2df65";
-  sha512.doc = "27b0f1f5db78caacec8140b4f13a786ac50ba2cb393aeed153138b0ea8ee6caab640c2dafb14cc3fc01b3c7a511d4642f7fea65e2ccfe295a16cb7e125a47cf0";
+  sha512.run = "8a6f093a5c6874c77d22a9e96e36593f00e382ac0679ddf33cfc62df912e82cea4bbf697286b7fd77d25dfd5b19cb37baf95fc1f8092bcd348a4da88a4501cb4";
+  sha512.doc = "fb70879aee58fc01d5b30903f2e65b49789d011d18987471a8cbd5e46d9b57cd01b813e5a90b686819e1c1e912cb37b2c9487518705d4f1bfb58b1e950502dea";
   hasRunfiles = true;
   version = "1.5";
 };
 "schemata" = {
-  revision = 39510;
+  revision = 58020;
   stripPrefix = 0;
-  sha512.run = "41ddeda2f81711f50238403fbd496f35f0b5548c52a4865dfd9f1ebd7d708db2d1780b1bebd0d1e1c993c140a760d4802770066b21b1bf4e98c09bb606dce2ba";
-  sha512.doc = "51afe69e7356110ae73b2dc7d4cd84556ac245bc57ab2c4e05f8753345fd0628085b61c78e31fd25ab22e1a2e3255c560193fdc9e16729e7ca2dd7c48bba0684";
-  sha512.source = "93c841a49e482861247b6a1baa79f7cfd3956e702b37ad17328c928600224aecb486df1ee012a89d00907efd6e60ea51f5c6aa704b876eba1311e96f7529aaf0";
+  sha512.run = "d3c6418c699bb624287d7de3d64695e721fba3e44eb99df02ef58c02c7478f12ca329153295e076a126748239a483e941af3e8d9ade86e3f15a134424c6f4e5e";
+  sha512.doc = "9f71ea989942daea92cce48f3a013fc1eca84ef4a36856e28f280f04efd21a0dd3cc5799f9308fb8fafe803c23106544ea85e2d094bf21f178158e30eab35b06";
+  sha512.source = "55c041e627470133a7374e0a1f00079f5de58949a3c0e8d3c3c78857e7bac3d5afd33304d57f3c70dc98d682e4eec3f00e3624aa22a1310b56269b724df6c95b";
   hasRunfiles = true;
-  version = "0.8";
+  version = "1.4";
 };
 "scheme-basic" = {
-  revision = 25923;
+  revision = 54191;
   stripPrefix = 0;
   deps."collection-basic" = tl."collection-basic";
   deps."collection-latex" = tl."collection-latex";
-  sha512.run = "ab27a01ab3859bfc1718808ec931e24e58c1146c5e803d616ae0e1e2c2c563fb28bb8480f91e12db9e71d7c1ddfbdc3b73357fe212fcecf7e377aba4365aa27d";
+  sha512.run = "027a1cd0dd4fc5da2427864bb49fc885a00bec6e8a74da24ce9cd781c69bf4288ddfc3c790307ed48052a8fc00c1989d3939b253da6638370adbb1c43348749b";
 };
 "scheme-context" = {
-  revision = 50183;
+  revision = 54074;
   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."antt" = tl."antt";
   deps."ccicons" = tl."ccicons";
+  deps."collection-context" = tl."collection-context";
+  deps."collection-metapost" = tl."collection-metapost";
   deps."dejavu" = tl."dejavu";
   deps."eulervm" = tl."eulervm";
+  deps."gentium-tug" = tl."gentium-tug";
+  deps."iwona" = tl."iwona";
+  deps."kurier" = tl."kurier";
+  deps."ly1" = tl."ly1";
   deps."manfnt-font" = tl."manfnt-font";
   deps."marvosym" = tl."marvosym";
   deps."mflogo-font" = tl."mflogo-font";
+  deps."poltawski" = tl."poltawski";
+  deps."pxfonts" = tl."pxfonts";
+  deps."tex-gyre" = tl."tex-gyre";
+  deps."tex-gyre-math" = tl."tex-gyre-math";
+  deps."txfonts" = tl."txfonts";
   deps."wasy" = tl."wasy";
-  deps."ly1" = tl."ly1";
-  sha512.run = "214ab897d6ecac52278e3c63e988b0bd0ce146f07e9c58076e2c65bf6a7bb1a34d66341dc88b572d4549182a9a0b9daa51e91ad782ab41f7eeb7a6c2dc8786f3";
+  deps."xits" = tl."xits";
+  sha512.run = "2bc94138102c5c4926b4199e09afc0ae66ed32de5030ac9f64290b8b98ce1c39a2197cbc3361d4eb56614552af21c0a67ef9f3dd0af0767f4e1f91d6023e5206";
 };
 "scheme-full" = {
-  revision = 44177;
+  revision = 54074;
   stripPrefix = 0;
   deps."collection-basic" = tl."collection-basic";
   deps."collection-bibtexextra" = tl."collection-bibtexextra";
@@ -28177,8 +29799,8 @@ tl: { # no indentation
   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-formatsextra" = tl."collection-formatsextra";
   deps."collection-games" = tl."collection-games";
   deps."collection-humanities" = tl."collection-humanities";
   deps."collection-langarabic" = tl."collection-langarabic";
@@ -28211,16 +29833,27 @@ tl: { # no indentation
   deps."collection-publishers" = tl."collection-publishers";
   deps."collection-texworks" = tl."collection-texworks";
   deps."collection-xetex" = tl."collection-xetex";
-  sha512.run = "c5aa68661ccb1ef57e039e923397466c46349a4b52e1a282d5fa0bc466de382c3d121f69954a28c6345e0f02386eedd915c5abd8f0f0e86ec295e30b325ba9b7";
+  sha512.run = "bda507842fde5239d7f45169ff78690bd96066d1834cdcc6a0dcbd3e3439308c694ce4be6a91d1f155ebe5e29d46173fe13c83bcd4356969da95fb7cca1b4e38";
 };
 "scheme-gust" = {
-  revision = 52239;
+  revision = 54074;
   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."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-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";
   deps."comment" = tl."comment";
   deps."comprehensive" = tl."comprehensive";
   deps."concrete" = tl."concrete";
@@ -28238,29 +29871,18 @@ tl: { # no indentation
   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";
+  sha512.run = "57928b06ade27a28ae171e90cbd60c315393adb38cfac93f61f4950cc344340f0837bad65a04b2a3bef08e9c5773509caa1302eb8c299e1327fd3a418e5f0a36";
 };
 "scheme-infraonly" = {
-  revision = 53569;
+  revision = 54191;
   stripPrefix = 0;
-  deps."kpathsea" = tl."kpathsea";
   deps."hyphen-base" = tl."hyphen-base";
+  deps."kpathsea" = tl."kpathsea";
   deps."texlive-scripts" = tl."texlive-scripts";
-  sha512.run = "5c42114f0bd9a5351168e336438757c5d311cfe22e1ed6d5a65cca5e1e97439b3abab2826fea9472e6dd49ff9e7197d835932a37605d1e2b972e4fd910ef8aec";
+  sha512.run = "f3e449bf0b34deb9ae776685f386245c4ca9644f2175ae51e9c62faa00e3cfac30fa2aa07fbd83b15b21d487ca368c09a18742d2434047783350698ced3b20b9";
 };
 "scheme-medium" = {
-  revision = 44177;
+  revision = 54074;
   stripPrefix = 0;
   deps."collection-basic" = tl."collection-basic";
   deps."collection-binextra" = tl."collection-binextra";
@@ -28284,17 +29906,32 @@ tl: { # no indentation
   deps."collection-plaingeneric" = tl."collection-plaingeneric";
   deps."collection-texworks" = tl."collection-texworks";
   deps."collection-xetex" = tl."collection-xetex";
-  sha512.run = "cc9bd942db4afd9d1d15ccf20e2d404ca61d640f6c04058a876cce0dd09e1fcb581e8abd7b61ee55c2ac8d583c508e9f0461ce199aa7b38bdb64856afb8241d2";
+  sha512.run = "fdfbbd8fc370bfb0ea35ed9f3137b62eddd3e54777963668b3dfe7af6328a92f37c74e190e7f506ec27a3efbe44458941360599a4061a2765d0072af56808d60";
 };
 "scheme-minimal" = {
-  revision = 13822;
+  revision = 54191;
   stripPrefix = 0;
   deps."collection-basic" = tl."collection-basic";
-  sha512.run = "8ae04d142c738142753b4601cc327721cb59689948c2c953f79ff1c4364aa6a449e3862d206223ef1ac1efc3fdfdb1f542c32c8049327662d4ddbe77fe7edbce";
+  sha512.run = "ac177b74d9d5b9fa599831275a4084a0eeb7b764a6ed837d8f14f8391f0e6c0757f7b2d4a8e71868e0c8ea4d497f29d78c4c73fb9e6311dbecf29626516bbf82";
 };
 "scheme-small" = {
-  revision = 41825;
+  revision = 54191;
   stripPrefix = 0;
+  deps."babel-basque" = tl."babel-basque";
+  deps."babel-czech" = tl."babel-czech";
+  deps."babel-danish" = tl."babel-danish";
+  deps."babel-dutch" = tl."babel-dutch";
+  deps."babel-english" = tl."babel-english";
+  deps."babel-finnish" = tl."babel-finnish";
+  deps."babel-french" = tl."babel-french";
+  deps."babel-german" = tl."babel-german";
+  deps."babel-hungarian" = tl."babel-hungarian";
+  deps."babel-italian" = tl."babel-italian";
+  deps."babel-norsk" = tl."babel-norsk";
+  deps."babel-polish" = tl."babel-polish";
+  deps."babel-portuges" = tl."babel-portuges";
+  deps."babel-spanish" = tl."babel-spanish";
+  deps."babel-swedish" = tl."babel-swedish";
   deps."collection-basic" = tl."collection-basic";
   deps."collection-latex" = tl."collection-latex";
   deps."collection-latexrecommended" = tl."collection-latexrecommended";
@@ -28302,51 +29939,36 @@ tl: { # no indentation
   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";
+  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";
+  sha512.run = "6267151dd73cb8b751ad47b79f9c698b465ad5ae5494d462cf5b3b4e7446a3c014a715381bc6a79eaacfd1ba6efb37c6c1bafbd5e1f82e8db751bbaa9a943013";
 };
 "scheme-tetex" = {
-  revision = 52954;
+  revision = 54074;
   stripPrefix = 0;
   deps."SIunits" = tl."SIunits";
   deps."acronym" = tl."acronym";
@@ -28355,38 +29977,12 @@ tl: { # no indentation
   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."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."xpdfopen" = tl."xpdfopen";
   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-formatsextra" = tl."collection-formatsextra";
   deps."collection-langcjk" = tl."collection-langcjk";
   deps."collection-langcyrillic" = tl."collection-langcyrillic";
   deps."collection-langczechslovak" = tl."collection-langczechslovak";
@@ -28404,35 +30000,70 @@ tl: { # no indentation
   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 = "4485027ddec5142642acfc84ebbbff4ebc0e150ccea58e05ac558627b884a26b103361b827d8bd234f95c46525063b2072780daf861fad01206b91d2eadb8acb";
+  deps."ctie" = tl."ctie";
+  deps."cweb" = tl."cweb";
+  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."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."patgen" = tl."patgen";
+  deps."pst-pdf" = tl."pst-pdf";
+  deps."rsfs" = tl."rsfs";
+  deps."seetexk" = tl."seetexk";
+  deps."subfigure" = tl."subfigure";
+  deps."supertabular" = tl."supertabular";
+  deps."tamethebeast" = tl."tamethebeast";
+  deps."tds" = tl."tds";
+  deps."tex-refs" = tl."tex-refs";
+  deps."tie" = tl."tie";
+  deps."web" = tl."web";
+  deps."xpdfopen" = tl."xpdfopen";
+  sha512.run = "44bc102582ef5f6e0499efde6d3190b86988def41aa062a6239075b9371f6c9deef91e4f2bb299b3cc831dbcee9289fafd4c1c6d2a55a747d340fb580ae918e3";
 };
 "scholax" = {
-  revision = 53330;
+  revision = 58733;
+  stripPrefix = 0;
+  sha512.run = "67818d34da2803257ae4de877eeb696d34eb887bd6ab54613793f4f1737ababa1fdb657162588c6ec353bf9604113403fbeae2203bf662b888f5197032e57924";
+  sha512.doc = "fb9cf815fb45cb513f8322597e1deefefc77c1829d2ae2f8cffb52a225bfb6fe9712be523ed861aca096bbe80317979dffcdfce87970b66fb403343a5e5e43af";
+  hasRunfiles = true;
+  version = "1.030";
+};
+"schooldocs" = {
+  revision = 55838;
   stripPrefix = 0;
-  sha512.run = "12dbebe73335138418cb375d12cf48d5dc8d3d528a8aca7e164822ff7d7f415c7fe3f23865e7f28c465c21afa625efd6307993d23b0fcce62c2cb2480d91f561";
-  sha512.doc = "9d232fd5ffd590cea91ca7247e0df3b16331317540d3685e6b3c509e3ebdb03e26cabf062a818bc33b36021bd7d31c865405cf6fc87ca33ea1fb18995f626b15";
+  sha512.run = "baaa044e2e70c65c91acbb5a2d1add045f24be9361bc4b1c4761a09974b070223144ed9b41a9e5c41cb1846a271cc3338b1f44ec7b8af35cd82e7cb7ee490236";
+  sha512.doc = "6860607cbaa4205b41d0e4145c3579f6a40ba27a4047c1c614a2134fa2c34aae16fd4b56dce0720813f62ac7473711a32a2ff74d7cd5288694810942d99f9ca8";
+  sha512.source = "078875026c92538b9086945c6b3b4d3a8121e834b81156baba3d454f3f6bf199b484718c3da7dcca3da837bc345ca80ea311448680720a87150c40f2f629062d";
   hasRunfiles = true;
-  version = "1.021";
+  version = "1.0";
 };
 "schule" = {
-  revision = 48471;
+  revision = 56683;
   stripPrefix = 0;
-  sha512.run = "8f59d31e7bebb741a7c23c2559f0e90979df2d7ed1482d3dc09a1f5fd95ba7ee358e3acfd5bcfe0a708d36cecd4e36b226db4addcb007168789311758a444bc9";
-  sha512.doc = "dbc4cb7922524e2a73c56861ebac5487b508016107bc7c2a104d93edafa816f27f84a142bd0d228aed008f85ba7aab53b694771a001657ac068db169b87b72b1";
+  sha512.run = "7125beaddb825fca0c9ff686ab97fbe7cb3744b74bde693107e26fc2797ac9bd29146683174ac6d7703370cf7f5f09809165b2f371c56a8b27ae0de8980ab467";
+  sha512.doc = "11aa5b1eb25301e61f2438f4607cfba35721dcbb0904ce3fdb923f69f71b1f1e1ebc3a50706b09e306e2b9197194a3c6ebb12a1fa7dc27b94686df11be3501c2";
   hasRunfiles = true;
-  version = "0.8.1";
+  version = "0.8.2";
 };
 "schulmathematik" = {
-  revision = 53815;
+  revision = 58359;
   stripPrefix = 0;
-  sha512.run = "ed2db79bc6762f123fcdb452d483c8857c7ae20ad89152c3db9655ed90fe4743f00297a35e82e03d357ad733931aaceff49e0aa7eef2c9d66b2ac673d732629f";
-  sha512.doc = "13264b961f25e77c101478b0907896f99bc68814bc62659a16fa5d8567a6b3819398f4cbd91e2d53e252892b9f1313fc5b7431d439a8c3780b6ea140f2270348";
+  sha512.run = "283c5541f876edeea48201cff842d0d4b73ed1fff33f419371c9fd721cbd1711203f3449874d57573285a8e0e9a7386fcf586444030fee3c587b9d830ca2235d";
+  sha512.doc = "1f360107f14c7261c25c3806b4c5b762ec65b0d1818c4cc450784338119f0148b0319cdc3981c7cb29c776aa309f3b90782f28abde3c4b5cffe16e51bbc28f39";
   hasRunfiles = true;
-  version = "1.0";
+  version = "1.1";
 };
 "schulschriften" = {
   revision = 35730;
@@ -28495,12 +30126,12 @@ tl: { # no indentation
   version = "0.41";
 };
 "scratch3" = {
-  revision = 52250;
+  revision = 56258;
   stripPrefix = 0;
-  sha512.run = "042ac97a5240c259f00f8bbe4c25b0886636b49e8218ec810306cda99525552bc4bd6f4a7392db19d45805c50866c7f4cfb299e63b8296d44409f12db3e3383f";
-  sha512.doc = "ea7c2ac340fb69bf779af2948e684ccb73f0234ed55fe2d8260fe8b3eb94c7c0ef085db83f94f81fc19705b2d61c1697ad9ad1dd39d8aac343d16ebdb8e20ece";
+  sha512.run = "40d781fcb2ba3628e6e7825d48873917c6a138b46ec2b5c5be894639c1ada93eb3632e17e5be6dbb9974d092f3b75c891dccb33cd93fbdb61dc3261400065d2e";
+  sha512.doc = "93fecddc8a36f4ed1c302939678e314b178b600b5983754a9bf7b2b343a8e61174dd7c9aa7926c9c93714045e3e8b9fecc77889562f2f407fe2494283265d69e";
   hasRunfiles = true;
-  version = "0.14";
+  version = "0.18";
 };
 "scratchx" = {
   revision = 44906;
@@ -28536,28 +30167,37 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.1";
 };
+"scrlayer-fancyhdr" = {
+  revision = 58746;
+  stripPrefix = 0;
+  sha512.run = "a8ad12d27eae43023f8cfd3d32dc22705e38869d9fa38bcc85a955334cc5f328c0b9a6db2070876cc5fd7dfd5c2bc24f1cc45b39fe90b62ecd3893c458399ee3";
+  sha512.doc = "d531044dd22635bca73e3ad22c5e523cada7e448269cb6f655a973302d7968cb463efc551fce33afda588a0fe0800d33bca601d736e7c97cd8fe00bb2e3c378f";
+  sha512.source = "3bd0f2660293521eb094ab307e4ce0b685472b7f92656c5ddf027539649bfe3dffcf5fc4a53220ceafde62d0ac9180aa1a5285984dfc2d2d735ab201161b932a";
+  hasRunfiles = true;
+  version = "0.2.1";
+};
 "scrlttr2copy" = {
-  revision = 39734;
+  revision = 56733;
   stripPrefix = 0;
-  sha512.run = "7aa7ac841d667e627056ed0ef3e55368f580e9d8a35a35239780b12d0a18534086844009ba1dc40a1b6ef29ad64d06e1e2e8ffef216e89c15e684975acd87192";
-  sha512.doc = "08e87246b20cc0ea9ed30cd74993aa2af520d8b01878e1f54c802b5beef4347c087ec36f32220581eefe933a524c813ec30b3235989453ff8b7be93ac35b725d";
+  sha512.run = "5b2f1c1c86a8b3df5bb4d5edfc002ff80449d2cdcf6ec7aea3732d0ba8e6bcaa105675f9f37dd5280d3b9061400d8edc0c67460ac9f1541159484aa51b851fc2";
+  sha512.doc = "04728375909e27e0814f9c2dee14697711ceba7b132ee6de63f257e2a6c3eff11a8e808d7929bbd0c9346b459afec57dd62d523314381c0c19a5e2b8b3650f20";
   hasRunfiles = true;
-  version = "0.1d";
+  version = "0.3a";
 };
 "scsnowman" = {
-  revision = 47953;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "87f207b478799ed88deaed71b60bced2158d6bf4406e6cbbd533f9110004cb8ceec71ded31d3706d8033bc53b1f0f31cb25877af9c58d27a5f350ab79572328b";
-  sha512.doc = "5050ca6200a7531bfbc31dfd9f06d4b6503e832fc09a7132ec76a5ebc09bb0fe4743ef09740ff9646d4fe93a31ee9fcdef6091fc5c50e379c86d529d5df51f25";
+  sha512.run = "61d9ae5c1632d4fcf5058fd1bb004cadb1a1becfe75d00335509c68624a62cae6780528e2633c89e9a742ea885b207efe5e36d85c402bfd98825dbc8630f200a";
+  sha512.doc = "542deda691600da9cbea070436c5eb8eda2670cdfee2ac5d46d241a50de87ee6d89062c9f5c0e55341a5ea0224e44472fad867503470c3b52b6729f470b09972";
   hasRunfiles = true;
   version = "1.2d";
 };
 "sdaps" = {
-  revision = 53795;
+  revision = 54678;
   stripPrefix = 0;
-  sha512.run = "a7ebb52da3c218f45ad01a954bed7262a47834006434136d533b1b81c0ed7485ce5793ad303c40cb0e01cbd75273ca6db9c2e74c1d5d01eeb3cc92bc7d50d380";
-  sha512.doc = "91fa4bc4e57e4695e93ba512cc41e0fc6ff8c15925ada551914977559e329055ad43c2220d4790e4563c1176dd5dade9f3f648ef3f4f5897694b83402e5d0e36";
-  sha512.source = "3fa5282f76531bc118a3b1b49596215f7f73d7864fca48b88da68c27c5472ff2b687a37723a646bdf95035a319328876207af94e15ca4fe13df6ff1c92d06c79";
+  sha512.run = "506507e08aa6d3e4408c50bad4541feed8bd491f668ba10de131b4ecece0b23ed6666a117e6b5826e7a2e7e0cbe6b64072a5ed5b090d9c2568354ea7a50922d3";
+  sha512.doc = "8c98eda0586c02497fbf4a2a0125064b1200f1b16506c720d8103b88b2256e517eb5553d2027fb4a1d8fd711e640b045a9e3a90f152e957b5c3dc6df53509424";
+  sha512.source = "3c6687e548f86f4a96f88264841e33b670d6dcbbdf7debdda2e1d8751ba58abf1e56005f3ac2160f3bf88bd113fee7b72a186ebba3b30c40521ed0f52e7dbbcb";
   hasRunfiles = true;
   version = "1.9.8";
 };
@@ -28636,9 +30276,9 @@ tl: { # no indentation
   version = "1.2";
 };
 "seetexk" = {
-  revision = 52851;
-  sha512.run = "8da27529da3e020f1853b02ce17f9481cfd3c32eeec9fb123d544a9d63a978831869036a1251e6b73bd007e0a5f947c1a7f5e2ae8004866631f1895a51cd14e9";
-  sha512.doc = "e450694c39ac2f161cb60b6e8e0d95db29fb6271633dbf3cbd48beb6ebd01946d504cc3282a207738994d42eeefcbad5620aa74edf057a965e4952bbfe914259";
+  revision = 57972;
+  sha512.run = "1f217550f7455a82dd1771556045e10a39138eebddc90f4d38a274d56d9072501d94476c6045012f3c5cda43aea71924268fd222895079b225d893df3b78fa97";
+  sha512.doc = "1b36ac131e25541123a7d18e9a5e3cb1fccab04ffca1b0d1e5a036a26de99fb05e6745d43cac6dc76a295eac5503f90eafdb2b40f96c88836123b5b599a47e2e";
 };
 "selectp" = {
   revision = 20185;
@@ -28665,6 +30305,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.302";
 };
+"semantex" = {
+  revision = 56863;
+  stripPrefix = 0;
+  deps."semtex" = tl."semtex";
+  sha512.run = "d09b5dc2e6b8031c03b59254b442a8c5502cacd2d24c91f47ae6243cf5908062e79ab0e7a521c2208848ae7f9acb147716cd8a399b362a91a5cfdec87e213814";
+  sha512.doc = "829286b336f1d05afa9561d3937fa526b6062b03950b3f350fb4fc586f45fa253d93939b6432685a08c967eb85c053d07c6fe3e08126869ef63fb43bd0acd992";
+  hasRunfiles = true;
+  version = "0.463";
+};
 "semantic" = {
   revision = 15878;
   stripPrefix = 0;
@@ -28688,6 +30337,15 @@ tl: { # no indentation
   sha512.doc = "ef0c85ca5e86a17d59c03255d679d54cc8fb36eec02c8546f29e1c514408559788d1dbe3ac7565224b320b71e9ad77979b1092fb0f098a1c48c3a7093b72b172";
   hasRunfiles = true;
 };
+"semesterplanner" = {
+  revision = 56841;
+  stripPrefix = 0;
+  sha512.run = "26c7b18796dee2f703f22ace3aae21b38f98d9250b1896a3cfe5214b42551ae3fe4accd9e8bf905109c05169370317608e23363f4bb512e794cfaa528b645119";
+  sha512.doc = "32c29aad8acf63e60f07262930f267a295daf9498621c48f0b9697fe31e4dffc63c8992b5c5f60b1d61188de893421906aa3abf160a79c6dd5429eca87c03fb1";
+  sha512.source = "709556569a5defa5240781ac1bcac0af6e9cacc0016d6ff057a4414a67c69cf8d11a17c716748dfdc81fc31c2bdee230c9c4adb7c4978ccba20b7330db47ea81";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "seminar" = {
   revision = 34011;
   stripPrefix = 0;
@@ -28714,6 +30372,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.1";
 };
+"semtex" = {
+  revision = 56530;
+  stripPrefix = 0;
+  sha512.run = "10d2b93b30581cede982f5d7ec1ee5bf6f60406e27e1750f2bc6b6dfe0f683ca922a762fafac0d5d037687c0a98188617ee48bb51ea132ccde7cd1c33bbdf273";
+  sha512.doc = "316df9ed5f2d058e6c28e5e8e5f4bc3ed64439409d1ae1c608b2a75a23c40d438b657642093cb723b23da4f14382f1080aaa3a9a49d8ce143e26e494a3e7b3e9";
+  hasRunfiles = true;
+  version = "0.45";
+};
 "sepfootnotes" = {
   revision = 41732;
   stripPrefix = 0;
@@ -28947,6 +30613,14 @@ tl: { # no indentation
   sha512.doc = "0feaf4b3cafbac8fc78855250dc39858b0b8326b803c851efd831f36476dac2f1ce86083c11476e36ac88b44a2a8d25094f9203c774044306536fcb2b261a184";
   version = "2.0";
 };
+"shortmathj" = {
+  revision = 54407;
+  stripPrefix = 0;
+  sha512.run = "f0fe218b38efd961d1f67db265797a01ff4fc28daf0df5f23d9eb2f009961449d6dd3ae953c800af377265cf7f77f707cc35b0c413d93b232502d33b60fdc224";
+  sha512.doc = "d402e9fd56f8567a79158decc200547e4b68a171c4fa53ca2d9efc2377e9ea1aa61155f53e66de6668a4523177464638412adb4b402a8127436826fbacf24ebb";
+  hasRunfiles = true;
+  version = "0.5.0";
+};
 "shorttoc" = {
   revision = 15878;
   stripPrefix = 0;
@@ -28983,13 +30657,13 @@ tl: { # no indentation
   version = "1.2";
 };
 "showexpl" = {
-  revision = 42677;
+  revision = 57414;
   stripPrefix = 0;
-  sha512.run = "b937f9824793206b0fa55eb77f6c2688364d712fef66c63244a776c95e733d2b0e4535a2d63b23ad446e50fa52804bd99305ff20bce6d74e880d3fdfec432924";
-  sha512.doc = "90fbef0962c609d4a50aac3840c703c6d421553425dc0d41a62883e012e4e2a8627a2f98f499b8fe984bfa57b597ee65e274d6e5bb9f30aba96b8b1bcafe0211";
-  sha512.source = "afac56c2591c97fdb6b48ceba1acc2b4947a0d0778f3fcd1db966d3782a89388d09599077c1684c4de69cb61ee5d1018fe085ff7b57a6a8426b1936454066228";
+  sha512.run = "d42f5d3570f252295a25c130c9ec9a94abaf9f28038fca163423a0aa44afee4f354aa2dced3ccd173e698a5da6ccfaa8284096742ba04b03f5aebf8fc502426c";
+  sha512.doc = "a3f12a43edc3ffa5556bec25b8527fdb039aaa704b2ea37c723cff367d453b0ac53b14c1eff41bf6d3961cf1d4f11b70349c03d253336421031ef0ba81b56561";
+  sha512.source = "52ff44163115b6ffa5a8e181739df2c8c5619a32af0aa7bfc773d84b12c0e85a67bf87823ae0dd47f7d40d9e12fb8bde039b935555a1cc220dcbf49d182f6da3";
   hasRunfiles = true;
-  version = "0.3o";
+  version = "0.3s";
 };
 "showhyphens" = {
   revision = 39787;
@@ -29016,6 +30690,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.05";
 };
+"shtthesis" = {
+  revision = 57740;
+  stripPrefix = 0;
+  sha512.run = "50a81503c33b2d38f04315335c4184f8949b23e0a535297b611c1c28248a87871ca288c1953db0edefa50cc4de238b270400a47e530339601207bb9cc2560429";
+  sha512.doc = "e4817b159e7b449f440750bb9bf2fc479f61e0532bfb832b34af989bddaada5d45be5a1be7dc24baca11c0338c4fb91219454b93f9024eef5dc861f2caf844f4";
+  hasRunfiles = true;
+  version = "0.3.2";
+};
 "shuffle" = {
   revision = 15878;
   stripPrefix = 0;
@@ -29035,13 +30717,13 @@ tl: { # no indentation
   version = "1.6f";
 };
 "sidenotes" = {
-  revision = 40658;
+  revision = 54524;
   stripPrefix = 0;
-  sha512.run = "4e8fc132974ce90f3e08bb3b2770c88faba2dfd7a9f63bbf0b6b900811fbdbb2c625015e8f181968918a5965a32da8ffccf2e5798f44ad4327a6bbbda785c708";
-  sha512.doc = "944b4d77b6923328732038d273aa74b14689e5177b4d609c81735e189556cea7f66ce81c89c41e5ca0d6b9871e412e21d836024a5290f31a3fc419b7af4bb34e";
-  sha512.source = "e18b26b37882cb7b5ab6fd1f994b2a0bd38e9872ba3795c4a5b8269f1b0099e199407200b84bcc6c51eb0f882993a835aa94cc1cc409c5020dd5387280203d35";
+  sha512.run = "6cf38305b919deca31761f1420c18a0ffb5ba18e045515af058e9b7d73535730117f757f16a8030d97247378efa46428ed9f28757524b650a96133aae6fe4e11";
+  sha512.doc = "db5f8666987eeb2c8e29426a91bc731f8c380176b3f0285c4c4ca8554b91c85af52d0ebe16d57cdb558d8c7d1e97c6f169addb12a57a107c00ff36486dd2d218";
+  sha512.source = "6d237c8df983f2a3d056038067039c45604086a377cdf02b9adc0e1c125619ff911165891d27be7e30466d3cda03f62c32bc7edc73152460d21443a5cc6886f5";
   hasRunfiles = true;
-  version = "1.00";
+  version = "1.00a";
 };
 "sides" = {
   revision = 15878;
@@ -29083,12 +30765,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "simplebnf" = {
-  revision = 53370;
+  revision = 56761;
   stripPrefix = 0;
-  sha512.run = "452c83082541e5e1c41687f9a6191f5bc86241454c34f3dd775671019a3e5ddcc22f7c6b2203f7b07aa549a5a84b2047af89ecad9a4ce43075d89fb490653acd";
-  sha512.doc = "8e47242ee6423bdf2c2222a10f4197a615e59bd6514a14b1d3c657b9669dcf2be312c334f8b98459d9953ff36d3584b0b47c25c82e2c23979a738f9aa9ba82e9";
+  sha512.run = "f306851371767da793a60cb604776aa7f537401a3dcbdca899b347d090baee3d3e6d28550f8d95a287e722a92550137f9241d2c207d955b47fe0b392a44b5ed8";
+  sha512.doc = "cd4c3786d953669b53e9a3b5f6e13591ed67efcfbda7eac37f3e7c3709a8b6599f3e9f363e91658019fc03b91c4ed190ed40c81cc9e935bee697a77b51f4238a";
   hasRunfiles = true;
-  version = "0.1.0";
+  version = "0.2.0";
 };
 "simplecd" = {
   revision = 29260;
@@ -29116,20 +30798,20 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "simplekv" = {
-  revision = 44987;
+  revision = 54915;
   stripPrefix = 0;
-  sha512.run = "a67e5e977a4a14b32f3dcf08ffdf4b481a3926e9a5a7259b19aff07c4e311b223edacfd5bef8f9ecac4742dc94e7c65400cb9d883677f96d3d7d1d6256efe5be";
-  sha512.doc = "6a0e0a7200bbfad56ad6729cb375fd11e105cfc89ba93fe592d14755a88d819b69dc3a383f9fe3c59f8a9076450ca5fd75085101d7ceff4a62e2d738b0907f15";
+  sha512.run = "e24f82c6cf65677bee7a55e43c731c26fc05bceb5add86fb79cfbf0d05d09aba34f6cb0c72074a012096875bccc4a51360eed584e3b812e88d772b22676504de";
+  sha512.doc = "8a92af8cecf0d3be86c5a2f1abc4b1ad675f920956a99cf3a99bed61eaa56655eff0f3a2cefc728252dc7c346fbb4fea17a49a4eb4f2e9722409784aeb92a364";
   hasRunfiles = true;
-  version = "0.1";
+  version = "0.2";
 };
 "simpleoptics" = {
-  revision = 52047;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "85da18717b1907dd50fec7ecab0f90cc0f26ada24965611ed9f2a3114b46e58affba11d8f71173e4c2858054670814a67061587408a02343df355db18f3c74a7";
-  sha512.doc = "b1ce0a90eef3755141db1f533da69959f8e356fd1a8028765833fe613e6427101a1d71776ad01108fe0dddb83bd786977e644124806eeeb036e5c011986664f6";
+  sha512.run = "c5e87774fa8003af6e1c81a83e9f63d71934723bf1dc7aebc553c838e30463d0b7dd3a41f76a644ca291cf7f59e50366e291cf1bb618a1321df4157f6ecea987";
+  sha512.doc = "55c29a218edad811dd2c8d2109ec70d4ee95570db0336fda88e74456fd8c6d549cd3355ccada4fe55097b6c074082fb4dfa57ddcd6559ff5e8bb7e67d70fa376";
   hasRunfiles = true;
-  version = "1.0.0";
+  version = "1.1.1";
 };
 "simpler-wick" = {
   revision = 39074;
@@ -29154,6 +30836,14 @@ tl: { # no indentation
   sha512.run = "31313aede3900675d183bfcff0045df5fa7719b982df1822823c15d645c7ef64c0b46e0f1690d98d30b2a6057e082684f23cb61a490fb2217887d0f20231ce73";
   sha512.doc = "f5bf92ed89cfc83f306cd4b2599446a11b73f73a0b82afbd0f441e26d837e6f436913bd2df18585c5e215fa0504bfee3d5d4f5ef4da8925161f85c70c14045e6";
 };
+"simplivre" = {
+  revision = 58414;
+  stripPrefix = 0;
+  deps."minimalist" = tl."minimalist";
+  sha512.run = "cdcaa2083a2005e7b3dfb3b2e931a49da6f18c7860fad8dd0411bf88251a799836b6032382e661611487f6cd549a1d916977542f448ac689d976dd194c0a49a3";
+  sha512.doc = "8bacd8834d8b54707d564b2a16a4f7d177205e9ab9704d2a47a42be399c0bf5e0ca1728f1b44e48e3957a69285615587df40d3ce9f98147bbb692ec06ac7875b";
+  hasRunfiles = true;
+};
 "simurgh" = {
   revision = 31719;
   stripPrefix = 0;
@@ -29172,15 +30862,15 @@ tl: { # no indentation
   version = "1.0";
 };
 "siunitx" = {
-  revision = 53914;
+  revision = 58714;
   stripPrefix = 0;
   deps."l3kernel" = tl."l3kernel";
   deps."l3packages" = tl."l3packages";
-  sha512.run = "371fabf3b76239174c7f2f0cb6bf123b7fbb224261e07460d1620459578fd12a400f8e4babd43637afa9b917a39050c11973f4db8dd5ef17a6cdcd172eca245b";
-  sha512.doc = "e0b8c3dbafa6cebf1aa344c6d99bb17a532201c198bbb6e9f73319e6653bb8ede2243ba0bdaa57074d8c374b31d45659f3e803680eafde37797085a8edada8f9";
-  sha512.source = "ac85900c379cc0c2b052685c02d0a684e24016333b4ae8072ee390e213aaa3204b35faa74052cb8d6716064daddcb940afaf4905cf3145c02e2436fce7af88e1";
+  sha512.run = "7f43171d9d2f4074af2f912de20c5953cc2dffd45a6540907dc1e2924ebf03925190eb120cdbd37b59686f0547c0e545f5aa1db0607274bf0b61b4db94c722eb";
+  sha512.doc = "f668ec1ca464eaa50d698397f03372b2a300e304a640c65357f42d612cc13eb498533ecfa4842a3bf65181402c1a324ea997fa5f438a5837a7b3131ca276499c";
+  sha512.source = "b288e83b4fc610a1a2a85a6557e6bd2e1dd1732ee2b6e90739ad15c5436100ebbf0e95eba820f74d079465f62898ca8cd608f9b6231e0b0bd84d80ef0a930fc3";
   hasRunfiles = true;
-  version = "2.8b";
+  version = "2.8c";
 };
 "skak" = {
   revision = 46259;
@@ -29207,13 +30897,21 @@ tl: { # no indentation
   version = "0.52";
 };
 "skdoc" = {
-  revision = 52211;
+  revision = 56950;
   stripPrefix = 0;
-  sha512.run = "3f4bf340f6076f00101cc8be20d284d487672d544f0c17efe41cc1b6f469df90022455f23b790a8289151cbcc81cc3f1e846eb242321221ca290d97ead9ff2a8";
-  sha512.doc = "b3a4972162cf366c5db5820b0075871f651c817a36c915841717d4856b5078a9de45b7043ac1cac0bb8e4b9f02cfd0a89fdb53b0723475950c182bfe3ea6bff9";
-  sha512.source = "cb4f18a74cbd84e1d75f7c024746d161ef62c79a2be62fd72d33a8a2ec3c8a8594f8ded5721a390fa29b8b31f1b6e77bad65c96c82ffb2299c58a4446204de81";
+  sha512.run = "d00944f58e9842c0d1841b73fb1936dc14655f07d51c60140581d597a93a0e9ce9fe65941cc343979e549620edec6a8339cca6089df068d932e1344556c3449c";
+  sha512.doc = "481e590c14396f3318999524157f8e5a8dafd0b6f553414d3ee09cb0dec6d356c2b422b6598b613ec4d29b35f27a59024dc9e5bcb49ea2643205f37c616788d6";
+  sha512.source = "70343ccef329a3dce81aca0c0253b42450e7eae4560b58d69d9f12d7ef32d25023d5f09208f22f7d65414a089d2992c28079dfb708ab701803cb42fe41480691";
   hasRunfiles = true;
-  version = "1.5b";
+  version = "1.5d";
+};
+"skeldoc" = {
+  revision = 57922;
+  stripPrefix = 0;
+  sha512.run = "2bc1374e969e5b32e9a88b8240a94eac90066514c8dfcb91196a13a3774d200cb8a412fd490b581ba18e9e0047596d30296206b0607316554a361b6103ee33f3";
+  sha512.doc = "13cb76835ff1eed119d8514aae495d6adaf8b4c3db17c660af29624247cba9c37d4f6991d6a99c566972e4032f14d62c21fb4f31b856c49de40d0a87def1cf95";
+  hasRunfiles = true;
+  version = "0.1.2";
 };
 "skeycommand" = {
   revision = 24652;
@@ -29231,6 +30929,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.3";
 };
+"skills" = {
+  revision = 56734;
+  stripPrefix = 0;
+  sha512.run = "0719d385343a79a261409a07d659c0fba4f861e69b082278b1442a12408bc3601de789575fdf566ce280a2699dc10b28aada80d490396498fa9a6bbc8d064eb9";
+  sha512.doc = "9b2339a50fbc759d9e5bc907a4d8dca2f06293d5a5f38602213a859dfc34da1715105b2b5a46e82a23f71b741e4db713b0044f345767a1f87c32526b57fb0103";
+  hasRunfiles = true;
+  version = "1.0.0";
+};
 "skmath" = {
   revision = 52411;
   stripPrefix = 0;
@@ -29307,21 +31013,21 @@ tl: { # no indentation
   version = "1.2";
 };
 "snapshot" = {
-  revision = 52115;
+  revision = 56735;
   stripPrefix = 0;
-  sha512.run = "b153eb4fe8e5ed8cc4d135edc3dcbeacba094dc73587a2b15255f725cd03ebeb450c562ff94e9d87927a6d04d95ddd66e30dd84c0fa664a1e120a190667a72ad";
-  sha512.doc = "14f92e7c36443785174f515c2fffa62f0bf253b4bef560de68cc9cf446fdf7c447e5552a1995dae0f26499e045c8e7baa991255f81b2b43c7bc27158083a8994";
-  sha512.source = "cb5b7313e16fa96f9e864210f5314be7153c10f19bbd509d11dc0a5afae3b0b1c6681453526fec4b7d4079bae0749b69dd5e227f01fd22590f2c2fd230ca4f30";
+  sha512.run = "2b9bba924070f81319758c4b8a8e85533ff5099e901598248d5a645aba249e7158587e7d90072d3e8fa4d544d09f800b94aa415117683a8bb8c6d7ff642c313d";
+  sha512.doc = "b1dda7b3fa9195e5d0e425a4b7facc75f8737446b65b29cd5f3c954dad348055c8544968b3c68f9b2256e8d827ae73b54b765d23b958abc383bef072d9eacfe7";
+  sha512.source = "ae57330c3c69e82c638e07ca7d2d011838a85ae79f3f16fcb8909076f375da51f2b1d3487aadf55cf93306c035099397fa826a7bd9654e6756cde66d2138b15b";
   hasRunfiles = true;
-  version = "2.13";
+  version = "2.14";
 };
 "snotez" = {
-  revision = 30355;
+  revision = 57147;
   stripPrefix = 0;
-  sha512.run = "e1e6ecfd64a317745fba39643c70ef5a71719e3c4ed3644569ab7a4a549a44eb58d1fd1d77608fd455282124d0e7372a364f95f7b67de192b1cfca1a9644086a";
-  sha512.doc = "6ab47280669285be6cd72e2027b939ab2c2e2df7c910b5775dcf02b570ba558a3c89832a45d65cf1a8a649dad67606a2d2fe3d4e477de67098dce497f0c2beec";
+  sha512.run = "f55e6af23e02c4a56827b405cefff308087be9a78c1c171b4d8a20d9669cff44d43cb60f522694708b39b8b010576ab0ea6ad2d2355f5b9113ba9e19ef913a87";
+  sha512.doc = "b68442cfbe57907bf3bd1843cfd4006fc3fd0947d5ff06c18afa50d206f4f2890f7e804f55bb9a3c4f16677deca81f3fc41c75bcc5fa4d55e4aec23a644a86ec";
   hasRunfiles = true;
-  version = "0.3";
+  version = "0.5a";
 };
 "songbook" = {
   revision = 18136;
@@ -29357,11 +31063,11 @@ tl: { # no indentation
   version = "0.1";
 };
 "soul" = {
-  revision = 15878;
+  revision = 56495;
   stripPrefix = 0;
-  sha512.run = "7a4ee70527282c50f28bc535ca34476538158b6fae6e37008cf5f04cf3caf5cc01ccb859967192da1b159b1026afa3eddede2cd86c3d63f469e6e2f6254a80f0";
-  sha512.doc = "9b8831cf9c013fcca715a8a7100b76f2de364f55e8203899779ba18868e637cbb0d00d982098a3e42191dc63ac41afc65d2547b9976c64110e7b83f5f8d0108b";
-  sha512.source = "0b3fceb0238709d4241a5615055c61ced473fbb74ff75d66c70a221bd0ec8b84769674a3dd57b93765812daed14a21fc002de022400fc73858c103a5dd9f29dc";
+  sha512.run = "91b2f65fa3cc1ead06d4450c273d279c8d3428a71fd895beb8b675b76b02139ed8db2d01f64352ed26bd13428c0aef8b0e542d39e8ffe6afb31d05d0f63bdd72";
+  sha512.doc = "282fb6039f870e869f650ad2c4523dd4222c9d5c01359c6242c33c2b4d29b494e0c047e67ec44adc0830043ab0594d49e9251c6c9b256ff9709e9764d7432e19";
+  sha512.source = "0dba1d0c988a6e66b34b897337480588da1466c672e9423d2370a18403cdee587916c969b04169f86a1818be27574aec3f26111b8b431338ca93e51436471bf2";
   hasRunfiles = true;
   version = "2.4";
 };
@@ -29394,37 +31100,37 @@ tl: { # no indentation
   version = "1.0.2";
 };
 "sourcecodepro" = {
-  revision = 51163;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "45c41d470f0e84cc35d4c06cacc1beebd7891e98326a0e0f6462c7dc0fdf1eb9f4e0da59ced33e47c2c93c9662eec31efb8cebcab471350eb2c1c198873268e0";
-  sha512.doc = "7f8ca211769e3b626ba98f8d7265b7e383630c2d22496f03f79bca629f164374de9bb8601e903fc094c1264fa8b4ab4bef1db3b9deafef65ab41c56c27e8d8cc";
+  sha512.run = "98ae07aa0c29c1c1cf2e181b1a5d68f85736b90b8f381bc9c1a2368cea2b8c62fb0c8007f5ce6b53b8e87195b8b0859c54bb2656cb7361119c29ed87d9259c62";
+  sha512.doc = "e786d75bedbf5c5d155a69fda50e9fe6fe07914ca01aa10d7ab66800cd37a4bdfeb543ad34c9ca2eec53de226e68d7a1849a9a0510291d135001c5228f19e2e8";
   hasRunfiles = true;
   version = "2.7";
 };
 "sourcesanspro" = {
-  revision = 42852;
+  revision = 54892;
   stripPrefix = 0;
-  sha512.run = "23b6a26836ec517e833c1ec4155b5da60bfd03ba093fadcbcd418658d3d36a8cc41914349cd117bf2c5eec4121bcd7e29d6c50ca8ce4e4728b729fcbf089d3ab";
-  sha512.doc = "963cf63732836329490ea1521ae0fd09e55591859ea4430799f32606c3710e44b7e203dabb4385821830043c12e6f19795951f3e4aff7abd173d8ba5d4d788ee";
+  sha512.run = "0511dcf736273d80f7143c9dad96dd9f631b016183b4078243ed061d35889fea62e50c5f48e9842ffae7b654fd2e08a21d1c46403e56349c0b515ff2eb62e164";
+  sha512.doc = "174def8872588c27b8f90b3c384ee356aec43e4e42014bb1c02d648d8b309dfa8fb9cea03f65fa9bd86dc3ff1e64483f1312dbaca6e212f65d2d379a1d9935e3";
   hasRunfiles = true;
-  version = "2.6";
+  version = "2.8";
 };
 "sourceserifpro" = {
-  revision = 49120;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "fbfd4b6bd8f75079272feee5f01c0c4b47aecfe89e382cd8f288453dffd6152bf7bab3ffbaf4d90c544f01a5943d280df061b757169f3dd27970cccdeb1f79f2";
-  sha512.doc = "530b5ee29c8cad79ab359fc8fe225c18fe15483bb787f24c91a523ae8ddeca47aad5bf16c6ffea2465fc90182d5de65e08a1bea2f9015e710a03aed846510676";
+  sha512.run = "5125dc5b72d960fefffcc4c8651f3d176c18c32d111440a16a0319f90b8dc973a4af0e20fc3b571578184e31749312c0c1f0ec3bba36b3715a3c59fc03768d65";
+  sha512.doc = "c469f7beb0e99c8a9891c4222171525004c63e9feeaea9be57e663541ba4e2f259d2a3674f3029e4609fc08292d749f005f971bfcc542115d53e1845a02680f8";
   hasRunfiles = true;
   version = "1.4";
 };
 "spacingtricks" = {
-  revision = 52063;
+  revision = 56840;
   stripPrefix = 0;
-  sha512.run = "6dddc3f6b839c16902a590184955cb1f220fc5d1d2c2accaf4bebb70ceba0f446ffb5cee8c8649261d22df79e556016361550570b04f22c3d61644db2d188034";
-  sha512.doc = "bd416ed7ba7dd3023be779ce3d67d1534fbcecf49c36c5b97ab29006f182e77f2882b0c0646da559b6132a40d97723414912bdb920804c5c1bf40facdb0a8c52";
-  sha512.source = "5ab93bfc21fc3bd52cd5721c4c7160ed200f39bd8546a6ad84779a1af0d09b3cde0202dbe1230e2f16918ea43708109dc556f363ced43c7b0072671d8d494197";
+  sha512.run = "9cb9ef080cb14f9a4c7004221cdf8f3d5b90a74ba90a37960b6efa3a33aed501a68e2d8ae23d3262e8fb17816e4565e26722b78e1caa14b7455199e52d8fd3cd";
+  sha512.doc = "d5ab0e38687f00099830015bc469060e6e7a96ef5a199b0352e4a6ce82d50ff6df0b04de20bd683a03d9980a3c45c63905043177fd8ca9cf1f009e978d5dc12f";
+  sha512.source = "dcdc75265a9cf0131cf90beae018f35a54fdd201a641368c5380f82258e7c1bb5a680d1b104146c886df56f148921db0ca304063b2cc9532b0aa32b3288812c7";
   hasRunfiles = true;
-  version = "1.2";
+  version = "1.3";
 };
 "spalign" = {
   revision = 42225;
@@ -29434,14 +31140,6 @@ tl: { # no indentation
   sha512.source = "3a12b34469bbefd61112b7338c8b5d440de46837632a695b52ae18e4f297d6ac0cde7ae71db7bb0a7bd3db0aeaa83e78f33a60e4dd496cf9c0ccda1a297b4ae9";
   hasRunfiles = true;
 };
-"spanish-mx" = {
-  revision = 15878;
-  stripPrefix = 0;
-  sha512.run = "cb638093e1a50de3fd67720ae21e11285337910f98da86db79613f73878084b93fc8afd998b4422b673e3daceaa2ba7aa76b02efc98003e741b74449d4c94af2";
-  sha512.doc = "0b257bd5ce8a7332fe6cf1f5772a464ffdc525e80794dc89600e9ad279beb1f39523fabfcd2723123a458787d7bfd32ecbe0b2962b4abfc3627275862e05b97f";
-  hasRunfiles = true;
-  version = "1.1a";
-};
 "spark-otf" = {
   revision = 51005;
   stripPrefix = 0;
@@ -29459,13 +31157,20 @@ tl: { # no indentation
   version = "1.7";
 };
 "spath3" = {
-  revision = 50018;
+  revision = 57842;
   stripPrefix = 0;
-  sha512.run = "44417164e54d212ab18925af95cf4105d102ba07ea37e3275a59906637dca173db5de5e58ed3759ec61a2be96d4d44dcf3b2f7c811021acc2d0c0c6ad28ec64e";
-  sha512.doc = "04ab2a7ef15dee7fdd418bc74f699c6afd21cbd912ed8d12760d0be5b5e4fa17f66b23e8e9c83ff8ee1a2459d95da483dc9e1978236c32d6c40d429c9582cc37";
-  sha512.source = "8345ef716d56e7ace4bb952dab9c60adfdba028bd57a26c5e541e762745a6495ebb1e55aba6a78e5882e73be72dc30e7bd1eecb290b44948a9c627a80465d05a";
+  sha512.run = "f6e1dde75534c8f29db02afca9ebbf288d55bfe3468aaab889ec8bac8519c2183026354a17a709accf9a7de6047e8cc4ce2be072dd5a5f27175a0259547af92b";
+  sha512.doc = "fbc4ad198e31907bac75115e232aad20ea3e29d5485f17d199e20fda6fc721447b03c404aa664b4668ed588f8fac88d654a536087d6511363c5e95cef69f8ce3";
+  sha512.source = "173c53c0bfdbe07fa17326a14249e7df2b7a20be58b6e9f7572b075b5c38242443b161f038da9778b0fbf5d91ba71a3eb868b0f8105c0019ec7fa125ae8889c3";
+  hasRunfiles = true;
+  version = "2.4";
+};
+"spectral" = {
+  revision = 57296;
+  stripPrefix = 0;
+  sha512.run = "46f6aba88425deb74e921ceafa578e9e8c467a5f9ada72b1372f6e70957946adb56bb05700a839249b2387472f4059a2dfbf4b83cb9979a4936442dac5c9258c";
+  sha512.doc = "6166a19151b57d2fe23833a5583b838fff6af01d96c1056bd79532af45efa8cb58f75d9c2993c7512f69fc7716d746d16de8bc5b2143cb07790cd19997bba5bc";
   hasRunfiles = true;
-  version = "1.2";
 };
 "spectralsequences" = {
   revision = 50072;
@@ -29506,6 +31211,13 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "3.25";
 };
+"spix" = {
+  revision = 55933;
+  sha512.run = "c8128bbee3f0dfbc009e74e46427c394a2c354eea63fc1abe6efd426aee8d0c091fefceb14de8ad97556686be702552a3ef5a10d540a57c1e8bcdaae9be8f22b";
+  sha512.doc = "3a1fc0f7186c0662271a5add51f08f0173c9d0f80cac632a484a30c8774fb3c4385edea2ecf184b2898d20431b7944c0a2e863bc4242ee4270b67eb4d8f3573d";
+  hasRunfiles = true;
+  version = "1.1.0";
+};
 "splines" = {
   revision = 15878;
   stripPrefix = 0;
@@ -29599,12 +31311,12 @@ tl: { # no indentation
   version = "1.0";
 };
 "srdp-mathematik" = {
-  revision = 51600;
+  revision = 58734;
   stripPrefix = 0;
-  sha512.run = "289d92617e5657326f93d5668563cd1067bb67c8e47b3b1b5bd318c4dbda8b4328d3605bcf194ee31cc779d684af8b7abb837b6a4f675406434b23f5081d1cf2";
-  sha512.doc = "fe10c56c4674982df74e82c5390699e4fd70271429e79b95be9d56cdca574af4d940b654e92953739b62f21a38ceb8f52d6830ed3f5ddd02d9dd7ce0916c9001";
+  sha512.run = "c6a37c722985c09980fb6487f46603a2b7475ce1d2bda4ab9eaea36c106fe19146b6b961e9406b76aea626ef0d09babb25193340a87bf4fc428c0a3314e04f34";
+  sha512.doc = "7886d6da7321cfc19f364b730a54def58250138d81538a74512416a8adceea299a36b517a0ac0b660041b85a9f9f2ef2125d613f3efc899b73d6717d69d81163";
   hasRunfiles = true;
-  version = "1.3";
+  version = "1.9.0";
 };
 "sseq" = {
   revision = 31585;
@@ -29649,19 +31361,19 @@ tl: { # no indentation
   version = "1.01";
 };
 "standalone" = {
-  revision = 47136;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "48fdadf3c9e7b899ad75953baeaa9f47384d1bcea0ae08c94ee51b4f2fabfe2fa244a0b9a77f11fd038aa106551c4cb9e0ceb06292ab1ff7bf6802a65ad677fe";
-  sha512.doc = "a5cb35587d86034c38584218b78fe4142563306a8d918d676cce0a970f593cece78bfb755d42b9fda3c0286bdd4a0bac231f8b750ed61acf6199eda6d51a3dcc";
-  sha512.source = "642474f0eed4ac5d3831c0764de9c2c61210cb93bb6bab5c77f65ca13ea54d2eeab038a2c9f52ce077be5749f4d93fae5ef5df561a1e33601bac00345797d3c6";
+  sha512.run = "d9fd4051c18908b69041805c4a4c631a14d8e3c35b6161ca6731962f2ad0d343db3d1dcf6a8e012d6a96971b3e0a0f00204634ac9c836b3bd28c0a96e132d946";
+  sha512.doc = "5e1696289be97de97c4c68cf81933bd15ed542e3943b9a718d8f04c8ea16b9a31ddeaf5360e45d356110c7e6663872f354302cb07ca38bf0900380f575ea76bd";
+  sha512.source = "a921b3956908990f216f5d8da1449e7a47c4d74f34284f2c58b7c3cfa601c57de880d78e3680947349f3b5d20e0366f020d70b7c1348a9a374d2d0b57b58ef9c";
   hasRunfiles = true;
   version = "1.3a";
 };
 "stanli" = {
-  revision = 42765;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "8026823a73d9c061eb01e2b92363b52314c4de4d48bc8557bf33b89cb5381ca4886dcfc0f429f5be9268f3f1e64297ad974485edfa6af025e7744474a2ecd565";
-  sha512.doc = "f97363b3d9aa6f0701c3ca89e7c3b2391327ee431fb71b5be599805a4063baf1f5517868fc3602de8d97aace79d6dc1d58fcceb789ae55b85a7c0824429f3ebb";
+  sha512.run = "2273ba6dc99762490a0cd7af09edd5c4a511ace7317e62874535946bafa69c14f02663afa21fbc54753d1b5d3884858ae93e4790de7dfe4a829e4cc4ecf4e004";
+  sha512.doc = "e4405c8903478ad2b8a5c524666e2fd4aa99dc34dae2d15ace5de7ca4713a6964467f18d4ae2b73c02316bc7d0e51f12e82312544e2e44d50eb3e4ca51671ebc";
   hasRunfiles = true;
   version = "3.0";
 };
@@ -29682,6 +31394,12 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.04";
 };
+"startlatex2e" = {
+  revision = 56809;
+  stripPrefix = 0;
+  sha512.run = "e8946fbe61c9c52a3fe5cc7b6b4adfdd8a90312fc146f331f0dff774e819ed1a789ad047c2587816b7b8568f4a520b2c0600a4b39ff3586254bfb6f15db28b79";
+  sha512.doc = "767c9defb727f206c8e2090a1501e8435bf77859b6546690c7a8d1cb6481ae4c576346449fe760423eaf126858e521b020404cbe84ab2f02c95f07e1af8f93c5";
+};
 "statex" = {
   revision = 20306;
   stripPrefix = 0;
@@ -29779,12 +31497,20 @@ tl: { # no indentation
   version = "11a";
 };
 "step" = {
-  revision = 53731;
+  revision = 57307;
   stripPrefix = 0;
-  sha512.run = "dab392c9d8182e0d06605b82f123223d6bc811291f0b6ee2c35b75a21f868a5e249a330a2c0876dd1e4fa6395e11000d0f6db687aa85e1eaf1058e933fa72160";
-  sha512.doc = "2f862061aa868cb2a74766270b42685f5625adfe42c46c6fb83d7d0efe5bccca2843275e9b68d11610174de193f0f754d976d64c11ee27fab0d128e63b0aa964";
+  sha512.run = "d1f19415ceeefb879a3b4017fa286e5e5806e193fc75159b515fe21a9a6093c6a95d04e2e2e3c7ee457edb8ad717b88043c58727fb3924cb192e05aec12c5c07";
+  sha512.doc = "bbf49f36bf7588c83e237d58d49ff7453c368cbe7e3a32c431944a2249c0dd75c2c1081d10bc2279e0836384602268ad163ffa3eb7108cd28a6c510a18f001c5";
   hasRunfiles = true;
-  version = "2.0.3";
+  version = "2.0.5";
+};
+"stepgreek" = {
+  revision = 57074;
+  stripPrefix = 0;
+  sha512.run = "c322bb089a887b36c4008502160f0970ff2ca33f05391010adc38c12726b2079085bb1775934597fa1758effee14eda76647b886644971e7c40a451154e446f9";
+  sha512.doc = "c3f4c2b1ea06a012ba4d5f5ca72faa0a6c1b4ae5c132b17bda0b6bb895f34e555724f93cd791fad8c6ff846027dbedd723f874ae1e772de95c64bf54f5fa0265";
+  hasRunfiles = true;
+  version = "3.0b1";
 };
 "stex" = {
   revision = 50489;
@@ -29795,38 +31521,38 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "stickstoo" = {
-  revision = 52341;
+  revision = 57193;
   stripPrefix = 0;
-  sha512.run = "858647a31ecf1b3a186c020f43e8f3e7bba930f296f01b0893730f486270c8c4af83c26235484abcdffbb996fc4a3cb5c64363c7613269568ff9ec6acd70758c";
-  sha512.doc = "dc1835c8806014872212c9812e1112b1765a5407530c2da786efa15ba08d11d390c4c64c97e3d5c6db451bbbf876d053e6b8baac2ed65f8acb65a5a80f531031";
+  sha512.run = "5da4a3d412ee4c015e0f15939edf71bd8dd16f218ca3d8d236cb071554af2dac9fb4e71de4b18626578134e94262582dfb62071c1cc4af5ef2fb6111b6430d92";
+  sha512.doc = "0a36ffbe112993a90054e3ba413725abb4259e10a3f439eff694c05ce8b99592e7d1001fda13cf49d1ce0e89f388e1726962b58e74e13eea4b918ee85303b24a";
   hasRunfiles = true;
-  version = "1.033";
+  version = "1.034";
 };
 "stix" = {
-  revision = 47652;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "1d4af4d903ce164b95321dbdc45ee17dff776cbecfb29ef74d7c192909da2eacf7ca7c143ee655d842999d347af8e63df683e4a216569c5954e48be54ad55fbc";
-  sha512.doc = "fd69dc299f88faced8b7166025616de35f935d0726671fb19b94fce9acf6dbf6c9f041f0e4ecd3ddd3aaa8716b77939225301cc79bb0131f77bcff1429066e9b";
-  sha512.source = "1f04ed2c60d8b94eb63e173157a896b14d70b7a0dabdffc1036c7eca0afc4c6257d8b0af24d83264ace3601704109587f0008c3f452232c57410834e6f12d1ed";
+  sha512.run = "7e639f7a534e24afd9d009e224d87c9c2a502cbc77ff882c6dcc9ca0bff512f849d1f3e658dff8badab3843a658171b88ab66d8e731392dc456f9c5f4e032318";
+  sha512.doc = "b01c3dfaa96a6bbcaa83e803514c8090546dcdd54595d7c66a1ac280286f5baa98947fe9d513da3d8baa1e83cdd174443751fc79c07cf66093af4e9044fd9010";
+  sha512.source = "594af38fdb72d632c36cf6ae6165518553b10127281ef8a6ec71f4ced16481f2582a13f1f6f0ee98e900c3147c574647c508f7c9e51afdc57ce68614a394d007";
   hasRunfiles = true;
   version = "1.1.3";
 };
 "stix2-otf" = {
-  revision = 50948;
+  revision = 58735;
   stripPrefix = 0;
-  sha512.run = "103ecade85ae44948216c901c487b77c29acaec1813d995f79d50497c9b273f312a46709202ff1e450ed45866a306343aaa34c912e556da1496062beadb6bfa7";
-  sha512.doc = "678e183fdfef3a98a2778d7d694cb72682a2b1f44aa3595bc778b0b481f0fbbd60d3c05cc57f64edd78d656cda447b4a27505a71d942c6e63b7d35f31302445b";
+  sha512.run = "b966a7d18a471f13b5eb85115566ef4aa7c894b142561a46144e5cda6a0198dfcd83b776d19d605cffe482d07a4ac9d80acde7879892381e1a266e7af4f9f72e";
+  sha512.doc = "15e370d490eb01022877ce01cb8e9954af89553bd0cb2b404820c8744271d13ea32c75d2971abed4cc64a692184fb0fe369bc97bf870524599b2011fec3bfec2";
   hasRunfiles = true;
-  version = "2.0.1";
+  version = "2.12";
 };
 "stix2-type1" = {
-  revision = 50940;
+  revision = 57448;
   stripPrefix = 0;
-  sha512.run = "7358467241a5eec7e62271395554de3a5e0aaafb926c2ecf5dbb2eec8d03b3bf054ec1366490950ca7f5e69e415816e82af3257c4ac87eb7e6a88fba1d35d4af";
-  sha512.doc = "775626a232affb47e39da154da8a4d41f602fe235dfcf840966d5d60a102ae9a6f27b3ad05f3ab63c4a34746866ad076ba83ed9c2ec88f78039b56363e98756a";
-  sha512.source = "83d2c6307bb0f41248d15a9bd18305f9acb7c651839abfdabceba23ab2d22c6ae3162eea803addfda2df05724445ba1a65b73a00dfe3df894783628bab23b170";
+  sha512.run = "802ea99ccb3b8e2e727537113843846dd6629f722508219be88cddd9e7f1e6f67a1bf48ae3a61c51991ec91ba5c543467d3aaba64116e4be08707def58c70f34";
+  sha512.doc = "b4f1e6e8962fd77ecaf0df94b156783d9f77c07231e6cc258e04c26a8190dcd0a3175c71bd3a1187ad6cc083595ee80925712f12e0f838c474ac93701b47401e";
+  sha512.source = "5963bee636210eb89d31ea8d5954468fe9959429d516fb988c8ceab3c591f53b47a5a77df8f10d8e20f136adbf2fe23f546fa62b1768db7164ed74fcf706a228";
   hasRunfiles = true;
-  version = "2.0.0a";
+  version = "2.0.2";
 };
 "stmaryrd" = {
   revision = 22027;
@@ -29837,11 +31563,11 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "storebox" = {
-  revision = 24895;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "365da48946b94161fe78447b402dfda931f7635b7a8a12fe6a4368c3b579c140b6c6037e6b04e192aaac1d768200af2fefc53659e52b813ac6956b9e82c8076c";
-  sha512.doc = "89867e995ec04c8411e6ebb9919e8b94bc12674fd7e659ad6f42b17988748c98a4756268782a9fb5f46095ed2b83a877c3969f0ca8433e5f8c37dc7551c7825e";
-  sha512.source = "248077174224766d5b35b47b319b9eb9afc3a5fcb0d1190474ffc3233c02dc7265c078b08ac57a325990678ab0eb58b818fef34cb932a229da1e43247c6f2578";
+  sha512.run = "68feeea2592f31d3aed2b8431ab9e6c15d61151d3db7f59d54d6904e8db0f11c424b22ea6ff99e19032688c7910debed25280dde11f7a5858186772f118f0a18";
+  sha512.doc = "08116b59ab292150381e1dc3e766d5ac7fbe8e1ec7a32236af4ebbd6ed410f76fff74648477615dddb8bf55281fdf918bafd25c04bab4d2be08b86c5b937a5f7";
+  sha512.source = "bfc6c15b82ec637d8a76f705b7e443c734fc274b6de15d93dbc5b96eb35653e7a24a1f2abc628ef0d314ea791e04d1db9efe3f8e481cfb40a30fb0a345a82e38";
   hasRunfiles = true;
   version = "1.3a";
 };
@@ -29853,6 +31579,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.0.2";
 };
+"stricttex" = {
+  revision = 56320;
+  stripPrefix = 0;
+  sha512.run = "5e823dde4f0b902f59327be2f41dabbe19f569d5d05941deda33b44664b736c9ec687e98a04635c6f2af2a0f894ad162bcc4b866e52b88e5db55228d4a35538a";
+  sha512.doc = "9853efc6722d028c1ccbd90bdba2b4045c45b384e7fef1949ab51b7d2e6d29f1ea2c55c3a4a580a42faae9e03d38de258528af3e37c78f61ef8704798be5ccb4";
+  hasRunfiles = true;
+  version = "0.2beta";
+};
 "stringenc" = {
   revision = 52982;
   stripPrefix = 0;
@@ -29863,13 +31597,13 @@ tl: { # no indentation
   version = "1.12";
 };
 "stringstrings" = {
-  revision = 36203;
+  revision = 57097;
   stripPrefix = 0;
-  sha512.run = "8ed9dc3bbc869f06126280a4dfab23da73b57a9c5c1058dd9764e2bece26840ad37637d4e83aa84e6d9a17d92095803788697b8d325bca7fd57c7135ade7cbf1";
-  sha512.doc = "fd794606d8eb3a9ab27957268aae1b35b89c1bfc1b3d5602290797a6eda8551e14471d35fd85cc6d0561a1e74523a36450c958a0cf5881d42742eabf085bc794";
-  sha512.source = "79d8d86c7c3695b8d821bd1bf5400b5195c753877f8aa6c24094acc87d91ba8b58b086b760e87acc6e1d4b7e3898c7530f40567f626cb3b002ee7064c636359a";
+  sha512.run = "fbc29bbf65e7d4a1fd367b03490f73bf44349427f6c1a7e826135ee9092c9b592a4cf23454919e0bcc74dc59d3a6ad072dea16096e4850780ff295dc3caacc48";
+  sha512.doc = "1779de4af914b69ab258bc1f69a807c12f750e5919936c78ace4496f86200bfc4c3146dffbb27ac5977c2e8d41ec8d0139cf2a2560ba7c627dacd70b34cc69ea";
+  sha512.source = "94cf26d431d3638f769166c999e3dff156bd37e02a7099129f1259b7259be95896b694a64fea657aefce22f3a1e98ec2bbbf0f6f85171ccf977068ddafbb8078";
   hasRunfiles = true;
-  version = "1.23";
+  version = "1.24";
 };
 "structmech" = {
   revision = 47859;
@@ -29888,13 +31622,13 @@ tl: { # no indentation
   version = "2.3c-0-g7d3fc5b";
 };
 "sttools" = {
-  revision = 43684;
+  revision = 56774;
   stripPrefix = 0;
-  sha512.run = "acc5c6b470d1e5fd96eaebf3792b3c2402a8fe4a07409328878313cfbaa1e0febc758ae75c6d736e9320f6a332c67f7d6898c761b9c5e30f6658e9049df889b3";
-  sha512.doc = "15292806d0f8f4a0364076fa225b7d914a4ae88935e08f87a46978f5a561405f6fe4dc2d471c974c85b369e57bcdc00a5a4759d66d296610713d858dcdd4da34";
-  sha512.source = "b22286c3e7b1bc31247fd52e0c64a5f3dddf35e69c2af8e2a617530a24f82e9504f9f0db82d3cd1c57bae61aba526d941636aa32f498ccb3b06983e6e5f511fe";
+  sha512.run = "d9707fc22ad26d291288debdb2d9bb492175dade76ed398c3c0ffd1d4ba256d8c691bc2fb9d537ff01af4de7bf1352d4b1f62cc6c54afa8c02eea8b69185382b";
+  sha512.doc = "b32bd4fa10599b3ace5bc8e1b2dae79750aace26a98806de275fdd358554b6f26fde48c9e7b0fbb108de0a771728a68f6c09fa9c568a5e2fce7b9aaa1fb1f58f";
+  sha512.source = "56a096fbc8f28a0ea2f1ef31ebf277204319eaf6fb9bfcbd5449d24b2689a111f192ee1c723adcf8800c9ca2069c934cde8d0bdefae473e6eced2b043b7fd8d8";
   hasRunfiles = true;
-  version = "2.0";
+  version = "2.1";
 };
 "stubs" = {
   revision = 19440;
@@ -29913,9 +31647,9 @@ tl: { # no indentation
   version = "1.0";
 };
 "sty2dtx" = {
-  revision = 29743;
-  sha512.run = "05e17abf8322e70f275308e983a244e178883aa36571640d513962e813a2bfeb88264c0ae9ccab956f9bd016923d1727c14a7a26bb58b257c7d05600a540da1c";
-  sha512.doc = "1abba13831a0cd4b93f9665f242b96d32e764c39ccdb917f655922fe2a4b00385d6a78c77c151e212082eace3b9c9447705681416b5cb2eed9f794d7eb30c905";
+  revision = 56291;
+  sha512.run = "a7e42340744a348c88bb3cde7e23d428259f4fe7c644093e4bdabf8c49bc7f9c929a2271cd14daed9be233a04f62b60602a9fa778d05b11dba716d886286e8e1";
+  sha512.doc = "2fb33ea4fcc9b5e940b46cb1b53cb56692528d8926d9bf22d3615958946763a63be101a5cf146a14ade43e2dce11b8fc25866d563d844570863dce54f48472b5";
   hasRunfiles = true;
   version = "2.3";
 };
@@ -29988,13 +31722,14 @@ tl: { # no indentation
   version = "2.1.5";
 };
 "subfiles" = {
-  revision = 53782;
+  revision = 56977;
   stripPrefix = 0;
-  sha512.run = "558a8e29ac5fcb4fba04a75fd02826824690bba8f8b6118ae15f856c0e5cb34a63a507bdaf90a7d2786fe3da34637f76d62d24d061df76dcb95bc324224002a4";
-  sha512.doc = "eef1fd8e0b739ed9cc8bf45952c53111b45b6659eb2a0afcf64ae76363fcdfe61320db0831f31b2cdc9a242fd766855be3d83224172e9baf84d15ff938d4b23c";
-  sha512.source = "9ff743bc9c3cf19fd6c12fbab9377230dec554efb2663a83f245b34c9b6db1f74d5d8b91d60a48efe164cd2844de2ae1724d0e6eee9d4692386078c9bbc44816";
+  deps."import" = tl."import";
+  sha512.run = "8f842b0debcae3110f0a4b2f59047cd55c2726d128bf3e159f2745a4b8a645c3f8471fe218ca34c32f2b35d42d1c5023a25f09fc3bf0c1a4f0c33197776b1cec";
+  sha512.doc = "f54f52c5cee01b7ae8e01bff5a4d828b5c6708c31f2cf40d7e83c8a91c4c597945695dd7062b6088d3f91f7a9858e3227c850d658ae7a7bf94392e00e3eaf9c7";
+  sha512.source = "2623a0ec244722c1e3194d9ff1237305c1b7bf8c3baf6f60edd69b165bbd5ea83fb73ad23bf9aac1937b4ecf1059754e798eb2c97f7bab5d550fabbe84b752c0";
   hasRunfiles = true;
-  version = "1.6";
+  version = "2.2";
 };
 "subfloat" = {
   revision = 29349;
@@ -30064,19 +31799,19 @@ tl: { # no indentation
   version = "1.0a";
 };
 "suftesi" = {
-  revision = 53903;
+  revision = 57650;
   stripPrefix = 0;
-  sha512.run = "6b6249485e0c7076ad6141af22ec6aba22c0df86c38c03565bf61a486cd8d7c24c1909034e365699e3428307762f65aa6be64e222f167e8ce744e8b84d2a0e71";
-  sha512.doc = "316340999ebe6534adcb38c53f3183c64fce9819ed57ca51587c8ca2dda25afbb6d2c68529134524974ebaf9ee27b03267e8021d4d6e4cfa51a7697b942f4a7e";
-  sha512.source = "cdffa74eed1f65452acf39233decd0941bc23718862545fd74b95ede4daa3c1e65f7f7e14dbe69253ccf09f198ff2e2d8434bc9842b61d5a11de56c497aaa0e1";
+  sha512.run = "831ef011581a27693ec114b66e1f5a80f0605f4228eb31755d9ca202a7b1881530be2ea89b1ba9d0b71ddca88c109da20919d65e5705adac143fb381f19a4180";
+  sha512.doc = "bf83d581ee054dbc74c2f685c9461bf6233b674a49d2b4d7a989c51f28728b25f3fff7c2f9c53110bb00b91a10b5f978ecb9180d2d5ba93cd6cd01f0be0cc4ec";
+  sha512.source = "8c4ce79fefe4ad379cbc97dca4d6e046c266c5abc46e2e8422abe145e74199c7518d0c2523015a06eef3f1350880dc2a259c488c60c1a2610b10fdb372dce342";
   hasRunfiles = true;
-  version = "2.9.8";
+  version = "3.0.2";
 };
 "sugconf" = {
-  revision = 15878;
+  revision = 58752;
   stripPrefix = 0;
-  sha512.run = "413a4e36d4e4623898ffef9109b7bf26b6c8769e05d9d631898420a62d0766dbc8597083c6fe27393c8769f8a55d683cf52e3c650b9ed521268064bf510e76aa";
-  sha512.doc = "9d4b4544d559fed2806783fd8cbc23485e4a4d14afa6702a90845786449b8fea920277c4c7d1bd4f5fa89ceefec34bd50e617a0ffd3bbee30711fa5e63a2414c";
+  sha512.run = "db7082941e64a24fd7b04fd48dae2b78d67314f7483256278a8d8eceb5aeea77e24bea7e7ebb9e3742fed7cbb4add6a5d97281819ccf307b102b8265d00723f6";
+  sha512.doc = "4a64c9ff5c9350b80601052093baf0d9ebddf24de17c9ded5cffb299b94cb6b4e6f0beb03c058b8a7a4c4f7cfea118cf8e95b797881ad9f77e879b228ecc2165";
   hasRunfiles = true;
 };
 "superiors" = {
@@ -30096,6 +31831,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "4.1g";
 };
+"suppose" = {
+  revision = 58736;
+  stripPrefix = 0;
+  sha512.run = "ff890a2809a19c63733769d545a908c05f1145762edc240c4aac8f18b6f0ef66c01f70d7be51c83eae298ea640af89b1c8b506ca0befbe5b461e8724fbcbb9bc";
+  sha512.doc = "834bf055ae114b1c1f01375b066281b96c8faaa9be1a7b31fd80718dc25b0a418f69c916195ae98a40b5317a4aed46e0d0f6dd8bd535f562fb26760424b2882e";
+  hasRunfiles = true;
+  version = "1.2";
+};
 "susy" = {
   revision = 19440;
   stripPrefix = 0;
@@ -30104,13 +31847,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "svg" = {
-  revision = 53389;
+  revision = 57010;
   stripPrefix = 0;
-  sha512.run = "9996c9d7bb018bf4526f91aef707192f748a04e3dda7cb61b27c9d69e44cb1492f08fb658d599ab2800224c9dc475305c747d433b14284144b73dbecf4f4a2cc";
-  sha512.doc = "31b6ce351b84f164683ea4bd33cc8dac41898022a966cf986f5d16ca31932422caa36f67785346ed33fbd7e1ec55b1480b898b8f928d153d4f1fe97da0b1359c";
-  sha512.source = "0ccdf4390ccdedde68eb4eed9ad297812c355c980ebcce87e1e1264749cd71254632231cc3e58221f51aca80fca88628d7a112a57eea6cda9bf41ee986af6a69";
+  sha512.run = "fd2c051969ea85b2e5c2818292128044038003456f8019efc3c6decb7e811f3eeeed6f3505cb661ee2b4768fa7715f5b3aff4583124d6cc99fef5c5f6a2fed77";
+  sha512.doc = "84f35fd26786e57a8eea08af996d6edc93116529ab364e2b2e23ea6826748435d8487264438f7ff6b44b6d6975e0f18b1f27599e0e554b3d664055296e8fb0d7";
+  sha512.source = "834958e4f8a0d8102ff88af0c499455c9bdcf61b0bd2795e25a07507c55ad6e7a5bcd131bbac48e463bd93b4bf49dee9aebe46a8999d75c24218a332814d5974";
   hasRunfiles = true;
-  version = "2.02e";
+  version = "2.02k";
 };
 "svg-inkscape" = {
   revision = 32199;
@@ -30136,19 +31879,19 @@ tl: { # no indentation
   version = "43";
 };
 "svn-multi" = {
-  revision = 26313;
-  sha512.run = "f1367560fd6eb6247097d5e5901a56a01a90941f584797f6a5e3388cd9ebb5e33ae98a8cba69cccb4b42feb01a29d8507de8e814be8ca2516ba24ce6a0d929e5";
-  sha512.doc = "8e54c597bec50dc541abe4e1be7ceeca9575c5e9f3e201bc66eaeab11ea529cfe3724389aa2d4938f6272c93213dd20a7ea89cc9c954f882ce916c6d610bafb1";
-  sha512.source = "f90315214155802235b1137276d615bac052adb9295dba04443976fd7147898616e2ff8e32bc1c3f6cceaaf59480c9acafa73cc53ad50da2bd07d20dd68e2fa7";
+  revision = 56291;
+  sha512.run = "237955b5606c5c4fbca7a5c06d4cb1b180ad33647d39337a6814c95a43ecb84004715f3b639353608bd52a64ee3ea70f392ba831ff64499b5162aed64a85da9d";
+  sha512.doc = "2ae2947a0b15e82a9b241a757ffc60cf5a5be04bb49c4ae5ef7de9dcf9e1ef4082c83e2a57058dd431d16c56eae7647ec4c43dd47a4f0c2a925f4f989a7f6844";
+  sha512.source = "45e948ed51554b3b12b883238b628ab6dc43a0ae6a0eea093399d1f771bfc368b2839c568a7183abc3a8cdf687095692e0063cac26869c2fc2b89087096b412e";
   hasRunfiles = true;
   version = "2.4d";
 };
 "svn-prov" = {
-  revision = 18017;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "24325a3de52afb9328a4b608710b94839c77ac65b13f08219f4efa24680ceabc410135de3c468c89d5d283a8986f2a9e337ef2285241ce776d0270622e0e77d9";
-  sha512.doc = "b6de41de4535833025f2899ae28530f4198717bfdcf06b090d054c20bced3a524ae9627b1909eb7afc6ff4e09d5525203b869c09d23facbb86e207ab2193b57a";
-  sha512.source = "c7586e4592f9518d2a03218c9afe614422bc8021a192279d7be1b090bd09bc51191d8c0a2e760514206c53cecf5a7b89c617a4c209cdb878874a0e3396659a3c";
+  sha512.run = "0ac31432d148e5b05cadb041ee238fdd27b695a5be2e9553d062084443f97b961e1d9530ce3e5bc0b97ca8cc1bedecf9abb6f189f4e75184816e4ca36f8117d8";
+  sha512.doc = "78e6d352d0e19c48d98edb5e5b12ddae32e906cf0693ca3b57ecc9647dd5dde7a6dab394160b9242f2503a7dde54505fff4d38687a06689a463b152e6708f70c";
+  sha512.source = "e67a24270a79b47c853c492b2d72b451a9041e6202fcbe59c20c5203dccaf8d865215a01cf48aebacd8367e2d5a7d1f2efafa93e729d7d3d7269c4d008bce7a1";
   hasRunfiles = true;
   version = "3.1862";
 };
@@ -30177,6 +31920,15 @@ tl: { # no indentation
   sha512.doc = "a3db201554a0b828cfc72d47a22b777fd7b44b25c361a4d8f032cc62658780628e83f6eabfbf342b867fda335c1ddc228347f5fc66651193c8229e0bc6e46f67";
   hasRunfiles = true;
 };
+"swfigure" = {
+  revision = 57213;
+  stripPrefix = 0;
+  sha512.run = "128965eab86a5028904bb2486c7adfead525ccc26a912cd4f69b63a11e18fadb3f8b0f42a9ba3e8296952afd3be0be052fa721a0edd6df320827acda82e6271a";
+  sha512.doc = "968b87d733ec7bfabab4a7996482c54b184e8e46c8f5e30078e9c8957923c2fda3f136b65d5b1be392b62fce5fd1e016066dd86d42da3e43997b04a723a491fd";
+  sha512.source = "fa34afb85d7380539e283d5f1aca26468c31b6d631d28618a3cde73e3bfa493a3106f4321a5cbe172d86ef547165fc255f02f44957b28abf15c1b08d36e72952";
+  hasRunfiles = true;
+  version = "0.9.18";
+};
 "swimgraf" = {
   revision = 25446;
   stripPrefix = 0;
@@ -30184,6 +31936,12 @@ tl: { # no indentation
   sha512.doc = "2394080a393e2a0cc8e8299dc4debbcc7548186a714454c87662c22a371308c7e8e6705c9dcbf6eca632f2f80788a733f9d5a9f3fddb2f46167fd50654c5bcdc";
   hasRunfiles = true;
 };
+"swrule" = {
+  revision = 54267;
+  stripPrefix = 0;
+  sha512.run = "fbb2a8fd060e41340a876595310b54d069cf808d4e2eacba0d913732fe45a3cea698c1e6e229dd152666f7b509eca424d17378c74ad14edd0d5f08ec85c6c65a";
+  hasRunfiles = true;
+};
 "syllogism" = {
   revision = 15878;
   stripPrefix = 0;
@@ -30199,18 +31957,18 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "sympytexpackage" = {
-  revision = 45818;
+  revision = 57090;
   stripPrefix = 0;
-  sha512.run = "14813cf24b562ed135e6d5a0078306f0687cd464915ecc17e61df0bb5d9900d7110e8338c469d4d55664b2fecd1eeb6bb4f359b11fb2a07bad72a442b7698842";
-  sha512.doc = "c4e7e386852b3acd071d1addea10435985e7722dfffd4933ac2c3821b5a75e8c9500f5c42bb6b3e2315bd06b8d3e2ad12423c2c43547bb51b2f59bd982d7dfd3";
-  sha512.source = "7dfa3975f5c042f7196ef6a76e31b79caeca4101026afc53aed719239e7ce701a7917e733bb77297b569333adccab6b5bc7149befdd6eed4f09d46ea38684579";
+  sha512.run = "9a1fa177703dbed088861ff47e5b53f3c0f433abe15d471d181368c52e0cdae7350090ce5cb3c25d4ca816d1132eb009359977ada3f3c0b5c3b80bc0873f8110";
+  sha512.doc = "0013c9c1e21f70e36e6b30f12d777f9f78b727ee1beb2f893133248fffb75f0bc4523c0787c0e292f197ce1c01b5f37b34c33ae97ed713bd900848657d803c59";
+  sha512.source = "45df3251efd8a8e5669f72b83fc8c07c9df777ec90bdae9b8a92ff3c1875fe623574365f69162cc4c2f89e4fc7ea32dd1ac0ce164ee804799496be25466a12bc";
   hasRunfiles = true;
   version = "0.3";
 };
 "synctex" = {
-  revision = 52851;
-  sha512.run = "43905f27307922763a00f259c538ea6c63aef31d7e1a9a451b929cd76b8402182360ab47a9090506cc3868c6ab56f040e16c5c45ccaaf9431eda31e5ae238ee0";
-  sha512.doc = "0e8992318ae2bd7a0b69c0735c565abbd9d21ce6aac6f2e9b44447c41482c4b9a8162220d5cbc073bf5c7c8453a42e85b64b9c1f4be4e247d88773e292370887";
+  revision = 54074;
+  sha512.run = "1cc1900df90ceebc6865ce7c4a4befc86d1aa5aeb0f19808526a6cb369d7bd2ecf3c4789817da937e84fdf1fa3c921660e64e3e8a8e215d4f6dd97b2371743c5";
+  sha512.doc = "37b7f0e3b86494715763c0d230a076aeec1f41ad658432099871d26b933cd8d0e8e831064cbe462a31a30260004c6dfe9b6b4d555d281d909615910470a2b1ef";
 };
 "synproof" = {
   revision = 15878;
@@ -30227,6 +31985,14 @@ tl: { # no indentation
   sha512.doc = "7d0754c08081abc9867d0d40fc910ae5f8b34518004bf698dddc184f0b514d75a7feb3085870cf8322b3d6f3bc4c32ab50acdaeb56b574bf41604a18c23a6656";
   hasRunfiles = true;
 };
+"syntaxdi" = {
+  revision = 56685;
+  stripPrefix = 0;
+  sha512.run = "79d5df672a25ed58919b7e054be992986edc8484348388d5eb318dfa99fc55ad3c452d6924c857c1bfb46361d59fe1d4e38cf84c9cfecd241f7d0c9d184f7995";
+  sha512.doc = "a7c370c6b6c3877098e5cb216c4e82d382dfba0627de6abbca8f4e1bc6f94f53f11bac7456be213fa632d501dbabe910ef94680cb2cb20549c292ec5ffe79451";
+  hasRunfiles = true;
+  version = "0.8.2";
+};
 "syntrace" = {
   revision = 15878;
   stripPrefix = 0;
@@ -30246,12 +32012,12 @@ tl: { # no indentation
   version = "1.4.2";
 };
 "systeme" = {
-  revision = 49690;
+  revision = 55015;
   stripPrefix = 0;
-  sha512.run = "a71c84f41447a568cc56b2afe139dc7df23660c329e82c1a0d40e3bcf41ae775b2847f9d391bb591420cc546a36d0a69571a829822932892af1dcedc29e54e38";
-  sha512.doc = "4cf7120bd6291edbb101ef1fcdaaeced3a6c771052d8f176b6c11365e1d48699978bc0593354ad9b132e05fc6f14f4074ccd7326492391c49c34a8273f4389c7";
+  sha512.run = "5ddd525564a009104ef2f345b6513c08423868a91105381c66372176f41875fba24f0d27ceb648daee113514bb22a3e68d5134fce82394f3e7159af68cb81703";
+  sha512.doc = "9a3fe5864af37878b861220ebdb6613635dcfd563a0149ebeaf0c725af608d8f24f5d2e799b19546f82299dd38e2a4695b6b08d056fad1ec2f8a134326915325";
   hasRunfiles = true;
-  version = "0.32";
+  version = "0.34";
 };
 "t-angles" = {
   revision = 15878;
@@ -30261,9 +32027,9 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "t1utils" = {
-  revision = 52851;
-  sha512.run = "834a966269f1871227b9918a513e154d4bfdc4d1a80deaba5f5bf22136bc8af10a7224f5b6f753f074208881de970076c1214199ee5210c5014366d4f6549796";
-  sha512.doc = "096f8fc612ef1793c4807fdc134b3d75650f98a79b49ddbdf11c346b175ec76a900b68189f7e6ba02dd1579396503faed58398da8dfb42d70a7d69dbe24f5f5a";
+  revision = 57972;
+  sha512.run = "9065b22ec60747b603c758c3bae67ff06759ebf97c979028ac940a1b773e3a20f5f249a4a61b7564038dcda3c72ef635315e64a3b8692501cc8f6c30ff7fa989";
+  sha512.doc = "34eacd2f14282108ba41d49cc68c066e12383c4873c9cb8a2389300f9c5685b3f3d7d0626e33008d28c229f8311daf2404b2bfa164fa550184f1e856163ab386";
 };
 "t2" = {
   revision = 47870;
@@ -30380,19 +32146,20 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "tabto-ltx" = {
-  revision = 50188;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "3679dfd17ada1f2959def0c8eb9d434b84e5bec7245d7e5059e1d1b975248ef54ee04b6178cedaa8228805892f323aeb33d57bcfd4c37bdfb7d57f43a516da23";
-  sha512.doc = "bf428fe02b3e1779a5ae685690527102f3d728095f55c3af0c54cc42d6c33430a52a0a27f57003cfe30eca3bfadc36343784ec93224c12ae612d2e24b4ec5e0b";
+  sha512.run = "8654a7e3b49bbfe6e861a6f757d8553f78149e7187809b03f6854f2173143e10195385d9e8b35510e49a5f941b27a5796070d6db1183b58e4eb71c452d4a34e7";
+  sha512.doc = "35e98681472b9d6fefa25a534385133d630f072a75a045c9adfc4b0e775095609ece27322e3fe8af451db03c0ac3b63141c3cc7272924ff758a8985389040a31";
   hasRunfiles = true;
   version = "1.4";
 };
 "tabu" = {
-  revision = 49707;
+  revision = 56615;
   stripPrefix = 0;
-  sha512.run = "b5ee526ac9f68edba34784ed646557b8b1b28a0192c5acefa81dab5a637050798c4a7410589ff98549b2a29e30686c518d2f319144c7e4fb2ab1464d56d2fac6";
-  sha512.doc = "b7cb976e6908f219d50bb3e30dc7874b3c9843c8c36bc59cfb909fd54472c4767e914889cb4f50b4ad426176764a09633254e05d271daaaefe0b0beef80161e9";
-  sha512.source = "0684c272a9dabb794a0dbb3900006abe2b0997b6e3335668d058bd9195a6661ee523bb7324ec2e98a7cbfa88416310ec2427c1abcf01986ad1e07a1008bd506b";
+  deps."varwidth" = tl."varwidth";
+  sha512.run = "cee6894fac19a98293402b714cc52eaf8ec0b9965a8e9ab9f5125388a2e4709e5d33063286eac9e45a3470f551d1aeeb41d09623b5dddd6563c1c462c2582ba3";
+  sha512.doc = "9e10613a8ca8b29d61ab5a394ece8e25e0e8abea4b7a70b01382935650c86e9554712635c78f3b097afc5f9560cef2fceb984b383826e206233c28144f332c2f";
+  sha512.source = "7b88f0fee52dead2555b4dcc11699ff167207f210f663faccccc1f951e40a53a5a572840c43070d4f86bd183c5e0d9e456c548013160a39264bcda10e71ca49d";
   hasRunfiles = true;
   version = "2.9";
 };
@@ -30422,13 +32189,6 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.1";
 };
-"tabulars-e" = {
-  revision = 21191;
-  stripPrefix = 0;
-  sha512.run = "c755ffcbcb5636b641a5b31a7fa2b2d97ce2e3e0f14fd08c23e0b234abadfe584bdd6e2628fffb614c249ffd17e46d56790fedd929a5af55ec92869ec302e6a8";
-  sha512.doc = "2a29bd4c343c172f37874423a754b03888838db7ba4237992ea38167b82fbf7169dbe3056b269d487e398208d165d4fe2bbcb5413c138cc6129fb926f9ee7701";
-  version = "1.0";
-};
 "tabulary" = {
   revision = 34368;
   stripPrefix = 0;
@@ -30464,12 +32224,13 @@ tl: { # no indentation
   version = "1.1";
 };
 "tagpdf" = {
-  revision = 51535;
+  revision = 57954;
   stripPrefix = 0;
-  sha512.run = "4cdddad7f59d6d9365078817b99faf9b815baf55e2c7fa736a431d6aa11ea4ae2a6d8d825f5ea7c6b5e9d5b01d5420afddee9063273f2b7a92bc0af01d20fd6c";
-  sha512.doc = "46ba8484bd25977fe93c1e9cbb0a078aa917060536ab5d5349eb7f5aaba5c59e2e9da4faa7e16d1c45f0e88bc896e70bcbadb32c4f679bc05931bc39cdf3d2a0";
+  sha512.run = "ed62165f65bbcb159d727a41a02473ba32523f2d8f256a7ada5634fab4cfb1d037eff900dbbf271c7efbad78b306c71a9104dad1fb47662fee85f850afcaa450";
+  sha512.doc = "3630a123d98ebe9efd15729beb88e5a7d6c92fa485d416d2023a9d732feaf54548649551a9b428ac1fa25824cbbbfcbdd11b5920509985847a0e8f922f433580";
+  sha512.source = "9bef63a003833525c6b1a6e983ba53f362eb818b0ddc1006a0eda80a27ee46a1ca90b321bbce1e5cc83d67493f74db04d63f6d50b90863915b574c1ab0da7300";
   hasRunfiles = true;
-  version = "0.61";
+  version = "0.80";
 };
 "talk" = {
   revision = 42428;
@@ -30512,12 +32273,12 @@ tl: { # no indentation
   version = "0.2";
 };
 "tasks" = {
-  revision = 53371;
+  revision = 57835;
   stripPrefix = 0;
-  sha512.run = "79e6a16d9df2fcf647eb3cee57759044ec6e6f85fda5662d56db6f55911bc3350f0bd6df337327b29185d2d529892544f28d7a1b1f9be09e704857006dfb7cf9";
-  sha512.doc = "16846eb9eca1542d731617cc7a5b7ca7afbeec817fa941074b58caaa166faf8e593e33fe4d89e88741b02e48dd5b8a6be5cdcfd17d3d45cca2269037401c8a47";
+  sha512.run = "995da480ba215f79bf989524f3fe8d66919529aa8cd9bf40d5e42276f3fa0ec27c4a0da51281b8070dd956af1cf80403fdea0916d39e54a9f21796c16773ebc5";
+  sha512.doc = "2ac26058e157163991fee0704d4f22e8f0480a22391f029e29aeb5fb76772955b753ba29261db58918391129e24c5a31efaae6273aab653ef13a34f863347dfc";
   hasRunfiles = true;
-  version = "1.1a";
+  version = "1.3a";
 };
 "tcldoc" = {
   revision = 22018;
@@ -30529,12 +32290,12 @@ tl: { # no indentation
   version = "2.40";
 };
 "tcolorbox" = {
-  revision = 52809;
+  revision = 56610;
   stripPrefix = 0;
-  sha512.run = "59935197103e279b68a54dbe1b33936035b3073f1ce70ed70af8e405096d36df5d00a4b0bd583428211df3497b779e4b473359004c0d6aefbcdb4a398517a38b";
-  sha512.doc = "c7cb5fb7763872451934d7f767d90620e43dfef89de989fd3e233b8db8d169acd4a947f493cf724759cc6ad57b179eb902f923ff91c1172c0dd4567b348c7f76";
+  sha512.run = "70647656ee420fcb3c832e8552c2340229b0586a638f7c55404f96f20dcb3e8fd2c561a44ece09e6f507a3c4e2be189aa4cb3a3c4d8bc338ca4396e5d4b9416d";
+  sha512.doc = "5ec6c748b48b0166555437e0f75203e616e43a8b15787890b00d36df7c86de1971d2a876c5e7228f60f9ccd2e14c7b30ec061f35127a76f6194722c7103c9c0f";
   hasRunfiles = true;
-  version = "4.22";
+  version = "4.42";
 };
 "tdclock" = {
   revision = 33043;
@@ -30701,24 +32462,25 @@ tl: { # no indentation
   version = "1";
 };
 "teubner" = {
-  revision = 40197;
+  revision = 57684;
   stripPrefix = 0;
-  sha512.run = "196c611d9a1f8231541a345a71bb45279715a748a8ef624865c076a8f346f8ac9a7be636feed01130d98445f8fa032ea8f22ff4f4194ae45efa0073231d5cc41";
-  sha512.doc = "3714dd9003e03f0758031dce6dbd5a3840b2d9fee53382fdc66e99d4baaba153694c88fa5afc8e2ffd4af64e210a7e65e2a663baaeed7d96c0800a3fb08cc983";
-  sha512.source = "667dc5669ddda08eb3f100a501d3d5f3822c8bf1f58d51356fbd51bba3a98b53c47df32243e5733e8da4d136074b8e4c29caed91cb6c5d349079ed1387f3de82";
+  sha512.run = "9f83b38366047a36b064162abce047026bf71341ab4d0ae1f3f827b1b73e790d25a5deaa1a5c724c80a75a081d82ffbc6e24b1b41c5c09efe4e10ffbd1ed5a65";
+  sha512.doc = "16e3c96b9a6da29e06a80cf1e98cb2b993d1f98b5827ab05cacba7f29dc1e28dfb704d096295bdf6b995408d83ad42af6b8a59eecc78be41a4e5219fded64627";
+  sha512.source = "807b8754730c20c0327eee6bef45a83ff8ba8134477fbecd4b5f3cc9c0ad95bad74a698c12a0906d0211a4d9a0b0a0ac3d74864db375e42879cc32821c363e23";
   hasRunfiles = true;
-  version = "4.8";
+  version = "5.4";
 };
 "tex" = {
-  revision = 52851;
-  deps."kpathsea" = tl."kpathsea";
-  deps."plain" = tl."plain";
+  revision = 57972;
   deps."cm" = tl."cm";
   deps."hyphen-base" = tl."hyphen-base";
   deps."knuth-lib" = tl."knuth-lib";
-  sha512.run = "ef2e000027efc98b37426f3f9b235ed0bf66693a6dff34cd9260067da096284ccb10f2222a016a3d7b322b93f495fa6515f5c7c0b2b10d6a92a28a54239e432d";
-  sha512.doc = "00de1ab96fa89af7399d69734225cfd6aeb2654a857579eb1f51b1cf9b38c21335d6e954eda4da5330f307c2cde7bcd009581dbf1888ca36e6f1eb64308f7a73";
-  version = "3.14159265";
+  deps."kpathsea" = tl."kpathsea";
+  deps."plain" = tl."plain";
+  hasFormats = true;
+  sha512.run = "e38f62fcc5ccee22a909eae5ea196e055eae59eedc652ce9788a3b4520995e97f64c683f1ba940853a06030a7ea6f1d749ed4dda1cb30433f87f5f9cdce5a9a7";
+  sha512.doc = "3056263569276ca7a62ccb03542eac99b648d36c398ded17204a2624f06920c506985aedd1a639a48bc60af6394d091cdfd9ec44000730bd8e8c83c2234bb569";
+  version = "3.141592653";
 };
 "tex-ewd" = {
   revision = 15878;
@@ -30775,6 +32537,13 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.0";
 };
+"tex-nutshell" = {
+  revision = 58471;
+  stripPrefix = 0;
+  sha512.run = "63075927692bcb796c0aaa29303682f9bcd0984e41a344a4dbe7c21ac467ea2fbb5ea952655373e877d8125c676b867f8f26786bc3e40eafddc446a0e92ba4e6";
+  sha512.doc = "0e73d7735132f81ffe5aec90254e640e3da839da8fa6b5e72afbc45266cdd806f0c1ac5ef0d88b1a2e606164f37ca5086082f1e12af28726847e39fd5bd61387";
+  version = "0.6";
+};
 "tex-overview" = {
   revision = 41403;
   stripPrefix = 0;
@@ -30790,10 +32559,10 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "tex-refs" = {
-  revision = 44131;
+  revision = 57349;
   stripPrefix = 0;
-  sha512.run = "12ce34f2173ddb5be885b174a6be708fb47822cdd34e05ffcf6f17cb28ccfc32528206c9e73373a6f68a5f3987cb9e244c5093539f14db3a4eab0daf8ff7fbaf";
-  sha512.doc = "318f2872f308b2f22d96af2a553d9e13b60e1f6ffc1cbdf44e123fb2ca82423ff8bb7aba524f0e8570b8086ef85833cb11070d7848b3212b87ae0046405c1a5a";
+  sha512.run = "aa03714a0ebb90c7431935608851c504080f8985db3bbba98cbfa9b957e0a3fbb87de8e0119bfdcc996d664aa46bb943c6f90b36c4408a42f14fcc8387508df6";
+  sha512.doc = "f033d8d8bfafdece7b79c8417bce19dde484adbaa958497c0b4426448e6ebbfe8dcda07a34c336c3abe038447ea9e5177bce4660c9b8be36b0f94d02fc7a41d5";
   version = "0.4.8";
 };
 "tex-virtual-academy-pl" = {
@@ -30803,23 +32572,23 @@ tl: { # no indentation
   sha512.doc = "aa73261fb0ffdbb7cdbf85df354490a72bd95e4d98e4a497e98666e6f5533a7f05a7132533db044ba993d86e03fc21825bc6fa7f262e5a0bcdb6de8114d38eee";
 };
 "tex4ebook" = {
-  revision = 52616;
-  sha512.run = "76600392b612abe233a98195c866bf291e4bc372f0cace58fed0855246b3bc8ee8687c1e8baac3026030e7eb60dd1f4a4ed3698521b37126127b33d1bd080661";
-  sha512.doc = "b00548efbb3b263f9cdaa7348186ae7e96ef3a224904ccd04d4622b85a94cd5a591532265281ed76c6135273a9abddb8af4ff3f6e1fea484d534dacec1903b70";
+  revision = 56878;
+  sha512.run = "9ef3a2b820f1f7015b61b8cff017affbf8cdc07fb1d4c39f629e46e2457a08875dd83252526e75465ec75a42d6580b7ec75b085455e5ba62dd14dd13a898a8f2";
+  sha512.doc = "0a01620564aa41d076a998910eff5a1fc45b7a0f2a3b2f606191e1442c49ed6685c8ac51a099834da2765de030d2f099a79fd03d6aebe08f78837f18638bc9d2";
   hasRunfiles = true;
-  version = "0.3a";
+  version = "0.3c";
 };
 "tex4ht" = {
-  revision = 54213;
-  sha512.run = "c385b90fcff5ba43884918bf616aa4beffc285def1a380b84909bf4dd44cffb479612268a37977adf87f8dc226394d3239503b5d6f2a083a9f078862f282f0c4";
-  sha512.doc = "86b1ea30f9007e9d33f76a0e2970c40a6af0c40ec6c585bbe8ad98e057b41de3fdf3a7b1de0570ff2a718326a7e59a26d7d19f2c7ce0210599b57d95004188b0";
+  revision = 58348;
+  sha512.run = "240ab6f520939d3c9f7ce640740d6934e586a295eb959c503e0da6788833f3ffeab71215ed69dbb73c2b9feab09c169faa9b044576d629a43108ae97876cc8bc";
+  sha512.doc = "1654ce5b2ff1099bf19c62baa536b8c54aff53ac59b0289eab869820bc105617e68240e8e87e635aba063734c765ad9b46075c2ee1f119bead2c8ffa6b6159e8";
   hasRunfiles = true;
 };
 "texapi" = {
-  revision = 24237;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "ca4622f53eab49612b80781bf58130d419a89791f507164e34dc8123772d041d50790f63018a87bbe3e8ebecdbe49925fccdc35f4d90f5d87312a36ce1ee482d";
-  sha512.doc = "2740b51e345092c14bf86a42d8b94a5595248851c606b6274369abab75b708bbd17a67a544b1b3a0bdae18f779e042a53bc2dc04edbfea912ed60078cedde16e";
+  sha512.run = "e964e090b4bf4e924166d0fbd8daa2087a300d4da9d993bcabc624dc78c3f2db9984f2aa851740e61706af213d112cb32e80795ec2cd4e23a69c13ed92fd91d2";
+  sha512.doc = "0f3886e76090beb0dcf295ba875b9ddcd950da4d50da710f1b4417ffc7c1ceb48223a20d7cc93cac3cbe2f19edcfaa74c801096fce33c55e9fbc6c57b1897b22";
   hasRunfiles = true;
   version = "1.04";
 };
@@ -30846,12 +32615,12 @@ tl: { # no indentation
   version = "2.0";
 };
 "texdef" = {
-  revision = 47420;
-  sha512.run = "7c5defeb9cf9d5fbe92f8433265543e6d7024e9f7fdc768582ec51a5880745c54cf8576f1b7455e32d51429e2faf122c0775ead117be97510f4b2d8123b04d71";
-  sha512.doc = "a4727d57bb5b56106a9baf4aabbabd16cc8a8ac08358c28263abe9c40b76a6d692d0e819c23c7b8e946e97fd3f7574a498a6f43207c04e7544a0383b3681f54e";
-  sha512.source = "4b57478b06d4cd67ae6b8d2afb059eb52e03e31c4c4066108d471134865a64f3eb3dc99f8bc4330625eaa8e7c660f445365c6bbe510f36d5770b406df99d6c8c";
+  revision = 56466;
+  sha512.run = "cc85ae5298a72c337c1c4571f2af698b62b182521cc65d0ffa459b89121e9eeae7d6f033456278ec6f61f91cbc2a6feed18005786e5b9943a8b0893111e61017";
+  sha512.doc = "dbb3516132d0779f657a051b0140491d8baf1bd6ddbeef92d94414a791894696d9ce39d49b3cd689dfcea2d387a221e1b27cb486764b011c7068d7a1d352f679";
+  sha512.source = "ebf0284c4c8fdc35c8b6895f054d5055568a5e4b8edb061c91da4627b017dc7cb033943c11390f3d05923761a617354ea56ef95d3bf1a02cde66e55ecd734e1d";
   hasRunfiles = true;
-  version = "1.8a";
+  version = "1.9";
 };
 "texdiff" = {
   revision = 29752;
@@ -30861,25 +32630,25 @@ tl: { # no indentation
   version = "0.4";
 };
 "texdirflatten" = {
-  revision = 44751;
-  sha512.run = "e4f03e9a434e1ab8ea1b69ca0ed2dffe1f8cdb2c853a733e275bee74ed4b17b84b72cd8cc7d1820f595e1c2282a38b9bfc7f7b7a9e003fdace6488390a1b97ba";
-  sha512.doc = "972fc69b705b2f6289358199cedc91ec386da9212048f7f7a84e43eeadc943f7f42ade8d7faa9f58d1685d2bb10408e274b2461032927042371feb86b4ef6b43";
+  revision = 55064;
+  sha512.run = "3cd6cf4d9ff3a1a3daef0bd5a998417696f6645cb54679e99e5424ebbe3926c45acad7b999ee4371392a7ba13fe3f2899438ce66efca7829c7aa1eaef84aa6e5";
+  sha512.doc = "1114dce13ac47c4352e968f42e89582b62b2702bc25ce3a9a4fd766b3bd63607e11eab52d19bc9f809b2b67cd92153c4f591632cfc72dcaf1c0a1b1cfb416b11";
   hasRunfiles = true;
   version = "1.3";
 };
 "texdoc" = {
-  revision = 53859;
+  revision = 58477;
   deps."kpathsea" = tl."kpathsea";
-  sha512.run = "ff55c658b4baf265bf9ca2ba6e5a161eecc1c75bd112e6400c9df4708ae3f355dcff277cb60ff0178bd41940d090e3dd28a7ce06421f509b352489d7a8d98b2c";
-  sha512.doc = "54931eb9882415f2182fed56b4905c723bb0df1444b1e2af939e2b6093ed9acceba6af7d46d6aceeac853686a57e366c13ab76da05f18469da61c36588ce66c1";
+  sha512.run = "ace120045a48c29b207e94fa6a08956b63f4994374fbe5572a1e655046408126d094c0c89f9bb0350a6619b54912a89f4f72bd177451c84a9c3d182eddd9b5de";
+  sha512.doc = "ac14e4a9f5bc96d8d3baf1d8ff41dd1c996838cb6e8e5aad5c6e9bda0a93af9e7c5a86d6da7b5bd6342e866c48babe76023c659a36234a2a0b5787a84c389c4e";
   hasRunfiles = true;
-  version = "3.2.1";
+  version = "3.3";
 };
 "texdoctk" = {
-  revision = 52851;
+  revision = 54557;
   deps."kpathsea" = tl."kpathsea";
-  sha512.run = "5b2cfd56eddf1cbaa2471f631bf3b3e7dadf440fa4103e6ba490f738893ac7df4aeef5795bf269df16c9a02f873cb326bda5b98d2853c73a62b0e56a677b6e04";
-  sha512.doc = "1ee6930d450e7227bea84450a3f97933fe2f7dadd92e77970e7ce73f12fa1e9466c3b3ae987e441c447ec6d3069c7e0a4ea5b7d77d2690c71d1b8f6970b90aab";
+  sha512.run = "6fee47f51fe3d98051d7098d17e3c5c37b3969fc5a2c78bd5d5a2b97f9de97cdbaaeda274792d1bbc10653bf1d3daf6447c66a13b4b31f8e80d26e433c405936";
+  sha512.doc = "54fe4ca2618e4b8d6eb1f5590745fbb6ed6264a9e6ab4b34040bac52062ce4d7e8214a4fa3010cb6c78ad0003afcc3f929b112528940396973647a6672a0422e";
   hasRunfiles = true;
   version = "0.6.0";
 };
@@ -30892,11 +32661,11 @@ tl: { # no indentation
   version = "v2r3";
 };
 "texfot" = {
-  revision = 51525;
-  sha512.run = "0b9376db4c9006121907650bac3a13f8e81ca7bfe48cbab132cf635c72003de9aacf39f77e7e96abc3f7aa781f91cd9876a0fbcbe933d01e807597a581efaccf";
-  sha512.doc = "fba2be7e6b23503b98ab499fe4799a1344ab0e9d4c806c451b38945cca58cbe15505b360fdf2d83906d6457fa94123c2b704d4c1da8e0dc435ada46af673d134";
+  revision = 54246;
+  sha512.run = "9565c8106738793c9c14c8f42c750857bc64c324c190344267f99ee3e383f8052ff5df100298f4d7963ff44953c3af01a58ff8cfeee5237e0f07035ee6066be1";
+  sha512.doc = "1779cc8d4a6dd35acc591f959500e155b5ce155b75383c7b7478e934d00c508aa84f8acf13b07a2e67f529bcd125c7868d3a30d851f293ea149cf5a56d3cfcb6";
   hasRunfiles = true;
-  version = "1.38";
+  version = "1.40";
 };
 "texilikechaps" = {
   revision = 28553;
@@ -30913,118 +32682,118 @@ tl: { # no indentation
   version = "0.1";
 };
 "texinfo" = {
-  revision = 53776;
+  revision = 57911;
   stripPrefix = 0;
-  sha512.run = "f898722cc80f1143e1df4df0d4a73008d80b2dcfb567f6ad02edd172373fea4a435c95716242103a6f3e0273b4899b004c988292ccd9f019a270f42f4467440d";
+  sha512.run = "9bcff364b4f7e505f4301d54f8acd5fa248dabafe246c649abf4f229ad12c2e041935684741717e29f22a02ed3181b5619a3ddfe6e2047b16f928ab69b1b4295";
   hasRunfiles = true;
   version = "5.1";
 };
 "texlive-common" = {
-  revision = 50466;
+  revision = 58055;
   stripPrefix = 0;
-  sha512.run = "a2d1330cf12d9c7d78350384e69163f3c97c2d7ffe923a0819f487cf5b1f610b50ed2835f658f4a6c6e7df6b9d95bebed24073cb03f4213bd1a430e48716a702";
-  sha512.doc = "9fa949114a490a7cfcd7c0083ea7fe797bafe4ae4b61f1b689e9950afafe8a8367f87a5e371aea6b669c90b3a6b31df00a0700e3bc0a96fd2b71c373f2a24a6a";
+  sha512.run = "c6118e4fc9264f731fd05c59d2b593f05244e247cd177f5e30f32bc9bc57b680317ec6e74b6cdad8053711522dac3a6a4fa26878de68bcc3279e1acae4a21883";
+  sha512.doc = "b137633217b0ebf37f97c96f589534fc9755d266a1f7fa5f2c11e4f1da2fb607eb4970769c19893e0def1a6a2e19b9a3c05daafabac8171b200aea733429a924";
 };
 "texlive-cz" = {
-  revision = 50778;
+  revision = 54496;
   stripPrefix = 0;
-  sha512.run = "2c65a9915e58f81a298389fda9dbfe5c6d0a0fbb91db2da4d970f084f568da8dbd20e61576c2af05c74c4c2876835f8159d6dc3a250038dd64b433e4cc305a37";
-  sha512.doc = "8527c18ca429a877e747f66d68e3c6ff1992c42af0ce8e65d15a89743b689062e5d825578fb5896d5fb978251726cb2623d49207cb8126258bb6f419b36d09ec";
+  sha512.run = "d4332dc9fe838cc3dd6bf28bbde16f0f41b6f7f75877c358fadae2584cbd1d1fc4fe810569ac5c26dde3eba1fd26447eb6928fc8533a1c4304309a83b734131d";
+  sha512.doc = "ecfc4149bddfb665c6f48e65b719cc3d2240d0be151bec94676a188da08a203e84443b4c8e77590476c3194fae55ea23753a248c6f60ddd0b27895dea703a219";
 };
 "texlive-de" = {
-  revision = 50617;
+  revision = 58648;
   stripPrefix = 0;
-  sha512.run = "89b6004f34abdd998257c723613ac09a1ff761bc2eb1dd441b21c6e25958874bc388e0fb4256410661f53d2145f3ccabeadc9ec1341af834b719913dbc6b59a0";
-  sha512.doc = "c13300d4bfa0a9d97c5b01b82634c854dbf9c4239d9ad320470c8d16eff439b1996ff0d51a72baa5c3080ea027105521bd165198c8fe58f06fe785d130603916";
+  sha512.run = "eb70ac7400ce4cbc18d3ddf2c37dffa175d0af2a8eb36bfa17b9868e606d1be7b1994496143e1a1444d17f2e2ac1c20cade92485cb846aa16a52974dd9692a6e";
+  sha512.doc = "d51df93981312475c5c4b4976e4de00441d6ed4ea9e51d30d5c8360e314417f9b33c5804acae3c6d50c714bc76966120de37095b3ef33c78c06744ca17e3855e";
 };
 "texlive-docindex" = {
-  revision = 53970;
-  sha512.run = "39f3359e2a2149cf6d34066a6f727b0bdb56675635d1ec44fcdb910afc0cf8ccafb62b42f3d85bdb51319de97aaba5f0ba6c770c83ef81e634f309ee1fefddec";
-  sha512.doc = "e01e11202d021f7f3a12701495fe2e697a97da27adb06654dd5afc72cb217d8e86ee3e3b269c28efd6e2b7464a392903cc1794680299902c09aff5f418ff30f6";
+  revision = 58780;
+  sha512.run = "817744e5fafb65fab41232df0a2648c0b8962d8e7d5ec997fe349b806479eb93cef89d9c8f713da58ad028fe493b04a446c3438a819f849c73c01dcb42fac6b0";
+  sha512.doc = "27c5144b49bae0a71ce33ae1aad7221a3ce8e0c1a338df5d47100d7a7b0f67ff1c173b98ceae89a0352ad84058f4771cef32aaa9c1713f989b3aff4c2fc168de";
 };
 "texlive-en" = {
-  revision = 53451;
+  revision = 58572;
   stripPrefix = 0;
-  sha512.run = "d9fbb8bce4b7a4e3f661a18608addbfa88ccc0ee73d6186fdc56baaedd21c0163f053961b19f3211761a0390d44e2f524c07c4c25e81a33cef0fde045f5a0c64";
-  sha512.doc = "c25b29907122f731a5980e3ca15ddf31c4e4866354f833a915734868132a8e46c9485a67750adacabdf86b724d8508c0cd6009835af89846b929f03d023c76f5";
+  sha512.run = "e154b4236933f7f11f6a47d2dd06916ca363d3a49ddba6f93cf330e4a159c7dcba7a98fd331a1e294b89f4cd241eca7c2170f2db3e3efaa08015d440e03c497d";
+  sha512.doc = "0e1d621ee17672a2ddc99502224c578297dc80a67361f7ae859d5b0703fe0c16547ac30a58c6ce83b374dd0d783f37d9f499a7da11945d9e347ba68fa5171584";
 };
 "texlive-es" = {
-  revision = 50671;
+  revision = 58221;
   stripPrefix = 0;
-  sha512.run = "ecd29f0b62735145f57e48c74c07f1b7188a3e4aea26d82dad7e136e2276e2697381bae0afacd7b2083d796c213e72141893fc186b84e9b6caf4ed19513d9a29";
-  sha512.doc = "32c4b3fad90a989e2b94f4fe63b8869721c36aa90df3a815177dbae38c8fc90bc420f197810266ee1350e2580428b8444ef73c5436041eab8bb46704bccc4fba";
+  sha512.run = "899baa7c3fc2ac174fca5e06ed37306d00d95683e75a2529ec657b9fa23ee3ca9e101679c5646fc1182762cef65ee6ab445fb0e12d543428a1facd5b708bb039";
+  sha512.doc = "2c4fd6aae61efa3c9f2c51590bc2d86c391c11cbf2844d1f6c36fb69cea46c1bccb82d861a157ea50973cba7107fc6bb44b3035b98e2703a601c4ec84e280e19";
 };
 "texlive-fr" = {
-  revision = 50567;
+  revision = 58579;
   stripPrefix = 0;
-  sha512.run = "fa1830c0a7337f5629eff5f380f877307304f1986a3d9f63c43b0ef88960354c2737278e0e123523eb0d2c2957ec41ace896cefd096f4b2982b7086daf7f3ebb";
-  sha512.doc = "bee228b706954bcdc1ea424d0227890bda2115abf47b73687a0f486b7daf68476bfd7a649f457b22b62e55936b1a113a685451095d1f23268e0d094dec902b7a";
+  sha512.run = "17fe7383de6528d9f57b98694a8635aa77886e1b8c51c673ee24ccbcc9bd4dfbb59146f6693f126e5bd23acbfd112a771b948897529c2856505f6f84f3b1e6ce";
+  sha512.doc = "f74e92d2a5509da3d74435a86cedac62659d15f49cc5f29464586f70013dfe31585cbfda34ccd1a33e71945cdbc43461a24c578953022af3ebb2b41aaa15082d";
 };
 "texlive-it" = {
-  revision = 50750;
+  revision = 58653;
   stripPrefix = 0;
-  sha512.run = "be04ef3a7fabeeb9d6a05210e5939d61e0a364cbe97e461476db186c71ecfa2754af159ced3fad5fddff081e6bf5541bf60ed053cb8cb0e2de8813944e775009";
-  sha512.doc = "a3381b82bfa78453c6014849e8ea8dc2ee881088450824e62bc056f0303227fb7eb5276f594436c6ac113292ee52672dd3e7b9e6007bdc22dc331b63330fca81";
+  sha512.run = "22874afcd046572176439818fd3a1c2200d00c0e184adc4fcbfa90b2ecc88dac7f5b28eb95c74bd546fd7472fcfdb2c5b74e5b1b5d08ffe4d4a5aa5f924da698";
+  sha512.doc = "0c0d3585bb2c12476751bc5dafb5ea5e10dcaf5149b98e823e607d7a99e5bd9dfd698d73950ecb1efe353435ba2f88be2c45e18c6cde2245df90cebfdbad4417";
 };
 "texlive-ja" = {
-  revision = 51990;
+  revision = 58581;
   stripPrefix = 0;
-  sha512.run = "279c986e659a0ff33b4522057c90312f2376552b22bd3229cfeed2e87a0644410ad798a8bbda079253df16a3156e3dae9c20abc6132e49023e17e9e234820043";
-  sha512.doc = "fd26ed74bb6a85f9aaa1907d89b3c2e6624325e36652a3e3c7a540181efa36f2b44322aac55190085c47d48176b0d04e6c58ef9fb633057954eaa6fd408998f9";
+  sha512.run = "d1d9ac0e82802d1021d7644b83f81395e9cecbfabcd4bf8b37c77d108b5a1b9ae10fb4bef628adffaefef34279b521b1b883c4bb98e657bcddc6d7326fe4ee7b";
+  sha512.doc = "1445ec4257d202f77452df48e70105e423e048ae9150ad70acbcfea350f8b8686ca395e9452d40eedbd6824df7a2d8560c5c761fc867cdda0d2ba9182eba5f16";
 };
 "texlive-msg-translations" = {
-  revision = 53947;
-  sha512.run = "f866a0afecb5c3a0767fdb50ab62d3bc196895b6dd6f9840612e28f0b6090c41ba00ae87b4e6a854bb3f6e66e6888856742c7737c07b5723aee2241022538a22";
+  revision = 58781;
+  sha512.run = "6a6b677189e276e62e37b904563924821b9f85eb2faeafae9b3399f68387a999ef3998238d90b025afe0d7f4f31f45bb1e50435aab7740f737cce01cd8553aa1";
   hasRunfiles = true;
 };
 "texlive-pl" = {
-  revision = 50665;
+  revision = 58649;
   stripPrefix = 0;
-  sha512.run = "57dc3f82b08ddb2a9f6e168ba7cee0870e558d796bd6acb8669207cc14aa327a531f6731d312fabd1761444f9d49da4f2b8a1424c603735468e76ae868813208";
-  sha512.doc = "1e00df1860220e5627a913f2504e125165ec2743f5b461497e77636e46b069ba2e790de2c01317f7698212d2862e0aaf5cdbed40eaca40618d97e56436b93adc";
+  sha512.run = "d2d548ea077b26ebcff1e75070b3638c3b2e0210c8bb9869706adbe8e321e3db4fe1429af06a070c7dd586baf652372cf019416807ae90808d36169848ab4349";
+  sha512.doc = "c373d58f0a5d958e81ad2f968585711d74b513693d2e7125422abba3bc26957aa0eea3bfa81c46bce839358db1978da5bfc7de9f38bd847c0e3a9ff4fdf7c3b1";
 };
 "texlive-ru" = {
-  revision = 50683;
+  revision = 58426;
   stripPrefix = 0;
-  sha512.run = "53b6b2cdfc0357f7614cdb9ac5f4f26dd51288acf093e3bf644b0b259c61b9765775bd90956b645e2a915cd64b4d4470679e3725dc8f1dd044f2280e04677c5d";
-  sha512.doc = "b5d982cfe9cbb9022b0d35cf583a90148c0add4f898dc86f732f305cd9adf704902851366722d2624f0ceac66d00aab177663160d5ef624331f83d6a717c3505";
+  sha512.run = "7658ab0d98a505eda9a86e9ecd64b0e35d9cd332b03066b46825c2a6252b9aa8edb24eb4af2bfc267127b349f741709ada836104dbfc2becadfd97d22e737365";
+  sha512.doc = "40e8b29f29ed61addc2b9e7ce4b73d12bf2e59f1c50c65e59e9c8cac5e6c3ef264ce2071b0d54e15f5029c101a51d0efcda0144e113aaedc714eb1300aa9635d";
 };
 "texlive-scripts" = {
-  revision = 53977;
-  sha512.run = "7e10b1796d11a58ccbedbf5f89bed570207306f2ee196680ed7c5f784aa8c1607e7ea26086812212e5fee8885fa48ae6e1856c3a147333f60224f2da53469014";
-  sha512.doc = "bf95f1b8895f9c7bd53c09072bd8ff77af7d357d52fb4d9bf7e9a1390c647cafa57c3c0c6694e8fa8a7e03d9ad301df7f52a07be4d79a00592b020919b76be12";
+  revision = 58791;
+  sha512.run = "c0f8f816ca1d149bdd493a7275f8de532e5a8d6f8b4603e7740c5510db4eb5cfb3e6d3838bc496aa9f8f1176ef9c1a7b1beb17edfce5c0a7cb9b4b684d2bc0c8";
+  sha512.doc = "9409e9d7170ad1a9c8cee2f65a31f538c81d4a2945c91978ed5a6bca32d1b9d2033ce6a3f7ba999ba8e78f4bae370cae76235b99e898c64bb104d8290c63c9ab";
   hasRunfiles = true;
 };
 "texlive-scripts-extra" = {
-  revision = 53569;
-  sha512.run = "a2f8e7888873d4f129cd83060ed0a9e65824c76870b238ebaa9b630aa00a51fdd479e182fdd4f9bfbeaf1113db5bb06d08baa2133544acaa368fbb690cec900a";
-  sha512.doc = "15a2e6a5be58cd74f8b8d906153b6d34f54e7a2eb1e3914016ca515bd43a67c021955660ef1c31b013dcc5ba91fd0015bebbaeaaee6916cdb75b6f55bc9152ac";
+  revision = 54744;
+  sha512.run = "e46691aa10b961d2359359fdf00ebc86a1b881b3d1126c52f3863343d21eba00110cd9500fb03a4a9544a3d8fb443bbdc90aa2f6216b8e62a3edb0acc58e4c75";
+  sha512.doc = "56f9be73e3318ea684c536b90645b572caf437b16339104bcedfb7517c94745a514a8e185033c2338aeccae868a123a5a137b9b07b20d661fa473bde2c28797b";
   hasRunfiles = true;
 };
 "texlive-sr" = {
-  revision = 52494;
+  revision = 54594;
   stripPrefix = 0;
-  sha512.run = "95d30458e64f61c89b015eea0dd8fec741ff3cdd4360bdbb65f0c8c8346b11a0c61d2b98fcc63ea62d621389411d257da4da0126a40dd9880ad557407fecdc25";
-  sha512.doc = "6965ea95aaedf7ed6c5cf55aa0524bb2ddaccb218c630c600e7942ac3f5a3609e1744e4a0e31e7e875550f436d5cde57f5953dacedda861f88543c915866bfea";
+  sha512.run = "de99d6d13c6b68f8327c0b72dd3ab8aef92d07085f3eb59d94aaf8901d11d542c0795a33cb2bff1ff0dfb1acc99e43fc767150956abd873536a7d4e3b8f031f7";
+  sha512.doc = "4e07f6f015a023af113822e409e03405f49b9786f854308c14f2060cac75d8420ddab090696044860be75f1337b6d3b6e7a45fc0d56969b0894efce3a8c60ae7";
 };
 "texlive-zh-cn" = {
-  revision = 50478;
+  revision = 54490;
   stripPrefix = 0;
-  sha512.run = "86d70c96c3fd13095d664a9f719613dfcc6295803f9058341fd915d6cac240ca11d64e939395dcfc0ff84eff1bcdc2425971ee0c90f7fc45cc86be737e30b772";
-  sha512.doc = "9567c16b972e2bae6f02356203cf68cf4390434e3da4f8a1cdfe8b902483fa33289c761bb00de345ff038e98054fef5994a980daaf0bb75aabf62be2bc1bdf75";
+  sha512.run = "1a7e43528c2dac5c623943b1b268b99f0db6a4876f50c5386a8ea160b8b5e066604d34c0a53cee25cc3f839eb7f4be177e3d98ed51c83c77df6293c77a02e0ab";
+  sha512.doc = "534c505455c5f9c73803c140a340df2882a97516e15f52c5b65695b7c626404336a0e4f6190155b5bda1b9a86d7f4d44ac294bccec791ec6701e56d13c00d71d";
 };
 "texliveonfly" = {
-  revision = 26313;
-  sha512.run = "e02a1214775f209c0698e62fb7f0ae91c9ad14024c076dd6a5ca73fad4c92ebbf9bbb0f281869cb0c073538c66edae2af23245f1bd0e1f939c80841269625af6";
-  sha512.doc = "f89f82a59f726b226101275b1aeaec00b99ea1302ee5ff8c021e4696b4abad39d1a95b544a4bc45483440591e1266cfba4d5c3c3bbc769f193671a46aa7458b2";
+  revision = 55777;
+  sha512.run = "63353a768b700ea11982e9552046dfd1dc3d844883f03099833cabe2af5ccddecebd7ef737fbcd256c90304174165a4d283d4912f8311508e61c723d751619a7";
+  sha512.doc = "46d57a6ebd68a56d55ccddc68006693fcbad8ed8f809243a3ffac7adb82da58cbc28239b57556d5d8d6388ea034b6571557588ff9365d4891145d5cc3fabfaea";
   hasRunfiles = true;
 };
 "texloganalyser" = {
-  revision = 35584;
-  sha512.run = "cbc18031b9b9ecfb6088b82b99eb72ad70fce92e4b103230a06ffeda0a50871715405a0aad18a7495ba1b80f16913cbadc4b8d1a7d2ebaa77d5cbd00e1682c93";
-  sha512.doc = "1cccf82314d9afc841044aabbb5f06933f6bbdfcdb46c22909ce18c2736d40c532944405232633f61893f0f56de24233d520edd64d4cc89baeca5c01ffd0f9ea";
+  revision = 54526;
+  sha512.run = "85f491af4a3867283d56bc2d98ebcf491e622008b3a70bb2cae03b9deb38170e1c73088d109445fac11fcce6e10aac57f42f03066580a79c978dd19af1f74caa";
+  sha512.doc = "8eb890f880dc56d37e29e2f0bb3228e36031d45010677097136d40959ba7ec0cdd10b5056169325f481318f137a9de2f180438f1716bfa12705fcf0db315e3cb";
   hasRunfiles = true;
-  version = "0.9";
+  version = "0.11";
 };
 "texlogos" = {
   revision = 19083;
@@ -31051,6 +32820,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.2.0";
 };
+"texnegar" = {
+  revision = 57692;
+  stripPrefix = 0;
+  sha512.run = "09e4b3753d99fb4f99c150da87f5602dad5a28778f9489e67f6e4e45d5f9dbdf0edac43826c1a162280e9399d28d050b5ff230713b2e45cc2804f21a76dba0f6";
+  sha512.doc = "403e75ef47ffc6da77e4d61dcc95419932d2b62ebb0c107cf612a195b0e2a24862139a518ead801ee15f56546c44bf9cf0e56aad7b4d8a7ede8529063aa745d1";
+  sha512.source = "9785ac1b0a7ce4f33458bfb3acc203098c8985d6381eec5c610de16b22e2e60ecb386bb5b98da0f9f082b901b9dee096135c5c2a38d5233e92fb09413de214f9";
+  hasRunfiles = true;
+  version = "0.1e";
+};
 "texonly" = {
   revision = 50985;
   stripPrefix = 0;
@@ -31067,12 +32845,12 @@ tl: { # no indentation
   version = "1.7";
 };
 "texplate" = {
-  revision = 53637;
-  sha512.run = "8c9ff524bbc1c4a9a89d4da0329c560cb4a2916e87fb5dad8ffb8a288bce1c0e0eb4321834a34e4aafd68c3b8a8fc0ba44018b80fcc054e965869cad120bde4a";
-  sha512.doc = "0bce839225eb4d2bf8b763510ee89ca3133fef4a4d1ed7ca4a8257d00c64d1b188c3093a0d11c319450a219c220d44edc93ab66a4cca739477c42bd526c54ae8";
-  sha512.source = "599a199747dab1cf39f7e9c2141b38136085009b04578e65a5ce332ee3ecdfeac0999b721fca5f9d7335fc6fdee0a09bf1e078f140dcd4cd74f4a69fdebedf57";
+  revision = 56083;
+  sha512.run = "dc7f998438ad699af41d1a83214ba5b62399c5390ad1672b40ecaf9bc48fd04ca91bf4ceb1bf75c89351d612d8c9f0acd3bd145b5560673bb864fdb4c18375f2";
+  sha512.doc = "620f820e08f000032608280ad4e93d5aabbcf6e42008c1f74d2b876d5fd67724ca1d6ce22d6046184cd4e0ec205f4aad767a24db79d11e6c40269df32b5644b6";
+  sha512.source = "e87854021487832cecab1cb8a5585d44c25a80c52ed4d020cebaae9b7c1c938c3ffd43ed51a1910442440131e4d8f6acf2af095b58d2a119ea279e3de78736b6";
   hasRunfiles = true;
-  version = "1.0.2";
+  version = "1.0.3";
 };
 "texpower" = {
   revision = 29349;
@@ -31092,21 +32870,22 @@ tl: { # no indentation
   version = "1.4";
 };
 "texshade" = {
-  revision = 46559;
+  revision = 58789;
   stripPrefix = 0;
-  sha512.run = "785bba8f83063d37f2473759eb1ada73b31098ba757ce65ca1b7ac811581a64c706f2916eaa1237f6c6ee39dfa3514616d5b8789b9b8e2418c02ddd88e77e428";
-  sha512.doc = "e08cefab84354056854fa00b15efe8ba99e2e8f4ae6721afd03ecee5fad7b227674ca456de11b0607b1b34a2378ce41e11c517b0b0a544c12278bc3b9f0c4de4";
-  sha512.source = "3ade54e59a3342a60ae75a3b4b1068d646bab1d9dc58b29cfb3ea55471038061af7a2581b5a125b14d767ca659a336ac09dd2ec8360c3e54889a69529d62335e";
+  sha512.run = "e42833c13430228e775bc1a0310d47f72044ef5ba6bfb71a011acb0247506f372619639e0bd51d3f9b629d382175a4d59fe6d400ffa55124c60a2ef8206f7459";
+  sha512.doc = "a0b6a162432841cceb5a344250335d630222129a1e47dde01ad4df4fd38c4b147a138c9344d7e95153e01047fad7624e9c05022bc0f4601f800ee1f8f7953bb9";
+  sha512.source = "f37d1837938ee3cd2451f4a797bcb1dfd933cfaaea53a58a52503bb9cf2288e5ec53c977b6f54382fbba398b9ddfe9bdb6226db75e0bafe19eeb8e916d7a8e3c";
   hasRunfiles = true;
-  version = "1.25";
+  version = "1.26";
 };
 "texsis" = {
   revision = 45678;
-  deps."tex" = tl."tex";
   deps."cm" = tl."cm";
   deps."hyphen-base" = tl."hyphen-base";
   deps."knuth-lib" = tl."knuth-lib";
   deps."plain" = tl."plain";
+  deps."tex" = tl."tex";
+  hasFormats = true;
   sha512.run = "7309726b33eadf8290e596aab50bb1af95600a067338b352c1ac092643a8c6d4142180d0146abbbb828a38fb08fdd9ae03da6572e6c221afcd151a51430a423e";
   sha512.doc = "2a4979a10514ccd589b331ff34a677a4e22adbeea73d6112c9a14392b3ee75a8cdb292b008b160792b3d00b812834afa7e0211db860c41f1beb69bbc900fdb90";
   hasRunfiles = true;
@@ -31176,13 +32955,13 @@ tl: { # no indentation
   version = "1.6";
 };
 "textpos" = {
-  revision = 50988;
+  revision = 56441;
   stripPrefix = 0;
-  sha512.run = "430c373d2c228615ecc9c46c10a99ce5394ff0497e9a375eec3c4e409452e006979501f7d18c5f603055c9ddb57b7c0687cf0a9273761d23aec75ed64c032200";
-  sha512.doc = "5fdd14982f8b783f6b42197fb483eebb62f40c7e6f80648cfe7b7a356ae3fd243b4133a050cd84d2c8893460c15e717a21a70a5e1e0e31d52275f4a206956eb9";
-  sha512.source = "c4afcb5134b7618a9397f40e6e633d126f2803e15783b9ce6a26c82fb21d0ad226d65fa9e90e60ca5a1ccbaaa3a436712ee15d8fd13a6acc5cae7af8150da6cc";
+  sha512.run = "b7213e61a54addaafac6bf831273a000bf300939d74311e25a1412744e2baabcc35594b084a9ccb6eb5e8b91b105e0acf97686323f89f0623a8ee9749e33bbf9";
+  sha512.doc = "45d9b91df10531c4fa45d9eb668613417baf132f3153ef6fa4de27292730580c46eaf722e6998f9d8129e37db3f5f8828bd70eefd9a74e88571290f95b04eef7";
+  sha512.source = "6f917452d588253acf6576a4603b6e4513c9c5b951e2440879d4a68e6d413b9ebeaeac92b0b03636d094f7758400694481bd52a68cfd5fb92431809eb4271eaf";
   hasRunfiles = true;
-  version = "1.9.1";
+  version = "1.10";
 };
 "textualicomma" = {
   revision = 48474;
@@ -31203,14 +32982,14 @@ tl: { # no indentation
   version = "1.1";
 };
 "texware" = {
-  revision = 50602;
-  sha512.run = "cc66e87d459fb04070b0c43c16f3412ea22e3cf8a2748efb8a87fb0417bf0b9caa32a38147a9dd068d7ad0d25e320dc78ac54d9004cf5adef337ed0a90e52923";
-  sha512.doc = "a8ef6e6a062140ca6ab3311b7e57f452bbbb0eddebe36d02cd8122141320814508438d764a97d351febf9f65a5539b03774f611e9bfdcb5abdc5fa989fc5a848";
+  revision = 57972;
+  sha512.run = "981a66b9f52d53ca1b9a5059d5cacdb325663a5eaf6ea5c15902e687bcfee894005b274064f662252a0689222c62937c2841ee2aef5e38cfd88f2169f7b01893";
+  sha512.doc = "3ddb71949ce4c8dd406f65e547a5099851c9b8ba00aec1fa65ca3f40093c49d34ea13955e3970683d1937569d0dbd3d6abca65fef8bf15f255063703262421ca";
 };
 "texworks" = {
-  revision = 52616;
-  sha512.run = "61a41a470a22bdcd70ed769385accc0135b7fe68b96b430ddcfdfc8e444ecd696c66167e2b44201809cc95b6369a925d32874dd40d878f62a6b7730852fae1e9";
-  sha512.doc = "d2ea2fa3447a4da66ad2617b20f853be8c1bc8aba163ef995ce0e516d9c249990113e0ba2f13ee6f1d51ba3a3e6b5c3745f68157399b9c1c6d4aae8b93134eb5";
+  revision = 54074;
+  sha512.run = "4867a2f6ca333fc42d774154179f438970d392857b0f631f58211b7174c4b56c7fe9c43cac534cac1828d3edf18069fa781d4760ca472a99b5abfe4c7a6f72c9";
+  sha512.doc = "554afc96a17b407e415d85138e4074b6f1f82ab8e918db6e4d2e2dfa44e67b0d10ac1b548ceffeadc245de28b564cc4c4c431ec9d9c92241d1f500477fc72a64";
 };
 "tfrupee" = {
   revision = 20770;
@@ -31230,13 +33009,13 @@ tl: { # no indentation
   version = "0.2";
 };
 "thaispec" = {
-  revision = 51598;
+  revision = 58019;
   stripPrefix = 0;
-  sha512.run = "16a7b186e026474f659ceade9d18f339fd597857897354c40208efaaa5caeb29be4c4c8b68aed2edc8ca8b4b6ef5e66ab511ebc943928b6ea51fe796e9956df0";
-  sha512.doc = "e3bedf4c192c9505fe8569195e3be10643d236d826eac14878e46b62133a09029ad5625f988e6b22009cfdc3a26550f155b8d09eb8476e84ca561bb6f470bfeb";
-  sha512.source = "5e5e404acaf32626a7d06342326733145d331a1259c25e956bfb469be6e4f528184247d32726c378fa11908e0f69e006e2251d20879b86b714f0c24a54f53617";
+  sha512.run = "02434f56fcc8ab499b4f80439fe9099d5dedef00d6dd295dfc47644a7b1397486a419e1ae2b89a0aefd9cb3a093974158a72a2eb2921d25df3231a7628897968";
+  sha512.doc = "26b88ea1b87d8391b8864011449116df3fccbbb978aa76e6cc51dfa893eac87851ee10b1320350de57103b80c6bfb30ca97dd1cdf13014157ea35eaff780843b";
+  sha512.source = "e79096902654f302311ab531f8ead3ab9852323ed774fd217aff94c0e1ce456c01a5d8a28854b7c5d65d0274318a22cacd4dc04a00498eaacd92f538f20f6013";
   hasRunfiles = true;
-  version = "0.4";
+  version = "2021.03.01";
 };
 "thalie" = {
   revision = 51789;
@@ -31248,24 +33027,24 @@ tl: { # no indentation
   version = "0.10b";
 };
 "theanodidot" = {
-  revision = 51695;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "f89e4fc9a726b87568eb5771e0f3a4c29f23198eece256fffd85aa3f7d8f359fc9446e24cb5945b3297d373a84ec11e6b0322e378fa6bb979bdf980e91e5ce82";
-  sha512.doc = "82ced7608403dadc3d5be699acec21bdd7b9fd44c68db769f6060beb26b7a448bde9ec43060e95ee6699735c4c347ade0b2a1267f944c2b168363172c3c0b979";
+  sha512.run = "daeb092b73d0a9aac15c917aa72bee060fdf879aae0c2df9b391822f765983f0c048b1a15643a3aa7075e3c5a51eeabdb06ebf3b568930d7edb8e64bbf8f473c";
+  sha512.doc = "77c32df3bf56f8d38f27823eca098c968b203fb1ca2e4682f76a4071821952631b0187893f4636879808903e262bd2b01b53a50b517cc7098011d9f0262739d0";
   hasRunfiles = true;
 };
 "theanomodern" = {
-  revision = 51759;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "cee56b45fe0b06c36fc4a11dda204117d20a5ade50b5d706aec08c4bc66ac9d801cb3c885b8f18b54db7a0152c3924cb844a0101c71a11c81d6ccd32d18518da";
-  sha512.doc = "d7c6258b4e025111f8c8e29332b8325128fcbe095d9e8e3975227c86e171cd12a73319cfd341030f06f901d005815bba3c7643063a257dea006a159ccace5355";
+  sha512.run = "a306f5b0145c1304157403de3a1ba0e0c350b1cb2bf467c5fbc5a0f4427622029c1c37b6b139f4e0fcdd145f30a979fe821353eb0782a0fdbaac6d614d041b78";
+  sha512.doc = "c2181c14b43a5a9670ed13e9f2828c4effabaf06a9377789c3510072c779251e3d857bbbc5655bd0285cd7f05b23c0a669292f4ef5667dfb35ae89ea70cd838a";
   hasRunfiles = true;
 };
 "theanooldstyle" = {
-  revision = 51767;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "41763eb636491cbd5d7f712b91d3ab6189a87d6fca61efb0b552f5c57eaf25a830763ef83d9b093b2eb5a31f45f91ecb8eef870a7aec0e0084dd685a55088498";
-  sha512.doc = "3e9dfe575f249cacc577763f7b7aa2bc128659bdd19b0ab97b7c9a43a6b5938d7067e657c9a469d4b163faa75f1373a21f5e0825e345d342af037713d595713b";
+  sha512.run = "b8890a2f8af2700c042d1953fbf8c8cf0d499d7458985476bba4a1ad83c9b4c6ec9f8d6f30986b57ca532b0b41208ce07d4d76687f52fa8863da75cc39f24d24";
+  sha512.doc = "ceb00e62d2e9adeab0244ba58b052fcc0a068f7afd8e3936767909b8377da11c8178eaa9015d1d84dd95cc4b5c63c01654e032855b707c03197b63c9e2097d55";
   hasRunfiles = true;
 };
 "theatre" = {
@@ -31276,28 +33055,28 @@ tl: { # no indentation
   version = "0.1";
 };
 "theoremref" = {
-  revision = 30640;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "ec3f8bea432fc0a72d008884e8879bf22db5c2be3694d298828a493e1b4cde2dd591f35887e4aba646f44db47a75f87a08ec7e269cec77be66cb45798137c85a";
-  sha512.doc = "ec478b840b200dd0e731545f039c8ac01d9f088b7644350cc3366aece722b924187ca0701ad15be3a428131bc3025d1af9bb0440e8a487e0272c8d7997924200";
+  sha512.run = "ed6990b6c7a9ec4e72770252bcd07ad5ddf4015cde0129dc0a89cb95bc96958963209fe46f0ba9a614ebc0cdb358d8125ee3eb22b9a4249367d975ec12250a3e";
+  sha512.doc = "022ef42c6765c661f5828a8adcad7710d74f168b3a2dfad0e73218d1a5295b25ea24d5fa010a01151939e87989cfd6457917167e69cebf5ee5a364347eea5f2f";
   hasRunfiles = true;
 };
 "thesis-ekf" = {
-  revision = 53685;
+  revision = 57207;
   stripPrefix = 0;
-  sha512.run = "2cf781811d1a58885b4f9703d0541da7d629c4f1fdc6fc0c519f266d95fdfdfd7c5dbf5bbb92aed80269292cf7bfed016433a9e75d13836b27a63616bf745ddc";
-  sha512.doc = "9215773df9ce87c5c397f87d1bb53f44177c301b00a220651c24a7e65c2b4a0ac82b8441d877b51cfa71d264a385a566714bdb8671dc1475411057e80ad0544d";
-  sha512.source = "026e80e3fe4ba2511fb9f25f95dddd66a4dd241ec8237badcf8564e4704f9abedbe01c3563c6d696ca5dcbcf9ce27087cc8fe99c063b998df2c694aaa5c164c0";
+  sha512.run = "34f9f72bd8ef813c0ef6a01956304ef99f8a0fecf17786f9aa51fc6aac4655f5a76aa030509379699f6dcbe6a7245cd1d01f2fd0df8fd3bc77e5f8ddaa0ffb8c";
+  sha512.doc = "48989f4df56a2820c048651831b598fd3c956ffb2733a9d3e8a68891e7c410a72425ba3a32a4a0ecd6f7640f7054d85016c7c9dd129ad59849588cdc09547548";
+  sha512.source = "45c2329fa7994a119e1c8c2d3e777b4ab1083496c538edcda3382d2321a4b7cea97daddde8efd75bad12b79d95d635f45bd79f1db682a384ef320d4b000c1ec1";
   hasRunfiles = true;
-  version = "3.3";
+  version = "4.1";
 };
 "thesis-gwu" = {
-  revision = 48537;
+  revision = 54287;
   stripPrefix = 0;
-  sha512.run = "f5f54b6ba4d95422d3b5e219a8319375f543939b0a4fff260616048faee47203497cff1eadf8603f03ad54f7f93bfd524fc3f2efa108bcf36c34a38f468b85cf";
-  sha512.doc = "88928ac624aa85413652ae32170854cce4c0519858b5e35752fa06bc4e7130ac031eade4127704edadf69a1fc5fa0e3357af1a0350af83decde430e606c0ff4b";
+  sha512.run = "7001a1f11d069fd15894b34a2d220394924802c3ef1a37869e0d717bdb650bb53c01078dc14760f7887addece64bfb0f6662741bfb6dc4dd77d2ff1f3d0d7415";
+  sha512.doc = "e53925a31286089cb5e8f051cdf969c6bbf29db0ae2629c1a584ead2885cc0e1f95c5b2cd9583056c8ab40b1c41d4f8203b876a1e6365d8967e3942440e04e2e";
   hasRunfiles = true;
-  version = "1.6.1";
+  version = "1.7.0";
 };
 "thesis-qom" = {
   revision = 49124;
@@ -31333,13 +33112,13 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "thmtools" = {
-  revision = 53219;
+  revision = 56070;
   stripPrefix = 0;
-  sha512.run = "1530f49499593262aaa24714bb4f9801876f9903b4c8f664deae0ee65e9384d52a050c5352ebd2cf158342752191e15deec4b7f5d2cc880a39012720963cc723";
-  sha512.doc = "9331df3428012c486ddff27810248f83fb607a780509691d82b7f732269654d848441d2982cc8609f5804a3b73eeca5184cdecae90e3a337945357bbe660c685";
-  sha512.source = "9d08c2249ee3d9e6d243b22a52a1dbf8fe834ca322be31c7bdb12def50da3e851476070aa4ad7b9ce20246d86f3ac94146099553696ff4a7f2ccbc071d216074";
+  sha512.run = "e7b4a7b97e7ace18e6d02d63d1e6014d0f702dfeca27f6e921a70a7c34797104c6bc26ca3717fe8237923f1c66fbb010b9e76a192d49f1600fd3362badb6261a";
+  sha512.doc = "602711e37b3ff9a46c0e19cd99b1d4e3b40406192fef9746bca7d667273907c1f9aceb97078bb877ba52dc75dcd8cf13cfd31de3c184e2ea7760b9a721cf991a";
+  sha512.source = "58cc1f1259bcaaad68cd0316bf786822ca34325e965a5a0cb2c825b841ef327bc4c31e20e9c6bf3bc183d06cbca565cdb2c99e1fc8d1bd4c9625b265d97fcad8";
   hasRunfiles = true;
-  version = "68";
+  version = "72";
 };
 "threadcol" = {
   revision = 28754;
@@ -31382,13 +33161,13 @@ tl: { # no indentation
   version = "1.2";
 };
 "thucoursework" = {
-  revision = 53891;
+  revision = 56435;
   stripPrefix = 0;
-  sha512.run = "8329369e1850003a66a386a82746c36e62d43ae752844434c83e88a56c7914a5919c137899562b566863e05b15f272dde691cc0dcbbe64df863ec68e59fedc64";
-  sha512.doc = "bd28776cba58bcceaf668ede00c2c07eaca6b522a6bf59058c74554f6f17d5be1e66124a612bbe72929c90850359cf5fa632a2ad664e4d20d041671fcf8cca03";
-  sha512.source = "8720d8a0bd4d9031431658f81d8b46dd074dd42cde74a3b03cf23a7cee8b245d281fae1a7a5062e79efd4f5388056c411922a85961bd6c4df0fd5a02545c0829";
+  sha512.run = "6342b407dac5780e1e35f114978ed4466c547a49b1099ecec8cc6169817d3c1405be0edf5f7cd3d82e5d44f9a7e9d1ca762e82970898e92cc7ef06739eeb65ca";
+  sha512.doc = "565d7846b45c8c0bece73da1010f835d5d54f9244648d61747c9fce7a8bc2559a3e53a2327e146f559a6df2809250d7057befbb6dcb9dd2026c76f1d1dd16fa4";
+  sha512.source = "34da6d4ae8ad815881fc2f8b7df70889ff99adb3ebea2598e0502725b229cb5a5afea11847c8a1c5d56fd528603dc8aaf43c460394ab301dfae1abe6880f8616";
   hasRunfiles = true;
-  version = "2.5.1";
+  version = "2.6";
 };
 "thumb" = {
   revision = 16549;
@@ -31424,13 +33203,13 @@ tl: { # no indentation
   version = "0.1";
 };
 "thuthesis" = {
-  revision = 53892;
+  revision = 58750;
   stripPrefix = 0;
-  sha512.run = "f5cc372f4ac691ac96e3b3d2378c6299005aa8d04ec86cf3813c583c1516e99ca41a608bf81507bf637e268bed0544d9bbed8999e941532ce78473e1a29b80e5";
-  sha512.doc = "82533934c9c1bf2b8a42339d0bb71aa2ae1f95ec50aba25bfa097da06ce001865f6b5204fa4b75d03760e31f9777e2c89c9486322c198520c06502f841233c98";
-  sha512.source = "d209faee1cfef085f34498456b9808db6618a8f50450b826c6694a50ed3952b7287ad5c37e4f3069f14f27359532e62ebbdd8065229a7beb335304c47c05e9a6";
+  sha512.run = "96dc085764a25d523d12cf695c5aea632b26b32229f2c5e02ffc9f2bf3836c12275dda9b99d0e73255da84ab26fd5a6a77f4523dee3051097e84cf450cac0bc5";
+  sha512.doc = "f8e4d36746018a60dec5295d34c319122451ba771965fe51a85ae99704c52a2e71b9aeb4380361b38b0f91e6369dcc1f29cdc7f2490b1cd82b989a446479a6bd";
+  sha512.source = "03a297ecedb3b5ed980544d0afbf47a4ca0561f3323451a4bb4d5e80e9ba55c0830db81b3d2a5012ee088882ce05d58991fbbd37ee9d2f793e3b7fe2d2ae8be2";
   hasRunfiles = true;
-  version = "6.0.2";
+  version = "7.2.2";
 };
 "ticket" = {
   revision = 42280;
@@ -31449,10 +33228,10 @@ tl: { # no indentation
   version = "1.0";
 };
 "tie" = {
-  revision = 50602;
+  revision = 57972;
   deps."kpathsea" = tl."kpathsea";
-  sha512.run = "970a855d2d025b3ac30a4e1631986568459bae84727b661ffc8e0982656bc66eb940b59e2b9c3ee6430e3abd5f7d8b0ce4ff828127bd2f9420e0139f1860527b";
-  sha512.doc = "24f07d9954fe0385abec8487d4c488df551453e13e8f638e32899722d62dc91b23df9d4494f9bc13662d57fed6e8dfd4d71835ef79832b59f075f9023797e858";
+  sha512.run = "39d0e9ddb47505d9a3cdb00e6d667b7273901eadd02db0637d1d3996ad8e90d7b8d6a1c094b62c371f24ab954239b43d6bbdcd9a6d689c3fe70d8959fcf56d6b";
+  sha512.doc = "686b05f4b7ac88dd663f5fc3157a21810e46b4382cc01271cf9ddc091ae44e76b4f3b94c93bdb4ff5366f19fee5d9818d1b0fe05d354b5c710bc2908f22f0fa4";
   version = "2.4";
 };
 "tikz-3dplot" = {
@@ -31462,6 +33241,14 @@ tl: { # no indentation
   sha512.doc = "0fd9bde0f12ddf5a4bf6e2e1df66a9aafa42e81cd945b41e09e8d289c57b04faddd303a415c36239e6686be90f06e8a7cc794ea50d17ec54f1e25703314257da";
   hasRunfiles = true;
 };
+"tikz-among-us" = {
+  revision = 56820;
+  stripPrefix = 0;
+  sha512.run = "70eb06187c5146c9238e2074acdc39df7b40b9bef3cf34cd820d925ed482df07a1b3042b3f83e6cece15eefda4d28b483888c1b9628a55fb57cc0788ca263746";
+  sha512.doc = "c272447fed242f2d6539c665684732b0953587924e4b921872bc420ea09a2c178779903c5f44ca72bf7a310ac03c6367fb5e801f4c30000406dd93c8a43098ab";
+  hasRunfiles = true;
+  version = "1.1.0";
+};
 "tikz-bayesnet" = {
   revision = 38295;
   stripPrefix = 0;
@@ -31470,6 +33257,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.1";
 };
+"tikz-bbox" = {
+  revision = 57444;
+  stripPrefix = 0;
+  sha512.run = "e68c3c6922c8529bea0b7c25bafc488d7aa41ad81afacae0f674caf637a1638dc8666bd16628b123063d94031d4cd4691ca127bbb648c1fb5a20d72ca8a41fbd";
+  sha512.doc = "428d94e87d51e000c5fed4f5b0bd87b8fdb261b9550e0c67e05a69fcee7a4ce3ee070f262d278e21cbdc5bfeea790c6d17450bc91e1e51250b572e754ded3df8";
+  hasRunfiles = true;
+  version = "0.1";
+};
 "tikz-cd" = {
   revision = 49201;
   stripPrefix = 0;
@@ -31479,10 +33274,10 @@ tl: { # no indentation
   version = "0.9f";
 };
 "tikz-dependency" = {
-  revision = 42454;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "e6f04805d8c36c6bf81deb68ffa2c43fed7a7ce21541d6b02828574b579cf41d5b57fd53d12f18e82b66c3f96e7c6962555dede9072e243693f6f6767146ad57";
-  sha512.doc = "ebb3821e66d238967aadcb06d801a0d18a90610eba37d1763c44452f7bf8fdf0c1cd30d52a72f0120a45429c303739fa239ad05b92ae067b99771d9bf4f568ca";
+  sha512.run = "f13e652066ed2237c22b397b76f628e9108a999138ab5d8349792551205cada4709031f5c4b458982618871d4d65abfe5623f700ee9d8f474c66b1e31df374b8";
+  sha512.doc = "3ab32e535d11802b3a828b8b49e78f31df5e5d3c7c36509a3b8aa0d81c02c465ec84d45b9d951ad833dea705381b4df05fa3d9a478db9af0622bc0d69008b227";
   hasRunfiles = true;
   version = "1.2";
 };
@@ -31503,10 +33298,12 @@ tl: { # no indentation
   version = "1.1.0";
 };
 "tikz-feynman" = {
-  revision = 39582;
+  revision = 56615;
   stripPrefix = 0;
-  sha512.run = "1a1ebc5d2f2eca4e5dd16ce744774add9b8f5b4c3124dee46f0366f43a59b188b0873939d2b68ff0d679f3e52f1a6bc387ab81c363912024efd0eb4110e2ba27";
-  sha512.doc = "b3e90aa1d8476aed01faef977b75f4e3450cab121d457eca0bb254075c1e2ed58fe15196ab0d923906dcf6af4f78bc76d6053343f6444c8294bf7d5bbceb3cd1";
+  deps."iftex" = tl."iftex";
+  deps."pgfopts" = tl."pgfopts";
+  sha512.run = "34c147e6ee16643e99d2c8fa789b39aea6f3b9ae7de93fd5c65d1b0daca1e9514d484b5b38892a0cffa1aeedcd405df0bc6621bf68e587311bc9fe45205c29fc";
+  sha512.doc = "ae0510a7971538fe458d83d4da4c78f7d607c7a1298344a139c02c49985f9005f6a81ab15f9dc621929d70d634c2cec4189ac4a2955e994611247af0c96986f3";
   hasRunfiles = true;
   version = "1.1.0";
 };
@@ -31551,6 +33348,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.1";
 };
+"tikz-lake-fig" = {
+  revision = 55288;
+  stripPrefix = 0;
+  sha512.run = "3c1c8d90d58c564f54abf0c34db63b3886f6e591dde8a2f7322f9ea2c6b51f10d1eba9d9f66cd1bf6e98e8ad57cd7a1d329e879381b164d4e1517331325ffa4f";
+  sha512.doc = "86afa9db08487666cea340d81355e73e64f72566efed3d1fdc8dd86108eb4f82621850baab86e039572e0ca40d5a38157091fa15f7e1462cfabc73be2c5de0af";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "tikz-layers" = {
   revision = 46660;
   stripPrefix = 0;
@@ -31560,10 +33365,10 @@ tl: { # no indentation
   version = "0.9";
 };
 "tikz-nef" = {
-  revision = 48240;
+  revision = 55920;
   stripPrefix = 0;
-  sha512.run = "e0bfbce75ff6c9ea02a42576a767e1a06b589797995e29e9c2ddd8640916496bb50126da69fd859d9fe6c89a447c342fc15d66ba620f084980740c6e7238c780";
-  sha512.doc = "724dc025c4e67817940f9c4269290dbd1a77208ebb8bb489f4807fea30594eba77c9896e3bc814825307f2012112576cd268633e99b53ead7b60d3689e155c09";
+  sha512.run = "27ca8ead5ab99566c3bc398b52df4da6bda646519fc5d84d4a8b5476fbf0e86d8b405f2c88a9be56f6f6f4def0e5174ab0b2bc8100300d6b32bbe025dd7bf9c3";
+  sha512.doc = "07e9b26ecb4b334c4d7459e636eb116dbf03f7978f88d29f462cd2f9ad81bc24bef57dd659d23c39e8bcd81ba4fa74214c7c399c104fb5af35bf18dfc3e4d1e3";
   hasRunfiles = true;
   version = "0.1";
 };
@@ -31608,6 +33413,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "2.3";
 };
+"tikz-planets" = {
+  revision = 55002;
+  stripPrefix = 0;
+  sha512.run = "e990d8a92d8f34f3042117e289d7c385e17b973954a2286629c84cc2f13397159b75ec5ea1b032d710babf5b31d58d5f2b23a101b535b9d88328d797a36b952f";
+  sha512.doc = "c92e05217a4e4aa6f49a5a400f2faea365483257b61db934351b0ec4c932e1d4d88e313f443cfd726db2b1234d0bb66f4f70064d690c554dcf4c4f16672b0c67";
+  hasRunfiles = true;
+  version = "1.0.2";
+};
 "tikz-qtree" = {
   revision = 26108;
   stripPrefix = 0;
@@ -31633,22 +33446,22 @@ tl: { # no indentation
   version = "1.0.1";
 };
 "tikz-timing" = {
-  revision = 46111;
+  revision = 56291;
   stripPrefix = 0;
   deps."svn-prov" = tl."svn-prov";
-  sha512.run = "f5f771d0fecb0615770d978d1ee5a8a5ebeae4c1d78d9f0ea33099a5c8d89cb7523c70dc38d3a0a6970e997fb5d7b9eb30e54bab4b865cbd8a53519d3bf529a5";
-  sha512.doc = "e0d03fa23c84c8241a8b29a6a7242cb54bc6cab8a25ecdea64dcdca70606ac086de9f021045ddd103b35209af05b5e0342808a97b007c639afc40159de211ce9";
-  sha512.source = "20a12782a5fed931f92198f02408ffe39a973eda5cf95904b3b33f5fa5b7a338b419da5e985c76c57610eb82c6b428f02c2fd28f24ef381708af46974bfa0920";
+  sha512.run = "7787480f873cc2c5e08c73a14c5f2965c57425ac223de41997727765f2c3f9693242e3f11d1cfe915d712153f64b7c47795134a98b3907569a12f468afa00617";
+  sha512.doc = "fea8cec1685740fd7a14ec94e5e7944ed3408ea34c852572ba8de5d97f38efdfe8f7f622ebd0c43cb04881d97e105891e509bd9ae49b64fa41b19497107fd0d9";
+  sha512.source = "e3b8567c0d8dba6e691bc9b67ca5850a1beeea2a27185eeb1522ed99387d0dda31a0f6e9d6013253230e21897d4579f06d6e6591947e8c433ca6f9bedb293427";
   hasRunfiles = true;
   version = "0.7f";
 };
 "tikz-trackschematic" = {
-  revision = 53754;
+  revision = 57300;
   stripPrefix = 0;
-  sha512.run = "5e00ec05ccd6c6900d8919efc35afc54051a25f8f57812fc476ab6a28f4cc194eb4887699e6353b15b76a68de799fcf9c96c4018ddfcf75d7fb889d998a6055c";
-  sha512.doc = "ded12f30baf163ea465531960745af6ab473ff59e21c579e2c58151b61d2aa8d9b04a29d580a8ed86e88dc1a11a98b7d9dbec9d853bbd8a7556c0b3d634a2947";
+  sha512.run = "3936b79ad3e687002ea2d52ef03bcd468518bf67e24a9e6eb83e9c5379bc244dadb3acbefd3bbfdaa84a5811f32b89a7bdca2bde4861ef6bda2021e7ee289828";
+  sha512.doc = "0fd357b0e571c0bb9b0954338ab45147748574143c01c413700d7bda39d0171f037eb207770fbde9b366618fe60f5cff82d17900295ec14322373f2fe0f919ea";
   hasRunfiles = true;
-  version = "0.5.1";
+  version = "0.6";
 };
 "tikz-truchet" = {
   revision = 50020;
@@ -31659,20 +33472,20 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "tikzcodeblocks" = {
-  revision = 47265;
+  revision = 54758;
   stripPrefix = 0;
-  sha512.run = "709d531084b03a8bd1b645699de70a24ccd6c57050bd5d7b9697c778ea702e846adfe288983970a745b8745eeffe6acda3d0024fac65ec4e99475c736c5fc2e8";
-  sha512.doc = "26ac33c604e51ed31a5b36c174350b1860b8b01169470cc1b50ce49808f7c8d84886110299bea82e72b3a5f0c18ac0f897d879aaabad1a4712dd94af47b3b10c";
+  sha512.run = "a19ee68d5d59d936f1882bdf1de5851b9cac48debc4754025d214cc6838173fd7090631b08dd1916043520e97cd479087ad4548c991c0631856510ee912a42dc";
+  sha512.doc = "b75b6ddf66fedf1d69611ca0b817ad9c5d7c0bc162cca2f04794bc3723135032908148baf4aae1b486a0b5af9bc335b9e585943a3a2fd73ae55a0702236f5142";
   hasRunfiles = true;
-  version = "0.12";
+  version = "0.13";
 };
 "tikzducks" = {
-  revision = 53312;
+  revision = 55713;
   stripPrefix = 0;
-  sha512.run = "60a0bcb4560e294c96c3469e557c114cda5b92c6ad2b75c04d8bb7a07426f5dfb115072ff66894a75291bba786ae58d19ee5f651cc80dd1549367d5bbdee5829";
-  sha512.doc = "e7b34bbeb3372eb3ef9bc7b758ce479229b78dd3f9af72bf71bb56cccf2927bf8ca52f9bf985f2d44323754b41180197356f49d3e93ea34ad8ac2cf1adfe9e27";
+  sha512.run = "2cbde264e8621c4d7d7caa9da127139ed56d819760ccde59f9b8c098c77746414cfb8119ceaeca3e2da0f361f3fcd0d9dab1898fd240c2a2c15a64021e8b86fd";
+  sha512.doc = "73dcd9d393c852673f43e97da67a1c60330cf4e95b4fadc92a634628150fd228037dc024ed2e939441abf20f8bb761241798ded814fca5b9300b5dbe4a1f1171";
   hasRunfiles = true;
-  version = "1.3";
+  version = "1.5";
 };
 "tikzinclude" = {
   revision = 28715;
@@ -31684,27 +33497,27 @@ tl: { # no indentation
   version = "1.0";
 };
 "tikzlings" = {
-  revision = 50841;
+  revision = 58469;
   stripPrefix = 0;
-  sha512.run = "0c7c5af85cbdc6b5146e67083a8ab5485c3d0aab78d677ad8ef53f6419530e96385542d1317da04bf783a4c94b61152ebb8fd037ad8bd0ee472531476646177c";
-  sha512.doc = "2b60d87c6925d1465588f244fdb3bee6912ebe02d89bed593caad9a8b8710b0d18a9aaef903395af9fa85207f0278054fb6a8d94b6572acdc60b30e7f8d9c6c2";
+  sha512.run = "14b75aaf46f45208d6bcf31cfecabbf3432c1ad1fdef3fe9db674688c2924d8c6cb3c0c27d5fcd8ebd1409974789c9b5c73af5fb51b29909cb79b468c742507b";
+  sha512.doc = "434f9dd2a4f5c8cee62f04f68b50a4df416efa6262e0708b5b1acbf310ff7240fac2d0ddda119cf1a37eb1c811a38516070d412b81e1a809d31ef4e2ba96ac40";
   hasRunfiles = true;
-  version = "0.2";
+  version = "0.5";
 };
 "tikzmark" = {
-  revision = 52293;
+  revision = 57843;
   stripPrefix = 0;
-  sha512.run = "4f1040ee866eba68c6bf622d694cbbf417455691a08bb91169cf7a3a3a6e63d7136e1b976ee2e8e89361d5fd8871afab2dbeb7d26e04f4b51992f6e71854bba1";
-  sha512.doc = "6575708cf87fc25c080001b6836df3dfa33474b594970a4dd4f2e772a9e3ed8dd6c3ed4f2ecb7866415606c983dfe36184f8ac9fbfb60852f5feae3dc90b98bc";
-  sha512.source = "1e9aab19f1d7ce4923b2092cf69e0841e0bc99f68ef983887ad499045a47c071457da72a878f2db49655ee31f18e433c8f98d58869f122fc5c8867757d36d670";
+  sha512.run = "90cee203f0b752ecc316e6eb483bd49d18f88da96c6f1f764862ae3d6da6007d4b658b30bcbcfcefb6ed33f9ca9a6b025b805a1b763b26ded8b30831274d6c75";
+  sha512.doc = "35029b622cf040dab6b6238badcb7f91cdd7e513386d0c34c5bc03845bbb698656abf35c865eb24a32c024f281bacd6ba5eb47ff33a0650eb8986a5698e33d9a";
+  sha512.source = "ac77183d87d30e87021cde1a7b700ae6c39dc53f621552eee0b1190e1c200aa0a6cfa776320cac87fc3caddccdf518ac131c945a015d367baaecf89b6d218c48";
   hasRunfiles = true;
-  version = "1.8";
+  version = "1.10";
 };
 "tikzmarmots" = {
-  revision = 49114;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "d390b922ccb3cec5b215a97586578462f83774b3dd5d3dd461f47833f1ddaf705773e4a60acf385747df6b55d6d20c495f4ffa7f1c3f2e6d480d66ab5c5b04f6";
-  sha512.doc = "4836d1d7c55ae98b26aa4968c5717457c8e2cb64d3e21f2b7298d3990ef612fb9087e64074945e24999fc302ae012e47c95a00c07e23286aae5ea7cb63fa254e";
+  sha512.run = "c2ca7c1f66d070e1249b2ed9e88cadd482353140bc3add0146d7f67ffdd8c08cc3eb4b9c59f8e2d822000554a8bcf1e0f064c96ac0e002a6c80655c5eb909f81";
+  sha512.doc = "03a4494458d7f053547952945e9ecf1c500dd3fafc665852498de05f38234c45f0972971e8278d279d36c81f2b920152f10ad1bda2c5b24e5957ad0846e77d9c";
   hasRunfiles = true;
   version = "1.0";
 };
@@ -31715,12 +33528,20 @@ tl: { # no indentation
   sha512.doc = "676980e8772650f77ed37d545cbd4ac22af170e1a4541acbd0739f3b5c0aff91f3d48cd3b3fa3c562510c1c624f46de2218fe33a9e53532ca88ccbb929e3495b";
   hasRunfiles = true;
 };
+"tikzpackets" = {
+  revision = 55827;
+  stripPrefix = 0;
+  sha512.run = "65f07d48b37db0391081c8edeb97d59dbb7a261ad1320b3b018f14a2b4544bfad46964b82980b3135416ed75fd7f21d08df97179d1a3ae2fb55308d36e89d2cb";
+  sha512.doc = "f669d0a09de871167915f4a6647791346703abf03b557c8afa03f5d3ed81754c4d175d211850b7d6f87c2b0a1077c8559093d9743130f10ef334c10df74ddc69";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "tikzpagenodes" = {
-  revision = 27723;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "4f0d6a4270bf90aa1fa5c5a018fb8a2703a6884215672cfcdb908f7c6d4e9b3610a9f6fb6c26b7b302daaf509d635d26443c6e8944bc1f8704f94a527090319e";
-  sha512.doc = "14ad07e01c014d000a2bdd483a2dadba652cd78b42faf0ea5f9ba829ba484239361d73233443303be121dd5122b7e5e209867145b10e7607b5c6e5d13e2fb428";
-  sha512.source = "bfde76eecef7173d34cddab9ac517a4d1440aa2888007cdc62acef2dcd84e26345f86a757e1c1b6af6211c2e33e0ac656501d76e980a90fdfa970843eb7c0eb3";
+  sha512.run = "b412599ab7288cf2bbbf4d3cd08a97b2a16932fce61ee9edd1b570345da29ee30d32482bc855f6929231331e758dea2a8f8973daa19f6dbd1863840bb6753876";
+  sha512.doc = "411631a79232cc01cb918689b5fa030ca79b4c27f45419a4b06039a7a17222550a3f34a3c4e12b5168fd331987fa94ad862a6cd6b9bdd0831112e8682adbaf9b";
+  sha512.source = "5c829f01396d69dce7399844935f0a3faa4d30f4b2262aa4c1dbac2543a2d3705534a05c1e9aedde03a5061f6d6f605a1dc6cc108b037d5a74301b8569446ca2";
   hasRunfiles = true;
   version = "1.1";
 };
@@ -31768,6 +33589,21 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "4.10c";
 };
+"tikztosvg" = {
+  revision = 58737;
+  sha512.run = "826b6cc6489db99d4b7651afdaf68117840e8aab4a19235110128af63cf26108fe409fba341acd26ef1ce2ba6276d368bd00e83c7b5954b1937d50b4d3c3fe8e";
+  sha512.doc = "1418c505769ed1fe835f713cc546305a25b6a96a16a7e6dbf9938547824b59fbf4d638c9d40ec7ed1c23fb110ffb482062884eefdd432db1e57b9e567ac299a4";
+  hasRunfiles = true;
+  version = "0.2.0";
+};
+"tile-graphic" = {
+  revision = 55325;
+  stripPrefix = 0;
+  sha512.run = "b6235459600c5c8bc683c9fe778bf864f5ab3dfcc8c15afd7b997c45f349f05b57ded236daeeef1e6bbbb7e535a4f203625344a35d6e4de401c082a937090cfb";
+  sha512.doc = "c945ece6ed1b83f4fd8923dd74d0c961c907071fd5d33feda3ea514beeb8b85878dc63011ba73edd1d4a62799ee2555cafe7d4c866d55d160c7e97168ab16038";
+  sha512.source = "8334012b871abc58eb44f3b20f76d1afb2764f07be12b7122c81e5ab627a14fe2221596756868523ab8c6b11e0e7f4aba0b9740efbb221e569ab1889141b250c";
+  hasRunfiles = true;
+};
 "timbreicmc" = {
   revision = 49740;
   stripPrefix = 0;
@@ -31880,84 +33716,67 @@ tl: { # no indentation
   version = "2.1d";
 };
 "tkz-base" = {
-  revision = 53695;
+  revision = 54758;
   stripPrefix = 0;
-  sha512.run = "221c722b6919f8bfaae489f07ddfce6eb3e1495bbeb4ab180fb7fe5627adf1ae3c853a36eae9626959073ea07bb41642351143142ca31e089b4e5f77c6f53f22";
-  sha512.doc = "f33b074f1d45a4d01a7fe02dff39360ca2e1c9352e8989e9c024b40e8fddb3f523526c86f5f205cca0cc7b009a974a02a1213b5e4c5d038c522076a2798b84ff";
+  sha512.run = "9cba8d8d79c7cb01965660fee7913aeede3b0d2cc19bd7624982fc5854224f19f7dd2d2af0ba93c99b4f16827fb028564fcd9a1e9afed1988ce836188516f891";
+  sha512.doc = "c0393a07d50626349ff214bf8047bd6c20e14da3c036ca0ca277ce30a220bd52d2fa02cdb56d28733f9a69bd5f22d611f8b80dc130f6016cba46f4e889e0aaca";
   hasRunfiles = true;
-  version = "3.02c";
+  version = "3.06c";
 };
 "tkz-berge" = {
-  revision = 22891;
+  revision = 57485;
   stripPrefix = 0;
-  sha512.run = "f56372592ff8a7ddc3f9d778631c4ef5e06cd6e0995b35d2c16d24b046540765a41df701d830720c95cde77cc1757af99a3f51471d4b83d5311fd5695865f299";
-  sha512.doc = "b5514c49defbcc5d934266df428ad96a158803edcfd9ba23fb32080cc383ffcc32ea51a26094684094740df3a28e3137e0a26dec8792bbd60b454269312de596";
+  sha512.run = "1772cc37537ca421022c5b68536ddcd6cf0d5e88d428cd7682e7773a8290c4b2ad90a11b07dd8c4a4edce69497b63d9a87b5f113bc5857dd8e59e7b80d1340ff";
+  sha512.doc = "84b5524a8a0cbce6f33611b77c451fd9a75f0d60375e61e2064b27ad4f28a579fddc9a9dae538cd1f540cfe78f98fa62d9b2df979b9a1ca8e73245245ac35f1e";
   hasRunfiles = true;
-  version = "1.00c";
+  version = "2.0";
 };
 "tkz-doc" = {
-  revision = 53701;
+  revision = 55265;
   stripPrefix = 0;
-  sha512.run = "b0b1c71bcfd60065200492c6ccfcf7a4e4f107c042b6ba7c52a9dcee9094d650eb85fff991c86f389a682fbf2fb583f96f03b668dc0fd959c5871904f227434c";
-  sha512.doc = "cd7d5f718c75c1c6001e01e05d980a35432297539783f479f1a6d6db4faa5141b38832f594ac1f7e54714cef1f25da028ec2bc685f96292b63946bc143bf7568";
-  hasRunfiles = true;
-  version = "1.2c";
+  sha512.run = "03f1706e638681889f5d50cad6f219c5887a1eee82408213b8406a14e6a4fa84222165df7780e10b24877fe3af0a1a750c9ac5b2f9e062e30add86343be9da07";
+  sha512.doc = "dbf27306bea25b1bd4ce945e65a2e45bafab8ea02e3f8fa14ade133fbc559cbcf767c7624a26edae402cce2ad3d61e693f0f742c8174f2d963d7128c2fc86c1c";
+  version = "1.43c";
 };
 "tkz-euclide" = {
-  revision = 53697;
+  revision = 54758;
   stripPrefix = 0;
-  sha512.run = "8a3809b248694681215e5e6c7349a7b063ff986942dd93a9a745c021b8a3a9e88972da9225bcba2dd30223ef13ba7cea010cfa3c4dcdd75b03a28ebb7bc4a220";
-  sha512.doc = "4a050ae4591d63eeb75cea10a8fb87e617d18af7360589cf616acc74a0ceea47713273bc0c99c243b5f35a4b00b1f61ca61ed52ef016c2fc935ed49ac2a29ffc";
+  sha512.run = "c8a0e2c6411ae844575010d0f749ede9ab818de766794d60a62aafd306aa781ce09d252183c57a8d762e6655c7e7d1c2ba35b4f169261df6d65b8ebd833b091a";
+  sha512.doc = "aa8e10477798393dac1780bfa839faa36d9eb9f16bc34ad86aeefbffffaa1810ac3642058ead46be933e359f7a9e0fd0d7894226083095056910a233f017e3d7";
   hasRunfiles = true;
-  version = "3.02c";
+  version = "3.06c";
 };
 "tkz-fct" = {
-  revision = 53696;
+  revision = 55031;
   stripPrefix = 0;
-  sha512.run = "3a1b2a7a72def92fb8c44918680179fadaa69aae548b19f1a806e1b5176d4d6923a5e575e909d8c3df7aa26551b199412f1be4183199fe05ea5ce0775952df63";
-  sha512.doc = "77226e5e8a3fc289fd3063e7819918579194d34899e899e03f512481102fd3e3cf333b204e24d5805b4e310080f81ff1df9e4ff83e17980e74b8326139c37114";
+  sha512.run = "6defbc1265838eacb6612f87d969590db6cb2eb0a1c9316c1f52e700c7b7e576f971080538982d7adccb12af6ce7392cb6d6da13a9d3e537e5af8fc2dc290a89";
+  sha512.doc = "1cbfeac7939ba45c6111cc7cb9aeea195690cdfea8c75e488a9dac6a49b2968d21d0eff74e03fec3229afdcec92fe2841a8dbb866314187ef98a317f07e9f346";
   hasRunfiles = true;
-  version = "1.2";
+  version = "1.3c";
 };
 "tkz-graph" = {
-  revision = 48711;
-  stripPrefix = 0;
-  sha512.run = "9a933a9925dfe8782abaa6c983881a10d20542be294f15904d1645f5481309ed00d42d3b4eb38498dd4eab84774b685455235f89462de0af443b617bd4566927";
-  sha512.doc = "ec22ca39b559b4d6f6192272470cfc748c466b5efe9f5ca00fdcf263cc172dcab5e34b059c328097479e1c03e038e71e4658fc22518cda545f9febaba2f43310";
-  hasRunfiles = true;
-  version = "1.00_d";
-};
-"tkz-kiviat" = {
-  revision = 48712;
-  stripPrefix = 0;
-  sha512.run = "d1b6b4c1ecfe29397c2a63c808cc24119688782326bff3615c3e84dc22ae1bd6bdffc57761af31ef21bf3f3378806dfd087fdd24d5dbac49ec890df54ea3bcf8";
-  sha512.doc = "5ab29135b2903988727129f37496ae27a5ead3800edbe47728d7d5171d210ef7e11bf47d3a4fdd27c0c03f6e09aad8b9697acadbb959f549f5c290e66c1cab45";
-  hasRunfiles = true;
-  version = "0.1b";
-};
-"tkz-linknodes" = {
-  revision = 48713;
+  revision = 57484;
   stripPrefix = 0;
-  sha512.run = "b41f40a2c27b9384c3edef8217c1224293b8a2901a0f3752c3267d911a7788e27138464b2f11634f67bca00dbfe2ed71a87fb9b3dd4dbc5f62765a022c51bcbe";
-  sha512.doc = "d4fc88cf1dcc49b6bf2292c6892c5094bc4eb6f17535dd1ac51783b9abb7312279cadc5e06e624720be756f5a0907551f4411f246cbeb6dcbb1365b891e70840";
+  sha512.run = "04cf17f69862b2ec068dfc061fb019b54352cab3fdebb3111de3c28bf15047e06c236d979e9a9a92140c2a59ac9c0813ed7006d0411737b1f04f71c3a5916cda";
+  sha512.doc = "df2a31047ece6f5809db42be2243d00b0342d54d3b864de6a32a43257b0d8525170e9d642db495f876c12adf4ae5580252c1378356acdc5f18531aa3099e76d5";
   hasRunfiles = true;
-  version = "1.1d";
+  version = "2.0";
 };
 "tkz-orm" = {
-  revision = 39408;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "a90dda0186a3e3309eaabe444a7404fe2cafa1caa737f7d5ec9779eafd76f0795890f36bc4f0c5302dcff30231ccc3a8306fe318f10695e8caf00cbf61fc6e04";
-  sha512.doc = "a1686b02d79cf0af41f99faa2ac06e2a3d864b078231f4c9c165261557df0fe8f26db8159dce2a90be6206750d6fc8f3013421cb0171c1ff1f11624e634f910d";
+  sha512.run = "dba6b58f1e3063d3af6d535c2c65d3ad0fe57f0b88aeca8684192b546d79570386cdea0d23870b5ac88f38b8ea0a9899efd1be581108b43ea16044749dcf965b";
+  sha512.doc = "65ac0e7657fd78d7d496b466d6cfae3bded966249d1c90eef6df1d34041b6b7ab5be807f7de41c04d28e6903748dc874fa245bce3b19b96d2a1f0d91316235b0";
   hasRunfiles = true;
   version = "0.1.4";
 };
 "tkz-tab" = {
-  revision = 49775;
+  revision = 54940;
   stripPrefix = 0;
-  sha512.run = "c4290e2633a44122789abb3dd054cf61a1bdcece6274a43d9ce6ae403b73f0c0a32b4c1e6470278c46468d53149540f3884c6b2186b51008b0beeecc8a84b1c9";
-  sha512.doc = "08d79e8c0aeef5323112182ae60c25a8ea6547aa5ec75f37b8c5e6e15a894d1a70efbd99421140156de844d35483803c21bba0ea0ee88ca36aea55e303095d14";
+  sha512.run = "1ba023dfe79db404930546277015a9fbdfcb9165d74548cd0d0d590338656913327d949b3d35f9325a5c928fc291f3e6c6485b69b6dc753aa633460e265b389c";
+  sha512.doc = "eb941cbee957896dc19d4e7269f78a0d07d86b20cd0f0756241376da062386e3a99675b3fcd451aa153eb89668b98b486fa7d5b904a125a4e241d45b40b745ca";
   hasRunfiles = true;
-  version = "1.4e";
+  version = "2.12c";
 };
 "tlc-article" = {
   revision = 51431;
@@ -31974,17 +33793,23 @@ tl: { # no indentation
   sha512.doc = "79eead14f268eab643f676c36b20ba89828928fb3b418956277304ac6cf7145d53b4f97c30605690cddce8660361614b58ac65e8454b7740dde17ff82a053818";
 };
 "tlcockpit" = {
-  revision = 51620;
-  sha512.run = "ae7d33579b16748a75ea5c94c328bebf01074428db854e823f38fba8632a70f8a00f91d06df04e4d074e3414f5adf706b1945e0ec565f588177a2b1608a47a24";
-  sha512.doc = "ea727e465bd123458dd490fd2e0c66dbea47720eee9f3a3cdf3faca0b09e4696f8cd0c334645f306a901433de94f99a7b43c52691888702f36d369d1548aa464";
-  sha512.source = "2c965f95c45dcf0cdde077940e371c995ec1f29f01cc479fd0b5cfe3121641a1fd4e35e2ed01705461213b8669ac7b9d3ef3f6895cd1c878c1309bd8f1ec256d";
+  revision = 54857;
+  sha512.run = "50817d4c68d4e302cf0f4075ff9321bde2fd26336923efd2fb39bf097090b617a2a67ce75d1a14d562939514acb17b2a356bc388f72049dbe52a868ff3d63ffd";
+  sha512.doc = "d40cec8456db0d9fdd55b76c84b40565a8b16d7639084eaa5dbc61c3bd2ebd73fdde6f40b11007835be242a9103cdc5ecbbecb6082ad650663968db18cc1b04d";
+  sha512.source = "01a9038bab5226f57922215e6dac5acf69ba2bae866f72df1d2d4a3a6252fef78e18d1e7b2a8baf327bd4b89262abe6750b0dd1166f47868e797e50b205322a2";
   hasRunfiles = true;
-  version = "1.1";
+  version = "1.2";
+};
+"tlmgrbasics" = {
+  revision = 56221;
+  stripPrefix = 0;
+  sha512.run = "d75c3eda16591cd7c6f3ba2e7e615a854d019ca850fa4d9428df9efe792764d885df642b65eb538b0bf6ecd9e4b5f4e41d82292647e24980b65987dfe7332ce0";
+  sha512.doc = "4f9eb5189bdc3599e3b691ae69a5bb89894b9b60c7838772a41b9784a6a33323a634ac6892f88234762219fa99665a2079df5b0127d98bb396a66844ccf8cb11";
 };
 "tlshell" = {
-  revision = 53801;
-  sha512.run = "1b8c40f2b6c4fb0a106c28f217dee218069942750c8302b936b89c2e1fd28030370e0d6a2ffe91789f9fee8175fac3384aa4b48a581d9edf1480db3b509fe441";
-  sha512.doc = "73d2770e5d28040995db376495938224e8fc4b9b986171f4d39df3557e0d1b99982436bbb6f687f329b533da30534240c8a892580bdfe13fcd22b3058f7b9e6b";
+  revision = 58792;
+  sha512.run = "e1b8fb26778078e3337ff8d779499e4ab2297eb9b061652ca3e565810c171e09adbc987c64433fb572e89e7025575a4304c46ca208043779d74b29e0be66a787";
+  sha512.doc = "60378a288e8f00d4e15dcc35919836623958ff47ae887972c01e38fbbb534cffd619e2e7e60e85352efc36f089f89ecaea971b4e2ba19b3186693ab9011017a5";
   hasRunfiles = true;
 };
 "tocbibind" = {
@@ -31997,13 +33822,13 @@ tl: { # no indentation
   version = "1.5k";
 };
 "tocdata" = {
-  revision = 51654;
+  revision = 55852;
   stripPrefix = 0;
-  sha512.run = "81c64d55b33ac9c22abcbdd3ab683248c3ea12e21866de0f2d36c44434729cc8a32526e0f28bc0e945edfca5eca74dec78acf9c8e8439d1e7a3d28cc13c5a260";
-  sha512.doc = "4616b125dbeb9458811ec7ecdf13a1f3750c5bad9670bb3f556b62ec084f1af17cc2b91a8e821fcda48b660ef0a14911a86be367297bbcc13d1c5c8cfb4a09da";
-  sha512.source = "d1d6adea1bee82b6b66d098edae5e29c714797fa52c0c7017919c7765111fc185d30fa3d3495e81611642ad51d9bc4eea2706ccb0bee2ce6fb7ebbb8a71b087b";
+  sha512.run = "d09c92d7be720882d53799e8ed8b392e8ce20f1ed78ec995918dbae80fe99e58b3d6b74264f5cf47c146b6f2adf779c97f5e4f98060bd704faf58959c7ce1dd7";
+  sha512.doc = "a67eb751bced4bf18dd734a7643923062f30d1dd43e1ced5f161312950d4313eb2187cb1e85cd16835ece11907bbb58bdadb0e922aded123c5d024e390b035e8";
+  sha512.source = "4ed7570fe98eff95fea9f9bd30b772a45fb38f83f1bfe56e353b4531f65b06cb859fef310310654acf42ecb29dd78c78042971ff7957480962d86a4307c2a7f1";
   hasRunfiles = true;
-  version = "2.03";
+  version = "2.04";
 };
 "tocloft" = {
   revision = 53364;
@@ -32033,25 +33858,25 @@ tl: { # no indentation
   version = "2.142";
 };
 "todonotes" = {
-  revision = 52662;
+  revision = 56166;
   stripPrefix = 0;
   deps."pgf" = tl."pgf";
   deps."tools" = tl."tools";
   deps."xcolor" = tl."xcolor";
   deps."xkeyval" = tl."xkeyval";
-  sha512.run = "07f532c8f96b04585b68f54a9092463a829e4f3aa440142a3d2589597d96e2c83568cface4e59e44d92a64ed909bd817e0e3467638d6e4c4015a6f9d30f2f6d6";
-  sha512.doc = "31ed8f25d274f1b7fc4ead8f2c43a1d30749c7e440a13f72dff07cb0668eda139335e517e60dba5f1ba8006abdbb92f2742f2012e3207e932352d6e7d3067240";
-  sha512.source = "00ec1e48e07f8f283d1ff3db8bdfe55d0ab0c03a7e117db584cbb22103eca7e59af684477a8adf552faaaa018e35681e258cb1ed970e189c960ab4caa0cfae39";
+  sha512.run = "a58ea15caf11a535b1d01114160f28a5df0c81677939355caef22b1639053b2dd4ec716a2a67a6342565e50ad7681d660a84b391fdb8c34278ef0dac3cfcda99";
+  sha512.doc = "89308d95e71809a7ccdbf0f425b536e975fd1f86b04ec5cce041f3f61420a37ddd0863df9ebab2f714e8411649a848d59bfaa2951a62bb47ec875382b31145ff";
+  sha512.source = "d4241c1f94390d8c2d4a166b5bbafda1e93338a4da82c72581ef2d488b41699040255d775b26289183a7848081d5fbcf27233e735a5fcc1c29a35feedf70ebb4";
   hasRunfiles = true;
-  version = "1.1.2";
+  version = "1.1.3";
 };
 "tokcycle" = {
-  revision = 53755;
+  revision = 58254;
   stripPrefix = 0;
-  sha512.run = "1d4186f5f12468cebdee8418925cd3b3ce4d987bc70bf268efa566f3b65b3eaeeea964085453beff9bc3950c67850fc3f37d2b6b5ed0dd14cc2f01cb569a42b6";
-  sha512.doc = "d08da1c1d6d4d42ba3bb6a866327c4deab6dd359130b9e795f08ff9bc3ea0e5ceca8fba74044d298e38ef54e1ed497245687a124c9cec49e2cce4140e1a8264d";
+  sha512.run = "b65bfd661b170277c89db47655a64f47b61b90da9ae6ace0f6de1264c109aa5c9900b2098ab3ebbe1c2284a4c0b725e876f272246f353648b78247d7c1b29bd6";
+  sha512.doc = "2bc13594efa21656bc136bcf6d7358d3cf8a3eb61094d6abe427e958eef26a6731959c01e37b1a0985ee0a9eb7e22f25ba065b697718e2db6a968aa861c5d7d9";
   hasRunfiles = true;
-  version = "1.12";
+  version = "1.3";
 };
 "tokenizer" = {
   revision = 15878;
@@ -32071,11 +33896,11 @@ tl: { # no indentation
   version = "5.1";
 };
 "tools" = {
-  revision = 53640;
+  revision = 56514;
   stripPrefix = 0;
-  sha512.run = "1d3386bd098381e0ede5ff0c6cb107867719a54a8109208a1de448881e172265a000d91c6e7d0607af62de0504913e4698f5ee00a710b5dc32a8157faed094d5";
-  sha512.doc = "e0e7d9bd37f2268f7496b66b69fbc520413f74f67356319ec61c1c6c2523f0fa84d7ea4d78f0a9b0875d820c3514ae0c5871d4785df992ac345238e6f5af8a3a";
-  sha512.source = "57d12bcc8b51f349a45392c7a7b24d2ba52a5ee05f84bf7d70b1bc7e384e4b09b0733a23a0704f5a564dd812401dd851ecd6294201bb83a42b0bc73f7ccb889b";
+  sha512.run = "2598798421318513c028a6bcd9be4eea18b7cf8fcf20444d860b2954d81895cfbe9e8700fa3cd052fcb50353cb1bd926a047026d8fb07e48aced5d8338a6e464";
+  sha512.doc = "90d85bb6e877d8d8b1ece806e62c6179ecbbbda3497c4c4f16b67989448d1d2179c50c475a1dfe57bf085ee30fcc09a962586dc089565dfd0715b8fa4eab608d";
+  sha512.source = "aca34a4532b188cef91484f36b05488a627582882f56d48b35020872c48dffdf3cd3be9ca8c6073c45db564cdf390b80689cefbb12c5eaf2370deb75646006ed";
   hasRunfiles = true;
 };
 "topfloat" = {
@@ -32086,12 +33911,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "topiclongtable" = {
-  revision = 51601;
+  revision = 54758;
   stripPrefix = 0;
-  sha512.run = "ed6bed14ed748cc3957746f65319c827f94745c6c99c896048362944f4ea96e54cdbc732d2f9324f472872a4111aa18c44ad17f035c5cc5beafcf1ca900b2ef8";
-  sha512.doc = "f227c659e27d138d848b78fa43fe26792affa4181984de42eb17bf636d9777185fc0838fc617f4aac8142f3a611e65f01547e48a2a18e2ddad1d3363cdd0034c";
+  sha512.run = "3bd1bc743191a644cf9dbdd36890929003adfd8bc68372ff74882b3b37f2cbdfcd007222fbaadf4d73b5b1f919e1491edf8c25e9c69993be367d3816d06a6b12";
+  sha512.doc = "c837a90b1c13f194d4bd41d1ef91e994c4027443169588622bab2613b57cc86c6a29b81178f257c2a6b36ea65c89e1b66791ed137c2b5c144deea8c7cb987a17";
   hasRunfiles = true;
-  version = "1.3.1";
+  version = "1.3.2";
 };
 "topletter" = {
   revision = 48182;
@@ -32103,13 +33928,22 @@ tl: { # no indentation
   version = "0.3.0";
 };
 "toptesi" = {
-  revision = 51743;
+  revision = 56276;
   stripPrefix = 0;
-  sha512.run = "13176c395de6e5e6e52e21cc298ed5aabf0a68d42d90119bb1bbf9b85f99c26faa3e78f64f99ab9717d506950d22338b9df2094db0f503f50871e09d2b45a085";
-  sha512.doc = "ca06bdd003084fa8bc11680f5d13ae6f0b333e81ac1ea57ef37959cb5c54933621c00f86ab2fe990b327198f28218eb60b1595fa50511c48625e35a9fa5c92e5";
-  sha512.source = "51445c7c0c8213f3df42abe6b60f740ccf30952e22e1a9f1f0e852f98c56ef1f34060fd8ca3a64bb8cdd512d10a3da8912a1db00b3d0b0c5fe78d30e42258d81";
+  sha512.run = "be7a920e195b9ffd3fcfc0bbe1647d1b47fb98743ec69ea9b23783f052d9c10c26acdea42d4d2c7501bd57d3853f53642a5328a1c6954294a2cd38d8aeeaaac2";
+  sha512.doc = "7dd70306861e8528cd4c645893a3cb81c20a6f82db2237e595573226c77f8df71ecfa57909b9675e19e441301fecf38f1b1c4bb7b4ed2705a4e132d4bf19b436";
+  sha512.source = "f127b3ece0428207e503bf2f9258da2c4128b524069c45c4d7b188ac06ef52527d04020a8f002c72a878a9cf5caa358323e5db9e0b65c46d6fafadc657ec014f";
   hasRunfiles = true;
-  version = "6.3.06";
+  version = "6.4.06";
+};
+"totalcount" = {
+  revision = 56214;
+  stripPrefix = 0;
+  sha512.run = "77d12ae2b41ccc54e88338c47cd8071bcbbb130901cd383a8ab976147c510c52c437e722939882aad859d1bc58f52b7a698033a695ce10551f86874dcd58d425";
+  sha512.doc = "1be9ee133e33a859d9dfc91102dfc4511211eee462a0eb9ab2b5610a342d949cff0a883656afa8a1ff0c0d7088a94391c2f5c60894644f3985b9e916ef9df221";
+  sha512.source = "bb5d5a15c2ce9cf51fc777808ecf0e551a10b1b709786d45cc25276eb787b44a54ebb217c122b170d01f72a393bf5343173d3d94e5e46194e758141e436c2f1f";
+  hasRunfiles = true;
+  version = "1.0a";
 };
 "totcount" = {
   revision = 21178;
@@ -32153,11 +33987,11 @@ tl: { # no indentation
   version = "2.1";
 };
 "tracklang" = {
-  revision = 52991;
+  revision = 55707;
   stripPrefix = 0;
-  sha512.run = "bf1126910a73aa2df406a596760802da334c0bdb451e9062cdad2fd80a29386c42b3deac4af1624741868e9de12bf7f1b3e94e79f48b291a6f062503f5161611";
-  sha512.doc = "72808d7fa6340d535db4aeeeda6e07dfb3bd29d910c13442722d2f8cfc0e19e446ba23eec098bbce505438352e2514aaf6411c72893d85fc960a7ce9c35c7203";
-  sha512.source = "b00242d2ff6f8e140431ca11df4db810fd0a24c6eca292ff700db8cc738771e6f0c9a3a33bfd34db23150b6e5cfae2e1dccb1c7d425656d2a1c8dd7822b210a1";
+  sha512.run = "6f33892886257274d3011b1d8e84d325477b75d6f151b1cd5223d456fdb1e5983146a20106fa19f3750b5898e24400a33e22de0571c9c301c3c0f6c0a1163e5f";
+  sha512.doc = "ff9bea1f499fe4ded275556e201be9259a6ee6512abe0a7665face275906fe77519114d77ca401299ed40d7c5b1175844c6464743c4b207ffb9e60cc416869c2";
+  sha512.source = "3221cb4b57e1a8d501648612e310107b55a002703855b338c92bfd758bf923b22e461d18bfd33d9e81717d7bfba3965fdd3eaef6f113353efc31337d3409d6d7";
   hasRunfiles = true;
   version = "1.4";
 };
@@ -32191,11 +34025,11 @@ tl: { # no indentation
   sha512.doc = "58773adb7493e6ef31d8fd3854a51cd37921dd331f56f1d9eab5283c121fa8c3316ffc41242356a87af04bb6da68761ea15829e5e8555d2e6cdbb68833c8d313";
 };
 "translation-biblatex-de" = {
-  revision = 45592;
+  revision = 57508;
   stripPrefix = 0;
-  sha512.run = "3968a37e0add02d6e31ad49b3a263ec35651c960d7132d1ecfa418888a51444430e8d6ffe4a92fd35ab3904ce6a7aa686085b412117cb282b7e2867a701625c0";
-  sha512.doc = "8f945fd3a4a63ef8e0e6e979bd530f1d13d11eca7490697d0c94dbd43ab7e6608e3801539ccaa47c48c81c52e27a14587f4a48887ceff524a6e188cd80b551a4";
-  version = "3.0";
+  sha512.run = "7e77035b714c1cc7596d1fa48e5d285ef573a0332b5fdb78e77b22742954f6c401d531de3175ed92ecf43ac4afbbd5a6a11a8ec95409f7227ba7995d5645179a";
+  sha512.doc = "83a35f07b954040e99fb072670a65c0343ef7f3739c476e347ff5ad85c0e4ce900c26691960293c99e1da7c9d97daec2b7daefcfa78cbe25f1b3759ca4e2d8b6";
+  version = "3.15a";
 };
 "translation-chemsym-de" = {
   revision = 23804;
@@ -32252,20 +34086,20 @@ tl: { # no indentation
   sha512.doc = "ae2f1aa60162512287f15c770a465c2e39abe1fa5d1223d96c524dc81bf065d62f307893d22dfc06fc50da8d63d817ed60c8f07fd4fede984b6febe9c8b7b710";
 };
 "translations" = {
-  revision = 53962;
+  revision = 57461;
   stripPrefix = 0;
-  sha512.run = "c4f55be467d87f49a0e65729769846afbffcca6e8b3611897d185ddccfbde7773d7c1e7591d4e67d234c2eb025a6e8774b22478e35ad83a550bec2854253cb7a";
-  sha512.doc = "e964c0af6f855b32a3ded46616325876f3a132db9b6afb1d885730d05d958750eb2014291eef21949a11e4850b91e84b02f45bd7d4d86ac3069ef32960ab7243";
+  sha512.run = "bc85fb20313e9e1e6eca3373eb1fa58f0dd3971c04039ead0cdff9479f9d8a2f7ace407bfef0b7a5caa9194573911e3cd0dafda51243db34e922d39af42b0f1e";
+  sha512.doc = "e5faff88c1b8f9588e6b7bba20aa3aef9711ee273d79623ea79f90345be6c6420595dcbb5419f87463c2a89b019b8999c330627a74f4f03ebc1af41ee7894006";
   hasRunfiles = true;
-  version = "1.8";
+  version = "1.10a";
 };
 "translator" = {
-  revision = 51279;
+  revision = 56052;
   stripPrefix = 0;
-  sha512.run = "6105a57724bb880dd4b2166c052aa58abac70fe9cda70db2941195cbb0fd2fd874c8ca1f1b658bcd52f3f00ade88683d2f0f86baca8ed68702caa18c5e2d5e57";
-  sha512.doc = "64547f60b7d6b99ad04fec07d9047282444f5c407accf49955002e74bec2b00b34ec8ea639eeeb9036f90a27460f926c0e400b3f27cf1e31b8d9b343370759b6";
+  sha512.run = "87eb30409270c63236f5933a52d7815b529a4aca0d7ecc2cb7cb69199d0597684cd48e25b2f00be80024f734d2f4067650adf457ef942aa8477359a6be20d886";
+  sha512.doc = "9fcaef407ea8149e35eb4ae2d4ea30a3a865ed31992bc9ed4e046059d93445db32a912e05698825df1c720903fdbadf4550d6fba7ab38990ca85d6dcb078fbea";
   hasRunfiles = true;
-  version = "1.12a";
+  version = "1.12c";
 };
 "transparent" = {
   revision = 52981;
@@ -32350,9 +34184,9 @@ tl: { # no indentation
   version = "1.0";
 };
 "ttfutils" = {
-  revision = 52851;
-  sha512.run = "9a473a7b6699ec81ce580c978a2a8987e6ecd3109db797d145f4fac3b6b3bda407fcbb2ff5c59eb6c8a2397757a2e241f1226058bb5982174b9517143d8ad0ae";
-  sha512.doc = "01a263779915465fa1dfc7461e536b606d1ca26801bf663af297c39292e2d554d559c43d748ce736c921326f296943bf98cda97f01ddbd2044b41c7084ba4d74";
+  revision = 57972;
+  sha512.run = "e96df8ea7bd77440c9a9e4fe408514e9293c45d78adac6b752b301a7ab01ef536478557d9fd7169ee3ba3eb56099d0878e55c125956670bb09454c934ad149ac";
+  sha512.doc = "fdd192c0de8c3d760fa584d43985e2d14bb0340315a6bd91b994a6613ace14cc04c6c28b32773211de46a64482a3b8e10fd89d5377d0ce2e1e4ea0477532cddb";
   hasRunfiles = true;
 };
 "tucv" = {
@@ -32365,60 +34199,59 @@ tl: { # no indentation
   version = "1.0";
 };
 "tuda-ci" = {
-  revision = 53749;
+  revision = 58661;
   stripPrefix = 0;
-  sha512.run = "2c53d5c65a56737a994b9463b18d81a96261f069bc94396e774986a42adabd0f75041265ea579dadc042b07046940f36f1c73600a8bb84956251a391e7215caf";
-  sha512.doc = "367fdde6b250fe609e02002bb35af92eb67c52b4234837a69bfeefb2f998f6563b1ecacb51078b5c5757da1c260fe30d57c323b6cb88af66c83e54dd26122b8e";
+  sha512.run = "a0b1ff24435c3c03618c9d9b2213379acfc0fd9184357ee209725de660f25260a81e3108e41bc8f425c06e11ffe18e0ea5fa3fdbb5404caf0edc36dc950da6e7";
+  sha512.doc = "4804e96ae31d171bbc4fae0ea23d6d04601e8fdb8963ad4cd681099538e35bbb3b4624d8d1a7e8fdd86a4657e391707bcd3418c7ba44c004779bc3535c94aa64";
   hasRunfiles = true;
-  version = "2.08";
+  version = "3.13a";
 };
 "tudscr" = {
-  revision = 53404;
+  revision = 58713;
   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."environ" = tl."environ";
+  deps."etoolbox" = tl."etoolbox";
   deps."geometry" = tl."geometry";
   deps."graphics" = tl."graphics";
+  deps."greek-inputenc" = tl."greek-inputenc";
+  deps."iwona" = tl."iwona";
+  deps."koma-script" = tl."koma-script";
+  deps."mathastext" = tl."mathastext";
+  deps."mweights" = tl."mweights";
+  deps."oberdiek" = tl."oberdiek";
+  deps."opensans" = tl."opensans";
+  deps."trimspaces" = tl."trimspaces";
   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 = "19ba4e0ce18b714fd62b81b030c58ed81781fcd199cb5df8c6d258a85fab3246295d662cb058b7bc0a413b5a202c5c459db7b7d450bfc3f5223e8a8b18d22074";
-  sha512.doc = "27ce6918d35adf0c788830c3a872b7cc3efc8be2e8485a8a33909d4ac32a2b4d4da41a7e278e9640b4b4128d53c196cf85e832c9a49eaa93452af0b958642afc";
-  sha512.source = "9bd2c55f4844028af2fef3122e2ae355d18d5c64b11028ab5d6ecbc69817a9fa27f03cbd179755f195c5ff8fcce90be57122e18bc78a910c40b99cee612f1d92";
+  sha512.run = "16ae7a0ca2544007dfcc1f2720080ae7f8453f535a696ff1edd252ed6a9d6eda9da48c80420c6a64e9b36c85322215c41477269871e285239707c17ae96b6960";
+  sha512.doc = "0e6d42d4bf8a7e2af363243be7a75d93fe489c7e99cc1c731e3e233aff96f2f7f00787af8a5e86419c8d5cf3c7bef9a593aed546e66c565343793f081f34b7d5";
+  sha512.source = "68651ed041af40431be9bac615e3fbefc33330fdf0be33d4cbc80d3cdf4080ba6e7ba5147cfb64101f332af0386cc29d44198fbd3594eb2447e680fa097206b1";
   hasRunfiles = true;
-  version = "2.06f";
+  version = "2.06l";
 };
 "tufte-latex" = {
   revision = 37649;
   stripPrefix = 0;
-  deps."xifthen" = tl."xifthen";
-  deps."ifmtarg" = tl."ifmtarg";
   deps."changepage" = tl."changepage";
+  deps."ifmtarg" = tl."ifmtarg";
   deps."paralist" = tl."paralist";
-  deps."sauerj" = tl."sauerj";
   deps."placeins" = tl."placeins";
+  deps."sauerj" = tl."sauerj";
+  deps."xifthen" = tl."xifthen";
   sha512.run = "6dd01a5a6faf37439ca9aab23534f99050b84bfac16df48545417ee03e72700344c25b2de3262e8e28406da705d50296473a815fa14b701c609b3715f01405d1";
   sha512.doc = "11ac57e79a05db644235b6db851473c75d1538a1261d7022a63d9ab0cc54486cc13b7cc95c44d16912952e46bc9264c1bfb831a728b51a03495d01f1963410d3";
   hasRunfiles = true;
   version = "3.5.2";
 };
 "tugboat" = {
-  revision = 52724;
+  revision = 56942;
   stripPrefix = 0;
-  sha512.run = "80eb6a023427f10c86ab97df7903e650f3b670b2a2aabb806e44735895156614cbc92e911f6fcd546ad90a2d8574abc187ccd7afc4ba8709f2b0dc496fc38a13";
-  sha512.doc = "3ebd5c7419fb6148eefe10d0704172f752065eb6e04b65e784a98b24d7f35a7f4de40c527b86ebb2f571047b62f2960600535a0f7e1174bfc9b8d27fbac0ab09";
-  sha512.source = "5d31d27e77211c2d35236894afe28088a4acb92deeb716f226dcb2e0fe3ebe515088fc97811b8e648177882f23e546fa237b56c34792885367cef5c3ce85f4ef";
+  sha512.run = "1a58d5dbb3c68ae1abc78265f5583943dbbe673efe5fe81aaa4f5b66e18afe573a2e135637e24b0026d68de994a143d2d9ea172c1bfebf4adb15927abf5f74de";
+  sha512.doc = "7db84d7657506ef2837eae7a8658c64cb0c6e6d58d5638f7abd936670166c0e75c6822f9deb6ab5916ef0d51f25a3bbfc76f0906c086dd6edb703140b68d72e5";
+  sha512.source = "9cf55ebca59c961ec144fe53d73dc01501b8f621716d20655661c133afbfa2b4e4e4169868d9f419f968787bdce3f6fadf66084dafcd542cb505aa1f7acb4e3b";
   hasRunfiles = true;
-  version = "2.22";
+  version = "2.24";
 };
 "tugboat-plain" = {
   revision = 51373;
@@ -32445,10 +34278,10 @@ tl: { # no indentation
   version = "0.1.0";
 };
 "turabian-formatting" = {
-  revision = 48330;
+  revision = 58561;
   stripPrefix = 0;
-  sha512.run = "7a6027cb84a6f2e2990d171aeb1e4cf528038f2dfa4f8bcd59f4775aecefd1a9e3d3dc36e9a7fa1904a9e42da1cea8b7843482ff8dbf00fef6666588f7b7c31d";
-  sha512.doc = "38d89482b53a8daec33e19fa9f6c782e42b61586ba96e7cdc91bfc839dc734352dd5abf9d3146c4eeadca5921d7a85189481393f0691ea5a9917547e1e7a1f3a";
+  sha512.run = "ebef1733d41cae66456e6a50c47ae0c66a7d7254a59e57f6af62e21cab73ae7a68092baa4706eb1f1e93ab152e0ab22550f0b4ce8cf9ac36eb3740530afe8499";
+  sha512.doc = "6cac53c6fe5dd36702ec07e22a00871932dd4b2e421649d33e33f50e8b8b8cc57e42c752ff6e4e2a53610d28f42ddc68b0b6c1cddb0a7a045f3a547c04e77735";
   hasRunfiles = true;
 };
 "turkmen" = {
@@ -32478,12 +34311,12 @@ tl: { # no indentation
   version = "1.3a";
 };
 "twemoji-colr" = {
-  revision = 53908;
+  revision = 55675;
   stripPrefix = 0;
-  sha512.run = "affbbf8529468cb034c42328a8c9226c8c4ad6213f087f20ae69e9d2631bdcecc826c3c7f12d63a46df798af99d896b114383adaabd720eb9821365a324ddb26";
-  sha512.doc = "32d51e15047a6b171987e7a4ae61b90d7280a5de80ea8b9859c7cee967869891fe1a21beb3676a04eaad317c441be5e8582697efffc5135e5363e071a162d656";
+  sha512.run = "0de16660597961e0a221924b8cf453f1e81c837f44d1f7c662b55e29839f1a0d5c105696140a445772d9c8b1714850d2b3618aedb757404dedbec46c1a212c37";
+  sha512.doc = "07e7485b6201d63954161e898f6f25cdc6f26332f6f7e9ee1b29c88e02a1b048fe22721bc3ce856d66ca255a1058cf080df86d333720c92af13a52eb7f2bfb6d";
   hasRunfiles = true;
-  version = "0.5.0";
+  version = "0.5.1";
 };
 "twoinone" = {
   revision = 17024;
@@ -32509,11 +34342,11 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "txfontsb" = {
-  revision = 52754;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "cbe87a0540b2bf74ffe26e54f744e9e705beed6711e688380000115154a79f2520257109bc929b747f6f3ebd84577335278301289d65eb0f427258a7e2035384";
-  sha512.doc = "e71808976ca1f15a6d839f251a75a9ee71c3763daa9e36dfe08dc0d8deb8b13841eb9c0aa423879c7c245faf4acb288aaf2d53506ab312993bd42f7109d8a7eb";
-  sha512.source = "a4a9dfff6b19d91b1898203b1b167b1c31711be579a6dd61e9f2e7924b239364fbcff491037363c24332a5bd1989c30b2801445eeb2ca633339d9285f36b2348";
+  sha512.run = "7b73b199b6d1f109b14154ff659089b2f3c36feaad10c26fdca80f5c4ab464f8a52fdd52a6191a89538661a3a9cac8fc45748cddd09b6e32e79f23db9e8586e9";
+  sha512.doc = "982d29750320bc1709ff8329effb3f7bedc6ded888a537aeb7f080c6fc37414956b1b1e149225cea3f3a60982575fbc943433cd4f9cc5e5d61c596973c07b3ed";
+  sha512.source = "f9e4d922abced380458f9fbb25c25a55d55e3a4b938c612bde03c0dd60d55573735816acd745c2785356e5956078615ada3c1396148f8d84a6ba9a805f4ae0fa";
   hasRunfiles = true;
   version = "1.1.1";
 };
@@ -32608,6 +34441,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.21";
 };
+"tzplot" = {
+  revision = 58558;
+  stripPrefix = 0;
+  sha512.run = "21705dacc5923685b56c47098df79313b94d95040210eb812da48fe3aa4d405a0d2292f395fbe3d88b2da39ca325653ab2c551faff46f34f912e2830736f09f1";
+  sha512.doc = "b957597b7a38652e6f510e21611def7bfd05f1302bba1bfe1cdeca62f9d0ee6ae6b21abd31c414a43048963e8d4f19ffeb13d18d4ade97a6ab0aef3a2d524522";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
 "uaclasses" = {
   revision = 15878;
   stripPrefix = 0;
@@ -32617,21 +34458,21 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "uafthesis" = {
-  revision = 29349;
+  revision = 57349;
   stripPrefix = 0;
-  sha512.run = "3f8146ae2cddcc8f136c7dad5cd926919d4d81a2b43038fcce55620c6c240326123b6f48c32504b44cbbd9b62aa3a61cd80f5b85c9890ecddef9d96342cc0eb7";
-  sha512.doc = "bb1e0fddf66350187d8507b34811c0c1ea84fbf0c6cd3e9eeaec8ef6c7111fa2ad1eb4d805df01fa6bed58030056ddf0b2b4305ad821e696fa6de977cff46c98";
+  sha512.run = "52e0fde63c966392a235239725e2db7cea70a300837cf53003f961d32f54787d8c4e70ee76577889ea543f884ed5ec281b345bc9e83872e5a131e55429f7afe0";
+  sha512.doc = "92c2a15a214f42a9dad8c0c50a67c68d037980b813e8ea4f6067341628f19f51de36a20b0e0d8fc49acbdf6ff026a729dc86e65dd4b8fa148a541d9535db0f85";
   hasRunfiles = true;
   version = "12.12";
 };
 "uantwerpendocs" = {
-  revision = 51007;
+  revision = 58669;
   stripPrefix = 0;
-  sha512.run = "93c494ac45f8713cdff15e03b5f17388041ecf569eea304966da980d413d542d72af79ce86a57686e790ac527c5c6e562a93b9612c03438aa7ea1acb3fe7af92";
-  sha512.doc = "94a6b8beddfa2b625fce0f75cbab43ae4fafa7cd7c5dd0568cbe46cc1a7b0218c74c5575d116c8e085bc0fddb62db0596635d549251a760ef93d93b662d40982";
-  sha512.source = "76725a1498c86eaf6e585a1269b737601136337770f304d598762aa7f354a478b70849b1a98ba8bdae71c81fbf0db372c275f95396463316dbb5a9631b068b20";
+  sha512.run = "45f3e26a15fa98f8a2bd890b8ef63124e135c57b688327f3baef90711e5036615cc832d83b72c91fe10d567a866aec79206932c8aa4c5de6a51af05ed76bf184";
+  sha512.doc = "f93a96eb20dcb6c5be91047a3ceaee5a7fc232fa250c5fb0a15bdbe1f2f13431aec352d7bb0f89df91d4c536915d59f719fbfd78d1748115308d1d9726636bb6";
+  sha512.source = "93d0a3ea2d323958d15b714fc392cb2893d899e03d28d75c25272c355861244f5860f3aa8020663c20a51b7e8471c24815b9431646eaa552b2e44a125e3a07d1";
   hasRunfiles = true;
-  version = "2.4";
+  version = "3.2";
 };
 "uassign" = {
   revision = 38459;
@@ -32675,12 +34516,12 @@ tl: { # no indentation
   version = "0.03";
 };
 "ucharclasses" = {
-  revision = 45024;
+  revision = 58029;
   stripPrefix = 0;
-  sha512.run = "1c90d8c0f27919e8b3e8bb057a43bb1878b1bf35840d13b6304edb24df56086081883731c35d1d58638374bc2835ac3f111a23981459357b1d1883168a4dd833";
-  sha512.doc = "21453f2a5fd247f05033b929200bed163391c718ac0562953a732718b8851546b1e2b8c1fc35c1412def0ac368c47ef1c06d9d8f4bb724be6863c2568662d10c";
+  sha512.run = "2b4a160c145fa6e4d73be4f0590d73a302655bf4274822219c5b41e145a8dc5076b3b8bf39dda488a5cec80329290db6f3dce431733ed8b4b9c59bd22a0187d5";
+  sha512.doc = "4d715b69d34dd6a2eb485aa4098e51f2f72213ba5972bb51bb0fd60bbdbc3db5846f87c859d77e694b2d55be4475bdabf3bb507020480f68f7b5f3884dd3382c";
   hasRunfiles = true;
-  version = "2.3.0";
+  version = "2.4";
 };
 "ucs" = {
   revision = 35853;
@@ -32708,13 +34549,13 @@ tl: { # no indentation
   version = "3.2";
 };
 "udesoftec" = {
-  revision = 47164;
+  revision = 57866;
   stripPrefix = 0;
-  sha512.run = "668c96da10c6fa73d9739e00e0144d20fcfe1677417f648c205fa0fd49eae7ce9d5460e30f2002c39791a41e7db19d8ac004b4bb0d4c44c230ae1ab1ba884719";
-  sha512.doc = "fe902d88de4e7e98a5416bfcd67529d860ee85733ad9f76e8ad2112fb2ec071c2fb26d786e88abf8fe8c8f7d7e199a4f0c15f728aa1c117bfff7e32941e677d7";
-  sha512.source = "a964bb8d9dc2e10155b73121c062cb101108c94def892aeacf166bd739c64cebbf5132e2b94c5cb8f4e377b94005fb8f90b5a2a4bae4f9c5dee5a6551e821f9d";
+  sha512.run = "56171faa46267dbd99185807f619a673cc1ace837eea3c0e8659c4d7fb50aab7f8842e259f433070b8eb54390d3426542c3443a62d37a1aa9ae7029f4d7f022a";
+  sha512.doc = "463b9ca1c153da84ed0045a2adbe8129031bab79d0a586710b6cbb9fca9b84428b7036848efee27a075b40f0cb015081c89e6e7f5588f1e2bd011d81f40be721";
+  sha512.source = "99273b3d809dec7f508bc3f1744143804edfbcc2b3ffbdd6fca4e51be2f98f3ac0ab6852ccd333c5a69a627dfb108952d511a5398eedef0af4306ab573ea54e0";
   hasRunfiles = true;
-  version = "1.6.2";
+  version = "1.7.1";
 };
 "uebungsblatt" = {
   revision = 15878;
@@ -32886,10 +34727,10 @@ tl: { # no indentation
   version = "2.1";
 };
 "undergradmath" = {
-  revision = 42926;
+  revision = 57286;
   stripPrefix = 0;
-  sha512.run = "1fa7b30670ff888b7b848b756b960690489aa7ea12e5cc5cc97b56061cc91c2fc4bb2ab0a3a2eaf13177baf760edf8bd7f222dbe02cc16ad7b53f57b4b4340fc";
-  sha512.doc = "5dfa5955c7e9ed8fe89f6ccfb4517e699861b95619fc2013631d457938d64bd56bf34718c29b154a46b8519ec61bb102963668b13bb414a3a7ab35b748a981c7";
+  sha512.run = "948d0f0ac20a63fb0c6de8003c572c11704d2016d2ddea6674f58742e997021d709d51806b5acb4716c79539b96086758814f4f5d303a257768c8716821e8451";
+  sha512.doc = "6300a5d0781bae331091cfc8007e974ed3534ec3672dedc080c8e118e8526c98206438a6841d50d2e642e8d6c7859cabae14e140c211bc8175e7f9d1cba0ddfe";
 };
 "underlin" = {
   revision = 15878;
@@ -32925,17 +34766,17 @@ tl: { # no indentation
   version = "1.0l";
 };
 "unfonts-core" = {
-  revision = 49455;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "5b405d4d77d15392ce5c90e9b50b6ab68309fdff67313af2749ff0865f46ba02a40e4850a690f69834f0b6a7c7e7ac33d3d422a9b241586433718f82de31bc30";
-  sha512.doc = "aabc766497c311a943f0a269d5822a44ab6baab6c8a82fddecf0b53010d794173d417f46fa6c073d2db453540a76866dd2265daea5879ec8c0ffdcd936d29a41";
+  sha512.run = "5476421a802ec3daa8fcb8354924ffb090aa9ea337db315c813637fafa445ef82601edc61cb7aa424bd7e2deee7607902ed33f0cfe70c214901d4c52dfcff6c5";
+  sha512.doc = "8f51172be1093ff9da6ebb7071f5fea435e2bdace5619faa24ebdef52b3e34197d91b8f9d302844d4e1377a2a4712247743172afcd4b01367e9f166bd76112fd";
   hasRunfiles = true;
 };
 "unfonts-extra" = {
-  revision = 44465;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "ba57b43a7df5d1f9565a08e0a0588d9a3ac9702041763ee663dc8c906279f32c363a88e1c1be098e0d4e9b26550121e686cbb6fc6b0256bb91535a4a1b12a083";
-  sha512.doc = "5fdc1ebd1d939ba99d4bb11c2d89128a97adaa4a0696abbc7517ab55ce39b87e7e7801e7a30b93c1f95e92bacd7d862144191f0ef542561816f6d1b84e9a7131";
+  sha512.run = "9cf9a73ba3c2190da7999c3b770e92d8afb43c640d651173c126e930155e9f87f371392accd4eadae8922ee846a5e02c0eeab845561dea943b34b185164bba3c";
+  sha512.doc = "6173d49bb64c9b162763ff08af445e518fa650fcc13e02f5c72454d335285d9c82347cf79f945fae94429f3a9d15f9c9b58ff1d175c8f59ea7b75766cd279303";
   hasRunfiles = true;
 };
 "uni-wtal-ger" = {
@@ -32955,10 +34796,10 @@ tl: { # no indentation
   version = "0.2";
 };
 "unicode-alphabets" = {
-  revision = 51712;
+  revision = 54236;
   stripPrefix = 0;
-  sha512.run = "281c7fc8b290aeb264bfad6e69a7e6b00636a58b15a29129c7c7003292d4b13570964600e8040ccecc1272747b9b84d36f8d5210c231a108fe22f9c79882800f";
-  sha512.doc = "f8297f2386bea8975ebb27a73044ed464077dcd7620bf7adfe70a3d07e8814c8da28af12d05a7192e883b9d2f179be3a928bccd77e557a4deec9c545f2f035d3";
+  sha512.run = "e75df935a1a0895f5bda9854042a38c92627240f1318bdeb1e39428f50133dbe0b606e66b1bea6f73681fb40ed73220c5e26a60eb4ad10b6106c3e16d778e4be";
+  sha512.doc = "317ddd08268f38c197136d2755fa00738270a1e179eb8ea92ada50edc69da61fff17359f38fe33afa1e30fafff23117bf98895b9218bffb7b2242099d5f5aefd";
   hasRunfiles = true;
 };
 "unicode-bidi" = {
@@ -32970,21 +34811,21 @@ tl: { # no indentation
   version = "0.01";
 };
 "unicode-data" = {
-  revision = 52961;
+  revision = 56768;
   stripPrefix = 0;
-  sha512.run = "6502cb2f4251101727d9d9708450a47d46ace34bda50b6d760fb6ca3605317e948ad2b47d3fb4ac1349e55460a75a99a1aa56c59a444945c220ed8fe55c3c631";
-  sha512.doc = "6f8214ee77f098dff74941ba472d8115c64953f3f925222c6bb1fe756ab07a5ff4ca44ef2cb1515241f46d572c9d67df96ccc461f4923471edd17979604d83da";
+  sha512.run = "f966d643732bc6d9743d54cb2981e6420dd5bc33a3c2f43bf17f2f14afdfccf0ddd8068a13ce9547d60c8ee77559834f3cce97df8bd5d7252eebf978a3429b0c";
+  sha512.doc = "1093c6e78d8f8716cec8ed34444d5e95628c2d0be4b61cb3dae72563b2e3acfc1596b5e25dd8c101dbc8ffe15b7483a198c30f459eb76418381be3dc6caadbef";
   hasRunfiles = true;
-  version = "1.11";
+  version = "1.14";
 };
 "unicode-math" = {
-  revision = 53609;
+  revision = 56594;
   stripPrefix = 0;
   deps."fontspec" = tl."fontspec";
   deps."lm-math" = tl."lm-math";
-  sha512.run = "7ed199c32680ae776c6367cc5d4d1c34826d6652ee50aa16f7952151b339d07809186c93a939f945d7166002ada059b3f02f54fdf5770b0b1cc50c6144d840ca";
-  sha512.doc = "47051682a03bd91a9e9d6861239baca8c0f34b0e2b1b94a4a1e4100a522c639712fd9cdebf4ab7be1b2d09e90ed6ca2335b4bce0233a8e047dbe5090493fbecb";
-  sha512.source = "b041007d75ea2bbcbe5e13c6797f3dbfed5bb7035ec8f9d4b3116304dc8a443fafdea6d31f957a6b57e2f9f3802ad9781fbbafc7b78404bfabee61925d2b87d9";
+  sha512.run = "f3682781aac853ae96d7f09131cb102832c16d6554a070da6c6a499c7e7cfee90f05ffaee0e30e6b2e2e1c9d7d7f0fa285b6912ec95f4ad318df3dc1f529b23b";
+  sha512.doc = "ac7d2dbb883098b9ace6a1a99af61afa2498e7ee3e02131e4aef41eae6585061f04c181c0d73f23e126f8f2a5fa6f5ea6475af8ce6ccc1d9ccf8d2b82a22b1d4";
+  sha512.source = "13ae4f09246d2a4ea4f2595247a1b56955a905beb026dc78da37c07583388db387f66e574f1513ba89375f9e2e0ec1be0b65ad38e0364dd05404a7aed895bc2c";
   hasRunfiles = true;
   version = "0.8q";
 };
@@ -32996,6 +34837,14 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.2";
 };
+"uninormalize" = {
+  revision = 57257;
+  stripPrefix = 0;
+  sha512.run = "b9b0e91a61d99005be4f37d2e5aababf70729c60d959cc57295a7197b5e360ed183bb9cd80bbb287508bf584db48f061bcbb25c6a5bfd0936923b106d9962f60";
+  sha512.doc = "804c2e70ff09a677c30f531db5605512453506ab83dce8f9dab4bfbb5602f8605376becc8f65cf375b28c9d6d35ad9f3a92d6f185697e2e9f9d367638d58fb56";
+  hasRunfiles = true;
+  version = "0.1";
+};
 "uniquecounter" = {
   revision = 53162;
   stripPrefix = 0;
@@ -33013,6 +34862,23 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.92";
 };
+"unitconv" = {
+  revision = 55060;
+  stripPrefix = 0;
+  sha512.run = "2d1b66ee4ea2cc4bbdf18c5fb88a3f6c2ec438361d3e1cb058f9c3cde3272e40d471b48ec24749ab8fb714eca4b2f6e311c7af951744edcd04154c0f016ca1e6";
+  sha512.doc = "f01593365b13c8447c6a0ca34027956c9eba7daf4921e5fc5815fead966916b70ba5d6429ab068b3f0bbe98dcec903a59fcd6982d41769b6ad5dc0db86d7b60c";
+  hasRunfiles = true;
+  version = "0.01";
+};
+"unitipa" = {
+  revision = 58749;
+  stripPrefix = 0;
+  sha512.run = "968af9eed2e188e0bbb816911ee734a74b29c2f3b42b93df7e7844d368737593f925d846be464bc0334cd216709e6e8582a291dd1c9cbc3287cb7b3144e9a609";
+  sha512.doc = "b770d4ae25c99d1c22842ac6581a29a66a43d48912daf4e8d7ee9ce4da0d562af3d54e2741a4720993a3ecd2c676e6ca3e39969c0b0d576d3a820f84434177b5";
+  sha512.source = "e54fc2dc346384041fd571c6435b7cdde73baa241b169e941ddb7040c5efc1353d6312502bbab296a38b89735e8ca08b2f111287c2438ae09da8e930760bb276";
+  hasRunfiles = true;
+  version = "0.3";
+};
 "unitn-bimrep" = {
   revision = 45581;
   stripPrefix = 0;
@@ -33055,12 +34921,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "univie-ling" = {
-  revision = 49785;
+  revision = 56913;
   stripPrefix = 0;
-  sha512.run = "33cb5fbb0b8cf2a5a49bfab100c584155a965bd1304a8f16e78ea3c5e5007e43580f3839367cfed28e6f20e8e6f653e1fb9c7aa357e31e41e8f688d74a9f8800";
-  sha512.doc = "52889934cb166ecfc6d5dc4433a9e1c4df927007584b6513d5a254734fd9b82c77af4fa535ddad34494fb207a41167080828500cce02b34f2f88787b8ec783d5";
+  sha512.run = "d4c0a0d760fc6d9c5fb2a56a7040b37a2fd5e20c13761374fb8e83763e0e01090ba3079a589cd6544c707148c17c389e377598f420d73cb942da591ddeffb943";
+  sha512.doc = "ded1f91665ad5a8e13bdbc5b01fad86f73efa77d144b946f8049fa6876b26cf237f645250137899e06d93bb19117120be9fd8d9651857bcc0a19df49ce87b664";
   hasRunfiles = true;
-  version = "1.9";
+  version = "1.13";
 };
 "unizgklasa" = {
   revision = 51647;
@@ -33105,10 +34971,10 @@ tl: { # no indentation
   version = "1.0a";
 };
 "uowthesistitlepage" = {
-  revision = 45022;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "28f5d3f8bba3c0f3ee1cd7ada8bfdeb815ec607565e7385fe8483d66aef9b9e3c39cbb9796f84c58e8a6b4772989c2aed3c5407d64aa740eed2cedfd26d60e8a";
-  sha512.doc = "beda6c309230f20abe8ec32e41258a42806534bb181e4cd070c7c9362a677280a0133b4ce83fc7475aa785a778480134125a162ae7d96d791eeaa1a9af621dd2";
+  sha512.run = "3eca5009deb6ccf7daf6d31ffb5e6d3c08ff26395e03b80617411c4dc4049bb2ebd68628f285b95b547bc512fd1cc83246afd5513dc54cb1900edb813f77ede4";
+  sha512.doc = "e5e2ec32edb38ea3960922c5f38c9dd9705914f49421b89cc1cb8e6f1d8213512c804c084f1883d1682d5c65b9c54511ec47cf700ca731c4bc352b0bc4e85ffb";
   hasRunfiles = true;
   version = "3.0.1";
 };
@@ -33119,39 +34985,39 @@ tl: { # no indentation
   sha512.doc = "f19dd751bffb9ee92ee80f74f692ac410781e87817ee841c01f37bac87fc770b9fc97d488ffbe97490206899653d329034d82cf649de0ee52cfa4643f956d7de";
   hasRunfiles = true;
 };
-"updmap-map" = {
-  revision = 53971;
-  stripPrefix = 0;
-  sha512.run = "087753526998c68fa94dc86df6beebd6293dab9bf87f0969bb80f362b6d33215bd4f3b9baae5c8a22adbe0e3ecd5d1b8e4d0f71eab6cf6c1a932e7acbc94efbb";
-  hasRunfiles = true;
-};
 "uplatex" = {
-  revision = 53786;
-  deps."uptex" = tl."uptex";
+  revision = 57972;
+  deps."atbegshi" = tl."atbegshi";
+  deps."atveryend" = tl."atveryend";
   deps."babel" = tl."babel";
   deps."cm" = tl."cm";
+  deps."everyshi" = tl."everyshi";
+  deps."firstaid" = tl."firstaid";
   deps."hyphen-base" = tl."hyphen-base";
-  deps."latex-fonts" = tl."latex-fonts";
   deps."l3backend" = tl."l3backend";
   deps."l3kernel" = tl."l3kernel";
+  deps."l3packages" = tl."l3packages";
+  deps."latex" = tl."latex";
+  deps."latex-base-dev" = tl."latex-base-dev";
+  deps."latex-fonts" = tl."latex-fonts";
+  deps."platex" = tl."platex";
   deps."tex-ini-files" = tl."tex-ini-files";
   deps."unicode-data" = tl."unicode-data";
+  deps."uptex" = tl."uptex";
   deps."uptex-fonts" = tl."uptex-fonts";
-  deps."platex" = tl."platex";
-  deps."latex" = tl."latex";
-  deps."latex-base-dev" = tl."latex-base-dev";
-  sha512.run = "5545d71ef35856e37a477a0f3fd9fb9e6138609e81b504f9a0ea5f06bf08cde0ed6a6f0f6459a57a317531cb93967013ff19872907b15b8c6220297cc28882f0";
-  sha512.doc = "208890f08f3d0e6011e49057799d34ecd33755133f92f69cf024a91da01ccf991e16550f20607f5ae825b8adb3f3b83d0994275ec07b9a68abc3a96ae62e4682";
-  sha512.source = "f1980b483360213db4734d0727b1cb9b521e4941f022c7ab986922d5b58e620bf003403087d3f29c9768b0dfba4b7e7246e1820a9bd1c7c487f8557789be4b05";
+  hasFormats = true;
+  sha512.run = "8acef423a0359136795301e1deaba156c702ee360f309d1884a90b3ed89842389bcc015e70c1461611ebb4a21fb9d5853db5ef40226ce0f61eb11f2a424a70f4";
+  sha512.doc = "7cbc40c770c1e04114add004fc4920e3c7dea62f959d06fcbfe54b9fdc45893214ef3e960ac685cce258b07fab424aa7a242da368aa1ee0015ddf8579d582820";
+  sha512.source = "9c1c1d0fec518410938e6642123f64242a6ff0bbb6425945897c10754e436fbd82d6739d31717152d183da385800a569d9209f37dd38c8eb77767842e0822a67";
   hasRunfiles = true;
 };
 "upmethodology" = {
-  revision = 52200;
+  revision = 54758;
   stripPrefix = 0;
-  sha512.run = "ceb42b6b890c434de27445c564999e5a5c8ecd962061658f27cfbc59aaf405fd33b2a44474fb52b927e9e8721315dd87f907a084647433b251bd17a5ea79148e";
-  sha512.doc = "a75984bf9de36b382e29d818736963df4a19f341240f227dacb1496f034484cb3340600e3d77ab82435781ce2d3fdf1703d8322a7a9c4607e98fa41790be3f60";
+  sha512.run = "848e1a982a1d0667082b12970a057f639bcb8eae0c55f984508ace27e98bb0b2c9d285a3730c4c7eca4a1ff361e3b2e6908f85c0e0768e9b4e8ccd66232ec4a6";
+  sha512.doc = "856e798164ec708da8f8695f9f166cedb36973f6747a01b2cc10cb5a8d124cf4383a625db57578666d1fc4658516dd8e9bf94221967b1829cf5356314ab121bc";
   hasRunfiles = true;
-  version = "20190928";
+  version = "20200406";
 };
 "uppunctlm" = {
   revision = 42334;
@@ -33171,32 +35037,31 @@ tl: { # no indentation
   version = "1.3";
 };
 "uptex" = {
-  revision = 52851;
-  deps."uptex-base" = tl."uptex-base";
-  deps."uptex-fonts" = tl."uptex-fonts";
+  revision = 57972;
   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."etex" = tl."etex";
   deps."ptex-base" = tl."ptex-base";
-  sha512.run = "a2f63dadc6e4e20d4856cda577f7f49368ae8951cd5025c88226b11448dc72d9995496367de9afb2b528b02a7622200267585552dc2979d384f31f137b0e8dce";
-  sha512.doc = "8cb4a6d499ca37348953d39c4a6a2041daa09152ac5f780e87d1f903a19c5ee6b2a3f7e011f373c68de047b02aaffaa5e2bab77f5aef7ae28a0b9f82fe3adbb6";
-  version = "1.20";
+  deps."uptex-base" = tl."uptex-base";
+  deps."uptex-fonts" = tl."uptex-fonts";
+  hasFormats = true;
+  sha512.run = "1ee2679e7531fe4406fea72f7efc482f7900da50cb74045a62c0b5e5596862011509c3d966a795bc13538170afd7db26e8cf4f406391a746e45804414f26cff0";
+  sha512.doc = "06a3459702bc9838f2246aad7af99c427413a43356d88165e68a132bf8b926d9ab668e6dc10127c27eaac6526085c3fa069bb9709833cef241c94d0f4fb3e02a";
 };
 "uptex-base" = {
-  revision = 52151;
+  revision = 56832;
   stripPrefix = 0;
-  sha512.run = "532360808157041a67221f12f78fea1197ebf083f3f90896b539fd7ae9501bdf696edadc6c61edfc1e5d1079a480ec7776a814dd8adb08fae194728c7f61e978";
-  sha512.doc = "dc1470c66f000bf80851dd317b7eb26dc12c567bef647e2fd91bbe3f4bc7c29695b7c327781a23e79ea86a8bcac2db8e328bcfea2031caafb9f63d85209bae2b";
-  sha512.source = "f8917edd4200248b167bad8366c9b51e247591379c4d069d292cce513708ef7b1412dd66bf9fa6156b703adbfee7c941c6f2637c834cfef18fa9adf9991ec3ae";
+  sha512.run = "ad62a640e04807f62f9efdd67720f57c7dbab0190fcfea7a82109f4f8223138b8d413c49e878c70ea04f733576828a4bdf475ebd1b6ed471268cb21bbfaebfae";
+  sha512.doc = "dbfd62df1619e9a5814fde01796203180f77fdd48fe603cc1fb6701b2c2763d507eaf9925d2555a9fa6281e9dbf35c7218a9f888d325b628bc2d8036bb393637";
   hasRunfiles = true;
 };
 "uptex-fonts" = {
-  revision = 49985;
+  revision = 54045;
   stripPrefix = 0;
-  sha512.run = "41fbb7b4a3e193744e36cdd1ab23145709b2ef94de30a18dda322f1e0539106f62be95b1a763750e72c81a7fe42053326c56efe0486254ba486c731b65bf47e2";
-  sha512.doc = "9b8004ecb67cea126f0299d3eca749d5f011b0b3c50d23fba9a3adb4b9e5ab6d5e0a24494b9420e3a315639eecbe86a9c740b0772a694f2b36ee6f8b7e316c3a";
+  sha512.run = "600d47ed277ce4bc0ad0de219e307b2c4741229c0e02ad94f7dddb2f309309922fcfbc9de5e115d85ad45b53485ff844e70d5af8086f7a16980ac579795c2e7f";
+  sha512.doc = "3c41c19b078bb5f66b8231025e39df2b7b9b959d3a4a45b04058f670d6a08e83bef50c889045aa55caddfe7ccb8a5c7582c43115b4749232490f999574fd0ec7";
   hasRunfiles = true;
 };
 "upzhkinsoku" = {
@@ -33233,10 +35098,10 @@ tl: { # no indentation
   version = "3.4";
 };
 "urlbst" = {
-  revision = 51530;
-  sha512.run = "31ab9071a50258b405e2850c6fceb4d30b3f71b731c06d4fbf6b5de25d7d23509a374e6c89dd58dab869e6aa987a234c21a0c6c6a8f2780826c5acc46f784eaa";
-  sha512.doc = "0dd2c6cfda184d77866503bd94e79b7c99d20f4b9627e01946887aee80318adb26528f352fcb0db764e37d7b2292a78f0d80bcb51ca7cd95593a879063154315";
-  sha512.source = "96d336764d7892af97b7fbbed48a121b8e058efb56364398f50d24bd598ee387b0544712bf95886641077c22d3542ba2facfa125a89e8072c0a65737ac18cd97";
+  revision = 55777;
+  sha512.run = "86b600d8beecbf310596915225ae58502d7b5e92783522beec0c6ed365a44e058cb97bc2d016d66ef9a26196b33277c93f82957ee557348ef170a11d58ba30a9";
+  sha512.doc = "07cffb5192991e30fd7d6823435718b241841f709f5bef86ff7e0a69102ec93d513282aaf8f046a6205a56997b7ff3ba9442446254467f4490e537a4874a7a31";
+  sha512.source = "eb93a704fe994add75e3cd5202bd5a5fc9e388d35f125fa60bbeeae09bc20d223fc8e34d9899d6f378938f33ae29b96a67b3a1fc3a46782a1caff030975738a4";
   hasRunfiles = true;
   version = "0.8";
 };
@@ -33283,12 +35148,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "ut-thesis" = {
-  revision = 38269;
+  revision = 58661;
   stripPrefix = 0;
-  sha512.run = "06a8933b03e02bd092a09843686d518ab58a47a4821bcafbe9568eebbe6d4e72e7815752016200ba5d68ab193408847c9f0a784bae9a65af4d1ad06b501c03f1";
-  sha512.doc = "13dcfbd7dfe45a4d1fa0e2ad8a06bda30cf5a76c993e6a6614d4fcf18964f5d44072c9c75acb6739b8df977590fd2c55aa193a2c88665e38a4e54e4411ca85b6";
+  sha512.run = "fd5ba4022fca6b40bed994692b04b007d30fb659c5439ca0fc86e664ba8f2f59ea42655f34873da18154ffd998c9880e314020712f1c0c7a30bccb34249ad8b2";
+  sha512.doc = "8d300fc610b1132257cfbec10fbc1fb6c1eee287bd792102c8a114a518359a5f1bc4f31f1118c26e86d4a66dee0fb9117d15777dc91cf955fca879ad7e125c7a";
+  sha512.source = "6e3bd80539bc1a5ef94d800519b6296d776a702c69190e213fa51e23d108df807a69a9161e95485f8288c184fedfed8131db3ee96e704f7299113c9bcfd4a820";
   hasRunfiles = true;
-  version = "2.1";
+  version = "3.0.1";
 };
 "utexasthesis" = {
   revision = 48648;
@@ -33298,6 +35164,13 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "1.0";
 };
+"utf8add" = {
+  revision = 55291;
+  stripPrefix = 0;
+  sha512.run = "38af66fa77e637a5bffce68d816cf6aa4e34ce5452b690874de91d9c10199316d60ead3736c14e7872cc4562ba1fe4d953c4fa7887767327d06547b68f85b81e";
+  sha512.doc = "f521642270b8cf26f609c050eaf412f2fcc53fc0b5b3e1873c141a5b5039fff9d0387b0ac83d0d831d22be256d3eeea4db51c67da2642372831976555eb6600b";
+  hasRunfiles = true;
+};
 "utf8mex" = {
   revision = 15878;
   stripPrefix = 0;
@@ -33305,6 +35178,14 @@ tl: { # no indentation
   sha512.doc = "cd438089d90faa0e9144d23adb78ce91d85b80ce084cb92511cc23882c675cb654cb704aebeb623bb29c70b764c8a0ab19915607664895c457c583f376c1088e";
   hasRunfiles = true;
 };
+"utfsym" = {
+  revision = 56729;
+  stripPrefix = 0;
+  sha512.run = "cbc9203663a121f2c421d07bf630831db438aa74c6d6ca95d3d7d7f5a5736db351e0fea5fb269ed2b02eaaec5d85de52f2f9ca90d753d41ca9da7328c6af2326";
+  sha512.doc = "3b90dd9075fa3b4602e76593b90603ff4022a003599d12297bcb482fc28995ac204de1908baef9e4506a0bba82edf09dbf6314dd7034808aaf7aa38af3bee6d7";
+  hasRunfiles = true;
+  version = "0.8.3";
+};
 "utopia" = {
   revision = 15878;
   stripPrefix = 0;
@@ -33335,11 +35216,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "vancouver" = {
-  revision = 34470;
+  revision = 55423;
   stripPrefix = 0;
-  sha512.run = "8fc852e2137af0b1e0664ecdaf115a6c4c631faf840b5564b9dca2f8c457f8fe33bd7edd92ff4590c05ab13c23a9b1771b7e688ee6f6d700a9feb01f9a921170";
-  sha512.doc = "50ec342e62a14f417b8a0d4085ca46aa701a9e2ae5630daa2159ddd6532a0c3d5769a0cd351c932bc54395f159d560a259e3996f4f157e42d0dfa41aeca6dc80";
+  sha512.run = "2dd41dd96607ecbb4c4bde1f6ff3c63a3e79efe7d025fce510e1b0dfc5b8d5bb19826042c04819f1d84178fce7d077e8f7b25fa9beccc4ed88db2683e716444e";
+  sha512.doc = "18069bd05809a9c8dc6a5e45af304dc74f40b5304c34064c7de67a961804d540a4cd892b4de380cb6c59a334b09cc165c2aa81749be1d4b2fe56e7fc7528e0f9";
   hasRunfiles = true;
+  version = "0.8";
 };
 "variablelm" = {
   revision = 46611;
@@ -33397,19 +35279,27 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.4";
 };
+"vcell" = {
+  revision = 55191;
+  stripPrefix = 0;
+  sha512.run = "7ca3866a8341d756cc567f3b71122cc1a9a5060399f3258b9de809aba2c0d2944a140a6d0d76a4dd8593cb314a8bf469829f5d5d383f3718f5e8422f06f5f8b1";
+  sha512.doc = "568ed02cc71370c3a77f468c43cf6cd72b79e9572f463c7aeca663ab725dff4c7db1a630ac7eab7f71063b115fbe3d8299190129c2d50cde859061bf62fdc385";
+  hasRunfiles = true;
+  version = "1.0.1";
+};
 "vdmlisting" = {
-  revision = 29944;
+  revision = 56905;
   stripPrefix = 0;
-  sha512.run = "58cab8cd7d23326b39e76a91db1bdb0b0cc9e1e6bf457d151af39a4c94886f623b8178de835e673118d5b797510d6f2fe5f97f6c0c8b5bcf679b9158ded3c941";
-  sha512.doc = "a71b798d364f429c4894db38863301c1601ba7f2bbb2cf8e4394b48c5b7e3541cefcf915ca52860c0c55744ac2aa8fad82ea66142ed2fbfa81c05da211f04f74";
+  sha512.run = "4c4b5deda36fab8ac8cadfea2093da188284cb26eb9874f27ffbedab1235d4e7bdf48e977a714fb33f0ef2c5cf4c0b92c14767c565efa6842cabf451af51c1de";
+  sha512.doc = "fcd476e8ae2db61e3a71b1dd4bffae34e6eedaa409dc3434179ca66bafa2dc4b5790bd06bf90db609f91c682d2b7bf9d5effa893e5fb914c26c20acf67f8b22a";
   hasRunfiles = true;
-  version = "1.0";
+  version = "1.1";
 };
 "velthuis" = {
-  revision = 52851;
+  revision = 55475;
   deps."xetex-devanagari" = tl."xetex-devanagari";
-  sha512.run = "92ed388e406324c0189f613197869d4ccdbef459fba5d1408e7ed9068777ad28fe7193c340d1786e21ec8178bdb275603cda2d86d33d3a6318788580a015a40c";
-  sha512.doc = "9b928842995afa63db5aba51e6605d3fb036687e83e609422954df4c4848563e7a6b62e669ababd1d2804077e8add424bfc88d965ad5ce1f904f1820cf750515";
+  sha512.run = "451023c09755f3aa884128a6ddd5e70a6820724de66f8923deea812a8e28c337676de95aa98a06a96013502fa24e9855b24977603c675820b1d5a0a056fe4cab";
+  sha512.doc = "e17270b0e427e3ff02b1d43e578815ec37c0046a20ceb898a357041f9184044162077d9fc64f66d955d774637a8d2ec59d31b624dd743113c972d0854075df10";
   hasRunfiles = true;
   version = "2.17.1";
 };
@@ -33479,13 +35369,22 @@ tl: { # no indentation
   version = "1.2";
 };
 "verifica" = {
-  revision = 53722;
+  revision = 56625;
   stripPrefix = 0;
-  sha512.run = "7fbb232e4d732df813520c0a4085540bd5b16ca5cb4a68ad3fdffec8de273d821bbcc6304cb74fd06d30ea8f30e50475074c183ca96c9d46c32e818249f7cc45";
-  sha512.doc = "822e444c7657427dde2b3a51b3f2f42f6088e66933e51d1533782ae76f2e8de31d2cf1c5e7824e3d90600a971f253a7eb84e0dd0c874446cc0bc0b914e0a691f";
-  sha512.source = "a3418fecbaf2775b3aef2db90603dc64b0a2be211f02010d62e3c73517334d2628a68b17f911b3ea257f3cf439b5bf1f8360e97f5c3ea6ad0d7605ce904922b0";
+  sha512.run = "8c3258fdf2040e00495b56605f88160b5179743a7ae3abc6334e734ba9f1fb122bf2e4847fd9a577c1221c9e22dcfa650f15612d7a005b3719ce6c92df180bb3";
+  sha512.doc = "de41df53ca78cabf7ab3f672dd00c0042cfd8a71219d694985c18aeffa045dcd37c7b999058d7edf6a2348d83c9ae27d1e242f17a91d43b61f2b873ee2d157ef";
+  sha512.source = "85e46be6f8ee729753362243492c7946166049ebd0a89f0871bb9308e6803f5ef9416c30fe380be4961aa466a03afd9541d09e5920a196550582d326a6de8b9f";
   hasRunfiles = true;
-  version = "1.2";
+  version = "1.3";
+};
+"verifiche" = {
+  revision = 57766;
+  stripPrefix = 0;
+  sha512.run = "db44ee3db5e17a7d8508eed3fd93781bd2ccb1a29ec04fcf2a28b91fdeaf4130b8ea5f09c0be79c5ed9da9b3ea729eb9b31b31374ce82e9602501e4cfb26cf9d";
+  sha512.doc = "d3477629537881fdc6d8f7b739daa14178de3c5f9a4b35c97829c6fde2de82a85b960cd408cf2126e87a16423d985c2ffabaffa56a891893006d2ef8c9fd04ab";
+  sha512.source = "b4aa0ec88ff81d9bef8cb59cd3ce90f1d5fc08c26b9224a5d561c54ff144af2719affeb32549f5a5691c2894f77d23c941d960413e69a3af3b5ca27c944d19ef";
+  hasRunfiles = true;
+  version = "4.1";
 };
 "verse" = {
   revision = 34017;
@@ -33513,11 +35412,11 @@ tl: { # no indentation
   version = "0.55";
 };
 "versonotes" = {
-  revision = 51568;
+  revision = 55777;
   stripPrefix = 0;
-  sha512.run = "3b1a33af069abaf1bca5d70c64f3f9034efd10c2104814c3db5360377cf67dde56794f950b1a96a5fd44c0fa3460922887ce97fa1a3eea31b54ce1f16c88977b";
-  sha512.doc = "1f27cadfa8160bc5ebfe6cf93aa617b7a1a751d98d7e7dac052cfc50a450d57967104fcab00d89feb08d0e0cc62551738eee5e17e8f65889e9f32d4e6d2d220e";
-  sha512.source = "e2f738d24b1a1fb8f16bd61ce86f21ee8896fa7236c61fcf8949ad411daf675f9128c4d48cb4a13df7cbd9066769a10e1f6ab6d17b2dd4f0d9188c9c21a33e70";
+  sha512.run = "adda8d14021b5dd1fabad9348b0a9c1e6a1c0c77030afdf304a014883e19600e07ba64b4224319470b418d2822ccc08413dde791801f3f21da34b0d08c21cde2";
+  sha512.doc = "bb2dcb4163ca05501a73b45f2dad0d8e410525805612ce6fd1033fa4773c6e1213edbcc51e541b66545becef2a160c8b403ed6a54c882421ef11293fe222b639";
+  sha512.source = "ba566ae4827fc08f2403657f869ac3581c1f00daf70b4859775d0fe1c550212d98a4f78e3ecb0d74a5c298ef054b22c9ebd0bde410ccd241d6b863caa364d6fe";
   hasRunfiles = true;
   version = "0.4";
 };
@@ -33560,16 +35459,16 @@ tl: { # no indentation
   version = "2.3";
 };
 "visualtikz" = {
-  revision = 47888;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "fc5cb3e2d30bca419304b5f76bb75f9da0e22b6624c7ca658492e2758adf0dfcc24552648c983b0afd390bf7814ca30fd7d2a8b3037b6ea3fd95b2f608b36b19";
-  sha512.doc = "556f4b852058c46a7d2a34db4898bd82429835ed4c5fc1eaf1c8bac9deba407c8a11fdd3eab3753b0f53fd0ba43a316c3b292cebe40c086862c6d94f8be0cc85";
+  sha512.run = "fbd3f158e72dd8b0ebd3fe9c33fe47127ecfd38bc0feac3312d569718672e9f88165856fa61389b307a211071467c10ef73981178cc9afd8ecd720cdf627dc1b";
+  sha512.doc = "16a32e64ef4d00d2bf6f99fa05b35a071539d71944227eaa5b37762e838a62b80ee4b227a8bb9cc49b831bf19976421684872f8eb104f37365669907e9621a6b";
   version = "0.65";
 };
 "vlna" = {
-  revision = 52851;
-  sha512.run = "587e208e48a43698e99e388ee957e2ec201c0b1b0a0d077052cf11ef8b1e6b132bf9330db5b9eb48083b86aa362f0ab654d80d27ebd2690b5ba1ed452b8084fb";
-  sha512.doc = "ca7f3a54872bfaa4b11efeb94a3dbdd2f655b869ae0b1f9a3f5232c40500f4f5550c495007cd081e2069115da1d20ad1759923a7375147d4ca09c3a105dff779";
+  revision = 54074;
+  sha512.run = "ce37751f6cbd088e8faffb0c2ddb6d8bec9c0d1f0fa3a4ab0a3e5f2517e6f54fb6903f441cf72398284801c9b9f00d684d6a6555e2588ae72679050734fff8c9";
+  sha512.doc = "f46c2e29da8f4edbe544d41b05ac3ba13cb5e3c09d299ce5ccb85207703c99569df94640c651a1afbcafcaf4669bb73157945f8dfc1d2b43ce5c0c7970c35544";
 };
 "vmargin" = {
   revision = 15878;
@@ -33711,19 +35610,19 @@ tl: { # no indentation
   version = "001.002";
 };
 "wasysym" = {
-  revision = 53469;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "9f32c1c76ea630989d6e3f3aeef0db154f6677d52177fcf5e28bd049a68bafeef6d3960267029a25ad4ea0ecb13a5a344accc20a7d8f64c20ec304130d1cdb4f";
-  sha512.doc = "7c9f21ce5aa85e2bf766b50806cad76389603072a15d9fd599657eb7e3e58061befa60c8903c9be93b3bb8c6fea71b63c0fe90247654570ddbe289c8509b8f1b";
-  sha512.source = "d90a47d1975947b3709116f88afb85e7f4a2c1803c622d809e39d30465104b27bc3fff60dc578613acd44b54ddaac92b2eaab499320193131bec28734df38c57";
+  sha512.run = "408f9c2b70d7860f7d8f7ee7f93af1351442b92aad9c8d8e4a501414058d8347e6da2408df3d5b6fe217597861eda5eda499771a7e973da03597f24b76250da0";
+  sha512.doc = "ffa36c6f1446c0dcdf1e1dd8b47946eb84d666714d94eac28c857170c9aa414b612486fcf107ae462c50ecafd6ff20c90c776abb5774db64a32aa07be8c58b2f";
+  sha512.source = "12dbdd1e868c3382e7ccb5a507b7f72c20e3df3105e272c00b8b6294f10c1099d3c6c7b1a2db5bc96b866e246807604b615d8278357d0214539a8f959de14667";
   hasRunfiles = true;
   version = "2.4";
 };
 "web" = {
-  revision = 50602;
+  revision = 57972;
   deps."kpathsea" = tl."kpathsea";
-  sha512.run = "0d2d771e8452d67278adec061e1df8cfc06f3af729ea5ae7849acd5fe1b628167b18d86b1037484dbb6b20d5f703bba7ba9fb255788becc53ce22fd87f39ca7b";
-  sha512.doc = "5647beef7b99a3a552b8f55d12ef669481e8ba3e01beefb014fb8e3cae6e8f419862131379b506ab8197e1717d563c34fa81d69db3c6db8107e6167447d87322";
+  sha512.run = "4463318dc2dd2f5c046f439902f57396ab36fd8f30a36c6e83d26ee5045aecb301e3d0bb62cf1bcc37fd9150fb5aadfa8fd642f0d6e33fb5acb28545abaac974";
+  sha512.doc = "f90cfd6712f2f6f6058f7aa80051b313b2bccbc0f0fc868e8c371cda5155d48058fff5b8c7a056d1494a14faf874fdcf3ab969a9e276c8b4ccac8d4138d1d9ae";
   version = "4.5";
 };
 "webguide" = {
@@ -33749,13 +35648,13 @@ tl: { # no indentation
   version = "2.1";
 };
 "widows-and-orphans" = {
-  revision = 53505;
+  revision = 58172;
   stripPrefix = 0;
-  sha512.run = "577ed514a734513de7b5ead5efc98fd7ccfa9d2b8022843b9b3d17a5436d15a34430264bd23cae88e2daaaf1408066d194fded3d92f711f715ee40a85b6cbb05";
-  sha512.doc = "7049fb084dca55706a621bbeeef57bebee04e69264c823c84e89cfdd219dfa4ea5b5e5127f2d0e8f9c74fd88db662b926c62e70ac7ee08f689e08d25de5b0bdc";
-  sha512.source = "7e2651ce9f6d6d2acef2f87a773b7d83440936292650997dc19ca3a6774ebb9060e056a8c13174ed5098c0b6d5629d3a0939bc9938b8d687767cd051dd0aaab2";
+  sha512.run = "c7c5e1a35743e5c87c534263903b75c95f1f33f3c9482bb0209dae1547cdddc81023555e792392429d397357ffb8a9f76e72031d7429e314e27f9d31f96a3207";
+  sha512.doc = "39636b2155e1dcb482eb629b82d2c08317e7f7d4c009627f23345bc8bb3779aa466c79aa1e515ce8f016f71d3187ca8b762053236eb2062a03958a3c2d773ad2";
+  sha512.source = "73db8c22b5a3647aa668267b18c23282c55610cfe65da8a933c5c8bf0adbaa5a7ebe55dc9dcb01389a475efaf84fbcc135a4a1e5acb51c446cd0e13324aaf214";
   hasRunfiles = true;
-  version = "1.0c";
+  version = "1.0d";
 };
 "williams" = {
   revision = 15878;
@@ -33764,11 +35663,19 @@ tl: { # no indentation
   sha512.doc = "c559e587868698c1a635db13b6db265234b3b475937fa1759f9e7e3a8d0644a43543005e9607b5a965bbdc304863d6c7cae6e5cb8345b546dc34afd8c7e2de43";
   hasRunfiles = true;
 };
+"willowtreebook" = {
+  revision = 54866;
+  stripPrefix = 0;
+  sha512.run = "36df6eb6f46857ac84b2b0ef4fceb265c6feaee565eaf201ad8b00552a1f1e37d6f4d5a8e9dbbb21ee0df3013dc8aa72cc0cdef85c9b5c400aeca89f9b851c47";
+  sha512.doc = "32abc19949630800649038ef395a8c51568c4395b5ea2495205fab557669c40c3eadb6c272e9a4747d504c95f02df50056e083c4bcaebec50a5b5df7d5d10668";
+  hasRunfiles = true;
+  version = "1.01";
+};
 "windycity" = {
-  revision = 51668;
+  revision = 57577;
   stripPrefix = 0;
-  sha512.run = "f52a60a78ec5855c1d0e34c2a01772de28e0d2c3dc553e12cb99baaa4ad97a7d6f6ef59fcfb429bfea00339e390d600d8b7e640b92aae8af19204d2567aa8b4a";
-  sha512.doc = "8b0decbdcbfc0d0f0204e35a629904a48f44a5daf6b1b54f8e11dc601a103e97078bf7bf15eec028c14cc3c426782d7fda1a1bdd5d7725364959dd9d3d5dba2b";
+  sha512.run = "fbaa3e635579ee9025675831d3a26e0d1451badc509da4380aef8cb0040e25456e0b655387252103cfc32a92f63880c2c385b08d6ed2ce85b63233220377dd33";
+  sha512.doc = "b4536fe6706adc34a15cd9e9f19ad11d5a59fa004844c946e5e536297807edfc729807f94a447d67e0c5868962a2e93da826de9e6ddffb2dc5571c1c304c992a";
   hasRunfiles = true;
 };
 "withargs" = {
@@ -33780,13 +35687,13 @@ tl: { # no indentation
   version = "0.3.1";
 };
 "witharrows" = {
-  revision = 53246;
+  revision = 58120;
   stripPrefix = 0;
-  sha512.run = "f1054a2d4be6121e3cd6f74ee6bff8afc71806cd6fc318e7f8e2b10f13e93bdb4268653224341976f847da5597309a3e5a09f202eebbb2e7440a098348f0d4da";
-  sha512.doc = "72aa193dfc4e88f7679f7ecf878d9077bb6c7327a6f4b14783595e9af13301250ba51063debf4e40be8ae05f6d09628a4868a3f98ce20287c66a98493a0302f5";
-  sha512.source = "404f39dacdabf259275ab5f594a6ee20bd16e61b895c2abbace15870ff087253308e7df8f1a258fb995fc8aca2dfd2611eba411971a4b11e44503a406fdddc7d";
+  sha512.run = "75f87cfce4089e02f5e1023ebd1f66c0f9ab62932c2fbb7edb8a63948e31efab3a3418b946db7270e6ea88e6536525db5d191f904f5d7ecb0e8f3cdfaea743b6";
+  sha512.doc = "b22081b8ae14217f4a58f71507314e3bdc50659e6fff761cb1648c8ea03819182a0d4d30122456e4c5d24e307fb301d52eb37e092b8add0b698dacd026e6f5d9";
+  sha512.source = "fdde37e183614ffe887b7813db7d09ebd7586e73c4e54c7eeffaa4daa48e23f2f958306f2547bd2b683343b883b3d26f5f9779b9cbf2e755f8b265678b826c9a";
   hasRunfiles = true;
-  version = "2.3";
+  version = "2.6c";
 };
 "wnri" = {
   revision = 22459;
@@ -33853,12 +35760,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "wtref" = {
-  revision = 42981;
+  revision = 55558;
   stripPrefix = 0;
-  sha512.run = "bae4e9c07d17e94a661a7a168fb5777d95f7b65644308197633069ec23d0b9e10e93cd0c1e892db9d85ae54f50fa787c60d04266eee512f45c5ecb3ec68f039a";
-  sha512.doc = "5d7f2338beb7cf22ba62c2fcabec2b37900fb208726a59c25fe6b12c8605d15210a8cac8da454c8ad09090ddbeb01987aef53086cdb26628b72f32752cca1d87";
+  sha512.run = "1c946778722ba4e7014b98447d1c2c5472b34d916a4aada1ad1098ab05d67a1466fb181f19bacde5fe18a0b28a055a87b626893d6c49346fb665b4595910401c";
+  sha512.doc = "b1ebac65ff228e7a6221240ce90d83121d726959d95f2271eb3c6597c7740a376da62371fedf2c0bd068e660950167d4b09cf22c01fd78c337c10402eda63bd1";
   hasRunfiles = true;
-  version = "0.3.2";
+  version = "0.4.0";
 };
 "xargs" = {
   revision = 15878;
@@ -33870,12 +35777,12 @@ tl: { # no indentation
   version = "1.1";
 };
 "xassoccnt" = {
-  revision = 49516;
+  revision = 55876;
   stripPrefix = 0;
-  sha512.run = "ba903cce2a9438c51e40d529e6b6c6993f4a2422aef2688cb9d875cc408e4423ff135afe3758bef6605eb26e1f2bf4921b652131e65bf068fcce54be3f765455";
-  sha512.doc = "5a1805d9cd838aa7369fe4ca2d10c8f46b8bf913c14d8ce8dc546d80598f455696f83825c3a1691fb5a3ad36fd68c2bcb62b6a682ba374e54071aeb3f33c7a87";
+  sha512.run = "f2a2c993c465afdf21920e7f4cd7ed81f40fec1bc485cd89d919e5a942284e2219194d349ecc4da81005a7dbd997ed176ca8571c92ec159b69a98dd1068a136d";
+  sha512.doc = "a20c3a3f10ca5a2fd785e4bfb92d3d60edcbee74f6efd2dea5fece63b01ff3d67905700be0fc48dfda9bccfa386238e77592cb04208ead19dbdb0714d6e891af";
   hasRunfiles = true;
-  version = "1.7";
+  version = "1.8";
 };
 "xbmks" = {
   revision = 53448;
@@ -33886,12 +35793,12 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "xcharter" = {
-  revision = 53535;
+  revision = 58755;
   stripPrefix = 0;
-  sha512.run = "4e269f15e3b874990151d51845aaa826e6995b886cc9806ff789b82d1bb34bf81f9f1ed6579c7020d2c02c5f02830d0f409e45ef2c1197239748179714398da9";
-  sha512.doc = "7a38a5891ee517d5666771b5cec3cd73cfced263dee1f1ac7eb58ec59377974b5bfcfae45b7359c1b63cc28ef7351c701403d655473edb0326460cce1ba47b5e";
+  sha512.run = "47ef79da9f019c27758e90be80ca7815e93ec3044da88b133685f4cf32655d1be2c591e17a6730da45977be5e06a3cd0c29da2ee798e5667d741f5161f2de723";
+  sha512.doc = "574a4ba5ec45569668ee9e3b26055d1677fb2a95f28bb4b8e2b21589aba116329fbffeb74e4b391dde94f93547aeb1d689560d7050976db533be28c9cf6b6948";
   hasRunfiles = true;
-  version = "1.205";
+  version = "1.216";
 };
 "xcite" = {
   revision = 53486;
@@ -33903,19 +35810,19 @@ tl: { # no indentation
   version = "16383.99998";
 };
 "xcjk2uni" = {
-  revision = 50848;
+  revision = 54958;
   stripPrefix = 0;
-  sha512.run = "c1174c6abe555eee84d753f76608fb3fc3234c43c5666def063983653908a03b8eab3787dc9e061c0f6bf3bfae7bcda9a31ded49b039580fccb254ed33571e72";
-  sha512.doc = "30f81325aefa49fd44031ddda4e1ff30c40ccc08645671e1439df38cc4efb2a5cf4d9d50e98e970e96e3b18046e16834710d6be8fd9e5fa18cf5271bd5ae339e";
-  sha512.source = "fa719c1936e76ac3d0bb7f212a53c64962ea2c7e00546c603da218fabea566c11591af056276f6edcc68e2cb0b13ded72cf37535c4a8fc5ce53243743d6f8e0a";
+  sha512.run = "db0be3360dc3d6373866c9d27900f8dba9353bcf92d219f9f0b82532e2855210230a06b87d1ab6eef7e1f96c54e46884e6827395affb9375120b7cf8d2fbb99b";
+  sha512.doc = "6a9958bc6ddf6d167b9d77a513d04f0077c9a8581109c51166410d60d5a243758da62b40bdf5cb1488a50b9ba76ca89261a2d31c3819d8b2738b4a7023ac3f90";
+  sha512.source = "8868210c53fb379e12b22472dd3575baa62743cc059b3215b634aa59e61af5b3bed8415b9b811a7949457dbee4a051e4926ecca02c293be775ccfb3467e0883a";
   hasRunfiles = true;
-  version = "0.8";
+  version = "1.0";
 };
 "xcntperchap" = {
-  revision = 46236;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "dd87c239759d04adc359a6f1dcaefd090b7cc0afaeeefd9ef71530e5933f8b174d53c8110163822150bbb722b5ed8f47eb279f2224b02aedec6137ef7edf97c5";
-  sha512.doc = "5f7554ebf4ef3d878c8a31872e6d67b6716ea7d6e5e1b38915f4b4d7c2edbc4fb1aa31d557e74cbbe792134e77a6c9cb4dd24ab0daf765659e399cc84e70d7c9";
+  sha512.run = "7be16f92de86fe67fd34857f7151f197e5ae52e9ab944e0ef3603882585dfb240b8e01072747b18092c6ff060f2f4c341b27e106ffe8864dd1879c3965435e47";
+  sha512.doc = "c7d25df1dbac57e05b589662214e46ba446def465ae7f64d8a2d52283151ee04aaee93ac1bbe0f2c7b01c50e505ca6c1cfac96750d1b13211d309a906427c6f6";
   hasRunfiles = true;
   version = "0.5";
 };
@@ -33991,11 +35898,10 @@ tl: { # no indentation
   version = "1.00";
 };
 "xdvi" = {
-  revision = 52851;
-  sha512.run = "0bffcb7e841c0517be816d9daf706e11d0a43973c5b8021133da819b66ce50875ceeaa9bc5c76004daf3640de72cef996364e49d1a9f433c72aca3992450c74b";
-  sha512.doc = "43466996014c40a4e902c2d28af008bf610e2c52cd88acb76f92a3999f6a062a440289b0afb96f1ad29881e280aa8a737ab1936b276e5f39be47fba3a5b80092";
+  revision = 54338;
+  sha512.run = "bd226386f91b2d5d19052f353a67410301f8cd08a689125907265716f8e7dbceed40997057d35033157e3477a48e823c2f224324108539f5514ec7387696ad1e";
+  sha512.doc = "cb003d70f0e5b25be95dd0e29b7d5b50f16ffa1844350e71d780f6cddbebe6dfe3dbb79b43ae994e659d6ba1f28ddf5034d867308723606d5baa9f4e91f894c0";
   hasRunfiles = true;
-  version = "22.87";
 };
 "xebaposter" = {
   revision = 42046;
@@ -34006,21 +35912,21 @@ tl: { # no indentation
   version = "2.51";
 };
 "xechangebar" = {
-  revision = 44954;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "0521eabe4444865747291d13a8664431b64e67969276191f1389bc0c7bd7198625a352ac391cc06e926cd90535b47b8edd8ffac6f3967ade0cbfe7022409519a";
-  sha512.doc = "f2452e8d2281f4d92da80917d6883bd91318f8e4459189fdfd8e6a79269d4d2c1b16122bb42237598fec3b8d44b9cc313a4b7858895db8dc0fbc5157825f2046";
+  sha512.run = "833f0b1cea32c0bb345d1aad5360613ee36baf17a35e13d20a4bcc75edc77b3a7c48c4406ddadd670890cb93dc0d03cf91462994271f351ebf2bc221bfbae5a3";
+  sha512.doc = "6d2c385b3b826b8b97cb725ffd3e7479ec3ddd2d2bbd8c772fb0b1faa9d0edb758871003ec379d8ec349fc4e3f7de2bf3130cc0e5d9e356ad472232d16acb546";
   hasRunfiles = true;
   version = "1.0";
 };
 "xecjk" = {
-  revision = 53835;
+  revision = 56711;
   stripPrefix = 0;
-  sha512.run = "81a7fa804122c3093893f41110ed4fd0c1c43ae381b1070eef4dd4711dea7e6fa6ad7ff8b3dbaa78ef967790d2dafe5983b3fd7aeac4d7868e8c8af3ccf0319e";
-  sha512.doc = "93b16713f9e1d2c0e5ce7dcd0313e5bde13b21c80980b7d0b5447f8a0722e0dee656619a6890296a2f4cf96f386730c260191a7fa665ca4eb93044c60fda7c0d";
-  sha512.source = "35164492b6045f6bcad0ec712825fec02b22dbf172755e0e4f0e6c16264113f87f78941885d7c0a80c70976e6c29ea20ba400273a38d580a916e6a31359bb0e7";
+  sha512.run = "6a318c27555cd58be7f3f8893ef4345f37b619cab2088a0ce5627000eb8375724a1e3e8df741cff2558143ad58a3d336d67aac4ff2dd8ca226b223ec103f9d3d";
+  sha512.doc = "72446201ddef073b1b37686ecd0ff7569db34d3240b549b5e9ac2c5e6fbcd7e64a070afdc6ee40e83a4d95172cce37da092e463e4c55e5f293b92c39cd4817a3";
+  sha512.source = "32c1905ffe53dca84509cf51fd4f2b2eff1ca1d03e97bc1f03009d236e476f8d8573ef3267e6466eb63e18b70207ba62558afcd1a64d9a1af79a7a6cfe5c050f";
   hasRunfiles = true;
-  version = "3.8.2";
+  version = "3.8.6";
 };
 "xecolor" = {
   revision = 29660;
@@ -34031,9 +35937,10 @@ tl: { # no indentation
   version = "0.1";
 };
 "xecyr" = {
-  revision = 52315;
-  sha512.run = "b248cfde57f5f8023df47a7e6c6260e00820baeca261a52ddcefd6a17a2e9aff63a43fc870d8be747e491193800d87440ac1167afe06bf0b15238982f62bfb76";
-  sha512.doc = "13e5bd963aaeb286498aeb631c88c3b14ac29ac740284014f11b881503d17d99b29233c86853c7691aa9752557773a8f6ec5d410cccd2d6665dd5d800f1fe2b4";
+  revision = 54308;
+  stripPrefix = 0;
+  sha512.run = "0429aa515115ef69811069b08567c97ce40a8be68ebe72f26b8e94947abd86394204b21bbf25ae44c616a806878fe9900f5a639bb8707106836103ec06663454";
+  sha512.doc = "555ef35f9e50450a796c24b87295eeac319d087a61e4fc7cedafbc398cb9a5c0add8b93318b8afadd82bbd2ca90dac9ade02dfbf286ba825c1d697b58110fe5e";
   hasRunfiles = true;
   version = "1.2";
 };
@@ -34055,18 +35962,26 @@ tl: { # no indentation
   version = "0.3";
 };
 "xelatex-dev" = {
-  revision = 53553;
-  deps."xetex" = tl."xetex";
+  revision = 57186;
+  deps."atbegshi" = tl."atbegshi";
+  deps."atveryend" = tl."atveryend";
+  deps."babel" = tl."babel";
   deps."cm" = tl."cm";
+  deps."everyshi" = tl."everyshi";
+  deps."firstaid" = tl."firstaid";
   deps."hyphen-base" = tl."hyphen-base";
-  deps."tex-ini-files" = tl."tex-ini-files";
-  deps."unicode-data" = tl."unicode-data";
-  deps."babel" = tl."babel";
+  deps."l3backend" = tl."l3backend";
   deps."l3kernel" = tl."l3kernel";
+  deps."l3packages" = tl."l3packages";
+  deps."latex" = tl."latex";
   deps."latex-base-dev" = tl."latex-base-dev";
   deps."latex-fonts" = tl."latex-fonts";
   deps."lm" = tl."lm";
-  sha512.run = "0a8a8953a7180db0e5181a00660cb0d20b256ee044691209e13439c1f1eed3e654f43273999c42d28e4a94e844fac8a2c21b44cd4c14a2772941f030bc998366";
+  deps."tex-ini-files" = tl."tex-ini-files";
+  deps."unicode-data" = tl."unicode-data";
+  deps."xetex" = tl."xetex";
+  hasFormats = true;
+  sha512.run = "93df696d59d088bf5808b5dfe0ad6a834b65252dfe1f06cdc0d2f446a57b97751c08464e58be40ac042cc508d5f846696561d6524bbb84234af11fd3b7c61d00";
 };
 "xellipsis" = {
   revision = 47546;
@@ -34078,13 +35993,22 @@ tl: { # no indentation
   version = "2.0";
 };
 "xepersian" = {
-  revision = 53625;
+  revision = 55194;
+  stripPrefix = 0;
+  sha512.run = "c5880fe199b5a239ecce8e4370396f4a981a886e8412cfad36032c4d2b7fe9fdc7d6818e14b53ca22be36909f19be7f363b40cd58644231ce015a627bd65a48f";
+  sha512.doc = "395bdd506072a2e234bb45f120ad748322f78657fa5c7013097af28688dfc7e58d2a7c865fd2c80592132fa46a02e35f65aa4bbfa752c5fb6b4b829a79a302cf";
+  sha512.source = "866a5fb8007fa600c50b343903a306d17e26d5616eb7fc14487ae93005cb7bce1209d382104021cd2b345ea02f2a4b058518454bf797600ad59e8f9254bee8af";
+  hasRunfiles = true;
+  version = "23.1";
+};
+"xepersian-hm" = {
+  revision = 56272;
   stripPrefix = 0;
-  sha512.run = "50b382f9b542a3874aa5ff162e458fc7443dbf601a31cb278d3cbd4f811baa45686ccdb83ea6e190ace009e3e055bf22828ec82804b6630abd95e1f3138353f3";
-  sha512.doc = "fe777722885de8352f26eb3b755d8f02155ba875fd1b9ddd230c13d4a0f2287b3c9f2261f0f2cc003554cced4120f81b9478b75ae3abee369a6a421c6e8a811c";
-  sha512.source = "3914efe8c8fa627a0b53ed4da3ccba7774d7b9c2847320fcd8096a52b271b9640d80e44be64fce95f1ae3b0ea55a40fcb6bb4669a2255722ba1d9be972c5d86f";
+  sha512.run = "50a3e4a12055aa051f72c8d9d5f616a6901aba7c8dc6777610b48d7e3c993c6a49996cdd77ef01161ca9b7dc588cd9d86b1e1c4e65eab4e4a6d3a3697a990d92";
+  sha512.doc = "79b0a6e9876f697b8c7e08d5f5051975d29e9b7b3245b49a74ae5c76bfb23926fb4810fadcc029ee529f5f2752a49c2ce748277da0fde50f5078becff090b1d2";
+  sha512.source = "b43f74f1cbb9e2bdd06ca614f17fce49a18018cc3df9f88ec3a4732bd0b4bbf7068ac77a65d549806be4c07a2b7ab16c165fa7d5a9c9401a4dfb60426c5fde23";
   hasRunfiles = true;
-  version = "22.8";
+  version = "1.1a";
 };
 "xesearch" = {
   revision = 51908;
@@ -34095,31 +36019,38 @@ tl: { # no indentation
   version = "0.2";
 };
 "xespotcolor" = {
-  revision = 40118;
+  revision = 58212;
   stripPrefix = 0;
-  sha512.run = "7f4a111897f53b003473a40db9e779ed22215eb61e7485a1596bc215e6057d065d158887e1c93dc4e81b04ef1f8815044ce61daf406b62bb77ed57df8f13a70e";
-  sha512.doc = "e1d2f3c52b95ef065e0d2ce93871278b8038b1bfe86700609e1197715dad91be572cf00a4391cdc4535672897d0ec52a09bdce2f24496538e512f760a7a622e7";
-  sha512.source = "5727e5cf3e31db12257498b2266d13a749965e0e177c011bc379a7ea29ec5951fd223befefbcf77ff1dadaf69e31f3f4543611be8f9ac90c7acaffb9070b0b2a";
+  sha512.run = "fcc3a800986069cf64c62b2794447650331dfc2fbefe26fc2d537ebfb520acecb6530bff7591a597fac9b108f23781f0faf7c27b97f35ff2358d62c09404a5da";
+  sha512.doc = "90ff1badeeb6e2d6cff9797b1af2052b4fa8474279c7b2e9916f7f02c767988d640b57f3d63be8de9f0082e50bb93c1c122b3c1f9bf74132c5c13b1b6b70122d";
+  sha512.source = "60aa75660ec567a3015bd8b4985e95aa3387cbda9b239c2d1d7e8bb29fde8d44fc414ebfb195aa3be037a3f4cbe510354e28d3ffc9d5777d054585597e2ab762";
   hasRunfiles = true;
-  version = "2.0a";
+  version = "2.1";
 };
 "xetex" = {
-  revision = 53917;
-  deps."xetexconfig" = tl."xetexconfig";
-  deps."latex" = tl."latex";
-  deps."dvipdfmx" = tl."dvipdfmx";
+  revision = 57972;
+  deps."atbegshi" = tl."atbegshi";
+  deps."atveryend" = tl."atveryend";
+  deps."babel" = tl."babel";
   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."dvipdfmx" = tl."dvipdfmx";
   deps."etex" = tl."etex";
-  deps."plain" = tl."plain";
-  deps."babel" = tl."babel";
+  deps."everyshi" = tl."everyshi";
+  deps."firstaid" = tl."firstaid";
+  deps."hyphen-base" = tl."hyphen-base";
+  deps."l3backend" = tl."l3backend";
   deps."l3kernel" = tl."l3kernel";
+  deps."l3packages" = tl."l3packages";
+  deps."latex" = tl."latex";
   deps."latex-fonts" = tl."latex-fonts";
   deps."lm" = tl."lm";
-  sha512.run = "eca249be676ec6a4b25c9ac5ae60e0a29f460571f7735896ca141a944135782ce8635ed05fad0f01e558c22909dfa14740adfaf79680a2304fd6f07c82303310";
-  sha512.doc = "2d578801da1669e7ea36599d821e60bee4631c3a1bb44792ea5cc266f5788c05a0e93469374a19c4c7c2eff866d922438df5c5c2a4935570208f05327a45f56a";
+  deps."plain" = tl."plain";
+  deps."tex-ini-files" = tl."tex-ini-files";
+  deps."unicode-data" = tl."unicode-data";
+  deps."xetexconfig" = tl."xetexconfig";
+  hasFormats = true;
+  sha512.run = "dd788efc6e03e11e2dd88d8e63ca2153e936194391d49ce422a757ba1937986cb80faafa71860bf55ef5cbab51b53cd0c85c60dadddd92940802ede301cdefd6";
+  sha512.doc = "544a36d94bf2094403806d934a7e0d92062c1b5b1d0efbf4316d9319a1ff95a1d8f7a4a961c63e4a3eb66c9c4a24789e239f958132e5a4f08c3764f44772c8aa";
   hasRunfiles = true;
 };
 "xetex-devanagari" = {
@@ -34131,10 +36062,10 @@ tl: { # no indentation
   version = "0.5";
 };
 "xetex-itrans" = {
-  revision = 35088;
+  revision = 55475;
   stripPrefix = 0;
-  sha512.run = "7d083e176a2786689a325c511d4e50afda5ea8c644c8288ea050db79fd248085be500ddf7a0b8ca3cef6191651669f9c48f894d16ac571096cd1658d6e6bac60";
-  sha512.doc = "795a13fced2938c1679dcafd07e445ec62db6cb014259a15d1f8d1dd68ee4cdb98c20024b1601679da5f6e8d3a27b05a1285de967067abc1fd61ee6937540449";
+  sha512.run = "9c39898cbcfd024f1a274311a192c647e15624fc04a9484daa2d08ac37340a799b4209a5aa91a5e3a96f774d7363198c5a07f66d88578e1998ef3680b10dae6a";
+  sha512.doc = "f10eb9651823eace7f56e88e710bb5536a35204b8fee80219419659d0e2f5fcc60c6009834fd9aa215aa42e8291e14786688fe1974dcab943578bd22a40f4ee1";
   hasRunfiles = true;
   version = "4.2";
 };
@@ -34167,18 +36098,18 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "xetexko" = {
-  revision = 53826;
+  revision = 58633;
   stripPrefix = 0;
-  sha512.run = "96d6e74e10d39f2ab84c98a53b42800154183f4e80242f88209a0afec6734306c8a454cda44b5f171ee96229e1bcc06d2f35d57f2586ee53b403e6828d0213ea";
-  sha512.doc = "433f09555146f3de3c1d7bbdfc51ee2cb05803f9cf3d1a69d34d049d30e183ffd302273aea52b868e3dba08e64459b2d6bddc6d15284812b119d6a3b07f40dac";
+  sha512.run = "53643a489cedfbb6d5898b45e1b70f7426a734fac6470d9378a196760af1d7a4793a6feca2c1508051d6f696ec0d780e25fe99c32ebc2b1504a4cd30652f9650";
+  sha512.doc = "3410649caa3624f432477367e85b340469804306f4d1e8c33839291367a13b1775d37542db05d39bd5d3e7a103e30b124aaf8a786c10f3a9ee9ef7a1a695e05e";
   hasRunfiles = true;
-  version = "2.23";
+  version = "3.1";
 };
 "xetexref" = {
-  revision = 53068;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "926ebf995dea04300dee8cc061361f7eac8efe08ffd3ada87be5b682e2c581d3c2965328ec7c93deab8d6bb9311a0cb27ff1a14a7332c407be713657a136959a";
-  sha512.doc = "ad0700f1e1053abd8264f20ad04b7ade28cca6f5757e158f8ed031f493a966f5b62a197a34ba39ece7c3cb68d469334521a6325c2b4276dbfbc5c2519e13b33e";
+  sha512.run = "5d2610deed12422bdcd7e177c339d3aa701887ff12bab214ce0b67f87abd70c569a0aab85f59f877399d440c75c712a4ec8ecf12f6059152d0d0c70f40f2b1f7";
+  sha512.doc = "24d62e618217ec5454bd23662711e10637a7f67cc11880288bfcf301ab89ab22d87a6d65af8c37c99d924a4dc77b95308ef38eb8ad6bb81cf2900cbd3ebeeef8";
 };
 "xevlna" = {
   revision = 43864;
@@ -34189,12 +36120,13 @@ tl: { # no indentation
   version = "1.1";
 };
 "xfakebold" = {
-  revision = 53272;
+  revision = 55654;
   stripPrefix = 0;
-  sha512.run = "ba8d90525556025c1387f7c82d3bfd6e43be1c82c5b508d611c385cfab3f6b728499b2bb9cf98e65fe8f3ed3266da402fdacf454b367eb95e685ecc9591166c1";
-  sha512.doc = "c5d63984f0f2b9996ae5be08e3e43268a375c38e96965c5525fd95c9fdd167306ddf0801e7e233d2ad52dbd7a48e82bee9e822f22e68fcce180445a693fa3687";
+  deps."iftex" = tl."iftex";
+  sha512.run = "99c735bd449c96b3444a8b50032c9962601a04beeeeb6b0fcb759ee0cc53e4510dc8d077a3cad7b99c968bb9d60bbd37f2f0c7d56ffb5fc667301423bfd32bdb";
+  sha512.doc = "bb6f1bda41427f4c144402095a79aafe70d6b534b6d0462d951a2c58fabb0bc8dd9edfdabf526bba243b2c79aeacee728741dca778e25019ae909856b164a316";
   hasRunfiles = true;
-  version = "0.06";
+  version = "0.08";
 };
 "xfor" = {
   revision = 15878;
@@ -34243,95 +36175,109 @@ tl: { # no indentation
   sha512.doc = "50322d89f494d07793d964fe515b8a0bacb74bd5706a6da80f6860771a8e3cad35c7d06bf398217a7e4364594d54f4dc490f39980194804a04460047ff5083f8";
 };
 "xindex" = {
-  revision = 52892;
-  sha512.run = "fe62e02612bcd19a90bca6b94380c6c0b50acc381d47f60c81e142afbd6173adec8dda97e2f16c28a8ad101d8f080644d456768987ca5f8a7b30e03b3e30ee59";
-  sha512.doc = "07b1cc0ad37d8893bd50aceff18052642af52eb46f4e72320bdf093dcdcc7282019f3fccfc1e6df13a8bcd0f6d0a4cf41eb47d6f84a1ee3c6d1b0a8a1e150df0";
+  revision = 56295;
+  sha512.run = "e8a858e3fe056519eed3f85dc21291881fdbf057ece76d503fd863f66c51331d689fabbb7a1ba3728c3010c45a9f0663fb75db2b609716ee5dd515067bea07a5";
+  sha512.doc = "f755500e75fa45d14110da45bd43d10f4cf170cc907af7743673a38e1c823612fce9131eb16a03e59a1a821b1e4b3580e6a2e6a68e759f53f9daea4f88e4f09e";
   hasRunfiles = true;
-  version = "0.20";
+  version = "0.28";
 };
 "xindy" = {
-  revision = 50203;
-  sha512.run = "b9127f03d8917543f0b1caaa24344aef0356818d7414e390ad45d5de3420271a81509ded3636c3475b577d6781be6e24c94f3d444f6190bed9039dd720274787";
-  sha512.doc = "9e6c10388a7a707695e2965c3e3b851f939a68997cf880560a4a05ca3a167febeee9f1a7803cff1927bf7aecf0d6baac65bc4827c367f9c2d086d17d5947d64c";
+  revision = 55330;
+  sha512.run = "8a2db7333ee39936892ad83eed0d31de25cdc48533dbbcb297e3a8714fefa6d7973b9e9eb7767a50f11be89afa7eb944bb56064a14b71d23bf8161f7fddf8d7c";
+  sha512.doc = "4404d43c524b2d13a431ca5691031bd06ffee316025a6521d08f8ecc18d7e6703aed8a714fc498e7dfe8bb7f1971562adea96c637530e612b486ca015c3b1e23";
   hasRunfiles = true;
   version = "2.5.1";
 };
 "xint" = {
-  revision = 53930;
+  revision = 58738;
   stripPrefix = 0;
-  sha512.run = "971cfdfbb31d58d10732e06cae28a9de1761cca37191af07780c5603274057b3a2f1dfa57522583be7302f46e3f0c0eaafd27aac3cba42d7c3f710a115448ac1";
-  sha512.doc = "dd9baeeac6751b817cd6ddafc6142c220ebad4daf82f237f84f0535aa1412afb2e43504a076366e37221872ab582e6f4f9787bb759f40ebfd6e9b19badf7f1b9";
-  sha512.source = "4c30ebd2cecd9350c631ad3af6fc5b71674461e24dbcdb21d2556e4b80dab25752d5d80905a2a9631e51b06b65717411df25bbe250dc552b245f9f714768dc44";
+  sha512.run = "44305994a39b6d0a0c517445bf554f1decaa8c1bde5eee2613010308308fd606790409266e9af0803828df00693ac5e1d015a8cef90d112553762eae97f8ed53";
+  sha512.doc = "dc65101c1196c68a703d1e6f8f1b69c554bc3841fbde860cacf11c3547f6fe45928d371deed05ce1999f7afa1bd65368df626199a0f2dd5392c4d67e924a51b9";
+  sha512.source = "75fa7fe493f9bd393cab448c7bbac43d56f67daf547281cc410d88db54e8b6ccffd86171a2ef5ed54721e73538c61b6493e41fca4a503775ff8ed0cb7bac968e";
   hasRunfiles = true;
-  version = "1.4b";
+  version = "1.4d";
 };
 "xits" = {
-  revision = 52046;
+  revision = 55730;
   stripPrefix = 0;
-  sha512.run = "f78a9244a0dc31a9a69d920d6228b8dd3b398abd57fdac2e21de1154c93bdf7abaac806df1a76d2ff8994c9d52f17e5803bdea7c43f0e13480301ce136c2a0a9";
-  sha512.doc = "4a8fe4842cdf000083352423735d7f34b6231472dd42a3108c324775ec97fee3f5ef457625f44ea0445c9c34e6f903e2af96c7a33ff3787069d77a4ebe70e145";
+  sha512.run = "8c47de766f965fcb50399e59d20f030e90a28e2aaac018ab1289a1a26b16cd6c9c7d3fd18f1d2b84fe86a99734bbf2ac9b58bfd723a7854bfe29141ab6acb874";
+  sha512.doc = "3c4594f4023f6ae4dd6ac57841720a47f00ae65fcd6930d4e8ec94281a71bf97e7acea26c60d6866304b5018e866ae87554cc470e671d47ede6572da1ac2970d";
   hasRunfiles = true;
-  version = "1.301";
+  version = "1.302";
 };
 "xkcdcolors" = {
-  revision = 52481;
+  revision = 54512;
   stripPrefix = 0;
-  sha512.run = "78e9d390e64c5f35a35f25475aab9fd4308cae2c495cd8181980799819a374f7460bf41f246d91ac297b96f804f3327e6b09e84b255b362b1f285873ddd5b107";
-  sha512.doc = "dba85b139b2146562acb51b64c8b0c7e4aef799e4bf25e131896c6143afd29d0279cd130db711d34fca06597792eef7f92be4ca10d34eb27f3da11a65b8713b0";
+  sha512.run = "4c7057d785c565e043daef78f4ddbb5dc307a3caa690044c803059034ef42fc1a14f61c93115b8060c330f480397040ab19b44636e167739a016175af61c2806";
+  sha512.doc = "ff112f54943d9f6f0e55cd0ef2a9b0cff1e088ea386c7853bfde9cf091b4ab762b38486c565da39fe5f0e63811c2d2b5661dbc5d98b740ffcc08982462214795";
   hasRunfiles = true;
   version = "1.0.1";
 };
 "xkeyval" = {
-  revision = 35741;
+  revision = 57006;
   stripPrefix = 0;
-  sha512.run = "5d49a32326057d18ebb2bf25d29e06362c23d9a2f9df5058457fd84c9faebb545316c502a7baa19073abdd661e9497255cbcb938684dd006b0c10ba7c957c627";
-  sha512.doc = "a2c51df068c738d598c472143af901392d181db37bb416a2e406ad1d65c6679e428efc1281256edcbd04bf6a64ffd23dd568bed007ea278362ae7378f5371a03";
-  sha512.source = "6764eee7ff0c7649a4f6b809753134dd047ab6bfc3ba1bf16e5ae0fef2df0f3b40cd83b662cde002954ce705e8f8ee5950da36b38b2ee6533e6b089e3a32bf20";
+  sha512.run = "39ae2a2d595c6808aab31a1f97caf31418e8aad6c05bec8812b0fca4a69c19eeb88e559940f952309f69a4b2d6342cce804f7d4d2b6270878be51c9b3cdf4ee1";
+  sha512.doc = "58a64143df3ca2cfd5b8260dbe5df4900586d3131f7914ea1da9b0a8f53c84e2ce49a6e36c03be3c3a508b4a9f26e61c167c600e73105709d6f36b2acdb6bd2e";
+  sha512.source = "ba88cb7ecf4e7cf2b3f125c989199abccf8cea300ba291f3dc9ce0f5259534b75bea6af23770e4d772c264eff9267530ce5759b62c33ea5bf998b97996ec2d52";
   hasRunfiles = true;
-  version = "2.7a";
+  version = "2.8";
 };
 "xlop" = {
-  revision = 42899;
+  revision = 56910;
   stripPrefix = 0;
-  sha512.run = "74f6ec3dfe32715ebe0bc0cbd3181dbc4e8384be19f2f7849333c21398fbb3a43d4e3385c8eb1dc81688bdde44072796cb1210402cdfa7522fd5a9052173004b";
-  sha512.doc = "792a49ef02b67b0db85c827c52ea644235bb2d8c8d8c8c9c4e5c36d1003ab643906e7bad13ddc505e884abecbba97d495ae8d93d4a958c5ff9ce10888c29ae6a";
-  sha512.source = "e9ffcbc786fb8a5f697f23d6e229afbc39dbd9e72bf5d6ec81c396d6b8f62208004475c712301b203e4baef70d1b45cf1a5a41d86997cbfd794a68c8b2020d00";
+  sha512.run = "6d1ebe5d3870a07175b5c07840dd2170f2309790d1b828df69b716aa83db1a35ff70d265a33d8fc0f6ebe0c4385b7fccee8445ab93b2649d3b27bb65e41f87d5";
+  sha512.doc = "9e1cdf96a23bd468c2e4f358ade19c509685563376d5a7ffedf5cfc122138b14d1075c7ae8c8a00261f789d4010a9df7dd5b1e6a9db5bc7efb067168e7866540";
   hasRunfiles = true;
-  version = "0.26";
+  version = "0.28";
 };
 "xltabular" = {
-  revision = 49939;
+  revision = 56855;
   stripPrefix = 0;
-  sha512.run = "57f734e3715107169b53c017e9524c1cd4f29a120e6f6aab7e50e380216ca2f841fb0aa5e3d5fe016a061b87d64eae4714f35dcda8ccb4b2c73ec4d5727a877e";
-  sha512.doc = "fb9567b70272ea7f49d6923a19748a1cc53615f45b56b2b573304c6cfa334f0dcf6aa1fc89a3236d814693332fa3cc71798d548323ec2b1c2bf34071ebd7fd19";
+  sha512.run = "6e49b4a2adc351394bf5ab5cc04d532c36196919a4de8be1ecdcc22c6f226a2d035987df9aa70144d701d9fdeae1dfa07280458a934e289a5d1b5976b2be3ce1";
+  sha512.doc = "daa1f1ee3092d545b3949afa781e40a576a8a3ab1c20e40237d83c14455fcece353dee03161ed1725d3f54c8963ba94c683ae0874a8668c8e5c27ad3b58f227b";
   hasRunfiles = true;
-  version = "0.2b";
+  version = "0.2e";
 };
 "xltxtra" = {
-  revision = 49555;
+  revision = 56594;
   stripPrefix = 0;
   deps."metalogo" = tl."metalogo";
-  sha512.run = "decef1877478b8acd8a7a10abca00773bbae707dc47921adbf9e077c67fe186e8a90e5c9f35e8e8c173d93cbe799ba994f53d60e05eff4dde09525375d4e6bf3";
-  sha512.doc = "2f2ded483dee14a97d0e5f673e38864bfef93c41e0c694cd5435d37417f145e472b13c5256a7bde48c8f4439077f4055676a295ab410a7d6ecd4598955c5ff50";
-  sha512.source = "50790bef953636876456586b3908b15f914803fd87ff8c3cf4be576bf9930c2f450c99b60d390508d35d534e5d9bff0cd1b02fbe31bb29444207fff3868ccb1d";
+  sha512.run = "ff75c7b2f36f0e3cdc466dde35d83ccbb76c9c95f5d191a5498831247d1d418b69a8f0df8b263eae78e4a13694e628eba64c24e7480c7dbf56948cd5b1504a76";
+  sha512.doc = "6fc84121dd3486f5f7744d757520e2b4d7baf83686e2630990be7e72ccb121e5b417779e4682e6e8a566b016a8995f80d7d4c6dfb3d6d2c9f70ed506bee99d64";
+  sha512.source = "c177b99366479f6ed5ef935be07fbfc3425b48f2c3d274e175bbde9c63cbcc93ee4bca4c3c2886fdc2894b627332ff7edffa5b1083ad86dcced56bfb0d9fe03f";
   hasRunfiles = true;
   version = "0.7";
 };
+"xml2pmx" = {
+  revision = 57972;
+  sha512.run = "9545fb5ca0e95788afab79d8a29336f337619adbcac68472bb5de6af6c54187f19bda655232175223168891c064f6fadc67c4ab8f5a0256e2c55e1a65c5e6f6b";
+  sha512.doc = "973960f65159f5107caa7e9a041dca75f0171fc61f94794c7b7560eb9b6898534974fb8b360a28dfa3a01d422b71618bcaf8aba2ed25ae4d4b9f67d24ab730be";
+};
 "xmltex" = {
-  revision = 53216;
-  deps."latex" = tl."latex";
-  deps."pdftex" = tl."pdftex";
-  deps."tex" = tl."tex";
-  deps."xmltexconfig" = tl."xmltexconfig";
+  revision = 57186;
+  deps."atbegshi" = tl."atbegshi";
+  deps."atveryend" = tl."atveryend";
   deps."babel" = tl."babel";
   deps."cm" = tl."cm";
+  deps."dehyph" = tl."dehyph";
+  deps."everyshi" = tl."everyshi";
+  deps."firstaid" = tl."firstaid";
+  deps."hyph-utf8" = tl."hyph-utf8";
   deps."hyphen-base" = tl."hyphen-base";
+  deps."l3backend" = tl."l3backend";
+  deps."l3kernel" = tl."l3kernel";
+  deps."l3packages" = tl."l3packages";
+  deps."latex" = tl."latex";
   deps."latex-fonts" = tl."latex-fonts";
-  deps."dehyph" = tl."dehyph";
   deps."latexconfig" = tl."latexconfig";
+  deps."pdftex" = tl."pdftex";
+  deps."tex" = tl."tex";
   deps."tex-ini-files" = tl."tex-ini-files";
-  sha512.run = "fc226772fb6487c102419e478e5944aa3e222f2cd5b00e892bf4902ee781795f2e8c8aedcdb40aaed473d65452742d6939b244b4c7852966323a22b375a66019";
-  sha512.doc = "000e0915906b85080455b68898dd76e0049bc27ed41dd01b39ce6566ac8a0f1c79e7373a003079c28a87d97ade76365cc88657f86fb85e4136ebdef9f7983f77";
+  deps."unicode-data" = tl."unicode-data";
+  deps."xmltexconfig" = tl."xmltexconfig";
+  hasFormats = true;
+  sha512.run = "e98a3ab9986d63d2605c87463bb32835d8ffcdd93f577b642da8e8f2447b6a74363c3a5799808c35f2e4b099af2789698ea471e04457a31ba8753ec4762e0ead";
+  sha512.doc = "340859a95a102759494222e0cbf19b7f851c44d4cfeac77cee178b69f576151021de53c32ffb8dcb8ed911dae2eecaac943941481b5cccdfb5302bb8291724fb";
   hasRunfiles = true;
   version = "0.8";
 };
@@ -34350,6 +36296,15 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "2.2";
 };
+"xmuthesis" = {
+  revision = 56614;
+  stripPrefix = 0;
+  sha512.run = "3c9bdbd54cb99bddb9356586a1ba16d8e0ebe10d0120f6d6e7ae1c60375a41ce9ae9c01eded07b122aa323ddcb0e3ed9c68f6da6e716915f523e77bb343ee665";
+  sha512.doc = "07e9b8eeaa864efbe6fb8e1c54e183a65f177b81454a2abc049e2efef8fae1d61a208273fd3cecb9d8bb8d601266f1c4897939c52d43fb5dff92ecdd3855c322";
+  sha512.source = "9f3eaaac30cc9f396a3e33f6216b56485c27eb2f855b511642204025c27b40a529aa6dd1952c753a1fd50474ee6c5ef020f859dcc71e07ece39df090ed7ef46a";
+  hasRunfiles = true;
+  version = "0.4.1";
+};
 "xnewcommand" = {
   revision = 15878;
   stripPrefix = 0;
@@ -34367,18 +36322,18 @@ tl: { # no indentation
   version = "1.0";
 };
 "xpatch" = {
-  revision = 27897;
+  revision = 54563;
   stripPrefix = 0;
-  sha512.run = "8f74955f059b7cc27b01772893cb28c565df3773fe308d7862f7a41bc1930ebe8712468d8e32027d82b3b4f6c1a800b007ae202d8fe672d389f40f582ccb4e70";
-  sha512.doc = "49fb3a9aa844ffe4dfc2e2adcf3ef6135302678bc423c377e171cea4ac784d9e5045e4f080aeec622e2cb5db7f706b8b5592d65e1bab60af766aa7df586979f2";
-  sha512.source = "70bdfc42f330594ad9435acf846243880c3c34cceb57708b8e61fde89e07933f2b9bd131f0ab933d5c7b1076412e150e48357f88ff67441c1e0f4e1d294dca9d";
+  sha512.run = "d96d078066ee7cd39585754b0ed1aa2bd5680f90eb2a879bb2dcb47cfe834094f0b5fa1373ecd7f80f626c1a8a8fd4823525c33fa0e67f63b0beb4031a35956e";
+  sha512.doc = "49479d5a73beda78852f80f786e559caa49b51a44c79e73d689499429ee177ccc1a93064122c13e5cf4e34f00350df3e18fc131505364dd8cbf218e851249e8f";
+  sha512.source = "bed0cd07054aa93d1bc328b57792c79ae90c3f5feb5b6f86e76b4b7c4a2b583248c19b9147d268e1dcb16c107b0dc18b34fe13f537b10042839a46a98b5afb25";
   hasRunfiles = true;
-  version = "0.2";
+  version = "0.3";
 };
 "xpdfopen" = {
-  revision = 52954;
-  sha512.run = "4bc35a5699e39b12f6f38b48ed7e136e9c5c54cbcad71119d7ffcb0688df9739187b4e0042782a2678233b289902b24c6537ba10303ff26846bfe73b98c9f54e";
-  sha512.doc = "8dae12489e11fdc9e5e2aec22a4c70e8f8d15708b907404dde849b915515fe1f3d0771762f3a18112c8e2760e30bd1605d208b4315753ab37f738646e90c6f32";
+  revision = 53998;
+  sha512.run = "fe873bb22b94a26720e37671e283e0085619c2129a4568399544ac0df1e5c443a9476590ca7ef76a21409589eb2416a14165b8a48a6182f3773a3009cb7c1a47";
+  sha512.doc = "bb4be8fe1b4590e74a7573baa1d699895fb62f6b30b05c9c81655001c75ffb43a6d7f92deca337072690ce3297d4ab06f1aca389524c5d5d500a9fce4abd8404";
   version = "0.86";
 };
 "xpeek" = {
@@ -34409,13 +36364,13 @@ tl: { # no indentation
   version = "1.2a";
 };
 "xpinyin" = {
-  revision = 50849;
+  revision = 56709;
   stripPrefix = 0;
-  sha512.run = "7235eeaf6b0218d4ee87a07b8b16034cbd40ccdf77c96baba14d4ab8a6bd5de78c5f5ab68891a6a91fe4bd0a77de146c357f4e4af4ed443ca8a38526f4f53240";
-  sha512.doc = "b20233a1ff1f2f1f1474e5bcf81fab3747c26a3312d91297c73d1e57ebafd9459727c91da025b5cb4c1875ba5876873eb8099ad4012d85a972dc4fd1ea90e7e8";
-  sha512.source = "47dc1053cdbb87ed09e2bdd6c6fe447c011c1c2af4cfc8a1108431aefc3f5dca069a8bc60b0e97c0775a1ad1cfb54999a69ceee7f85fb493c2e8b0f6d634486e";
+  sha512.run = "94ea16ea9d649e28094173862ce5e31c655acef0c21dcd03a6f7d3f5463cdca15da7ea9b4408d539900a7c2d55a7418f4fac8defbe914bcad8c4a58f6e1bdb4d";
+  sha512.doc = "58715c5eb8e0e336bf6de29b47760eedc27802fd82bb120ce37a6502eeb00c8b8230503d660e687131d8312be93a72dc6b2dc15b89cb82d46be5f5b7200a91e9";
+  sha512.source = "edf759656775c8e8f1b3953949d0d1b1d3d34a165b51781d4748034e5a8d3ff19650a4e9a2d7397156f0f77104b5513c61ac84afaf7634a49c52044ee8c03bc5";
   hasRunfiles = true;
-  version = "2.7";
+  version = "2.9";
 };
 "xprintlen" = {
   revision = 35928;
@@ -34443,21 +36398,21 @@ tl: { # no indentation
   version = "0.4";
 };
 "xsavebox" = {
-  revision = 52780;
+  revision = 54097;
   stripPrefix = 0;
-  sha512.run = "c6d04ba20e6218c39271dff28864fdd4063f0cae3f07fb5fe9452e27588873364d777815e9a08d0ca8324a1d92d693a91895ef66939e374cde0bb2722a6be3f3";
-  sha512.doc = "ef5f40ad12ec9f7c957a8329d396677667c1bb6288769259a5763e68f34e71b7473435ebc44dc7c8a6b9696a5f29d5f66cc2a070628b11ee585c7ee5ef955e74";
-  sha512.source = "a49c6d3f638335dd1e0f6a8064712c2970e7efaa0973cce4c46b6b05829f77186a88d077fe296fa0eea2529aec440efd67bc2f9283544a70fae6cd25c5877468";
+  sha512.run = "bcfb1ea2043163f3ebba520235ebcf8a0cb69a4e167a439adb24f0582166f3e7a74072ba5ccfc5482948a6a423c6684dcee4dda7f0170f6eea2e86292087818a";
+  sha512.doc = "0722ad2a511709f68254c97cce7eac6a2e0d5b452d146dcb9f264f385444d6f92021161378cfadd1c26442696e2fcee3cab7a720ce4a68463f4eccacb11639a0";
+  sha512.source = "6064e060001f189f8a58b5fe3de87d68366d48bea8c6b0ad8e41f32ef6eb0d87dd12662aa8ad27e89b8701c32822503f6bc830837f7c33ba46ef3a9db651fa48";
   hasRunfiles = true;
-  version = "0.15";
+  version = "0.16";
 };
 "xsim" = {
-  revision = 53893;
+  revision = 57619;
   stripPrefix = 0;
-  sha512.run = "e3ccb054ca87583ff2dd5e624f0ca55cae742f53784fca9121e9e51d9cbb6c8af6b577fd5fd6b865924ddd63a4e4b1517f824907b0f0748a4f8963b671964055";
-  sha512.doc = "d85ad02e7bee8f08b28fc903c6178fddba89baaa3bb82dffd58396fea29bc6bbe68cd51621a0c422a0e7097f1536d6e995d86b8ed78fc15a261ec828352e1fb2";
+  sha512.run = "37325711b273ad2f2b5fb762f91ec4a0373c92d6b0f418a68d0560c1d83c8d9c673b7cfbe93bab446f61209ae2d49b298aefd6da43b0be9732be5cd996125910";
+  sha512.doc = "2b0c825844d220efe5d4bf77ae53e0a155a5b8603630b361b45b4267083b15b3d7149d1d4fab1191064b3edc650195eb4497e0370c06ff39a93d673adafcb9f6";
   hasRunfiles = true;
-  version = "0.18";
+  version = "0.20c";
 };
 "xskak" = {
   revision = 51432;
@@ -34503,12 +36458,12 @@ tl: { # no indentation
   version = "0.981";
 };
 "xurl" = {
-  revision = 53538;
+  revision = 57265;
   stripPrefix = 0;
-  sha512.run = "c034606febfdf397774f51f5057fb12243e5fbcd6ff8c9aa1fe60fa2643b5cdfe6c36558e5a4398e7c38c0da520ffeb53a930fda983b79c9d41fb31b74d6ad25";
-  sha512.doc = "6c8833dcbec24d6b336b6dff58558ce4c38de22032f24d7510db85e987c83b2cd2089bc1a5b414ac82987bd8387dadf3456f0ca3885607285834688fafd29175";
+  sha512.run = "51251afe43f9b175e4afd901f10edd63bad590b0591f117d423866ed1a82e2c0ab35dee7e03250c331f8a8605f9c6ba8357e93ef0aa80d40dc03379bde24dd1c";
+  sha512.doc = "df7e35d13f340c44813e0656c36148b92319a7099ae47eb02513d33834b642528eff2e81299aa670c2a4572e78c830d48c83b46996700e9fb568db16b84f1e57";
   hasRunfiles = true;
-  version = "0.09";
+  version = "0.09a";
 };
 "xwatermark" = {
   revision = 28090;
@@ -34592,19 +36547,19 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "yathesis" = {
-  revision = 50630;
+  revision = 58683;
   stripPrefix = 0;
-  sha512.run = "f1ce86e173825007f87c2e4c3020ac761e7689cc079993dc7fbcb89985cc8e2684eb5bee4dc7e0a7bf44df0a37fe1d8fb8193e7006b511c256dad2b1b1e1ca4b";
-  sha512.doc = "55f640414d27a1786edb8c1e4542bdabef94fe89e40c5eb06b56db97c6cd06f72f9386a4d27e674e956e7230015406a8f9df54f90e898ea8b7f174f5eeae6dd6";
-  sha512.source = "f3014c4a15010794a30c14a51f9fba4ef39a128e4dd566991b57bd66be3f877745e14c8b1f8e50942870dd3867c892a99d352a9c2d8b275fb299d8c58c511de6";
+  sha512.run = "199abb5d02a37420e1c382916880428d5426eacaf007e3e264bf257710823d8380fd0bb69c40065d7259e28769dff4d6c90bd55a5fb931b6497d64b106e9c7cf";
+  sha512.doc = "1beedc083923302c094a4f2c7091743c87188292b8633646877c575e1bb724f42b171805f0ce39f615c7485769f191676310e1f5257c0f4c03aa65ec3309c4cb";
+  sha512.source = "7c99e72a3ef76aae6f5e4ea77d78cd6cd2c98c7163b468e317f4de72734a3e4e8c2698b93dbc82df20f5b8197905f9f253b5d652debd6fa0c0d5377cc2015611";
   hasRunfiles = true;
-  version = "0.99u";
+  version = "1.0.7";
 };
 "yax" = {
-  revision = 21183;
+  revision = 54080;
   stripPrefix = 0;
-  sha512.run = "2fad927b46209e0705f96bcc5aafa9774d5a7cd7e4f984e48950525c282cc5e2273a21f5645bcdecff0a102a236f9f8470fffde829b44a886fe40f47699f94b2";
-  sha512.doc = "f648b61eebdeb9a1d0497cc22205361c5495139fbf835173e067773956793c28220a6a6b8d3f7ac7f275cbcbb77b06a1774e0f4519587fca390d0aabe34ccf80";
+  sha512.run = "a625e7e4d26368732a8700f71f102fb17965a6a85d5a3c28e170dc19248ec0f3cdfd0905c76f0431585e955e29293b49b6dffcf93ed7bdbd80b5d62cca2775e7";
+  sha512.doc = "783a606e55a6d2bbd1fb4052bcc84ac499953838808161facd8a76fe0e46a3de8ff0399831bc4e8ddbab02be84a3da68f0f7535c0d3b0b1f3d8d6cfba63ab0a8";
   hasRunfiles = true;
   version = "1.03";
 };
@@ -34624,11 +36579,11 @@ tl: { # no indentation
   hasRunfiles = true;
 };
 "ydoc" = {
-  revision = 26202;
+  revision = 56291;
   stripPrefix = 0;
-  sha512.run = "4e4292e4e6e6b4f5db8ff0721eacb582960932f48a221835c3e07841168b1f81227fcaaa41ed619430c5455edaef38dc073a8cf6c584ac759e88b9f40710caa3";
-  sha512.doc = "c5257e669d802563c6ecec45a53645a69bc4c7980c95dc0a98164c950c1e5b12b5b4d012bd8a97164fa9b055eb84184c4df520b08949f68283d2ef2e33658838";
-  sha512.source = "a7bfd7160ce16a03505347e158b629c98519f2114f057529a52caf24f818d1553e76714936a9f92b0020b9d16826b5fd259a12d68fe63037cb04f89ef11657a4";
+  sha512.run = "59c30887f6f7e5efb1aadd24b63fe15489f99c7af2f448aeb4e8cc10e846831df2061aa470e8bd104f7ae86dd438bb65a91e7666c68a5ecc18b607adf6962c97";
+  sha512.doc = "74d2d0ea05849b280aba78ed0f3ac409cb379938166e791c2fbc77f3bb792e4df3bba287912b6bd35ad9e99592f8b36ff2113ab8c667ad58374dc20298af9121";
+  sha512.source = "3b09eb1036668097dc185595a8ed703b99f83cab068ab8221385d8ca3dfa73b476478f337adb1ed273554c6c2011f0f03ae1b4138a5d1f62268cbf892e70051c";
   hasRunfiles = true;
   version = "0.6alpha";
 };
@@ -34650,13 +36605,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "yhmath" = {
-  revision = 50127;
+  revision = 54377;
   stripPrefix = 0;
-  sha512.run = "10b98d5af7f179643bc0cd0fbf63e4a088c07e64ca6ac5f20ef05f3a00226159354f212de85ade3c7d96b9fb67e46207fbf7bed9f47a542df8427ac5fe248653";
-  sha512.doc = "cae6f92dd19363251fddd7e6a2934e10e3b22840b5be4c9cc94c399637cfee241fcb34dfa22e93fbde3a599e14c82fb32a72c329c5de3af395ef2848ae7841ff";
-  sha512.source = "61154cd7ae0f43ccc31fdf1c2f2c7e5307bc886990c6a137089cf0d40e7634952026458e92b9c2ec5c7ccf8b6a2969f018c1653b9909d6e0ee848177accb4124";
+  sha512.run = "88476f5355d041f1920c4f0f954853828bdfaf27b9d0441982a38e3dfe79b40377a83614794024ee8c8463eaf5d1c350bff033f1c53e031451ab7cd095e14948";
+  sha512.doc = "56fb12fcc4099f14c5746727b3c3051d84097cd8a715023545c3a2fafcc5a5abe55980a12e4384f674ef6cad2c7d6dab2beb8374e4cb3af81f711c2e8320d97b";
+  sha512.source = "57a97c1310cfefcc453d031dd3c4701bac2a36c04f435f7a823e1b83671afccadc33d213e9578f4bbf806b6c73aaf33d3816dcafa86fb4447d53659e11f83072";
   hasRunfiles = true;
-  version = "1.5";
+  version = "1.6";
 };
 "yinit-otf" = {
   revision = 40207;
@@ -34676,11 +36631,11 @@ tl: { # no indentation
   version = "3.6";
 };
 "youngtab" = {
-  revision = 17635;
+  revision = 56500;
   stripPrefix = 0;
-  sha512.run = "d394f53ea68d2874036faa0d00323a0c15e3144a2433e27db0a630f05a637bad37d297132a92c00bc5ba3fb8a8bc643bc8778787b8897ab03296eb62d33683b6";
-  sha512.doc = "38d42380d67372f2b84984cf41b0cd775c6b707405baffc5852cb147bba914899bcc09230e645e7779deb142358a4bf46f1efa0b47f159eeadc09d3e99f2728d";
-  sha512.source = "88d214c9cd6d87f6cd2c075ebb5554c55038f0eacbe047d7d90ab1a3fe695a9329c34149c2026fafed045e02449688e2fc3b0b5ecc24d0960640a3557a284739";
+  sha512.run = "4ac5c3803a2e815c51178fa30086ad25c1dd2b430753d582376c9f6c720bd1a72db1d285d2b0cd810e3564961ce3641f3b482d685126e880cfb1dc856dc74bc0";
+  sha512.doc = "b291614a22227693f93422af280200fd927fcefd0399d4294f934ff8882d26e263a3a1dcbac3ad2289d2adf2ff92c76a8223eb450de46e0b1df283af31bac3da";
+  sha512.source = "57110b41ada1866d327eee8f1eae1ad61ad7bea1428bf9a3ccd31b9cf27e19537952ef756299f62e5204e5fddf5d032c8170eb36d6a9fe73e66c8d72e1c4f085";
   hasRunfiles = true;
   version = "1.1";
 };
@@ -34690,6 +36645,14 @@ tl: { # no indentation
   sha512.doc = "7d3cddf3f2d54283b777c7ab7867df68fdb484c67d2f88589e29fc087db721e7ba9e0fcea2ffde9328e89075884d668b7de8fc61f462b735d9f1cfadb9662463";
   hasRunfiles = true;
 };
+"yquant" = {
+  revision = 58712;
+  stripPrefix = 0;
+  sha512.run = "90c4488ffbb6a2ec49297b7584c27416044220253fb7f20104402062e57df415d0f89dd4545b4964e5c3ca28851cc4762301151963d0be74200f7809ec31f494";
+  sha512.doc = "ada2f983ef92968da06bbf21371b58ce02a257992160e898ad75a66fbb7aae3fbb00178d2663e1d816e3928eb187f44b50c812239f0c1b5861786ad9d5ccf812";
+  hasRunfiles = true;
+  version = "0.4";
+};
 "ytableau" = {
   revision = 27430;
   stripPrefix = 0;
@@ -34711,6 +36674,14 @@ tl: { # no indentation
   sha512.run = "e3e6e69b82858d8bd653bcb112ed81b8b5aacc0b915b5e4ed4288f5aef896211e75b85b1b647989e0ffa431ec204a9d8ad27b2e60bc2b28eea83eb3518945bf1";
   hasRunfiles = true;
 };
+"zbmath-review-template" = {
+  revision = 58543;
+  stripPrefix = 0;
+  sha512.run = "aaadb2179f8c8c3b48dca8f4d021a51dd34863f7f3c30cb6705c07026218684038f398468a9b4a779d8a3cc4ab2520dadb81890690b173b20b1f5baf3644886b";
+  sha512.doc = "8bdf2cd42ba8cc24e55fcbf8061a2cbbcdd750d77f5ad3c613d721eec2ba164cc69a73a85382d5a2893121300ce2657f291d181c92d4b0f8a7b574229d6f97d9";
+  hasRunfiles = true;
+  version = "1.0";
+};
 "zebra-goodies" = {
   revision = 51554;
   stripPrefix = 0;
@@ -34736,13 +36707,13 @@ tl: { # no indentation
   version = "1.0e";
 };
 "zhlipsum" = {
-  revision = 48629;
+  revision = 54994;
   stripPrefix = 0;
-  sha512.run = "64ccc1f0baf30980162ce259d897a9fc97c6771768fadc3958e398e38f96ac6ea115b126a1b106270a7a509358108ffe8b93cf52af87503c66b8a365585391f6";
-  sha512.doc = "06692d711ee3009bf11bc641569a9e3b0d6e339e0b7dca6e5e5d3a689b3fd24a5d4eaa45de7cd4ac2c0e3feea5c2612881dcc4bca88b12f554bc78fe96cb8220";
-  sha512.source = "32d12c4f3699275119f5dacbd7b6bbb559555ddceeccfcd908e0bb6f2db50b76cbe0323b7ce6e0474d369a1e343718cb0024cd0f87487e629dfc9f104c3e6950";
+  sha512.run = "d62f2a16f2303db7846073b215b3e8f822b7470510eb84367b1ba177c971e587adcea92757a3a4f5612abf103bd11cc8f2ae3ab953833365fb2255ee87563cb8";
+  sha512.doc = "dcd0d706d9e402ad1b4eab910294ac4e802a58c2e54a3ee19b6dcef9fc3e052b84b559f452bb32b78d27a99e65a0820d2029e53079ce21068618f5c620f9502f";
+  sha512.source = "92054c4839953e84a15abc6ca280ca2d755d5854b284c30521f17e54528bd4c369e9298e596606c877ecc74533fa81d8a8d544c2819f14d48157ee996a26a922";
   hasRunfiles = true;
-  version = "1.1.1";
+  version = "1.2.0";
 };
 "zhmetrics" = {
   revision = 22207;
@@ -34762,13 +36733,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "zhnumber" = {
-  revision = 50850;
+  revision = 54960;
   stripPrefix = 0;
-  sha512.run = "f5e0783636ca643463811293816c95f2e20345fc6b08f2bd22143ead830b102b7d5acb6dd587975ecae205ce8b79d75cff62bab153a6ada689958835c77298c5";
-  sha512.doc = "d58579fcb6b5464db3d1ec20942b61516eb481df88fa23ef24f890a937fa72b62c6fef7fd2772172c4faf1a616805bfe32bdf39e17d854b907dc61ec9f6b6f4e";
-  sha512.source = "c3ac546227494e59e44324c1f637e280982ba1a27644add9d1c8248b2cee0299154adef6d673eba91ef39124db16dafe0d30dc0ec09bfe9b2dc9f28b6b10bf61";
+  sha512.run = "f9548c3e89e837f8967122de1b2ed45c083a741be3862824ef2bfb5b60bd0758e3f4360b2c1a1a886fb68da4947a77c6431c10339676db0b7518bc93db6c411f";
+  sha512.doc = "36de5c397a5966d5da5b71ee1a05b0e3d597782122e86dd184e146699fd5ecf08b6c2ed014bcaa86db8c9b2146d3863d8aa46078b94b33fb3fcf4a7a5a14f271";
+  sha512.source = "043029751abb4630fd1486dabea05f01a97557682cd00c7640e2c1fdf053b0bc5a99ba52debbdc6a98232cb5d8aef49cb68f17c1376f802c900c49f18e07c1f4";
   hasRunfiles = true;
-  version = "2.7";
+  version = "2.8";
 };
 "zhspacing" = {
   revision = 41145;
@@ -34802,13 +36773,13 @@ tl: { # no indentation
   version = "1.0";
 };
 "zref" = {
-  revision = 52980;
+  revision = 56611;
   stripPrefix = 0;
-  sha512.run = "a4c944f78f4dd08e093a7b422983114fe335251f25fc9b9d2f64e08e725a05ab986729bc9b8a8eb7af5b6acf7490220fb5fe3ec7bf662583e1ddac09241291ec";
-  sha512.doc = "4166217c06abecef648706304e3ed02cd43c29317d918fe3fc60873e0b12d074e5a4304d57496b8ab7f902d4eeb848c38e068eeeddba559b0fb5ec88e1f316db";
-  sha512.source = "6baa0269f28d6c6bfb3e2853620bc584da225c9ed6e8ab4e22747075c6af245bd3e56b686524261799257d83fbfccb224a4b5a3f6265d340c5d007a98f8e5702";
+  sha512.run = "f64604e9308278b34347bcbcaed39b500371c575082311c1fb28bf6bd7db26fc2d2e3d3e8843e3a195fd22050450bffb18c3e8b64a54f0787c1122ac3901ad2f";
+  sha512.doc = "928c54696572694b1fc7712a0f8357851c18d83bf723c6f03a9f784dfbd123b2c886593bc95de0d3b7f8109e1d0b3a52cc6ef1a877c0506130e7c5d96b046a67";
+  sha512.source = "82e6c4210453e9f7adfd93673aa2e7dfbf2c39e938b9ad0d2309ea59b53259d1d1d9b05924f2f6f9f64ba29ecdbda8e074527923fdfd1551a42b1057450b2fc5";
   hasRunfiles = true;
-  version = "2.28";
+  version = "2.32";
 };
 "zwgetfdate" = {
   revision = 15878;
@@ -34849,4 +36820,12 @@ tl: { # no indentation
   hasRunfiles = true;
   version = "0.7";
 };
+"zztex" = {
+  revision = 55862;
+  stripPrefix = 0;
+  sha512.run = "eb325564ee9e001e0e5ff79b6e3cc9f22f5b9b100ef021552f54953802edbce1e4b1295ff4590832f959386db7a63aaf8e31dc2d61b38e5c8a140082ca423e83";
+  sha512.doc = "bd2a3a42b62da61db572058b4731161425545374584a575607f11bb2302aa2ce900b694aaf06562f4c9eb9046c80c4fbf5b50233f6d0526fac787c213070d542";
+  hasRunfiles = true;
+  version = "17.7";
+};
 }
diff --git a/pkgs/tools/typesetting/tex/texlive/poppler84.patch b/pkgs/tools/typesetting/tex/texlive/poppler84.patch
deleted file mode 100644
index 02dc9e2413d..00000000000
--- a/pkgs/tools/typesetting/tex/texlive/poppler84.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From cf05aae9685e5c6a46b4313e7bfce49edc6f51f9 Mon Sep 17 00:00:00 2001
-From: Mikle Kolyada <zlogene@gentoo.org>
-Date: Tue, 31 Dec 2019 11:29:30 +0300
-Subject: [PATCH] poppler-0.84 compat
-
-Upstream report: https://tug.org/pipermail/tex-k/2019-December/003096.html
-
-Signed-off-by: Mikle Kolyada <zlogene@gentoo.org>
----
- texk/web2c/pdftexdir/utils.c    | 1 -
- texk/web2c/xetexdir/XeTeX_ext.c | 3 +++
- 2 files changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/texk/web2c/pdftexdir/utils.c b/texk/web2c/pdftexdir/utils.c
-index c93a8781..6f866e76 100644
---- a/texk/web2c/pdftexdir/utils.c
-+++ b/texk/web2c/pdftexdir/utils.c
-@@ -33,7 +33,6 @@ with this program.  If not, see <http://www.gnu.org/licenses/>.
- #include "ptexlib.h"
- #include <png.h>
- #ifdef POPPLER_VERSION
--#include <poppler-config.h>
- #define xpdfVersion POPPLER_VERSION
- #define xpdfString "poppler"
- #else
-diff --git a/texk/web2c/xetexdir/XeTeX_ext.c b/texk/web2c/xetexdir/XeTeX_ext.c
-index 4968ee41..0aee4ee3 100644
---- a/texk/web2c/xetexdir/XeTeX_ext.c
-+++ b/texk/web2c/xetexdir/XeTeX_ext.c
-@@ -38,7 +38,10 @@ authorization from the copyright holders.
- 
- #include <w2c/config.h>
- 
-+#ifndef POPPLER_VERSION
- #include <poppler-config.h>
-+#endif
-+
- #include <png.h>
- #include <zlib.h>
- #include <graphite2/Font.h>
--- 
-2.24.1
-
diff --git a/pkgs/tools/typesetting/tex/texlive/tl2nix.sed b/pkgs/tools/typesetting/tex/texlive/tl2nix.sed
index 2f30aa69fe2..61150fa8b7c 100644
--- a/pkgs/tools/typesetting/tex/texlive/tl2nix.sed
+++ b/pkgs/tools/typesetting/tex/texlive/tl2nix.sed
@@ -32,3 +32,7 @@ s/^catalogue-version_(.*)/  version = "\1";/p
 # extract deps
 s/^depend ([^.]*)$/  deps."\1" = tl."\1";/p
 
+# extract hyphenation patterns and formats
+# (this may create duplicate lines, use uniq to remove them)
+/^execute\sAddHyphen/i\  hasHyphens = true;
+/^execute\sAddFormat/i\  hasFormats = true;
diff --git a/pkgs/tools/typesetting/tikzit/default.nix b/pkgs/tools/typesetting/tikzit/default.nix
index 31baa431bfc..2f6d169d0cb 100644
--- a/pkgs/tools/typesetting/tikzit/default.nix
+++ b/pkgs/tools/typesetting/tikzit/default.nix
@@ -1,14 +1,14 @@
-{ stdenv, mkDerivation, fetchFromGitHub, qmake, qttools, qtbase, poppler, flex, bison }:
+{ lib, mkDerivation, fetchFromGitHub, qmake, qttools, qtbase, poppler, flex, bison }:
 
 mkDerivation {
   pname = "tikzit";
-  version = "2.1.5";
+  version = "2.1.6";
 
   src = fetchFromGitHub {
     owner = "tikzit";
     repo = "tikzit";
-    rev = "v2.1.5";
-    sha256 = "1xrx7r8b6nb912k91pkdwaz2gijfq6lzssyqxard0591h2mycbcg";
+    rev = "v2.1.6";
+    sha256 = "0ba99pgv54pj1xvhrwn9db2w0v4h07vsjajcnhpa2smy88ypg32h";
   };
 
   nativeBuildInputs = [ qmake qttools flex bison ];
@@ -17,7 +17,7 @@ mkDerivation {
   # src/data/tikzlexer.l:29:10: fatal error: tikzparser.parser.hpp: No such file or directory
   enableParallelBuilding = false;
 
-  meta = with stdenv.lib; {
+  meta = with 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.
diff --git a/pkgs/tools/typesetting/xmlroff/default.nix b/pkgs/tools/typesetting/xmlroff/default.nix
index eb026e5557e..61355910d59 100644
--- a/pkgs/tools/typesetting/xmlroff/default.nix
+++ b/pkgs/tools/typesetting/xmlroff/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub
+{ lib, stdenv, fetchFromGitHub
 , autoreconfHook
 , gtk2
 , libxml2
@@ -6,7 +6,7 @@
 , pango
 , pangoxsl
 , perl
-, pkgconfig
+, pkg-config
 , popt
 }:
 
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
     sha256 = "0dgp72094lx9i9gvg21pp8ak7bg39707rdf6wz011p9s6n6lrq5g";
   };
 
-  nativeBuildInputs = [ autoreconfHook pkgconfig ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
   buildInputs = [
     libxml2
     libxslt
@@ -46,7 +46,7 @@ stdenv.mkDerivation rec {
     substituteInPlace Makefile --replace "docs" ""  # docs target wants to download from network
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "XSL Formatter";
     homepage = "http://xmlroff.org/";
     platforms = platforms.unix;
diff --git a/pkgs/tools/typesetting/xmlto/default.nix b/pkgs/tools/typesetting/xmlto/default.nix
index f37bfb7c133..73007b13719 100644
--- a/pkgs/tools/typesetting/xmlto/default.nix
+++ b/pkgs/tools/typesetting/xmlto/default.nix
@@ -1,11 +1,12 @@
-{ fetchurl, stdenv, libxml2, libxslt
+{ fetchurl, lib, stdenv, libxml2, libxslt
 , docbook_xml_dtd_45, docbook_xsl, w3m
 , bash, getopt, makeWrapper }:
 
 stdenv.mkDerivation rec {
-  name = "xmlto-0.0.28";
+  pname = "xmlto";
+  version = "0.0.28";
   src = fetchurl {
-    url = "http://fedorahosted.org/releases/x/m/xmlto/${name}.tar.bz2";
+    url = "https://releases.pagure.org/${pname}/${pname}-${version}.tar.bz2";
     sha256 = "0xhj8b2pwp4vhl9y16v3dpxpsakkflfamr191mprzsspg4xdyc0i";
   };
 
@@ -27,7 +28,7 @@ stdenv.mkDerivation rec {
 
   postInstall = ''
     wrapProgram "$out/bin/xmlto" \
-       --prefix PATH : "${stdenv.lib.makeBinPath [ libxslt libxml2 getopt ]}"
+       --prefix PATH : "${lib.makeBinPath [ libxslt libxml2 getopt ]}"
 
     # `w3m' is needed for HTML to text conversions.
     substituteInPlace "$out/share/xmlto/format/docbook/txt" \
@@ -44,8 +45,8 @@ stdenv.mkDerivation rec {
       necessary post-processing.
     '';
 
-    license = stdenv.lib.licenses.gpl2Plus;
+    license = lib.licenses.gpl2Plus;
     homepage = "https://fedorahosted.org/xmlto/";
-    platforms = stdenv.lib.platforms.unix;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/video/atomicparsley/default.nix b/pkgs/tools/video/atomicparsley/default.nix
index 9a19a6789e5..92059699e98 100644
--- a/pkgs/tools/video/atomicparsley/default.nix
+++ b/pkgs/tools/video/atomicparsley/default.nix
@@ -1,39 +1,31 @@
-{ stdenv, fetchhg, autoreconfHook, zlib, Cocoa }:
+{ lib, stdenv, fetchFromGitHub, cmake, zlib, Cocoa }:
 
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "atomicparsley";
-  version = "0.9.6";
+  version = "20210617.200601.1ac7c08";
 
-  src = fetchhg {
-    url = "https://bitbucket.org/wez/atomicparsley";
-    sha256 = "05n4kbn91ps52h3wi1qb2jwygjsc01qzx4lgkv5mvwl5i49rj8fm";
+  src = fetchFromGitHub {
+    owner = "wez";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-IhZe0vM41JhO8H79ZrRx4FRA4zfB6X0daC8QoE5MHmU=";
   };
 
-  nativeBuildInputs = [ autoreconfHook ];
+  nativeBuildInputs = [ cmake ];
 
   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;
+                ++ lib.optionals stdenv.isDarwin [ Cocoa ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D AtomicParsley $out/bin/AtomicParsley
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A CLI program for reading, parsing and setting metadata into MPEG-4 files";
+    homepage = "https://github.com/wez/atomicparsley";
+    license = licenses.gpl2Plus;
     platforms = platforms.unix;
     maintainers = with maintainers; [ pjones ];
   };
diff --git a/pkgs/tools/video/bento4/default.nix b/pkgs/tools/video/bento4/default.nix
index 94a1a5d04f3..00180078d9d 100644
--- a/pkgs/tools/video/bento4/default.nix
+++ b/pkgs/tools/video/bento4/default.nix
@@ -1,35 +1,39 @@
-{ stdenv, fetchFromGitHub
+{ lib, stdenv, fetchFromGitHub
 , cmake
 }:
 stdenv.mkDerivation rec {
   pname = "bento4";
-  version = "1.5.1-629";
+  version = "1.6.0-638";
 
   src = fetchFromGitHub {
     owner = "axiomatic-systems";
     repo = "Bento4";
     rev = "v${version}";
-    sha256 = "1614idy0r7qrkiaq4kz3gh1b1bpx592aqvi574kxnjrxc34kpmb3";
+    sha256 = "1hxr4lds4dl46advshk7azg28fcpcjaa5pzk2zzpsc9l69s0bnxk";
   };
 
-  patches = [ ./libap4.patch ];
+  patches = [
+    ./libap4.patch # include all libraries as shared, not static
+  ];
 
   nativeBuildInputs = [ cmake ];
 
   cmakeFlags = [ "-DBUILD_SHARED_LIBS=ON" ];
 
   installPhase = ''
+    runHook preInstall
     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" {} \;
+    runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/video/dvgrab/default.nix b/pkgs/tools/video/dvgrab/default.nix
index 9077d34614d..18088eb6c30 100644
--- a/pkgs/tools/video/dvgrab/default.nix
+++ b/pkgs/tools/video/dvgrab/default.nix
@@ -1,5 +1,5 @@
-{ fetchFromGitHub, stdenv, libunwind, libraw1394, libjpeg, libiec61883, libdv
-, libavc1394, pkgconfig, autoreconfHook }:
+{ fetchFromGitHub, lib, stdenv, libunwind, libraw1394, libjpeg, libiec61883, libdv
+, libavc1394, pkg-config, autoreconfHook }:
 
 stdenv.mkDerivation {
   name = "dvgrab-2016-05-16";
@@ -17,10 +17,10 @@ stdenv.mkDerivation {
   ];
 
   nativeBuildInputs = [
-    autoreconfHook pkgconfig
+    autoreconfHook pkg-config
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Receive and store audio & video over IEEE1394";
 
     longDescription = ''
diff --git a/pkgs/tools/video/flvtool2/default.nix b/pkgs/tools/video/flvtool2/default.nix
deleted file mode 100644
index 9a1f9f12103..00000000000
--- a/pkgs/tools/video/flvtool2/default.nix
+++ /dev/null
@@ -1,17 +0,0 @@
-{ lib, buildRubyGem, ruby }:
-
-buildRubyGem rec {
-  inherit ruby;
-  name = "${gemName}-${version}";
-  gemName = "flvtool2";
-  version = "1.0.6";
-  source.sha256 = "0xsla1061pi4ryh3jbvwsbs8qchprchbqjy7652g2g64v37i74qj";
-
-  meta = {
-    broken = true; # depends on ruby 2.2
-    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/pkgs/tools/video/gopro/default.nix b/pkgs/tools/video/gopro/default.nix
index 9979b224868..a1991772bf1 100644
--- a/pkgs/tools/video/gopro/default.nix
+++ b/pkgs/tools/video/gopro/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub
-, ffmpeg_3
+{ lib, stdenv, fetchFromGitHub
+, ffmpeg
 , imagemagick
 , makeWrapper
 , mplayer
@@ -23,15 +23,15 @@ stdenv.mkDerivation rec {
 
     install -Dm755 gopro -t $out/bin
     wrapProgram $out/bin/gopro \
-      --prefix PATH ":" "${stdenv.lib.makeBinPath [ ffmpeg_3 imagemagick mplayer ]}"
+      --prefix PATH ":" "${lib.makeBinPath [ ffmpeg imagemagick mplayer ]}"
 
     runHook postInstall
   '';
 
-  meta = with stdenv.lib; {
+  meta = with 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;
+    platforms = platforms.unix;
     license = licenses.gpl3;
     maintainers = with maintainers; [ jonringer ];
   };
diff --git a/pkgs/tools/video/harvid/default.nix b/pkgs/tools/video/harvid/default.nix
new file mode 100644
index 00000000000..812457f35cb
--- /dev/null
+++ b/pkgs/tools/video/harvid/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, ffmpeg, libjpeg, libpng, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "harvid";
+  version = "0.8.3";
+
+  src = fetchFromGitHub {
+    owner = "x42";
+    repo = "harvid";
+    rev = "v${version}";
+    sha256 = "0l1plfsfh2ixhlzg3hqqvjj42z7g422718a9kgbh7b4p882n71x7";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ ffmpeg libjpeg libpng ];
+
+  makeFlags = [ "DESTDIR=$(out)" "libdir=\"/lib\"" ];
+
+  postInstall = ''
+    mkdir -p $out/bin
+    mv $out/usr/local/bin/* $out/bin
+    mv $out/usr/local/share $out/
+    rm -r $out/usr
+  '';
+
+  meta = with lib; {
+    description =
+      "Decodes still images from movie files and serves them via HTTP";
+    longDescription = ''
+      harvid's intended use-case is to efficiently provide frame-accurate data
+      and act as second level cache for rendering the video-timeline in Ardour,
+      but it is not limited to that: it has applications for any task that
+      requires a high-performance frame-accurate online image extraction
+      processor.
+    '';
+    homepage = "http://x42.github.io/harvid";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ mitchmindtree ];
+  };
+}
diff --git a/pkgs/tools/video/mjpegtools/default.nix b/pkgs/tools/video/mjpegtools/default.nix
index 6c74aab9573..45f63dc7727 100644
--- a/pkgs/tools/video/mjpegtools/default.nix
+++ b/pkgs/tools/video/mjpegtools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchurl, gtk2, libdv, libjpeg, libpng, libX11, pkgconfig, SDL, SDL_gfx
+{ stdenv, lib, fetchurl, gtk2, libdv, libjpeg, libpng, libX11, pkg-config, SDL, SDL_gfx
 , withMinimal ? true
 }:
 
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
 
   hardeningDisable = [ "format" ];
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   buildInputs = [ libdv libjpeg libpng ]
               ++ lib.optionals (!withMinimal) [ gtk2 libX11 SDL SDL_gfx ];
 
@@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
 
   outputs = [ "out" "lib" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "A suite of programs for processing MPEG or MJPEG video";
     homepage = "http://mjpeg.sourceforge.net/";
     license = licenses.gpl2;
diff --git a/pkgs/tools/video/play-with-mpv/default.nix b/pkgs/tools/video/play-with-mpv/default.nix
new file mode 100644
index 00000000000..d9ab0493160
--- /dev/null
+++ b/pkgs/tools/video/play-with-mpv/default.nix
@@ -0,0 +1,35 @@
+{ lib, python3Packages, fetchFromGitHub, fetchurl, youtube-dl, git }:
+
+let
+  install_freedesktop = fetchurl {
+    url = "https://github.com/thann/install_freedesktop/tarball/2673e8da4a67bee0ffc52a0ea381a541b4becdd4";
+    sha256 = "0j8d5jdcyqbl5p6sc1ags86v3hr2sghmqqi99d1mvc064g90ckrv";
+  };
+in
+python3Packages.buildPythonApplication rec {
+  pname = "play-with-mpv";
+  version = "unstable-2020-05-18";
+
+  src = fetchFromGitHub {
+      owner = "thann";
+      repo = "play-with-mpv";
+      rev = "656448e03fe9de9e8bd21959f2a3b47c4acb8c3e";
+      sha256 = "1qma8b3lnkdhxdjsnrq7n9zgy53q62j4naaqqs07kjxbn72zb4p4";
+  };
+
+  nativeBuildInputs = [ git ];
+  propagatedBuildInputs = [ youtube-dl ];
+
+  postPatch = ''
+    substituteInPlace setup.py --replace \
+    '"https://github.com/thann/install_freedesktop/tarball/master#egg=install_freedesktop-0.2.0"' \
+    '"file://${install_freedesktop}#egg=install_freedesktop-0.2.0"'
+  '';
+
+  meta = with lib; {
+    description = "Chrome extension and python server that allows you to play videos in webpages with MPV instead";
+    homepage = "https://github.com/Thann/play-with-mpv";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dawidsowa ];
+  };
+}
diff --git a/pkgs/tools/video/rav1e/default.nix b/pkgs/tools/video/rav1e/default.nix
index f883c423d01..53e139cde3b 100644
--- a/pkgs/tools/video/rav1e/default.nix
+++ b/pkgs/tools/video/rav1e/default.nix
@@ -1,26 +1,43 @@
-{ rustPlatform, fetchFromGitHub, lib, nasm, cargo-c }:
+{ stdenv, rustPlatform, rust, fetchurl, fetchFromGitHub, lib, nasm, cargo-c, libiconv }:
 
-rustPlatform.buildRustPackage rec {
+let
+  rustTargetPlatformSpec = rust.toRustTargetSpec stdenv.hostPlatform;
+in rustPlatform.buildRustPackage rec {
   pname = "rav1e";
-  version = "0.3.3";
+  version = "0.4.1";
 
-  src = fetchFromGitHub {
-    owner = "xiph";
-    repo = "rav1e";
-    rev = "v${version}";
-    sha256 = "0a9dryag4x35a2c45qiq1j5xk9ydcpw1g6kici85d2yrc2z3hwrx";
-  };
+  src = stdenv.mkDerivation rec {
+    name = "${pname}-${version}-source";
+
+    src = fetchFromGitHub {
+      owner = "xiph";
+      repo = "rav1e";
+      rev = "v${version}";
+      sha256 = "0jnq5a3fv6fzzbmprzfxidlcwwgblkwwm0135cfw741wjv7f7h6r";
+    };
+
+    cargoLock = fetchurl {
+      url = "https://github.com/xiph/rav1e/releases/download/v${version}/Cargo.lock";
+      sha256 = "14fi9wam9rs5206rvcd2f3sjpzq41pnfml14w74wn2ws3gpi46zn";
+    };
 
-  cargoSha256 = "1xaincrmpicp0skf9788w5631x1hxvifvq06hh5ribdz79zclzx3";
+    installPhase = ''
+      mkdir -p $out
+      cp -r ./* $out/
+      cp ${cargoLock} $out/Cargo.lock
+    '';
+  };
 
+  cargoSha256 = "0miq6iiywwbxm6k0alnqg6bnd14pwc8vl9d8fgg6c0vjlfy5zhlb";
   nativeBuildInputs = [ nasm cargo-c ];
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
 
   postBuild = ''
-    cargo cbuild --release --frozen --prefix=${placeholder "out"}
+    cargo cbuild --release --frozen --prefix=${placeholder "out"} --target ${rustTargetPlatformSpec}
   '';
 
   postInstall = ''
-    cargo cinstall --release --frozen --prefix=${placeholder "out"}
+    cargo cinstall --release --frozen --prefix=${placeholder "out"} --target ${rustTargetPlatformSpec}
   '';
 
   meta = with lib; {
@@ -31,9 +48,9 @@ rustPlatform.buildRustPackage rec {
       libaom (the reference encoder) is too slow.
       Features: https://github.com/xiph/rav1e#features
     '';
-    inherit (src.meta) homepage;
+    homepage = "https://github.com/xiph/rav1e";
     changelog = "https://github.com/xiph/rav1e/releases/tag/v${version}";
     license = licenses.bsd2;
-    maintainers = [ maintainers.primeos ];
+    maintainers = [ ];
   };
 }
diff --git a/pkgs/tools/video/rtmpdump/default.nix b/pkgs/tools/video/rtmpdump/default.nix
index 06c035552e5..3f71f8abc5a 100644
--- a/pkgs/tools/video/rtmpdump/default.nix
+++ b/pkgs/tools/video/rtmpdump/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, fetchpatch, zlib
+{ lib, stdenv, fetchgit, fetchpatch, zlib
 , gnutlsSupport ? false, gnutls ? null, nettle ? null
 , opensslSupport ? true, openssl ? null
 }:
@@ -8,7 +8,7 @@ assert (gnutlsSupport || opensslSupport);
 assert gnutlsSupport -> gnutlsSupport != null && nettle != null && !opensslSupport;
 assert opensslSupport -> openssl != null && !gnutlsSupport;
 
-with stdenv.lib;
+with lib;
 stdenv.mkDerivation {
   pname = "rtmpdump";
   version = "2019-03-30";
@@ -28,7 +28,7 @@ stdenv.mkDerivation {
     })
   ];
 
-  makeFlags = [ ''prefix=$(out)'' ]
+  makeFlags = [ "prefix=$(out)" ]
     ++ optional gnutlsSupport "CRYPTO=GNUTLS"
     ++ optional opensslSupport "CRYPTO=OPENSSL"
     ++ optional stdenv.isDarwin "SYS=darwin"
diff --git a/pkgs/tools/video/svt-av1/default.nix b/pkgs/tools/video/svt-av1/default.nix
new file mode 100644
index 00000000000..fd572fabae3
--- /dev/null
+++ b/pkgs/tools/video/svt-av1/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitLab, cmake, nasm }:
+
+stdenv.mkDerivation rec {
+  pname = "svt-av1";
+  version = "0.8.7";
+
+  src = fetchFromGitLab {
+    owner = "AOMediaCodec";
+    repo = "SVT-AV1";
+    rev = "v${version}";
+    sha256 = "1xlxb6kn6hqz9dxz0nd905m4i2mwjwq1330rbabwzmg4b66cdslg";
+  };
+
+  nativeBuildInputs = [ cmake nasm ];
+
+  meta = with lib; {
+    description = "AV1-compliant encoder/decoder library core";
+    longDescription = ''
+      The Scalable Video Technology for AV1 (SVT-AV1 Encoder and Decoder) is an
+      AV1-compliant encoder/decoder library core. The SVT-AV1 encoder
+      development is a work-in-progress targeting performance levels applicable
+      to both VOD and Live encoding / transcoding video applications. The
+      SVT-AV1 decoder implementation is targeting future codec research
+      activities.
+    '';
+    inherit (src.meta) homepage;
+    changelog = "https://gitlab.com/AOMediaCodec/SVT-AV1/-/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [
+      bsd2
+      {
+        fullName = "Alliance for Open Media Patent License 1.0";
+        url = "https://aomedia.org/license/patent-license/";
+      }
+    ];
+    platforms = platforms.unix;
+    broken = stdenv.isAarch64; # undefined reference to `cpuinfo_arm_linux_init'
+    maintainers = with maintainers; [ chiiruno ];
+  };
+}
diff --git a/pkgs/tools/video/swfmill/default.nix b/pkgs/tools/video/swfmill/default.nix
index b675c1a57c2..c5e777f7531 100644
--- a/pkgs/tools/video/swfmill/default.nix
+++ b/pkgs/tools/video/swfmill/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl
-, pkgconfig, libxslt, freetype, libpng, libxml2
+{ lib, stdenv, fetchurl
+, pkg-config, libxslt, freetype, libpng, libxml2
 }:
 
 stdenv.mkDerivation rec {
@@ -13,13 +13,13 @@ stdenv.mkDerivation rec {
   # Fixes build with GCC 6
   NIX_CFLAGS_COMPILE = "-std=c++03";
 
-  nativeBuildInputs = [ pkgconfig ];
+  nativeBuildInputs = [ pkg-config ];
   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;
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/video/swftools/default.nix b/pkgs/tools/video/swftools/default.nix
index a37f58937b8..c48d684d3fc 100644
--- a/pkgs/tools/video/swftools/default.nix
+++ b/pkgs/tools/video/swftools/default.nix
@@ -1,6 +1,5 @@
-{ stdenv, fetchurl, freetype, libjpeg, libungif, zlib }:
+{ lib, stdenv, fetchurl, freetype, libjpeg, zlib }:
 
-with stdenv.lib;
 stdenv.mkDerivation rec {
   pname = "swftools";
   version = "0.9.2";
@@ -12,13 +11,29 @@ stdenv.mkDerivation rec {
 
   patches = [ ./swftools.patch ];
 
-  buildInputs = [ freetype libjpeg libungif zlib ];
+  buildInputs = [ freetype libjpeg zlib ];
 
-  meta = {
+  meta = with lib; {
     description = "Collection of SWF manipulation and creation utilities";
     homepage = "http://www.swftools.org/about.html";
-    license = licenses.gpl2;
+    license = licenses.gpl2Only;
     maintainers = [ maintainers.koral ];
-    platforms = stdenv.lib.platforms.unix;
+    platforms = lib.platforms.unix;
+    knownVulnerabilities = [
+      "CVE-2017-10976"
+      "CVE-2017-11096"
+      "CVE-2017-11097"
+      "CVE-2017-11098"
+      "CVE-2017-11099"
+      "CVE-2017-11100"
+      "CVE-2017-11101"
+      "CVE-2017-16711"
+      "CVE-2017-16793"
+      "CVE-2017-16794"
+      "CVE-2017-16796"
+      "CVE-2017-16797"
+      "CVE-2017-16868"
+      "CVE-2017-16890"
+    ];
   };
 }
diff --git a/pkgs/tools/video/untrunc-anthwlock/default.nix b/pkgs/tools/video/untrunc-anthwlock/default.nix
index 12695285093..4b950fd0f22 100644
--- a/pkgs/tools/video/untrunc-anthwlock/default.nix
+++ b/pkgs/tools/video/untrunc-anthwlock/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, ffmpeg, libui }:
+{ lib, stdenv, fetchFromGitHub, ffmpeg, libui }:
 
 stdenv.mkDerivation {
   pname = "untrunc-anthwlock";
@@ -11,7 +11,7 @@ stdenv.mkDerivation {
     sha256 = "14i2lq68q990hnm2kkfamlsi67bcml85zl8yjsyxc5h8ncc2f3dp";
   };
 
-  
+
   buildInputs = [ ffmpeg libui ];
 
   postBuild = ''
@@ -26,7 +26,7 @@ stdenv.mkDerivation {
 
   enableParallelBuilding = true;
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Restore a truncated mp4/mov (improved version of ponchio/untrunc)";
     homepage = "https://github.com/anthwlock/untrunc";
     license = licenses.gpl2;
diff --git a/pkgs/tools/video/untrunc/default.nix b/pkgs/tools/video/untrunc/default.nix
deleted file mode 100644
index 728b4ff0118..00000000000
--- a/pkgs/tools/video/untrunc/default.nix
+++ /dev/null
@@ -1,39 +0,0 @@
-{ 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/pkgs/tools/video/vcsi/default.nix b/pkgs/tools/video/vcsi/default.nix
new file mode 100644
index 00000000000..f4f3043f34f
--- /dev/null
+++ b/pkgs/tools/video/vcsi/default.nix
@@ -0,0 +1,31 @@
+{ lib, python3Packages, ffmpeg }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "vcsi";
+  version = "7.0.13";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "01qwbb2l8gwf622zzhh0kzdzw3njvsdwmndwn01i9bn4qm5cas8r";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    numpy
+    pillow
+    jinja2
+    texttable
+    parsedatetime
+  ];
+
+  doCheck = false;
+  pythonImportsCheck = [ "vcsi" ];
+
+  makeWrapperArgs = [ "--prefix PATH : ${lib.makeBinPath [ ffmpeg ]}" ];
+
+  meta = with lib; {
+    description = "Create video contact sheets";
+    homepage = "https://github.com/amietn/vcsi";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dandellion ];
+  };
+}
diff --git a/pkgs/tools/video/vnc2flv/default.nix b/pkgs/tools/video/vnc2flv/default.nix
index ed2d872b874..88ec2f22b89 100644
--- a/pkgs/tools/video/vnc2flv/default.nix
+++ b/pkgs/tools/video/vnc2flv/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pythonPackages }:
+{ lib, fetchurl, pythonPackages }:
 
 pythonPackages.buildPythonApplication rec {
   pname = "vnc2flv";
@@ -15,6 +15,6 @@ pythonPackages.buildPythonApplication rec {
   meta = {
     description = "Tool to record VNC sessions to Flash Video";
     homepage = "http://www.unixuser.org/~euske/python/vnc2flv/";
-    license = stdenv.lib.licenses.mit;
+    license = lib.licenses.mit;
   };
 }
diff --git a/pkgs/tools/video/vncrec/default.nix b/pkgs/tools/video/vncrec/default.nix
index 98b644a633c..5a60fc4c5d2 100644
--- a/pkgs/tools/video/vncrec/default.nix
+++ b/pkgs/tools/video/vncrec/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, libX11, xorgproto, imake, gccmakedep, libXt, libXmu
+{ lib, stdenv, fetchurl, libX11, xorgproto, imake, gccmakedep, libXt, libXmu
 , libXaw, libXext, libSM, libICE, libXpm, libXp
 }:
 
@@ -27,7 +27,7 @@ stdenv.mkDerivation {
   meta = {
     description = "VNC recorder";
     homepage = "http://ronja.twibright.com/utils/vncrec/";
-    platforms = stdenv.lib.platforms.linux;
-    license = stdenv.lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl2;
   };
 }
diff --git a/pkgs/tools/video/xjadeo/default.nix b/pkgs/tools/video/xjadeo/default.nix
new file mode 100644
index 00000000000..bcd6d5601c0
--- /dev/null
+++ b/pkgs/tools/video/xjadeo/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, autoreconfHook, fetchFromGitHub, ffmpeg, freetype, libGLU
+, libjack2, liblo, libX11, libXv, pkg-config, portmidi, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "xjadeo";
+  version = "0.8.10";
+
+  src = fetchFromGitHub {
+    owner = "x42";
+    repo = "xjadeo";
+    rev = "v${version}";
+    sha256 = "0dma4cjgbrpy16x63zvfr0xss4lryl0zw7nvixvhq2f6z8day1ds";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [
+    ffmpeg
+    libjack2
+    libX11
+    xorg.libXext
+    xorg.libXpm
+    # The following are recommended in the README, but are seemingly
+    # unnecessary for a successful build. That said, the result of including
+    # these in the build process is possibly required at runtime in some cases,
+    # but I've not the time to test thoroughly for these cases. Should
+    # consider investigating and splitting these into options in the future.
+    freetype
+    libGLU
+    liblo
+    libXv
+    portmidi
+  ];
+
+  meta = with lib; {
+    description = "The X Jack Video Monitor";
+    longDescription = ''
+      Xjadeo is a software video player that displays a video-clip in sync with
+      an external time source (MTC, LTC, JACK-transport). Xjadeo is useful in
+      soundtrack composition, video monitoring or any task that requires to
+      synchronizing movie frames with external events.
+    '';
+    homepage = "http://xjadeo.sourceforge.net";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ mitchmindtree ];
+  };
+}
diff --git a/pkgs/tools/video/yamdi/default.nix b/pkgs/tools/video/yamdi/default.nix
index 28861887ed2..92737e27ee3 100644
--- a/pkgs/tools/video/yamdi/default.nix
+++ b/pkgs/tools/video/yamdi/default.nix
@@ -1,5 +1,5 @@
 {
-  stdenv,
+  lib, stdenv,
   fetchurl,
 }:
 
@@ -14,14 +14,14 @@ stdenv.mkDerivation rec {
     sha256 = "4a6630f27f6c22bcd95982bf3357747d19f40bd98297a569e9c77468b756f715";
   };
 
-  buildFlags = [ "CC=cc" ];
+  buildFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
 
   installPhase = ''
     install -D {,$out/bin/}yamdi
     install -D {,$out/share/man/}man1/yamdi.1
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Yet Another MetaData Injector for FLV";
     homepage = "http://yamdi.sourceforge.net/";
     license = licenses.bsd3;
diff --git a/pkgs/tools/virtualization/alpine-make-vm-image/default.nix b/pkgs/tools/virtualization/alpine-make-vm-image/default.nix
index 08d37a1d53b..239a00a665d 100644
--- a/pkgs/tools/virtualization/alpine-make-vm-image/default.nix
+++ b/pkgs/tools/virtualization/alpine-make-vm-image/default.nix
@@ -1,17 +1,17 @@
 { stdenv, lib, fetchFromGitHub, makeWrapper
 , apk-tools, coreutils, e2fsprogs, findutils, gnugrep, gnused, kmod, qemu-utils
-, utillinux
+, util-linux
 }:
 
 stdenv.mkDerivation rec {
   pname = "alpine-make-vm-image";
-  version = "0.6.0";
+  version = "0.7.0";
 
   src = fetchFromGitHub {
     owner = "alpinelinux";
     repo = "alpine-make-vm-image";
     rev = "v${version}";
-    sha256 = "0955kd2ddqfynjwk2xfzys96l7abxp30hhrs2968hl78rhmkvpnq";
+    sha256 = "0cjcwq957nsml06kdnnvgzki84agjfvqw3mpyiix4i4q5by91lcl";
   };
 
   nativeBuildInputs = [ makeWrapper ];
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
   postInstall = ''
     wrapProgram $out/bin/alpine-make-vm-image --set PATH ${lib.makeBinPath [
       apk-tools coreutils e2fsprogs findutils gnugrep gnused kmod qemu-utils
-      utillinux
+      util-linux
     ]}
   '';
 
diff --git a/pkgs/tools/virtualization/amazon-ecs-cli/default.nix b/pkgs/tools/virtualization/amazon-ecs-cli/default.nix
index 19766fb5ba9..012546160e0 100644
--- a/pkgs/tools/virtualization/amazon-ecs-cli/default.nix
+++ b/pkgs/tools/virtualization/amazon-ecs-cli/default.nix
@@ -1,19 +1,19 @@
-{ stdenv, fetchurl}:
+{ lib, stdenv, fetchurl}:
 
 stdenv.mkDerivation rec {
   pname = "amazon-ecs-cli";
-  version = "1.18.1";
+  version = "1.21.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 = "1q0qsvxwz6mgslwzwslddxxv45v9wmlbbkxgyfz3dfkw6n6d1a2s";
+        sha256 = "sEHwhirU2EYwtBRegiIvN4yr7VKtmy7e6xx5gZOkuY0=";
       }
     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 = "0hik88z5xm1pw6a3mxa6zpghdv47s6bg56srxv4azjinzdi59s3b";
+        sha256 = "1viala49sifpcmgn3jw24h5bkrlm4ffadjiqagbxj3lr0r78i9nm";
       }
     else throw "Architecture not supported";
 
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
       chmod +x $out/bin/ecs-cli
     '';  # */
 
-  meta = with stdenv.lib; {
+  meta = with 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.";
diff --git a/pkgs/tools/virtualization/awless/default.nix b/pkgs/tools/virtualization/awless/default.nix
index f051fd12ab3..061dd486e0d 100644
--- a/pkgs/tools/virtualization/awless/default.nix
+++ b/pkgs/tools/virtualization/awless/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage rec {
   pname = "awless";
@@ -13,7 +13,7 @@ buildGoPackage rec {
     sha256 = "187i21yrm10r3f5naj3jl0rmydr5dkhmdhxs90hhf8hjp59a89kg";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/wallix/awless/";
     description = "A Mighty CLI for AWS";
     platforms = with platforms; linux ++ darwin;
diff --git a/pkgs/tools/virtualization/aws/default.nix b/pkgs/tools/virtualization/aws/default.nix
index 57aae0c695f..d3a5cbf10e1 100644
--- a/pkgs/tools/virtualization/aws/default.nix
+++ b/pkgs/tools/virtualization/aws/default.nix
@@ -1,11 +1,11 @@
-{ stdenv, fetchurl, perl, curl }:
+{ lib, stdenv, fetchurl, perl, curl }:
 
 stdenv.mkDerivation {
-  name = "aws-1.75";
+  name = "aws-2019.06.18";
 
   src = fetchurl {
-    url = "https://raw.github.com/timkay/aws/2f2ff99f9f5111ea708ae6cd14d20e264748e72b/aws";
-    sha256 = "0d5asv73a58yb1bb1jpsw3c7asd62y86z5fwpg4llhjzkx79maj6";
+    url = "https://raw.github.com/timkay/aws/ac68eb5191c52f069b9aa0c9a99808f8a4430833/aws";
+    sha256 = "02bym9wicqpdr7mdim13zw5ssh97xfswzab9q29rsbg7058ddbil";
   };
 
   buildInputs = [ perl ];
@@ -22,7 +22,7 @@ stdenv.mkDerivation {
   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;
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.unix;
   };
 }
diff --git a/pkgs/tools/virtualization/awsebcli/default.nix b/pkgs/tools/virtualization/awsebcli/default.nix
index aff00519a2d..eaaf7046fff 100644
--- a/pkgs/tools/virtualization/awsebcli/default.nix
+++ b/pkgs/tools/virtualization/awsebcli/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3, glibcLocales }:
+{ lib, python3, glibcLocales }:
 let
 
   localPython = python3.override {
@@ -79,18 +79,19 @@ in with localPython.pkgs; buildPythonApplication rec {
     # 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
+    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
+    mkdir -p $out/share/bash-completion/completions
+    mv $out/bin/eb_completion.bash $out/share/bash-completion/completions/
   '';
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://aws.amazon.com/elasticbeanstalk/";
     description = "A command line interface for Elastic Beanstalk";
     maintainers = with maintainers; [ eqyiel ];
     license = licenses.asl20;
+    broken = true;
   };
 }
diff --git a/pkgs/tools/virtualization/cloud-init/add-nixos-support.patch b/pkgs/tools/virtualization/cloud-init/0001-add-nixos-support.patch
index 00cb7d070c6..997d28aaecb 100644
--- a/pkgs/tools/virtualization/cloud-init/add-nixos-support.patch
+++ b/pkgs/tools/virtualization/cloud-init/0001-add-nixos-support.patch
@@ -1,18 +1,36 @@
-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'],
+From 269cc4c9558549f340ec186d9246654564b2f633 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg@thalheim.io>
+Date: Tue, 18 Aug 2020 10:22:36 +0100
+Subject: [PATCH] add nixos support
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Jörg Thalheim <joerg@thalheim.io>
+---
+ cloudinit/distros/__init__.py |   1 +
+ cloudinit/distros/nixos.py    | 103 ++++++++++++++++++++++++++++++++++
+ 2 files changed, 104 insertions(+)
+ create mode 100644 cloudinit/distros/nixos.py
+
+diff --git a/cloudinit/distros/__init__.py b/cloudinit/distros/__init__.py
+index 2537608f..c533b585 100755
+--- a/cloudinit/distros/__init__.py
++++ b/cloudinit/distros/__init__.py
+@@ -47,6 +47,7 @@ OSFAMILIES = {
+     'gentoo': ['gentoo'],
+     'redhat': ['amazon', 'centos', 'fedora', 'rhel'],
+     'suse': ['opensuse', 'sles'],
 +    '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 @@
+diff --git a/cloudinit/distros/nixos.py b/cloudinit/distros/nixos.py
+new file mode 100644
+index 00000000..d53d2a61
+--- /dev/null
++++ b/cloudinit/distros/nixos.py
+@@ -0,0 +1,103 @@
 +# vi: ts=4 expandtab
 +#
 +#    Copyright (C) 2012 Canonical Ltd.
@@ -35,10 +53,13 @@ diff -ruN cloud-init-0.7.6.orig/cloudinit/distros/nixos.py cloud-init-0.7.6/clou
 +#    You should have received a copy of the GNU General Public License
 +#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 +
++import os
++
 +from cloudinit import distros
 +from cloudinit import helpers
 +from cloudinit import log as logging
 +from cloudinit import util
++from cloudinit import atomic_helper
 +
 +from cloudinit.distros.parsers.hostname import HostnameConf
 +
@@ -52,6 +73,8 @@ diff -ruN cloud-init-0.7.6.orig/cloudinit/distros/nixos.py cloud-init-0.7.6/clou
 +        # calls from repeatly happening (when they
 +        # should only happen say once per instance...)
 +        self._runner = helpers.Runners(paths)
++        self.usr_lib_exec = os.path.join(os.path.dirname(__file__),
++                                         "../../../../../libexec")
 +        self.osfamily = 'nixos'
 +
 +    def _select_hostname(self, hostname, fqdn):
@@ -72,7 +95,7 @@ diff -ruN cloud-init-0.7.6.orig/cloudinit/distros/nixos.py cloud-init-0.7.6/clou
 +        if not conf:
 +            conf = HostnameConf('')
 +        conf.set_hostname(your_hostname)
-+        util.write_file(out_fn, str(conf), 0644)
++        atomic_helper.write_file(out_fn, str(conf).encode("utf-8"))
 +
 +    def _read_system_hostname(self):
 +        sys_hostname = self._read_hostname(self.hostname_conf_fn)
@@ -111,3 +134,6 @@ diff -ruN cloud-init-0.7.6.orig/cloudinit/distros/nixos.py cloud-init-0.7.6/clou
 +
 +    def update_package_sources(self):
 +        raise NotImplementedError()
+-- 
+2.28.0
+
diff --git a/pkgs/tools/virtualization/cloud-init/default.nix b/pkgs/tools/virtualization/cloud-init/default.nix
index bf932ff1ad4..439cf47e55c 100644
--- a/pkgs/tools/virtualization/cloud-init/default.nix
+++ b/pkgs/tools/virtualization/cloud-init/default.nix
@@ -1,45 +1,110 @@
-{ lib, pythonPackages, fetchurl, cloud-utils }:
+{ lib
+, fetchFromGitHub
+, buildPythonApplication
+, jinja2
+, oauthlib
+, configobj
+, pyyaml
+, requests
+, jsonschema
+, jsonpatch
+, httpretty
+, dmidecode
+, pytestCheckHook
+, shadow
+, cloud-utils
+, openssh
+}:
 
-let version = "0.7.9";
-
-in pythonPackages.buildPythonApplication {
+buildPythonApplication rec {
   pname = "cloud-init";
-  inherit version;
+  version = "21.2";
   namePrefix = "";
 
-  src = fetchurl {
-    url = "https://launchpad.net/cloud-init/trunk/${version}/+download/cloud-init-${version}.tar.gz";
-    sha256 = "0wnl76pdcj754pl99wxx76hkir1s61x0bg0lh27sdgdxy45vivbn";
+  src = fetchFromGitHub {
+    owner = "canonical";
+    repo = "cloud-init";
+    rev = version;
+    sha256 = "0vhjkgs49ixfa3kkj5s3v3gcxvypm3cdvfk6adrk2bx3wv2cbhvz";
   };
 
-  patches = [ ./add-nixos-support.patch ];
+  patches = [ ./0001-add-nixos-support.patch ];
   prePatch = ''
-    patchShebangs ./tools
+    substituteInPlace setup.py --replace /lib/systemd $out/lib/systemd
+  '';
+
+  postInstall = ''
+    install -D -m755 ./tools/write-ssh-key-fingerprints $out/libexec/write-ssh-key-fingerprints
+    for i in $out/libexec/*; do
+      wrapProgram $i --prefix PATH : "${lib.makeBinPath [ openssh ]}"
+    done
+  '';
+
+  propagatedBuildInputs = [
+    jinja2
+    oauthlib
+    configobj
+    pyyaml
+    requests
+    jsonschema
+    jsonpatch
+  ];
 
-    substituteInPlace setup.py \
-      --replace /usr $out \
-      --replace /etc $out/etc \
-      --replace /lib/systemd $out/lib/systemd \
-      --replace 'self.init_system = ""' 'self.init_system = "systemd"'
+  checkInputs = [
+    pytestCheckHook
+    httpretty
+    dmidecode
+    # needed for tests; at runtime we rather want the setuid wrapper
+    shadow
+  ];
 
-    substituteInPlace cloudinit/config/cc_growpart.py \
-      --replace 'util.subp(["growpart"' 'util.subp(["${cloud-utils}/bin/growpart"'
+  makeWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [ dmidecode cloud-utils.guest ]}/bin"
+  ];
 
-    # Argparse is part of python stdlib
-    sed -i s/argparse// requirements.txt
-    '';
+  disabledTests = [
+    # tries to create /var
+    "test_dhclient_run_with_tmpdir"
+    # clears path and fails because mkdir is not found
+    "test_path_env_gets_set_from_main"
+    # tries to read from /etc/ca-certificates.conf while inside the sandbox
+    "test_handler_ca_certs"
+    # Doesn't work in the sandbox
+    "TestEphemeralDhcpNoNetworkSetup"
+    "TestHasURLConnectivity"
+    "TestReadFileOrUrl"
+    "TestConsumeUserDataHttp"
+    # Chef Omnibus
+    "TestInstallChefOmnibus"
+    # https://github.com/canonical/cloud-init/pull/893
+    "TestGetPackageMirrorInfo"
+  ];
 
-  propagatedBuildInputs = with pythonPackages; [ cheetah jinja2 prettytable
-    oauthlib pyserial configobj pyyaml requests jsonpatch ];
+  disabledTestPaths = [
+    # Oracle tests are not passing
+    "cloudinit/sources/tests/test_oracle.py"
+    # Disable the integration tests. pycloudlib would be required
+    "tests/unittests/test_datasource/test_aliyun.py"
+    "tests/unittests/test_datasource/test_azure.py"
+    "tests/unittests/test_datasource/test_ec2.py"
+    "tests/unittests/test_datasource/test_exoscale.py"
+    "tests/unittests/test_datasource/test_gce.py"
+    "tests/unittests/test_datasource/test_openstack.py"
+    "tests/unittests/test_datasource/test_scaleway.py"
+    "tests/unittests/test_ec2_util.py"
+  ];
 
-  checkInputs = with pythonPackages; [ contextlib2 httpretty mock unittest2 ];
+  preCheck = ''
+    # TestTempUtils.test_mkdtemp_default_non_root does not like TMPDIR=/build
+    export TMPDIR=/tmp
+  '';
 
-  doCheck = false;
+  pythonImportsCheck = [ "cloudinit" ];
 
-  meta = {
+  meta = with lib; {
     homepage = "https://cloudinit.readthedocs.org";
     description = "Provides configuration and customization of cloud instance";
-    maintainers = [ lib.maintainers.madjar lib.maintainers.phile314 ];
-    platforms = lib.platforms.all;
+    maintainers = with maintainers; [ madjar phile314 ];
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/tools/virtualization/cloudmonkey/default.nix b/pkgs/tools/virtualization/cloudmonkey/default.nix
index 2565d9346b0..1945e56b96e 100644
--- a/pkgs/tools/virtualization/cloudmonkey/default.nix
+++ b/pkgs/tools/virtualization/cloudmonkey/default.nix
@@ -1,23 +1,23 @@
-{ python2Packages, lib }:
+{ buildGoModule, fetchFromGitHub, lib }:
 
-with python2Packages;
-
-buildPythonApplication rec {
+buildGoModule rec {
   pname = "cloudmonkey";
-  version = "5.3.3";
+  version = "6.1.0";
 
-  propagatedBuildInputs = [ argcomplete pygments ];
+  src = fetchFromGitHub {
+    owner = "apache";
+    repo = "cloudstack-cloudmonkey";
+    rev = version;
+    sha256 = "sha256-OmVM6ayrtrLl+PADnkUnrssbsq1GZp2KiMBOXPgfi5Y=";
+  };
 
-  doCheck = false; # upstream has no tests defined
+  runVend = true;
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "064yk3lwl272nyn20xxrh0qxzh3r1rl9015qqf2i4snqdzwd5cf7";
-  };
+  vendorSha256 = null;
 
   meta = with lib; {
-    description = "CLI for Apache CloudStack.";
-    homepage = "https://cwiki.apache.org/confluence/display/CLOUDSTACK/CloudStack+cloudmonkey+CLI";
+    description = "CLI for Apache CloudStack";
+    homepage = "https://github.com/apache/cloudstack-cloudmonkey";
     license = [ licenses.asl20 ];
     maintainers = [ maintainers.womfoo ];
   };
diff --git a/pkgs/tools/virtualization/cri-tools/default.nix b/pkgs/tools/virtualization/cri-tools/default.nix
index 1f0c28d49b7..637ff51317f 100644
--- a/pkgs/tools/virtualization/cri-tools/default.nix
+++ b/pkgs/tools/virtualization/cri-tools/default.nix
@@ -6,13 +6,13 @@
 
 buildGoModule rec {
   pname = "cri-tools";
-  version = "1.18.0";
+  version = "1.21.0";
 
   src = fetchFromGitHub {
     owner = "kubernetes-sigs";
     repo = pname;
     rev = "v${version}";
-    sha256 = "06sxjhjpd893fn945c1s4adri2bf7s50ddvcw5pnwb6qndzfljw6";
+    sha256 = "sha256-chU7qNapmM4Gm8lYcdUreg1ZP93UM0LpIEk+w5cutlg=";
   };
 
   vendorSha256 = null;
@@ -22,16 +22,20 @@ buildGoModule rec {
   nativeBuildInputs = [ installShellFiles ];
 
   buildPhase = ''
+    runHook preBuild
     make binaries VERSION=${version}
+    runHook postBuild
   '';
 
   installPhase = ''
+    runHook preInstall
     make install BINDIR=$out/bin
 
     for shell in bash fish zsh; do
       $out/bin/crictl completion $shell > crictl.$shell
       installShellCompletion crictl.$shell
     done
+    runHook postInstall
   '';
 
   meta = with lib; {
diff --git a/pkgs/tools/virtualization/distrobuilder/default.nix b/pkgs/tools/virtualization/distrobuilder/default.nix
index 6ad8c355ee2..a6f479dc71a 100644
--- a/pkgs/tools/virtualization/distrobuilder/default.nix
+++ b/pkgs/tools/virtualization/distrobuilder/default.nix
@@ -1,33 +1,53 @@
-{ stdenv, pkgconfig, buildGoPackage, fetchFromGitHub
-, makeWrapper, coreutils, gnupg, gnutar, squashfsTools, debootstrap
+{ lib
+, pkg-config
+, buildGoModule
+, fetchFromGitHub
+, makeWrapper
+, coreutils
+, gnupg
+, gnutar
+, squashfsTools
+, debootstrap
 }:
 
-let binPath = stdenv.lib.makeBinPath [
-  coreutils gnupg gnutar squashfsTools debootstrap
-];
+let
+  bins = [
+    coreutils
+    gnupg
+    gnutar
+    squashfsTools
+    debootstrap
+  ];
 in
-buildGoPackage rec {
+buildGoModule rec {
   pname = "distrobuilder";
-  version = "2019_10_07";
-  rev = "d686c88c21838f5505c3ec14711b2413604d7f5c";
+  version = "1.2";
 
-  goPackagePath = "github.com/lxc/distrobuilder";
+  vendorSha256 = "sha256-G5FUO6Ul4dA4MZZI9Ho1kE9ptX31tAWak9rWAoD/iuU=";
 
   src = fetchFromGitHub {
-    inherit rev;
     owner = "lxc";
     repo = "distrobuilder";
-    sha256 = "0k59czgasy4d58bkrin6hvgmh7y3nf177lwd0y4g47af27bgnyc4";
+    rev = "distrobuilder-${version}";
+    sha256 = "CE3Tq0oWpVZnSfBBY3/2E2GdZLFsO0NzkPABT8lu+TY=";
+    fetchSubmodules = false;
   };
 
-  goDeps = ./deps.nix;
+  buildInputs = bins;
+
+  # tests require a local keyserver (mkg20001/nixpkgs branch distrobuilder-with-tests) but gpg is currently broken in tests
+  doCheck = false;
+
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+  ] ++ bins;
 
   postInstall = ''
-    wrapProgram $out/bin/distrobuilder --prefix PATH ":" ${binPath}
+    wrapProgram $out/bin/distrobuilder --prefix PATH ":" ${lib.makeBinPath bins}
   '';
-  nativeBuildInputs = [ pkgconfig makeWrapper ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "System container image builder for LXC and LXD";
     homepage = "https://github.com/lxc/distrobuilder";
     license = licenses.asl20;
@@ -35,4 +55,3 @@ buildGoPackage rec {
     platforms = platforms.linux;
   };
 }
-
diff --git a/pkgs/tools/virtualization/ec2-ami-tools/default.nix b/pkgs/tools/virtualization/ec2-ami-tools/default.nix
index f8359e6286c..8e6d7b06d17 100644
--- a/pkgs/tools/virtualization/ec2-ami-tools/default.nix
+++ b/pkgs/tools/virtualization/ec2-ami-tools/default.nix
@@ -1,11 +1,11 @@
-{ stdenv, fetchurl, unzip, ruby, openssl, makeWrapper }:
+{ lib, stdenv, fetchurl, unzip, ruby, openssl, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "ec2-ami-tools";
 
   version = "1.5.7";
 
-  buildInputs = [ unzip makeWrapper ];
+  nativeBuildInputs = [ makeWrapper unzip ];
 
   src = fetchurl {
     url = "https://s3.amazonaws.com/ec2-downloads/${pname}-${version}.zip";
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
       for i in $out/bin/*; do
           wrapProgram $i \
             --set EC2_HOME $out \
-            --prefix PATH : ${stdenv.lib.makeBinPath [ ruby openssl ]}
+            --prefix PATH : ${lib.makeBinPath [ ruby openssl ]}
       done
 
       sed -i 's|/bin/bash|${stdenv.shell}|' $out/lib/ec2/platform/base/pipeline.rb
@@ -38,7 +38,7 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.amazonsl;
   };
 
 }
diff --git a/pkgs/tools/virtualization/ec2-api-tools/default.nix b/pkgs/tools/virtualization/ec2-api-tools/default.nix
index 409b2ba8f41..475b97abdcc 100644
--- a/pkgs/tools/virtualization/ec2-api-tools/default.nix
+++ b/pkgs/tools/virtualization/ec2-api-tools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, unzip, makeWrapper, jre }:
+{ lib, stdenv, fetchurl, unzip, makeWrapper, jre }:
 
 stdenv.mkDerivation rec {
   name = "ec2-api-tools-1.7.5.1";
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "0figmvcm82ghmpz3018ihysz8zpxpysgbpdx7rmciq9y80qbw6l5";
   };
 
-  buildInputs = [ unzip makeWrapper ];
+  nativeBuildInputs = [ makeWrapper unzip ];
 
   installPhase =
     ''
@@ -29,6 +29,6 @@ stdenv.mkDerivation rec {
   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;
+    license = lib.licenses.amazonsl;
   };
 }
diff --git a/pkgs/tools/virtualization/ec2instanceconnectcli/default.nix b/pkgs/tools/virtualization/ec2instanceconnectcli/default.nix
new file mode 100644
index 00000000000..16c10b5ae7f
--- /dev/null
+++ b/pkgs/tools/virtualization/ec2instanceconnectcli/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildPythonPackage, fetchPypi, boto3, cryptography }:
+
+buildPythonPackage rec {
+  pname = "ec2instanceconnectcli";
+  version = "1.0.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-VaCyCnEhSx1I3bNo57p0IXf92+tO1tT7KSUXzO1IyIU=";
+  };
+
+  propagatedBuildInputs = [ boto3 cryptography ];
+
+  # has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "ec2instanceconnectcli" ];
+
+  meta = with lib; {
+    description = "Command Line Interface for AWS EC2 Instance Connect";
+    homepage = "https://github.com/aws/aws-ec2-instance-connect-cli";
+    license = licenses.apsl20;
+    maintainers = with maintainers; [ yurrriq ];
+  };
+}
diff --git a/pkgs/tools/virtualization/euca2ools/default.nix b/pkgs/tools/virtualization/euca2ools/default.nix
index 3d7b62777aa..88e83f42733 100644
--- a/pkgs/tools/virtualization/euca2ools/default.nix
+++ b/pkgs/tools/virtualization/euca2ools/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, python2Packages }:
+{ lib, fetchgit, python2Packages }:
 
 let
   inherit (python2Packages) buildPythonApplication boto m2crypto;
@@ -17,7 +17,7 @@ in buildPythonApplication {
   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;
+    maintainers = [ lib.maintainers.eelco ];
+    platforms = lib.platforms.linux;
   };
 }
diff --git a/pkgs/tools/virtualization/google-compute-engine-oslogin/default.nix b/pkgs/tools/virtualization/google-compute-engine-oslogin/default.nix
index ea58eb4c6b8..0718e437b06 100644
--- a/pkgs/tools/virtualization/google-compute-engine-oslogin/default.nix
+++ b/pkgs/tools/virtualization/google-compute-engine-oslogin/default.nix
@@ -10,13 +10,13 @@
 
 stdenv.mkDerivation rec {
   pname = "google-compute-engine-oslogin";
-  version = "20200507.00";
+  version = "20210429.00";
 
   src = fetchFromGitHub {
     owner = "GoogleCloudPlatform";
     repo = "guest-oslogin";
     rev = version;
-    sha256 = "1np8c96sm29pwnxykc0id8kkgalhw576g43fgi1y936sr2hfvx3v";
+    sha256 = "eHAg9K5oxcygEzqaac81jSFHF+zsW6uB7q2Kfo9hSrA=";
   };
 
   postPatch = ''
@@ -28,8 +28,8 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ curl.dev pam ];
 
-  NIX_CFLAGS_COMPILE="-I${json_c.dev}/include/json-c";
-  NIX_CFLAGS_LINK="-L${json_c}/lib";
+  NIX_CFLAGS_COMPILE = "-I${json_c.dev}/include/json-c";
+  NIX_CFLAGS_LINK = "-L${json_c}/lib";
 
   makeFlags = [
     "VERSION=${version}"
@@ -47,7 +47,7 @@ stdenv.mkDerivation rec {
     inherit (nixosTests) google-oslogin;
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/GoogleCloudPlatform/compute-image-packages";
     description = "OS Login Guest Environment for Google Compute Engine";
     license = licenses.asl20;
diff --git a/pkgs/tools/virtualization/google-compute-engine/default.nix b/pkgs/tools/virtualization/google-compute-engine/default.nix
index 34f2bc9e190..ad187544aea 100644
--- a/pkgs/tools/virtualization/google-compute-engine/default.nix
+++ b/pkgs/tools/virtualization/google-compute-engine/default.nix
@@ -1,19 +1,18 @@
 { lib
 , fetchFromGitHub
-, buildPythonApplication
+, buildPythonPackage
 , bash
 , bashInteractive
 , systemd
-, utillinux
+, util-linux
 , boto
 , setuptools
 , distro
 }:
 
-buildPythonApplication rec {
+buildPythonPackage rec {
   pname = "google-compute-engine";
   version = "20190124";
-  namePrefix = "";
 
   src = fetchFromGitHub {
     owner = "GoogleCloudPlatform";
@@ -25,20 +24,19 @@ buildPythonApplication rec {
   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/systemd/bin/systemctl" \
         --replace /bin/bash "${bashInteractive}/bin/bash" \
-        --replace /sbin/hwclock "${utillinux}/bin/hwclock"
+        --replace /sbin/hwclock "${util-linux}/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"
+      --replace /bin/umount "${util-linux}/bin/umount" \
+      --replace /usr/bin/logger "${util-linux}/bin/logger"
   '';
 
   postInstall = ''
@@ -54,6 +52,7 @@ buildPythonApplication rec {
   '';
 
   doCheck = false;
+  pythonImportsCheck = [ "google_compute_engine" ];
 
   meta = with lib; {
     description = "Google Compute Engine tools and services";
diff --git a/pkgs/tools/virtualization/govc/default.nix b/pkgs/tools/virtualization/govc/default.nix
index 30cf09d2942..00330f7d1a4 100644
--- a/pkgs/tools/virtualization/govc/default.nix
+++ b/pkgs/tools/virtualization/govc/default.nix
@@ -2,7 +2,7 @@
 
 buildGoPackage rec {
   pname = "govc";
-  version = "0.23.1";
+  version = "0.25.0";
 
   goPackagePath = "github.com/vmware/govmomi";
 
@@ -12,7 +12,7 @@ buildGoPackage rec {
     rev = "v${version}";
     owner = "vmware";
     repo = "govmomi";
-    sha256 = "05f6i7v8v9g3w3cmz8c952djl652mj6qcwjx9iyl23h6knd1d9b1";
+    sha256 = "sha256-Ri8snbmgcAZmdumKzBl3P6gf/eZgwdgg7V+ijyeZjks=";
   };
 
   meta = {
diff --git a/pkgs/tools/virtualization/linode-cli/default.nix b/pkgs/tools/virtualization/linode-cli/default.nix
index 47953d21dfe..f169ec7b854 100644
--- a/pkgs/tools/virtualization/linode-cli/default.nix
+++ b/pkgs/tools/virtualization/linode-cli/default.nix
@@ -1,43 +1,36 @@
 { lib
-, buildPythonApplication
 , fetchFromGitHub
-, fetchpatch
 , fetchurl
-, terminaltables
+, buildPythonApplication
 , colorclass
-, requests
+, installShellFiles
 , pyyaml
+, requests
 , setuptools
+, terminaltables
 }:
 
 let
-
+  # specVersion taken from: https://www.linode.com/docs/api/openapi.yaml at `info.version`.
+  specVersion = "4.99.0";
   spec = fetchurl {
-    url = "https://raw.githubusercontent.com/linode/linode-api-docs/v4.67.0/openapi.yaml";
-    sha256 = "0vsblprkqlr9508x5rkm0wj6lc3w72xiwiqxia9asgr5k45hhfnr";
+    url = "https://raw.githubusercontent.com/linode/linode-api-docs/v${specVersion}/openapi.yaml";
+    sha256 = "10z63a2clbiskdnmnyf4m8v2hgc4bdm703y7s2dpw0q09msx9aca";
   };
 
 in
 
 buildPythonApplication rec {
   pname = "linode-cli";
-  version = "2.15.0";
+  version = "5.5.2";
 
   src = fetchFromGitHub {
     owner = "linode";
     repo = pname;
     rev = version;
-    sha256 = "06iz9xjj6h1ry176558488fl9j18a5vf724zh4cxlcksdy72dnna";
+    sha256 = "sha256-AjO4h0PaE/QFwbwUVNoe98XOPZ24ct0mbLkua5/YsEA=";
   };
 
-  patches = [
-    # make enum34 depend on python version
-    ( fetchpatch {
-        url = "https://github.com/linode/linode-cli/pull/184/commits/4cf55759c5da33fbc49b9ba664698875d67d4f76.patch";
-        sha256 = "04n9a6yh0abyyymvfzajhav6qxwvzjl2vs8jnqp3yqrma7kl0slj";
-    })
-  ];
-
   # remove need for git history
   prePatch = ''
     substituteInPlace setup.py \
@@ -45,11 +38,11 @@ buildPythonApplication rec {
   '';
 
   propagatedBuildInputs = [
-    terminaltables
     colorclass
-    requests
     pyyaml
+    requests
     setuptools
+    terminaltables
   ];
 
   postConfigure = ''
@@ -57,14 +50,20 @@ buildPythonApplication rec {
     cp data-3 linodecli/
   '';
 
-  # requires linode access token for unit tests, and running executable
-  doCheck = false;
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/linode-cli --skip-config --version | grep ${version} > /dev/null
+  '';
+
+  nativeBuildInputs = [ installShellFiles ];
+  postInstall = ''
+    installShellCompletion --cmd linode-cli --bash <($out/bin/linode-cli --skip-config completion bash)
+  '';
 
   meta = with lib; {
-    homepage = "https://github.com/linode/linode-cli";
     description = "The Linode Command Line Interface";
+    homepage = "https://github.com/linode/linode-cli";
     license = licenses.bsd3;
-    maintainers = with maintainers; [ ryantm ];
+    maintainers = with maintainers; [ ryantm superherointj ];
   };
-
 }
diff --git a/pkgs/tools/virtualization/marathonctl/default.nix b/pkgs/tools/virtualization/marathonctl/default.nix
index 20b461fa346..fe31c64952a 100644
--- a/pkgs/tools/virtualization/marathonctl/default.nix
+++ b/pkgs/tools/virtualization/marathonctl/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ lib, buildGoPackage, fetchFromGitHub }:
 
 buildGoPackage {
   pname = "marathonctl-unstable";
@@ -15,7 +15,7 @@ buildGoPackage {
     sha256 = "1fcc54hwpa8s3kz4gn26mc6nrv6zjrw869331nvm47khi23gpmxw";
   };
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     homepage = "https://github.com/shoenig/marathonctl";
     description = "CLI tool for Marathon";
     license = licenses.mit;
diff --git a/pkgs/tools/virtualization/nixos-container/default.nix b/pkgs/tools/virtualization/nixos-container/default.nix
index 94a19c5375e..17065a2aa8b 100644
--- a/pkgs/tools/virtualization/nixos-container/default.nix
+++ b/pkgs/tools/virtualization/nixos-container/default.nix
@@ -1,16 +1,16 @@
-{ substituteAll, perlPackages, shadow, utillinux }:
+{ substituteAll, perl, shadow, util-linux }:
 
 substituteAll {
     name = "nixos-container";
     dir = "bin";
     isExecutable = true;
     src = ./nixos-container.pl;
-    perl = "${perlPackages.perl}/bin/perl -I${perlPackages.FileSlurp}/${perlPackages.perl.libPrefix}";
+    perl = perl.withPackages (p: [ p.FileSlurp ]);
     su = "${shadow.su}/bin/su";
-    inherit utillinux;
+    utillinux = util-linux;
 
     postInstall = ''
-      t=$out/etc/bash_completion.d
+      t=$out/share/bash-completion/completions
       mkdir -p $t
       cp ${./nixos-container-completion.sh} $t/nixos-container
     '';
diff --git a/pkgs/tools/virtualization/nixos-container/nixos-container.pl b/pkgs/tools/virtualization/nixos-container/nixos-container.pl
index 02ad6af90da..d99b4cfba4a 100755
--- a/pkgs/tools/virtualization/nixos-container/nixos-container.pl
+++ b/pkgs/tools/virtualization/nixos-container/nixos-container.pl
@@ -1,4 +1,4 @@
-#! @perl@
+#! @perl@/bin/perl
 
 use strict;
 use POSIX;
@@ -458,7 +458,9 @@ elsif ($action eq "run") {
 
 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";
+    $s =~ /^LOCAL_ADDRESS=([0-9\.]+)(\/[0-9]+)?$/m
+        or $s =~ /^LOCAL_ADDRESS6=([0-9a-f:]+)(\/[0-9]+)?$/m
+        or die "$0: cannot get IP address\n";
     print "$1\n";
 }
 
diff --git a/pkgs/tools/virtualization/nixos-shell/default.nix b/pkgs/tools/virtualization/nixos-shell/default.nix
index 0c6d7e7b9bb..9f34fb99c75 100644
--- a/pkgs/tools/virtualization/nixos-shell/default.nix
+++ b/pkgs/tools/virtualization/nixos-shell/default.nix
@@ -1,26 +1,26 @@
-{ stdenv, nix, fetchFromGitHub, makeWrapper }:
+{ lib, stdenv, nix, fetchFromGitHub, makeWrapper }:
 
 stdenv.mkDerivation rec {
   pname = "nixos-shell";
-  version = "0.1.1";
+  version = "0.2.1";
 
   src = fetchFromGitHub {
     owner = "Mic92";
     repo = "nixos-shell";
     rev = version;
-    sha256 = "1qk5a01vh6wbbkib8xr57w1j4l3n6xdjd46nsw9bsa444fzlc0wr";
+    sha256 = "sha256-HoY2diusDHXwR0BjYwKR3svLz5LrviE03yxyjWG9oPQ=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
 
   postInstall = ''
     wrapProgram $out/bin/nixos-shell \
-      --prefix PATH : ${stdenv.lib.makeBinPath [ nix ]}
+      --prefix PATH : ${lib.makeBinPath [ nix ]}
   '';
 
   installFlags = [ "PREFIX=${placeholder "out"}" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Spawns lightweight nixos vms in a shell";
     inherit (src.meta) homepage;
     license = licenses.mit;
diff --git a/pkgs/tools/virtualization/ovftool/default.nix b/pkgs/tools/virtualization/ovftool/default.nix
new file mode 100644
index 00000000000..cc4af17b47d
--- /dev/null
+++ b/pkgs/tools/virtualization/ovftool/default.nix
@@ -0,0 +1,230 @@
+{ lib, stdenv, system ? builtins.currentSystem, ovftoolBundles ? {}
+, requireFile, buildFHSUserEnv, patchelf, autoPatchelfHook, makeWrapper, nix, unzip
+, glibc, c-ares, openssl_1_0_2, curl, expat, icu60, xercesc, zlib
+}:
+
+let
+  version = "4.4.1-16812187";
+
+  # FHS environment required to unpack ovftool on x86.
+  ovftoolX86Unpacker = buildFHSUserEnv rec {
+    name = "ovftool-unpacker";
+    targetPkgs = pkgs: [ pkgs.bash ];
+    multiPkgs = targetPkgs;
+    runScript = "bash";
+  };
+
+  # unpackPhase for i686 and x86_64 ovftool self-extracting bundles.
+  ovftoolX86UnpackPhase = ''
+    runHook preUnpack
+
+    # This is a self-extracting shell script and needs a FHS environment to run.
+    # In reality, it could be doing anything, which is bad for reproducibility.
+    # Our postUnpack uses nix-hash to verify the hash to prevent problems.
+    #
+    # Note that the Arch PKGBUILD at
+    # https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=vmware-ovftool
+    # appears to use xvfb-run - this hasn't been proven necessary so far.
+    #
+    cp ${ovftoolSource} ./ovftool.bundle
+    chmod +x ./ovftool.bundle
+    ${ovftoolX86Unpacker}/bin/ovftool-unpacker ./ovftool.bundle -x ovftool
+    rm ovftool.bundle
+
+    local extracted=ovftool/vmware-ovftool/
+    if [ -d "$extracted" ]; then
+      # Move the directory we care about to ovftool/
+      mv "$extracted" .
+      rm -r ovftool
+      mv "$(basename -- "$extracted")" ovftool
+      echo "ovftool extracted successfully" >&2
+    else
+      echo "Could not find $extracted - are you sure this is ovftool?" >&2
+      rm -r ovftool
+      exit 1
+    fi
+
+    runHook postUnpack
+  '';
+
+  # unpackPhase for aarch64 .zip.
+  ovftoolAarch64UnpackPhase = ''
+    runHook preUnpack
+
+    unzip ${ovftoolSource}
+
+    local extracted=ovftool/
+    if [ -d "$extracted" ]; then
+      echo "ovftool extracted successfully" >&2
+    else
+      echo "Could not find $extracted - are you sure this is ovftool?" >&2
+      exit 1
+    fi
+
+    runHook postUnpack
+  '';
+
+  # When the version is bumped, postUnpackHash will change
+  # for all these supported systems. Update it from the printed error on build.
+  #
+  # This is just a sanity check, since ovftool is a self-extracting bundle
+  # that could be doing absolutely anything on 2/3 of the supported platforms.
+  ovftoolSystems = {
+    "i686-linux" = {
+      filename = "VMware-ovftool-${version}-lin.i386.bundle";
+      sha256 = "0gx78g3s77mmpir7jbiskna10i6262ihal1ywivlb6xxxxbhqzwj";
+      unpackPhase = ovftoolX86UnpackPhase;
+      postUnpackHash = "1k8rp8ywhs0cl9aad37v1p0493bdvkxrsvwg5pgv2bhvjs4hqk7n";
+    };
+    "x86_64-linux" = {
+      filename = "VMware-ovftool-${version}-lin.x86_64.bundle";
+      sha256 = "1kp2bp4d9i8y7q25yqff2bn62mh292lws7b66lyn8ka9b35kvnzc";
+      unpackPhase = ovftoolX86UnpackPhase;
+      postUnpackHash = "0zvyakwi4iishqxxisihgh91bmdsfvj5vchm2c192hia03a143py";
+    };
+    "aarch64-linux" = {
+      filename = "VMware-ovftool-${version}-lin.aarch64.zip";
+      sha256 = "0all8bwv5p5adnzqvrly6nzmxmfpywvlbfr0finr4n100yv0v1xy";
+      unpackPhase = ovftoolAarch64UnpackPhase;
+      postUnpackHash = "16vyyzrmryi8b7mrd6nxnhywvvj2pw0ban4qfiqfahw763fn6971";
+    };
+  };
+
+  ovftoolSystem = if builtins.hasAttr system ovftoolSystems then
+                    ovftoolSystems.${system}
+                  else throw "System '${system}' is unsupported by ovftool";
+
+  ovftoolSource = if builtins.hasAttr system ovftoolBundles then
+                    ovftoolBundles.${system}
+                  else
+                    requireFile {
+                      name = ovftoolSystem.filename;
+                      url = "https://my.vmware.com/group/vmware/downloads/get-download?downloadGroup=OVFTOOL441";
+                      sha256 = ovftoolSystem.sha256;
+                    };
+in
+stdenv.mkDerivation rec {
+  pname = "ovftool";
+  inherit version;
+
+  src = ovftoolSource;
+
+  buildInputs = [
+    glibc
+
+    # This is insecure, but we don't really have a way around it
+    # since ovftool depends on it. In theory we could ship their OpenSSL
+    # build... but that makes the reliance on an insecure library less obvious.
+    openssl_1_0_2
+
+    c-ares
+    (curl.override { openssl = openssl_1_0_2; })
+    expat
+    icu60
+    xercesc
+    zlib
+  ];
+
+  nativeBuildInputs = [ nix patchelf autoPatchelfHook makeWrapper unzip ];
+
+  sourceRoot = ".";
+
+  unpackPhase = ovftoolSystem.unpackPhase;
+
+  postUnpackHash = ovftoolSystem.postUnpackHash;
+
+  # Expects a directory named 'ovftool'. Validates the postUnpackHash in
+  # ovftoolSystem.
+  postUnpack = ''
+    if [ -d ovftool ]; then
+      # Ensure we're in the staging directory
+      cd ovftool
+    fi
+
+    # Verify the hash with nix-hash before proceeding to ensure reproducibility.
+    local ovftool_hash
+    ovftool_hash="$(nix-hash --type sha256 --base32 .)"
+    if [ "$ovftool_hash" != "$postUnpackHash" ]; then
+      echo "Expected hash: $postUnpackHash" >&2
+      echo "Actual hash:   $ovftool_hash" >&2
+      echo "Could not verify post-unpack hash!" >&2
+      exit 1
+    fi
+  '';
+
+  # Expects a directory named 'ovftool' containing the ovftool install.
+  # Based on https://aur.archlinux.org/packages/vmware-ovftool/
+  # with the addition of a libexec directory and a Nix-style binary wrapper.
+  installPhase = ''
+    runHook preInstall
+
+    if [ -d ovftool ]; then
+      # Ensure we're in the staging directory
+      cd ovftool
+    fi
+
+    # libraries
+    install -m 755 -d "$out/lib/$pname"
+
+    # These all appear to be VMWare proprietary except for libgoogleurl.
+    # The rest of the libraries that the installer extracts are omitted here,
+    # and provided in buildInputs.
+    #
+    # FIXME: can we replace libgoogleurl? Possibly from Chromium?
+    #
+    install -m 644 -t "$out/lib/$pname" \
+      libgoogleurl.so.59 \
+      libssoclient.so \
+      libvim-types.so libvmacore.so libvmomi.so
+
+    # ovftool specifically wants 1.0.2 but our libcrypto is named 1.0.0
+    ln -s "${openssl_1_0_2.out}/lib/libcrypto.so" \
+      "$out/lib/$pname/libcrypto.so.1.0.2"
+    ln -s "${openssl_1_0_2.out}/lib/libssl.so" \
+      "$out/lib/$pname/libssl.so.1.0.2"
+
+    # libexec
+    install -m 755 -d "$out/libexec/$pname"
+    install -m 755 -t "$out/libexec/$pname" ovftool.bin
+    install -m 644 -t "$out/libexec/$pname" icudt44l.dat
+
+    # libexec resources
+    for subdir in "certs" "env" "env/en" "schemas/DMTF" "schemas/vmware"; do
+      install -m 755 -d "$out/libexec/$pname/$subdir"
+      install -m 644 -t "$out/libexec/$pname/$subdir" "$subdir"/*.*
+    done
+
+    # EULA/OSS files
+    install -m 755 -d "$out/share/licenses/$pname"
+    install -m 644 -t "$out/share/licenses/$pname" \
+      "vmware.eula" "vmware-eula.rtf" "open_source_licenses.txt"
+
+    # documentation files
+    install -m 755 -d "$out/share/doc/$pname"
+    install -m 644 -t "$out/share/doc/$pname" "README.txt"
+
+    # binary wrapper; note that LC_CTYPE is defaulted to en_US.UTF-8 by
+    # VMWare's wrapper script. We use C.UTF-8 instead.
+    install -m 755 -d "$out/bin"
+    makeWrapper "$out/libexec/$pname/ovftool.bin" "$out/bin/ovftool" \
+      --set-default LC_CTYPE C.UTF-8 \
+      --prefix LD_LIBRARY_PATH : "$out/lib"
+
+    runHook postInstall
+  '';
+
+  preFixup = ''
+    addAutoPatchelfSearchPath "$out/lib"
+  '';
+
+  dontBuild = true;
+  dontPatch = true;
+  dontConfigure = true;
+
+  meta = with lib; {
+    description = "VMWare tools for working with OVF, OVA, and VMX images";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ numinit ];
+    platforms = builtins.attrNames ovftoolSystems;
+  };
+}
diff --git a/pkgs/tools/virtualization/rootlesskit/default.nix b/pkgs/tools/virtualization/rootlesskit/default.nix
index 224e7b33081..61da0d86e33 100644
--- a/pkgs/tools/virtualization/rootlesskit/default.nix
+++ b/pkgs/tools/virtualization/rootlesskit/default.nix
@@ -2,14 +2,14 @@
 
 buildGoPackage rec {
   pname = "rootlesskit";
-  version = "0.3.0-alpha.2";
+  version = "0.11.1";
   goPackagePath = "github.com/rootless-containers/rootlesskit";
 
   src = fetchFromGitHub {
     owner = "rootless-containers";
     repo = "rootlesskit";
     rev = "v${version}";
-    sha256 = "11y4hcrpayyyi9j3b80ilccxs5bbwnqfpi5nsjgmjb9v01z35fw6";
+    sha256 = "15k0503077ang9ywvmhpr1l7ax0v3wla0x8n6lqpmd71w0j2zm5r";
   };
 
   meta = with lib; {
diff --git a/pkgs/tools/virtualization/shipyard/default.nix b/pkgs/tools/virtualization/shipyard/default.nix
new file mode 100644
index 00000000000..cd8a4c36a92
--- /dev/null
+++ b/pkgs/tools/virtualization/shipyard/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "shipyard";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "shipyard-run";
+    repo = pname;
+    sha256 = "sha256-9eGaOSmHrJlcLOvZuLaNu8D/D/rWiyFb4ztxybUP0uM=";
+  };
+  vendorSha256 = "sha256-tTkPFftPDNXafIjAjNg6V6e/+2S/v5Do/YyAXPaGIqA=";
+
+  buildFlagsArray = [
+    "-ldflags=-s -w -X main.version=${version}"
+  ];
+
+  # Tests require a large variety of tools and resources to run including
+  # Kubernetes, Docker, and GCC.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Shipyard is a tool for building modern cloud native development environments";
+    homepage = "https://shipyard.run";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ cpcloud ];
+  };
+}
diff --git a/pkgs/tools/virtualization/udocker/default.nix b/pkgs/tools/virtualization/udocker/default.nix
index 00771b91750..fb067de8212 100644
--- a/pkgs/tools/virtualization/udocker/default.nix
+++ b/pkgs/tools/virtualization/udocker/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, proot, patchelf, fakechroot, runc, simplejson, pycurl, coreutils, nose, mock, buildPythonApplication }:
+{ lib, fetchFromGitHub, proot, patchelf, fakechroot, runc, simplejson, pycurl, coreutils, nose, mock, buildPythonApplication }:
 
 buildPythonApplication rec {
 
@@ -31,7 +31,7 @@ buildPythonApplication rec {
     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; {
+  meta = with 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;
diff --git a/pkgs/tools/virtualization/vpsfree-client/gemset.nix b/pkgs/tools/virtualization/vpsfree-client/gemset.nix
index 366c5836bd3..a1b4376f948 100644
--- a/pkgs/tools/virtualization/vpsfree-client/gemset.nix
+++ b/pkgs/tools/virtualization/vpsfree-client/gemset.nix
@@ -313,4 +313,4 @@
     };
     version = "2.3.0";
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/tools/virtualization/xe-guest-utilities/default.nix b/pkgs/tools/virtualization/xe-guest-utilities/default.nix
index e5c5b0978af..ab3c9b1e71c 100644
--- a/pkgs/tools/virtualization/xe-guest-utilities/default.nix
+++ b/pkgs/tools/virtualization/xe-guest-utilities/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, bzip2, lzo, zlib, xz, bash, python, gnutar, gnused, gnugrep, which }:
+{ lib, stdenv, fetchurl, bzip2, lzo, zlib, xz, bash, python, gnutar, gnused, gnugrep, which }:
 
 stdenv.mkDerivation (rec {
   pname = "xe-guest-utilities";
@@ -6,9 +6,9 @@ stdenv.mkDerivation (rec {
   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 ];
+    maintainers = with lib.maintainers; [ benwbooth ];
+    platforms = lib.platforms.linux;
+    license = [ lib.licenses.gpl2 lib.licenses.lgpl21 ];
   };
   src = fetchurl {
     url = "https://sources.archlinux.org/other/community/xe-guest-utilities/xe-guest-utilities_${version}-1120.tar.gz";
diff --git a/pkgs/tools/virtualization/xva-img/default.nix b/pkgs/tools/virtualization/xva-img/default.nix
new file mode 100644
index 00000000000..4fe2e5bbb40
--- /dev/null
+++ b/pkgs/tools/virtualization/xva-img/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, cmake, fetchFromGitHub, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "xva-img";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "eriklax";
+    repo = "xva-img";
+    rev = version;
+    sha256 = "sha256-QHCKGsHSMT2P64No1IUCjenm1XZMSgEvsJGJOyHFZS8=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ openssl ];
+
+  meta = {
+    maintainers = with lib.maintainers; [ lheckemann willibutz globin ];
+    description = "Tool for converting Xen images to raw and back";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/clipman/default.nix b/pkgs/tools/wayland/clipman/default.nix
index 80a0afe68d3..d5ed6ae88ff 100644
--- a/pkgs/tools/misc/clipman/default.nix
+++ b/pkgs/tools/wayland/clipman/default.nix
@@ -1,17 +1,22 @@
-{ buildGoModule, fetchFromGitHub, lib, wl-clipboard, makeWrapper }:
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, wl-clipboard
+, makeWrapper
+}:
 
 buildGoModule rec {
   pname = "clipman";
-  version = "1.5.2";
+  version = "1.6.0";
 
   src = fetchFromGitHub {
     owner = "yory8";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1lf5fbzplyc1mpdqgfwbrn8m5568vhjf48580fvvfgbhz6zcil8n";
+    sha256 = "sha256-Yq71nYNL3bFvwhVzrQ1g8n7/4tMmLuYUJ9pMBmxL8e8=";
   };
 
-  vendorSha256 = "18jw4z0lcrh00yjr3qdkgvlrpfwqbsm0ncz7fp1h72pzkh41byv7";
+  vendorSha256 = "sha256-Z/sVCJz/igPDdeczC6pemLub6X6z4ZGlBwBmRsEnXKI=";
 
   doCheck = false;
 
@@ -24,9 +29,9 @@ buildGoModule rec {
 
   meta = with lib; {
     homepage = "https://github.com/yory8/clipman";
-    license = licenses.gpl3;
-    maintainers = with maintainers; [ ma27 ];
     description = "A simple clipboard manager for Wayland";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ma27 ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/kanshi/default.nix b/pkgs/tools/wayland/kanshi/default.nix
index 0cb20315f66..6373af70b2e 100644
--- a/pkgs/tools/misc/kanshi/default.nix
+++ b/pkgs/tools/wayland/kanshi/default.nix
@@ -1,20 +1,29 @@
-{ stdenv, fetchFromGitHub, meson, ninja, pkg-config, scdoc, wayland }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, scdoc
+, wayland
+}:
 
 stdenv.mkDerivation rec {
   pname = "kanshi";
-  version = "1.1.0";
+  version = "1.2.0";
 
   src = fetchFromGitHub {
     owner = "emersion";
     repo = "kanshi";
     rev = "v${version}";
-    sha256 = "0nbpgm8qnn7ljsg9vgs35kl8l4rrk542vdcbx8wrn9r909ld3x92";
+    sha256 = "sha256-RVMeS2qEjTYK6r7IwMeFSqfRpKR8di2eQXhewfhTnYI=";
   };
 
   nativeBuildInputs = [ meson ninja pkg-config scdoc ];
   buildInputs = [ wayland ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
+    homepage = "https://github.com/emersion/kanshi";
     description = "Dynamic display configuration tool";
     longDescription = ''
       kanshi allows you to define output profiles that are automatically enabled
@@ -24,8 +33,6 @@ stdenv.mkDerivation rec {
       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/pkgs/tools/wayland/oguri/default.nix b/pkgs/tools/wayland/oguri/default.nix
new file mode 100644
index 00000000000..458ea310a01
--- /dev/null
+++ b/pkgs/tools/wayland/oguri/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, meson
+, ninja
+, cairo
+, gdk-pixbuf
+, wayland
+, wayland-protocols
+}:
+
+stdenv.mkDerivation rec {
+  pname = "oguri";
+  version = "unstable-2020-12-19";
+
+  src = fetchFromGitHub {
+    owner = "vilhalmer";
+    repo = pname;
+    rev = "6937fee10a9b0ef3ad8f94f606c0e0d9e7dec564";
+    sha256 = "sXNvpI/YPDPd2cXQAfRO4ut21gSCXxbo1DpaZmHJDYQ=";
+  };
+
+  nativeBuildInputs = [ pkg-config meson ninja ];
+  buildInputs = [
+    cairo
+    gdk-pixbuf
+    wayland
+    wayland-protocols
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/vilhalmer/oguri/";
+    description = "A very nice animated wallpaper daemon for Wayland compositors";
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/misc/slurp/default.nix b/pkgs/tools/wayland/slurp/default.nix
index dbec2324674..1105813550f 100644
--- a/pkgs/tools/misc/slurp/default.nix
+++ b/pkgs/tools/wayland/slurp/default.nix
@@ -1,38 +1,47 @@
-{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig
-, cairo, wayland, wayland-protocols
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, cairo
+, libxkbcommon
+, wayland
+, wayland-protocols
 , buildDocs ? true, scdoc
 }:
 
 stdenv.mkDerivation rec {
   pname = "slurp";
-  version = "1.2.0";
+  version = "1.3.2";
 
   src = fetchFromGitHub {
     owner = "emersion";
     repo = "slurp";
     rev = "v${version}";
-    sha256 = "0580m6kaiilgsrcj608r837r37sl6a25y7w21p7d6ij20fs3gvg1";
+    sha256 = "sha256-5ZB34rqLyZmfjT/clxNRDmF0qgITFZ5xt/gIEXQzvQE=";
   };
 
   nativeBuildInputs = [
     meson
     ninja
-    pkgconfig
-  ] ++ stdenv.lib.optional buildDocs scdoc;
+    pkg-config
+  ] ++ lib.optional buildDocs scdoc;
 
   buildInputs = [
     cairo
+    libxkbcommon
     wayland
     wayland-protocols
   ];
 
-  mesonFlags = stdenv.lib.optional buildDocs "-Dman-pages=enabled";
+  mesonFlags = lib.optional buildDocs "-Dman-pages=enabled";
 
-  meta = with stdenv.lib; {
+  meta = with 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 ];
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/wayland/swaycwd/default.nix b/pkgs/tools/wayland/swaycwd/default.nix
new file mode 100644
index 00000000000..36e223f8d4c
--- /dev/null
+++ b/pkgs/tools/wayland/swaycwd/default.nix
@@ -0,0 +1,45 @@
+{ lib, nim, stdenv, fetchFromGitLab
+, enableShells ? [ "bash" "zsh" "fish" "sh" "posh" ]
+}:
+
+stdenv.mkDerivation {
+    name = "swaycwd";
+    version = "0.0.1";
+
+    src = fetchFromGitLab {
+      owner = "cab404";
+      repo = "swaycwd";
+      rev = "aca81695ec2102b9bca6f5bae364f69a8b9d399f";
+      hash = "sha256-MkyY3wWByQo0l0J28xKDfGtxfazVPRyZHCObl9Fszh4=";
+    };
+
+    configurePhase = ''
+      runHook preConfigure
+      {
+        echo 'let enabledShells: seq[string] = @${builtins.toJSON enableShells}'
+        echo 'export enabledShells'
+      } > shells.nim
+      runHook postConfigure
+    '';
+
+    nativeBuildInputs = [ nim ];
+
+    buildPhase = ''
+      export HOME=$TMPDIR
+      nim c --opt:speed -d:release swaycwd.nim
+    '';
+
+    installPhase = ''
+      runHook preInstall
+      install -D -m555 -t $out/bin swaycwd
+      runHook postInstall
+    '';
+
+    meta = with lib; {
+      homepage = "https://gitlab.com/cab404/swaycwd";
+      description = "Returns cwd for shell in currently focused sway window, or home directory if cannot find shell";
+      maintainers = with maintainers; [ cab404 ];
+      platforms = platforms.linux;
+      license = licenses.gpl3Only;
+    };
+}
diff --git a/pkgs/tools/wayland/swaykbdd/default.nix b/pkgs/tools/wayland/swaykbdd/default.nix
new file mode 100644
index 00000000000..4584018596d
--- /dev/null
+++ b/pkgs/tools/wayland/swaykbdd/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, meson, ninja, json_c, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "swaykbdd";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "artemsen";
+    repo = "swaykbdd";
+    rev = "v${version}";
+    sha256 = "101mbf7pvm4ykmkh29g5xswrzdhdwq0rslzxqqfd5ksf1fphzgxd";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config ];
+  buildInputs = [ json_c ];
+
+  meta = with lib; {
+    description = "Per-window keyboard layout for Sway";
+    homepage = "https://github.com/artemsen/swaykbdd";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ivankovnatsky ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/wayland/swayr/default.nix b/pkgs/tools/wayland/swayr/default.nix
new file mode 100644
index 00000000000..24a830a7277
--- /dev/null
+++ b/pkgs/tools/wayland/swayr/default.nix
@@ -0,0 +1,30 @@
+{ lib, fetchFromSourcehut, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "swayr";
+  version = "0.6.1";
+
+  src = fetchFromSourcehut {
+    owner = "~tsdh";
+    repo = "swayr";
+    rev = "v${version}";
+    sha256 = "1865064q8jb75nfb0hbx4swbbijpibm0n7m4cid8qgylzp4bxvs2";
+  };
+
+  cargoSha256 = "0w6zjnywifdlaw01xz2824lwm4b6r1b7r99wi3p12vgbrmks4jcr";
+
+  patches = [
+    ./icon-paths.patch
+  ];
+
+  preCheck = ''
+    export HOME=$TMPDIR
+  '';
+
+  meta = with lib; {
+    description = "A window switcher (and more) for sway";
+    homepage = "https://git.sr.ht/~tsdh/swayr";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ artturin ];
+  };
+}
diff --git a/pkgs/tools/wayland/swayr/icon-paths.patch b/pkgs/tools/wayland/swayr/icon-paths.patch
new file mode 100644
index 00000000000..8fafc4c4153
--- /dev/null
+++ b/pkgs/tools/wayland/swayr/icon-paths.patch
@@ -0,0 +1,17 @@
+diff --git a/src/config.rs b/src/config.rs
+index de7d04b..291114b 100644
+--- a/src/config.rs
++++ b/src/config.rs
+@@ -197,6 +197,12 @@ impl Default for Format {
+             ),
+             urgency_end: Some("</span>".to_string()),
+             icon_dirs: Some(vec![
++                "/run/current-system/sw/share/icons/hicolor/scalable/apps".to_string(),
++                "/run/current-system/sw/share/icons/hicolor/48x48/apps".to_string(),
++                "/run/current-system/sw/share/pixmaps".to_string(),
++                "~/.nix-profile/share/icons/hicolor/scalable/apps".to_string(),
++                "~/.nix-profile/share/icons/hicolor/48x48/apps".to_string(),
++                "~/.nix-profile/share/pixmaps".to_string(),
+                 "/usr/share/icons/hicolor/scalable/apps".to_string(),
+                 "/usr/share/icons/hicolor/48x48/apps".to_string(),
+                 "/usr/share/pixmaps".to_string(),
diff --git a/pkgs/tools/wayland/wayland-proxy-virtwl/default.nix b/pkgs/tools/wayland/wayland-proxy-virtwl/default.nix
new file mode 100644
index 00000000000..8673200172e
--- /dev/null
+++ b/pkgs/tools/wayland/wayland-proxy-virtwl/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, fetchFromGitHub
+, ocamlPackages
+}:
+
+ocamlPackages.buildDunePackage rec {
+  pname = "wayland-proxy-virtwl";
+  version = "unstable-2021-04-15";
+
+  src = fetchFromGitHub {
+    owner = "talex5";
+    repo = pname;
+    rev = "09321a28f3d4c0fa7e41ebb3014106b62090b649";
+    sha256 = "03rc2jp5d2y9y7mfis6kk9gchd49gvq0jg6fq5gi9r21ckb4k5v4";
+  };
+
+  postPatch = ''
+    # no need to vendor
+    rm -r ocaml-wayland
+  '';
+
+  useDune2 = true;
+  minimumOCamlVersion = "4.08";
+
+  buildInputs = with ocamlPackages; [
+    wayland
+    cmdliner
+    logs
+  ];
+
+  meta = {
+    homepage = "https://github.com/talex5/wayland-virtwl-proxy";
+    description = "Proxy Wayland connections across a VM boundary";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.sternenseemann ];
+  };
+}
diff --git a/pkgs/tools/wayland/wayland-utils/default.nix b/pkgs/tools/wayland/wayland-utils/default.nix
index 23629309e52..16bce1723aa 100644
--- a/pkgs/tools/wayland/wayland-utils/default.nix
+++ b/pkgs/tools/wayland/wayland-utils/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchurl
-, meson, pkg-config, ninja
+{ lib, stdenv, fetchurl
+, meson, pkg-config, ninja, wayland-scanner
 , wayland, wayland-protocols
 }:
 
@@ -12,10 +12,10 @@ stdenv.mkDerivation rec {
     sha256 = "1h38l850ww6hxjb1l8iwa33nkbz8q88bw6lh0aryjyp8b16crzk4";
   };
 
-  nativeBuildInputs = [ meson pkg-config ninja wayland ];
+  nativeBuildInputs = [ meson pkg-config ninja wayland-scanner ];
   buildInputs = [ wayland wayland-protocols ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     description = "Wayland utilities (wayland-info)";
     longDescription = ''
       A collection of Wayland related utilities:
diff --git a/pkgs/tools/wayland/wdomirror/default.nix b/pkgs/tools/wayland/wdomirror/default.nix
new file mode 100644
index 00000000000..8fddf51f539
--- /dev/null
+++ b/pkgs/tools/wayland/wdomirror/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, wayland
+, wayland-protocols
+}:
+
+stdenv.mkDerivation {
+  pname = "wdomirror";
+  version = "unstable-2021-01-08";
+
+  src = fetchFromGitHub {
+    owner = "progandy";
+    repo = "wdomirror";
+    rev = "e4a4934e6f739909fbf346cbc001c72690b5c906";
+    sha256 = "1fz0sajhdjqas3l6mpik8w1k15wbv65hgh9r9vdgfqvw5l6cx7jv";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config wayland-protocols ];
+
+  buildInputs = [ wayland ];
+
+  installPhase = ''
+    runHook preInstall
+    install -m755 -D wdomirror $out/bin/wdomirror
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Mirrors an output of a wlroots compositor to a window";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ jpas ];
+  };
+}
diff --git a/pkgs/tools/misc/wev/default.nix b/pkgs/tools/wayland/wev/default.nix
index 0f033d1c7e2..d04cee342b7 100644
--- a/pkgs/tools/misc/wev/default.nix
+++ b/pkgs/tools/wayland/wev/default.nix
@@ -1,31 +1,39 @@
-{ stdenv, fetchurl
-, pkg-config, scdoc, wayland
-, wayland-protocols, libxkbcommon
+{ lib
+, stdenv
+, fetchFromSourcehut
+, pkg-config
+, scdoc
+, wayland-scanner
+, wayland
+, wayland-protocols
+, libxkbcommon
 }:
 
 stdenv.mkDerivation rec {
   pname = "wev";
   version = "1.0.0";
 
-  src = fetchurl {
-    url = "https://git.sr.ht/~sircmpwn/wev/archive/${version}.tar.gz";
-    sha256 = "0vlxdkb59v6nb10j28gh1a56sx8jk7ak7liwzv911kpmygnls03g";
+  src = fetchFromSourcehut {
+    owner = "~sircmpwn";
+    repo = pname;
+    rev = version;
+    sha256 = "0l71v3fzgiiv6xkk365q1l08qvaymxd4kpaya6r2g8yzkr7i2hms";
   };
 
-  nativeBuildInputs = [ pkg-config scdoc wayland ];
-  buildInputs = [ wayland-protocols libxkbcommon ];
+  nativeBuildInputs = [ pkg-config scdoc wayland-scanner ];
+  buildInputs = [ wayland wayland-protocols libxkbcommon ];
 
   installFlags = [ "PREFIX=$(out)" ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
+    homepage = "https://git.sr.ht/~sircmpwn/wev";
     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 ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/wl-clipboard/default.nix b/pkgs/tools/wayland/wl-clipboard/default.nix
index 66a61378557..0bc195e9626 100644
--- a/pkgs/tools/misc/wl-clipboard/default.nix
+++ b/pkgs/tools/wayland/wl-clipboard/default.nix
@@ -1,5 +1,12 @@
-{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig
-, wayland, wayland-protocols }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, wayland
+, wayland-protocols
+}:
 
 stdenv.mkDerivation rec {
   pname = "wl-clipboard";
@@ -12,14 +19,15 @@ stdenv.mkDerivation rec {
     sha256 = "0c4w87ipsw09aii34szj9p0xfy0m00wyjpll0gb0aqmwa60p0c5d";
   };
 
-  nativeBuildInputs = [ meson ninja pkgconfig wayland-protocols ];
+  nativeBuildInputs = [ meson ninja pkg-config wayland-protocols ];
   buildInputs = [ wayland ];
 
-  meta = with stdenv.lib; {
-    description = "Command-line copy/paste utilities for Wayland";
+  meta = with lib; {
     homepage = "https://github.com/bugaevc/wl-clipboard";
-    license = licenses.gpl3;
+    description = "Command-line copy/paste utilities for Wayland";
+    license = licenses.gpl3Plus;
     maintainers = with maintainers; [ dywedir ];
     platforms = platforms.linux;
   };
 }
+# TODO: is wayland-protocols a nativeBuildInput or a buildInput?
diff --git a/pkgs/tools/wayland/wlogout/default.nix b/pkgs/tools/wayland/wlogout/default.nix
new file mode 100644
index 00000000000..2625405808c
--- /dev/null
+++ b/pkgs/tools/wayland/wlogout/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, meson
+, ninja
+, scdoc
+, gtk3
+, libxkbcommon
+, wayland
+, wayland-protocols
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wlogout";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "ArtsyMacaw";
+    repo = "wlogout";
+    rev = version;
+    sha256 = "cTscfx+erHVFHwwYpN7pADQWt5sq75sQSyXSP/H8kOs=";
+  };
+
+  nativeBuildInputs = [ pkg-config meson ninja scdoc ];
+  buildInputs = [
+    gtk3
+    libxkbcommon
+    wayland
+    wayland-protocols
+  ];
+
+  postPatch = ''
+    substituteInPlace style.css \
+      --replace "/usr/share/wlogout" "$out/share/${pname}"
+
+    substituteInPlace main.c \
+      --replace "/etc/wlogout" "$out/etc/${pname}"
+  '';
+
+  mesonFlags = [
+    "--datadir=${placeholder "out"}/share"
+    "--sysconfdir=${placeholder "out"}/etc"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/ArtsyMacaw/wlogout";
+    description = "A wayland based logout menu";
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
+# TODO: shell completions
diff --git a/pkgs/tools/misc/wlr-randr/default.nix b/pkgs/tools/wayland/wlr-randr/default.nix
index 7bdffb6f722..e2c941998a9 100644
--- a/pkgs/tools/misc/wlr-randr/default.nix
+++ b/pkgs/tools/wayland/wlr-randr/default.nix
@@ -1,23 +1,31 @@
-{ stdenv, fetchFromGitHub, meson, ninja, cmake, pkgconfig, wayland }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, wayland
+}:
 
 stdenv.mkDerivation rec {
   pname = "wlr-randr";
-  version = "0.1.0";
+  version = "0.2.0";
 
   src = fetchFromGitHub {
     owner = "emersion";
     repo = pname;
     rev = "v${version}";
-    sha256 = "10c8zzp78s5bw34vvjhilipa28bsdx3jbyhnxgp8f8kawh3cvgsc";
+    sha256 = "sha256-JeSxFXSFxcTwJz9EaLb18wtD4ZIT+ATeYM5OyDTJhDQ=";
   };
 
-  nativeBuildInputs = [ meson ninja cmake pkgconfig ];
+  nativeBuildInputs = [ meson ninja pkg-config ];
   buildInputs = [ wayland ];
 
-  meta = with stdenv.lib; {
-    license = licenses.mit;
+  meta = with lib; {
     description = "An xrandr clone for wlroots compositors";
     homepage = "https://github.com/emersion/wlr-randr";
+    license = licenses.mit;
     maintainers = with maintainers; [ ma27 ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/wayland/wlrctl/default.nix b/pkgs/tools/wayland/wlrctl/default.nix
new file mode 100644
index 00000000000..7cb54d381b0
--- /dev/null
+++ b/pkgs/tools/wayland/wlrctl/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromSourcehut, meson, pkg-config, scdoc, ninja, libxkbcommon, wayland }:
+
+stdenv.mkDerivation rec {
+  pname = "wlrctl";
+  version = "0.2.1";
+
+  src = fetchFromSourcehut {
+    owner = "~brocellous";
+    repo = "wlrctl";
+    rev = "v${version}";
+    sha256 = "039cxc82k7x473n6d65jray90rj35qmfdmr390zy0c7ic7vn4b78";
+  };
+
+  nativeBuildInputs = [ meson pkg-config scdoc ninja ];
+  buildInputs = [ libxkbcommon wayland ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-error=type-limits";
+
+  meta = with lib; {
+    description = "Command line utility for miscellaneous wlroots Wayland extensions";
+    homepage = "https://git.sr.ht/~brocellous/wlrctl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ puffnfresh artturin ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/tools/wayland/wlsunset/default.nix b/pkgs/tools/wayland/wlsunset/default.nix
new file mode 100644
index 00000000000..7ced81616f6
--- /dev/null
+++ b/pkgs/tools/wayland/wlsunset/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromSourcehut
+, meson, pkg-config, ninja, wayland-scanner, scdoc
+, wayland, wayland-protocols
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wlsunset";
+  version = "0.2.0";
+
+  src = fetchFromSourcehut {
+    owner = "~kennylevinsen";
+    repo = pname;
+    rev = version;
+    sha256 = "0hhsddh3rs066rbsjksr8kcwg8lvglbvs67dq0r5wx5c1xcwb51w";
+  };
+
+  nativeBuildInputs = [ meson pkg-config ninja wayland-scanner scdoc ];
+  buildInputs = [ wayland wayland-protocols ];
+
+  meta = with lib; {
+    description = "Day/night gamma adjustments for Wayland";
+    longDescription = ''
+      Day/night gamma adjustments for Wayland compositors supporting
+      wlr-gamma-control-unstable-v1.
+    '';
+    homepage = "https://sr.ht/~kennylevinsen/wlsunset/";
+    changelog = "https://git.sr.ht/~kennylevinsen/wlsunset/refs/${version}";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/pkgs/tools/misc/wob/default.nix b/pkgs/tools/wayland/wob/default.nix
index a619a43c9f1..07fd6f433d7 100644
--- a/pkgs/tools/misc/wob/default.nix
+++ b/pkgs/tools/wayland/wob/default.nix
@@ -1,35 +1,43 @@
-{ stdenv, fetchFromGitHub
-, meson, ninja, pkg-config, scdoc, wayland # wayland-scanner
-, wayland-protocols, libseccomp
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, scdoc
+, wayland-scanner
+, wayland
+, wayland-protocols
+, libseccomp
 }:
 
 stdenv.mkDerivation rec {
   pname = "wob";
-  version = "0.10";
+  version = "0.11";
 
   src = fetchFromGitHub {
     owner = "francma";
     repo = pname;
     rev = version;
-    sha256 = "0v7xm8zd9237v5j5h79pd0x6dkal5fgg1ly9knssjpv3hswwyv40";
+    sha256 = "13mx6nzab6msp57s9mv9ambz53a4zkafms9v97xv5zvd6xarnrya";
   };
 
-  nativeBuildInputs = [ meson ninja pkg-config scdoc wayland ];
-  buildInputs = [ wayland-protocols ]
-    ++ stdenv.lib.optional stdenv.isLinux libseccomp;
+  nativeBuildInputs = [ meson ninja pkg-config scdoc wayland-scanner ];
+  buildInputs = [ wayland wayland-protocols ]
+    ++ lib.optional stdenv.isLinux libseccomp;
 
-  mesonFlags = stdenv.lib.optional stdenv.isLinux "-Dseccomp=enabled";
+  mesonFlags = lib.optional stdenv.isLinux "-Dseccomp=enabled";
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
+    inherit (src.meta) homepage;
     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;
     changelog = "https://github.com/francma/wob/releases/tag/${version}";
     license = licenses.isc;
-    platforms = platforms.unix;
     maintainers = with maintainers; [ primeos ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/wayland/wshowkeys/default.nix b/pkgs/tools/wayland/wshowkeys/default.nix
new file mode 100644
index 00000000000..00dc1d74910
--- /dev/null
+++ b/pkgs/tools/wayland/wshowkeys/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromSourcehut
+, meson, pkg-config, wayland-scanner, ninja
+, cairo, libinput, pango, wayland, wayland-protocols, libxkbcommon
+}:
+
+let
+  version = "2020-03-29";
+  commit = "6388a49e0f431d6d5fcbd152b8ae4fa8e87884ee";
+in stdenv.mkDerivation rec {
+  pname = "wshowkeys-unstable";
+  inherit version;
+
+  src = fetchFromSourcehut {
+    owner = "~sircmpwn";
+    repo = "wshowkeys";
+    rev = commit;
+    sha256 = "10kafdja5cwbypspwhvaxjz3hvf51vqjzbgdasl977193cvxgmbs";
+  };
+
+  nativeBuildInputs = [ meson pkg-config wayland-scanner ninja ];
+  buildInputs = [ cairo libinput pango wayland wayland-protocols libxkbcommon ];
+
+  meta = with lib; {
+    description = "Displays keys being pressed on a Wayland session";
+    longDescription = ''
+      Displays keypresses on screen on supported Wayland compositors (requires
+      wlr_layer_shell_v1 support).
+      Note: This tool requires root permissions to read input events, but these
+      permissions are dropped after startup. The NixOS module provides such a
+      setuid binary (use "programs.wshowkeys.enable = true;").
+    '';
+    homepage = "https://git.sr.ht/~sircmpwn/wshowkeys";
+    license = with licenses; [ gpl3Only mit ];
+    # Some portions of the code are taken from Sway which is MIT licensed.
+    # TODO: gpl3Only or gpl3Plus (ask upstream)?
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ primeos berbiche ];
+    broken = true; # Unmaintained and fails to run (Wayland protocol error)
+    # TODO (@primeos): Remove this package after the NixOS 21.11 branch-off
+  };
+}
diff --git a/pkgs/tools/wayland/wtype/default.nix b/pkgs/tools/wayland/wtype/default.nix
new file mode 100644
index 00000000000..3476f3abcda
--- /dev/null
+++ b/pkgs/tools/wayland/wtype/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+
+, meson
+, ninja
+, pkg-config
+
+, libxkbcommon
+, wayland
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wtype";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "atx";
+    repo = "wtype";
+    rev = "v${version}";
+    hash = "sha256-8q2PxI3ItR4tsP/KOiSlqnuK4ZSe7OdekheolEFVmys=";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config wayland ];
+  buildInputs = [ libxkbcommon wayland ];
+
+  meta = with lib; {
+    description = "xdotool type for wayland";
+    homepage = "https://github.com/atx/wtype";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ justinlovinger ];
+  };
+}
diff --git a/pkgs/tools/wayland/ydotool/default.nix b/pkgs/tools/wayland/ydotool/default.nix
index d8b6ad4ff87..4a75eac8c57 100644
--- a/pkgs/tools/wayland/ydotool/default.nix
+++ b/pkgs/tools/wayland/ydotool/default.nix
@@ -1,29 +1,37 @@
-{ stdenv, fetchFromGitHub, pkgconfig, cmake, boost, libevdevplus, libuinputplus }:
+{ lib, stdenv, fetchFromGitHub, pkg-config, cmake, boost, libevdevplus, libuinputplus, iodash, cxxopts}:
 
 stdenv.mkDerivation rec {
   pname = "ydotool";
-  version = "0.1.8";
+  version = "unstable-2021-01-20";
 
   src = fetchFromGitHub {
     owner = "ReimuNotMoe";
     repo = "ydotool";
-    rev = "v${version}";
-    sha256 = "0mx3636p0f8pznmwm4rlbwq7wrmjb2ygkf8b3a6ps96a7j1fw39l";
+    rev = "b1d041f52f7bac364d6539b1251d29c3b77c0f37";
+    sha256 = "1gzdbx6fv0dbcyia3yyzhv93az2gf90aszb9kcj5cnxywfpv9w9g";
   };
 
-  # disable static linking
+  # upstream decided to use a cpp package manager called cpm.
+  # we need to disable that because it wants networking, furthermore,
+  # it does some system folder creating which also needs to be disabled.
+  # Both changes are to respect the sandbox.
+  patches = [ ./fixup-cmakelists.patch ];
+
+
+  # cxxopts is a header only library.
+  # See pull request: https://github.com/ReimuNotMoe/ydotool/pull/105
   postPatch = ''
     substituteInPlace CMakeLists.txt --replace \
-      "-static" \
-      ""
+      "PUBLIC cxxopts" \
+      "PUBLIC"
   '';
 
-  nativeBuildInputs = [ cmake pkgconfig ];
+  nativeBuildInputs = [ cmake pkg-config ];
   buildInputs = [
-    boost libevdevplus libuinputplus
+    boost libevdevplus libuinputplus iodash cxxopts
   ];
 
-  meta = with stdenv.lib; {
+  meta = with lib; {
     inherit (src.meta) homepage;
     description = "Generic Linux command-line automation tool";
     license = licenses.mit;
diff --git a/pkgs/tools/wayland/ydotool/fixup-cmakelists.patch b/pkgs/tools/wayland/ydotool/fixup-cmakelists.patch
new file mode 100644
index 00000000000..965d5c38d83
--- /dev/null
+++ b/pkgs/tools/wayland/ydotool/fixup-cmakelists.patch
@@ -0,0 +1,58 @@
+From bb8bc44d22060cd1215712117cf30eae09f4f6ba Mon Sep 17 00:00:00 2001
+From: Jappie Klooster <jappieklooster@hotmail.com>
+Date: Fri, 2 Apr 2021 14:04:14 -0400
+Subject: [PATCH] Fixup cmaklists
+
+We remove cpm, which is a package manager for c++,
+which requires networking, so it's better just deleted.
+
+Furthermore we delete the adddirectory statements.
+These want to modify directories outside of the sandbox.
+---
+ CMakeLists.txt | 26 --------------------------
+ 1 file changed, 26 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index b5e8789..b797538 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -13,30 +13,6 @@ endif()
+ 
+ include(${CPM_DOWNLOAD_LOCATION})
+ 
+-CPMAddPackage(
+-        NAME IODash
+-        GITHUB_REPOSITORY YukiWorkshop/IODash
+-        VERSION 0.1.0
+-)
+-
+-CPMAddPackage(
+-        NAME libevdevPlus
+-        GITHUB_REPOSITORY YukiWorkshop/libevdevPlus
+-        VERSION 0.2.1
+-)
+-
+-CPMAddPackage(
+-        NAME libuInputPlus
+-        GITHUB_REPOSITORY YukiWorkshop/libuInputPlus
+-        VERSION 0.2.1
+-)
+-
+-CPMAddPackage(
+-        NAME cxxopts
+-        GITHUB_REPOSITORY jarro2783/cxxopts
+-        VERSION 3.0.0
+-        GIT_TAG 2d8e17c4f88efce80e274cb03eeb902e055a91d3
+-)
+ 
+ set(SOURCE_FILES_LIBRARY
+         CommonIncludes.hpp
+@@ -74,5 +50,3 @@ add_executable(ydotool ${SOURCE_FILES_CLIENT})
+ target_link_libraries(ydotool ydotool_library dl pthread uInputPlus evdevPlus)
+ install(TARGETS ydotool DESTINATION ${CMAKE_INSTALL_BINDIR})
+ 
+-add_subdirectory(Daemon)
+-add_subdirectory(manpage)
+-- 
+2.29.2
+